From 705c62b3883a9aa3619deca79ec6e0515cbe2c4a Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 02:22:43 -0400
Subject: [PATCH 01/56] Add devfest-authorized-page.test.js and Update test.js
---
gulp/test.js | 3 ++-
.../devfest-authorized-page.test.js | 14 ++++++++++++++
2 files changed, 16 insertions(+), 1 deletion(-)
create mode 100644 src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.test.js
diff --git a/gulp/test.js b/gulp/test.js
index 261c1af..0a1a4e3 100644
--- a/gulp/test.js
+++ b/gulp/test.js
@@ -1,2 +1,3 @@
import '../core/shell/index.test'
-import '../src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.test'
\ No newline at end of file
+import '../src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.test'
+import '../src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.test'
\ No newline at end of file
diff --git a/src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.test.js b/src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.test.js
new file mode 100644
index 0000000..c98c6fb
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.test.js
@@ -0,0 +1,14 @@
+import { expect } from 'chai'
+import page from './devfest-authorized-page'
+
+describe('Devfest authorized page', () => {
+
+ it('should exist', () => {
+ expect(page).to.exist
+ })
+
+ it('should work', () => {
+ const el = document.createElement('devfest-authorized-page')
+ expect(el.constructor.is).to.equal('devfest-authorized-page')
+ })
+})
\ No newline at end of file
From b39ce3c7a0396f4b05bdfb2ef41f835ccdc6e520 Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 02:24:50 -0400
Subject: [PATCH 02/56] Update test.js
---
gulp/test.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/gulp/test.js b/gulp/test.js
index 0a1a4e3..2634f86 100644
--- a/gulp/test.js
+++ b/gulp/test.js
@@ -1,3 +1,4 @@
import '../core/shell/index.test'
import '../src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.test'
-import '../src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.test'
\ No newline at end of file
+import '../src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.test'
+import '../src/modules/devfest-module/pages/devfest-not-authorized-page/devfes-not-authorized-page.test'
\ No newline at end of file
From 2a18ae00dc941ea776c6dec9860fe87911b05875 Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 02:31:20 -0400
Subject: [PATCH 03/56] Add devfest-not-authorized-page.test.js
---
.../devfes-not-authorized-page.test.js | 14 ++++++++++++++
1 file changed, 14 insertions(+)
create mode 100644 src/modules/devfest-module/pages/devfest-not-authorized-page/devfes-not-authorized-page.test.js
diff --git a/src/modules/devfest-module/pages/devfest-not-authorized-page/devfes-not-authorized-page.test.js b/src/modules/devfest-module/pages/devfest-not-authorized-page/devfes-not-authorized-page.test.js
new file mode 100644
index 0000000..ba1ea3c
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-not-authorized-page/devfes-not-authorized-page.test.js
@@ -0,0 +1,14 @@
+import { expect } from 'chai'
+import page from './devfest-not-authorized-page'
+
+describe('Devfest not authorized page', () => {
+
+ it('should exist', () => {
+ expect(page).to.exist
+ })
+
+ it('should work', () => {
+ const el = document.createElement('devfest-not-authorized-page')
+ expect(el.constructor.is).to.equal('devfest-not-authorized-page')
+ })
+})
\ No newline at end of file
From 84b17cabd98b10a7663d9494248336bc3c8bf4a4 Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 02:39:37 -0400
Subject: [PATCH 04/56] Update test.js
---
gulp/test.js | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/gulp/test.js b/gulp/test.js
index 2634f86..22ceceb 100644
--- a/gulp/test.js
+++ b/gulp/test.js
@@ -1,4 +1,5 @@
import '../core/shell/index.test'
-import '../src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.test'
import '../src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.test'
-import '../src/modules/devfest-module/pages/devfest-not-authorized-page/devfes-not-authorized-page.test'
\ No newline at end of file
+import '../src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.test'
+import '../src/modules/devfest-module/pages/devfest-not-authorized-page/devfes-not-authorized-page.test'
+import '../src/modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.test'
From b9f2c9cd91ae1a129c435b5ae055b484dc61edd8 Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 02:43:07 -0400
Subject: [PATCH 05/56] Add devfest-tickets-page.test.js
---
.../devfest-tickets-page.test.js | 14 ++++++++++++++
1 file changed, 14 insertions(+)
create mode 100644 src/modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.test.js
diff --git a/src/modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.test.js b/src/modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.test.js
new file mode 100644
index 0000000..6b1ee3e
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.test.js
@@ -0,0 +1,14 @@
+import { expect } from 'chai'
+import page from './devfest-tickets-page'
+
+describe('Devfest tickets page', () => {
+
+ it('should exist', () => {
+ expect(page).to.exist
+ })
+
+ it('should work', () => {
+ const el = document.createElement('devfest-tickets-page')
+ expect(el.constructor.is).to.equal('devfest-tickets-page')
+ })
+})
\ No newline at end of file
From a32eec3d533aa4894a16f3403c544356433db887 Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 02:47:16 -0400
Subject: [PATCH 06/56] Update test.js
---
gulp/test.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/gulp/test.js b/gulp/test.js
index 22ceceb..318ecba 100644
--- a/gulp/test.js
+++ b/gulp/test.js
@@ -2,4 +2,5 @@ import '../core/shell/index.test'
import '../src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.test'
import '../src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.test'
import '../src/modules/devfest-module/pages/devfest-not-authorized-page/devfes-not-authorized-page.test'
+import '../src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.test'
import '../src/modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.test'
From 99ab2e25ab26d4be7102375b882042fff9de088c Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 02:50:10 -0400
Subject: [PATCH 07/56] Add devfest-sponsors-page.test.js
---
.../devfest-sponsors-page.test.js | 14 ++++++++++++++
1 file changed, 14 insertions(+)
create mode 100644 src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.test.js
diff --git a/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.test.js b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.test.js
new file mode 100644
index 0000000..296aeca
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.test.js
@@ -0,0 +1,14 @@
+import { expect } from 'chai'
+import page from './devfest-sponsors-page'
+
+describe('Devfest sponsors page', () => {
+
+ it('should exist', () => {
+ expect(page).to.exist
+ })
+
+ it('should work', () => {
+ const el = document.createElement('devfest-sponsors-page')
+ expect(el.constructor.is).to.equal('devfest-sponsors-page')
+ })
+})
\ No newline at end of file
From 319b2f920069cc8eceb5c38e16722aacc844f9bf Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 02:52:58 -0400
Subject: [PATCH 08/56] Update test.js
---
gulp/test.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/gulp/test.js b/gulp/test.js
index 318ecba..4ff310b 100644
--- a/gulp/test.js
+++ b/gulp/test.js
@@ -2,5 +2,6 @@ import '../core/shell/index.test'
import '../src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.test'
import '../src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.test'
import '../src/modules/devfest-module/pages/devfest-not-authorized-page/devfes-not-authorized-page.test'
+import '../src/modules/devfest-module/pages/devfest-speakers-page/devfest-speakers-page.test'
import '../src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.test'
import '../src/modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.test'
From 193d198435186b480767449faf3e9a4be4f2c3c0 Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 02:55:42 -0400
Subject: [PATCH 09/56] Add devfest-speakers-page.test.js
---
.../devfest-speakers-page.test.js | 14 ++++++++++++++
1 file changed, 14 insertions(+)
create mode 100644 src/modules/devfest-module/pages/devfest-speakers-page/devfest-speakers-page.test.js
diff --git a/src/modules/devfest-module/pages/devfest-speakers-page/devfest-speakers-page.test.js b/src/modules/devfest-module/pages/devfest-speakers-page/devfest-speakers-page.test.js
new file mode 100644
index 0000000..0f26252
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-speakers-page/devfest-speakers-page.test.js
@@ -0,0 +1,14 @@
+import { expect } from 'chai'
+import page from './devfest-speakers-page'
+
+describe('Devfest speakers page', () => {
+
+ it('should exist', () => {
+ expect(page).to.exist
+ })
+
+ it('should work', () => {
+ const el = document.createElement('devfest-speakers-page')
+ expect(el.constructor.is).to.equal('devfest-speakers-page')
+ })
+})
\ No newline at end of file
From c60d554fdcc07b3a354caf0bf83cc20890db8a5f Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 02:56:33 -0400
Subject: [PATCH 10/56] Update test.js
---
gulp/test.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/gulp/test.js b/gulp/test.js
index 4ff310b..d5cb7fc 100644
--- a/gulp/test.js
+++ b/gulp/test.js
@@ -2,6 +2,7 @@ import '../core/shell/index.test'
import '../src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.test'
import '../src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.test'
import '../src/modules/devfest-module/pages/devfest-not-authorized-page/devfes-not-authorized-page.test'
+import '../src/modules/devfest-module/pages/devfest-speaker-page/devfest-speaker-page.test'
import '../src/modules/devfest-module/pages/devfest-speakers-page/devfest-speakers-page.test'
import '../src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.test'
import '../src/modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.test'
From 69d64644edc3cdb91931d000f4fde3ff9d128654 Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 03:00:10 -0400
Subject: [PATCH 11/56] Add devfest-speaker-page.test.js
---
.../devfest-speaker-page.test.js | 14 ++++++++++++++
1 file changed, 14 insertions(+)
create mode 100644 src/modules/devfest-module/pages/devfest-speaker-page/devfest-speaker-page.test.js
diff --git a/src/modules/devfest-module/pages/devfest-speaker-page/devfest-speaker-page.test.js b/src/modules/devfest-module/pages/devfest-speaker-page/devfest-speaker-page.test.js
new file mode 100644
index 0000000..905ddf7
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-speaker-page/devfest-speaker-page.test.js
@@ -0,0 +1,14 @@
+import { expect } from 'chai'
+import page from './devfest-speaker-page'
+
+describe('Devfest speaker page', () => {
+
+ it('should exist', () => {
+ expect(page).to.exist
+ })
+
+ it('should work', () => {
+ const el = document.createElement('devfest-speaker-page')
+ expect(el.constructor.is).to.equal('devfest-speaker-page')
+ })
+})
\ No newline at end of file
From 7ec7b50fd71fc1cc000b0d292bd44c9c89b07fb0 Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 03:00:55 -0400
Subject: [PATCH 12/56] Update test.js
---
gulp/test.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/gulp/test.js b/gulp/test.js
index d5cb7fc..614abf1 100644
--- a/gulp/test.js
+++ b/gulp/test.js
@@ -2,6 +2,7 @@ import '../core/shell/index.test'
import '../src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.test'
import '../src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.test'
import '../src/modules/devfest-module/pages/devfest-not-authorized-page/devfes-not-authorized-page.test'
+import '../src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.test'
import '../src/modules/devfest-module/pages/devfest-speaker-page/devfest-speaker-page.test'
import '../src/modules/devfest-module/pages/devfest-speakers-page/devfest-speakers-page.test'
import '../src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.test'
From d7c002c098082489e11d341cd496b08cd7fd41b7 Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 03:02:17 -0400
Subject: [PATCH 13/56] Add devfest-sessions-page.test.js
---
.../devfest-sessions-page.test.js | 14 ++++++++++++++
1 file changed, 14 insertions(+)
create mode 100644 src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.test.js
diff --git a/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.test.js b/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.test.js
new file mode 100644
index 0000000..23f1451
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.test.js
@@ -0,0 +1,14 @@
+import { expect } from 'chai'
+import page from './devfest-sessions-page'
+
+describe('Devfest sessions page', () => {
+
+ it('should exist', () => {
+ expect(page).to.exist
+ })
+
+ it('should work', () => {
+ const el = document.createElement('devfest-sessions-page')
+ expect(el.constructor.is).to.equal('devfest-sessions-page')
+ })
+})
\ No newline at end of file
From 50f6029ebfe6db09be02a0c7a5b56bbca2d9b0e6 Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 03:03:38 -0400
Subject: [PATCH 14/56] Update test.js
---
gulp/test.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/gulp/test.js b/gulp/test.js
index 614abf1..7f10be5 100644
--- a/gulp/test.js
+++ b/gulp/test.js
@@ -2,6 +2,7 @@ import '../core/shell/index.test'
import '../src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.test'
import '../src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.test'
import '../src/modules/devfest-module/pages/devfest-not-authorized-page/devfes-not-authorized-page.test'
+import '../src/modules/devfest-module/pages/devfest-session-page/devfest-session-page.test'
import '../src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.test'
import '../src/modules/devfest-module/pages/devfest-speaker-page/devfest-speaker-page.test'
import '../src/modules/devfest-module/pages/devfest-speakers-page/devfest-speakers-page.test'
From 86f03781fb1907d2bdc5397c05810f523bc5cabd Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 03:04:04 -0400
Subject: [PATCH 15/56] Add devfest-session-page.test.js
---
.../devfest-session-page.test.js | 14 ++++++++++++++
1 file changed, 14 insertions(+)
create mode 100644 src/modules/devfest-module/pages/devfest-session-page/devfest-session-page.test.js
diff --git a/src/modules/devfest-module/pages/devfest-session-page/devfest-session-page.test.js b/src/modules/devfest-module/pages/devfest-session-page/devfest-session-page.test.js
new file mode 100644
index 0000000..1411583
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-session-page/devfest-session-page.test.js
@@ -0,0 +1,14 @@
+import { expect } from 'chai'
+import page from './devfest-session-page'
+
+describe('Devfest session page', () => {
+
+ it('should exist', () => {
+ expect(page).to.exist
+ })
+
+ it('should work', () => {
+ const el = document.createElement('devfest-session-page')
+ expect(el.constructor.is).to.equal('devfest-session-page')
+ })
+})
\ No newline at end of file
From d0bb5d78720e09ef14ce688bc58fb743b5faa5aa Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 03:10:51 -0400
Subject: [PATCH 16/56] Update test.js devfest-not-found-page.test.js
---
gulp/test.js | 1 +
.../devfest-not-found-page.test.js | 14 ++++++++++++++
2 files changed, 15 insertions(+)
create mode 100644 src/modules/devfest-module/pages/devfest-not-found-page/devfest-not-found-page.test.js
diff --git a/gulp/test.js b/gulp/test.js
index 7f10be5..4465202 100644
--- a/gulp/test.js
+++ b/gulp/test.js
@@ -2,6 +2,7 @@ import '../core/shell/index.test'
import '../src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.test'
import '../src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.test'
import '../src/modules/devfest-module/pages/devfest-not-authorized-page/devfes-not-authorized-page.test'
+import '../src/modules/devfest-module/pages/devfest-not-found-page/devfest-not-found-page.test'
import '../src/modules/devfest-module/pages/devfest-session-page/devfest-session-page.test'
import '../src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.test'
import '../src/modules/devfest-module/pages/devfest-speaker-page/devfest-speaker-page.test'
diff --git a/src/modules/devfest-module/pages/devfest-not-found-page/devfest-not-found-page.test.js b/src/modules/devfest-module/pages/devfest-not-found-page/devfest-not-found-page.test.js
new file mode 100644
index 0000000..df8fd24
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-not-found-page/devfest-not-found-page.test.js
@@ -0,0 +1,14 @@
+import { expect } from 'chai'
+import page from './devfest-not-found-page'
+
+describe('Devfest not found page', () => {
+
+ it('should exist', () => {
+ expect(page).to.exist
+ })
+
+ it('should work', () => {
+ const el = document.createElement('devfest-not-found-page')
+ expect(el.constructor.is).to.equal('devfest-not-found-page')
+ })
+})
\ No newline at end of file
From 84674ad735f480dfffbc22a888e2096ad95a1ab9 Mon Sep 17 00:00:00 2001
From: Rokuto
Date: Tue, 10 Oct 2017 04:08:54 -0400
Subject: [PATCH 17/56] Error at devfest-speaker-page.test.js back button
should exist
---
.../pages/devfest-speaker-page/devfest-speaker-page.test.js | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/modules/devfest-module/pages/devfest-speaker-page/devfest-speaker-page.test.js b/src/modules/devfest-module/pages/devfest-speaker-page/devfest-speaker-page.test.js
index 905ddf7..72fb01a 100644
--- a/src/modules/devfest-module/pages/devfest-speaker-page/devfest-speaker-page.test.js
+++ b/src/modules/devfest-module/pages/devfest-speaker-page/devfest-speaker-page.test.js
@@ -11,4 +11,10 @@ describe('Devfest speaker page', () => {
const el = document.createElement('devfest-speaker-page')
expect(el.constructor.is).to.equal('devfest-speaker-page')
})
+
+ it('back button should exist', () => {
+ const el = document.createElement('devfest-speaker-page')
+ const ret = el.shadowRoot.querySelector("section.back-section devfest-button[href='/speakers']")
+ expect(ret).to.exist
+ })
})
\ No newline at end of file
From bb5582af90050575baba1bc042b100e99a2ff35e Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Tue, 10 Oct 2017 16:26:10 +0800
Subject: [PATCH 18/56] added state manager
Signed-off-by: Toni-Jan Keith Monserrat
---
.../mixins/app-network-status-mixin.html | 56 --
.../modules/firebase-property-mixin/.bowerrc | 1 -
.../firebase-property-mixin/bower.json | 22 -
.../mixins/firebase-property-mixin.html | 815 ------------------
.../scripts/pouchdb.html | 3 -
archive/core/modules/permission-data/.bowerrc | 1 -
.../core/modules/permission-data/bower.json | 15 -
.../models/permission-data.html | 50 --
.../permission-data/reducers/reducers.html | 11 -
.../core/modules/polyapp-location/.bowerrc | 1 -
.../core/modules/polyapp-location/bower.json | 20 -
.../components/polyapp-location.html | 387 ---------
.../components/polyapp-query-params.html | 107 ---
archive/core/modules/polyapp-router/.bowerrc | 1 -
.../core/modules/polyapp-router/bower.json | 20 -
.../components/polyapp-router.html | 499 -----------
archive/core/modules/polyapp-toast/.bowerrc | 1 -
archive/core/modules/polyapp-toast/bower.json | 16 -
.../components/polyapp-toast.html | 161 ----
archive/core/modules/user-data/.bowerrc | 1 -
archive/core/modules/user-data/bower.json | 15 -
.../modules/user-data/models/user-data.html | 322 -------
.../modules/user-data/reducers/reducers.html | 44 -
archive/core/opts/state-manager.html | 21 -
archive/core/root/index.hbs | 302 -------
archive/core/root/script.hbs | 1 -
archive/core/scripts/index.js | 2 -
archive/core/service-worker/routing.js | 21 -
archive/core/shell/app-shell.html | 179 ----
archive/core/shell/test/app-shell.test.html | 38 -
archive/core/test/core.test.html | 15 -
archive/core/test/essentials.js | 85 --
archive/src/config/dev.json | 139 ---
.../components/devfest-footer.html | 165 ----
.../devfest-module/components/gdg-logo.html | 23 -
.../devfest-module/fonts/devfest-fonts.html | 2 -
.../devfest-module/icons/devfest-icons.html | 25 -
.../pages/devfest-call-for-speakers-page.html | 246 ------
.../pages/devfest-landing-page.html | 131 ---
.../pages/devfest-not-authorized-page.html | 18 -
.../pages/devfest-not-found-page.html | 18 -
.../devfest-theme/components/_button.scss | 11 -
.../devfest-theme/components/_footer.scss | 79 --
.../devfest-theme/components/_gdg-logo.scss | 11 -
.../devfest-theme/components/_header.scss | 81 --
.../devfest-theme/components/_temp-link.scss | 16 -
.../modules/devfest-theme/partials/_base.scss | 18 -
archive/src/modules/devfest-theme/root.scss | 9 -
archive/src/modules/devfest-theme/theme.json | 64 --
archive/src/modules/devfest-theme/theme.scss | 9 -
.../example-data/models/example-data.html | 49 --
.../example-data/reducers/reducers.html | 11 -
.../components/example-app-header.html | 0
.../pages/example-home-page.html | 0
.../pages/example-not-authorized-page.html | 0
.../pages/example-not-found-page.html | 0
archive/src/opts/auth-functions.html | 16 -
archive/src/rules/database.dev.json | 4 -
archive/src/scripts/index.js | 4 -
archive/src/service-worker/routing.js | 14 -
core/modules/state-manager/index.js | 12 +
.../modules/state-manager/polymer-redux.js | 0
core/shell/index.js | 48 ++
package.json | 1 +
yarn.lock | 21 +
65 files changed, 82 insertions(+), 4396 deletions(-)
delete mode 100644 archive/core/modules/app-network-status/mixins/app-network-status-mixin.html
delete mode 100644 archive/core/modules/firebase-property-mixin/.bowerrc
delete mode 100644 archive/core/modules/firebase-property-mixin/bower.json
delete mode 100644 archive/core/modules/firebase-property-mixin/mixins/firebase-property-mixin.html
delete mode 100644 archive/core/modules/firebase-property-mixin/scripts/pouchdb.html
delete mode 100644 archive/core/modules/permission-data/.bowerrc
delete mode 100644 archive/core/modules/permission-data/bower.json
delete mode 100644 archive/core/modules/permission-data/models/permission-data.html
delete mode 100644 archive/core/modules/permission-data/reducers/reducers.html
delete mode 100644 archive/core/modules/polyapp-location/.bowerrc
delete mode 100644 archive/core/modules/polyapp-location/bower.json
delete mode 100644 archive/core/modules/polyapp-location/components/polyapp-location.html
delete mode 100644 archive/core/modules/polyapp-location/components/polyapp-query-params.html
delete mode 100644 archive/core/modules/polyapp-router/.bowerrc
delete mode 100644 archive/core/modules/polyapp-router/bower.json
delete mode 100644 archive/core/modules/polyapp-router/components/polyapp-router.html
delete mode 100644 archive/core/modules/polyapp-toast/.bowerrc
delete mode 100644 archive/core/modules/polyapp-toast/bower.json
delete mode 100644 archive/core/modules/polyapp-toast/components/polyapp-toast.html
delete mode 100644 archive/core/modules/user-data/.bowerrc
delete mode 100644 archive/core/modules/user-data/bower.json
delete mode 100644 archive/core/modules/user-data/models/user-data.html
delete mode 100644 archive/core/modules/user-data/reducers/reducers.html
delete mode 100644 archive/core/opts/state-manager.html
delete mode 100644 archive/core/root/index.hbs
delete mode 100644 archive/core/root/script.hbs
delete mode 100644 archive/core/scripts/index.js
delete mode 100644 archive/core/service-worker/routing.js
delete mode 100644 archive/core/shell/app-shell.html
delete mode 100644 archive/core/shell/test/app-shell.test.html
delete mode 100644 archive/core/test/core.test.html
delete mode 100644 archive/core/test/essentials.js
delete mode 100644 archive/src/config/dev.json
delete mode 100644 archive/src/modules/devfest-module/components/devfest-footer.html
delete mode 100644 archive/src/modules/devfest-module/components/gdg-logo.html
delete mode 100644 archive/src/modules/devfest-module/fonts/devfest-fonts.html
delete mode 100644 archive/src/modules/devfest-module/icons/devfest-icons.html
delete mode 100644 archive/src/modules/devfest-module/pages/devfest-call-for-speakers-page.html
delete mode 100644 archive/src/modules/devfest-module/pages/devfest-landing-page.html
delete mode 100644 archive/src/modules/devfest-module/pages/devfest-not-authorized-page.html
delete mode 100644 archive/src/modules/devfest-module/pages/devfest-not-found-page.html
delete mode 100644 archive/src/modules/devfest-theme/components/_button.scss
delete mode 100644 archive/src/modules/devfest-theme/components/_footer.scss
delete mode 100644 archive/src/modules/devfest-theme/components/_gdg-logo.scss
delete mode 100644 archive/src/modules/devfest-theme/components/_header.scss
delete mode 100644 archive/src/modules/devfest-theme/components/_temp-link.scss
delete mode 100644 archive/src/modules/devfest-theme/partials/_base.scss
delete mode 100644 archive/src/modules/devfest-theme/root.scss
delete mode 100644 archive/src/modules/devfest-theme/theme.json
delete mode 100644 archive/src/modules/devfest-theme/theme.scss
delete mode 100644 archive/src/modules/example-data/models/example-data.html
delete mode 100644 archive/src/modules/example-data/reducers/reducers.html
delete mode 100644 archive/src/modules/example-module/components/example-app-header.html
delete mode 100644 archive/src/modules/example-module/pages/example-home-page.html
delete mode 100644 archive/src/modules/example-module/pages/example-not-authorized-page.html
delete mode 100644 archive/src/modules/example-module/pages/example-not-found-page.html
delete mode 100644 archive/src/opts/auth-functions.html
delete mode 100644 archive/src/rules/database.dev.json
delete mode 100644 archive/src/scripts/index.js
delete mode 100644 archive/src/service-worker/routing.js
create mode 100644 core/modules/state-manager/index.js
rename archive/src/modules/example-module/components/example-app-drawer.html => core/modules/state-manager/polymer-redux.js (100%)
diff --git a/archive/core/modules/app-network-status/mixins/app-network-status-mixin.html b/archive/core/modules/app-network-status/mixins/app-network-status-mixin.html
deleted file mode 100644
index 2f28c07..0000000
--- a/archive/core/modules/app-network-status/mixins/app-network-status-mixin.html
+++ /dev/null
@@ -1,56 +0,0 @@
-
diff --git a/archive/core/modules/firebase-property-mixin/.bowerrc b/archive/core/modules/firebase-property-mixin/.bowerrc
deleted file mode 100644
index 2969b9b..0000000
--- a/archive/core/modules/firebase-property-mixin/.bowerrc
+++ /dev/null
@@ -1 +0,0 @@
-{"directory":"../../../bower_components/","timeout":120000}
\ No newline at end of file
diff --git a/archive/core/modules/firebase-property-mixin/bower.json b/archive/core/modules/firebase-property-mixin/bower.json
deleted file mode 100644
index 8507911..0000000
--- a/archive/core/modules/firebase-property-mixin/bower.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "name": "firebase-property-mixin",
- "description": "Firebase Property Mixin for TJ's Projects",
- "main": "mixins/firebase-property-mixin.html",
- "authors": [
- "TJ Monserrat"
- ],
- "license": "MIT",
- "ignore": [
- "**/.*",
- "node_modules",
- "bower_components",
- "src/bower_components/",
- "test",
- "tests"
- ],
- "dependencies": {
- "polymer": "Polymer/polymer#^2.0.1",
- "pouchdb": "^6.3.4",
- "pouchdb-upsert": "^2.2.0"
- }
-}
diff --git a/archive/core/modules/firebase-property-mixin/mixins/firebase-property-mixin.html b/archive/core/modules/firebase-property-mixin/mixins/firebase-property-mixin.html
deleted file mode 100644
index ff687a2..0000000
--- a/archive/core/modules/firebase-property-mixin/mixins/firebase-property-mixin.html
+++ /dev/null
@@ -1,815 +0,0 @@
-
-
-
diff --git a/archive/core/modules/firebase-property-mixin/scripts/pouchdb.html b/archive/core/modules/firebase-property-mixin/scripts/pouchdb.html
deleted file mode 100644
index 53ec753..0000000
--- a/archive/core/modules/firebase-property-mixin/scripts/pouchdb.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/archive/core/modules/permission-data/.bowerrc b/archive/core/modules/permission-data/.bowerrc
deleted file mode 100644
index 2969b9b..0000000
--- a/archive/core/modules/permission-data/.bowerrc
+++ /dev/null
@@ -1 +0,0 @@
-{"directory":"../../../bower_components/","timeout":120000}
\ No newline at end of file
diff --git a/archive/core/modules/permission-data/bower.json b/archive/core/modules/permission-data/bower.json
deleted file mode 100644
index f3f0fce..0000000
--- a/archive/core/modules/permission-data/bower.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "permission-data",
- "license": "MIT",
- "ignore": [
- "**/.*",
- "node_modules",
- "bower_components",
- "src/bower_components/",
- "test",
- "tests"
- ],
- "dependencies": {
- "polymer": "Polymer/polymer#^2.0.1"
- }
-}
diff --git a/archive/core/modules/permission-data/models/permission-data.html b/archive/core/modules/permission-data/models/permission-data.html
deleted file mode 100644
index 15b995b..0000000
--- a/archive/core/modules/permission-data/models/permission-data.html
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
diff --git a/archive/core/modules/permission-data/reducers/reducers.html b/archive/core/modules/permission-data/reducers/reducers.html
deleted file mode 100644
index 707a4b6..0000000
--- a/archive/core/modules/permission-data/reducers/reducers.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
diff --git a/archive/core/modules/polyapp-location/.bowerrc b/archive/core/modules/polyapp-location/.bowerrc
deleted file mode 100644
index 2969b9b..0000000
--- a/archive/core/modules/polyapp-location/.bowerrc
+++ /dev/null
@@ -1 +0,0 @@
-{"directory":"../../../bower_components/","timeout":120000}
\ No newline at end of file
diff --git a/archive/core/modules/polyapp-location/bower.json b/archive/core/modules/polyapp-location/bower.json
deleted file mode 100644
index ab1e629..0000000
--- a/archive/core/modules/polyapp-location/bower.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "polyapp-location",
- "description": "Polyapp Router for TJ's Projects",
- "main": "polyapp-router.html",
- "authors": [
- "TJ Monserrat"
- ],
- "license": "MIT",
- "ignore": [
- "**/.*",
- "node_modules",
- "bower_components",
- "src/bower_components/",
- "test",
- "tests"
- ],
- "dependencies": {
- "polymer": "Polymer/polymer#^2.0.1"
- }
-}
diff --git a/archive/core/modules/polyapp-location/components/polyapp-location.html b/archive/core/modules/polyapp-location/components/polyapp-location.html
deleted file mode 100644
index 8988852..0000000
--- a/archive/core/modules/polyapp-location/components/polyapp-location.html
+++ /dev/null
@@ -1,387 +0,0 @@
-
-
-
-
diff --git a/archive/core/modules/polyapp-location/components/polyapp-query-params.html b/archive/core/modules/polyapp-location/components/polyapp-query-params.html
deleted file mode 100644
index b4b01bc..0000000
--- a/archive/core/modules/polyapp-location/components/polyapp-query-params.html
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
diff --git a/archive/core/modules/polyapp-router/.bowerrc b/archive/core/modules/polyapp-router/.bowerrc
deleted file mode 100644
index 2969b9b..0000000
--- a/archive/core/modules/polyapp-router/.bowerrc
+++ /dev/null
@@ -1 +0,0 @@
-{"directory":"../../../bower_components/","timeout":120000}
\ No newline at end of file
diff --git a/archive/core/modules/polyapp-router/bower.json b/archive/core/modules/polyapp-router/bower.json
deleted file mode 100644
index 8c0fc59..0000000
--- a/archive/core/modules/polyapp-router/bower.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "app-router",
- "description": "App Router for TJ's Projects",
- "main": "app-router.html",
- "authors": [
- "TJ Monserrat"
- ],
- "license": "MIT",
- "ignore": [
- "**/.*",
- "node_modules",
- "bower_components",
- "src/bower_components/",
- "test",
- "tests"
- ],
- "dependencies": {
- "polymer": "Polymer/polymer#^2.0.1"
- }
-}
diff --git a/archive/core/modules/polyapp-router/components/polyapp-router.html b/archive/core/modules/polyapp-router/components/polyapp-router.html
deleted file mode 100644
index d9e70d5..0000000
--- a/archive/core/modules/polyapp-router/components/polyapp-router.html
+++ /dev/null
@@ -1,499 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/archive/core/modules/polyapp-toast/.bowerrc b/archive/core/modules/polyapp-toast/.bowerrc
deleted file mode 100644
index 2969b9b..0000000
--- a/archive/core/modules/polyapp-toast/.bowerrc
+++ /dev/null
@@ -1 +0,0 @@
-{"directory":"../../../bower_components/","timeout":120000}
\ No newline at end of file
diff --git a/archive/core/modules/polyapp-toast/bower.json b/archive/core/modules/polyapp-toast/bower.json
deleted file mode 100644
index bcd3eec..0000000
--- a/archive/core/modules/polyapp-toast/bower.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "name": "polyapp-toast",
- "license": "MIT",
- "ignore": [
- "**/.*",
- "node_modules",
- "bower_components",
- "src/bower_components/",
- "test",
- "tests"
- ],
- "dependencies": {
- "polymer": "Polymer/polymer#^2.0.1",
- "paper-toast": "PolymerElements/paper-toast#^2.0.0"
- }
-}
diff --git a/archive/core/modules/polyapp-toast/components/polyapp-toast.html b/archive/core/modules/polyapp-toast/components/polyapp-toast.html
deleted file mode 100644
index b5e1e2f..0000000
--- a/archive/core/modules/polyapp-toast/components/polyapp-toast.html
+++ /dev/null
@@ -1,161 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- [[action]]
-
-
-
-
-
-
-
diff --git a/archive/core/modules/user-data/.bowerrc b/archive/core/modules/user-data/.bowerrc
deleted file mode 100644
index 2969b9b..0000000
--- a/archive/core/modules/user-data/.bowerrc
+++ /dev/null
@@ -1 +0,0 @@
-{"directory":"../../../bower_components/","timeout":120000}
\ No newline at end of file
diff --git a/archive/core/modules/user-data/bower.json b/archive/core/modules/user-data/bower.json
deleted file mode 100644
index 5f491a9..0000000
--- a/archive/core/modules/user-data/bower.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "user-data",
- "license": "MIT",
- "ignore": [
- "**/.*",
- "node_modules",
- "bower_components",
- "src/bower_components/",
- "test",
- "tests"
- ],
- "dependencies": {
- "polymer": "Polymer/polymer#^2.0.1"
- }
-}
diff --git a/archive/core/modules/user-data/models/user-data.html b/archive/core/modules/user-data/models/user-data.html
deleted file mode 100644
index ab92681..0000000
--- a/archive/core/modules/user-data/models/user-data.html
+++ /dev/null
@@ -1,322 +0,0 @@
-
-
-
-
diff --git a/archive/core/modules/user-data/reducers/reducers.html b/archive/core/modules/user-data/reducers/reducers.html
deleted file mode 100644
index 5938c74..0000000
--- a/archive/core/modules/user-data/reducers/reducers.html
+++ /dev/null
@@ -1,44 +0,0 @@
-
diff --git a/archive/core/opts/state-manager.html b/archive/core/opts/state-manager.html
deleted file mode 100644
index 2f406ad..0000000
--- a/archive/core/opts/state-manager.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
diff --git a/archive/core/root/index.hbs b/archive/core/root/index.hbs
deleted file mode 100644
index f3a34e7..0000000
--- a/archive/core/root/index.hbs
+++ /dev/null
@@ -1,302 +0,0 @@
-
-
-
-
-
-
-
- {{app.title}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{#each theme.icons}}
-
- {{/each}}
-
-
- {{#each theme.icons}}
- {{#if tileImage}}
-
- {{/if}}
- {{/each}}
-
-
-
-
-
-
-
-
- {{#if app.sentryUrl}}
-
-
-
- {{/if}}
-
-
-
-
-
-
-
-
-
-
-
- {{#each fragments}}
-
-
- {{/each}}
-
-
- {{#if analytics}}
-
- {{/if}}
-
-
-
-
- Please enable JavaScript to view this website.
-
-
-
-
-
-
diff --git a/archive/core/root/script.hbs b/archive/core/root/script.hbs
deleted file mode 100644
index 27e4db3..0000000
--- a/archive/core/root/script.hbs
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/archive/core/scripts/index.js b/archive/core/scripts/index.js
deleted file mode 100644
index d644e7b..0000000
--- a/archive/core/scripts/index.js
+++ /dev/null
@@ -1,2 +0,0 @@
-Object.defineProperty(window, 'pathToRegexp', { value: window.pathToRegexp || require('path-to-regexp') })
-Object.defineProperty(window, 'Redux', { value: window.Redux || require('redux') })
diff --git a/archive/core/service-worker/routing.js b/archive/core/service-worker/routing.js
deleted file mode 100644
index 0541873..0000000
--- a/archive/core/service-worker/routing.js
+++ /dev/null
@@ -1,21 +0,0 @@
-for (var i in app.firebaseConfig) {
- router.registerRoute({route: new workbox.routing.ExpressRoute({
- path: 'https://' + app.firebaseConfig[i].projectId + '.firebaseio.com/:json+',
- handler: function (obj) {
- var event = obj.event
- var url = obj.url
-
- return fetch(url.href)
- .then(function (response) {
- caches.open(app.shortTitle).then(function (cache) {
- cache.put(event.request, response)
- })
- return response.clone()
- })
- .catch(function (err) {
- console.log(err, url.href, caches.match(url.href))
- return caches.match(url.href)
- })
- }
- })})
-}
diff --git a/archive/core/shell/app-shell.html b/archive/core/shell/app-shell.html
deleted file mode 100644
index fec9c4a..0000000
--- a/archive/core/shell/app-shell.html
+++ /dev/null
@@ -1,179 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/archive/core/shell/test/app-shell.test.html b/archive/core/shell/test/app-shell.test.html
deleted file mode 100644
index 1c19002..0000000
--- a/archive/core/shell/test/app-shell.test.html
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
- app-shell test
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/archive/core/test/core.test.html b/archive/core/test/core.test.html
deleted file mode 100644
index 8b4f3a4..0000000
--- a/archive/core/test/core.test.html
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/archive/core/test/essentials.js b/archive/core/test/essentials.js
deleted file mode 100644
index bd7268e..0000000
--- a/archive/core/test/essentials.js
+++ /dev/null
@@ -1,85 +0,0 @@
-// set project namespace
-Object.defineProperty(window, 'App', { value: window.App || {} })
-Object.defineProperty(App, 'Mixins', { value: App.Mixins || {} })
-Object.defineProperty(App, 'utils', { value: App.utils || {} })
-Object.defineProperty(App.utils, 'extends', { value: App.utils.extends || Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key] } } } return target } })
-/**
- * Merges a property's object value using the defaults way.
- *
- * @private
- * @param {Object} what Initial prototype
- * @param {String} which Property to collect.
- * @return {Object} the collected values
- */
-Object.defineProperty(App.utils, 'collect', { value: App.utils.collect || function (what, which) {
- var res = {}
- while (what) {
- res = App.utils.extends({}, what[which], res) // Respect prototype priority
- what = Object.getPrototypeOf(what)
- }
- return res
-}})
-Object.defineProperty(App.utils, 'isEmpty', { value: App.utils.isEmpty || function (obj) {
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) return false
- }
- return true
-}});
-(() => {
- var __currentUsed = 0
- Object.defineProperty(App.utils, 'checkStorage', { value: App.utils.checkStorage || function () {
- if (window.navigator && navigator.storage && navigator.storage.estimate) {
- return navigator.storage.estimate()
- } else if (window.navigator &&
- navigator.webkitTemporaryStorage &&
- navigator.webkitTemporaryStorage.queryUsageAndQuota &&
- typeof navigator.webkitTemporaryStorage.queryUsageAndQuota === 'function') {
- return new Promise((resolve, reject) => {
- navigator.webkitTemporaryStorage.queryUsageAndQuota(
- (usedBytes, grantedBytes) => {
- if (__currentUsed && App.__build !== 'prod') {
- console.log('added data:', ((usedBytes - __currentUsed) / 1024) / 1024, 'MB. Current used:', (usedBytes / 1024) / 1024, 'MB')
- }
- __currentUsed = usedBytes
- return resolve({
- usage: usedBytes
- })
- }, reject)
- })
- } else {
- Promise.resolve({
- type: 'no_navigator_storage'
- })
- }
- }});
- App.utils.checkStorage()
-})()
-
-Object.defineProperty(App, '__dataRestStaleTime', { value: 60 })
-Object.defineProperty(App, '__firebaseFetch', { value: App.__firebaseFetch || {} })
-Object.defineProperty(App, '__firebaseVersion', { value: App.__firebaseVersion || '4.2.0' })
-
-// set project build
-Object.defineProperty(App, '__build', { value: App.__build || '0.0.1' })
-Object.defineProperty(App, '__version', { value: App.__version || '0.0.1' })
-Object.defineProperty(App, '__database', { value: App.__database || 'dev' })
-Object.defineProperty(App, '__analytics', { value: App.__analytics || '' })
-
-// set config variables
-Object.defineProperty(App, '__routes', { value: App.__routes || '{}' })
-Object.defineProperty(App, '__shellComponents', { value: App.__shellComponents || '{}' })
-Object.defineProperty(App, 'Reducers', { value: App.Reducers || {} })
-Object.defineProperty(App, 'Actions', { value: App.Actions || {} })
-
-if (window.performance) {
- window.globalStart = window.globalStart || performance.now()
-}
-
-// Register the base URL
-window.App.baseUrl = window.App.baseUrl || '/'
-
-// loading more essential files
-
-var script = document.createElement('script')
-script.src = 'index.js'
-document.head.appendChild(script)
diff --git a/archive/src/config/dev.json b/archive/src/config/dev.json
deleted file mode 100644
index 31f4dd5..0000000
--- a/archive/src/config/dev.json
+++ /dev/null
@@ -1,139 +0,0 @@
-{
- "app": {
- "title": "GDG DevFest Philippines 2017",
- "shortTitle": "DevFestPh",
- "description": "In celebration of GDG Philippines 10th Anniversary, we bring to you the Grandest Technology event of the year - GDG DevFest Philippines 2017! GDG DevFest Philippines brings together experts in Mobile, Web and Cloud technologies to Manila for sessions, workshops and showcases. In this conference our goal is to equip you with new knowledge & skills that you can immediately apply and bring back to your respective companies.",
- "baseHref": "/",
- "twitter": "@gdgphilippines",
- "image": "https://devfestph.firebaseapp.com/images/header.png",
- "analytics": "UA-78413383-2",
- "firebaseVersion": "4.2.0",
- "database": "dev",
- "waitBeforeFetchingSameURLInRest": 60,
- "sentryUrl": "https://85d1091a410948caa823a5230bd0dbcf@sentry.io/204253",
- "appVersion": "0.0.1",
- "firebaseConfig": []
- },
- "theme": {
- "src": "modules/devfest-theme",
- "ignoreComponents": []
- },
- "fragments": {
- "devfest-landing-page": "modules/devfest-module/pages/devfest-landing-page.html",
- "devfest-call-for-speakers-page": "modules/devfest-module/pages/devfest-call-for-speakers-page.html",
- "devfest-not-found-page": "modules/devfest-module/pages/devfest-not-found-page.html",
- "devfest-not-authorized-page": "modules/devfest-module/pages/devfest-not-authorized-page.html",
- "example-app-header": "modules/example-module/components/example-app-header.html",
- "example-app-drawer": "modules/example-module/components/example-app-drawer.html"
- },
- "routing": {
- "/": "devfest-landing-page",
- "/index.html": "devfest-landing-page",
- "/call-for-speakers": "devfest-call-for-speakers-page"
- },
- "httpCodes": {
- "not-found": "devfest-not-found-page",
- "not-authorized": "devfest-not-authorized-page"
- },
- "shellComponents": [
- {
- "node": "example-app-header",
- "header": true,
- "activate": false,
- "attrs": []
- },
- {
- "node": "example-app-drawer",
- "drawer": true,
- "activate": false,
- "attrs": []
- }
- ],
- "serviceWorker": {
- "globIgnores": [],
- "runtimeCaching": [],
- "globPatterns": []
- },
- "hosting": {
- "rewrites": [
- {
- "source": "/api/**",
- "function": "app"
- }
- ],
- "headers": [
- {
- "source" : "**/*.@(jpg|jpeg|gif|png)",
- "headers" : [
- {
- "key" : "Cache-Control",
- "value" : "max-age=7200"
- }
- ]
- },
- {
- "source" : "404.html",
- "headers" : [
- {
- "key" : "Cache-Control",
- "value" : "max-age=300"
- }
- ]
- },
- {
- "source": "service-worker.js",
- "headers" : [
- {
- "key": "Cache-Control",
- "value": "no-cache, no-store, must-revalidate"
- }
- ]
- },
- {
- "source": "routing-sw-src.js",
- "headers" : [
- {
- "key": "Cache-Control",
- "value": "no-cache, no-store, must-revalidate"
- }
- ]
- },
- {
- "source": "routing-sw.js",
- "headers" : [
- {
- "key": "Cache-Control",
- "value": "no-cache, no-store, must-revalidate"
- }
- ]
- },
- {
- "source": "sw.js",
- "headers" : [
- {
- "key": "Cache-Control",
- "value": "no-cache, no-store, must-revalidate"
- }
- ]
- },
- {
- "source": "workbox-routing.js",
- "headers" : [
- {
- "key": "Cache-Control",
- "value": "no-cache, no-store, must-revalidate"
- }
- ]
- },
- {
- "source": "workbox-sw.*.js",
- "headers" : [
- {
- "key": "Cache-Control",
- "value": "no-cache, no-store, must-revalidate"
- }
- ]
- }
- ]
- }
-}
diff --git a/archive/src/modules/devfest-module/components/devfest-footer.html b/archive/src/modules/devfest-module/components/devfest-footer.html
deleted file mode 100644
index adab217..0000000
--- a/archive/src/modules/devfest-module/components/devfest-footer.html
+++ /dev/null
@@ -1,165 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/archive/src/modules/devfest-module/components/gdg-logo.html b/archive/src/modules/devfest-module/components/gdg-logo.html
deleted file mode 100644
index 1f628e5..0000000
--- a/archive/src/modules/devfest-module/components/gdg-logo.html
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
- GDG Philippines
-
-
-
-
diff --git a/archive/src/modules/devfest-module/fonts/devfest-fonts.html b/archive/src/modules/devfest-module/fonts/devfest-fonts.html
deleted file mode 100644
index f864c40..0000000
--- a/archive/src/modules/devfest-module/fonts/devfest-fonts.html
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/archive/src/modules/devfest-module/icons/devfest-icons.html b/archive/src/modules/devfest-module/icons/devfest-icons.html
deleted file mode 100644
index c62d79c..0000000
--- a/archive/src/modules/devfest-module/icons/devfest-icons.html
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/archive/src/modules/devfest-module/pages/devfest-call-for-speakers-page.html b/archive/src/modules/devfest-module/pages/devfest-call-for-speakers-page.html
deleted file mode 100644
index b98c747..0000000
--- a/archive/src/modules/devfest-module/pages/devfest-call-for-speakers-page.html
+++ /dev/null
@@ -1,246 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- Speaker Perks
-
- Selected Speakers will be given the following perks:
-
-
-
-
-
- Topic Proposal Guidelines
-
-
- Your topic proposal can fall into one of the categories:
-
-
-
- [[item.category]]
-
-
-
-
-
- Topic for the conference should fall into one of the key topics below:
-
-
-
- [[main.topic]]
-
-
- [[topic.topic]]
-
-
- [[subtopic.topic]]
-
-
-
-
-
-
-
-
-
-
- Topic Submission will be a single-speaker session only. Click below to submit your proposal:
-
-
-
- Call for Speakers
-
-
-
- Important dates to remember
-
- Please be reminded of these important dates in submitting your proposal.
-
-
-
-
-
-
-
-
diff --git a/archive/src/modules/devfest-module/pages/devfest-landing-page.html b/archive/src/modules/devfest-module/pages/devfest-landing-page.html
deleted file mode 100644
index f06e62b..0000000
--- a/archive/src/modules/devfest-module/pages/devfest-landing-page.html
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/archive/src/modules/devfest-module/pages/devfest-not-authorized-page.html b/archive/src/modules/devfest-module/pages/devfest-not-authorized-page.html
deleted file mode 100644
index acbbb2d..0000000
--- a/archive/src/modules/devfest-module/pages/devfest-not-authorized-page.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/archive/src/modules/devfest-module/pages/devfest-not-found-page.html b/archive/src/modules/devfest-module/pages/devfest-not-found-page.html
deleted file mode 100644
index 1a7bf4a..0000000
--- a/archive/src/modules/devfest-module/pages/devfest-not-found-page.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/archive/src/modules/devfest-theme/components/_button.scss b/archive/src/modules/devfest-theme/components/_button.scss
deleted file mode 100644
index 85c7044..0000000
--- a/archive/src/modules/devfest-theme/components/_button.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-.button {
- background: #2e9be6;
- color: white;
- border: 3px solid #2e9be6;
- padding: 24px;
- font-size: 24px;
- display: inline-block;
- text-transform: uppercase;
- font-weight: bold;
- text-decoration: none;
-}
diff --git a/archive/src/modules/devfest-theme/components/_footer.scss b/archive/src/modules/devfest-theme/components/_footer.scss
deleted file mode 100644
index c2d41e3..0000000
--- a/archive/src/modules/devfest-theme/components/_footer.scss
+++ /dev/null
@@ -1,79 +0,0 @@
-.footer {
- background: #303C42;
- color: rgba(255,255,255,0.8);
-
-
- a {
- color: inherit;
- text-decoration: none;
- }
-
- > .top-mini {
- @apply --layout-horizontal;
- height: 8px;
-
- > .flex {
- @apply --layout-flex;
- height: 8px;
- }
-
- > .color-mini {
- height: 8px;
- width: 60px;
- }
-
- > .blue-mini {
- background-color: #4285F4;
- }
-
- > .red-mini {
- background-color: #DB4437;
- }
-
- > .yellow-mini {
- background-color: #FFC107;
- }
-
- > .green-mini {
- background-color: #0F9D58;
- }
- }
-
- > .footer-columns {
- padding-top: 20px;
- @apply --layout-horizontal;
- @apply --layout-wrap;
- padding-left: 50px;
- padding-right: 50px;
- padding-bottom: 20px;
-
- @media only screen and (max-width: 500px) {
- padding-left: 20px;
- padding-right: 20px;
- }
-
- > .footer-column {
- @apply --layout-flex;
- min-width: 200px;
- // margin-left: 20px;
- // margin-right: 20px;
-
- > .footer-link-list {
- list-style-type: none;
- padding: 0;
-
- > .footer-link-item {
- padding-bottom: 5px;
- }
- }
- }
-
- }
-
- > .footer-bottom {
- background: #37424B;
- padding: 20px;
- padding-left: 50px;
-
- }
-}
diff --git a/archive/src/modules/devfest-theme/components/_gdg-logo.scss b/archive/src/modules/devfest-theme/components/_gdg-logo.scss
deleted file mode 100644
index f62ef0a..0000000
--- a/archive/src/modules/devfest-theme/components/_gdg-logo.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-.gdg-logo-anchor {
- display: block;
- vertical-align: middle;
- text-decoration: none;
- color: rgba(255, 255, 255, 0.5);
- font-size: 24px;
-
- > img {
- height: 24px;
- }
-}
diff --git a/archive/src/modules/devfest-theme/components/_header.scss b/archive/src/modules/devfest-theme/components/_header.scss
deleted file mode 100644
index 9c6b081..0000000
--- a/archive/src/modules/devfest-theme/components/_header.scss
+++ /dev/null
@@ -1,81 +0,0 @@
-.header {
- font-family: 'Roboto';
- position: relative;
- min-height: 100vh;
- background: url('/images/devfest-bg-repeatable.png') center/contain repeat;
-
- > .header-white {
- background: rgba(255,255,255, 0.75);
- min-height: 100%;
- position: absolute;
- width: 100%;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- }
-
- > .header-container {
- position: relative;
- height: 100vh;
- @apply --layout-horizontal;
- @apply --layout-center;
-
- > .header-image-text-container {
- @apply --layout-flex;
-
- > .header-image {
- position: relative;
- // padding-top: 100px;
- width: inherit;
- text-align: center;
-
- > img {
- width: 80%;
- max-width: 600px;
- }
- }
-
- > .header-text {
- text-align: center;
- > h1 {
- font-family: 'Product Sans';
- opacity: .75;
- }
-
- }
- }
- }
-
-
-
-
-
- // > .header-image {
- // position: relative;
- // height: 100%;
- // // padding-top: 10%;
- // z-index: 1;
- // text-align: center;
- // @apply --layout-horizontal;
- // @apply --layout-center;
-
- // background: rgba(255,255,255,0.5); /* For browsers that do not support gradients */
- // background: -webkit-radial-gradient(rgba(255,255,255,1), rgba(255,255,255,0.75), rgba(255,255,255,0)); /* Safari 5.1 to 6.0 */
- // background: -o-radial-gradient(rgba(255,255,255,1), rgba(255,255,255,0.75), rgba(255,255,255,0)); /* For Opera 11.6 to 12.0 */
- // background: -moz-radial-gradient(rgba(255,255,255,1), rgba(255,255,255,0.75), rgba(255,255,255,0)); /* For Firefox 3.6 to 15 */
- // background: radial-gradient(rgba(255,255,255,1), rgba(255,255,255,0.75), rgba(255,255,255,0)); /* Standard syntax */
-
- // > .header-image-container {
- // height: 60%;
- // margin-left: 20px;
- // margin-right: 20px;
- // background: url('/images/devfest-10x-logo.png') center/contain no-repeat;
- // @apply --layout-flex;
- // }
-
-
- // }
-
-
-}
diff --git a/archive/src/modules/devfest-theme/components/_temp-link.scss b/archive/src/modules/devfest-theme/components/_temp-link.scss
deleted file mode 100644
index 27bfff3..0000000
--- a/archive/src/modules/devfest-theme/components/_temp-link.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-.temp-link {
- padding: 20px;
- padding-top: 0px;
- font-family: 'Roboto', 'Arial', sans-serif;
- color: #666;
- line-height: 150%;
- font-size: 1.25em;
- text-align: center;
- margin: 0 auto;
- max-width: 550px;
- padding-bottom: 100px;
-
- @media only screen and (max-width: 500px) {
- font-size: 1em;
- }
-}
diff --git a/archive/src/modules/devfest-theme/partials/_base.scss b/archive/src/modules/devfest-theme/partials/_base.scss
deleted file mode 100644
index f8e2208..0000000
--- a/archive/src/modules/devfest-theme/partials/_base.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-// Font weights
-$light: 100;
-$regular: 400;
-$bold: 600;
-
-// Base Font
-$base-font-family: sans-serif;
-$base-font-weight: $regular;
-$base-font-size: 13px;
-$base-line-height: 1.4;
-
-// Fixed Font
-$fixed-font-family: monospace;
-$fixed-font-size: 85%;
-$fixed-line-height: $base-line-height;
-
-// Headings
-$header-font-weight: $bold;
diff --git a/archive/src/modules/devfest-theme/root.scss b/archive/src/modules/devfest-theme/root.scss
deleted file mode 100644
index aa6d516..0000000
--- a/archive/src/modules/devfest-theme/root.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-// @import "./core/modules/default-theme/partials/*";
-@import './partials/_base.scss';
-@import './components/button.scss';
-
-body {
- margin: 0;
- font-size: $base-font-size;
- font-family: 'Roboto', 'Arial', sans-serif;
-}
diff --git a/archive/src/modules/devfest-theme/theme.json b/archive/src/modules/devfest-theme/theme.json
deleted file mode 100644
index 413b86d..0000000
--- a/archive/src/modules/devfest-theme/theme.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "name": "devfest",
- "author": "TJ Monserrat",
- "themeColor": "#3f51b5",
- "backgroundColor": "#3f51b5",
- "startUrl": "/index.html",
- "display": "standalone",
- "webApp": {
- "capable": "yes",
- "statusBarStyle": "black-translucent",
- "tapHighlight": "no"
- },
- "icons": [
- {
- "src": "images/icons/icon-48x48.png",
- "sizes": "48x48",
- "type": "image/png"
- },
- {
- "src": "images/icons/icon-72x72.png",
- "sizes": "72x72",
- "type": "image/png"
- },
- {
- "src": "images/icons/icon-96x96.png",
- "sizes": "96x96",
- "type": "image/png"
- },
- {
- "src": "images/icons/icon-128x128.png",
- "sizes": "128x128",
- "type": "image/png"
- },
- {
- "src": "images/icons/icon-144x144.png",
- "sizes": "144x144",
- "type": "image/png",
- "tileImage": true
- },
- {
- "src": "images/icons/icon-152x152.png",
- "sizes": "152x152",
- "type": "image/png"
- },
- {
- "src": "images/icons/icon-192x192.png",
- "sizes": "192x192",
- "type": "image/png"
- },
- {
- "src": "images/icons/icon-384x384.png",
- "sizes": "384x384",
- "type": "image/png"
- },
- {
- "src": "images/icons/icon-512x512.png",
- "sizes": "512x512",
- "type": "image/png"
- }
- ],
- "dependencies": [
- "../../bower_components/iron-flex-layout/iron-flex-layout.html"
- ]
-}
diff --git a/archive/src/modules/devfest-theme/theme.scss b/archive/src/modules/devfest-theme/theme.scss
deleted file mode 100644
index 669e14a..0000000
--- a/archive/src/modules/devfest-theme/theme.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-@import './components/header';
-@import './components/temp-link.scss';
-@import './components/footer.scss';
-@import './components/button.scss';
-@import './components/gdg-logo';
-
-:host {
- font-family: 'Roboto', 'Arial', sans-serif;
-}
diff --git a/archive/src/modules/example-data/models/example-data.html b/archive/src/modules/example-data/models/example-data.html
deleted file mode 100644
index 69b0f15..0000000
--- a/archive/src/modules/example-data/models/example-data.html
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
diff --git a/archive/src/modules/example-data/reducers/reducers.html b/archive/src/modules/example-data/reducers/reducers.html
deleted file mode 100644
index 1594747..0000000
--- a/archive/src/modules/example-data/reducers/reducers.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
diff --git a/archive/src/modules/example-module/components/example-app-header.html b/archive/src/modules/example-module/components/example-app-header.html
deleted file mode 100644
index e69de29..0000000
diff --git a/archive/src/modules/example-module/pages/example-home-page.html b/archive/src/modules/example-module/pages/example-home-page.html
deleted file mode 100644
index e69de29..0000000
diff --git a/archive/src/modules/example-module/pages/example-not-authorized-page.html b/archive/src/modules/example-module/pages/example-not-authorized-page.html
deleted file mode 100644
index e69de29..0000000
diff --git a/archive/src/modules/example-module/pages/example-not-found-page.html b/archive/src/modules/example-module/pages/example-not-found-page.html
deleted file mode 100644
index e69de29..0000000
diff --git a/archive/src/opts/auth-functions.html b/archive/src/opts/auth-functions.html
deleted file mode 100644
index 38f4d67..0000000
--- a/archive/src/opts/auth-functions.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
diff --git a/archive/src/rules/database.dev.json b/archive/src/rules/database.dev.json
deleted file mode 100644
index 4a116eb..0000000
--- a/archive/src/rules/database.dev.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- ".read": true,
- ".write": "auth != null"
-}
diff --git a/archive/src/scripts/index.js b/archive/src/scripts/index.js
deleted file mode 100644
index 0f112e3..0000000
--- a/archive/src/scripts/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// put other index scripts here
-if (App.__prod !== 'prod') {
- console.log('Root script loaded')
-}
diff --git a/archive/src/service-worker/routing.js b/archive/src/service-worker/routing.js
deleted file mode 100644
index d8325fd..0000000
--- a/archive/src/service-worker/routing.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// put routing things here
-router.registerRoute({route: new workbox.routing.ExpressRoute({
- path: '/api/landing-temp-link',
- handler: workboxSW.strategies.networkFirst({
- networkTimeoutSeconds: 3,
- cacheExpiration: {
- maxEntries: 10,
- maxAgeSeconds: 60 * 60 * 24
- },
- cacheableResponse: {
- statuses: [200, 400, 404, 500]
- }
- })
-})})
diff --git a/core/modules/state-manager/index.js b/core/modules/state-manager/index.js
new file mode 100644
index 0000000..aa2103f
--- /dev/null
+++ b/core/modules/state-manager/index.js
@@ -0,0 +1,12 @@
+import { createStore } from 'redux';
+import PolymerRedux from 'polymer-redux';
+
+const reducers = {};
+
+const initialStore = {};
+
+const store = createStore((state = initialStore, action) => state);
+
+const ReduxMixin = PolymerRedux(store);
+
+export { reducers, store, ReduxMixin };
diff --git a/archive/src/modules/example-module/components/example-app-drawer.html b/core/modules/state-manager/polymer-redux.js
similarity index 100%
rename from archive/src/modules/example-module/components/example-app-drawer.html
rename to core/modules/state-manager/polymer-redux.js
diff --git a/core/shell/index.js b/core/shell/index.js
index e0b3cb6..626c59d 100644
--- a/core/shell/index.js
+++ b/core/shell/index.js
@@ -7,6 +7,32 @@ import routing from '../../src/routing.js'
import httpCodes from '../../src/http-codes.js'
import partials from '../../src/partials.js'
import auth from '../../src/authentication/index.js'
+import { reducers, store, ReduxMixin } from '../modules/state-manager';
+import { combineReducers } from 'redux';
+
+const ROUTER_ACTION = {
+ PARAMS: 'ROUTER_UPDATE_PARAMS',
+ ROUTE: 'ROUTER_UPDATE_ROUTE'
+};
+
+reducers.router = (router = {}, action) => {
+ switch (action.type) {
+ case ROUTER_ACTION.PARAMS:
+ return Object.assign({}, router, {
+ params: action.params
+ });
+ case ROUTER_ACTION.ROUTE:
+ return Object.assign({}, router, {
+ route: action.route
+ });
+ default:
+ return router;
+ }
+};
+
+store.replaceReducer(combineReducers(reducers));
+
+export { ROUTER_ACTION };
const messages = []
@@ -215,9 +241,19 @@ class AppShell extends QueryParamsMixin(LocationMixin(Polymer.Element)) {
}
routeName = route[0]
this.params = params
+
+ this.dispatch({
+ type: ROUTER_ACTION.PARAMS,
+ params
+ });
}
})
+ this.dispatch({
+ type: ROUTER_ACTION.ROUTE,
+ route: routeName || 'not-found'
+ });
+
this._checkAuth(routeName || 'not-found')
}
@@ -257,8 +293,20 @@ class AppShell extends QueryParamsMixin(LocationMixin(Polymer.Element)) {
}
if (this._routes[route]) {
routes[route]().then(() => {
+
+ if (!this._routes[route].element.constructor.is ||
+ this._routes[route].element.constructor === this._routes[route].element.nodeName.toLowerCase()) {
+ this.dispatch({
+ type: ROUTER_ACTION.ROUTE,
+ route: 'not-found'
+ });
+
+ this._checkAuth('not-found')
+ }
+
this._routes[route].element._setProperty('params', this.params)
this._routes[route].element._setProperty('queryParams', this.paramsObject)
+
if (this._routes[route].element.reload) {
this._routes[route].element.reload()
}
diff --git a/package.json b/package.json
index 0adff4e..58a1c32 100644
--- a/package.json
+++ b/package.json
@@ -21,6 +21,7 @@
"build-production": "cd gulp && ./node_modules/.bin/gulp --prod"
},
"dependencies": {
+ "global": "^4.3.2",
"indexeddbshim": "^3.0.4",
"intersection-observer": "^0.4.2",
"marked": "^0.3.6",
diff --git a/yarn.lock b/yarn.lock
index 9de0760..4259c05 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -621,6 +621,10 @@ dom-serializer@0:
domelementtype "~1.1.1"
entities "~1.1.1"
+dom-walk@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
+
domelementtype@1, domelementtype@1.3.0, domelementtype@^1.3.0, domelementtype@~1.1.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
@@ -778,6 +782,13 @@ glob@^7.0.5, glob@^7.1.1, glob@~7.1.2:
once "^1.3.0"
path-is-absolute "^1.0.0"
+global@^4.3.2:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
+ dependencies:
+ min-document "^2.19.0"
+ process "~0.5.1"
+
globals@^9.18.0:
version "9.18.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
@@ -1011,6 +1022,12 @@ mime-types@^2.1.12, mime-types@~2.1.7:
dependencies:
mime-db "~1.30.0"
+min-document@^2.19.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
+ dependencies:
+ dom-walk "^0.1.0"
+
minimatch@^3.0.0, minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
@@ -1141,6 +1158,10 @@ process-nextick-args@~1.0.6:
version "1.0.7"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+process@~0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+
punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
From ff5681e7317edbaa92f1dfdff3645f24de9e6e9f Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Wed, 11 Oct 2017 00:53:19 +0800
Subject: [PATCH 19/56] added stuff
Signed-off-by: Toni-Jan Keith Monserrat
---
core/shell/index.js | 3 +-
gulp/utils/create-firebase-config.js | 27 ++-
package.json | 1 +
src/.temp/temp.json | 6 +-
src/config/dev.json | 6 +-
src/firebase.js | 17 +-
.../devfest-module/models/user-model.js | 201 ++++++++++++++++++
.../devfest-landing-page.js | 2 +-
src/modules/firebase/index.js | 0
yarn.lock | 123 ++++++++++-
10 files changed, 374 insertions(+), 12 deletions(-)
create mode 100644 src/modules/devfest-module/models/user-model.js
create mode 100644 src/modules/firebase/index.js
diff --git a/core/shell/index.js b/core/shell/index.js
index 626c59d..661b812 100644
--- a/core/shell/index.js
+++ b/core/shell/index.js
@@ -9,6 +9,7 @@ import partials from '../../src/partials.js'
import auth from '../../src/authentication/index.js'
import { reducers, store, ReduxMixin } from '../modules/state-manager';
import { combineReducers } from 'redux';
+import '../../src/firebase';
const ROUTER_ACTION = {
PARAMS: 'ROUTER_UPDATE_PARAMS',
@@ -36,7 +37,7 @@ export { ROUTER_ACTION };
const messages = []
-class AppShell extends QueryParamsMixin(LocationMixin(Polymer.Element)) {
+class AppShell extends ReduxMixin(QueryParamsMixin(LocationMixin(Polymer.Element))) {
static get is () { return 'app-shell' }
static get properties () {
diff --git a/gulp/utils/create-firebase-config.js b/gulp/utils/create-firebase-config.js
index 6cd39ad..3f8252e 100644
--- a/gulp/utils/create-firebase-config.js
+++ b/gulp/utils/create-firebase-config.js
@@ -1,9 +1,24 @@
-const getConfig = require('./get-config')
+const getConfig = require('./get-config');
-module.exports = (env) => {
- const {config} = getConfig(env)
+module.exports = (dev) => {
+ const {config} = getConfig(dev);
return `
- export default ${JSON.stringify(config.build.firebaseConfig)}
- `
-}
\ No newline at end of file
+ let firebase = null;
+ const configs = ${JSON.stringify(config.build.firebaseConfig)};
+ import(/* webpackChunkName: 'firebase' */ 'firebase').then(sdk => {
+ firebase = sdk;
+ configs.forEach(config => {
+ if (config.name) {
+ firebase.initializeApp(config, name);
+ } else {
+ firebase.initializeApp(config);
+ }
+ });
+ window.dispatchEvent(new window.CustomEvent('firebase-initialized', { detail: firebase }));
+ })
+ const firebaseConfig = configs;
+ export default firebase;
+ export { firebaseConfig };
+ `;
+};
diff --git a/package.json b/package.json
index 58a1c32..70406aa 100644
--- a/package.json
+++ b/package.json
@@ -21,6 +21,7 @@
"build-production": "cd gulp && ./node_modules/.bin/gulp --prod"
},
"dependencies": {
+ "firebase": "^4.5.0",
"global": "^4.3.2",
"indexeddbshim": "^3.0.4",
"intersection-observer": "^0.4.2",
diff --git a/src/.temp/temp.json b/src/.temp/temp.json
index fe75d47..cd28466 100644
--- a/src/.temp/temp.json
+++ b/src/.temp/temp.json
@@ -19,7 +19,11 @@
"firebaseConfig": [
{
"apiKey": "AIzaSyB3VQN0MNOxcunaUKXZr54u0t6ruv2YbkE",
- "name": "DEFAULT"
+ "authDomain": "devfestph.firebaseapp.com",
+ "databaseURL": "https://devfestph.firebaseio.com",
+ "projectId": "devfestph",
+ "storageBucket": "devfestph.appspot.com",
+ "messagingSenderId": "36335134103"
}
]
},
diff --git a/src/config/dev.json b/src/config/dev.json
index fe75d47..cd28466 100644
--- a/src/config/dev.json
+++ b/src/config/dev.json
@@ -19,7 +19,11 @@
"firebaseConfig": [
{
"apiKey": "AIzaSyB3VQN0MNOxcunaUKXZr54u0t6ruv2YbkE",
- "name": "DEFAULT"
+ "authDomain": "devfestph.firebaseapp.com",
+ "databaseURL": "https://devfestph.firebaseio.com",
+ "projectId": "devfestph",
+ "storageBucket": "devfestph.appspot.com",
+ "messagingSenderId": "36335134103"
}
]
},
diff --git a/src/firebase.js b/src/firebase.js
index 821ca14..85f8f03 100644
--- a/src/firebase.js
+++ b/src/firebase.js
@@ -1,3 +1,18 @@
- export default [{"apiKey":"AIzaSyB3VQN0MNOxcunaUKXZr54u0t6ruv2YbkE","name":"DEFAULT"}]
+ let firebase = null;
+ const configs = [{"apiKey":"AIzaSyB3VQN0MNOxcunaUKXZr54u0t6ruv2YbkE","authDomain":"devfestph.firebaseapp.com","databaseURL":"https://devfestph.firebaseio.com","projectId":"devfestph","storageBucket":"devfestph.appspot.com","messagingSenderId":"36335134103"}];
+ import(/* webpackChunkName: 'firebase' */ 'firebase').then(sdk => {
+ firebase = sdk;
+ configs.forEach(config => {
+ if (config.name) {
+ firebase.initializeApp(config, name);
+ } else {
+ firebase.initializeApp(config);
+ }
+ });
+ window.dispatchEvent(new window.CustomEvent('firebase-initialized', { detail: firebase }));
+ })
+ const firebaseConfig = configs;
+ export default firebase;
+ export { firebaseConfig };
\ No newline at end of file
diff --git a/src/modules/devfest-module/models/user-model.js b/src/modules/devfest-module/models/user-model.js
new file mode 100644
index 0000000..54dbbc4
--- /dev/null
+++ b/src/modules/devfest-module/models/user-model.js
@@ -0,0 +1,201 @@
+import { ReduxMixin, store, reducers } from '../../../../core/modules/state-manager';
+import { combineReducers } from 'redux';
+
+let firebase = null;
+import(/* webpackChunkName: 'firebase' */ 'firebase').then(sdk => {
+ if (sdk) {
+ firebase = sdk;
+ }
+});
+
+let authStateChanged = null;
+
+const profileModel = {
+ primary: {
+ displayName: String,
+ firstName: String,
+ email: String,
+ avatar: String
+ },
+ meta: {
+ lastName: String,
+ dateJoined: Number,
+ dateBirth: Number
+ },
+ cross: {
+ articles: Array,
+ threads: Array
+ }
+};
+
+const listeners = {};
+
+const modelPath = 'v1/user';
+
+const USER_ACTION = {
+ UPDATE: 'USER_UPDATE',
+ PROFILE: 'USER_UPDATE_PROFILE',
+ FETCH: 'USER_UPDATE_FETCH'
+};
+
+const observeAuth = (firebase, store) => {
+ authStateChanged = authStateChanged || firebase.auth().onAuthStateChanged((user) => {
+ store.dispatch({
+ type: USER_ACTION.UPDATE,
+ user
+ });
+ });
+ return authStateChanged;
+};
+
+const updateAttrSnapshot = (store, attr, snapshot) => {
+ if (snapshot.exists()) {
+ store.dispatch({
+ type: USER_ACTION.PROFILE,
+ value: snapshot.val(),
+ attr
+ });
+ }
+};
+
+const updateModelTypeSnapshot = (store, modelType, snapshot) => {
+ if (snapshot.exists()) {
+ const attrs = [];
+ snapshot.forEach(child => {
+ attrs.push({
+ attr: child.key,
+ value: child.val()
+ });
+ });
+ store.dispatch({
+ type: USER_ACTION.PROFILE,
+ attrs
+ });
+ }
+};
+
+const firebaseDocumentLoader = (modelPath, key, action) => {
+ const sourcePath = `${modelPath}/source/${key}`;
+ if (action.modelType) {
+ const modelType = `${sourcePath}/${action.modelType}`;
+ if (!action.attr) {
+ for (var i in profileModel) {
+ if (i === action.modelType) {
+ for (var j in profileModel[i]) {
+ if (listeners[modelType + '/' + j]) {
+ listeners[modelType + '/' + j].off();
+ listeners[modelType + '/' + j] = null;
+ }
+ }
+ listeners[modelType] = listeners[modelType] || firebase.database().ref(modelType);
+ listeners[modelType].on('value', updateModelTypeSnapshot.bind(this, store, action.modelType));
+ break;
+ }
+ }
+ } else if (!listeners[modelType]) {
+ const attr = `${modelType}/${action.attr}`;
+ listeners[attr] = listeners[attr] || firebase.database().ref(attr);
+ listeners[attr].on('value', updateAttrSnapshot.bind(this, store, action.attr));
+ }
+ }
+}
+
+reducers.user = (user = {}, action) => {
+ switch (action.type) {
+ case USER_ACTION.FETCH:
+ if (user.user && user.user.uid) {
+ firebaseDocumentLoader
+ }
+ return user;
+ case USER_ACTION.UPDATE:
+ if (!action.user) {
+ for (var path in listeners) {
+ if (listeners[path]) {
+ listeners[path].off();
+ listeners[path] = null;
+ }
+ }
+ }
+ return Object.assign({}, user, {
+ user: action.user
+ });
+ case USER_ACTION.PROFILE:
+ const profile = Object.assign({}, user.profile);
+
+ if (action.attrs) {
+ action.attrs.forEach(item => {
+ profile[item.attr] = item.value;
+ });
+ } else if (action.attr) {
+ profile[action.attr] = action.value;
+ }
+
+ if (action.del) {
+ return Object.assign({}, user, {
+ profile: null
+ });
+ }
+
+ return Object.assign({}, user, {
+ profile
+ });
+ default:
+ return user;
+ }
+};
+store.replaceReducer(combineReducers(reducers));
+
+
+if (firebase) {
+ observeAuth(firebase, store);
+} else {
+ window.addEventListener('firebase-initialized', event => {
+ observeAuth(event.detail, store);
+ });
+}
+
+export { USER_ACTION };
+
+export default (superClass) => {
+ return class extends ReduxMixin(superClass) {
+ static get properties () {
+ return {
+ user: {
+ type: Object,
+ statePath: 'user.user',
+ observer: '_userChanged'
+ },
+ profile: {
+ type: Object,
+ statePath: 'user.profile'
+ }
+ };
+ }
+
+ _userChanged (user) {
+ if (user) {
+ this.dispatch({
+ type: USER_ACTION.FETCH,
+ modelType: 'primary'
+ });
+ this.dispatch({
+ type: USER_ACTION.FETCH,
+ modelType: 'meta'
+ });
+ } else {
+ this.dispatch({
+ type: USER_ACTION.PROFILE,
+ del: true
+ });
+ }
+ }
+
+ login () {
+ firebase.auth().signInWithPopup(new firebase.auth.GoogleAuthProvider());
+ }
+
+ logout () {
+ firebase.auth().signOut();
+ }
+ };
+};
diff --git a/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.js b/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.js
index 6c20195..bc28bf4 100644
--- a/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.js
+++ b/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.js
@@ -16,7 +16,7 @@ import '../../fonts/devfest-fonts.html'
import './devfest-landing-page.html'
import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js'
import marked from 'marked'
-import firebaseConfig from '../../../../firebase.js'
+import { firebaseConfig } from '../../../../firebase.js'
import app from '../../../../app.js'
window.marked = window.marked || marked
diff --git a/src/modules/firebase/index.js b/src/modules/firebase/index.js
new file mode 100644
index 0000000..e69de29
diff --git a/yarn.lock b/yarn.lock
index 4259c05..1003f8d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,10 @@
# yarn lockfile v1
+"@firebase/webchannel-wrapper@^0.2.1":
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.2.1.tgz#2c4dbc15edd1de4f656d543a6f512ded7978ef72"
+
abbrev@1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
@@ -489,6 +493,10 @@ balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+base64url@2.0.0, base64url@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb"
+
bcrypt-pbkdf@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
@@ -521,6 +529,10 @@ browserslist@^2.1.2:
caniuse-lite "^1.0.30000718"
electron-to-chromium "^1.3.18"
+buffer-equal-constant-time@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
+
caniuse-lite@^1.0.30000718:
version "1.0.30000726"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000726.tgz#966a753fa107a09d4131cf8b3d616723a06ccf7e"
@@ -621,6 +633,10 @@ dom-serializer@0:
domelementtype "~1.1.1"
entities "~1.1.1"
+dom-storage@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/dom-storage/-/dom-storage-2.0.2.tgz#ed17cbf68abd10e0aef8182713e297c5e4b500b0"
+
dom-walk@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
@@ -648,6 +664,13 @@ ecc-jsbn@~0.1.1:
dependencies:
jsbn "~0.1.0"
+ecdsa-sig-formatter@1.0.9:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz#4bc926274ec3b5abb5016e7e1d60921ac262b2a1"
+ dependencies:
+ base64url "^2.0.0"
+ safe-buffer "^5.0.1"
+
electron-to-chromium@^1.3.18:
version "1.3.21"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.21.tgz#a967ebdcfe8ed0083fc244d1894022a8e8113ea2"
@@ -697,6 +720,23 @@ extsprintf@1.3.0, extsprintf@^1.2.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+faye-websocket@0.9.3:
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.9.3.tgz#482a505b0df0ae626b969866d3bd740cdb962e83"
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+firebase@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/firebase/-/firebase-4.5.0.tgz#e0973a9803b74c4c9d73d19f874712e6e9d16ba7"
+ dependencies:
+ "@firebase/webchannel-wrapper" "^0.2.1"
+ dom-storage "^2.0.2"
+ faye-websocket "0.9.3"
+ jsonwebtoken "^7.3.0"
+ promise-polyfill "^6.0.2"
+ xmlhttprequest "^1.8.0"
+
for-each@~0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4"
@@ -848,6 +888,10 @@ htmlparser2@^3.8.2:
inherits "^2.0.1"
readable-stream "^2.0.2"
+http-parser-js@>=0.4.0:
+ version "0.4.9"
+ resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.9.tgz#ea1a04fb64adff0242e9974f297dd4c3cad271e1"
+
http-signature@~1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
@@ -928,10 +972,23 @@ isarray@0.0.1, isarray@1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+isemail@1.x.x:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a"
+
isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+joi@^6.10.1:
+ version "6.10.1"
+ resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06"
+ dependencies:
+ hoek "2.x.x"
+ isemail "1.x.x"
+ moment "2.x.x"
+ topo "1.x.x"
+
js-tokens@^3.0.0, js-tokens@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
@@ -968,6 +1025,16 @@ jsonify@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+jsonwebtoken@^7.3.0:
+ version "7.4.3"
+ resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.4.3.tgz#77f5021de058b605a1783fa1283e99812e645638"
+ dependencies:
+ joi "^6.10.1"
+ jws "^3.1.4"
+ lodash.once "^4.0.0"
+ ms "^2.0.0"
+ xtend "^4.0.1"
+
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -977,6 +1044,23 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
+jwa@^1.1.4:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.5.tgz#a0552ce0220742cd52e153774a32905c30e756e5"
+ dependencies:
+ base64url "2.0.0"
+ buffer-equal-constant-time "1.0.1"
+ ecdsa-sig-formatter "1.0.9"
+ safe-buffer "^5.0.1"
+
+jws@^3.1.4:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2"
+ dependencies:
+ base64url "^2.0.0"
+ jwa "^1.1.4"
+ safe-buffer "^5.0.1"
+
lodash-es@^4.2.1:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7"
@@ -985,6 +1069,10 @@ lodash._reinterpolate@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
+lodash.once@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
+
lodash.template@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0"
@@ -1044,7 +1132,11 @@ minimist@0.0.8, minimist@1.2.0, minimist@^1.2.0, minimist@~1.2.0:
dependencies:
minimist "0.0.8"
-ms@2.0.0:
+moment@2.x.x:
+ version "2.18.1"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f"
+
+ms@2.0.0, ms@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -1162,6 +1254,10 @@ process@~0.5.1:
version "0.5.2"
resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+promise-polyfill@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.0.2.tgz#d9c86d3dc4dc2df9016e88946defd69b49b41162"
+
punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
@@ -1417,6 +1513,12 @@ to-fast-properties@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+topo@1.x.x:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/topo/-/topo-1.1.0.tgz#e9d751615d1bb87dc865db182fa1ca0a5ef536d5"
+ dependencies:
+ hoek "2.x.x"
+
tough-cookie@~2.3.0:
version "2.3.2"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
@@ -1457,6 +1559,17 @@ verror@1.10.0:
core-util-is "1.0.2"
extsprintf "^1.2.0"
+websocket-driver@>=0.5.1:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"
+ dependencies:
+ http-parser-js ">=0.4.0"
+ websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.2.tgz#0e18781de629a18308ce1481650f67ffa2693a5d"
+
"websql@https://github.com/brettz9/node-websql#configurable":
version "0.4.4"
resolved "https://github.com/brettz9/node-websql#c9828a34c92eced64858fc19151ec099fd60e8dd"
@@ -1496,3 +1609,11 @@ workbox-sw@2.0.1, workbox-sw@^1.1.0, workbox-sw@^2.0.0:
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+
+xmlhttprequest@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc"
+
+xtend@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
From d6ed356a2a0e56242c137886ff9a2807ec88bee4 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Wed, 11 Oct 2017 02:40:39 +0800
Subject: [PATCH 20/56] added so much stuff
Signed-off-by: Toni-Jan Keith Monserrat
---
.eslintrc.js | 8 +
firebase.json | 28 +
package.json | 15 +-
src/.temp/temp.json | 32 +
src/authentication/index.js | 12 +-
src/config/dev.json | 32 +
.../devfest-drawer/devfest-drawer.html | 10 +
.../devfest-drawer/devfest-drawer.js | 51 +-
.../devfest-header/devfest-header.html | 10 +
.../devfest-header/devfest-header.js | 70 +-
.../devfest-header/devfest-header.scss | 6 +-
.../devfest-speakers-section.js | 32 +-
.../devfest-module/models/user-model.js | 119 +--
.../devfest-authorized-page.js | 10 +-
.../devfest-codelabs-page.html | 12 +
.../devfest-codelabs-page.js | 48 +
.../devfest-codelabs-page.scss | 3 +
.../devfest-connect-ticket-page.html | 12 +
.../devfest-connect-ticket-page.js | 48 +
.../devfest-connect-ticket-page.scss | 3 +
.../devfest-landing-page.html | 2 +-
.../devfest-landing-page.js | 116 ++-
.../devfest-login-page.html | 12 +
.../devfest-login-page/devfest-login-page.js | 48 +
.../devfest-login-page.scss | 3 +
.../devfest-not-sponsor-page.html | 12 +
.../devfest-not-sponsor-page.js | 48 +
.../devfest-not-sponsor-page.scss | 3 +
.../devfest-profile-page.html | 12 +
.../devfest-profile-page.js | 48 +
.../devfest-profile-page.scss | 3 +
.../devfest-register-page.html | 12 +
.../devfest-register-page.js | 48 +
.../devfest-register-page.scss | 3 +
.../devfest-scan-page/devfest-scan-page.html | 12 +
.../devfest-scan-page/devfest-scan-page.js | 48 +
.../devfest-scan-page/devfest-scan-page.scss | 0
.../devfest-scanned-list-page.html | 12 +
.../devfest-scanned-list-page.js | 48 +
.../devfest-scanned-list-page.scss | 3 +
.../devfest-sponsors-page.html | 44 +-
.../devfest-sponsors-page.js | 49 +-
.../devfest-tickets-page.js | 46 +-
.../devfest-verify-page.html | 12 +
.../devfest-verify-page.js | 48 +
.../devfest-verify-page.scss | 3 +
src/modules/firebase/index.js | 92 ++
src/routing.js | 7 +
yarn.lock | 858 +++++++++++++++++-
49 files changed, 1854 insertions(+), 359 deletions(-)
create mode 100644 .eslintrc.js
create mode 100644 src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.html
create mode 100644 src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js
create mode 100644 src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.scss
create mode 100644 src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.html
create mode 100644 src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js
create mode 100644 src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.scss
create mode 100644 src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html
create mode 100644 src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.js
create mode 100644 src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.scss
create mode 100644 src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.html
create mode 100644 src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.js
create mode 100644 src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.scss
create mode 100644 src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
create mode 100644 src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js
create mode 100644 src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss
create mode 100644 src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.html
create mode 100644 src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.js
create mode 100644 src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.scss
create mode 100644 src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
create mode 100644 src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js
create mode 100644 src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.scss
create mode 100644 src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.html
create mode 100644 src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js
create mode 100644 src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.scss
create mode 100644 src/modules/devfest-module/pages/devfest-verify-page/devfest-verify-page.html
create mode 100644 src/modules/devfest-module/pages/devfest-verify-page/devfest-verify-page.js
create mode 100644 src/modules/devfest-module/pages/devfest-verify-page/devfest-verify-page.scss
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000..f2539bf
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,8 @@
+module.exports = {
+ "extends": "semistandard",
+ "parser": "babel-eslint",
+ "plugins": [
+ "standard",
+ "promise"
+ ]
+};
\ No newline at end of file
diff --git a/firebase.json b/firebase.json
index 6dbcc4a..018c934 100644
--- a/firebase.json
+++ b/firebase.json
@@ -40,6 +40,34 @@
"source": "/sponsors",
"destination": "/index.html"
},
+ {
+ "source": "/login",
+ "destination": "/index.html"
+ },
+ {
+ "source": "/profile",
+ "destination": "/index.html"
+ },
+ {
+ "source": "/codelabs/**/**/**",
+ "destination": "/index.html"
+ },
+ {
+ "source": "/connect-ticket",
+ "destination": "/index.html"
+ },
+ {
+ "source": "/scan",
+ "destination": "/index.html"
+ },
+ {
+ "source": "/scanned-list",
+ "destination": "/index.html"
+ },
+ {
+ "source": "/are-you-a-sponsor",
+ "destination": "/index.html"
+ },
{
"source": "/auth-check",
"destination": "/index.html"
diff --git a/package.json b/package.json
index 70406aa..b32e9cc 100644
--- a/package.json
+++ b/package.json
@@ -35,6 +35,7 @@
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.6.0",
"eslint-plugin-html": "^3.2.0",
+ "semistandard": "^11.0.0",
"workbox-build": "^2.0.0",
"workbox-routing": "^1.1.0",
"workbox-sw": "^1.1.0"
@@ -45,6 +46,18 @@
"minimist": "1.2.0",
"isarray": "1.0.0",
"assert-plus": "1.0.0",
- "domelementtype": "1.3.0"
+ "domelementtype": "1.3.0",
+ "rimraf": "2.6.2",
+ "semver": "5.4.1",
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "is-fullwidth-code-point": "2.0.0",
+ "ansi-regex": "3.0.0",
+ "es-abstract": "1.9.0",
+ "debug": "2.6.9",
+ "doctrine": "2.0.0",
+ "acorn": "5.1.2",
+ "find-up": "2.1.0",
+ "path-exists": "3.0.0"
}
}
diff --git a/src/.temp/temp.json b/src/.temp/temp.json
index cd28466..6f0cf00 100644
--- a/src/.temp/temp.json
+++ b/src/.temp/temp.json
@@ -39,6 +39,13 @@
"devfest-session-page": "modules/devfest-module/pages/devfest-session-page/devfest-session-page.js",
"devfest-tickets-page": "modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.js",
"devfest-sponsors-page": "modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js",
+ "devfest-login-page": "modules/devfest-module/pages/devfest-login-page/devfest-login-page.js",
+ "devfest-profile-page": "modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js",
+ "devfest-codelabs-page": "modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js",
+ "devfest-connect-ticket-page": "modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js",
+ "devfest-scan-page": "modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js",
+ "devfest-scanned-list-page": "modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js",
+ "devfest-not-sponsor-page": "modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.js",
"devfest-not-found-page": "modules/devfest-module/pages/devfest-not-found-page/devfest-not-found-page.js",
"devfest-not-authorized-page": "modules/devfest-module/pages/devfest-not-authorized-page/devfest-not-authorized-page.js",
"devfest-authorized-page": "modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.js",
@@ -54,6 +61,31 @@
"/sessions/:id": "devfest-session-page",
"/tickets": "devfest-tickets-page",
"/sponsors": "devfest-sponsors-page",
+ "/login": "devfest-login-page",
+ "/profile": {
+ "name": "devfest-login-page",
+ "auth": "isLoggedIn"
+ },
+ "/codelabs/:type?/:id?/:page?": {
+ "name": "devfest-codelabs-page",
+ "auth": "isLoggedIn"
+ },
+ "/connect-ticket": {
+ "name": "devfest-connect-ticket-page",
+ "auth": "isLoggedIn"
+ },
+ "/scan": {
+ "name": "devfest-scan-page",
+ "auth": "isSponsor"
+ },
+ "/scanned-list": {
+ "name": "devfest-scanned-list-page",
+ "auth": "isSponsor"
+ },
+ "/are-you-a-sponsor": {
+ "name": "devfest-not-sponsor-page",
+ "auth": "isLoggedIn"
+ },
"/auth-check": {
"name": "devfest-authorized-page",
"auth": "exampleAuthentication"
diff --git a/src/authentication/index.js b/src/authentication/index.js
index 401cad9..a781fb4 100644
--- a/src/authentication/index.js
+++ b/src/authentication/index.js
@@ -1,5 +1,13 @@
export default {
exampleAuthentication: () => {
- return false
+ return false;
+ },
+
+ isLoggedIn: () => {
+ return true;
+ },
+
+ isSponsor: () => {
+ return true;
}
-}
+};
diff --git a/src/config/dev.json b/src/config/dev.json
index cd28466..6f0cf00 100644
--- a/src/config/dev.json
+++ b/src/config/dev.json
@@ -39,6 +39,13 @@
"devfest-session-page": "modules/devfest-module/pages/devfest-session-page/devfest-session-page.js",
"devfest-tickets-page": "modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.js",
"devfest-sponsors-page": "modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js",
+ "devfest-login-page": "modules/devfest-module/pages/devfest-login-page/devfest-login-page.js",
+ "devfest-profile-page": "modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js",
+ "devfest-codelabs-page": "modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js",
+ "devfest-connect-ticket-page": "modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js",
+ "devfest-scan-page": "modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js",
+ "devfest-scanned-list-page": "modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js",
+ "devfest-not-sponsor-page": "modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.js",
"devfest-not-found-page": "modules/devfest-module/pages/devfest-not-found-page/devfest-not-found-page.js",
"devfest-not-authorized-page": "modules/devfest-module/pages/devfest-not-authorized-page/devfest-not-authorized-page.js",
"devfest-authorized-page": "modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.js",
@@ -54,6 +61,31 @@
"/sessions/:id": "devfest-session-page",
"/tickets": "devfest-tickets-page",
"/sponsors": "devfest-sponsors-page",
+ "/login": "devfest-login-page",
+ "/profile": {
+ "name": "devfest-login-page",
+ "auth": "isLoggedIn"
+ },
+ "/codelabs/:type?/:id?/:page?": {
+ "name": "devfest-codelabs-page",
+ "auth": "isLoggedIn"
+ },
+ "/connect-ticket": {
+ "name": "devfest-connect-ticket-page",
+ "auth": "isLoggedIn"
+ },
+ "/scan": {
+ "name": "devfest-scan-page",
+ "auth": "isSponsor"
+ },
+ "/scanned-list": {
+ "name": "devfest-scanned-list-page",
+ "auth": "isSponsor"
+ },
+ "/are-you-a-sponsor": {
+ "name": "devfest-not-sponsor-page",
+ "auth": "isLoggedIn"
+ },
"/auth-check": {
"name": "devfest-authorized-page",
"auth": "exampleAuthentication"
diff --git a/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html b/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html
index b806b11..b502929 100644
--- a/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html
+++ b/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html
@@ -12,6 +12,16 @@
[[item.text]]
+
+
+ Codelabs
+ Profile
+ Logout
+
+
+
+ Login
+
diff --git a/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.js b/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.js
index 948bb15..d871681 100644
--- a/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.js
+++ b/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.js
@@ -1,51 +1,54 @@
-import 'polymer/polymer.html'
-import 'polymer/lib/mixins/gesture-event-listeners.html'
-import 'app-layout/app-header/app-header.html'
-import 'app-layout/app-toolbar/app-toolbar.html'
-import 'app-layout/app-drawer/app-drawer.html'
-import '../devfest-button/devfest-button.js'
-import '../gdg-logo/gdg-logo.js'
-import './devfest-drawer.html'
-import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js'
-
-class DevfestDrawer extends contentLoaderMixin(Polymer.GestureEventListeners(Polymer.Element)) {
- static get is () { return 'devfest-drawer' }
+import 'polymer/polymer.html';
+import 'polymer/lib/mixins/gesture-event-listeners.html';
+import 'app-layout/app-header/app-header.html';
+import 'app-layout/app-toolbar/app-toolbar.html';
+import 'app-layout/app-drawer/app-drawer.html';
+import '../devfest-button/devfest-button.js';
+import '../gdg-logo/gdg-logo.js';
+import './devfest-drawer.html';
+import User from '../../models/user-model';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+
+const {Polymer} = window;
+
+class DevfestDrawer extends User(contentLoaderMixin(Polymer.GestureEventListeners(Polymer.Element))) {
+ static get is () { return 'devfest-drawer'; }
static get properties () {
return {
menu: {
type: Array
}
- }
+ };
}
constructor () {
- super()
- this._boundOpenDrawer = this.openDrawer.bind(this)
+ super();
+ this._boundOpenDrawer = this.openDrawer.bind(this);
}
connectedCallback () {
- super.connectedCallback()
- this.reload()
- window.addEventListener('open-drawer', this._boundOpenDrawer)
+ super.connectedCallback();
+ this.reload();
+ window.addEventListener('open-drawer', this._boundOpenDrawer);
}
disconnectedCallback () {
- super.disconnectedCallback()
- window.removeEventListener('open-drawer', this._boundOpenDrawer)
+ super.disconnectedCallback();
+ window.removeEventListener('open-drawer', this._boundOpenDrawer);
}
reload (menu) {
- this._fetchJson(menu || 'menu/default.json', 'menu')
+ this._fetchJson(menu || 'menu/default.json', 'menu');
}
openDrawer () {
- this.shadowRoot.querySelector('app-drawer').open()
+ this.shadowRoot.querySelector('app-drawer').open();
}
closeDrawer () {
- this.shadowRoot.querySelector('app-drawer').close()
+ this.shadowRoot.querySelector('app-drawer').close();
}
}
-window.customElements.define(DevfestDrawer.is, DevfestDrawer)
\ No newline at end of file
+window.customElements.define(DevfestDrawer.is, DevfestDrawer);
diff --git a/src/modules/devfest-module/components/devfest-header/devfest-header.html b/src/modules/devfest-module/components/devfest-header/devfest-header.html
index 8ded3f3..6f7fbdf 100644
--- a/src/modules/devfest-module/components/devfest-header/devfest-header.html
+++ b/src/modules/devfest-module/components/devfest-header/devfest-header.html
@@ -12,6 +12,16 @@
[[item.text]]
+
+
+ Codelabs
+ Profile
+ Logout
+
+
+
+ Login
+
diff --git a/src/modules/devfest-module/components/devfest-header/devfest-header.js b/src/modules/devfest-module/components/devfest-header/devfest-header.js
index eb5e0f4..5bac9e3 100644
--- a/src/modules/devfest-module/components/devfest-header/devfest-header.js
+++ b/src/modules/devfest-module/components/devfest-header/devfest-header.js
@@ -1,81 +1,83 @@
-import 'polymer/polymer.html'
-import 'polymer/lib/mixins/gesture-event-listeners.html'
-import 'app-layout/app-header/app-header.html'
-import 'app-layout/app-toolbar/app-toolbar.html'
-import 'iron-flex-layout/iron-flex-layout.html'
-import 'shadycss/apply-shim.html'
-import '../devfest-button/devfest-button.js'
-import '../devfest-icon-button/devfest-icon-button.js'
-import '../gdg-logo/gdg-logo.js'
-import '../../fonts/devfest-fonts.html'
-import './devfest-header.html'
-import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js'
+import 'polymer/polymer.html';
+import 'polymer/lib/mixins/gesture-event-listeners.html';
+import 'app-layout/app-header/app-header.html';
+import 'app-layout/app-toolbar/app-toolbar.html';
+import 'iron-flex-layout/iron-flex-layout.html';
+import 'shadycss/apply-shim.html';
+import '../devfest-button/devfest-button.js';
+import '../devfest-icon-button/devfest-icon-button.js';
+import '../gdg-logo/gdg-logo.js';
+import '../../fonts/devfest-fonts.html';
+import './devfest-header.html';
+import User from '../../models/user-model';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
-class DevfestHeader extends contentLoaderMixin(Polymer.GestureEventListeners(Polymer.Element)) {
- static get is () { return 'devfest-header' }
+const {Polymer, IntersectionObserver, CustomEvent} = window;
+
+class DevfestHeader extends User(contentLoaderMixin(Polymer.GestureEventListeners(Polymer.Element))) {
+ static get is () { return 'devfest-header'; }
static get properties () {
return {
menu: {
type: Array
}
- }
+ };
}
connectedCallback () {
- super.connectedCallback()
- this.reload()
- this._observedObject = null
+ super.connectedCallback();
+ this.reload();
+ this._observedObject = null;
if (window.IntersectionObserver) {
this._observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if (entry.target === this._observedObject) {
if (!entry.isIntersecting) {
- this.shadowRoot.querySelector('gdg-logo').style.opacity = 1
+ this.shadowRoot.querySelector('gdg-logo').style.opacity = 1;
} else {
- this.shadowRoot.querySelector('gdg-logo').style.opacity = 0
+ this.shadowRoot.querySelector('gdg-logo').style.opacity = 0;
}
}
- })
+ });
}, {
threshold: [0, 0.25, 0.5, 0.75, 1.0]
- })
+ });
}
}
reload (menu) {
- this._fetchJson(menu || 'menu/default.json', 'menu')
+ this._fetchJson(menu || 'menu/default.json', 'menu');
Polymer.RenderStatus.afterNextRender(this, () => {
if (this._observer) {
- this._observer.disconnect()
+ this._observer.disconnect();
}
- const page = document.querySelector('.page--on-view')
+ const page = document.querySelector('.page--on-view');
if (page && page.nodeName.toLowerCase() === 'devfest-landing-page' && page.shadowRoot) {
-
- const children = page.shadowRoot.children
- this._observedObject = null
+ const children = page.shadowRoot.children;
+ this._observedObject = null;
for (var i = 0; i < children.length; i++) {
if (children[i].getBoundingClientRect().height > 0) {
- this._observedObject = children[i]
+ this._observedObject = children[i];
break;
}
}
if (this._observer && this._observedObject) {
- this._observer.observe(this._observedObject)
+ this._observer.observe(this._observedObject);
}
}
- })
+ });
}
openDrawer () {
- window.dispatchEvent(new CustomEvent('open-drawer'))
+ window.dispatchEvent(new CustomEvent('open-drawer'));
}
}
-window.customElements.define(DevfestHeader.is, DevfestHeader)
+window.customElements.define(DevfestHeader.is, DevfestHeader);
-export default DevfestHeader
\ No newline at end of file
+export default DevfestHeader;
diff --git a/src/modules/devfest-module/components/devfest-header/devfest-header.scss b/src/modules/devfest-module/components/devfest-header/devfest-header.scss
index e9fdf8d..17b91a2 100644
--- a/src/modules/devfest-module/components/devfest-header/devfest-header.scss
+++ b/src/modules/devfest-module/components/devfest-header/devfest-header.scss
@@ -20,13 +20,13 @@ app-header {
.menu {
display: none;
- @media screen and (max-width: 700px) {
+ @media screen and (max-width: 1100px) {
display: block;
}
}
.links {
- @media screen and (max-width: 700px) {
+ @media screen and (max-width: 1100px) {
display: none;
}
}
@@ -38,7 +38,7 @@ app-header {
min-width: 100px;
height: 10px;
- @media screen and (max-width: 700px) {
+ @media screen and (max-width: 1100px) {
display: none;
}
}
diff --git a/src/modules/devfest-module/components/devfest-speakers-section/devfest-speakers-section.js b/src/modules/devfest-module/components/devfest-speakers-section/devfest-speakers-section.js
index b60c4cb..176815c 100644
--- a/src/modules/devfest-module/components/devfest-speakers-section/devfest-speakers-section.js
+++ b/src/modules/devfest-module/components/devfest-speakers-section/devfest-speakers-section.js
@@ -1,9 +1,9 @@
-import 'polymer/polymer.html'
-import './devfest-speakers-section.html'
-import app from '../../../../app'
+import 'polymer/polymer.html';
+import './devfest-speakers-section.html';
+import app from '../../../../app';
class DevfestSpeakersSection extends Polymer.Element {
- static get is () { return 'devfest-speakers-section' }
+ static get is () { return 'devfest-speakers-section'; }
static get properties () {
return {
@@ -19,35 +19,33 @@ class DevfestSpeakersSection extends Polymer.Element {
type: Boolean,
value: false
}
- }
+ };
}
static get observers () {
return [
'reload(speakers)',
'reload(speakers.*)'
- ]
+ ];
}
constructor () {
super()
- this._app = app
+ this._app = app;
}
reload () {
- this.speakersArray = []
- const speakers = Object.entries(this.speakers)
+ this.speakersArray = [];
+ const speakers = Object.entries(this.speakers);
speakers.forEach(speaker => {
- const obj = speaker[1]
- obj.id = speaker[0]
- this.speakersArray.push(obj)
- })
+ const obj = speaker[1];
+ obj.id = speaker[0];
+ this.speakersArray.push(obj);
+ });
// console.log()
}
-
-
}
-window.customElements.define(DevfestSpeakersSection.is, DevfestSpeakersSection)
+window.customElements.define(DevfestSpeakersSection.is, DevfestSpeakersSection);
-export default DevfestSpeakersSection
\ No newline at end of file
+export default DevfestSpeakersSection;
diff --git a/src/modules/devfest-module/models/user-model.js b/src/modules/devfest-module/models/user-model.js
index 54dbbc4..35442e3 100644
--- a/src/modules/devfest-module/models/user-model.js
+++ b/src/modules/devfest-module/models/user-model.js
@@ -1,35 +1,29 @@
-import { ReduxMixin, store, reducers } from '../../../../core/modules/state-manager';
import { combineReducers } from 'redux';
-
-let firebase = null;
-import(/* webpackChunkName: 'firebase' */ 'firebase').then(sdk => {
- if (sdk) {
- firebase = sdk;
- }
-});
-
-let authStateChanged = null;
+import { login, logout, firebaseDocumentLoader, observeAuth, firebaseRemoveListeners } from '../../firebase';
+import { ReduxMixin, store, reducers } from '../../../../core/modules/state-manager';
const profileModel = {
primary: {
displayName: String,
- firstName: String,
email: String,
- avatar: String
+ avatar: String,
+ github: String,
+ ticket: String,
+ ticketEmail: String,
+ ticketName: String
},
meta: {
- lastName: String,
dateJoined: Number,
- dateBirth: Number
+ score: Number,
+ accepted: Boolean,
+ verified: Boolean
},
cross: {
- articles: Array,
- threads: Array
+ sponsorId: String,
+ codelabsDone: Array
}
};
-const listeners = {};
-
const modelPath = 'v1/user';
const USER_ACTION = {
@@ -38,83 +32,16 @@ const USER_ACTION = {
FETCH: 'USER_UPDATE_FETCH'
};
-const observeAuth = (firebase, store) => {
- authStateChanged = authStateChanged || firebase.auth().onAuthStateChanged((user) => {
- store.dispatch({
- type: USER_ACTION.UPDATE,
- user
- });
- });
- return authStateChanged;
-};
-
-const updateAttrSnapshot = (store, attr, snapshot) => {
- if (snapshot.exists()) {
- store.dispatch({
- type: USER_ACTION.PROFILE,
- value: snapshot.val(),
- attr
- });
- }
-};
-
-const updateModelTypeSnapshot = (store, modelType, snapshot) => {
- if (snapshot.exists()) {
- const attrs = [];
- snapshot.forEach(child => {
- attrs.push({
- attr: child.key,
- value: child.val()
- });
- });
- store.dispatch({
- type: USER_ACTION.PROFILE,
- attrs
- });
- }
-};
-
-const firebaseDocumentLoader = (modelPath, key, action) => {
- const sourcePath = `${modelPath}/source/${key}`;
- if (action.modelType) {
- const modelType = `${sourcePath}/${action.modelType}`;
- if (!action.attr) {
- for (var i in profileModel) {
- if (i === action.modelType) {
- for (var j in profileModel[i]) {
- if (listeners[modelType + '/' + j]) {
- listeners[modelType + '/' + j].off();
- listeners[modelType + '/' + j] = null;
- }
- }
- listeners[modelType] = listeners[modelType] || firebase.database().ref(modelType);
- listeners[modelType].on('value', updateModelTypeSnapshot.bind(this, store, action.modelType));
- break;
- }
- }
- } else if (!listeners[modelType]) {
- const attr = `${modelType}/${action.attr}`;
- listeners[attr] = listeners[attr] || firebase.database().ref(attr);
- listeners[attr].on('value', updateAttrSnapshot.bind(this, store, action.attr));
- }
- }
-}
-
reducers.user = (user = {}, action) => {
switch (action.type) {
case USER_ACTION.FETCH:
if (user.user && user.user.uid) {
- firebaseDocumentLoader
+ firebaseDocumentLoader(modelPath, user.user.uid, action, store, profileModel, USER_ACTION.PROFILE);
}
return user;
case USER_ACTION.UPDATE:
if (!action.user) {
- for (var path in listeners) {
- if (listeners[path]) {
- listeners[path].off();
- listeners[path] = null;
- }
- }
+ firebaseRemoveListeners();
}
return Object.assign({}, user, {
user: action.user
@@ -145,14 +72,14 @@ reducers.user = (user = {}, action) => {
};
store.replaceReducer(combineReducers(reducers));
-
-if (firebase) {
- observeAuth(firebase, store);
-} else {
- window.addEventListener('firebase-initialized', event => {
- observeAuth(event.detail, store);
+const userState = (user) => {
+ store.dispatch({
+ type: USER_ACTION.UPDATE,
+ user
});
-}
+};
+
+observeAuth(userState);
export { USER_ACTION };
@@ -191,11 +118,11 @@ export default (superClass) => {
}
login () {
- firebase.auth().signInWithPopup(new firebase.auth.GoogleAuthProvider());
+ login('google');
}
logout () {
- firebase.auth().signOut();
+ logout();
}
};
};
diff --git a/src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.js b/src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.js
index de90227..bd8e90a 100644
--- a/src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.js
+++ b/src/modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.js
@@ -1,10 +1,10 @@
-import 'polymer/polymer.html'
-import './devfest-authorized-page.html'
+import 'polymer/polymer.html';
+import './devfest-authorized-page.html';
class DevfestAuthorizedPage extends Polymer.Element {
- static get is () { return 'devfest-authorized-page' }
+ static get is () { return 'devfest-authorized-page'; }
}
-window.customElements.define(DevfestAuthorizedPage.is, DevfestAuthorizedPage)
+window.customElements.define(DevfestAuthorizedPage.is, DevfestAuthorizedPage);
-export default DevfestAuthorizedPage
\ No newline at end of file
+export default DevfestAuthorizedPage;
diff --git a/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.html b/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.html
new file mode 100644
index 0000000..b6ac2f4
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js b/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js
new file mode 100644
index 0000000..2d7c5d7
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js
@@ -0,0 +1,48 @@
+import 'polymer/polymer-element.html';
+import 'polymer/lib/elements/dom-repeat.html';
+import 'iron-icon/iron-icon.html';
+import 'iron-flex-layout/iron-flex-layout.html';
+import 'shadycss/apply-shim.html';
+import 'marked-element/marked-element.html';
+import '../../fonts/devfest-fonts.html';
+import '../../icons/devfest-icons.html';
+import '../../components/devfest-footer/devfest-footer.js';
+import '../../components/devfest-button/devfest-button.js';
+import './devfest-codelabs-page.html';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+import marked from 'marked';
+window.marked = window.marked || marked;
+
+const {Polymer} = window;
+
+class DevfestCodelabsPage extends contentLoaderMixin(Polymer.Element) {
+ static get is () { return 'devfest-codelabs-page'; }
+
+ static get properties () {
+ return {
+ perks: {
+ type: Array,
+ value: []
+ },
+ details: {
+ type: Array,
+ value: []
+ },
+ payment: {
+ type: Array,
+ value: []
+ }
+ };
+ }
+
+ connectedCallback () {
+ super.connectedCallback();
+ this.reload();
+ }
+
+ reload () {}
+}
+
+window.customElements.define(DevfestCodelabsPage.is, DevfestCodelabsPage);
+
+export default DevfestCodelabsPage;
diff --git a/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.scss b/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.scss
new file mode 100644
index 0000000..4c50add
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.scss
@@ -0,0 +1,3 @@
+@import '../../styles/components/host.scss';
+@import '../../styles/components/typography.scss';
+@import '../../styles/components/section.scss';
diff --git a/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.html b/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.html
new file mode 100644
index 0000000..df5a51a
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js b/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js
new file mode 100644
index 0000000..7bfc846
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js
@@ -0,0 +1,48 @@
+import 'polymer/polymer-element.html';
+import 'polymer/lib/elements/dom-repeat.html';
+import 'iron-icon/iron-icon.html';
+import 'iron-flex-layout/iron-flex-layout.html';
+import 'shadycss/apply-shim.html';
+import 'marked-element/marked-element.html';
+import '../../fonts/devfest-fonts.html';
+import '../../icons/devfest-icons.html';
+import '../../components/devfest-footer/devfest-footer.js';
+import '../../components/devfest-button/devfest-button.js';
+import './devfest-connect-ticket-page.html';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+import marked from 'marked';
+window.marked = window.marked || marked;
+
+const {Polymer} = window;
+
+class DevfestConnectTicketPage extends contentLoaderMixin(Polymer.Element) {
+ static get is () { return 'devfest-connect-ticket-page'; }
+
+ static get properties () {
+ return {
+ perks: {
+ type: Array,
+ value: []
+ },
+ details: {
+ type: Array,
+ value: []
+ },
+ payment: {
+ type: Array,
+ value: []
+ }
+ };
+ }
+
+ connectedCallback () {
+ super.connectedCallback();
+ this.reload();
+ }
+
+ reload () {}
+}
+
+window.customElements.define(DevfestConnectTicketPage.is, DevfestConnectTicketPage);
+
+export default DevfestConnectTicketPage;
diff --git a/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.scss b/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.scss
new file mode 100644
index 0000000..4c50add
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.scss
@@ -0,0 +1,3 @@
+@import '../../styles/components/host.scss';
+@import '../../styles/components/typography.scss';
+@import '../../styles/components/section.scss';
diff --git a/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.html b/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.html
index d3d0744..a23d01b 100644
--- a/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.html
+++ b/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.html
@@ -64,7 +64,7 @@ [[item.name]]
-
+
diff --git a/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.js b/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.js
index bc28bf4..3a41c1b 100644
--- a/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.js
+++ b/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.js
@@ -1,27 +1,28 @@
-import 'polymer/polymer.html'
-import 'paper-ripple/paper-ripple.html'
-import 'iron-flex-layout/iron-flex-layout.html'
-import 'shadycss/apply-shim.html'
-import 'iron-icon/iron-icon.html'
-import 'marked-element/marked-element.html'
-import 'google-map/google-map.html'
-import 'google-map/google-map-marker.html'
-import 'iron-media-query/iron-media-query.html'
-import '../../components/devfest-button/devfest-button.js'
-import '../../components/devfest-icon-button/devfest-icon-button.js'
-import '../../components/devfest-speakers-section/devfest-speakers-section.js'
-import '../../components/devfest-banner/devfest-banner.js'
-import '../../components/devfest-footer/devfest-footer.js'
-import '../../fonts/devfest-fonts.html'
-import './devfest-landing-page.html'
-import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js'
-import marked from 'marked'
-import { firebaseConfig } from '../../../../firebase.js'
-import app from '../../../../app.js'
-window.marked = window.marked || marked
+import 'polymer/polymer.html';
+import 'paper-ripple/paper-ripple.html';
+import 'iron-flex-layout/iron-flex-layout.html';
+import 'shadycss/apply-shim.html';
+import 'iron-icon/iron-icon.html';
+import 'marked-element/marked-element.html';
+import 'google-map/google-map.html';
+import 'google-map/google-map-marker.html';
+import 'iron-media-query/iron-media-query.html';
+import '../../components/devfest-button/devfest-button.js';
+import '../../components/devfest-icon-button/devfest-icon-button.js';
+import '../../components/devfest-speakers-section/devfest-speakers-section.js';
+import '../../components/devfest-banner/devfest-banner.js';
+import '../../components/devfest-footer/devfest-footer.js';
+import '../../fonts/devfest-fonts.html';
+import './devfest-landing-page.html';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+import marked from 'marked';
+import { firebaseConfig } from '../../../../firebase.js';
+import app from '../../../../app.js';
+window.marked = window.marked || marked;
+const {Polymer, google} = window;
class DevfestLandingPage extends contentLoaderMixin(Polymer.Element) {
- static get is () { return 'devfest-landing-page' }
+ static get is () { return 'devfest-landing-page'; }
static get properties () {
return {
@@ -62,44 +63,44 @@ class DevfestLandingPage extends contentLoaderMixin(Polymer.Element) {
type: Boolean,
value: false
}
- }
+ };
}
static get observers () {
return [
'_setMap(largeMapSize, middleSizeMap, smallMapSize, _map)'
- ]
+ ];
}
constructor () {
- super()
- this._apiKey = firebaseConfig[0].apiKey
- this._app = app
+ super();
+ this._apiKey = firebaseConfig[0].apiKey;
+ this._app = app;
}
connectedCallback () {
- super.connectedCallback()
- this.reload()
+ super.connectedCallback();
+ this.reload();
}
_setMap (large, middle, small, m) {
- const map = this.shadowRoot.querySelector('.venue-section')
+ const map = this.shadowRoot.querySelector('.venue-section');
if (map) {
if (!large && !middle && !small) {
- large = window.innerWidth > 800
- small = window.innerWidth <= 600
- middle = !large && !small
+ large = window.innerWidth > 800;
+ small = window.innerWidth <= 600;
+ middle = !large && !small;
}
if (large) {
- map.latitude = 14.536921
- map.longitude = 121.0151518
+ map.latitude = 14.536921;
+ map.longitude = 121.0151518;
} else if (middle) {
- map.latitude = 14.52676
- map.longitude = 121.0214175
+ map.latitude = 14.52676;
+ map.longitude = 121.0214175;
} else if (small) {
- map.latitude = 14.52976
- map.longitude = 121.0214175
+ map.latitude = 14.52976;
+ map.longitude = 121.0214175;
} else {
}
@@ -110,39 +111,36 @@ class DevfestLandingPage extends contentLoaderMixin(Polymer.Element) {
if (map) {
map.setOptions({
// center: {lat: 14.536921, lng: 121.0151518},
- panControl:false,
- zoomControl:false,
- mapTypeControl:false,
- scaleControl:false,
- streetViewControl:false,
- overviewMapControl:false,
- rotateControl:false,
+ panControl: false,
+ zoomControl: false,
+ mapTypeControl: false,
+ scaleControl: false,
+ streetViewControl: false,
+ overviewMapControl: false,
+ rotateControl: false,
scrollwheel: false,
navigationControl: false,
draggable: false
- })
+ });
}
}
_animateMarker (marker) {
- if (marker) {
- marker.setAnimation(google.maps.Animation.BOUNCE)
+ if (marker && google) {
+ marker.setAnimation(google.maps.Animation.BOUNCE);
}
}
+ reload () {
+ this._fetchContent('pages/landing.md');
+ this._fetchJson('speakers/speakers.json', 'speakers');
- reload() {
- this._fetchContent('pages/landing.md')
- this._fetchJson('speakers/speakers.json', 'speakers')
-
- const map = this.shadowRoot.querySelector('.venue-section')
+ const map = this.shadowRoot.querySelector('.venue-section');
if (map && typeof map.resize === 'function') {
- map.resize()
+ map.resize();
}
}
-
-
// _shareFacebookLink () {
// var text = 'Let\'s attend the Grandest Technology event of the year - GDG DevFest Philippines 2017!'
// var link = window.location.protocol + '//' + window.location.hostname //'https://uxphilippines.com' //
@@ -161,6 +159,6 @@ class DevfestLandingPage extends contentLoaderMixin(Polymer.Element) {
// }
}
-window.customElements.define(DevfestLandingPage.is, DevfestLandingPage)
+window.customElements.define(DevfestLandingPage.is, DevfestLandingPage);
-export default DevfestLandingPage
\ No newline at end of file
+export default DevfestLandingPage;
diff --git a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html
new file mode 100644
index 0000000..1950468
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.js b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.js
new file mode 100644
index 0000000..56d14fe
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.js
@@ -0,0 +1,48 @@
+import 'polymer/polymer-element.html';
+import 'polymer/lib/elements/dom-repeat.html';
+import 'iron-icon/iron-icon.html';
+import 'iron-flex-layout/iron-flex-layout.html';
+import 'shadycss/apply-shim.html';
+import 'marked-element/marked-element.html';
+import '../../fonts/devfest-fonts.html';
+import '../../icons/devfest-icons.html';
+import '../../components/devfest-footer/devfest-footer.js';
+import '../../components/devfest-button/devfest-button.js';
+import './devfest-login-page.html';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+import marked from 'marked';
+window.marked = window.marked || marked;
+
+const {Polymer} = window;
+
+class DevfestLoginPage extends contentLoaderMixin(Polymer.Element) {
+ static get is () { return 'devfest-login-page'; }
+
+ static get properties () {
+ return {
+ perks: {
+ type: Array,
+ value: []
+ },
+ details: {
+ type: Array,
+ value: []
+ },
+ payment: {
+ type: Array,
+ value: []
+ }
+ };
+ }
+
+ connectedCallback () {
+ super.connectedCallback();
+ this.reload();
+ }
+
+ reload () {}
+}
+
+window.customElements.define(DevfestLoginPage.is, DevfestLoginPage);
+
+export default DevfestLoginPage;
diff --git a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.scss b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.scss
new file mode 100644
index 0000000..4c50add
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.scss
@@ -0,0 +1,3 @@
+@import '../../styles/components/host.scss';
+@import '../../styles/components/typography.scss';
+@import '../../styles/components/section.scss';
diff --git a/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.html b/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.html
new file mode 100644
index 0000000..6505605
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.html
@@ -0,0 +1,12 @@
+
diff --git a/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.js b/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.js
new file mode 100644
index 0000000..e84d21e
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.js
@@ -0,0 +1,48 @@
+import 'polymer/polymer-element.html';
+import 'polymer/lib/elements/dom-repeat.html';
+import 'iron-icon/iron-icon.html';
+import 'iron-flex-layout/iron-flex-layout.html';
+import 'shadycss/apply-shim.html';
+import 'marked-element/marked-element.html';
+import '../../fonts/devfest-fonts.html';
+import '../../icons/devfest-icons.html';
+import '../../components/devfest-footer/devfest-footer.js';
+import '../../components/devfest-button/devfest-button.js';
+import './devfest-not-sponsor-page.html';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+import marked from 'marked';
+window.marked = window.marked || marked;
+
+const {Polymer} = window;
+
+class DevfestNotSponsorPage extends contentLoaderMixin(Polymer.Element) {
+ static get is () { return 'devfest-not-sponsor-page'; }
+
+ static get properties () {
+ return {
+ perks: {
+ type: Array,
+ value: []
+ },
+ details: {
+ type: Array,
+ value: []
+ },
+ payment: {
+ type: Array,
+ value: []
+ }
+ };
+ }
+
+ connectedCallback () {
+ super.connectedCallback();
+ this.reload();
+ }
+
+ reload () {}
+}
+
+window.customElements.define(DevfestNotSponsorPage.is, DevfestNotSponsorPage);
+
+export default DevfestNotSponsorPage;
diff --git a/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.scss b/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.scss
new file mode 100644
index 0000000..4c50add
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.scss
@@ -0,0 +1,3 @@
+@import '../../styles/components/host.scss';
+@import '../../styles/components/typography.scss';
+@import '../../styles/components/section.scss';
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
new file mode 100644
index 0000000..55d769c
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js
new file mode 100644
index 0000000..b61a08b
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js
@@ -0,0 +1,48 @@
+import 'polymer/polymer-element.html';
+import 'polymer/lib/elements/dom-repeat.html';
+import 'iron-icon/iron-icon.html';
+import 'iron-flex-layout/iron-flex-layout.html';
+import 'shadycss/apply-shim.html';
+import 'marked-element/marked-element.html';
+import '../../fonts/devfest-fonts.html';
+import '../../icons/devfest-icons.html';
+import '../../components/devfest-footer/devfest-footer.js';
+import '../../components/devfest-button/devfest-button.js';
+import './devfest-profile-page.html';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+import marked from 'marked';
+window.marked = window.marked || marked;
+
+const {Polymer} = window;
+
+class DevfestProfilePage extends contentLoaderMixin(Polymer.Element) {
+ static get is () { return 'devfest-profile-page'; }
+
+ static get properties () {
+ return {
+ perks: {
+ type: Array,
+ value: []
+ },
+ details: {
+ type: Array,
+ value: []
+ },
+ payment: {
+ type: Array,
+ value: []
+ }
+ };
+ }
+
+ connectedCallback () {
+ super.connectedCallback();
+ this.reload();
+ }
+
+ reload () {}
+}
+
+window.customElements.define(DevfestProfilePage.is, DevfestProfilePage);
+
+export default DevfestProfilePage;
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss
new file mode 100644
index 0000000..4c50add
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss
@@ -0,0 +1,3 @@
+@import '../../styles/components/host.scss';
+@import '../../styles/components/typography.scss';
+@import '../../styles/components/section.scss';
diff --git a/src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.html b/src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.html
new file mode 100644
index 0000000..1950468
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.js b/src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.js
new file mode 100644
index 0000000..f236fb8
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.js
@@ -0,0 +1,48 @@
+import 'polymer/polymer-element.html';
+import 'polymer/lib/elements/dom-repeat.html';
+import 'iron-icon/iron-icon.html';
+import 'iron-flex-layout/iron-flex-layout.html';
+import 'shadycss/apply-shim.html';
+import 'marked-element/marked-element.html';
+import '../../fonts/devfest-fonts.html';
+import '../../icons/devfest-icons.html';
+import '../../components/devfest-footer/devfest-footer.js';
+import '../../components/devfest-button/devfest-button.js';
+import './devfest-register-page.html';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+import marked from 'marked';
+window.marked = window.marked || marked;
+
+const {Polymer} = window;
+
+class DevfestRegisterPage extends contentLoaderMixin(Polymer.Element) {
+ static get is () { return 'devfest-register-page'; }
+
+ static get properties () {
+ return {
+ perks: {
+ type: Array,
+ value: []
+ },
+ details: {
+ type: Array,
+ value: []
+ },
+ payment: {
+ type: Array,
+ value: []
+ }
+ };
+ }
+
+ connectedCallback () {
+ super.connectedCallback();
+ this.reload();
+ }
+
+ reload () {}
+}
+
+window.customElements.define(DevfestRegisterPage.is, DevfestRegisterPage);
+
+export default DevfestRegisterPage;
diff --git a/src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.scss b/src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.scss
new file mode 100644
index 0000000..4c50add
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.scss
@@ -0,0 +1,3 @@
+@import '../../styles/components/host.scss';
+@import '../../styles/components/typography.scss';
+@import '../../styles/components/section.scss';
diff --git a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
new file mode 100644
index 0000000..ef07031
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js
new file mode 100644
index 0000000..b53a39a
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js
@@ -0,0 +1,48 @@
+import 'polymer/polymer-element.html';
+import 'polymer/lib/elements/dom-repeat.html';
+import 'iron-icon/iron-icon.html';
+import 'iron-flex-layout/iron-flex-layout.html';
+import 'shadycss/apply-shim.html';
+import 'marked-element/marked-element.html';
+import '../../fonts/devfest-fonts.html';
+import '../../icons/devfest-icons.html';
+import '../../components/devfest-footer/devfest-footer.js';
+import '../../components/devfest-button/devfest-button.js';
+import './devfest-scan-page.html';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+import marked from 'marked';
+window.marked = window.marked || marked;
+
+const {Polymer} = window;
+
+class DevfestScanPage extends contentLoaderMixin(Polymer.Element) {
+ static get is () { return 'devfest-scan-page'; }
+
+ static get properties () {
+ return {
+ perks: {
+ type: Array,
+ value: []
+ },
+ details: {
+ type: Array,
+ value: []
+ },
+ payment: {
+ type: Array,
+ value: []
+ }
+ };
+ }
+
+ connectedCallback () {
+ super.connectedCallback();
+ this.reload();
+ }
+
+ reload () {}
+}
+
+window.customElements.define(DevfestScanPage.is, DevfestScanPage);
+
+export default DevfestScanPage;
diff --git a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.scss b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.html b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.html
new file mode 100644
index 0000000..efbfd57
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js
new file mode 100644
index 0000000..a9fd8af
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js
@@ -0,0 +1,48 @@
+import 'polymer/polymer-element.html';
+import 'polymer/lib/elements/dom-repeat.html';
+import 'iron-icon/iron-icon.html';
+import 'iron-flex-layout/iron-flex-layout.html';
+import 'shadycss/apply-shim.html';
+import 'marked-element/marked-element.html';
+import '../../fonts/devfest-fonts.html';
+import '../../icons/devfest-icons.html';
+import '../../components/devfest-footer/devfest-footer.js';
+import '../../components/devfest-button/devfest-button.js';
+import './devfest-scanned-list-page.html';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+import marked from 'marked';
+window.marked = window.marked || marked;
+
+const {Polymer} = window;
+
+class DevfestScannedListPage extends contentLoaderMixin(Polymer.Element) {
+ static get is () { return 'devfest-scanned-list-page'; }
+
+ static get properties () {
+ return {
+ perks: {
+ type: Array,
+ value: []
+ },
+ details: {
+ type: Array,
+ value: []
+ },
+ payment: {
+ type: Array,
+ value: []
+ }
+ };
+ }
+
+ connectedCallback () {
+ super.connectedCallback();
+ this.reload();
+ }
+
+ reload () {}
+}
+
+window.customElements.define(DevfestScannedListPage.is, DevfestScannedListPage);
+
+export default DevfestScannedListPage;
diff --git a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.scss b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.scss
new file mode 100644
index 0000000..4c50add
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.scss
@@ -0,0 +1,3 @@
+@import '../../styles/components/host.scss';
+@import '../../styles/components/typography.scss';
+@import '../../styles/components/section.scss';
diff --git a/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.html b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.html
index a09d997..fe64f50 100644
--- a/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.html
+++ b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.html
@@ -1,26 +1,26 @@
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js
index 09fb27f..6bfbb3e 100644
--- a/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js
+++ b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js
@@ -1,20 +1,20 @@
-import 'polymer/polymer.html'
-import 'paper-ripple/paper-ripple.html'
-import 'iron-flex-layout/iron-flex-layout.html'
-import 'shadycss/apply-shim.html'
-import 'iron-icon/iron-icon.html'
-import 'marked-element/marked-element.html'
-import '../../fonts/devfest-fonts.html'
-import './devfest-sponsors-page.html'
-import '../../components/devfest-footer/devfest-footer.js'
-import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js'
-import marked from 'marked'
-import firebaseConfig from '../../../../firebase.js'
-import app from '../../../../app.js'
-window.marked = window.marked || marked
+import 'polymer/polymer.html';
+import 'paper-ripple/paper-ripple.html';
+import 'iron-flex-layout/iron-flex-layout.html';
+import 'shadycss/apply-shim.html';
+import 'iron-icon/iron-icon.html';
+import 'marked-element/marked-element.html';
+import '../../fonts/devfest-fonts.html';
+import './devfest-sponsors-page.html';
+import '../../components/devfest-footer/devfest-footer.js';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+import marked from 'marked';
+import app from '../../../../app.js';
+window.marked = window.marked || marked;
+const {Polymer} = window;
class DevfestSponsorsPage extends contentLoaderMixin(Polymer.Element) {
- static get is () { return 'devfest-sponsors-page' }
+ static get is () { return 'devfest-sponsors-page'; }
static get properties () {
return {
@@ -35,25 +35,24 @@ class DevfestSponsorsPage extends contentLoaderMixin(Polymer.Element) {
type: Array,
value: []
}
- }
+ };
}
constructor () {
- super()
- this._apiKey = firebaseConfig[0].apiKey
- this._app = app
+ super();
+ this._app = app;
}
connectedCallback () {
- super.connectedCallback()
- this.reload()
+ super.connectedCallback();
+ this.reload();
}
- reload() {
- this._fetchContent('pages/sponsors.md')
+ reload () {
+ this._fetchContent('pages/sponsors.md');
}
}
-window.customElements.define(DevfestSponsorsPage.is, DevfestSponsorsPage)
+window.customElements.define(DevfestSponsorsPage.is, DevfestSponsorsPage);
-export default DevfestSponsorsPage
\ No newline at end of file
+export default DevfestSponsorsPage;
diff --git a/src/modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.js b/src/modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.js
index 3c3f500..0f7b822 100644
--- a/src/modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.js
+++ b/src/modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.js
@@ -1,20 +1,22 @@
-import 'polymer/polymer-element.html'
-import 'polymer/lib/elements/dom-repeat.html'
-import 'iron-icon/iron-icon.html'
-import 'iron-flex-layout/iron-flex-layout.html'
-import 'shadycss/apply-shim.html'
-import 'marked-element/marked-element.html'
-import '../../fonts/devfest-fonts.html'
-import '../../icons/devfest-icons.html'
-import '../../components/devfest-footer/devfest-footer.js'
-import '../../components/devfest-button/devfest-button.js'
-import './devfest-tickets-page.html'
-import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js'
-import marked from 'marked'
-window.marked = window.marked || marked
+import 'polymer/polymer-element.html';
+import 'polymer/lib/elements/dom-repeat.html';
+import 'iron-icon/iron-icon.html';
+import 'iron-flex-layout/iron-flex-layout.html';
+import 'shadycss/apply-shim.html';
+import 'marked-element/marked-element.html';
+import '../../fonts/devfest-fonts.html';
+import '../../icons/devfest-icons.html';
+import '../../components/devfest-footer/devfest-footer.js';
+import '../../components/devfest-button/devfest-button.js';
+import './devfest-tickets-page.html';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+import marked from 'marked';
+window.marked = window.marked || marked;
+
+const {Polymer} = window;
class DevfestTicketsPage extends contentLoaderMixin(Polymer.Element) {
- static get is () { return 'devfest-tickets-page' }
+ static get is () { return 'devfest-tickets-page'; }
static get properties () {
return {
@@ -30,20 +32,20 @@ class DevfestTicketsPage extends contentLoaderMixin(Polymer.Element) {
type: Array,
value: []
}
- }
+ };
}
connectedCallback () {
- super.connectedCallback()
- this.reload()
+ super.connectedCallback();
+ this.reload();
}
- reload() {
- this._fetchContent('pages/tickets.md')
+ reload () {
+ this._fetchContent('pages/tickets.md');
// this._fetchJson('speakers/speakers.json', 'speakers')
}
}
-window.customElements.define(DevfestTicketsPage.is, DevfestTicketsPage)
+window.customElements.define(DevfestTicketsPage.is, DevfestTicketsPage);
-export default DevfestTicketsPage
\ No newline at end of file
+export default DevfestTicketsPage;
diff --git a/src/modules/devfest-module/pages/devfest-verify-page/devfest-verify-page.html b/src/modules/devfest-module/pages/devfest-verify-page/devfest-verify-page.html
new file mode 100644
index 0000000..74e4781
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-verify-page/devfest-verify-page.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-verify-page/devfest-verify-page.js b/src/modules/devfest-module/pages/devfest-verify-page/devfest-verify-page.js
new file mode 100644
index 0000000..b43d120
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-verify-page/devfest-verify-page.js
@@ -0,0 +1,48 @@
+import 'polymer/polymer-element.html';
+import 'polymer/lib/elements/dom-repeat.html';
+import 'iron-icon/iron-icon.html';
+import 'iron-flex-layout/iron-flex-layout.html';
+import 'shadycss/apply-shim.html';
+import 'marked-element/marked-element.html';
+import '../../fonts/devfest-fonts.html';
+import '../../icons/devfest-icons.html';
+import '../../components/devfest-footer/devfest-footer.js';
+import '../../components/devfest-button/devfest-button.js';
+import './devfest-verify-page.html';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+import marked from 'marked';
+window.marked = window.marked || marked;
+
+const {Polymer} = window;
+
+class DevfestVerifyPage extends contentLoaderMixin(Polymer.Element) {
+ static get is () { return 'devfest-verify-page'; }
+
+ static get properties () {
+ return {
+ perks: {
+ type: Array,
+ value: []
+ },
+ details: {
+ type: Array,
+ value: []
+ },
+ payment: {
+ type: Array,
+ value: []
+ }
+ };
+ }
+
+ connectedCallback () {
+ super.connectedCallback();
+ this.reload();
+ }
+
+ reload () {}
+}
+
+window.customElements.define(DevfestVerifyPage.is, DevfestVerifyPage);
+
+export default DevfestVerifyPage;
diff --git a/src/modules/devfest-module/pages/devfest-verify-page/devfest-verify-page.scss b/src/modules/devfest-module/pages/devfest-verify-page/devfest-verify-page.scss
new file mode 100644
index 0000000..4c50add
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-verify-page/devfest-verify-page.scss
@@ -0,0 +1,3 @@
+@import '../../styles/components/host.scss';
+@import '../../styles/components/typography.scss';
+@import '../../styles/components/section.scss';
diff --git a/src/modules/firebase/index.js b/src/modules/firebase/index.js
index e69de29..9eb3593 100644
--- a/src/modules/firebase/index.js
+++ b/src/modules/firebase/index.js
@@ -0,0 +1,92 @@
+let firebase = null;
+const listeners = {};
+import(/* webpackChunkName: 'firebase' */ 'firebase').then(sdk => {
+ if (sdk) {
+ firebase = sdk;
+ }
+});
+
+const updateAttrSnapshot = (store, attr, type, snapshot) => {
+ if (snapshot.exists()) {
+ store.dispatch({
+ type, // USER_ACTION.PROFILE,
+ value: snapshot.val(),
+ attr
+ });
+ }
+};
+
+const updateModelTypeSnapshot = (store, modelType, type, snapshot) => {
+ if (snapshot.exists()) {
+ const attrs = [];
+ snapshot.forEach(child => {
+ attrs.push({
+ attr: child.key,
+ value: child.val()
+ });
+ });
+ store.dispatch({
+ type, // USER_ACTION.PROFILE,
+ attrs
+ });
+ }
+};
+
+export const firebaseRemoveListeners = () => {
+ for (var path in listeners) {
+ if (listeners[path]) {
+ listeners[path].off();
+ listeners[path] = null;
+ }
+ }
+};
+
+export const firebaseDocumentLoader = (modelPath, key, action, store, profileModel, type) => {
+ const sourcePath = `${modelPath}/source/${key}`;
+ if (action.modelType) {
+ const modelType = `${sourcePath}/${action.modelType}`;
+ if (!action.attr) {
+ for (var i in profileModel) {
+ if (i === action.modelType) {
+ for (var j in profileModel[i]) {
+ if (listeners[modelType + '/' + j]) {
+ listeners[modelType + '/' + j].off();
+ listeners[modelType + '/' + j] = null;
+ }
+ }
+ listeners[modelType] = listeners[modelType] || firebase.database().ref(modelType);
+ listeners[modelType].on('value', updateModelTypeSnapshot.bind(this, store, action.modelType, type));
+ break;
+ }
+ }
+ } else if (!listeners[modelType]) {
+ const attr = `${modelType}/${action.attr}`;
+ listeners[attr] = listeners[attr] || firebase.database().ref(attr);
+ listeners[attr].on('value', updateAttrSnapshot.bind(this, store, action.attr, type));
+ }
+ }
+};
+
+export const login = (name) => {
+ var provider = null;
+ if (name === 'google') {
+ provider = new firebase.auth.GoogleAuthProvider();
+ }
+
+ return firebase.auth().signInWithPopup(provider);
+};
+
+export const logout = () => {
+ return firebase.auth().signOut();
+};
+
+export const observeAuth = (dispatch) => {
+ if (firebase) {
+ firebase.auth().onAuthStateChanged(dispatch);
+ } else {
+ window.addEventListener('firebase-initialized', event => {
+ firebase = event.detail;
+ firebase.auth().onAuthStateChanged(dispatch);
+ });
+ }
+};
diff --git a/src/routing.js b/src/routing.js
index d21e5a3..4b60290 100644
--- a/src/routing.js
+++ b/src/routing.js
@@ -8,6 +8,13 @@
'/sessions/:id': () => { return import(/* webpackChunkName: "devfest-session-page" */ './modules/devfest-module/pages/devfest-session-page/devfest-session-page.js') },
'/tickets': () => { return import(/* webpackChunkName: "devfest-tickets-page" */ './modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.js') },
'/sponsors': () => { return import(/* webpackChunkName: "devfest-sponsors-page" */ './modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js') },
+'/login': () => { return import(/* webpackChunkName: "devfest-login-page" */ './modules/devfest-module/pages/devfest-login-page/devfest-login-page.js') },
+'/profile': () => { return import(/* webpackChunkName: "devfest-login-page" */ './modules/devfest-module/pages/devfest-login-page/devfest-login-page.js') },
+'/codelabs/:type?/:id?/:page?': () => { return import(/* webpackChunkName: "devfest-codelabs-page" */ './modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js') },
+'/connect-ticket': () => { return import(/* webpackChunkName: "devfest-connect-ticket-page" */ './modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js') },
+'/scan': () => { return import(/* webpackChunkName: "devfest-scan-page" */ './modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js') },
+'/scanned-list': () => { return import(/* webpackChunkName: "devfest-scanned-list-page" */ './modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js') },
+'/are-you-a-sponsor': () => { return import(/* webpackChunkName: "devfest-not-sponsor-page" */ './modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.js') },
'/auth-check': () => { return import(/* webpackChunkName: "devfest-authorized-page" */ './modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.js') }
}
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index 1003f8d..400f5d8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -10,16 +10,34 @@ abbrev@1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
-ajv@^4.9.1:
+acorn-jsx@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+ dependencies:
+ acorn "^3.0.4"
+
+acorn@^3.0.4, acorn@^5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7"
+
+ajv-keywords@^1.0.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
+
+ajv@^4.7.0, ajv@^4.9.1:
version "4.11.8"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
dependencies:
co "^4.6.0"
json-stable-stringify "^1.0.1"
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ansi-escapes@^1.1.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+
+ansi-regex@^2.0.0, ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
ansi-styles@^2.2.1:
version "2.2.1"
@@ -36,10 +54,37 @@ are-we-there-yet@~1.1.2:
delegates "^1.0.0"
readable-stream "^2.0.6"
+argparse@^1.0.7:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
+ dependencies:
+ sprintf-js "~1.0.2"
+
argsarray@^0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb"
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+
+array.prototype.find@^2.0.1:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90"
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.7.0"
+
+arrify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+
asn1@~0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
@@ -60,7 +105,7 @@ aws4@^1.2.1:
version "1.6.0"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
-babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
+babel-code-frame@^6.16.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
dependencies:
@@ -533,6 +578,20 @@ buffer-equal-constant-time@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
+builtin-modules@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+
+caller-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+ dependencies:
+ callsites "^0.2.0"
+
+callsites@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+
caniuse-lite@^1.0.30000718:
version "1.0.30000726"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000726.tgz#966a753fa107a09d4131cf8b3d616723a06ccf7e"
@@ -541,7 +600,7 @@ caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
-chalk@^1.1.3:
+chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
dependencies:
@@ -551,6 +610,20 @@ chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
+circular-json@^0.3.1:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
+
+cli-cursor@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+ dependencies:
+ restore-cursor "^1.0.1"
+
+cli-width@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+
co@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
@@ -569,10 +642,22 @@ concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+concat-stream@^1.5.2:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+
core-js@^2.4.0:
version "2.5.1"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b"
@@ -587,15 +672,25 @@ cryptiles@2.x.x:
dependencies:
boom "2.x.x"
+d@1:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
+ dependencies:
+ es5-ext "^0.10.9"
+
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
dependencies:
assert-plus "^1.0.0"
-debug@^2.2.0, debug@^2.6.8:
- version "2.6.8"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
+debug-log@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f"
+
+debug@^2.1.1, debug@^2.2.0, debug@^2.6.8:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
dependencies:
ms "2.0.0"
@@ -607,6 +702,10 @@ deep-extend@~0.4.0:
version "0.4.2"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+
define-properties@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
@@ -618,6 +717,29 @@ defined@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+deglob@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/deglob/-/deglob-2.1.0.tgz#4d44abe16ef32c779b4972bd141a80325029a14a"
+ dependencies:
+ find-root "^1.0.0"
+ glob "^7.0.5"
+ ignore "^3.0.9"
+ pkg-config "^1.1.0"
+ run-parallel "^1.1.2"
+ uniq "^1.0.1"
+
+del@^2.0.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
+ dependencies:
+ globby "^5.0.0"
+ is-path-cwd "^1.0.0"
+ is-path-in-cwd "^1.0.0"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ rimraf "^2.2.8"
+
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
@@ -626,6 +748,13 @@ delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+doctrine@1.5.0, doctrine@^1.2.2, doctrine@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63"
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
dom-serializer@0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
@@ -679,9 +808,15 @@ entities@^1.1.1, entities@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
-es-abstract@^1.5.0:
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.2.tgz#25103263dc4decbda60e0c737ca32313518027ee"
+error-ex@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.5.0, es-abstract@^1.7.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227"
dependencies:
es-to-primitive "^1.1.1"
function-bind "^1.1.1"
@@ -697,10 +832,98 @@ es-to-primitive@^1.1.1:
is-date-object "^1.0.1"
is-symbol "^1.0.1"
-escape-string-regexp@^1.0.2:
+es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.31.tgz#7bb938c95a7f1b9f728092dc09c41edcc398eefe"
+ dependencies:
+ es6-iterator "~2.0.1"
+ es6-symbol "~3.1.1"
+
+es6-iterator@^2.0.1, es6-iterator@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512"
+ dependencies:
+ d "1"
+ es5-ext "^0.10.14"
+ es6-symbol "^3.1"
+
+es6-map@^0.1.3:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+ es6-iterator "~2.0.1"
+ es6-set "~0.1.5"
+ es6-symbol "~3.1.1"
+ event-emitter "~0.3.5"
+
+es6-set@~0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+ es6-iterator "~2.0.1"
+ es6-symbol "3.1.1"
+ event-emitter "~0.3.5"
+
+es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
+es6-weak-map@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
+ dependencies:
+ d "1"
+ es5-ext "^0.10.14"
+ es6-iterator "^2.0.1"
+ es6-symbol "^3.1.1"
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+escope@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
+ dependencies:
+ es6-map "^0.1.3"
+ es6-weak-map "^2.0.1"
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-config-semistandard@^11.0.0:
+ version "11.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-semistandard/-/eslint-config-semistandard-11.0.0.tgz#44eef7cfdfd47219e3a7b81b91b540e880bb2615"
+
+eslint-config-standard-jsx@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.1.tgz#cd4e463d0268e2d9e707f61f42f73f5b3333c642"
+
+eslint-config-standard@^10.2.1:
+ version "10.2.1"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz#c061e4d066f379dc17cd562c64e819b4dd454591"
+
+eslint-import-resolver-node@^0.2.0:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c"
+ dependencies:
+ debug "^2.2.0"
+ object-assign "^4.0.1"
+ resolve "^1.1.6"
+
+eslint-module-utils@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449"
+ dependencies:
+ debug "^2.6.8"
+ pkg-dir "^1.0.0"
+
eslint-plugin-html@^3.2.0:
version "3.2.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-3.2.1.tgz#4289d38245f3d95134d22c17b1894d78db92c572"
@@ -708,10 +931,132 @@ eslint-plugin-html@^3.2.0:
htmlparser2 "^3.8.2"
semver "^5.4.1"
+eslint-plugin-import@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e"
+ dependencies:
+ builtin-modules "^1.1.1"
+ contains-path "^0.1.0"
+ debug "^2.2.0"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.2.0"
+ eslint-module-utils "^2.0.0"
+ has "^1.0.1"
+ lodash.cond "^4.3.0"
+ minimatch "^3.0.3"
+ pkg-up "^1.0.0"
+
+eslint-plugin-node@~4.2.2:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-4.2.3.tgz#c04390ab8dbcbb6887174023d6f3a72769e63b97"
+ dependencies:
+ ignore "^3.0.11"
+ minimatch "^3.0.2"
+ object-assign "^4.0.1"
+ resolve "^1.1.7"
+ semver "5.3.0"
+
+eslint-plugin-promise@~3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca"
+
+eslint-plugin-react@~6.10.0:
+ version "6.10.3"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78"
+ dependencies:
+ array.prototype.find "^2.0.1"
+ doctrine "^1.2.2"
+ has "^1.0.1"
+ jsx-ast-utils "^1.3.4"
+ object.assign "^4.0.4"
+
+eslint-plugin-standard@~3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz#34d0c915b45edc6f010393c7eef3823b08565cf2"
+
+eslint@~3.19.0:
+ version "3.19.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc"
+ dependencies:
+ babel-code-frame "^6.16.0"
+ chalk "^1.1.3"
+ concat-stream "^1.5.2"
+ debug "^2.1.1"
+ doctrine "^2.0.0"
+ escope "^3.6.0"
+ espree "^3.4.0"
+ esquery "^1.0.0"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ file-entry-cache "^2.0.0"
+ glob "^7.0.3"
+ globals "^9.14.0"
+ ignore "^3.2.0"
+ imurmurhash "^0.1.4"
+ inquirer "^0.12.0"
+ is-my-json-valid "^2.10.0"
+ is-resolvable "^1.0.0"
+ js-yaml "^3.5.1"
+ json-stable-stringify "^1.0.0"
+ levn "^0.3.0"
+ lodash "^4.0.0"
+ mkdirp "^0.5.0"
+ natural-compare "^1.4.0"
+ optionator "^0.8.2"
+ path-is-inside "^1.0.1"
+ pluralize "^1.2.1"
+ progress "^1.1.8"
+ require-uncached "^1.0.2"
+ shelljs "^0.7.5"
+ strip-bom "^3.0.0"
+ strip-json-comments "~2.0.1"
+ table "^3.7.8"
+ text-table "~0.2.0"
+ user-home "^2.0.0"
+
+espree@^3.4.0:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e"
+ dependencies:
+ acorn "^5.1.1"
+ acorn-jsx "^3.0.0"
+
+esprima@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
+
+esquery@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
+ dependencies:
+ estraverse "^4.0.0"
+
+esrecurse@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
+ dependencies:
+ estraverse "^4.1.0"
+ object-assign "^4.0.1"
+
+estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+
esutils@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+event-emitter@~0.3.5:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
+exit-hook@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
+
extend@~3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
@@ -720,12 +1065,40 @@ extsprintf@1.3.0, extsprintf@^1.2.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+
faye-websocket@0.9.3:
version "0.9.3"
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.9.3.tgz#482a505b0df0ae626b969866d3bd740cdb962e83"
dependencies:
websocket-driver ">=0.5.1"
+figures@^1.3.5:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
+file-entry-cache@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+ dependencies:
+ flat-cache "^1.2.1"
+ object-assign "^4.0.1"
+
+find-root@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
+
+find-up@^1.0.0, find-up@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ dependencies:
+ locate-path "^2.0.0"
+
firebase@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/firebase/-/firebase-4.5.0.tgz#e0973a9803b74c4c9d73d19f874712e6e9d16ba7"
@@ -737,6 +1110,15 @@ firebase@^4.5.0:
promise-polyfill "^6.0.2"
xmlhttprequest "^1.8.0"
+flat-cache@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481"
+ dependencies:
+ circular-json "^0.3.1"
+ del "^2.0.2"
+ graceful-fs "^4.1.2"
+ write "^0.2.1"
+
for-each@~0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4"
@@ -788,7 +1170,7 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
mkdirp ">=0.5 0"
rimraf "2"
-function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.0:
+function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1, function-bind@~1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
@@ -805,13 +1187,27 @@ gauge@~2.7.3:
strip-ansi "^3.0.1"
wide-align "^1.1.0"
+generate-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+
+generate-object-property@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+ dependencies:
+ is-property "^1.0.0"
+
+get-stdin@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+
getpass@^0.1.1:
version "0.1.7"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
dependencies:
assert-plus "^1.0.0"
-glob@^7.0.5, glob@^7.1.1, glob@~7.1.2:
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@~7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
dependencies:
@@ -829,10 +1225,21 @@ global@^4.3.2:
min-document "^2.19.0"
process "~0.5.1"
-globals@^9.18.0:
+globals@^9.14.0, globals@^9.18.0:
version "9.18.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+globby@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
+ dependencies:
+ array-union "^1.0.1"
+ arrify "^1.0.0"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
graceful-fs@^4.1.2, graceful-fs@^4.1.6:
version "4.1.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
@@ -900,10 +1307,18 @@ http-signature@~1.1.0:
jsprim "^1.2.2"
sshpk "^1.7.0"
+ignore@^3.0.11, ignore@^3.0.9, ignore@^3.2.0:
+ version "3.3.5"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.5.tgz#c4e715455f6073a8d7e5dae72d2fc9d71663dba6"
+
immediate@^3.2.2:
version "3.2.3"
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c"
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+
indexeddbshim@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/indexeddbshim/-/indexeddbshim-3.0.4.tgz#b4d9a4fb3fce7532b66e19790a15692f9b2c7b56"
@@ -918,7 +1333,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.3:
+inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
@@ -926,6 +1341,28 @@ ini@~1.3.0:
version "1.3.4"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+inquirer@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
+ dependencies:
+ ansi-escapes "^1.1.0"
+ ansi-regex "^2.0.0"
+ chalk "^1.0.0"
+ cli-cursor "^1.0.1"
+ cli-width "^2.0.0"
+ figures "^1.3.5"
+ lodash "^4.3.0"
+ readline2 "^1.0.1"
+ run-async "^0.1.0"
+ rx-lite "^3.1.2"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.0"
+ through "^2.3.6"
+
+interpret@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0"
+
intersection-observer@^0.4.2:
version "0.4.2"
resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.4.2.tgz#24100ed620baf6a427072996d4d73366e9ec93ef"
@@ -936,6 +1373,10 @@ invariant@^2.2.2:
dependencies:
loose-envify "^1.0.0"
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+
is-callable@^1.1.1, is-callable@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
@@ -944,22 +1385,55 @@ is-date-object@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
-is-fullwidth-code-point@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
- dependencies:
- number-is-nan "^1.0.0"
+is-fullwidth-code-point@^1.0.0, is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
is-function@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
+is-my-json-valid@^2.10.0:
+ version "2.16.1"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11"
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+is-path-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+
+is-path-in-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
+ dependencies:
+ is-path-inside "^1.0.0"
+
+is-path-inside@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f"
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-property@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+
is-regex@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
dependencies:
has "^1.0.1"
+is-resolvable@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62"
+ dependencies:
+ tryit "^1.0.1"
+
is-symbol@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
@@ -968,7 +1442,7 @@ is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-isarray@0.0.1, isarray@1.0.0, isarray@~1.0.0:
+isarray@0.0.1, isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
@@ -993,6 +1467,13 @@ js-tokens@^3.0.0, js-tokens@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+js-yaml@^3.5.1:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
@@ -1005,7 +1486,7 @@ json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
-json-stable-stringify@^1.0.1:
+json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
dependencies:
@@ -1025,6 +1506,10 @@ jsonify@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+jsonpointer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+
jsonwebtoken@^7.3.0:
version "7.4.3"
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.4.3.tgz#77f5021de058b605a1783fa1283e99812e645638"
@@ -1044,6 +1529,10 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
+jsx-ast-utils@^1.3.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1"
+
jwa@^1.1.4:
version "1.1.5"
resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.5.tgz#a0552ce0220742cd52e153774a32905c30e756e5"
@@ -1061,6 +1550,29 @@ jws@^3.1.4:
jwa "^1.1.4"
safe-buffer "^5.0.1"
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
lodash-es@^4.2.1:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7"
@@ -1069,6 +1581,10 @@ lodash._reinterpolate@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
+lodash.cond@^4.3.0:
+ version "4.5.2"
+ resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
+
lodash.once@^4.0.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
@@ -1086,7 +1602,7 @@ lodash.templatesettings@^4.0.0:
dependencies:
lodash._reinterpolate "~3.0.0"
-lodash@^4.17.4, lodash@^4.2.1:
+lodash@^4.0.0, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
@@ -1116,17 +1632,17 @@ min-document@^2.19.0:
dependencies:
dom-walk "^0.1.0"
-minimatch@^3.0.0, minimatch@^3.0.4:
+minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
dependencies:
brace-expansion "^1.1.7"
-minimist@0.0.8, minimist@1.2.0, minimist@^1.2.0, minimist@~1.2.0:
+minimist@0.0.8, minimist@1.2.0, minimist@^1.1.0, minimist@^1.2.0, minimist@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-"mkdirp@>=0.5 0", mkdirp@^0.5.1:
+"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
@@ -1140,10 +1656,18 @@ ms@2.0.0, ms@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+mute-stream@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
+
nan@~2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45"
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+
node-pre-gyp@~0.6.36:
version "0.6.37"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.37.tgz#3c872b236b2e266e4140578fe1ee88f693323a05"
@@ -1187,7 +1711,7 @@ oauth-sign@~0.8.1:
version "0.8.2"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
-object-assign@^4.1.0:
+object-assign@^4.0.1, object-assign@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
@@ -1195,16 +1719,39 @@ object-inspect@~1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.3.0.tgz#5b1eb8e6742e2ee83342a637034d844928ba2f6d"
-object-keys@^1.0.8:
+object-keys@^1.0.10, object-keys@^1.0.8:
version "1.0.11"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
+object.assign@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc"
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.0"
+ object-keys "^1.0.10"
+
once@^1.3.0, once@^1.3.3:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
dependencies:
wrappy "1"
+onetime@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+
+optionator@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
os-homedir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
@@ -1220,10 +1767,34 @@ osenv@^0.1.4:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
+p-limit@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ dependencies:
+ p-limit "^1.1.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ dependencies:
+ error-ex "^1.2.0"
+
+path-exists@^2.0.0, path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+path-is-inside@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+
path-parse@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
@@ -1238,10 +1809,59 @@ performance-now@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+
+pkg-conf@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.0.0.tgz#071c87650403bccfb9c627f58751bfe47c067279"
+ dependencies:
+ find-up "^2.0.0"
+ load-json-file "^2.0.0"
+
+pkg-config@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4"
+ dependencies:
+ debug-log "^1.0.0"
+ find-root "^1.0.0"
+ xtend "^4.0.1"
+
+pkg-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+ dependencies:
+ find-up "^1.0.0"
+
+pkg-up@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26"
+ dependencies:
+ find-up "^1.0.0"
+
+pluralize@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
+
pouchdb-collections@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/pouchdb-collections/-/pouchdb-collections-1.0.1.tgz#fe63a17da977611abef7cb8026cb1a9553fd8359"
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+
private@^0.1.6:
version "0.1.7"
resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
@@ -1254,6 +1874,10 @@ process@~0.5.1:
version "0.5.2"
resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+progress@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+
promise-polyfill@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.0.2.tgz#d9c86d3dc4dc2df9016e88946defd69b49b41162"
@@ -1275,7 +1899,7 @@ rc@^1.1.7:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
-readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4:
+readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2:
version "2.3.3"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
dependencies:
@@ -1287,6 +1911,20 @@ readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4:
string_decoder "~1.0.3"
util-deprecate "~1.0.1"
+readline2@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ mute-stream "0.0.5"
+
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ dependencies:
+ resolve "^1.1.6"
+
redux@^3.7.2:
version "3.7.2"
resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b"
@@ -1357,29 +1995,76 @@ request@^2.81.0:
tunnel-agent "^0.6.0"
uuid "^3.0.0"
-resolve@~1.4.0:
+require-uncached@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+ dependencies:
+ caller-path "^0.1.0"
+ resolve-from "^1.0.0"
+
+resolve-from@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+
+resolve@^1.1.6, resolve@^1.1.7, resolve@~1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86"
dependencies:
path-parse "^1.0.5"
+restore-cursor@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+ dependencies:
+ exit-hook "^1.0.0"
+ onetime "^1.0.0"
+
resumer@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759"
dependencies:
through "~2.3.4"
-rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
+rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
dependencies:
glob "^7.0.5"
+run-async@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
+ dependencies:
+ once "^1.3.0"
+
+run-parallel@^1.1.2:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.6.tgz#29003c9a2163e01e2d2dfc90575f2c6c1d61a039"
+
+rx-lite@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
+
safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
-semver@^5.3.0, semver@^5.4.1:
+semistandard@^11.0.0:
+ version "11.0.0"
+ resolved "https://registry.yarnpkg.com/semistandard/-/semistandard-11.0.0.tgz#d2d9fc8ac393de21312195e006e50c8861391c47"
+ dependencies:
+ eslint "~3.19.0"
+ eslint-config-semistandard "^11.0.0"
+ eslint-config-standard "^10.2.1"
+ eslint-config-standard-jsx "4.0.1"
+ eslint-plugin-import "~2.2.0"
+ eslint-plugin-node "~4.2.2"
+ eslint-plugin-promise "~3.5.0"
+ eslint-plugin-react "~6.10.0"
+ eslint-plugin-standard "~3.0.1"
+ standard-engine "~7.0.0"
+
+semver@5.3.0, semver@^5.3.0, semver@^5.4.1:
version "5.4.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
@@ -1387,16 +2072,32 @@ set-blocking@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+shelljs@^0.7.5:
+ version "0.7.8"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3"
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
signal-exit@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+slice-ansi@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+
sntp@1.x.x:
version "1.0.9"
resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
dependencies:
hoek "2.x.x"
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+
sqlite3@^3.1.3:
version "3.1.9"
resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-3.1.9.tgz#b2e7fbaa348380318d3834323918c3c351b8bf18"
@@ -1418,13 +2119,21 @@ sshpk@^1.7.0:
jsbn "~0.1.0"
tweetnacl "~0.14.0"
-string-width@^1.0.1, string-width@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+standard-engine@~7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-7.0.0.tgz#ebb77b9c8fc2c8165ffa353bd91ba0dff41af690"
dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- strip-ansi "^3.0.0"
+ deglob "^2.1.0"
+ get-stdin "^5.0.1"
+ minimist "^1.1.0"
+ pkg-conf "^2.0.0"
+
+string-width@^1.0.1, string-width@^1.0.2, string-width@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
string.prototype.trim@~1.1.2:
version "1.1.2"
@@ -1444,11 +2153,15 @@ stringstream@~0.0.4:
version "0.0.5"
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
-strip-ansi@^3.0.0, strip-ansi@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
dependencies:
- ansi-regex "^2.0.0"
+ ansi-regex "^3.0.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
strip-json-comments@~2.0.1:
version "2.0.1"
@@ -1462,6 +2175,17 @@ symbol-observable@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
+table@^3.7.8:
+ version "3.8.3"
+ resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
+ dependencies:
+ ajv "^4.7.0"
+ ajv-keywords "^1.0.0"
+ chalk "^1.1.1"
+ lodash "^4.0.0"
+ slice-ansi "0.0.4"
+ string-width "^2.0.0"
+
tape@^4.6.3:
version "4.8.0"
resolved "https://registry.yarnpkg.com/tape/-/tape-4.8.0.tgz#f6a9fec41cc50a1de50fa33603ab580991f6068e"
@@ -1501,7 +2225,11 @@ tar@^2.2.1:
fstream "^1.0.2"
inherits "2"
-through@~2.3.4, through@~2.3.8:
+text-table@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+
+through@^2.3.6, through@~2.3.4, through@~2.3.8:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
@@ -1525,6 +2253,10 @@ tough-cookie@~2.3.0:
dependencies:
punycode "^1.4.1"
+tryit@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
+
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
@@ -1535,14 +2267,34 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ dependencies:
+ prelude-ls "~1.1.2"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+
uid-number@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+uniq@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+
universalify@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
+user-home@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
+ dependencies:
+ os-homedir "^1.0.0"
+
util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -1587,6 +2339,10 @@ wide-align@^1.1.0:
dependencies:
string-width "^1.0.2"
+wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+
workbox-build@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-2.0.0.tgz#3f3b3591dcab71c39a64be1dce7445f0190acb72"
@@ -1610,10 +2366,16 @@ wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+write@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+ dependencies:
+ mkdirp "^0.5.1"
+
xmlhttprequest@^1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc"
-xtend@^4.0.1:
+xtend@^4.0.0, xtend@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
From 328148b33e0c238d895616c54834f67d8001058f Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Wed, 11 Oct 2017 03:21:06 +0800
Subject: [PATCH 21/56] added login
Signed-off-by: Toni-Jan Keith Monserrat
---
bower.json | 3 +-
.../devfest-button-only.html | 10 ++++
.../devfest-button-only.js | 56 +++++++++++++++++++
.../devfest-button-only.scss | 55 ++++++++++++++++++
.../devfest-button/devfest-button.html | 6 --
.../devfest-module/models/user-model.js | 6 +-
.../devfest-login-page.html | 6 +-
.../devfest-login-page/devfest-login-page.js | 6 +-
.../devfest-login-page.scss | 28 ++++++++++
.../devfest-register-page.html | 4 +-
src/modules/firebase/index.js | 4 ++
11 files changed, 170 insertions(+), 14 deletions(-)
create mode 100644 src/modules/devfest-module/components/devfest-button-only/devfest-button-only.html
create mode 100644 src/modules/devfest-module/components/devfest-button-only/devfest-button-only.js
create mode 100644 src/modules/devfest-module/components/devfest-button-only/devfest-button-only.scss
diff --git a/bower.json b/bower.json
index d1bb5a2..ae85427 100644
--- a/bower.json
+++ b/bower.json
@@ -30,7 +30,8 @@
"paper-item": "PolymerElements/paper-item#^2.0.0",
"paper-toast": "PolymerElements/paper-toast#^2.0.0",
"google-map": "GoogleWebComponents/google-map#^2.0.2",
- "iron-media-query": "PolymerElements/iron-media-query#^2.0.0"
+ "iron-media-query": "PolymerElements/iron-media-query#^2.0.0",
+ "paper-button": "PolymerElements/paper-button#^2.0.0"
},
"devDependencies": {
"web-component-tester": "^6.0.0"
diff --git a/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.html b/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.html
new file mode 100644
index 0000000..c8b7786
--- /dev/null
+++ b/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.js b/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.js
new file mode 100644
index 0000000..a9fe5a8
--- /dev/null
+++ b/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.js
@@ -0,0 +1,56 @@
+import 'polymer/polymer.html';
+import 'paper-ripple/paper-ripple.html';
+import './devfest-button-only.html';
+
+class DevfestButton extends Polymer.Element {
+ static get is () { return 'devfest-button-only'; }
+
+ static get properties () {
+ return {
+ href: {
+ type: String,
+ value: '#'
+ },
+ isBig: {
+ type: Boolean,
+ value: false
+ },
+ target: {
+ type: String
+ },
+ noColor: {
+ type: Boolean,
+ value: false
+ },
+ disable: {
+ type: Boolean,
+ value: false
+ },
+ red: {
+ type: Boolean,
+ value: false
+ },
+ className: String
+ };
+ }
+
+ _isBig (isBig) {
+ return isBig ? 'button__big' : '';
+ }
+
+ _noColor (noColor) {
+ return noColor ? 'button__no-color' : '';
+ }
+
+ _getHref (href, disable) {
+ return disable ? '#' : href;
+ }
+
+ _red (red) {
+ return red ? 'red' : '';
+ }
+}
+
+window.customElements.define(DevfestButton.is, DevfestButton);
+
+export default DevfestButton;
diff --git a/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.scss b/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.scss
new file mode 100644
index 0000000..b5a7b45
--- /dev/null
+++ b/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.scss
@@ -0,0 +1,55 @@
+.button {
+ font-family: 'Roboto', 'Arial', sans-serif;
+ background: #2e9be6;
+ color: white;
+ border: 3px solid #2e9be6;
+ border-radius: 2px;
+ padding: 12px;
+ font-size: 16px;
+ width: 100%;
+ display: block;
+ text-transform: uppercase;
+ font-weight: bold;
+ text-decoration: none;
+ position: relative;
+ cursor: pointer;
+}
+
+.google {
+ background: #DD4B39;
+ color: white;
+ border-color: #DD4B39;
+}
+
+.facebook {
+ background: #3B5998;
+ color: white;
+ border-color: #3B5998;
+}
+
+.github {
+ background: #444444;
+ color: white;
+ border-color: #444444;
+}
+
+.button__big {
+ padding: 24px;
+ font-size: 1.5em;
+}
+
+.button__no-color {
+ background: none;
+ color: #666;
+ border: none;
+}
+
+.button__no-color:hover {
+ color: #4688f4;
+}
+
+.red {
+ background: #e63125;
+ border: 3px solid #e63125;
+ color: white;
+}
\ No newline at end of file
diff --git a/src/modules/devfest-module/components/devfest-button/devfest-button.html b/src/modules/devfest-module/components/devfest-button/devfest-button.html
index 4ddd644..0c4e986 100644
--- a/src/modules/devfest-module/components/devfest-button/devfest-button.html
+++ b/src/modules/devfest-module/components/devfest-button/devfest-button.html
@@ -7,10 +7,4 @@
-
-
diff --git a/src/modules/devfest-module/models/user-model.js b/src/modules/devfest-module/models/user-model.js
index 35442e3..64182fc 100644
--- a/src/modules/devfest-module/models/user-model.js
+++ b/src/modules/devfest-module/models/user-model.js
@@ -117,8 +117,10 @@ export default (superClass) => {
}
}
- login () {
- login('google');
+ login (e) {
+ var el = e.target;
+ var provider = el.id || 'google';
+ login(provider);
}
logout () {
diff --git a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html
index 1950468..663bee6 100644
--- a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html
+++ b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html
@@ -2,8 +2,12 @@
-
+
+
+ Google
+ Facebook
+ Github
diff --git a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.js b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.js
index 56d14fe..6ea3791 100644
--- a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.js
+++ b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.js
@@ -3,19 +3,21 @@ import 'polymer/lib/elements/dom-repeat.html';
import 'iron-icon/iron-icon.html';
import 'iron-flex-layout/iron-flex-layout.html';
import 'shadycss/apply-shim.html';
+// import 'paper-button/paper-button.html';
import 'marked-element/marked-element.html';
import '../../fonts/devfest-fonts.html';
import '../../icons/devfest-icons.html';
import '../../components/devfest-footer/devfest-footer.js';
-import '../../components/devfest-button/devfest-button.js';
+import '../../components/devfest-button-only/devfest-button-only.js';
import './devfest-login-page.html';
import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+import User from '../../models/user-model';
import marked from 'marked';
window.marked = window.marked || marked;
const {Polymer} = window;
-class DevfestLoginPage extends contentLoaderMixin(Polymer.Element) {
+class DevfestLoginPage extends User(Polymer.GestureEventListeners(contentLoaderMixin(Polymer.Element))) {
static get is () { return 'devfest-login-page'; }
static get properties () {
diff --git a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.scss b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.scss
index 4c50add..b70b907 100644
--- a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.scss
+++ b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.scss
@@ -1,3 +1,31 @@
@import '../../styles/components/host.scss';
@import '../../styles/components/typography.scss';
@import '../../styles/components/section.scss';
+
+.section {
+ max-width: 600px;
+ padding: 20px;
+ margin: 60px auto 60px;
+ text-align: center;
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12), 0 3px 1px -2px rgba(0,0,0,.2);
+
+ @media screen and (max-width: 720px) {
+ margin: 20px 20px;
+ }
+}
+
+.login-image {
+ width: 50%;
+ margin-bottom: 40px;
+
+ @media screen and (max-width: 550px) {
+ width: 80%;
+ }
+}
+
+.button {
+ display: block;
+ margin: 0 auto 10px;
+ width: 80%;
+ cursor: pointer;
+}
\ No newline at end of file
diff --git a/src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.html b/src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.html
index 1950468..515f397 100644
--- a/src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.html
+++ b/src/modules/devfest-module/pages/devfest-register-page/devfest-register-page.html
@@ -1,6 +1,6 @@
-
+
-
+
diff --git a/src/modules/firebase/index.js b/src/modules/firebase/index.js
index 9eb3593..6a4d812 100644
--- a/src/modules/firebase/index.js
+++ b/src/modules/firebase/index.js
@@ -71,6 +71,10 @@ export const login = (name) => {
var provider = null;
if (name === 'google') {
provider = new firebase.auth.GoogleAuthProvider();
+ } else if (name === 'facebook') {
+ provider = new firebase.auth.FacebookAuthProvider();
+ } else if (name === 'github') {
+ provider = new firebase.auth.GithubAuthProvider();
}
return firebase.auth().signInWithPopup(provider);
From 4af09d9dbbb3fd00e0f094f40289b8e953c0ac8f Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Wed, 11 Oct 2017 03:29:30 +0800
Subject: [PATCH 22/56] added login
Signed-off-by: Toni-Jan Keith Monserrat
---
bower.json | 3 ++-
src/.temp/temp.json | 2 +-
src/config/dev.json | 2 +-
.../devfest-drawer/devfest-drawer.html | 8 ++++----
.../devfest-login-page/devfest-login-page.js | 19 +++++++++++++++++--
src/routing.js | 2 +-
6 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/bower.json b/bower.json
index ae85427..4d43bc4 100644
--- a/bower.json
+++ b/bower.json
@@ -31,7 +31,8 @@
"paper-toast": "PolymerElements/paper-toast#^2.0.0",
"google-map": "GoogleWebComponents/google-map#^2.0.2",
"iron-media-query": "PolymerElements/iron-media-query#^2.0.0",
- "paper-button": "PolymerElements/paper-button#^2.0.0"
+ "paper-button": "PolymerElements/paper-button#^2.0.0",
+ "paper-spinner": "PolymerElements/paper-spinner#^2.0.0"
},
"devDependencies": {
"web-component-tester": "^6.0.0"
diff --git a/src/.temp/temp.json b/src/.temp/temp.json
index 6f0cf00..0f76189 100644
--- a/src/.temp/temp.json
+++ b/src/.temp/temp.json
@@ -63,7 +63,7 @@
"/sponsors": "devfest-sponsors-page",
"/login": "devfest-login-page",
"/profile": {
- "name": "devfest-login-page",
+ "name": "devfest-profile-page",
"auth": "isLoggedIn"
},
"/codelabs/:type?/:id?/:page?": {
diff --git a/src/config/dev.json b/src/config/dev.json
index 6f0cf00..0f76189 100644
--- a/src/config/dev.json
+++ b/src/config/dev.json
@@ -63,7 +63,7 @@
"/sponsors": "devfest-sponsors-page",
"/login": "devfest-login-page",
"/profile": {
- "name": "devfest-login-page",
+ "name": "devfest-profile-page",
"auth": "isLoggedIn"
},
"/codelabs/:type?/:id?/:page?": {
diff --git a/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html b/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html
index b502929..28f4f61 100644
--- a/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html
+++ b/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html
@@ -14,13 +14,13 @@
- Codelabs
- Profile
- Logout
+ Codelabs
+ Profile
+ Logout
- Login
+ Login
diff --git a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.js b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.js
index 6ea3791..34aa757 100644
--- a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.js
+++ b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.js
@@ -3,7 +3,7 @@ import 'polymer/lib/elements/dom-repeat.html';
import 'iron-icon/iron-icon.html';
import 'iron-flex-layout/iron-flex-layout.html';
import 'shadycss/apply-shim.html';
-// import 'paper-button/paper-button.html';
+import 'paper-spinner/paper-spinner.html';
import 'marked-element/marked-element.html';
import '../../fonts/devfest-fonts.html';
import '../../icons/devfest-icons.html';
@@ -37,12 +37,27 @@ class DevfestLoginPage extends User(Polymer.GestureEventListeners(contentLoaderM
};
}
+ static get observers () {
+ return [
+ '_checkUser(user)'
+ ];
+ }
+
connectedCallback () {
super.connectedCallback();
this.reload();
}
- reload () {}
+ _checkUser (user) {
+ if (user) {
+ window.history.pushState({}, '', '/profile');
+ window.dispatchEvent(new CustomEvent('location-changed'));
+ }
+ }
+
+ reload () {
+ this._checkUser(this.user);
+ }
}
window.customElements.define(DevfestLoginPage.is, DevfestLoginPage);
diff --git a/src/routing.js b/src/routing.js
index 4b60290..769bb83 100644
--- a/src/routing.js
+++ b/src/routing.js
@@ -9,7 +9,7 @@
'/tickets': () => { return import(/* webpackChunkName: "devfest-tickets-page" */ './modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.js') },
'/sponsors': () => { return import(/* webpackChunkName: "devfest-sponsors-page" */ './modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js') },
'/login': () => { return import(/* webpackChunkName: "devfest-login-page" */ './modules/devfest-module/pages/devfest-login-page/devfest-login-page.js') },
-'/profile': () => { return import(/* webpackChunkName: "devfest-login-page" */ './modules/devfest-module/pages/devfest-login-page/devfest-login-page.js') },
+'/profile': () => { return import(/* webpackChunkName: "devfest-profile-page" */ './modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js') },
'/codelabs/:type?/:id?/:page?': () => { return import(/* webpackChunkName: "devfest-codelabs-page" */ './modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js') },
'/connect-ticket': () => { return import(/* webpackChunkName: "devfest-connect-ticket-page" */ './modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js') },
'/scan': () => { return import(/* webpackChunkName: "devfest-scan-page" */ './modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js') },
From aa1ee3b2e1b9da3e6ecf24d067575b463ee54335 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Wed, 11 Oct 2017 04:45:31 +0800
Subject: [PATCH 23/56] added stuff
Signed-off-by: Toni-Jan Keith Monserrat
---
functions/index.js | 14 +++++++++-
.../devfest-drawer/devfest-drawer.html | 2 +-
.../devfest-module/models/user-model.js | 26 +++++++++++++++++--
src/modules/firebase/index.js | 9 ++++++-
4 files changed, 46 insertions(+), 5 deletions(-)
diff --git a/functions/index.js b/functions/index.js
index ce475e2..70b177e 100644
--- a/functions/index.js
+++ b/functions/index.js
@@ -1,4 +1,16 @@
-const functions = require('firebase-functions')
+const functions = require('firebase-functions');
+const admin = require('firebase-admin');
+admin.initializeApp(functions.config().firebase);
+
+exports.createProfile = functions.auth.user().onCreate(event => {
+ const user = event.data;
+ const uid = event.uid;
+ const email = user.email;
+ const displayName = user.displayName || email;
+ const image = user.photoURL;
+ const key = admin.database().ref(`v1/`)
+ // ...
+});
// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
diff --git a/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html b/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html
index 28f4f61..5e298a5 100644
--- a/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html
+++ b/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html
@@ -16,7 +16,7 @@
Codelabs
Profile
- Logout
+ Logout
diff --git a/src/modules/devfest-module/models/user-model.js b/src/modules/devfest-module/models/user-model.js
index 64182fc..097e9a1 100644
--- a/src/modules/devfest-module/models/user-model.js
+++ b/src/modules/devfest-module/models/user-model.js
@@ -1,7 +1,9 @@
import { combineReducers } from 'redux';
-import { login, logout, firebaseDocumentLoader, observeAuth, firebaseRemoveListeners } from '../../firebase';
+import { login, logout, firebaseDocumentLoader, observeAuth, firebaseRemoveListeners, updateFirebase } from '../../firebase';
import { ReduxMixin, store, reducers } from '../../../../core/modules/state-manager';
+const {fetch} = window;
+
const profileModel = {
primary: {
displayName: String,
@@ -120,10 +122,30 @@ export default (superClass) => {
login (e) {
var el = e.target;
var provider = el.id || 'google';
- login(provider);
+ login(provider)
+ .then(result => {
+ const user = result.user;
+ const providerId = result.credential.providerId;
+ if (providerId === 'github.com') {
+ return fetch(`https://api.github.com/user?access_token=${result.credential.accessToken}`)
+ .then(response => Promise.all([response.json(), Promise.resolve(user)]));
+ }
+ return Promise.resolve();
+ })
+ .then(result => {
+ if (result[0] && result[1]) {
+ const updates = {};
+ updates[`v1/user/source/${result[1].uid}/primary/github`] = result[0].html_url;
+ updates[`v1/user/source/${result[1].uid}/primary/githubName`] = result[0].login;
+ updateFirebase(updates);
+ }
+ });
}
logout () {
+ if (this.shadowRoot.querySelector('app-drawer')) {
+ this.shadowRoot.querySelector('app-drawer').close();
+ }
logout();
}
};
diff --git a/src/modules/firebase/index.js b/src/modules/firebase/index.js
index 6a4d812..3ade0df 100644
--- a/src/modules/firebase/index.js
+++ b/src/modules/firebase/index.js
@@ -42,6 +42,7 @@ export const firebaseRemoveListeners = () => {
};
export const firebaseDocumentLoader = (modelPath, key, action, store, profileModel, type) => {
+ // console.log(modelPath, key, action, profileModel, type)
const sourcePath = `${modelPath}/source/${key}`;
if (action.modelType) {
const modelType = `${sourcePath}/${action.modelType}`;
@@ -54,6 +55,7 @@ export const firebaseDocumentLoader = (modelPath, key, action, store, profileMod
listeners[modelType + '/' + j] = null;
}
}
+
listeners[modelType] = listeners[modelType] || firebase.database().ref(modelType);
listeners[modelType].on('value', updateModelTypeSnapshot.bind(this, store, action.modelType, type));
break;
@@ -67,6 +69,10 @@ export const firebaseDocumentLoader = (modelPath, key, action, store, profileMod
}
};
+export const updateFirebase = (updates) => {
+ return firebase.database().ref().update(updates);
+};
+
export const login = (name) => {
var provider = null;
if (name === 'google') {
@@ -75,9 +81,10 @@ export const login = (name) => {
provider = new firebase.auth.FacebookAuthProvider();
} else if (name === 'github') {
provider = new firebase.auth.GithubAuthProvider();
+ // provider.addScope('repo');
}
- return firebase.auth().signInWithPopup(provider);
+ return firebase.auth().signInWithPopup(provider)
};
export const logout = () => {
From 8bdf3058c5d23dee02f69a7a6a4809193293cf9e Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Wed, 11 Oct 2017 13:06:28 +0800
Subject: [PATCH 24/56] added tnc
Signed-off-by: Toni-Jan Keith Monserrat
---
database.rules.json | 87 ++++++++++++++++++-
firebase.json | 4 +
functions/index.js | 17 +++-
src/.temp/temp.json | 2 +
src/config/dev.json | 2 +
.../devfest-tnc-page/devfest-tnc-page.html | 16 ++++
.../devfest-tnc-page/devfest-tnc-page.js | 51 +++++++++++
.../devfest-tnc-page/devfest-tnc-page.scss | 7 ++
src/routing.js | 1 +
9 files changed, 182 insertions(+), 5 deletions(-)
create mode 100644 src/modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.html
create mode 100644 src/modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.js
create mode 100644 src/modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.scss
diff --git a/database.rules.json b/database.rules.json
index 2060fb5..1713422 100644
--- a/database.rules.json
+++ b/database.rules.json
@@ -1,8 +1,89 @@
{
"rules": {
- "dev": {
- ".read": true,
- ".write": "auth != null"
+ "v1": {
+ "$modelName": {
+ "$query": {
+ ".read": true,
+ ".indexOn": ["value"]
+ }
+ },
+ "codelabs": {
+ ".read": true
+ },
+ "codelabtype": {
+ ".read": true
+ },
+ "codelabchecker": {
+ ".read": false
+ },
+ "sponsors": {
+ ".read": false
+ },
+ "user": {
+ "source": {
+ "$uid": {
+ "primary": {
+ ".read": "auth != null && auth.uid == $uid",
+ "email": {
+ ".write": "!data.exists()"
+ },
+ "displayName": {
+ ".read": true
+ },
+ "image": {
+ ".read": true
+ },
+ "ticketNumber": {
+ ".write": false
+ },
+ "ticketEmail": {
+ ".write": false
+ },
+ "ticketName": {
+ ".write": false
+ },
+ "github": {
+ ".read": true,
+ ".write": "(!data.exists() || !newData.exists()) && auth != null && auth.uid == $uid"
+ },
+ "githubName": {
+ ".read": true,
+ ".write": "(!data.exists() || !newData.exists()) && auth != null && auth.uid == $uid"
+ }
+ },
+ "meta": {
+ ".read": "auth != null && auth.uid == $uid",
+ "accepted": {
+ ".read": true,
+ ".write": "auth != null && auth.uid == $uid"
+ },
+ "score": {
+ ".read": true,
+ ".write": false
+ },
+ "verified": {
+ ".read": true,
+ ".write": false
+ },
+ "dateJoined": {
+ ".read": true,
+ ".write": "!data.exists()"
+ }
+ },
+ "cross": {
+ ".read": "auth != null && auth.uid == $uid",
+ "sponsor": {
+ ".read": true,
+ ".write": false
+ },
+ "codelabsDone": {
+ ".read": true,
+ ".write": false
+ }
+ }
+ }
+ }
+ }
}
}
}
\ No newline at end of file
diff --git a/firebase.json b/firebase.json
index 018c934..a753f75 100644
--- a/firebase.json
+++ b/firebase.json
@@ -40,6 +40,10 @@
"source": "/sponsors",
"destination": "/index.html"
},
+ {
+ "source": "/tnc",
+ "destination": "/index.html"
+ },
{
"source": "/login",
"destination": "/index.html"
diff --git a/functions/index.js b/functions/index.js
index 70b177e..873c138 100644
--- a/functions/index.js
+++ b/functions/index.js
@@ -4,11 +4,24 @@ admin.initializeApp(functions.config().firebase);
exports.createProfile = functions.auth.user().onCreate(event => {
const user = event.data;
- const uid = event.uid;
const email = user.email;
const displayName = user.displayName || email;
+ const uid = user.uid;
const image = user.photoURL;
- const key = admin.database().ref(`v1/`)
+ const updates = {};
+ const path = `v1/user/source/${uid}`;
+ updates[`${path}/primary/email`] = email;
+ updates[`${path}/primary/displayName`] = displayName;
+ updates[`${path}/primary/image`] = image;
+ updates[`${path}/primary/ticketNumber`] = '';
+ updates[`${path}/primary/ticketEmail`] = '';
+ updates[`${path}/primary/ticketName`] = '';
+ updates[`${path}/meta/accepted`] = false;
+ updates[`${path}/meta/score`] = 0;
+ updates[`${path}/meta/verified`] = false;
+ updates[`${path}/meta/dateJoined`] = admin.database.ServerValue.TIMESTAMP;
+ // updates[`${path}/cross/ticketEmail`] = '';
+ admin.database().ref().update(updates);
// ...
});
diff --git a/src/.temp/temp.json b/src/.temp/temp.json
index 0f76189..ef3c8c0 100644
--- a/src/.temp/temp.json
+++ b/src/.temp/temp.json
@@ -40,6 +40,7 @@
"devfest-tickets-page": "modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.js",
"devfest-sponsors-page": "modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js",
"devfest-login-page": "modules/devfest-module/pages/devfest-login-page/devfest-login-page.js",
+ "devfest-tnc-page": "modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.js",
"devfest-profile-page": "modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js",
"devfest-codelabs-page": "modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js",
"devfest-connect-ticket-page": "modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js",
@@ -61,6 +62,7 @@
"/sessions/:id": "devfest-session-page",
"/tickets": "devfest-tickets-page",
"/sponsors": "devfest-sponsors-page",
+ "/tnc": "devfest-tnc-page",
"/login": "devfest-login-page",
"/profile": {
"name": "devfest-profile-page",
diff --git a/src/config/dev.json b/src/config/dev.json
index 0f76189..ef3c8c0 100644
--- a/src/config/dev.json
+++ b/src/config/dev.json
@@ -40,6 +40,7 @@
"devfest-tickets-page": "modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.js",
"devfest-sponsors-page": "modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js",
"devfest-login-page": "modules/devfest-module/pages/devfest-login-page/devfest-login-page.js",
+ "devfest-tnc-page": "modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.js",
"devfest-profile-page": "modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js",
"devfest-codelabs-page": "modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js",
"devfest-connect-ticket-page": "modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js",
@@ -61,6 +62,7 @@
"/sessions/:id": "devfest-session-page",
"/tickets": "devfest-tickets-page",
"/sponsors": "devfest-sponsors-page",
+ "/tnc": "devfest-tnc-page",
"/login": "devfest-login-page",
"/profile": {
"name": "devfest-profile-page",
diff --git a/src/modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.html b/src/modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.html
new file mode 100644
index 0000000..c654984
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.js b/src/modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.js
new file mode 100644
index 0000000..54e5ec8
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.js
@@ -0,0 +1,51 @@
+import 'polymer/polymer-element.html';
+import 'polymer/lib/elements/dom-repeat.html';
+import 'iron-icon/iron-icon.html';
+import 'iron-flex-layout/iron-flex-layout.html';
+import 'shadycss/apply-shim.html';
+import 'marked-element/marked-element.html';
+import '../../fonts/devfest-fonts.html';
+import '../../icons/devfest-icons.html';
+import '../../components/devfest-footer/devfest-footer.js';
+import '../../components/devfest-button/devfest-button.js';
+import './devfest-tnc-page.html';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+import marked from 'marked';
+window.marked = window.marked || marked;
+
+const {Polymer} = window;
+
+class DevfestTncPage extends contentLoaderMixin(Polymer.Element) {
+ static get is () { return 'devfest-tnc-page'; }
+
+ static get properties () {
+ return {
+ perks: {
+ type: Array,
+ value: []
+ },
+ details: {
+ type: Array,
+ value: []
+ },
+ payment: {
+ type: Array,
+ value: []
+ }
+ };
+ }
+
+ connectedCallback () {
+ super.connectedCallback();
+ this.reload();
+ }
+
+ reload () {
+ this._fetchContent('pages/tnc.md');
+ // this._fetchJson('speakers/speakers.json', 'speakers')
+ }
+}
+
+window.customElements.define(DevfestTncPage.is, DevfestTncPage);
+
+export default DevfestTncPage;
diff --git a/src/modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.scss b/src/modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.scss
new file mode 100644
index 0000000..d366ac3
--- /dev/null
+++ b/src/modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.scss
@@ -0,0 +1,7 @@
+@import '../../styles/components/host.scss';
+@import '../../styles/components/typography.scss';
+@import '../../styles/components/section.scss';
+
+.section {
+ text-align: left;
+}
diff --git a/src/routing.js b/src/routing.js
index 769bb83..463963d 100644
--- a/src/routing.js
+++ b/src/routing.js
@@ -8,6 +8,7 @@
'/sessions/:id': () => { return import(/* webpackChunkName: "devfest-session-page" */ './modules/devfest-module/pages/devfest-session-page/devfest-session-page.js') },
'/tickets': () => { return import(/* webpackChunkName: "devfest-tickets-page" */ './modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.js') },
'/sponsors': () => { return import(/* webpackChunkName: "devfest-sponsors-page" */ './modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js') },
+'/tnc': () => { return import(/* webpackChunkName: "devfest-tnc-page" */ './modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.js') },
'/login': () => { return import(/* webpackChunkName: "devfest-login-page" */ './modules/devfest-module/pages/devfest-login-page/devfest-login-page.js') },
'/profile': () => { return import(/* webpackChunkName: "devfest-profile-page" */ './modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js') },
'/codelabs/:type?/:id?/:page?': () => { return import(/* webpackChunkName: "devfest-codelabs-page" */ './modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js') },
From 5980b18b8f1ba0454f4f4e7a06d19a66fba40cd2 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Wed, 11 Oct 2017 15:08:30 +0800
Subject: [PATCH 25/56] added database
Signed-off-by: Toni-Jan Keith Monserrat
---
database.rules.json | 9 ++-
.../devfest-session-page.js | 69 ++++++++++---------
2 files changed, 42 insertions(+), 36 deletions(-)
diff --git a/database.rules.json b/database.rules.json
index 1713422..06d8a20 100644
--- a/database.rules.json
+++ b/database.rules.json
@@ -1,5 +1,6 @@
{
"rules": {
+
"v1": {
"$modelName": {
"$query": {
@@ -13,11 +14,15 @@
"codelabtype": {
".read": true
},
- "codelabchecker": {
+ "codelabChecker": {
".read": false
},
"sponsors": {
- ".read": false
+ "source": {
+ "$sponsor": {
+ ".read": true
+ }
+ }
},
"user": {
"source": {
diff --git a/src/modules/devfest-module/pages/devfest-session-page/devfest-session-page.js b/src/modules/devfest-module/pages/devfest-session-page/devfest-session-page.js
index 6720e7f..e874285 100644
--- a/src/modules/devfest-module/pages/devfest-session-page/devfest-session-page.js
+++ b/src/modules/devfest-module/pages/devfest-session-page/devfest-session-page.js
@@ -1,16 +1,17 @@
-import 'polymer/polymer-element.html'
-import 'marked-element/marked-element.html'
-import '../../fonts/devfest-fonts.html'
-import '../../icons/devfest-icons.html'
-import '../../components/devfest-footer/devfest-footer.js'
-import './devfest-session-page.html'
-import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js'
-import app from '../../../../app'
-import marked from 'marked'
-window.marked = window.marked || marked
+import 'polymer/polymer-element.html';
+import 'marked-element/marked-element.html';
+import '../../fonts/devfest-fonts.html';
+import '../../icons/devfest-icons.html';
+import '../../components/devfest-footer/devfest-footer.js';
+import './devfest-session-page.html';
+import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
+import app from '../../../../app';
+import marked from 'marked';
+window.marked = window.marked || marked;
+const {Polymer} = window;
class DevfestSessionPage extends contentLoaderMixin(Polymer.Element) {
- static get is () { return 'devfest-session-page' }
+ static get is () { return 'devfest-session-page'; }
static get properties () {
return {
@@ -25,56 +26,56 @@ class DevfestSessionPage extends contentLoaderMixin(Polymer.Element) {
type: Object,
value: {}
}
- }
+ };
}
static get observers () {
return [
'reload(params.id)'
- ]
+ ];
}
constructor () {
- super()
- this._app = app
+ super();
+ this._app = app;
}
connectedCallback () {
- super.connectedCallback()
+ super.connectedCallback();
if (this.params && this.params.id) {
- this.reload()
+ this.reload();
}
// this._fetchContent('pages/speakers.md')
}
- reload() {
+ reload () {
if (this.params.id) {
- this._fetchContent(`sessions/session-description/${this.params.id}.md`)
+ this._fetchContent(`sessions/session-description/${this.params.id}.md`);
}
- this._fetchJson('speakers/speakers.json', 'speakers')
- this._fetchJson('sessions/sessions.json', 'sessions')
- this._fetchJson('sessions/sessions-type.json', 'sessionsType')
- this._fetchJson('schedule/schedule.json', 'schedule')
+ this._fetchJson('speakers/speakers.json', 'speakers');
+ this._fetchJson('sessions/sessions.json', 'sessions');
+ this._fetchJson('sessions/sessions-type.json', 'sessionsType');
+ this._fetchJson('schedule/schedule.json', 'schedule');
}
- _getInfo(id, attribute) {
+ _getInfo (id, attribute) {
if (this.sessions[id]) {
- return this.sessions[id][attribute]
+ return this.sessions[id][attribute];
}
}
- _getSession(id, attribute) {
+ _getSession (id, attribute) {
if (this.sessions[id]) {
- return this.sessions[id][attribute]
+ return this.sessions[id][attribute];
}
}
- _getTime(id) {
+ _getTime (id) {
if (this.schedule && this.sessions[id]) {
- var schedule = this.sessions[id].schedule
+ var schedule = this.sessions[id].schedule;
for (var i in this.schedule) {
if (this.schedule[i].id === schedule) {
- return (this.schedule[i].start.substr(0, 2) + ':' + this.schedule[i].start.substr(2, 2)) + ' - ' + (this.schedule[i].end.substr(0, 2) + ':' + this.schedule[i].end.substr(2, 2))
+ return (this.schedule[i].start.substr(0, 2) + ':' + this.schedule[i].start.substr(2, 2)) + ' - ' + (this.schedule[i].end.substr(0, 2) + ':' + this.schedule[i].end.substr(2, 2));
}
}
}
@@ -83,7 +84,7 @@ class DevfestSessionPage extends contentLoaderMixin(Polymer.Element) {
_getSpeakerId (id) {
if (this.sessions && id && this.sessions[id] && this.speakers) {
if (this.sessions[id].speaker) {
- return this.sessions[id].speaker
+ return this.sessions[id].speaker;
}
// return this.sessions[id].title
@@ -93,7 +94,7 @@ class DevfestSessionPage extends contentLoaderMixin(Polymer.Element) {
_getSpeakerInfo (id, attribute) {
if (this.sessions && id && this.sessions[id] && this.speakers) {
if (this.speakers[this.sessions[id].speaker]) {
- return this.speakers[this.sessions[id].speaker][attribute]
+ return this.speakers[this.sessions[id].speaker][attribute];
}
// return this.sessions[id].title
@@ -101,6 +102,6 @@ class DevfestSessionPage extends contentLoaderMixin(Polymer.Element) {
}
}
-window.customElements.define(DevfestSessionPage.is, DevfestSessionPage)
+window.customElements.define(DevfestSessionPage.is, DevfestSessionPage);
-export default DevfestSessionPage
\ No newline at end of file
+export default DevfestSessionPage;
From 5eaf81ceb3e8ca42fceed6aa0e84a0fb7bcfb814 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Wed, 11 Oct 2017 18:59:02 +0800
Subject: [PATCH 26/56] added linking
Signed-off-by: Toni-Jan Keith Monserrat
---
.../devfest-button-only.scss | 3 +-
.../devfest-module/icons/devfest-icons.html | 3 +
.../devfest-module/models/user-model.js | 90 +++++++++++++++++--
.../devfest-login-page.html | 33 ++++++-
.../devfest-login-page.scss | 33 ++++++-
.../devfest-profile-page.html | 47 +++++++++-
.../devfest-profile-page.js | 82 ++++++++++++++---
.../devfest-profile-page.scss | 68 ++++++++++++++
.../devfest-sessions-page.html | 0
.../devfest-sessions-page.js | 0
.../devfest-sessions-page.scss | 0
src/modules/firebase/index.js | 26 +++++-
12 files changed, 357 insertions(+), 28 deletions(-)
rename src/modules/devfest-module/pages/{ => devfest-profile-page}/devfest-sessions-page/devfest-sessions-page.html (100%)
rename src/modules/devfest-module/pages/{ => devfest-profile-page}/devfest-sessions-page/devfest-sessions-page.js (100%)
rename src/modules/devfest-module/pages/{ => devfest-profile-page}/devfest-sessions-page/devfest-sessions-page.scss (100%)
diff --git a/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.scss b/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.scss
index b5a7b45..22c8d19 100644
--- a/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.scss
+++ b/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.scss
@@ -4,11 +4,10 @@
color: white;
border: 3px solid #2e9be6;
border-radius: 2px;
- padding: 12px;
+ padding: 5px;
font-size: 16px;
width: 100%;
display: block;
- text-transform: uppercase;
font-weight: bold;
text-decoration: none;
position: relative;
diff --git a/src/modules/devfest-module/icons/devfest-icons.html b/src/modules/devfest-module/icons/devfest-icons.html
index c1036fd..c5557b2 100644
--- a/src/modules/devfest-module/icons/devfest-icons.html
+++ b/src/modules/devfest-module/icons/devfest-icons.html
@@ -6,6 +6,9 @@
+
+
+
diff --git a/src/modules/devfest-module/models/user-model.js b/src/modules/devfest-module/models/user-model.js
index 097e9a1..03546d7 100644
--- a/src/modules/devfest-module/models/user-model.js
+++ b/src/modules/devfest-module/models/user-model.js
@@ -1,8 +1,8 @@
import { combineReducers } from 'redux';
-import { login, logout, firebaseDocumentLoader, observeAuth, firebaseRemoveListeners, updateFirebase } from '../../firebase';
+import { login, link, unlink, reloadUser, logout, firebaseDocumentLoader, observeAuth, firebaseRemoveListeners, updateFirebase } from '../../firebase';
import { ReduxMixin, store, reducers } from '../../../../core/modules/state-manager';
-const {fetch} = window;
+const {fetch, Polymer} = window;
const profileModel = {
primary: {
@@ -121,7 +121,10 @@ export default (superClass) => {
login (e) {
var el = e.target;
- var provider = el.id || 'google';
+ while (!el.id) {
+ el = el.parentNode;
+ }
+ var provider = el.id;
login(provider)
.then(result => {
const user = result.user;
@@ -130,16 +133,91 @@ export default (superClass) => {
return fetch(`https://api.github.com/user?access_token=${result.credential.accessToken}`)
.then(response => Promise.all([response.json(), Promise.resolve(user)]));
}
+ document.querySelector('app-shell').showMessage('Login successful', null, null, null, 5000);
+ return Promise.resolve();
+ })
+ .then(result => {
+ if (result) {
+ if (result[0] && result[1]) {
+ const updates = {};
+ updates[`v1/user/source/${result[1].uid}/primary/github`] = result[0].html_url;
+ updates[`v1/user/source/${result[1].uid}/primary/githubName`] = result[0].login;
+ updateFirebase(updates);
+ }
+ }
+ });
+ }
+
+ link (e) {
+ var el = e.target;
+ while (!el.id) {
+ el = el.parentNode;
+ }
+ var provider = el.id;
+ link(this.user, provider)
+ .then(result => {
+ const user = result.user;
+ const providerId = result.credential.providerId;
+
+ document.querySelector('app-shell').showMessage('Link successful', null, null, null, 5000);
+ this.dispatch({
+ type: USER_ACTION.UPDATE,
+ user
+ });
+ this.notifyPath('user.providerData');
+
+ if (providerId === 'github.com') {
+ return fetch(`https://api.github.com/user?access_token=${result.credential.accessToken}`)
+ .then(response => Promise.all([response.json(), Promise.resolve(user)]));
+ }
+
return Promise.resolve();
})
.then(result => {
- if (result[0] && result[1]) {
+ if (result) {
+ if (result[0] && result[1]) {
+ const updates = {};
+ updates[`v1/user/source/${result[1].uid}/primary/github`] = result[0].html_url;
+ updates[`v1/user/source/${result[1].uid}/primary/githubName`] = result[0].login;
+ updateFirebase(updates);
+ }
+ }
+ });
+ }
+
+ unlink (e) {
+ if (this.user && this.user.providerData && this.user.providerData.length > 1) {
+ var el = e.target;
+ while (!el.id) {
+ el = el.parentNode;
+ }
+ var provider = el.id;
+ unlink(this.user, provider)
+ .then(() => {
+ const user = reloadUser();
+
+ this.dispatch({
+ type: USER_ACTION.UPDATE,
+ user
+ });
+
+ if (provider === 'github') {
const updates = {};
- updates[`v1/user/source/${result[1].uid}/primary/github`] = result[0].html_url;
- updates[`v1/user/source/${result[1].uid}/primary/githubName`] = result[0].login;
+ updates[`v1/user/source/${this.user.uid}/primary/github`] = null;
+ updates[`v1/user/source/${this.user.uid}/primary/githubName`] = null;
updateFirebase(updates);
}
+
+ this.notifyPath('user.providerData');
+
+ document.querySelector('app-shell').showMessage('Unlinked account successful', null, null, null, 5000);
+ })
+ .catch((e) => {
+ document.querySelector('app-shell').showMessage(e.message, null, null, null, 5000);
});
+ } else {
+ document.querySelector('app-shell').showMessage('You cannot unlink your only account.', null, null, null, 5000);
+ }
}
logout () {
diff --git a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html
index 663bee6..a4ac14c 100644
--- a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html
+++ b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html
@@ -5,9 +5,36 @@
- Google
- Facebook
- Github
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.scss b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.scss
index b70b907..2c225f5 100644
--- a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.scss
+++ b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.scss
@@ -14,6 +14,37 @@
}
}
+.row {
+ @apply --layout-horizontal;
+ @apply --layout-center;
+}
+
+
+.left {
+ text-align: left;
+ @apply --layout-flex-4;
+}
+
+.right {
+ @apply --layout-flex-3;
+ text-align: right;
+ margin-right: 40px;
+
+ @media screen and (max-width: 500px) {
+ margin-right: 20px;
+ }
+}
+
+.icon {
+ width: 24px !important;
+ height: 24px !important;
+}
+
+.icon {
+ --iron-icon-height: 24px !important;
+ --iron-icon-width: 24px !important;
+}
+
.login-image {
width: 50%;
margin-bottom: 40px;
@@ -25,7 +56,7 @@
.button {
display: block;
- margin: 0 auto 10px;
+ margin: 0 auto 5px;
width: 80%;
cursor: pointer;
}
\ No newline at end of file
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
index 55d769c..13bd3ad 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
@@ -2,8 +2,53 @@
-
+
+
+
+
+
[[profile.displayName]]
+
+
+
+ Score: [[profile.score]]
+
+
+
+
+
+ Link Accounts
+
+
+
+
+
+
+
+
+ [[_getProviderName(item.providerId)]]
+
+
+
+
+
+
+
+ Unlink Accounts
+
+
+
+
+
+
+
+
+ [[_getProviderName(item.providerId)]]
+
+
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js
index b61a08b..c1a7163 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js
@@ -7,31 +7,21 @@ import 'marked-element/marked-element.html';
import '../../fonts/devfest-fonts.html';
import '../../icons/devfest-icons.html';
import '../../components/devfest-footer/devfest-footer.js';
-import '../../components/devfest-button/devfest-button.js';
+import '../../components/devfest-button-only/devfest-button-only.js';
import './devfest-profile-page.html';
+import User from '../../models/user-model';
import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
import marked from 'marked';
window.marked = window.marked || marked;
const {Polymer} = window;
-class DevfestProfilePage extends contentLoaderMixin(Polymer.Element) {
+class DevfestProfilePage extends User(contentLoaderMixin(Polymer.Element)) {
static get is () { return 'devfest-profile-page'; }
static get properties () {
return {
- perks: {
- type: Array,
- value: []
- },
- details: {
- type: Array,
- value: []
- },
- payment: {
- type: Array,
- value: []
- }
+
};
}
@@ -40,6 +30,70 @@ class DevfestProfilePage extends contentLoaderMixin(Polymer.Element) {
this.reload();
}
+ _getMoreLinks (providerData) {
+ var providers = [
+ 'github.com',
+ 'facebook.com',
+ 'google.com'
+ ];
+
+ for (var i in providerData) {
+ providers.splice(providers.indexOf(providerData[i].providerId), 1);
+ }
+
+ return providers.map(item => ({providerId: item}));
+ }
+
+ _getMoreLinksNumber (providerData) {
+ var providers = [
+ 'github.com',
+ 'facebook.com',
+ 'google.com'
+ ];
+
+ for (var i in providerData) {
+ providers.splice(providers.indexOf(providerData[i].providerId), 1);
+ }
+
+ return providers.length;
+ }
+
+ _getProvider (provider) {
+ if (provider === 'github.com') {
+ return 'github';
+ } else if (provider === 'google.com') {
+ return 'google';
+ } else if (provider === 'facebook.com') {
+ return 'facebook';
+ } else {
+ console.log(provider);
+ }
+ }
+
+ _getProviderIcon (provider) {
+ if (provider === 'github.com') {
+ return 'github';
+ } else if (provider === 'google.com') {
+ return 'google-plus';
+ } else if (provider === 'facebook.com') {
+ return 'facebook';
+ } else {
+ console.log(provider);
+ }
+ }
+
+ _getProviderName (provider) {
+ if (provider === 'github.com') {
+ return 'Github';
+ } else if (provider === 'google.com') {
+ return 'Google';
+ } else if (provider === 'facebook.com') {
+ return 'Facebook';
+ } else {
+ console.log(provider);
+ }
+ }
+
reload () {}
}
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss
index 4c50add..67e58ca 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss
@@ -1,3 +1,71 @@
@import '../../styles/components/host.scss';
@import '../../styles/components/typography.scss';
@import '../../styles/components/section.scss';
+
+.section {
+ max-width: 600px;
+ padding: 20px;
+ margin: 60px auto 60px;
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12), 0 3px 1px -2px rgba(0,0,0,.2);
+
+ @media screen and (max-width: 720px) {
+ margin: 20px 20px;
+ }
+}
+
+.row {
+ @apply --layout-horizontal;
+ @apply --layout-wrap;
+
+ @media screen and (max-width: 550px) {
+ display: block;
+ }
+}
+
+.avatar {
+ border-radius: 50%;
+ width: 200px;
+ height: 200px;
+ margin: 0 auto;
+}
+
+.flex {
+ @apply --layout-flex;
+ margin-left: 40px;
+ text-align: left;
+}
+
+.row {
+ @apply --layout-center;
+}
+
+.button-row {
+ @apply --layout-flex;
+}
+
+
+.left {
+ text-align: left;
+ @apply --layout-flex-4;
+}
+
+.right {
+ @apply --layout-flex-3;
+ text-align: right;
+ margin-right: 40px;
+
+ @media screen and (max-width: 500px) {
+ margin-right: 20px;
+ }
+}
+
+.icon {
+ width: 24px !important;
+ height: 24px !important;
+}
+
+.icon {
+ --iron-icon-height: 24px !important;
+ --iron-icon-width: 24px !important;
+}
+
diff --git a/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.html b/src/modules/devfest-module/pages/devfest-profile-page/devfest-sessions-page/devfest-sessions-page.html
similarity index 100%
rename from src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.html
rename to src/modules/devfest-module/pages/devfest-profile-page/devfest-sessions-page/devfest-sessions-page.html
diff --git a/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.js b/src/modules/devfest-module/pages/devfest-profile-page/devfest-sessions-page/devfest-sessions-page.js
similarity index 100%
rename from src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.js
rename to src/modules/devfest-module/pages/devfest-profile-page/devfest-sessions-page/devfest-sessions-page.js
diff --git a/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.scss b/src/modules/devfest-module/pages/devfest-profile-page/devfest-sessions-page/devfest-sessions-page.scss
similarity index 100%
rename from src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.scss
rename to src/modules/devfest-module/pages/devfest-profile-page/devfest-sessions-page/devfest-sessions-page.scss
diff --git a/src/modules/firebase/index.js b/src/modules/firebase/index.js
index 3ade0df..73b7faf 100644
--- a/src/modules/firebase/index.js
+++ b/src/modules/firebase/index.js
@@ -84,7 +84,31 @@ export const login = (name) => {
// provider.addScope('repo');
}
- return firebase.auth().signInWithPopup(provider)
+ return firebase.auth().signInWithPopup(provider);
+};
+
+export const link = (user, name) => {
+ var provider = null;
+ if (name === 'google') {
+ provider = new firebase.auth.GoogleAuthProvider();
+ } else if (name === 'facebook') {
+ provider = new firebase.auth.FacebookAuthProvider();
+ } else if (name === 'github') {
+ provider = new firebase.auth.GithubAuthProvider();
+ // provider.addScope('repo');
+ }
+
+ return user.linkWithPopup(provider);
+};
+
+export const unlink = (user, name) => {
+ var provider = name + '.com';
+
+ return user.unlink(provider);
+};
+
+export const reloadUser = () => {
+ return firebase.auth().currentUser;
};
export const logout = () => {
From 742656aad4756fb4b12b4badb945d1202b3d80e8 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Wed, 11 Oct 2017 19:42:55 +0800
Subject: [PATCH 27/56] session is back
Signed-off-by: Toni-Jan Keith Monserrat
---
package.json | 1 +
.../devfest-connect-ticket-page.html | 7 +-
.../devfest-connect-ticket-page.js | 99 +++++++++++++++++++
.../devfest-connect-ticket-page.scss | 28 ++++++
.../devfest-profile-page.html | 8 ++
.../devfest-sessions-page.html | 0
.../devfest-sessions-page.js | 0
.../devfest-sessions-page.scss | 0
yarn.lock | 28 +++---
9 files changed, 158 insertions(+), 13 deletions(-)
rename src/modules/devfest-module/pages/{devfest-profile-page => }/devfest-sessions-page/devfest-sessions-page.html (100%)
rename src/modules/devfest-module/pages/{devfest-profile-page => }/devfest-sessions-page/devfest-sessions-page.js (100%)
rename src/modules/devfest-module/pages/{devfest-profile-page => }/devfest-sessions-page/devfest-sessions-page.scss (100%)
diff --git a/package.json b/package.json
index b32e9cc..c2d6cb1 100644
--- a/package.json
+++ b/package.json
@@ -27,6 +27,7 @@
"intersection-observer": "^0.4.2",
"marked": "^0.3.6",
"path-to-regexp": "^1.7.0",
+ "qrcode-reader": "^1.0.3",
"redux": "^3.7.2"
},
"devDependencies": {
diff --git a/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.html b/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.html
index df5a51a..a443f99 100644
--- a/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.html
+++ b/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.html
@@ -2,8 +2,13 @@
-
+
diff --git a/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js b/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js
index 7bfc846..ecfbf38 100644
--- a/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js
+++ b/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js
@@ -9,6 +9,7 @@ import '../../icons/devfest-icons.html';
import '../../components/devfest-footer/devfest-footer.js';
import '../../components/devfest-button/devfest-button.js';
import './devfest-connect-ticket-page.html';
+import QrCode from 'qrcode-reader';
import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
import marked from 'marked';
window.marked = window.marked || marked;
@@ -35,6 +36,104 @@ class DevfestConnectTicketPage extends contentLoaderMixin(Polymer.Element) {
};
}
+ constructor () {
+ super();
+ this._qr = new QrCode();
+ this._qr.callback = (error, result) => {
+ if (error) {
+ return console.log(error);
+ }
+
+ console.log(result.result);
+ };
+
+ console.log('hello')
+ this._boundResize = this._boundResize || this.resize.bind(this);
+ window.addEventListener('resize', this._boundResize);
+ }
+
+ connectedCallback () {
+ super.connectedCallback();
+ console.log('hello2')
+
+ Polymer.RenderStatus.afterNextRender(this, () => {
+ var video = this.shadowRoot.querySelector('#video');
+ // Get access to the camera!
+ if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
+ console.log(navigator.mediaDevices.getSupportedConstraints());
+ // Not adding `{ audio: true }` since we only want video now
+ navigator.mediaDevices.getUserMedia({ video: { facingMode: { exact: "environment" } } }).then((stream) => {
+ video.src = window.URL.createObjectURL(stream);
+ video.play();
+ // setTimeout(function() {console.log(video.videoHeight)}, 1000)
+ }).catch((error) => {
+ console.error(error)
+ // Raven.captureException(error)
+ // this.$.toast.show(error.message, 5000);
+ });
+ }
+ this.resize();
+ });
+ }
+
+ resize () {
+ // this.$$('#uploading-dialog').center();
+ var canvas = this.shadowRoot.querySelector('#canvas');
+ var video = this.shadowRoot.querySelector('#video');
+ var size = this.windowSize();
+ if (canvas && video) {
+ this.height = size.height - 240;
+ this.width = size.width - 80;
+ video.height = this.height;
+ video.width = this.width;
+ canvas.height = this.height;
+ canvas.width = this.width;
+ }
+ }
+
+ windowSize () {
+ var width = 0;
+ var height = 0;
+ if (window && document) {
+ if (typeof window.innerWidth === 'number') {
+ // Non-IE
+ width = window.innerWidth;
+ height = window.innerHeight;
+ } else if (document.documentElement && (
+ document.documentElement.clientWidth ||
+ document.documentElement.clientHeight)) {
+ // IE 6+ in 'standards compliant mode'
+ width = document.documentElement.clientWidth;
+ height = document.documentElement.clientHeight;
+ } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
+ // IE 4 compatible
+ width = document.body.clientWidth;
+ height = document.body.clientHeight;
+ }
+ }
+ return { width: width, height: height };
+ }
+
+ scanned () {
+ // App.Shell.showMessage('Scan start', function () { App.Shell.closeToast() }, 'Close', null, 10000)
+ var video = this.shadowRoot.querySelector('#video');
+ var canvas = this.shadowRoot.querySelector('#canvas');
+ var context = canvas.getContext('2d');
+
+ var width2 = (video.videoWidth * this.height) / video.videoHeight;
+ var height2 = (video.videoHeight * this.width) / video.videoWidth;
+
+ if (height2 > this.height) {
+ context.drawImage(video, (this.width - width2) / 2, 0, width2, this.height);
+ } else {
+ context.drawImage(video, 0, (this.height - height2) / 2, this.width, height2);
+ }
+
+ var dataURL = canvas.toDataURL();
+ this._qr.decode(dataURL);
+ // this._qr.decode(`http://localhost:5000/images/test.png`);
+ }
+
connectedCallback () {
super.connectedCallback();
this.reload();
diff --git a/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.scss b/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.scss
index 4c50add..c7abf42 100644
--- a/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.scss
+++ b/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.scss
@@ -1,3 +1,31 @@
@import '../../styles/components/host.scss';
@import '../../styles/components/typography.scss';
@import '../../styles/components/section.scss';
+
+.qr-section {
+ text-align: center;
+ position: relative;
+ max-width: 600px;
+ padding: 20px;
+ margin: 60px auto 60px;
+ text-align: center;
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12), 0 3px 1px -2px rgba(0,0,0,.2);
+
+ @media screen and (max-width: 720px) {
+ margin: 20px 20px;
+ }
+}
+
+.snap-area {
+ padding: 0 20px 40px 20px;
+}
+
+.scan-section {
+ width: 60%;
+ height: 20%;
+ position: absolute;
+ top: 25%;
+ left: 20%;
+ border: 1px red solid;
+ z-index: 100;
+}
\ No newline at end of file
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
index 13bd3ad..1ba355f 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
@@ -49,6 +49,14 @@ Unlink Accounts
+
+ Link Ticket
+
+
+ Link your Eventbrite Ticket
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-sessions-page/devfest-sessions-page.html b/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.html
similarity index 100%
rename from src/modules/devfest-module/pages/devfest-profile-page/devfest-sessions-page/devfest-sessions-page.html
rename to src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.html
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-sessions-page/devfest-sessions-page.js b/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.js
similarity index 100%
rename from src/modules/devfest-module/pages/devfest-profile-page/devfest-sessions-page/devfest-sessions-page.js
rename to src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.js
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-sessions-page/devfest-sessions-page.scss b/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.scss
similarity index 100%
rename from src/modules/devfest-module/pages/devfest-profile-page/devfest-sessions-page/devfest-sessions-page.scss
rename to src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.scss
diff --git a/yarn.lock b/yarn.lock
index 400f5d8..7de7cda 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -16,7 +16,7 @@ acorn-jsx@^3.0.0:
dependencies:
acorn "^3.0.4"
-acorn@^3.0.4, acorn@^5.1.1:
+acorn@5.1.2, acorn@^3.0.4, acorn@^5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7"
@@ -35,7 +35,7 @@ ansi-escapes@^1.1.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
-ansi-regex@^2.0.0, ansi-regex@^3.0.0:
+ansi-regex@3.0.0, ansi-regex@^2.0.0, ansi-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
@@ -688,7 +688,7 @@ debug-log@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f"
-debug@^2.1.1, debug@^2.2.0, debug@^2.6.8:
+debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.6.8:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
dependencies:
@@ -748,7 +748,7 @@ delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-doctrine@1.5.0, doctrine@^1.2.2, doctrine@^2.0.0:
+doctrine@1.5.0, doctrine@2.0.0, doctrine@^1.2.2, doctrine@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63"
dependencies:
@@ -814,7 +814,7 @@ error-ex@^1.2.0:
dependencies:
is-arrayish "^0.2.1"
-es-abstract@^1.5.0, es-abstract@^1.7.0:
+es-abstract@1.9.0, es-abstract@^1.5.0, es-abstract@^1.7.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227"
dependencies:
@@ -1093,7 +1093,7 @@ find-root@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
-find-up@^1.0.0, find-up@^2.0.0:
+find-up@2.1.0, find-up@^1.0.0, find-up@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
dependencies:
@@ -1385,7 +1385,7 @@ is-date-object@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
-is-fullwidth-code-point@^1.0.0, is-fullwidth-code-point@^2.0.0:
+is-fullwidth-code-point@2.0.0, is-fullwidth-code-point@^1.0.0, is-fullwidth-code-point@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
@@ -1783,7 +1783,7 @@ parse-json@^2.2.0:
dependencies:
error-ex "^1.2.0"
-path-exists@^2.0.0, path-exists@^3.0.0:
+path-exists@3.0.0, path-exists@^2.0.0, path-exists@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
@@ -1886,6 +1886,10 @@ punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+qrcode-reader@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/qrcode-reader/-/qrcode-reader-1.0.3.tgz#42985ac4751c134e056132e250970d69795d138c"
+
qs@~6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
@@ -2025,7 +2029,7 @@ resumer@~0.0.0:
dependencies:
through "~2.3.4"
-rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1:
+rimraf@2, rimraf@2.6.2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1:
version "2.6.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
dependencies:
@@ -2064,7 +2068,7 @@ semistandard@^11.0.0:
eslint-plugin-standard "~3.0.1"
standard-engine "~7.0.0"
-semver@5.3.0, semver@^5.3.0, semver@^5.4.1:
+semver@5.3.0, semver@5.4.1, semver@^5.3.0, semver@^5.4.1:
version "5.4.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
@@ -2128,7 +2132,7 @@ standard-engine@~7.0.0:
minimist "^1.1.0"
pkg-conf "^2.0.0"
-string-width@^1.0.1, string-width@^1.0.2, string-width@^2.0.0:
+string-width@2.1.1, string-width@^1.0.1, string-width@^1.0.2, string-width@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
dependencies:
@@ -2153,7 +2157,7 @@ stringstream@~0.0.4:
version "0.0.5"
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
-strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@^4.0.0:
+strip-ansi@4.0.0, strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
dependencies:
From 00f5ff3387247137cde294d923177a3eb8aa7b4a Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Wed, 11 Oct 2017 21:02:31 +0800
Subject: [PATCH 28/56] added scanner
Signed-off-by: Toni-Jan Keith Monserrat
---
src/.temp/temp.json | 4 +-
src/config/dev.json | 4 +-
.../devfest-connect-page.html} | 10 ++--
.../devfest-connect-page.js} | 59 +++++++++++++------
.../devfest-connect-page.scss} | 9 +++
src/routing.js | 2 +-
6 files changed, 60 insertions(+), 28 deletions(-)
rename src/modules/devfest-module/pages/{devfest-connect-ticket-page/devfest-connect-ticket-page.html => devfest-connect-page/devfest-connect-page.html} (50%)
rename src/modules/devfest-module/pages/{devfest-connect-ticket-page/devfest-connect-ticket-page.js => devfest-connect-page/devfest-connect-page.js} (75%)
rename src/modules/devfest-module/pages/{devfest-connect-ticket-page/devfest-connect-ticket-page.scss => devfest-connect-page/devfest-connect-page.scss} (89%)
diff --git a/src/.temp/temp.json b/src/.temp/temp.json
index ef3c8c0..280305e 100644
--- a/src/.temp/temp.json
+++ b/src/.temp/temp.json
@@ -43,7 +43,7 @@
"devfest-tnc-page": "modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.js",
"devfest-profile-page": "modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js",
"devfest-codelabs-page": "modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js",
- "devfest-connect-ticket-page": "modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js",
+ "devfest-connect-page": "modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js",
"devfest-scan-page": "modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js",
"devfest-scanned-list-page": "modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js",
"devfest-not-sponsor-page": "modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.js",
@@ -73,7 +73,7 @@
"auth": "isLoggedIn"
},
"/connect-ticket": {
- "name": "devfest-connect-ticket-page",
+ "name": "devfest-connect-page",
"auth": "isLoggedIn"
},
"/scan": {
diff --git a/src/config/dev.json b/src/config/dev.json
index ef3c8c0..280305e 100644
--- a/src/config/dev.json
+++ b/src/config/dev.json
@@ -43,7 +43,7 @@
"devfest-tnc-page": "modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.js",
"devfest-profile-page": "modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js",
"devfest-codelabs-page": "modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js",
- "devfest-connect-ticket-page": "modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js",
+ "devfest-connect-page": "modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js",
"devfest-scan-page": "modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js",
"devfest-scanned-list-page": "modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js",
"devfest-not-sponsor-page": "modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.js",
@@ -73,7 +73,7 @@
"auth": "isLoggedIn"
},
"/connect-ticket": {
- "name": "devfest-connect-ticket-page",
+ "name": "devfest-connect-page",
"auth": "isLoggedIn"
},
"/scan": {
diff --git a/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.html b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.html
similarity index 50%
rename from src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.html
rename to src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.html
index a443f99..efe3d2a 100644
--- a/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.html
+++ b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.html
@@ -1,16 +1,18 @@
-
+
-
+
-
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
similarity index 75%
rename from src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js
rename to src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
index ecfbf38..bb4380c 100644
--- a/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js
+++ b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
@@ -8,7 +8,7 @@ import '../../fonts/devfest-fonts.html';
import '../../icons/devfest-icons.html';
import '../../components/devfest-footer/devfest-footer.js';
import '../../components/devfest-button/devfest-button.js';
-import './devfest-connect-ticket-page.html';
+import './devfest-connect-page.html';
import QrCode from 'qrcode-reader';
import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
import marked from 'marked';
@@ -16,8 +16,8 @@ window.marked = window.marked || marked;
const {Polymer} = window;
-class DevfestConnectTicketPage extends contentLoaderMixin(Polymer.Element) {
- static get is () { return 'devfest-connect-ticket-page'; }
+class DevfestConnectPage extends contentLoaderMixin(Polymer.Element) {
+ static get is () { return 'devfest-connect-page'; }
static get properties () {
return {
@@ -41,20 +41,22 @@ class DevfestConnectTicketPage extends contentLoaderMixin(Polymer.Element) {
this._qr = new QrCode();
this._qr.callback = (error, result) => {
if (error) {
- return console.log(error);
- }
- console.log(result.result);
+ }
+ if (result && result.result) {
+ if (this._interval) {
+ clearInterval(this._interval);
+ this._interval = null;
+ }
+ }
};
- console.log('hello')
this._boundResize = this._boundResize || this.resize.bind(this);
window.addEventListener('resize', this._boundResize);
}
connectedCallback () {
super.connectedCallback();
- console.log('hello2')
Polymer.RenderStatus.afterNextRender(this, () => {
var video = this.shadowRoot.querySelector('#video');
@@ -62,18 +64,42 @@ class DevfestConnectTicketPage extends contentLoaderMixin(Polymer.Element) {
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
console.log(navigator.mediaDevices.getSupportedConstraints());
// Not adding `{ audio: true }` since we only want video now
- navigator.mediaDevices.getUserMedia({ video: { facingMode: { exact: "environment" } } }).then((stream) => {
+ navigator.mediaDevices.getUserMedia({ video: { facingMode: { exact: 'environment' } } }).then((stream) => {
video.src = window.URL.createObjectURL(stream);
video.play();
+ if (this._interval) {
+ clearInterval(this._interval);
+ this._interval = null;
+ }
+
+ this._interval = setInterval(() => {
+ this.scanned();
+ }, 100);
// setTimeout(function() {console.log(video.videoHeight)}, 1000)
- }).catch((error) => {
- console.error(error)
+ })
+ .catch((error) => {
+ console.error(error);
+ return navigator.mediaDevices.getUserMedia({ video: true });
// Raven.captureException(error)
// this.$.toast.show(error.message, 5000);
+ })
+ .then((stream) => {
+ video.src = window.URL.createObjectURL(stream);
+ video.play();
+
+ if (this._interval) {
+ clearInterval(this._interval);
+ this._interval = null;
+ }
+ this._interval = setInterval(() => {
+ this.scanned();
+ }, 100);
+ // setTimeout(function() {console.log(video.videoHeight)}, 1000)
});
}
this.resize();
});
+ this.reload();
}
resize () {
@@ -85,7 +111,7 @@ class DevfestConnectTicketPage extends contentLoaderMixin(Polymer.Element) {
this.height = size.height - 240;
this.width = size.width - 80;
video.height = this.height;
- video.width = this.width;
+ // video.width = this.width;
canvas.height = this.height;
canvas.width = this.width;
}
@@ -134,14 +160,9 @@ class DevfestConnectTicketPage extends contentLoaderMixin(Polymer.Element) {
// this._qr.decode(`http://localhost:5000/images/test.png`);
}
- connectedCallback () {
- super.connectedCallback();
- this.reload();
- }
-
reload () {}
}
-window.customElements.define(DevfestConnectTicketPage.is, DevfestConnectTicketPage);
+window.customElements.define(DevfestConnectPage.is, DevfestConnectPage);
-export default DevfestConnectTicketPage;
+export default DevfestConnectPage;
diff --git a/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.scss b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.scss
similarity index 89%
rename from src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.scss
rename to src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.scss
index c7abf42..b58cf0f 100644
--- a/src/modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.scss
+++ b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.scss
@@ -16,6 +16,15 @@
}
}
+#video {
+ display: block;
+ width: 100%;
+}
+
+#canvas {
+ display: none;
+}
+
.snap-area {
padding: 0 20px 40px 20px;
}
diff --git a/src/routing.js b/src/routing.js
index 463963d..7444c5f 100644
--- a/src/routing.js
+++ b/src/routing.js
@@ -12,7 +12,7 @@
'/login': () => { return import(/* webpackChunkName: "devfest-login-page" */ './modules/devfest-module/pages/devfest-login-page/devfest-login-page.js') },
'/profile': () => { return import(/* webpackChunkName: "devfest-profile-page" */ './modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js') },
'/codelabs/:type?/:id?/:page?': () => { return import(/* webpackChunkName: "devfest-codelabs-page" */ './modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js') },
-'/connect-ticket': () => { return import(/* webpackChunkName: "devfest-connect-ticket-page" */ './modules/devfest-module/pages/devfest-connect-ticket-page/devfest-connect-ticket-page.js') },
+'/connect-ticket': () => { return import(/* webpackChunkName: "devfest-connect-page" */ './modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js') },
'/scan': () => { return import(/* webpackChunkName: "devfest-scan-page" */ './modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js') },
'/scanned-list': () => { return import(/* webpackChunkName: "devfest-scanned-list-page" */ './modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js') },
'/are-you-a-sponsor': () => { return import(/* webpackChunkName: "devfest-not-sponsor-page" */ './modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.js') },
From 9c752b0eeef899fe34313f79371dca3295936792 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Wed, 11 Oct 2017 22:54:57 +0800
Subject: [PATCH 29/56] added stuff
Signed-off-by: Toni-Jan Keith Monserrat
---
.gitignore | 4 +-
firebase.json | 4 +-
firestore.indexes.json | 14 +
firestore.rules | 7 +
functions/index.js | 99 +-
functions/package.json | 5 +-
functions/yarn.lock | 1569 ++++++++++++++++-
src/.temp/temp.json | 4 +-
src/config/dev.json | 4 +-
.../devfest-connect-page.js | 37 +-
.../devfest-profile-page.html | 29 +-
.../devfest-profile-page.scss | 7 +-
src/modules/firebase/index.js | 23 +-
storage.rules | 7 +
14 files changed, 1690 insertions(+), 123 deletions(-)
create mode 100644 firestore.indexes.json
create mode 100644 firestore.rules
create mode 100644 storage.rules
diff --git a/.gitignore b/.gitignore
index 2c1edb7..b03aab6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,4 +28,6 @@ bower_components/
build
prod_temp
public
-.firebaserc
\ No newline at end of file
+.firebaserc
+eventbrite.json
+firebase-config.json
\ No newline at end of file
diff --git a/firebase.json b/firebase.json
index a753f75..5c71472 100644
--- a/firebase.json
+++ b/firebase.json
@@ -5,8 +5,8 @@
"hosting": {
"rewrites": [
{
- "source": "/api/**",
- "function": "app"
+ "source": "/connect",
+ "function": "connect"
},
{
"source": "/",
diff --git a/firestore.indexes.json b/firestore.indexes.json
new file mode 100644
index 0000000..2a6adac
--- /dev/null
+++ b/firestore.indexes.json
@@ -0,0 +1,14 @@
+{
+ // Example:
+ //
+ // "indexes": [
+ // {
+ // "collectionId": "widgets",
+ // "fields": [
+ // { "fieldPath": "foo", "mode": "ASCENDING" },
+ // { "fieldPath": "bar", "mode": "DESCENDING" }
+ // ]
+ // }
+ // ]
+ "indexes": []
+}
\ No newline at end of file
diff --git a/firestore.rules b/firestore.rules
new file mode 100644
index 0000000..31eda17
--- /dev/null
+++ b/firestore.rules
@@ -0,0 +1,7 @@
+service cloud.firestore {
+ match /databases/{database}/documents {
+ match /{document=**} {
+ allow read, write;
+ }
+ }
+}
diff --git a/functions/index.js b/functions/index.js
index 873c138..3b03329 100644
--- a/functions/index.js
+++ b/functions/index.js
@@ -1,6 +1,30 @@
const functions = require('firebase-functions');
const admin = require('firebase-admin');
-admin.initializeApp(functions.config().firebase);
+const fetch = require('node-fetch');
+const fs = require('fs');
+const path = require('path');
+
+if (fs.existsSync(path.resolve(__dirname, './firebase-config.json'))) {
+ console.log('hello')
+ var serviceAccount = require('./firebase-config.json');
+ admin.initializeApp({
+ credential: admin.credential.cert(serviceAccount),
+ databaseURL: 'https://devfestph.firebaseio.com'
+ });
+} else {
+ admin.initializeApp(functions.config().firebase);
+}
+
+let eventbrite = null;
+let event = null;
+
+if (fs.existsSync(path.resolve(__dirname, './eventbrite.json'))) {
+ eventbrite = JSON.parse(fs.readFileSync(path.resolve(__dirname, './eventbrite.json'), 'utf8')).key;
+ event = JSON.parse(fs.readFileSync(path.resolve(__dirname, './eventbrite.json'), 'utf8')).event;
+}
+
+eventbrite = eventbrite || process.env.EVENTBRITE;
+event = event || process.env.EVENT;
exports.createProfile = functions.auth.user().onCreate(event => {
const user = event.data;
@@ -25,6 +49,79 @@ exports.createProfile = functions.auth.user().onCreate(event => {
// ...
});
+exports.connect = functions.https.onRequest((req, res) => {
+ if (!req.body.token) {
+ return res
+ .status(404)
+ .json({
+ success: false,
+ message: 'No auth or uid found'
+ });
+ }
+
+ if (!req.body.id) {
+ return res
+ .status(404)
+ .json({
+ success: false,
+ message: 'No ticket Id found'
+ });
+ }
+
+ const updates = {};
+ const promises = [];
+
+ promises.push(
+ admin.auth().verifyIdToken(req.body.token)
+ );
+
+ promises.push(
+ fetch(`https://www.eventbriteapi.com/v3/events/${event}/attendees/${req.body.id.substring(9, 18)}/?token=${eventbrite}`)
+ .then(result => {
+ return result.json();
+ })
+ );
+
+ Promise.all(promises)
+ .then(results => {
+ const user = results[0];
+ const json = results[1];
+
+ if (json.status_code === 400) {
+ return Promise.reject(json);
+ }
+
+ if (!json.profile) {
+ return Promise.reject(json);
+ }
+
+ if (!user) {
+ return Promise.reject(new Error('No user'));
+ }
+
+ updates[`v1/user/source/${user.uid}/primary/ticketEmail`] = json.profile.email;
+ updates[`v1/user/source/${user.uid}/primary/ticketName`] = json.profile.first_name + ' ' + json.profile.last_name;
+ updates[`v1/user/source/${user.uid}/primary/ticketNumber`] = req.body.id;
+
+ return admin
+ .database()
+ .ref()
+ .update(updates);
+ })
+ .then(() => {
+ res
+ .status(200)
+ .json({
+ success: true
+ });
+ })
+ .catch(error => {
+ return res
+ .status(error.status_code || 500)
+ .json(error);
+ });
+});
+
// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
diff --git a/functions/package.json b/functions/package.json
index 9deb08a..7130698 100644
--- a/functions/package.json
+++ b/functions/package.json
@@ -2,8 +2,9 @@
"name": "functions",
"description": "Cloud Functions for Firebase",
"dependencies": {
- "firebase-admin": "~4.2.1",
- "firebase-functions": "^0.5.7"
+ "firebase-admin": "~5.4.0",
+ "firebase-functions": "^0.7.0",
+ "node-fetch": "^1.7.3"
},
"private": true
}
diff --git a/functions/yarn.lock b/functions/yarn.lock
index 50dfba6..1e6efdc 100644
--- a/functions/yarn.lock
+++ b/functions/yarn.lock
@@ -2,9 +2,126 @@
# yarn lockfile v1
+"@google-cloud/common-grpc@^0.4.0":
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/@google-cloud/common-grpc/-/common-grpc-0.4.1.tgz#09264607efb8934309affd63849986fbb80f9218"
+ dependencies:
+ "@google-cloud/common" "^0.13.6"
+ dot-prop "^2.4.0"
+ duplexify "^3.5.1"
+ extend "^3.0.0"
+ grpc "^1.6.0"
+ is "^3.2.0"
+ modelo "^4.2.0"
+ retry-request "^3.0.0"
+ through2 "^2.0.3"
+
+"@google-cloud/common@^0.13.0", "@google-cloud/common@^0.13.5", "@google-cloud/common@^0.13.6":
+ version "0.13.6"
+ resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-0.13.6.tgz#a9d8e137bc429a44aba9689fe6a0e4331784f853"
+ dependencies:
+ array-uniq "^1.0.3"
+ arrify "^1.0.1"
+ concat-stream "^1.6.0"
+ create-error-class "^3.0.2"
+ duplexify "^3.5.0"
+ ent "^2.2.0"
+ extend "^3.0.0"
+ google-auto-auth "^0.7.1"
+ is "^3.2.0"
+ log-driver "^1.2.5"
+ methmeth "^1.1.0"
+ modelo "^4.2.0"
+ request "^2.79.0"
+ retry-request "^3.0.0"
+ split-array-stream "^1.0.0"
+ stream-events "^1.0.1"
+ string-format-obj "^1.1.0"
+ through2 "^2.0.3"
+
+"@google-cloud/firestore@~0.8.2":
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/@google-cloud/firestore/-/firestore-0.8.2.tgz#e93a7068b723f0773c1af62f3494c0633ba2d346"
+ dependencies:
+ "@google-cloud/common" "^0.13.5"
+ "@google-cloud/common-grpc" "^0.4.0"
+ bun "^0.0.12"
+ extend "^3.0.1"
+ functional-red-black-tree "^1.0.1"
+ google-gax "^0.14.1"
+ grpc "^1.6.0"
+ is "^3.2.0"
+ through2 "^2.0.3"
+
+"@google-cloud/storage@^1.2.1":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-1.4.0.tgz#af5bcac2a986989c46f352b1ca1833be7b383ddb"
+ dependencies:
+ "@google-cloud/common" "^0.13.0"
+ arrify "^1.0.0"
+ async "^2.0.1"
+ concat-stream "^1.5.0"
+ create-error-class "^3.0.2"
+ duplexify "^3.5.0"
+ extend "^3.0.0"
+ gcs-resumable-upload "^0.8.2"
+ hash-stream-validation "^0.2.1"
+ is "^3.0.1"
+ mime-types "^2.0.8"
+ once "^1.3.1"
+ pumpify "^1.3.3"
+ safe-buffer "^5.1.1"
+ snakeize "^0.1.0"
+ stream-events "^1.0.1"
+ string-format-obj "^1.0.0"
+ through2 "^2.0.0"
+
+"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
+
+"@protobufjs/base64@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735"
+
+"@protobufjs/codegen@^2.0.4":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb"
+
+"@protobufjs/eventemitter@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70"
+
+"@protobufjs/fetch@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45"
+ dependencies:
+ "@protobufjs/aspromise" "^1.1.1"
+ "@protobufjs/inquire" "^1.1.0"
+
+"@protobufjs/float@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1"
+
+"@protobufjs/inquire@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089"
+
+"@protobufjs/path@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d"
+
+"@protobufjs/pool@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54"
+
+"@protobufjs/utf8@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
+
"@types/express-serve-static-core@*":
- version "4.0.51"
- resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.0.51.tgz#6b436955b8d01b9bc0908f59785c9d44268e91fc"
+ version "4.0.53"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.0.53.tgz#1723a35d1447f2c55e13c8721eab3448e42f4d82"
dependencies:
"@types/node" "*"
@@ -15,6 +132,12 @@
"@types/express-serve-static-core" "*"
"@types/serve-static" "*"
+"@types/google-cloud__storage@^1.1.1":
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/@types/google-cloud__storage/-/google-cloud__storage-1.1.5.tgz#e45e8bd8d86b72de2a35de2f0d4618b4491f7a19"
+ dependencies:
+ "@types/node" "*"
+
"@types/jsonwebtoken@^7.1.32", "@types/jsonwebtoken@^7.1.33":
version "7.2.3"
resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-7.2.3.tgz#483c8f39945e1e6d308dcc51fd4aeca5208d4dca"
@@ -22,17 +145,29 @@
"@types/node" "*"
"@types/lodash@^4.14.34":
- version "4.14.74"
- resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.74.tgz#ac3bd8db988e7f7038e5d22bd76a7ba13f876168"
+ version "4.14.77"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.77.tgz#0bc699413e84d6ed5d927ca30ea0f0a890b42d75"
+
+"@types/long@^3.0.31":
+ version "3.0.32"
+ resolved "https://registry.yarnpkg.com/@types/long/-/long-3.0.32.tgz#f4e5af31e9e9b196d8e5fca8a5e2e20aa3d60b69"
"@types/mime@*":
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.1.tgz#2cf42972d0931c1060c7d5fa6627fce6bd876f2f"
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.0.tgz#5a7306e367c539b9f6543499de8dd519fac37a8b"
"@types/node@*":
version "8.0.27"
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.27.tgz#13fbe7e92afeecebb843d7cea6c15b521e0000e1"
+"@types/node@^7.0.29":
+ version "7.0.43"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c"
+
+"@types/node@^8.0.32":
+ version "8.0.34"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.34.tgz#55f801fa2ddb2a40dd6dfc15ecfe1dde9c129fe9"
+
"@types/serve-static@*":
version "1.7.32"
resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.7.32.tgz#0f6732e4dab0813771dd8fc8fe14940f34728b4c"
@@ -46,36 +181,271 @@
dependencies:
"@types/node" "*"
-accepts@~1.3.3:
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+
+accepts@~1.3.4:
version "1.3.4"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f"
dependencies:
mime-types "~2.1.16"
negotiator "0.6.1"
+ajv@^4.9.1:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
+ dependencies:
+ co "^4.6.0"
+ json-stable-stringify "^1.0.1"
+
+ajv@^5.1.0:
+ version "5.2.3"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.3.tgz#c06f598778c44c6b161abafe3466b81ad1814ed2"
+ dependencies:
+ co "^4.6.0"
+ fast-deep-equal "^1.0.0"
+ json-schema-traverse "^0.3.0"
+ json-stable-stringify "^1.0.1"
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+
+aproba@^1.0.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+
+are-we-there-yet@~1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+arguejs@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/arguejs/-/arguejs-0.2.3.tgz#b6f939f5fe0e3cd1f3f93e2aa9262424bf312af7"
+
array-flatten@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-uniq@^1.0.1, array-uniq@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+
+arrify@^1.0.0, arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+
+ascli@~1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ascli/-/ascli-1.0.1.tgz#bcfa5974a62f18e81cabaeb49732ab4a88f906bc"
+ dependencies:
+ colour "~0.7.1"
+ optjs "~3.2.2"
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+
+async@^2.0.1, async@^2.1.2, async@^2.3.0, async@^2.4.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d"
+ dependencies:
+ lodash "^4.14.0"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+
+aws4@^1.2.1, aws4@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+
base64url@2.0.0, base64url@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb"
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+ dependencies:
+ tweetnacl "^0.14.3"
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ dependencies:
+ inherits "~2.0.0"
+
+body-parser@1.18.2:
+ version "1.18.2"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454"
+ dependencies:
+ bytes "3.0.0"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "~1.1.1"
+ http-errors "~1.6.2"
+ iconv-lite "0.4.19"
+ on-finished "~2.3.0"
+ qs "6.5.1"
+ raw-body "2.3.2"
+ type-is "~1.6.15"
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ dependencies:
+ hoek "2.x.x"
+
+boom@4.x.x:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
+ dependencies:
+ hoek "4.x.x"
+
+boom@5.x.x:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
+ dependencies:
+ hoek "4.x.x"
+
+brace-expansion@^1.1.7:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
buffer-equal-constant-time@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
+buffer-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe"
+
+bun@^0.0.12:
+ version "0.0.12"
+ resolved "https://registry.yarnpkg.com/bun/-/bun-0.0.12.tgz#d54fae69f895557f275423bc14b404030b20a5fc"
+ dependencies:
+ readable-stream "~1.0.32"
+
+bytebuffer@~5:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd"
+ dependencies:
+ long "~3"
+
+bytes@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+
+camelcase@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+
+capture-stack-trace@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+
"charenc@>= 0.0.1":
version "0.0.2"
resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
+cliui@^3.0.3:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wrap-ansi "^2.0.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+
+colour@~0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778"
+
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+ dependencies:
+ delayed-stream "~1.0.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+concat-stream@^1.5.0, concat-stream@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+configstore@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90"
+ dependencies:
+ dot-prop "^4.1.0"
+ graceful-fs "^4.1.2"
+ make-dir "^1.0.0"
+ unique-string "^1.0.0"
+ write-file-atomic "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+
content-disposition@0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
-content-type@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
+content-type@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
cookie-signature@1.0.6:
version "1.0.6"
@@ -85,16 +455,64 @@ cookie@0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+
+create-error-class@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
+ dependencies:
+ capture-stack-trace "^1.0.0"
+
"crypt@>= 0.0.1":
version "0.0.2"
resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
-debug@2.6.8:
- version "2.6.8"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ dependencies:
+ boom "2.x.x"
+
+cryptiles@3.x.x:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
+ dependencies:
+ boom "5.x.x"
+
+crypto-random-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ dependencies:
+ assert-plus "^1.0.0"
+
+debug@2.6.9, debug@^2.2.0:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
dependencies:
ms "2.0.0"
+decamelize@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+
+deep-extend@~0.4.0:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+
depd@1.1.1, depd@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
@@ -103,6 +521,33 @@ destroy@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+dot-prop@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-2.4.0.tgz#848e28f7f1d50740c6747ab3cb07670462b6f89c"
+ dependencies:
+ is-obj "^1.0.0"
+
+dot-prop@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
+ dependencies:
+ is-obj "^1.0.0"
+
+duplexify@^3.1.2, duplexify@^3.5.0, duplexify@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd"
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ dependencies:
+ jsbn "~0.1.0"
+
ecdsa-sig-formatter@1.0.9:
version "1.0.9"
resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz#4bc926274ec3b5abb5016e7e1d60921ac262b2a1"
@@ -118,46 +563,76 @@ encodeurl@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
+encoding@^0.1.11:
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
+ dependencies:
+ iconv-lite "~0.4.13"
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206"
+ dependencies:
+ once "^1.4.0"
+
+ent@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
+
escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
-etag@~1.8.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051"
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
express@^4.0.33:
- version "4.15.4"
- resolved "https://registry.yarnpkg.com/express/-/express-4.15.4.tgz#032e2253489cf8fce02666beca3d11ed7a2daed1"
+ version "4.16.2"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c"
dependencies:
- accepts "~1.3.3"
+ accepts "~1.3.4"
array-flatten "1.1.1"
+ body-parser "1.18.2"
content-disposition "0.5.2"
- content-type "~1.0.2"
+ content-type "~1.0.4"
cookie "0.3.1"
cookie-signature "1.0.6"
- debug "2.6.8"
+ debug "2.6.9"
depd "~1.1.1"
encodeurl "~1.0.1"
escape-html "~1.0.3"
- etag "~1.8.0"
- finalhandler "~1.0.4"
- fresh "0.5.0"
+ etag "~1.8.1"
+ finalhandler "1.1.0"
+ fresh "0.5.2"
merge-descriptors "1.0.1"
methods "~1.1.2"
on-finished "~2.3.0"
- parseurl "~1.3.1"
+ parseurl "~1.3.2"
path-to-regexp "0.1.7"
- proxy-addr "~1.1.5"
- qs "6.5.0"
+ proxy-addr "~2.0.2"
+ qs "6.5.1"
range-parser "~1.2.0"
- send "0.15.4"
- serve-static "1.12.4"
- setprototypeof "1.0.3"
+ safe-buffer "5.1.1"
+ send "0.16.1"
+ serve-static "1.13.1"
+ setprototypeof "1.1.0"
statuses "~1.3.1"
type-is "~1.6.15"
- utils-merge "1.0.0"
- vary "~1.1.1"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
+
+extend@^3.0.0, extend@^3.0.1, extend@~3.0.0, extend@~3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
+
+extsprintf@1.3.0, extsprintf@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+
+fast-deep-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
faye-websocket@0.9.3:
version "0.9.3"
@@ -165,29 +640,36 @@ faye-websocket@0.9.3:
dependencies:
websocket-driver ">=0.5.1"
-finalhandler@~1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.4.tgz#18574f2e7c4b98b8ae3b230c21f201f31bdb3fb7"
+finalhandler@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5"
dependencies:
- debug "2.6.8"
+ debug "2.6.9"
encodeurl "~1.0.1"
escape-html "~1.0.3"
on-finished "~2.3.0"
- parseurl "~1.3.1"
+ parseurl "~1.3.2"
statuses "~1.3.1"
unpipe "~1.0.0"
-firebase-admin@~4.2.1:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-4.2.1.tgz#91794bfc214ee21decc765d308411166a05c0b20"
+firebase-admin@^5.4.2:
+ version "5.4.2"
+ resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-5.4.2.tgz#002f58be2ad8901229e525ec55fa726d12f904eb"
dependencies:
+ "@google-cloud/firestore" "~0.8.2"
+ "@google-cloud/storage" "^1.2.1"
+ "@types/google-cloud__storage" "^1.1.1"
"@types/jsonwebtoken" "^7.1.33"
+ "@types/node" "^8.0.32"
faye-websocket "0.9.3"
+ google-auth-library "^0.10.0"
jsonwebtoken "7.1.9"
+ lodash "^4.6.1"
+ node-forge "0.7.1"
-firebase-functions@^0.5.7:
- version "0.5.9"
- resolved "https://registry.yarnpkg.com/firebase-functions/-/firebase-functions-0.5.9.tgz#74155c3fb42f3bb15a95793311664d14bf610a7a"
+firebase-functions@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/firebase-functions/-/firebase-functions-0.7.1.tgz#125b950f95769ce25a44b576b5cdaddc3246b4ca"
dependencies:
"@types/express" "^4.0.33"
"@types/jsonwebtoken" "^7.1.32"
@@ -198,19 +680,253 @@ firebase-functions@^0.5.7:
lodash "^4.6.1"
sha1 "^1.1.1"
-forwarded@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363"
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+
+form-data@~2.1.1:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+form-data@~2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+forwarded@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+fstream-ignore@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+gcp-metadata@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-0.3.1.tgz#313814456e7c3d0eeb8f8b084b33579e886f829a"
+ dependencies:
+ extend "^3.0.0"
+ retry-request "^3.0.0"
+
+gcs-resumable-upload@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-0.8.2.tgz#37df02470430395a789a637e72cabc80677ae964"
+ dependencies:
+ buffer-equal "^1.0.0"
+ configstore "^3.0.0"
+ google-auto-auth "^0.7.1"
+ pumpify "^1.3.3"
+ request "^2.81.0"
+ stream-events "^1.0.1"
+ through2 "^2.0.0"
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ dependencies:
+ assert-plus "^1.0.0"
-fresh@0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e"
+glob@^7.0.3, glob@^7.0.5:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globby@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+google-auth-library@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-0.10.0.tgz#6e15babee85fd1dd14d8d128a295b6838d52136e"
+ dependencies:
+ gtoken "^1.2.1"
+ jws "^3.1.4"
+ lodash.noop "^3.0.1"
+ request "^2.74.0"
+
+google-auto-auth@^0.5.2:
+ version "0.5.4"
+ resolved "https://registry.yarnpkg.com/google-auto-auth/-/google-auto-auth-0.5.4.tgz#1d86c7928d633e75a9c1ab034a527efcce4a40b1"
+ dependencies:
+ async "^2.1.2"
+ google-auth-library "^0.10.0"
+ object-assign "^3.0.0"
+ request "^2.79.0"
+
+google-auto-auth@^0.7.1:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/google-auto-auth/-/google-auto-auth-0.7.2.tgz#bf9352d5c4a0897bf31fd9c491028b765fbea71e"
+ dependencies:
+ async "^2.3.0"
+ gcp-metadata "^0.3.0"
+ google-auth-library "^0.10.0"
+ request "^2.79.0"
+
+google-gax@^0.14.1:
+ version "0.14.1"
+ resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-0.14.1.tgz#fe88fb9d5030d26277c63508a79af7b37179e139"
+ dependencies:
+ extend "^3.0.0"
+ globby "^6.1.0"
+ google-auto-auth "^0.5.2"
+ google-proto-files "^0.13.1"
+ grpc "^1.2"
+ is-stream-ended "^0.1.0"
+ lodash "^4.17.2"
+ process-nextick-args "^1.0.7"
+ protobufjs "^6.8.0"
+ readable-stream "^2.2.2"
+ through2 "^2.0.3"
+
+google-p12-pem@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-0.1.2.tgz#33c46ab021aa734fa0332b3960a9a3ffcb2f3177"
+ dependencies:
+ node-forge "^0.7.1"
+
+google-proto-files@^0.13.1:
+ version "0.13.1"
+ resolved "https://registry.yarnpkg.com/google-proto-files/-/google-proto-files-0.13.1.tgz#fcf123637d1811612d6a4cb030fd14516b5aec4b"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.2:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+
+grpc@^1.2, grpc@^1.6.0:
+ version "1.6.6"
+ resolved "https://registry.yarnpkg.com/grpc/-/grpc-1.6.6.tgz#2051784f6bd6134681fa2c4b5e75dc82c6c23ffa"
+ dependencies:
+ arguejs "^0.2.3"
+ lodash "^4.17.4"
+ nan "^2.7.0"
+ node-pre-gyp "^0.6.38"
+ protobufjs "^5.0.2"
+
+gtoken@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-1.2.2.tgz#172776a1a9d96ac09fc22a00f5be83cee6de8820"
+ dependencies:
+ google-p12-pem "^0.1.0"
+ jws "^3.0.0"
+ mime "^1.2.11"
+ request "^2.72.0"
+
+har-schema@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+
+har-validator@~4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
+ dependencies:
+ ajv "^4.9.1"
+ har-schema "^1.0.5"
+
+har-validator@~5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
+ dependencies:
+ ajv "^5.1.0"
+ har-schema "^2.0.0"
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+
+hash-stream-validation@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/hash-stream-validation/-/hash-stream-validation-0.2.1.tgz#ecc9b997b218be5bb31298628bb807869b73dcd1"
+ dependencies:
+ through2 "^2.0.0"
+
+hawk@3.1.3, hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+hawk@~6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
+ dependencies:
+ boom "4.x.x"
+ cryptiles "3.x.x"
+ hoek "4.x.x"
+ sntp "2.x.x"
hoek@2.x.x:
version "2.16.3"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
-http-errors@~1.6.2:
+hoek@4.x.x:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
+
+http-errors@1.6.2, http-errors@~1.6.2:
version "1.6.2"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
dependencies:
@@ -219,18 +935,95 @@ http-errors@~1.6.2:
setprototypeof "1.0.3"
statuses ">= 1.3.1 < 2"
-inherits@2.0.3:
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+iconv-lite@0.4.19, iconv-lite@~0.4.13:
+ version "0.4.19"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-ipaddr.js@1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.4.0.tgz#296aca878a821816e5b85d0a285a99bcff4582f0"
+ini@~1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+
+invert-kv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+
+ipaddr.js@1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+
+is-stream-ended@^0.1.0:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-stream-ended/-/is-stream-ended-0.1.3.tgz#a0473b267c756635486beedc7e3344e549d152ac"
+
+is-stream@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+
+is@^3.0.1, is@^3.2.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/is/-/is-3.2.1.tgz#d0ac2ad55eb7b0bec926a5266f6c662aaa83dca5"
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+
+isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
isemail@1.x.x:
version "1.2.0"
resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a"
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+
joi@^6.10.1:
version "6.10.1"
resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06"
@@ -240,6 +1033,32 @@ joi@^6.10.1:
moment "2.x.x"
topo "1.x.x"
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+
+json-schema-traverse@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+
+json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ dependencies:
+ jsonify "~0.0.0"
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+
jsonwebtoken@7.1.9:
version "7.1.9"
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.1.9.tgz#847804e5258bec5a9499a8dc4a5e7a3bae08d58a"
@@ -260,6 +1079,15 @@ jsonwebtoken@^7.1.9:
ms "^2.0.0"
xtend "^4.0.1"
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
jwa@^1.1.4:
version "1.1.5"
resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.5.tgz#a0552ce0220742cd52e153774a32905c30e756e5"
@@ -269,7 +1097,7 @@ jwa@^1.1.4:
ecdsa-sig-formatter "1.0.9"
safe-buffer "^5.0.1"
-jws@^3.1.3, jws@^3.1.4:
+jws@^3.0.0, jws@^3.1.3, jws@^3.1.4:
version "3.1.4"
resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2"
dependencies:
@@ -277,14 +1105,38 @@ jws@^3.1.3, jws@^3.1.4:
jwa "^1.1.4"
safe-buffer "^5.0.1"
+lcid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+ dependencies:
+ invert-kv "^1.0.0"
+
+lodash.noop@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-3.0.1.tgz#38188f4d650a3a474258439b96ec45b32617133c"
+
lodash.once@^4.0.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
-lodash@^4.6.1:
+lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.6.1:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+log-driver@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056"
+
+long@^3.2.0, long@~3:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b"
+
+make-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978"
+ dependencies:
+ pify "^2.3.0"
+
media-typer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
@@ -293,6 +1145,10 @@ merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+methmeth@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/methmeth/-/methmeth-1.1.0.tgz#e80a26618e52f5c4222861bb748510bd10e29089"
+
methods@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
@@ -301,15 +1157,39 @@ mime-db@~1.30.0:
version "1.30.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
-mime-types@~2.1.15, mime-types@~2.1.16:
+mime-types@^2.0.8, mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7:
version "2.1.17"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
dependencies:
mime-db "~1.30.0"
-mime@1.3.4:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
+mime@1.4.1, mime@^1.2.11:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
+
+minimatch@^3.0.0, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
+minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ dependencies:
+ minimist "0.0.8"
+
+modelo@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/modelo/-/modelo-4.2.0.tgz#3b4b420023a66ca7e32bdba16e710937e14d1b0b"
moment@2.x.x:
version "2.18.1"
@@ -323,74 +1203,365 @@ ms@^0.7.1:
version "0.7.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff"
+nan@^2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46"
+
negotiator@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
+node-fetch@^1.7.3:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
+ dependencies:
+ encoding "^0.1.11"
+ is-stream "^1.0.1"
+
+node-forge@0.7.1, node-forge@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300"
+
+node-pre-gyp@^0.6.38:
+ version "0.6.38"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.38.tgz#e92a20f83416415bb4086f6d1fb78b3da73d113d"
+ dependencies:
+ hawk "3.1.3"
+ mkdirp "^0.5.1"
+ nopt "^4.0.1"
+ npmlog "^4.0.2"
+ rc "^1.1.7"
+ request "2.81.0"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^2.2.1"
+ tar-pack "^3.4.0"
+
+nopt@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+
+oauth-sign@~0.8.1, oauth-sign@~0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+
+object-assign@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
+
+object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+
on-finished@~2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
dependencies:
ee-first "1.1.1"
-parseurl@~1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
+once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ dependencies:
+ wrappy "1"
+
+optjs@~3.2.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/optjs/-/optjs-3.2.2.tgz#69a6ce89c442a44403141ad2f9b370bd5bb6f4ee"
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+
+os-locale@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
+ dependencies:
+ lcid "^1.0.0"
+
+os-tmpdir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+
+osenv@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+parseurl@~1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
path-to-regexp@0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
-proxy-addr@~1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.5.tgz#71c0ee3b102de3f202f3b64f608d173fcba1a918"
+performance-now@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+
+pify@^2.0.0, pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+
+process-nextick-args@^1.0.7, process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+
+protobufjs@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-5.0.2.tgz#59748d7dcf03d2db22c13da9feb024e16ab80c91"
+ dependencies:
+ ascli "~1"
+ bytebuffer "~5"
+ glob "^7.0.5"
+ yargs "^3.10.0"
+
+protobufjs@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.0.tgz#04e85493c4e1653878ec283f18bc78b1e7c5d5a2"
+ dependencies:
+ "@protobufjs/aspromise" "^1.1.2"
+ "@protobufjs/base64" "^1.1.2"
+ "@protobufjs/codegen" "^2.0.4"
+ "@protobufjs/eventemitter" "^1.1.0"
+ "@protobufjs/fetch" "^1.1.0"
+ "@protobufjs/float" "^1.0.2"
+ "@protobufjs/inquire" "^1.1.0"
+ "@protobufjs/path" "^1.1.2"
+ "@protobufjs/pool" "^1.1.0"
+ "@protobufjs/utf8" "^1.1.0"
+ "@types/long" "^3.0.31"
+ "@types/node" "^7.0.29"
+ long "^3.2.0"
+
+proxy-addr@~2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec"
dependencies:
- forwarded "~0.1.0"
- ipaddr.js "1.4.0"
+ forwarded "~0.1.2"
+ ipaddr.js "1.5.2"
+
+pump@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.2.tgz#3b3ee6512f94f0e575538c17995f9f16990a5d51"
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b"
+ dependencies:
+ duplexify "^3.1.2"
+ inherits "^2.0.1"
+ pump "^1.0.0"
+
+punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
-qs@6.5.0:
- version "6.5.0"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.0.tgz#8d04954d364def3efc55b5a0793e1e2c8b1e6e49"
+qs@6.5.1, qs@~6.5.1:
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
+
+qs@~6.4.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
range-parser@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
-safe-buffer@^5.0.1:
+raw-body@2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89"
+ dependencies:
+ bytes "3.0.0"
+ http-errors "1.6.2"
+ iconv-lite "0.4.19"
+ unpipe "1.0.0"
+
+rc@^1.1.7:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95"
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.0.3"
+ util-deprecate "~1.0.1"
+
+readable-stream@~1.0.32:
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+request@2.81.0:
+ version "2.81.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.12.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~4.2.1"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ performance-now "^0.2.0"
+ qs "~6.4.0"
+ safe-buffer "^5.0.1"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "^0.6.0"
+ uuid "^3.0.0"
+
+request@^2.72.0, request@^2.74.0, request@^2.79.0, request@^2.81.0:
+ version "2.83.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356"
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.6.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.1"
+ forever-agent "~0.6.1"
+ form-data "~2.3.1"
+ har-validator "~5.0.3"
+ hawk "~6.0.2"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.17"
+ oauth-sign "~0.8.2"
+ performance-now "^2.1.0"
+ qs "~6.5.1"
+ safe-buffer "^5.1.1"
+ stringstream "~0.0.5"
+ tough-cookie "~2.3.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.1.0"
+
+retry-request@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-3.0.0.tgz#8bad2b1dcf04938bb211e2ced862e591b82f1917"
+ dependencies:
+ request "^2.81.0"
+ through2 "^2.0.0"
+
+rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
+ dependencies:
+ glob "^7.0.5"
+
+safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
-send@0.15.4:
- version "0.15.4"
- resolved "https://registry.yarnpkg.com/send/-/send-0.15.4.tgz#985faa3e284b0273c793364a35c6737bd93905b9"
+semver@^5.3.0:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
+
+send@0.16.1:
+ version "0.16.1"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3"
dependencies:
- debug "2.6.8"
+ debug "2.6.9"
depd "~1.1.1"
destroy "~1.0.4"
encodeurl "~1.0.1"
escape-html "~1.0.3"
- etag "~1.8.0"
- fresh "0.5.0"
+ etag "~1.8.1"
+ fresh "0.5.2"
http-errors "~1.6.2"
- mime "1.3.4"
+ mime "1.4.1"
ms "2.0.0"
on-finished "~2.3.0"
range-parser "~1.2.0"
statuses "~1.3.1"
-serve-static@1.12.4:
- version "1.12.4"
- resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.4.tgz#9b6aa98eeb7253c4eedc4c1f6fdbca609901a961"
+serve-static@1.13.1:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719"
dependencies:
encodeurl "~1.0.1"
escape-html "~1.0.3"
- parseurl "~1.3.1"
- send "0.15.4"
+ parseurl "~1.3.2"
+ send "0.16.1"
+
+set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
setprototypeof@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
+setprototypeof@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+
sha1@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848"
@@ -398,16 +1569,151 @@ sha1@^1.1.1:
charenc ">= 0.0.1"
crypt ">= 0.0.1"
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+
+snakeize@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/snakeize/-/snakeize-0.1.0.tgz#10c088d8b58eb076b3229bb5a04e232ce126422d"
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ dependencies:
+ hoek "2.x.x"
+
+sntp@2.x.x:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.0.2.tgz#5064110f0af85f7cfdb7d6b67a40028ce52b4b2b"
+ dependencies:
+ hoek "4.x.x"
+
+split-array-stream@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/split-array-stream/-/split-array-stream-1.0.3.tgz#d2b75a8e5e0d824d52fdec8b8225839dc2e35dfa"
+ dependencies:
+ async "^2.4.0"
+ is-stream-ended "^0.1.0"
+
+sshpk@^1.7.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
"statuses@>= 1.3.1 < 2", statuses@~1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
+stream-events@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.2.tgz#abf39f66c0890a4eb795bc8d5e859b2615b590b2"
+ dependencies:
+ stubs "^3.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+
+string-format-obj@^1.0.0, string-format-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/string-format-obj/-/string-format-obj-1.1.0.tgz#7635610b1ef397013e8478be98a170e04983d068"
+
+string-width@^1.0.1, string-width@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+
+string_decoder@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
+ dependencies:
+ safe-buffer "~5.1.0"
+
+stringstream@~0.0.4, stringstream@~0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+
+stubs@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b"
+
+tar-pack@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984"
+ dependencies:
+ debug "^2.2.0"
+ fstream "^1.0.10"
+ fstream-ignore "^1.0.5"
+ once "^1.3.3"
+ readable-stream "^2.1.4"
+ rimraf "^2.5.1"
+ tar "^2.2.1"
+ uid-number "^0.0.6"
+
+tar@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+through2@^2.0.0, through2@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
+ dependencies:
+ readable-stream "^2.1.5"
+ xtend "~4.0.1"
+
topo@1.x.x:
version "1.1.0"
resolved "https://registry.yarnpkg.com/topo/-/topo-1.1.0.tgz#e9d751615d1bb87dc865db182fa1ca0a5ef536d5"
dependencies:
hoek "2.x.x"
+tough-cookie@~2.3.0, tough-cookie@~2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
+ dependencies:
+ punycode "^1.4.1"
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+
type-is@~1.6.15:
version "1.6.15"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
@@ -415,17 +1721,47 @@ type-is@~1.6.15:
media-typer "0.3.0"
mime-types "~2.1.15"
-unpipe@~1.0.0:
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+
+uid-number@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+
+unique-string@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
+ dependencies:
+ crypto-random-string "^1.0.0"
-utils-merge@1.0.0:
+unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
-vary@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37"
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+
+uuid@^3.0.0, uuid@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
+
+vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
websocket-driver@>=0.5.1:
version "0.6.5"
@@ -437,6 +1773,55 @@ websocket-extensions@>=0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7"
-xtend@^4.0.1:
+wide-align@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
+ dependencies:
+ string-width "^1.0.2"
+
+window-size@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+
+write-file-atomic@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab"
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+xdg-basedir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
+
+xtend@^4.0.1, xtend@~4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+
+y18n@^3.2.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+
+yargs@^3.10.0:
+ version "3.32.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995"
+ dependencies:
+ camelcase "^2.0.1"
+ cliui "^3.0.3"
+ decamelize "^1.1.1"
+ os-locale "^1.4.0"
+ string-width "^1.0.1"
+ window-size "^0.1.4"
+ y18n "^3.2.0"
diff --git a/src/.temp/temp.json b/src/.temp/temp.json
index 280305e..44beebc 100644
--- a/src/.temp/temp.json
+++ b/src/.temp/temp.json
@@ -123,8 +123,8 @@
"hosting": {
"rewrites": [
{
- "source": "/api/**",
- "function": "app"
+ "source": "/connect",
+ "function": "connect"
}
],
"headers": [
diff --git a/src/config/dev.json b/src/config/dev.json
index 280305e..44beebc 100644
--- a/src/config/dev.json
+++ b/src/config/dev.json
@@ -123,8 +123,8 @@
"hosting": {
"rewrites": [
{
- "source": "/api/**",
- "function": "app"
+ "source": "/connect",
+ "function": "connect"
}
],
"headers": [
diff --git a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
index bb4380c..c3e6a62 100644
--- a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
+++ b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
@@ -9,14 +9,15 @@ import '../../icons/devfest-icons.html';
import '../../components/devfest-footer/devfest-footer.js';
import '../../components/devfest-button/devfest-button.js';
import './devfest-connect-page.html';
+import User from '../../models/user-model';
import QrCode from 'qrcode-reader';
import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
import marked from 'marked';
window.marked = window.marked || marked;
-const {Polymer} = window;
+const {Polymer, fetch, Raven, Headers} = window;
-class DevfestConnectPage extends contentLoaderMixin(Polymer.Element) {
+class DevfestConnectPage extends User(contentLoaderMixin(Polymer.Element)) {
static get is () { return 'devfest-connect-page'; }
static get properties () {
@@ -48,6 +49,37 @@ class DevfestConnectPage extends contentLoaderMixin(Polymer.Element) {
clearInterval(this._interval);
this._interval = null;
}
+ // console.log(result.result);
+ document.querySelector('app-shell').showMessage('Scanning...', function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
+ const headers = new Headers();
+ headers.append('Content-Type', 'application/json');
+ var user = this.user;
+ if (user) {
+ user.getIdToken().then(token => {
+ fetch('/connect', {
+ method: 'POST',
+ headers,
+ body: JSON.stringify({
+ id: result.result,
+ uid: user.uid,
+ token
+ })
+ }).then(res => {
+ return res.json();
+ }).then(json => {
+ if (json.success) {
+ document.querySelector('app-shell').showMessage('Scan complete', function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
+ window.history.pushState({}, '', '/profile');
+ window.dispatchEvent(new CustomEvent('location-changed'));
+ } else {
+ if (Raven) {
+ Raven.captureException(json);
+ }
+ document.querySelector('app-shell').showMessage('Error in scanning: ' + json.message, function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
+ }
+ });
+ });
+ }
}
};
@@ -94,7 +126,6 @@ class DevfestConnectPage extends contentLoaderMixin(Polymer.Element) {
this._interval = setInterval(() => {
this.scanned();
}, 100);
- // setTimeout(function() {console.log(video.videoHeight)}, 1000)
});
}
this.resize();
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
index 1ba355f..3282c43 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
@@ -21,7 +21,7 @@ Link Accounts
-
+
@@ -38,7 +38,7 @@
Unlink Accounts
-
+
@@ -50,12 +50,25 @@
Unlink Accounts
-
Link Ticket
-
-
- Link your Eventbrite Ticket
-
-
+
+
+ Link Ticket
+
+
+ Link your Eventbrite Ticket
+
+
+
+
+
+ Ticket Connected
+
+
+ Ticket#: [[profile.ticketNumber]]
+ Name: [[profile.ticketName]]
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss
index 67e58ca..613becd 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss
@@ -35,7 +35,8 @@
text-align: left;
}
-.row {
+.brow {
+ @apply --layout-horizontal;
@apply --layout-center;
}
@@ -69,3 +70,7 @@
--iron-icon-width: 24px !important;
}
+.text-area {
+ text-align: left;
+}
+
diff --git a/src/modules/firebase/index.js b/src/modules/firebase/index.js
index 73b7faf..4d21804 100644
--- a/src/modules/firebase/index.js
+++ b/src/modules/firebase/index.js
@@ -8,11 +8,13 @@ import(/* webpackChunkName: 'firebase' */ 'firebase').then(sdk => {
const updateAttrSnapshot = (store, attr, type, snapshot) => {
if (snapshot.exists()) {
- store.dispatch({
- type, // USER_ACTION.PROFILE,
- value: snapshot.val(),
- attr
- });
+ setTimeout(() => {
+ store.dispatch({
+ type, // USER_ACTION.PROFILE,
+ value: snapshot.val(),
+ attr
+ });
+ }, 100);
}
};
@@ -25,10 +27,13 @@ const updateModelTypeSnapshot = (store, modelType, type, snapshot) => {
value: child.val()
});
});
- store.dispatch({
- type, // USER_ACTION.PROFILE,
- attrs
- });
+ setTimeout(() => {
+ store.dispatch({
+ type, // USER_ACTION.PROFILE,
+ attrs
+ });
+ }, 100);
+
}
};
diff --git a/storage.rules b/storage.rules
new file mode 100644
index 0000000..d494542
--- /dev/null
+++ b/storage.rules
@@ -0,0 +1,7 @@
+service firebase.storage {
+ match /b/{bucket}/o {
+ match /{allPaths=**} {
+ allow read, write: if request.auth!=null;
+ }
+ }
+}
From a4410e84ad12e9c6462f285a4947fbf48297ae55 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Wed, 11 Oct 2017 23:15:32 +0800
Subject: [PATCH 30/56] added ticket connect
Signed-off-by: Toni-Jan Keith Monserrat
---
.../devfest-connect-page.js | 97 +++++++++++--------
.../devfest-connect-page.scss | 4 +
.../devfest-profile-page.html | 3 +
.../devfest-profile-page.scss | 5 +
4 files changed, 67 insertions(+), 42 deletions(-)
diff --git a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
index c3e6a62..d2619ac 100644
--- a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
+++ b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
@@ -45,10 +45,21 @@ class DevfestConnectPage extends User(contentLoaderMixin(Polymer.Element)) {
}
if (result && result.result) {
+ this.shadowRoot.querySelector('#video').classList.add('scanned');
if (this._interval) {
clearInterval(this._interval);
this._interval = null;
}
+
+ if (this._stream) {
+ var tracks = this._stream.getTracks();
+ for (var i in tracks) {
+ if (tracks[i].stop) {
+ console.log(tracks[i])
+ tracks[i].stop();
+ }
+ }
+ }
// console.log(result.result);
document.querySelector('app-shell').showMessage('Scanning...', function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
const headers = new Headers();
@@ -89,47 +100,6 @@ class DevfestConnectPage extends User(contentLoaderMixin(Polymer.Element)) {
connectedCallback () {
super.connectedCallback();
-
- Polymer.RenderStatus.afterNextRender(this, () => {
- var video = this.shadowRoot.querySelector('#video');
- // Get access to the camera!
- if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
- console.log(navigator.mediaDevices.getSupportedConstraints());
- // Not adding `{ audio: true }` since we only want video now
- navigator.mediaDevices.getUserMedia({ video: { facingMode: { exact: 'environment' } } }).then((stream) => {
- video.src = window.URL.createObjectURL(stream);
- video.play();
- if (this._interval) {
- clearInterval(this._interval);
- this._interval = null;
- }
-
- this._interval = setInterval(() => {
- this.scanned();
- }, 100);
- // setTimeout(function() {console.log(video.videoHeight)}, 1000)
- })
- .catch((error) => {
- console.error(error);
- return navigator.mediaDevices.getUserMedia({ video: true });
- // Raven.captureException(error)
- // this.$.toast.show(error.message, 5000);
- })
- .then((stream) => {
- video.src = window.URL.createObjectURL(stream);
- video.play();
-
- if (this._interval) {
- clearInterval(this._interval);
- this._interval = null;
- }
- this._interval = setInterval(() => {
- this.scanned();
- }, 100);
- });
- }
- this.resize();
- });
this.reload();
}
@@ -191,7 +161,50 @@ class DevfestConnectPage extends User(contentLoaderMixin(Polymer.Element)) {
// this._qr.decode(`http://localhost:5000/images/test.png`);
}
- reload () {}
+ reload () {
+ Polymer.RenderStatus.afterNextRender(this, () => {
+ var video = this.shadowRoot.querySelector('#video');
+ // Get access to the camera!
+ if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
+ console.log(navigator.mediaDevices.getSupportedConstraints());
+ // Not adding `{ audio: true }` since we only want video now
+ navigator.mediaDevices.getUserMedia({ video: { facingMode: { exact: 'environment' } } }).then((stream) => {
+ this._stream = stream;
+ video.src = window.URL.createObjectURL(stream);
+ video.play();
+ if (this._interval) {
+ clearInterval(this._interval);
+ this._interval = null;
+ }
+
+ this._interval = setInterval(() => {
+ this.scanned();
+ }, 100);
+ // setTimeout(function() {console.log(video.videoHeight)}, 1000)
+ })
+ .catch((error) => {
+ console.error(error);
+ return navigator.mediaDevices.getUserMedia({ video: true });
+ // Raven.captureException(error)
+ // this.$.toast.show(error.message, 5000);
+ })
+ .then((stream) => {
+ this._stream = stream;
+ video.src = window.URL.createObjectURL(stream);
+ video.play();
+
+ if (this._interval) {
+ clearInterval(this._interval);
+ this._interval = null;
+ }
+ this._interval = setInterval(() => {
+ this.scanned();
+ }, 100);
+ });
+ }
+ this.resize();
+ });
+ }
}
window.customElements.define(DevfestConnectPage.is, DevfestConnectPage);
diff --git a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.scss b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.scss
index b58cf0f..7812a8f 100644
--- a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.scss
+++ b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.scss
@@ -37,4 +37,8 @@
left: 20%;
border: 1px red solid;
z-index: 100;
+}
+
+.scanned {
+ border: 2px solid red;
}
\ No newline at end of file
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
index 3282c43..b19543f 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
@@ -53,6 +53,9 @@ Unlink Accounts
Link Ticket
+
+ You need to connect your ticket and agree to our terms and conditions so sponsors can scan your ID.
+
Link your Eventbrite Ticket
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss
index 613becd..aeaf544 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss
@@ -33,6 +33,10 @@
@apply --layout-flex;
margin-left: 40px;
text-align: left;
+
+ @media screen and (max-width: 550px) {
+ margin-left: 0px;
+ }
}
.brow {
@@ -74,3 +78,4 @@
text-align: left;
}
+
From 91dfeae668270c9ba0d2de3e54c858b7a6c79eb2 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 00:07:34 +0800
Subject: [PATCH 31/56] pushing it up
Signed-off-by: Toni-Jan Keith Monserrat
---
functions/index.js | 45 ++++++++++++++++++-
.../devfest-connect-page.js | 2 +
.../devfest-profile-page.html | 15 ++++++-
3 files changed, 58 insertions(+), 4 deletions(-)
diff --git a/functions/index.js b/functions/index.js
index 3b03329..7eba139 100644
--- a/functions/index.js
+++ b/functions/index.js
@@ -5,7 +5,6 @@ const fs = require('fs');
const path = require('path');
if (fs.existsSync(path.resolve(__dirname, './firebase-config.json'))) {
- console.log('hello')
var serviceAccount = require('./firebase-config.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
@@ -82,10 +81,15 @@ exports.connect = functions.https.onRequest((req, res) => {
})
);
+ promises.push(
+ admin.database().ref(`v1/eventbrite/source/${req.body.id}`).once('value')
+ );
+
Promise.all(promises)
.then(results => {
const user = results[0];
const json = results[1];
+ const snapshot = results[2];
if (json.status_code === 400) {
return Promise.reject(json);
@@ -96,12 +100,48 @@ exports.connect = functions.https.onRequest((req, res) => {
}
if (!user) {
- return Promise.reject(new Error('No user'));
+ var error2 = {
+ status_code: 404,
+ message: 'No User found'
+ };
+ return Promise.reject(error2);
+ }
+
+ if (snapshot.exists()) {
+ var eventbriteUser = snapshot.val();
+ var error = {
+ status_code: 403,
+ message: `${eventbriteUser.primary.displayName} has your ticket. Please approach the person to rescan their ticket or you might have scanning another person's ticket.`
+ };
+ return Promise.reject(error);
+ }
+
+ return Promise.all([
+ Promise.resolve(user),
+ Promise.resolve(json),
+ admin
+ .database()
+ .ref(`v1/user/source/${user.uid}/primary/ticketNumber`)
+ .once('value')
+ ]);
+ })
+ .then(results => {
+ var user = results[0];
+ var json = results[1];
+ var snapshot = results[2];
+
+ if (snapshot.exists()) {
+ var oldTicketNumber = snapshot.val();
}
updates[`v1/user/source/${user.uid}/primary/ticketEmail`] = json.profile.email;
updates[`v1/user/source/${user.uid}/primary/ticketName`] = json.profile.first_name + ' ' + json.profile.last_name;
updates[`v1/user/source/${user.uid}/primary/ticketNumber`] = req.body.id;
+ updates[`v1/user/source/${user.uid}/meta/accepted`] = true;
+ updates[`v1/eventbrite/source/${req.body.id}/primary/displayName`] = user.displayName || user.name || user.email;
+ updates[`v1/eventbrite/source/${req.body.id}/primary/email`] = user.email;
+ updates[`v1/eventbrite/source/${req.body.id}/primary/uid`] = user.uid;
+ updates[`v1/eventbrite/source/${oldTicketNumber}`] = null;
return admin
.database()
@@ -116,6 +156,7 @@ exports.connect = functions.https.onRequest((req, res) => {
});
})
.catch(error => {
+ console.log(error)
return res
.status(error.status_code || 500)
.json(error);
diff --git a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
index d2619ac..6ed810a 100644
--- a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
+++ b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
@@ -86,6 +86,8 @@ class DevfestConnectPage extends User(contentLoaderMixin(Polymer.Element)) {
if (Raven) {
Raven.captureException(json);
}
+ window.history.pushState({}, '', '/profile');
+ window.dispatchEvent(new CustomEvent('location-changed'));
document.querySelector('app-shell').showMessage('Error in scanning: ' + json.message, function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
}
});
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
index b19543f..084a693 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
@@ -50,11 +50,13 @@ Unlink Accounts
-
Link Ticket
- You need to connect your ticket and agree to our terms and conditions so sponsors can scan your ID.
+ Connect your ticket to qualify to the codelabs contest and to join to the event raffle.
+
+
+ By connecting your ticket, you agree to the terms and conditions.
@@ -70,6 +72,15 @@ Ticket Connected
Ticket#: [[profile.ticketNumber]]
Name: [[profile.ticketName]]
+
+
+ If your name and email is different from the one above, you may have scanned a wrong ticket. You can rescan it here.
+
+
+
+ Rescan you eventbrite ticket.
+
+
From 9b5fa488ded554aa52bfd0bce67a83f307bb6a05 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 11:56:23 +0800
Subject: [PATCH 32/56] added parts
Signed-off-by: Toni-Jan Keith Monserrat
---
bower.json | 3 +-
database.rules.json | 4 +-
firebase.json | 8 +
functions/index.js | 228 +++++++++++++++++-
src/.temp/temp.json | 8 +
src/config/dev.json | 8 +
.../devfest-drawer/devfest-drawer.html | 2 +-
.../devfest-header/devfest-header.html | 2 +-
.../devfest-module/models/user-model.js | 5 +
.../devfest-not-sponsor-page.html | 34 ++-
.../devfest-not-sponsor-page.js | 54 ++++-
.../devfest-not-sponsor-page.scss | 78 ++++++
.../devfest-profile-page.html | 3 +-
.../devfest-scan-page/devfest-scan-page.html | 15 +-
.../devfest-scan-page/devfest-scan-page.js | 193 ++++++++++++++-
.../devfest-scan-page/devfest-scan-page.scss | 44 ++++
.../devfest-scanned-list-page.js | 5 +-
.../devfest-sponsors-page.html | 12 +
.../devfest-sponsors-page.js | 4 +-
.../devfest-sponsors-page.scss | 5 +
20 files changed, 687 insertions(+), 28 deletions(-)
diff --git a/bower.json b/bower.json
index 4d43bc4..a736c54 100644
--- a/bower.json
+++ b/bower.json
@@ -32,7 +32,8 @@
"google-map": "GoogleWebComponents/google-map#^2.0.2",
"iron-media-query": "PolymerElements/iron-media-query#^2.0.0",
"paper-button": "PolymerElements/paper-button#^2.0.0",
- "paper-spinner": "PolymerElements/paper-spinner#^2.0.0"
+ "paper-spinner": "PolymerElements/paper-spinner#^2.0.0",
+ "paper-input": "PolymerElements/paper-input#^2.0.2"
},
"devDependencies": {
"web-component-tester": "^6.0.0"
diff --git a/database.rules.json b/database.rules.json
index 06d8a20..64e8be5 100644
--- a/database.rules.json
+++ b/database.rules.json
@@ -20,7 +20,9 @@
"sponsors": {
"source": {
"$sponsor": {
- ".read": true
+ "primary": {
+ ".read": true
+ }
}
}
},
diff --git a/firebase.json b/firebase.json
index 5c71472..2b7a97d 100644
--- a/firebase.json
+++ b/firebase.json
@@ -8,6 +8,14 @@
"source": "/connect",
"function": "connect"
},
+ {
+ "source": "/validate-sponsor",
+ "function": "validate"
+ },
+ {
+ "source": "/scan-id",
+ "function": "scanId"
+ },
{
"source": "/",
"destination": "/index.html"
diff --git a/functions/index.js b/functions/index.js
index 7eba139..9b82b89 100644
--- a/functions/index.js
+++ b/functions/index.js
@@ -48,6 +48,232 @@ exports.createProfile = functions.auth.user().onCreate(event => {
// ...
});
+exports.validate = functions.https.onRequest((req, res) => {
+ if (!req.body.token) {
+ return res
+ .status(404)
+ .json({
+ success: false,
+ message: 'No auth or uid found'
+ });
+ }
+
+ if (!req.body.validate) {
+ return res
+ .status(404)
+ .json({
+ success: false,
+ message: 'No verification code found'
+ });
+ }
+
+ if (!req.body.company) {
+ return res
+ .status(404)
+ .json({
+ success: false,
+ message: 'No company ID found'
+ });
+ }
+
+ const updates = {};
+ const promises = [];
+
+ promises.push(
+ admin.auth().verifyIdToken(req.body.token)
+ );
+
+ promises.push(
+ admin.database().ref(`v1/sponsors/source/${req.body.company}/meta/code`)
+ .once('value')
+ );
+
+ Promise.all(promises)
+ .then(results => {
+ const user = results[0];
+ const sponsor = results[1];
+
+ if (!sponsor.exists()) {
+ var error3 = {
+ status_code: 404,
+ message: 'No Sponsor found for the given company ID'
+ };
+ return Promise.reject(error3);
+ }
+
+ if (!user) {
+ var error2 = {
+ status_code: 404,
+ message: 'No User found'
+ };
+ return Promise.reject(error2);
+ }
+
+ if (sponsor.val() !== req.body.validate) {
+ var error4 = {
+ status_code: 404,
+ message: 'Invalidate code given'
+ };
+ return Promise.reject(error4);
+ }
+
+ updates[`v1/sponsors/source/${req.body.company}/cross/sponsorUsers/${user.uid}/value`] = true;
+ updates[`v1/user/source/${user.uid}/cross/sponsorId`] = req.body.company;
+
+ return admin.database().ref().update(updates);
+ })
+ .then(() => {
+ res
+ .status(200)
+ .json({
+ success: true
+ });
+ })
+ .catch(error => {
+ console.log(error);
+ return res
+ .status(error.status_code || 500)
+ .json(error);
+ });
+});
+
+exports.scanId = functions.https.onRequest((req, res) => {
+ if (!req.body.token) {
+ return res
+ .status(404)
+ .json({
+ success: false,
+ message: 'No auth or uid found'
+ });
+ }
+
+ if (!req.body.id) {
+ return res
+ .status(404)
+ .json({
+ success: false,
+ message: 'No ticket Id found'
+ });
+ }
+
+ if (!req.body.company) {
+ return res
+ .status(404)
+ .json({
+ success: false,
+ message: 'No company Id found'
+ });
+ }
+
+ const updates = {};
+ const promises = [];
+
+ promises.push(
+ admin.auth().verifyIdToken(req.body.token)
+ );
+
+ promises.push(
+ admin.database().ref(`v1/eventbrite/source/${req.body.id}`).once('value')
+ );
+
+ promises.push(
+ admin.database().ref(`v1/sponsors/source/${req.body.company}/cross/sponsorUsers/`)
+ .once('value')
+ );
+
+ Promise.all(promises)
+ .then(results => {
+ var user = results[0];
+ var eventbrite = results[1];
+ var sponsor = results[2];
+
+ if (!sponsor.exists()) {
+ var error3 = {
+ status_code: 404,
+ message: 'No Sponsor found for the given company ID'
+ };
+ return Promise.reject(error3);
+ }
+
+ if (!user) {
+ var error2 = {
+ status_code: 404,
+ message: 'No User found'
+ };
+ return Promise.reject(error2);
+ }
+
+ if (!sponsor.val()[user.uid].value) {
+ var error5 = {
+ status_code: 403,
+ message: 'Your user is not connected to this sponsor'
+ };
+ return Promise.reject(error5);
+ }
+
+ if (!eventbrite.exists()) {
+ var error = {
+ status_code: 403,
+ message: `This ticket is not connected to an account or the attendee hasn't accepted the terms and conditions :(`
+ };
+ return Promise.reject(error);
+ }
+
+ return Promise.all([
+ Promise.resolve(eventbrite),
+ Promise.resolve(sponsor),
+ Promise.resolve(user),
+ admin.database().ref(`v1/user/source/${eventbrite.val().primary.uid}`).once('value')
+ ]);
+ })
+ .then(results => {
+ // var eventbrite = results[0];
+ // var sponsor = results[1];
+ var user = results[2];
+ var attendee = results[3];
+
+ if (attendee.val().primary.ticketNumber.substring(9, 18) !== req.body.id.substring(9, 18)) {
+ var error = {
+ status_code: 403,
+ message: `This ticket is not connected to the scanned id :(`
+ };
+ return Promise.reject(error);
+ }
+
+ if (!attendee.val().meta.accepted) {
+ var error2 = {
+ status_code: 403,
+ message: `Attendee hasn't accepted the Terms and Conditions. :( `
+ };
+ return Promise.reject(error2);
+ }
+
+ updates[`v1/sponsors/source/${req.body.company}/cross/scanned/${attendee.key}/dateScanned`] = admin.database.ServerValue.TIMESTAMP;
+ updates[`v1/sponsors/source/${req.body.company}/cross/scanned/${attendee.key}/email`] = attendee.val().primary.email;
+ updates[`v1/sponsors/source/${req.body.company}/cross/scanned/${attendee.key}/ticketEmail`] = attendee.val().primary.ticketEmail;
+ updates[`v1/sponsors/source/${req.body.company}/cross/scanned/${attendee.key}/ticketName`] = attendee.val().primary.ticketName;
+ updates[`v1/sponsors/source/${req.body.company}/cross/scanned/${attendee.key}/displayName`] = attendee.val().primary.displayName;
+ updates[`v1/sponsors/source/${req.body.company}/cross/scanned/${attendee.key}/scannedByUid`] = user.uid;
+ updates[`v1/sponsors/source/${req.body.company}/cross/scanned/${attendee.key}/scannedBy`] = user.name || user.displayName || user.email;
+ updates[`v1/sponsors/source/${req.body.company}/cross/scanned/${attendee.key}/scannedByEmail`] = user.email;
+
+ return admin.database().ref().update(updates);
+ })
+ .then(() => {
+ res
+ .status(200)
+ .json({
+ success: true
+ });
+ })
+ .catch(error => {
+ console.log(error)
+ return res
+ .status(error.status_code || 500)
+ .json(error);
+ });
+});
+
exports.connect = functions.https.onRequest((req, res) => {
if (!req.body.token) {
return res
@@ -156,7 +382,7 @@ exports.connect = functions.https.onRequest((req, res) => {
});
})
.catch(error => {
- console.log(error)
+ console.log(error);
return res
.status(error.status_code || 500)
.json(error);
diff --git a/src/.temp/temp.json b/src/.temp/temp.json
index 44beebc..b7df8ec 100644
--- a/src/.temp/temp.json
+++ b/src/.temp/temp.json
@@ -125,6 +125,14 @@
{
"source": "/connect",
"function": "connect"
+ },
+ {
+ "source": "/validate-sponsor",
+ "function": "validate"
+ },
+ {
+ "source": "/scan-id",
+ "function": "scanId"
}
],
"headers": [
diff --git a/src/config/dev.json b/src/config/dev.json
index 44beebc..b7df8ec 100644
--- a/src/config/dev.json
+++ b/src/config/dev.json
@@ -125,6 +125,14 @@
{
"source": "/connect",
"function": "connect"
+ },
+ {
+ "source": "/validate-sponsor",
+ "function": "validate"
+ },
+ {
+ "source": "/scan-id",
+ "function": "scanId"
}
],
"headers": [
diff --git a/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html b/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html
index 5e298a5..9a7da1a 100644
--- a/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html
+++ b/src/modules/devfest-module/components/devfest-drawer/devfest-drawer.html
@@ -14,7 +14,7 @@
- Codelabs
+
Profile
Logout
diff --git a/src/modules/devfest-module/components/devfest-header/devfest-header.html b/src/modules/devfest-module/components/devfest-header/devfest-header.html
index 6f7fbdf..209f444 100644
--- a/src/modules/devfest-module/components/devfest-header/devfest-header.html
+++ b/src/modules/devfest-module/components/devfest-header/devfest-header.html
@@ -14,7 +14,7 @@
- Codelabs
+
Profile
Logout
diff --git a/src/modules/devfest-module/models/user-model.js b/src/modules/devfest-module/models/user-model.js
index 03546d7..af4d762 100644
--- a/src/modules/devfest-module/models/user-model.js
+++ b/src/modules/devfest-module/models/user-model.js
@@ -111,6 +111,11 @@ export default (superClass) => {
type: USER_ACTION.FETCH,
modelType: 'meta'
});
+ this.dispatch({
+ type: USER_ACTION.FETCH,
+ modelType: 'cross',
+ attr: 'sponsorId'
+ });
} else {
this.dispatch({
type: USER_ACTION.PROFILE,
diff --git a/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.html b/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.html
index 6505605..8c04517 100644
--- a/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.html
+++ b/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.html
@@ -2,8 +2,40 @@
-
+
+
+ Please put your sponsor verification code.
+
+ If you forgot the verification code, please approach one of the organizers.
+
+
+
+
+ Verify
+
+
+
+
+ Hi [[user.displayName]]
+
+ You can do the following for your company ID: [[profile.sponsorId]]
+
+
+
+
+ Scan IDs
+
+
+
+
+
+
+
+ See Scanned IDs
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.js b/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.js
index e84d21e..2524ba0 100644
--- a/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.js
+++ b/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.js
@@ -4,33 +4,29 @@ import 'iron-icon/iron-icon.html';
import 'iron-flex-layout/iron-flex-layout.html';
import 'shadycss/apply-shim.html';
import 'marked-element/marked-element.html';
+import 'paper-input/paper-input.html';
import '../../fonts/devfest-fonts.html';
import '../../icons/devfest-icons.html';
import '../../components/devfest-footer/devfest-footer.js';
-import '../../components/devfest-button/devfest-button.js';
+import '../../components/devfest-button-only/devfest-button-only.js';
import './devfest-not-sponsor-page.html';
+import User from '../../models/user-model';
import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
import marked from 'marked';
window.marked = window.marked || marked;
-const {Polymer} = window;
+const {Polymer, fetch, Headers, Raven} = window;
-class DevfestNotSponsorPage extends contentLoaderMixin(Polymer.Element) {
+class DevfestNotSponsorPage extends User(contentLoaderMixin(Polymer.Element)) {
static get is () { return 'devfest-not-sponsor-page'; }
static get properties () {
return {
- perks: {
- type: Array,
- value: []
+ verificationCode: {
+ type: String
},
- details: {
- type: Array,
- value: []
- },
- payment: {
- type: Array,
- value: []
+ companyId: {
+ type: String
}
};
}
@@ -41,6 +37,38 @@ class DevfestNotSponsorPage extends contentLoaderMixin(Polymer.Element) {
}
reload () {}
+
+ verify () {
+ var validate = this.verificationCode;
+ var company = this.companyId;
+ const headers = new Headers();
+ headers.append('Content-Type', 'application/json');
+ var user = this.user;
+ if (user && validate) {
+ user.getIdToken().then(token => {
+ fetch('/validate-sponsor', {
+ method: 'POST',
+ headers,
+ body: JSON.stringify({
+ token,
+ validate,
+ company
+ })
+ }).then(res => {
+ return res.json();
+ }).then(json => {
+ if (json.success) {
+ document.querySelector('app-shell').showMessage('Validation successful', function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
+ } else {
+ if (Raven) {
+ Raven.captureException(json);
+ }
+ document.querySelector('app-shell').showMessage('Cannot validate your company', function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
+ }
+ });
+ });
+ }
+ }
}
window.customElements.define(DevfestNotSponsorPage.is, DevfestNotSponsorPage);
diff --git a/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.scss b/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.scss
index 4c50add..aeaf544 100644
--- a/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.scss
+++ b/src/modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.scss
@@ -1,3 +1,81 @@
@import '../../styles/components/host.scss';
@import '../../styles/components/typography.scss';
@import '../../styles/components/section.scss';
+
+.section {
+ max-width: 600px;
+ padding: 20px;
+ margin: 60px auto 60px;
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12), 0 3px 1px -2px rgba(0,0,0,.2);
+
+ @media screen and (max-width: 720px) {
+ margin: 20px 20px;
+ }
+}
+
+.row {
+ @apply --layout-horizontal;
+ @apply --layout-wrap;
+
+ @media screen and (max-width: 550px) {
+ display: block;
+ }
+}
+
+.avatar {
+ border-radius: 50%;
+ width: 200px;
+ height: 200px;
+ margin: 0 auto;
+}
+
+.flex {
+ @apply --layout-flex;
+ margin-left: 40px;
+ text-align: left;
+
+ @media screen and (max-width: 550px) {
+ margin-left: 0px;
+ }
+}
+
+.brow {
+ @apply --layout-horizontal;
+ @apply --layout-center;
+}
+
+.button-row {
+ @apply --layout-flex;
+}
+
+
+.left {
+ text-align: left;
+ @apply --layout-flex-4;
+}
+
+.right {
+ @apply --layout-flex-3;
+ text-align: right;
+ margin-right: 40px;
+
+ @media screen and (max-width: 500px) {
+ margin-right: 20px;
+ }
+}
+
+.icon {
+ width: 24px !important;
+ height: 24px !important;
+}
+
+.icon {
+ --iron-icon-height: 24px !important;
+ --iron-icon-width: 24px !important;
+}
+
+.text-area {
+ text-align: left;
+}
+
+
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
index 084a693..c345da9 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
@@ -70,7 +70,8 @@ Ticket Connected
Ticket#: [[profile.ticketNumber]]
- Name: [[profile.ticketName]]
+ Name: [[profile.ticketName]]
+ Email: [[profile.ticketEmail]]
diff --git a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
index ef07031..de5c5b9 100644
--- a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
+++ b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
@@ -2,10 +2,23 @@
-
+
+
+
+
+
+
+
+
+ Go back
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js
index b53a39a..72ce544 100644
--- a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js
+++ b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js
@@ -7,15 +7,17 @@ import 'marked-element/marked-element.html';
import '../../fonts/devfest-fonts.html';
import '../../icons/devfest-icons.html';
import '../../components/devfest-footer/devfest-footer.js';
-import '../../components/devfest-button/devfest-button.js';
import './devfest-scan-page.html';
+import '../../components/devfest-button-only/devfest-button-only.js';
+import User from '../../models/user-model';
+import QrCode from 'qrcode-reader';
import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
import marked from 'marked';
window.marked = window.marked || marked;
-const {Polymer} = window;
+const { Polymer, fetch, Raven, Headers } = window;
-class DevfestScanPage extends contentLoaderMixin(Polymer.Element) {
+class DevfestScanPage extends User(Polymer.GestureEventListeners(contentLoaderMixin(Polymer.Element))) {
static get is () { return 'devfest-scan-page'; }
static get properties () {
@@ -35,12 +37,195 @@ class DevfestScanPage extends contentLoaderMixin(Polymer.Element) {
};
}
+ constructor () {
+ super();
+ this._qr = new QrCode();
+ this._qr.callback = (error, result) => {
+ if (error) {
+
+ }
+ if (result && result.result) {
+ this.shadowRoot.querySelector('#video').classList.add('scanned');
+ this.stopRecording();
+ // console.log(result.result);
+ document.querySelector('app-shell').showMessage('Scanning...', function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
+ const headers = new Headers();
+ headers.append('Content-Type', 'application/json');
+ var user = this.user;
+ var profile = this.profile;
+ if (user && profile) {
+ user.getIdToken().then(token => {
+ fetch('/scan-id', {
+ method: 'POST',
+ headers,
+ body: JSON.stringify({
+ id: result.result,
+ uid: user.uid,
+ company: profile.sponsorId,
+ token
+ })
+ }).then(res => {
+ return res.json();
+ }).then(json => {
+ if (json.success) {
+ document.querySelector('app-shell').showMessage('Scan complete', function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
+ } else {
+ if (Raven) {
+ Raven.captureException(json);
+ }
+ document.querySelector('app-shell').showMessage('Error in scanning: ' + json.message, function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
+ }
+
+ this.shadowRoot.querySelector('#video').classList.remove('scanned');
+ this.reload();
+ });
+ });
+ } else {
+ document.querySelector('app-shell').showMessage('Can`\t find your user credentials', function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
+ this.shadowRoot.querySelector('#video').classList.remove('scanned');
+ this.reload();
+ }
+ }
+ };
+
+ this._boundResize = this._boundResize || this.resize.bind(this);
+ window.addEventListener('resize', this._boundResize);
+ }
+
+ stopRecording () {
+ if (this._interval) {
+ clearInterval(this._interval);
+ this._interval = null;
+ }
+
+ if (this._stream) {
+ var tracks = this._stream.getTracks();
+ for (var i in tracks) {
+ if (tracks[i].stop) {
+ console.log(tracks[i]);
+ tracks[i].stop();
+ }
+ }
+ // console.log(this._stream)
+ delete this._stream;
+ var video = this.shadowRoot.querySelector('#video');
+ video.src = '';
+ }
+ }
+
+ goBack () {
+ this.stopRecording();
+ window.history.pushState({}, '', '/are-you-a-sponsor');
+ window.dispatchEvent(new CustomEvent('location-changed'));
+ }
+
connectedCallback () {
super.connectedCallback();
this.reload();
}
- reload () {}
+ resize () {
+ // this.$$('#uploading-dialog').center();
+ var canvas = this.shadowRoot.querySelector('#canvas');
+ var video = this.shadowRoot.querySelector('#video');
+ var size = this.windowSize();
+ if (canvas && video) {
+ this.height = size.height - 240;
+ this.width = size.width - 80;
+ video.height = this.height;
+ // video.width = this.width;
+ canvas.height = this.height;
+ canvas.width = this.width;
+ }
+ }
+
+ windowSize () {
+ var width = 0;
+ var height = 0;
+ if (window && document) {
+ if (typeof window.innerWidth === 'number') {
+ // Non-IE
+ width = window.innerWidth;
+ height = window.innerHeight;
+ } else if (document.documentElement && (
+ document.documentElement.clientWidth ||
+ document.documentElement.clientHeight)) {
+ // IE 6+ in 'standards compliant mode'
+ width = document.documentElement.clientWidth;
+ height = document.documentElement.clientHeight;
+ } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
+ // IE 4 compatible
+ width = document.body.clientWidth;
+ height = document.body.clientHeight;
+ }
+ }
+ return { width: width, height: height };
+ }
+
+ scanned () {
+ // App.Shell.showMessage('Scan start', function () { App.Shell.closeToast() }, 'Close', null, 10000)
+ var video = this.shadowRoot.querySelector('#video');
+ var canvas = this.shadowRoot.querySelector('#canvas');
+ var context = canvas.getContext('2d');
+
+ var width2 = (video.videoWidth * this.height) / video.videoHeight;
+ var height2 = (video.videoHeight * this.width) / video.videoWidth;
+
+ if (height2 > this.height) {
+ context.drawImage(video, (this.width - width2) / 2, 0, width2, this.height);
+ } else {
+ context.drawImage(video, 0, (this.height - height2) / 2, this.width, height2);
+ }
+
+ var dataURL = canvas.toDataURL();
+ this._qr.decode(dataURL);
+ // this._qr.decode(`http://localhost:5000/images/test.png`);
+ }
+
+ reload () {
+ Polymer.RenderStatus.afterNextRender(this, () => {
+ var video = this.shadowRoot.querySelector('#video');
+ // Get access to the camera!
+ if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
+ // console.log(navigator.mediaDevices.getSupportedConstraints());
+ // Not adding `{ audio: true }` since we only want video now
+ navigator.mediaDevices.getUserMedia({ video: { facingMode: { exact: 'environment' } } }).then((stream) => {
+ this._stream = stream;
+ video.src = window.URL.createObjectURL(stream);
+ video.play();
+ if (this._interval) {
+ clearInterval(this._interval);
+ this._interval = null;
+ }
+
+ this._interval = setInterval(() => {
+ this.scanned();
+ }, 100);
+ // setTimeout(function() {console.log(video.videoHeight)}, 1000)
+ })
+ .catch((error) => {
+ console.error(error);
+ return navigator.mediaDevices.getUserMedia({ video: true });
+ // Raven.captureException(error)
+ // this.$.toast.show(error.message, 5000);
+ })
+ .then((stream) => {
+ this._stream = stream;
+ video.src = window.URL.createObjectURL(stream);
+ video.play();
+
+ if (this._interval) {
+ clearInterval(this._interval);
+ this._interval = null;
+ }
+ this._interval = setInterval(() => {
+ this.scanned();
+ }, 100);
+ });
+ }
+ this.resize();
+ });
+ }
}
window.customElements.define(DevfestScanPage.is, DevfestScanPage);
diff --git a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.scss b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.scss
index e69de29..7812a8f 100644
--- a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.scss
+++ b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.scss
@@ -0,0 +1,44 @@
+@import '../../styles/components/host.scss';
+@import '../../styles/components/typography.scss';
+@import '../../styles/components/section.scss';
+
+.qr-section {
+ text-align: center;
+ position: relative;
+ max-width: 600px;
+ padding: 20px;
+ margin: 60px auto 60px;
+ text-align: center;
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12), 0 3px 1px -2px rgba(0,0,0,.2);
+
+ @media screen and (max-width: 720px) {
+ margin: 20px 20px;
+ }
+}
+
+#video {
+ display: block;
+ width: 100%;
+}
+
+#canvas {
+ display: none;
+}
+
+.snap-area {
+ padding: 0 20px 40px 20px;
+}
+
+.scan-section {
+ width: 60%;
+ height: 20%;
+ position: absolute;
+ top: 25%;
+ left: 20%;
+ border: 1px red solid;
+ z-index: 100;
+}
+
+.scanned {
+ border: 2px solid red;
+}
\ No newline at end of file
diff --git a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js
index a9fd8af..a4b7433 100644
--- a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js
+++ b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js
@@ -7,7 +7,8 @@ import 'marked-element/marked-element.html';
import '../../fonts/devfest-fonts.html';
import '../../icons/devfest-icons.html';
import '../../components/devfest-footer/devfest-footer.js';
-import '../../components/devfest-button/devfest-button.js';
+import '../../components/devfest-button-only/devfest-button-only.js';
+import User from '../../models/user-model';
import './devfest-scanned-list-page.html';
import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
import marked from 'marked';
@@ -15,7 +16,7 @@ window.marked = window.marked || marked;
const {Polymer} = window;
-class DevfestScannedListPage extends contentLoaderMixin(Polymer.Element) {
+class DevfestScannedListPage extends User(contentLoaderMixin(Polymer.Element)) {
static get is () { return 'devfest-scanned-list-page'; }
static get properties () {
diff --git a/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.html b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.html
index fe64f50..7aa2ffa 100644
--- a/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.html
+++ b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.html
@@ -19,6 +19,18 @@
[[item.name]]
+
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js
index 6bfbb3e..324fcd9 100644
--- a/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js
+++ b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js
@@ -7,13 +7,15 @@ import 'marked-element/marked-element.html';
import '../../fonts/devfest-fonts.html';
import './devfest-sponsors-page.html';
import '../../components/devfest-footer/devfest-footer.js';
+import '../../components/devfest-button-only/devfest-button-only.js';
+import User from '../../models/user-model';
import contentLoaderMixin from '../../../content-loader/content-loader-mixin.js';
import marked from 'marked';
import app from '../../../../app.js';
window.marked = window.marked || marked;
const {Polymer} = window;
-class DevfestSponsorsPage extends contentLoaderMixin(Polymer.Element) {
+class DevfestSponsorsPage extends User(contentLoaderMixin(Polymer.Element)) {
static get is () { return 'devfest-sponsors-page'; }
static get properties () {
diff --git a/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.scss b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.scss
index 5d77897..cba50e0 100644
--- a/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.scss
+++ b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.scss
@@ -65,4 +65,9 @@
.media-partners {
max-width: 150px;
min-width: 125px;
+}
+
+.sponsor-question {
+ margin: 20px auto 60px;
+ max-width: 600px;
}
\ No newline at end of file
From 93c51b0cfc1613c3918b7c4c12b984067221477d Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 12:17:20 +0800
Subject: [PATCH 33/56] added stuff
Signed-off-by: Toni-Jan Keith Monserrat
---
src/config/prod.json | 46 ++++++++++++++++++-
.../devfest-login-page.html | 8 +++-
2 files changed, 51 insertions(+), 3 deletions(-)
diff --git a/src/config/prod.json b/src/config/prod.json
index 67502e2..8ca5957 100644
--- a/src/config/prod.json
+++ b/src/config/prod.json
@@ -35,6 +35,14 @@
"devfest-session-page": "modules/devfest-module/pages/devfest-session-page/devfest-session-page.js",
"devfest-tickets-page": "modules/devfest-module/pages/devfest-tickets-page/devfest-tickets-page.js",
"devfest-sponsors-page": "modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.js",
+ "devfest-login-page": "modules/devfest-module/pages/devfest-login-page/devfest-login-page.js",
+ "devfest-tnc-page": "modules/devfest-module/pages/devfest-tnc-page/devfest-tnc-page.js",
+ "devfest-profile-page": "modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js",
+ "devfest-codelabs-page": "modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js",
+ "devfest-connect-page": "modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js",
+ "devfest-scan-page": "modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js",
+ "devfest-scanned-list-page": "modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js",
+ "devfest-not-sponsor-page": "modules/devfest-module/pages/devfest-not-sponsor-page/devfest-not-sponsor-page.js",
"devfest-not-found-page": "modules/devfest-module/pages/devfest-not-found-page/devfest-not-found-page.js",
"devfest-not-authorized-page": "modules/devfest-module/pages/devfest-not-authorized-page/devfest-not-authorized-page.js",
"devfest-authorized-page": "modules/devfest-module/pages/devfest-authorized-page/devfest-authorized-page.js",
@@ -50,6 +58,32 @@
"/sessions/:id": "devfest-session-page",
"/tickets": "devfest-tickets-page",
"/sponsors": "devfest-sponsors-page",
+ "/tnc": "devfest-tnc-page",
+ "/login": "devfest-login-page",
+ "/profile": {
+ "name": "devfest-profile-page",
+ "auth": "isLoggedIn"
+ },
+ "/codelabs/:type?/:id?/:page?": {
+ "name": "devfest-codelabs-page",
+ "auth": "isLoggedIn"
+ },
+ "/connect-ticket": {
+ "name": "devfest-connect-page",
+ "auth": "isLoggedIn"
+ },
+ "/scan": {
+ "name": "devfest-scan-page",
+ "auth": "isSponsor"
+ },
+ "/scanned-list": {
+ "name": "devfest-scanned-list-page",
+ "auth": "isSponsor"
+ },
+ "/are-you-a-sponsor": {
+ "name": "devfest-not-sponsor-page",
+ "auth": "isLoggedIn"
+ },
"/auth-check": {
"name": "devfest-authorized-page",
"auth": "exampleAuthentication"
@@ -85,8 +119,16 @@
"hosting": {
"rewrites": [
{
- "source": "/api/**",
- "function": "app"
+ "source": "/connect",
+ "function": "connect"
+ },
+ {
+ "source": "/validate-sponsor",
+ "function": "validate"
+ },
+ {
+ "source": "/scan-id",
+ "function": "scanId"
}
],
"headers": [
diff --git a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html
index a4ac14c..a5756d0 100644
--- a/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html
+++ b/src/modules/devfest-module/pages/devfest-login-page/devfest-login-page.html
@@ -3,7 +3,13 @@
-
+
+
+
+ Please register/login using any of your accounts below.
+ (Please note if you are playing for the codelabs activity, your Github account is needed. You can still link other accounts later)
+
+
From 036e2686d5f15d4f05bbe97c147aa3fb10886956 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 12:22:07 +0800
Subject: [PATCH 34/56] made the buttons bigger
Signed-off-by: Toni-Jan Keith Monserrat
---
.../components/devfest-button-only/devfest-button-only.scss | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.scss b/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.scss
index 22c8d19..f3f91e2 100644
--- a/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.scss
+++ b/src/modules/devfest-module/components/devfest-button-only/devfest-button-only.scss
@@ -4,7 +4,7 @@
color: white;
border: 3px solid #2e9be6;
border-radius: 2px;
- padding: 5px;
+ padding: 15px;
font-size: 16px;
width: 100%;
display: block;
From 16187c3a11358a9a294fe9759bb092c95847c535 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 13:47:25 +0800
Subject: [PATCH 35/56] added stuff
Signed-off-by: Toni-Jan Keith Monserrat
---
gulp/utils/create-firebase-config.js | 1 +
src/firebase.js | 2 +-
src/modules/firebase/index.js | 8 +++++++-
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/gulp/utils/create-firebase-config.js b/gulp/utils/create-firebase-config.js
index 3f8252e..b89ce03 100644
--- a/gulp/utils/create-firebase-config.js
+++ b/gulp/utils/create-firebase-config.js
@@ -15,6 +15,7 @@ module.exports = (dev) => {
firebase.initializeApp(config);
}
});
+ window.firebase = firebase;
window.dispatchEvent(new window.CustomEvent('firebase-initialized', { detail: firebase }));
})
const firebaseConfig = configs;
diff --git a/src/firebase.js b/src/firebase.js
index 85f8f03..46c0f10 100644
--- a/src/firebase.js
+++ b/src/firebase.js
@@ -10,9 +10,9 @@
firebase.initializeApp(config);
}
});
+ window.firebase = firebase;
window.dispatchEvent(new window.CustomEvent('firebase-initialized', { detail: firebase }));
})
const firebaseConfig = configs;
export default firebase;
export { firebaseConfig };
-
\ No newline at end of file
diff --git a/src/modules/firebase/index.js b/src/modules/firebase/index.js
index 4d21804..02b9553 100644
--- a/src/modules/firebase/index.js
+++ b/src/modules/firebase/index.js
@@ -4,6 +4,7 @@ import(/* webpackChunkName: 'firebase' */ 'firebase').then(sdk => {
if (sdk) {
firebase = sdk;
}
+ window.firebase = sdk;
});
const updateAttrSnapshot = (store, attr, type, snapshot) => {
@@ -121,11 +122,16 @@ export const logout = () => {
};
export const observeAuth = (dispatch) => {
+ console.log(window.firebase, firebase, dispatch)
if (firebase) {
firebase.auth().onAuthStateChanged(dispatch);
+ } else if (window.firebase) {
+ window.firebase.auth().onAuthStateChanged(dispatch);
+ firebase = window.firebase;
} else {
window.addEventListener('firebase-initialized', event => {
- firebase = event.detail;
+ firebase = window.firebase || event.detail;
+ console.log(firebase, event.detail, window.firebase, dispatch)
firebase.auth().onAuthStateChanged(dispatch);
});
}
From fbd7e6358e0892b97dedeac5293e0c24c03bab6b Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 13:53:50 +0800
Subject: [PATCH 36/56] change stuff
Signed-off-by: Toni-Jan Keith Monserrat
---
.../devfest-profile-page/devfest-profile-page.html | 2 +-
.../devfest-profile-page/devfest-profile-page.js | 11 +++++++++++
src/modules/firebase/index.js | 3 ---
3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
index c345da9..85348b0 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
@@ -4,7 +4,7 @@
-
+
[[profile.displayName]]
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js
index c1a7163..a3ef514 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js
@@ -25,11 +25,22 @@ class DevfestProfilePage extends User(contentLoaderMixin(Polymer.Element)) {
};
}
+ static get observers () {
+ return [
+ '_setProfileImage(profile.image)'
+ ]
+ }
+
connectedCallback () {
super.connectedCallback();
this.reload();
}
+ _setProfileImage (image) {
+ console.log(image)
+ this.shadowRoot.querySelector('#profile-image').style.background = `url(${image}) center/cover no-repeat`;
+ }
+
_getMoreLinks (providerData) {
var providers = [
'github.com',
diff --git a/src/modules/firebase/index.js b/src/modules/firebase/index.js
index 02b9553..11bd190 100644
--- a/src/modules/firebase/index.js
+++ b/src/modules/firebase/index.js
@@ -34,7 +34,6 @@ const updateModelTypeSnapshot = (store, modelType, type, snapshot) => {
attrs
});
}, 100);
-
}
};
@@ -122,7 +121,6 @@ export const logout = () => {
};
export const observeAuth = (dispatch) => {
- console.log(window.firebase, firebase, dispatch)
if (firebase) {
firebase.auth().onAuthStateChanged(dispatch);
} else if (window.firebase) {
@@ -131,7 +129,6 @@ export const observeAuth = (dispatch) => {
} else {
window.addEventListener('firebase-initialized', event => {
firebase = window.firebase || event.detail;
- console.log(firebase, event.detail, window.firebase, dispatch)
firebase.auth().onAuthStateChanged(dispatch);
});
}
From fb9f524248d8afc2afb5957f2934281eefed7824 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 14:05:14 +0800
Subject: [PATCH 37/56] added shrink to fit
Signed-off-by: Toni-Jan Keith Monserrat
---
core/shell/index.ejs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/shell/index.ejs b/core/shell/index.ejs
index 5c85960..839a343 100644
--- a/core/shell/index.ejs
+++ b/core/shell/index.ejs
@@ -5,7 +5,7 @@
<% htmlWebpackPlugin.options.theme = htmlWebpackPlugin.options.getConfig(htmlWebpackPlugin.options.env).theme %>
-
+
<%= htmlWebpackPlugin.options.config.app.title %>
From a96b306048cf0ca60dd2617d0634b142cce20432 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 14:16:44 +0800
Subject: [PATCH 38/56] fixed landing and sponsors
Signed-off-by: Toni-Jan Keith Monserrat
---
.../devfest-landing-page/devfest-landing-page.html | 2 +-
.../devfest-landing-page/devfest-landing-page.scss | 12 ++++++++++++
.../devfest-sponsors-page/devfest-sponsors-page.html | 2 +-
.../devfest-sponsors-page/devfest-sponsors-page.scss | 4 ++++
4 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.html b/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.html
index a23d01b..030b8f8 100644
--- a/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.html
+++ b/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.html
@@ -64,7 +64,7 @@ [[item.name]]
-
+
diff --git a/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.scss b/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.scss
index 81694b1..8733dbf 100644
--- a/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.scss
+++ b/src/modules/devfest-module/pages/devfest-landing-page/devfest-landing-page.scss
@@ -38,6 +38,10 @@ devfest-banner {
@apply --layout-horizontal;
@apply --layout-wrap;
+ @media screen and (max-width: 650px) {
+ display: block;
+ }
+
.about-part {
@apply --layout-flex;
min-width: 300px;
@@ -82,6 +86,10 @@ devfest-banner {
@apply --layout-horizontal;
@apply --layout-wrap;
+ @media only screen and (max-width: 650px) {
+ display: block;
+ }
+
.expect {
@apply --layout-flex;
min-width: 200px;
@@ -125,6 +133,10 @@ devfest-banner {
@apply --layout-center;
max-width: 1200px;
margin: 0 auto;
+
+ @media screen and (max-width: 500px) {
+ display: block;
+ }
}
.flex {
diff --git a/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.html b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.html
index 7aa2ffa..a15edd1 100644
--- a/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.html
+++ b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.html
@@ -13,7 +13,7 @@ [[item.name]]
-
+
diff --git a/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.scss b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.scss
index cba50e0..ef3b82f 100644
--- a/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.scss
+++ b/src/modules/devfest-module/pages/devfest-sponsors-page/devfest-sponsors-page.scss
@@ -16,6 +16,10 @@
@apply --layout-center;
max-width: 1200px;
margin: 0 auto;
+
+ @media screen and (max-width: 500px) {
+ display: block;
+ }
}
.flex {
From dc3280a5eca732c1c715059ac7eaf7bd2c45abc6 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 14:33:48 +0800
Subject: [PATCH 39/56] added text for camera
Signed-off-by: Toni-Jan Keith Monserrat
---
.../pages/devfest-connect-page/devfest-connect-page.html | 3 +++
.../pages/devfest-scan-page/devfest-scan-page.html | 3 +++
2 files changed, 6 insertions(+)
diff --git a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.html b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.html
index efe3d2a..06e9e17 100644
--- a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.html
+++ b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.html
@@ -3,6 +3,9 @@
+
+ You need a camera for this:
+
diff --git a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
index de5c5b9..4dc250b 100644
--- a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
+++ b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
@@ -3,6 +3,9 @@
+
+ You need a camera for this:
+
From 9b32b157613bc744a5db0c14412914add3819cf2 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 14:34:16 +0800
Subject: [PATCH 40/56] added extra
Signed-off-by: Toni-Jan Keith Monserrat
---
.../pages/devfest-scan-page/devfest-scan-page.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
index 4dc250b..43a93fa 100644
--- a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
+++ b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
@@ -4,7 +4,7 @@
- You need a camera for this:
+ You need a camera for this: (might not work for Iphone users)...
From 5ea2f192c1e1af22e7c63ae0979f55dfde885795 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 14:48:34 +0800
Subject: [PATCH 41/56] added color
Signed-off-by: Toni-Jan Keith Monserrat
---
.../pages/devfest-connect-page/devfest-connect-page.html | 3 ++-
.../pages/devfest-connect-page/devfest-connect-page.scss | 1 +
.../pages/devfest-scan-page/devfest-scan-page.html | 3 ++-
.../pages/devfest-scan-page/devfest-scan-page.scss | 1 +
4 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.html b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.html
index 06e9e17..a347a49 100644
--- a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.html
+++ b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.html
@@ -4,7 +4,8 @@
- You need a camera for this:
+ You need a camera for this: (might not work for Iphone users)...
+ Scan the ticket here:
diff --git a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.scss b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.scss
index 7812a8f..21999e6 100644
--- a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.scss
+++ b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.scss
@@ -19,6 +19,7 @@
#video {
display: block;
width: 100%;
+ background: #000;
}
#canvas {
diff --git a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
index 43a93fa..10df436 100644
--- a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
+++ b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
@@ -4,7 +4,8 @@
- You need a camera for this: (might not work for Iphone users)...
+ You need a camera for this: (might not work for Iphone users)...
+ Scan the ticket here:
diff --git a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.scss b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.scss
index 7812a8f..21999e6 100644
--- a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.scss
+++ b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.scss
@@ -19,6 +19,7 @@
#video {
display: block;
width: 100%;
+ background: #000;
}
#canvas {
From 5c1f579b8e3b50d1b2167bac4de67c5d990359dd Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 14:59:34 +0800
Subject: [PATCH 42/56] added fixes
Signed-off-by: Toni-Jan Keith Monserrat
---
.../devfest-connect-page.html | 2 +-
.../devfest-connect-page.js | 38 ++++++++++++-------
.../devfest-scan-page/devfest-scan-page.html | 2 +-
3 files changed, 26 insertions(+), 16 deletions(-)
diff --git a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.html b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.html
index a347a49..3518978 100644
--- a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.html
+++ b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.html
@@ -4,7 +4,7 @@
- You need a camera for this: (might not work for Iphone users)...
+ You need a camera for this: (might not work for iPhone/iOS users)...
Scan the ticket here:
diff --git a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
index 6ed810a..23347fc 100644
--- a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
+++ b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
@@ -46,20 +46,7 @@ class DevfestConnectPage extends User(contentLoaderMixin(Polymer.Element)) {
}
if (result && result.result) {
this.shadowRoot.querySelector('#video').classList.add('scanned');
- if (this._interval) {
- clearInterval(this._interval);
- this._interval = null;
- }
-
- if (this._stream) {
- var tracks = this._stream.getTracks();
- for (var i in tracks) {
- if (tracks[i].stop) {
- console.log(tracks[i])
- tracks[i].stop();
- }
- }
- }
+ this.stopRecording();
// console.log(result.result);
document.querySelector('app-shell').showMessage('Scanning...', function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
const headers = new Headers();
@@ -90,6 +77,8 @@ class DevfestConnectPage extends User(contentLoaderMixin(Polymer.Element)) {
window.dispatchEvent(new CustomEvent('location-changed'));
document.querySelector('app-shell').showMessage('Error in scanning: ' + json.message, function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
}
+
+ this.shadowRoot.querySelector('#video').classList.remove('scanned');
});
});
}
@@ -105,6 +94,27 @@ class DevfestConnectPage extends User(contentLoaderMixin(Polymer.Element)) {
this.reload();
}
+ stopRecording () {
+ if (this._interval) {
+ clearInterval(this._interval);
+ this._interval = null;
+ }
+
+ if (this._stream) {
+ var tracks = this._stream.getTracks();
+ for (var i in tracks) {
+ if (tracks[i].stop) {
+ console.log(tracks[i]);
+ tracks[i].stop();
+ }
+ }
+ // console.log(this._stream)
+ delete this._stream;
+ var video = this.shadowRoot.querySelector('#video');
+ video.src = '';
+ }
+ }
+
resize () {
// this.$$('#uploading-dialog').center();
var canvas = this.shadowRoot.querySelector('#canvas');
diff --git a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
index 10df436..fcf1906 100644
--- a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
+++ b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.html
@@ -4,7 +4,7 @@
- You need a camera for this: (might not work for Iphone users)...
+ You need a camera for this: (might not work for iPhone/iOS users)...
Scan the ticket here:
From b486a5df1d9b8c346a96b061a1cb6716802a5064 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 15:09:48 +0800
Subject: [PATCH 43/56] added polyfill
Signed-off-by: Toni-Jan Keith Monserrat
---
package.json | 1 +
.../devfest-connect-page.js | 86 ++++++++++--------
.../devfest-scan-page/devfest-scan-page.js | 88 +++++++++++--------
yarn.lock | 4 +
4 files changed, 104 insertions(+), 75 deletions(-)
diff --git a/package.json b/package.json
index c2d6cb1..5cea531 100644
--- a/package.json
+++ b/package.json
@@ -26,6 +26,7 @@
"indexeddbshim": "^3.0.4",
"intersection-observer": "^0.4.2",
"marked": "^0.3.6",
+ "md-gum-polyfill": "^1.0.0",
"path-to-regexp": "^1.7.0",
"qrcode-reader": "^1.0.3",
"redux": "^3.7.2"
diff --git a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
index 23347fc..34f30c9 100644
--- a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
+++ b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
@@ -175,48 +175,60 @@ class DevfestConnectPage extends User(contentLoaderMixin(Polymer.Element)) {
reload () {
Polymer.RenderStatus.afterNextRender(this, () => {
- var video = this.shadowRoot.querySelector('#video');
- // Get access to the camera!
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
- console.log(navigator.mediaDevices.getSupportedConstraints());
- // Not adding `{ audio: true }` since we only want video now
- navigator.mediaDevices.getUserMedia({ video: { facingMode: { exact: 'environment' } } }).then((stream) => {
- this._stream = stream;
- video.src = window.URL.createObjectURL(stream);
- video.play();
- if (this._interval) {
- clearInterval(this._interval);
- this._interval = null;
- }
-
- this._interval = setInterval(() => {
- this.scanned();
- }, 100);
- // setTimeout(function() {console.log(video.videoHeight)}, 1000)
- })
- .catch((error) => {
- console.error(error);
- return navigator.mediaDevices.getUserMedia({ video: true });
- // Raven.captureException(error)
- // this.$.toast.show(error.message, 5000);
- })
- .then((stream) => {
- this._stream = stream;
- video.src = window.URL.createObjectURL(stream);
- video.play();
-
- if (this._interval) {
- clearInterval(this._interval);
- this._interval = null;
- }
- this._interval = setInterval(() => {
- this.scanned();
- }, 100);
+ this.getUserMedia();
+ } else {
+ import(/* webpackChunkName: 'md-gum-polyfill' */ 'md-gum-polyfill').then(() => {
+ console.log('loaded polyfill');
+ this.getUserMedia();
});
}
- this.resize();
+ // Get access to the camera!
});
}
+
+ getUserMedia () {
+ var video = this.shadowRoot.querySelector('#video');
+
+ if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
+ // console.log(navigator.mediaDevices.getSupportedConstraints());
+ // Not adding `{ audio: true }` since we only want video now
+ navigator.mediaDevices.getUserMedia({ video: { facingMode: { exact: 'environment' } } }).then((stream) => {
+ this._stream = stream;
+ video.src = window.URL.createObjectURL(stream);
+ video.play();
+ if (this._interval) {
+ clearInterval(this._interval);
+ this._interval = null;
+ }
+
+ this._interval = setInterval(() => {
+ this.scanned();
+ }, 100);
+ // setTimeout(function() {console.log(video.videoHeight)}, 1000)
+ })
+ .catch((error) => {
+ console.error(error);
+ return navigator.mediaDevices.getUserMedia({ video: true });
+ // Raven.captureException(error)
+ // this.$.toast.show(error.message, 5000);
+ })
+ .then((stream) => {
+ this._stream = stream;
+ video.src = window.URL.createObjectURL(stream);
+ video.play();
+
+ if (this._interval) {
+ clearInterval(this._interval);
+ this._interval = null;
+ }
+ this._interval = setInterval(() => {
+ this.scanned();
+ }, 100);
+ });
+ }
+ this.resize();
+ }
}
window.customElements.define(DevfestConnectPage.is, DevfestConnectPage);
diff --git a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js
index 72ce544..35f249f 100644
--- a/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js
+++ b/src/modules/devfest-module/pages/devfest-scan-page/devfest-scan-page.js
@@ -184,48 +184,60 @@ class DevfestScanPage extends User(Polymer.GestureEventListeners(contentLoaderMi
reload () {
Polymer.RenderStatus.afterNextRender(this, () => {
- var video = this.shadowRoot.querySelector('#video');
- // Get access to the camera!
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
- // console.log(navigator.mediaDevices.getSupportedConstraints());
- // Not adding `{ audio: true }` since we only want video now
- navigator.mediaDevices.getUserMedia({ video: { facingMode: { exact: 'environment' } } }).then((stream) => {
- this._stream = stream;
- video.src = window.URL.createObjectURL(stream);
- video.play();
- if (this._interval) {
- clearInterval(this._interval);
- this._interval = null;
- }
-
- this._interval = setInterval(() => {
- this.scanned();
- }, 100);
- // setTimeout(function() {console.log(video.videoHeight)}, 1000)
- })
- .catch((error) => {
- console.error(error);
- return navigator.mediaDevices.getUserMedia({ video: true });
- // Raven.captureException(error)
- // this.$.toast.show(error.message, 5000);
- })
- .then((stream) => {
- this._stream = stream;
- video.src = window.URL.createObjectURL(stream);
- video.play();
-
- if (this._interval) {
- clearInterval(this._interval);
- this._interval = null;
- }
- this._interval = setInterval(() => {
- this.scanned();
- }, 100);
- });
+ this.getUserMedia();
+ } else {
+ import(/* webpackChunkName: 'md-gum-polyfill' */ 'md-gum-polyfill').then(() => {
+ console.log('loaded polyfill');
+ this.getUserMedia();
+ });
}
- this.resize();
+ // Get access to the camera!
});
}
+
+ getUserMedia () {
+ var video = this.shadowRoot.querySelector('#video');
+
+ if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
+ // console.log(navigator.mediaDevices.getSupportedConstraints());
+ // Not adding `{ audio: true }` since we only want video now
+ navigator.mediaDevices.getUserMedia({ video: { facingMode: { exact: 'environment' } } }).then((stream) => {
+ this._stream = stream;
+ video.src = window.URL.createObjectURL(stream);
+ video.play();
+ if (this._interval) {
+ clearInterval(this._interval);
+ this._interval = null;
+ }
+
+ this._interval = setInterval(() => {
+ this.scanned();
+ }, 100);
+ // setTimeout(function() {console.log(video.videoHeight)}, 1000)
+ })
+ .catch((error) => {
+ console.error(error);
+ return navigator.mediaDevices.getUserMedia({ video: true });
+ // Raven.captureException(error)
+ // this.$.toast.show(error.message, 5000);
+ })
+ .then((stream) => {
+ this._stream = stream;
+ video.src = window.URL.createObjectURL(stream);
+ video.play();
+
+ if (this._interval) {
+ clearInterval(this._interval);
+ this._interval = null;
+ }
+ this._interval = setInterval(() => {
+ this.scanned();
+ }, 100);
+ });
+ }
+ this.resize();
+ }
}
window.customElements.define(DevfestScanPage.is, DevfestScanPage);
diff --git a/yarn.lock b/yarn.lock
index 7de7cda..861f84d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1616,6 +1616,10 @@ marked@^0.3.6:
version "0.3.6"
resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7"
+md-gum-polyfill@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/md-gum-polyfill/-/md-gum-polyfill-1.0.0.tgz#829a512d25ed0318c0c49a961048b505f670a2db"
+
mime-db@~1.30.0:
version "1.30.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
From 7ca30cc2685564b70e893505c436f8ae81683c85 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 16:11:43 +0800
Subject: [PATCH 44/56] updated
Signed-off-by: Toni-Jan Keith Monserrat
---
bower.json | 3 +-
firebase.json | 4 +
functions/index.js | 78 +++++++++++++++++++
src/.temp/temp.json | 4 +
src/config/dev.json | 4 +
src/firebase.js | 1 +
.../devfest-module/models/user-model.js | 7 +-
.../devfest-connect-page.js | 1 -
.../devfest-profile-page.html | 41 +++++++++-
.../devfest-profile-page.js | 61 +++++++++++++++
.../devfest-profile-page.scss | 4 +-
11 files changed, 199 insertions(+), 9 deletions(-)
diff --git a/bower.json b/bower.json
index a736c54..3e2619d 100644
--- a/bower.json
+++ b/bower.json
@@ -33,7 +33,8 @@
"iron-media-query": "PolymerElements/iron-media-query#^2.0.0",
"paper-button": "PolymerElements/paper-button#^2.0.0",
"paper-spinner": "PolymerElements/paper-spinner#^2.0.0",
- "paper-input": "PolymerElements/paper-input#^2.0.2"
+ "paper-input": "PolymerElements/paper-input#^2.0.2",
+ "paper-dialog": "PolymerElements/paper-dialog#^2.0.0"
},
"devDependencies": {
"web-component-tester": "^6.0.0"
diff --git a/firebase.json b/firebase.json
index 2b7a97d..b42160b 100644
--- a/firebase.json
+++ b/firebase.json
@@ -16,6 +16,10 @@
"source": "/scan-id",
"function": "scanId"
},
+ {
+ "source": "/disconnect",
+ "function": "disconnect"
+ },
{
"source": "/",
"destination": "/index.html"
diff --git a/functions/index.js b/functions/index.js
index 9b82b89..463c6ff 100644
--- a/functions/index.js
+++ b/functions/index.js
@@ -274,6 +274,84 @@ exports.scanId = functions.https.onRequest((req, res) => {
});
});
+exports.resetScoreOnGithubUnlink = functions.https.onRequest((req, res) => {
+
+});
+
+exports.disconnect = functions.https.onRequest((req, res) => {
+ if (!req.body.token) {
+ return res
+ .status(404)
+ .json({
+ success: false,
+ message: 'No auth or uid found'
+ });
+ }
+
+ if (!req.body.id) {
+ return res
+ .status(404)
+ .json({
+ success: false,
+ message: 'No ticket Id found'
+ });
+ }
+
+ const updates = {};
+ const promises = [];
+
+ promises.push(
+ admin.auth().verifyIdToken(req.body.token)
+ );
+
+ promises.push(
+ admin.database().ref(`v1/sponsors/query/sponsors`).once('value')
+ );
+
+ Promise.all(promises)
+ .then(results => {
+ var user = results[0];
+ var sponsors = results[1];
+
+ if (!user) {
+ var error2 = {
+ status_code: 404,
+ message: 'No User found'
+ };
+ return Promise.reject(error2);
+ }
+
+ sponsors.forEach(child => {
+ updates[`v1/sponsors/source/${child.key}/cross/scanned/${user.uid}`] = null;
+ });
+
+ updates[`v1/user/source/${user.uid}/primary/ticketEmail`] = '';
+ updates[`v1/user/source/${user.uid}/primary/ticketName`] = '';
+ updates[`v1/user/source/${user.uid}/primary/ticketNumber`] = '';
+ updates[`v1/user/source/${user.uid}/meta/accepted`] = false;
+ updates[`v1/user/source/${user.uid}/meta/score`] = 0;
+ updates[`v1/eventbrite/source/${req.body.id}`] = null;
+
+ return admin
+ .database()
+ .ref()
+ .update(updates);
+ })
+ .then(() => {
+ res
+ .status(200)
+ .json({
+ success: true
+ });
+ })
+ .catch(error => {
+ console.log(error);
+ return res
+ .status(error.status_code || 500)
+ .json(error);
+ });
+});
+
exports.connect = functions.https.onRequest((req, res) => {
if (!req.body.token) {
return res
diff --git a/src/.temp/temp.json b/src/.temp/temp.json
index b7df8ec..6c030b9 100644
--- a/src/.temp/temp.json
+++ b/src/.temp/temp.json
@@ -133,6 +133,10 @@
{
"source": "/scan-id",
"function": "scanId"
+ },
+ {
+ "source": "/disconnect",
+ "function": "disconnect"
}
],
"headers": [
diff --git a/src/config/dev.json b/src/config/dev.json
index b7df8ec..6c030b9 100644
--- a/src/config/dev.json
+++ b/src/config/dev.json
@@ -133,6 +133,10 @@
{
"source": "/scan-id",
"function": "scanId"
+ },
+ {
+ "source": "/disconnect",
+ "function": "disconnect"
}
],
"headers": [
diff --git a/src/firebase.js b/src/firebase.js
index 46c0f10..56c7d0a 100644
--- a/src/firebase.js
+++ b/src/firebase.js
@@ -16,3 +16,4 @@
const firebaseConfig = configs;
export default firebase;
export { firebaseConfig };
+
\ No newline at end of file
diff --git a/src/modules/devfest-module/models/user-model.js b/src/modules/devfest-module/models/user-model.js
index af4d762..22848a1 100644
--- a/src/modules/devfest-module/models/user-model.js
+++ b/src/modules/devfest-module/models/user-model.js
@@ -192,11 +192,8 @@ export default (superClass) => {
unlink (e) {
if (this.user && this.user.providerData && this.user.providerData.length > 1) {
- var el = e.target;
- while (!el.id) {
- el = el.parentNode;
- }
- var provider = el.id;
+ var provider = this._unlinkId;
+ console.log(provider)
unlink(this.user, provider)
.then(() => {
const user = reloadUser();
diff --git a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
index 34f30c9..1619e67 100644
--- a/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
+++ b/src/modules/devfest-module/pages/devfest-connect-page/devfest-connect-page.js
@@ -59,7 +59,6 @@ class DevfestConnectPage extends User(contentLoaderMixin(Polymer.Element)) {
headers,
body: JSON.stringify({
id: result.result,
- uid: user.uid,
token
})
}).then(res => {
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
index 85348b0..38d0642 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
@@ -35,9 +35,12 @@ Link Accounts
Unlink Accounts
+
+ Note: Unlinking your Github account will reset your score.
+
-
+
@@ -82,6 +85,11 @@
Ticket Connected
Rescan you eventbrite ticket.
+
+
+ Disconnect Ticket.
+
+
@@ -89,5 +97,36 @@
Ticket Connected
+
+
+
+ Are you sure you want to disconnect your ticket from your account? (You will not be eligible to be part of the raffle prizes and will reset your score)
+
+
+
+ Disconnect Ticket.
+
+
+
+ Cancel
+
+
+
+
+
+
+
+ Are you sure you want to unlink [[_unlinkId]] from your account? (You will not be eligible to be part of the raffle prizes and will reset your score)
+
+
+
+ Disconnect [[_unlinkId]]
+
+
+
+ Cancel
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js
index a3ef514..07637a7 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js
@@ -3,6 +3,7 @@ import 'polymer/lib/elements/dom-repeat.html';
import 'iron-icon/iron-icon.html';
import 'iron-flex-layout/iron-flex-layout.html';
import 'shadycss/apply-shim.html';
+import 'paper-dialog/paper-dialog.html';
import 'marked-element/marked-element.html';
import '../../fonts/devfest-fonts.html';
import '../../icons/devfest-icons.html';
@@ -105,6 +106,66 @@ class DevfestProfilePage extends User(contentLoaderMixin(Polymer.Element)) {
}
}
+ disconnectDialog () {
+ this.shadowRoot.querySelector('#disconnect-dialog').open();
+ }
+
+ unlinkDialog (e) {
+ var el = e.target;
+ while (!el.id) {
+ el = el.parentNode;
+ }
+ this._unlinkId = el.id;
+ this.shadowRoot.querySelector('#unlink-dialog').open();
+ }
+
+ unlink () {
+ super.unlink();
+ this.shadowRoot.querySelector('#unlink-dialog').close();
+ this._unlinkId = null;
+ }
+
+ _closeUnlinkDialog () {
+ this.shadowRoot.querySelector('#unlink-dialog').cancel();
+ this._unlinkId = null;
+ }
+
+ _disconnect () {
+ const headers = new Headers();
+ headers.append('Content-Type', 'application/json');
+ var user = this.user;
+ var profile = this.profile;
+ if (user && profile) {
+ user.getIdToken().then(token => {
+ fetch('/disconnect', {
+ method: 'POST',
+ headers,
+ body: JSON.stringify({
+ id: profile.ticketNumber,
+ token
+ })
+ }).then(res => {
+ return res.json();
+ }).then(json => {
+ if (json.success) {
+ document.querySelector('app-shell').showMessage('Disconnected', function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
+ } else {
+ if (Raven) {
+ Raven.captureException(json);
+ }
+ document.querySelector('app-shell').showMessage('Error in disconnecting ticket: ' + json.message, function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
+ }
+ this.notifyPath('profile.ticketNumber');
+ this.shadowRoot.querySelector('#disconnect-dialog').close();
+ });
+ });
+ }
+ }
+
+ _closeDisconnectDialog () {
+ this.shadowRoot.querySelector('#disconnect-dialog').cancel();
+ }
+
reload () {}
}
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss
index aeaf544..8465ae3 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.scss
@@ -78,4 +78,6 @@
text-align: left;
}
-
+.dialog-box {
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12), 0 3px 1px -2px rgba(0,0,0,.2);
+}
From 7ff130eff875ddd61d798254f7370c0086f92040 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 16:13:36 +0800
Subject: [PATCH 45/56] found it
Signed-off-by: Toni-Jan Keith Monserrat
---
functions/index.js | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/functions/index.js b/functions/index.js
index 463c6ff..effb97a 100644
--- a/functions/index.js
+++ b/functions/index.js
@@ -445,8 +445,13 @@ exports.connect = functions.https.onRequest((req, res) => {
updates[`v1/eventbrite/source/${req.body.id}/primary/displayName`] = user.displayName || user.name || user.email;
updates[`v1/eventbrite/source/${req.body.id}/primary/email`] = user.email;
updates[`v1/eventbrite/source/${req.body.id}/primary/uid`] = user.uid;
- updates[`v1/eventbrite/source/${oldTicketNumber}`] = null;
+ if (oldTicketNumber) {
+ updates[`v1/eventbrite/source/${oldTicketNumber}`] = null;
+ }
+
+
+ console.log(updates)
return admin
.database()
.ref()
From 5fdc6121ef948cb1426ce6091240e44f3084bc85 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 16:14:18 +0800
Subject: [PATCH 46/56] fixed
Signed-off-by: Toni-Jan Keith Monserrat
---
functions/index.js | 3 ---
1 file changed, 3 deletions(-)
diff --git a/functions/index.js b/functions/index.js
index effb97a..828c2ff 100644
--- a/functions/index.js
+++ b/functions/index.js
@@ -449,9 +449,6 @@ exports.connect = functions.https.onRequest((req, res) => {
if (oldTicketNumber) {
updates[`v1/eventbrite/source/${oldTicketNumber}`] = null;
}
-
-
- console.log(updates)
return admin
.database()
.ref()
From 01dfd90eabfcee71fee3c17bfbe4496712296a7a Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 16:22:57 +0800
Subject: [PATCH 47/56] added stff
Signed-off-by: Toni-Jan Keith Monserrat
---
.../devfest-profile-page/devfest-profile-page.html | 10 ++++++++++
.../pages/devfest-profile-page/devfest-profile-page.js | 1 -
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
index 38d0642..234e63a 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.html
@@ -93,6 +93,16 @@ Ticket Connected
+
+ Welcome Sponsor!
+
+
+
+ Go to Sponsor page
+
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js
index 07637a7..2d79e85 100644
--- a/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js
+++ b/src/modules/devfest-module/pages/devfest-profile-page/devfest-profile-page.js
@@ -38,7 +38,6 @@ class DevfestProfilePage extends User(contentLoaderMixin(Polymer.Element)) {
}
_setProfileImage (image) {
- console.log(image)
this.shadowRoot.querySelector('#profile-image').style.background = `url(${image}) center/cover no-repeat`;
}
From 861611ef4d63dcccbaab0ac0dca0e84be7538c42 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 16:38:20 +0800
Subject: [PATCH 48/56] added stiuff
Signed-off-by: Toni-Jan Keith Monserrat
---
src/config/prod.json | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/config/prod.json b/src/config/prod.json
index 8ca5957..0b5e945 100644
--- a/src/config/prod.json
+++ b/src/config/prod.json
@@ -19,7 +19,11 @@
"firebaseConfig": [
{
"apiKey": "AIzaSyB3VQN0MNOxcunaUKXZr54u0t6ruv2YbkE",
- "name": "DEFAULT"
+ "authDomain": "devfestph.firebaseapp.com",
+ "databaseURL": "https://devfestph.firebaseio.com",
+ "projectId": "devfestph",
+ "storageBucket": "devfestph.appspot.com",
+ "messagingSenderId": "36335134103"
}
]
},
@@ -129,6 +133,10 @@
{
"source": "/scan-id",
"function": "scanId"
+ },
+ {
+ "source": "/disconnect",
+ "function": "disconnect"
}
],
"headers": [
From 677237a8fd2e1356367201df06e10496a0525ffd Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 16:48:58 +0800
Subject: [PATCH 49/56] added stuff
Signed-off-by: Toni-Jan Keith Monserrat
---
firebase.json | 8 ++++
functions/index.js | 22 ++++++++++-
src/.temp/temp.json | 8 ++++
src/authentication/index.js | 13 ++++++-
src/config/dev.json | 8 ++++
src/config/prod.json | 8 ++++
.../content-loader/content-loader-mixin.js | 5 ++-
.../devfest-scanned-list-page.html | 39 ++++++++++++++++++-
.../devfest-scanned-list-page.js | 4 +-
9 files changed, 108 insertions(+), 7 deletions(-)
diff --git a/firebase.json b/firebase.json
index b42160b..46fbf80 100644
--- a/firebase.json
+++ b/firebase.json
@@ -20,6 +20,14 @@
"source": "/disconnect",
"function": "disconnect"
},
+ {
+ "source": "/scanned-list-for-sponsor",
+ "function": "scannedList"
+ },
+ {
+ "source": "/submit-repo",
+ "function": "submitRepo"
+ },
{
"source": "/",
"destination": "/index.html"
diff --git a/functions/index.js b/functions/index.js
index 828c2ff..4520d94 100644
--- a/functions/index.js
+++ b/functions/index.js
@@ -274,7 +274,27 @@ exports.scanId = functions.https.onRequest((req, res) => {
});
});
-exports.resetScoreOnGithubUnlink = functions.https.onRequest((req, res) => {
+exports.submitRepo = functions.https.onRequest((req, res) => {
+ if (!req.body.token) {
+ return res
+ .status(404)
+ .json({
+ success: false,
+ message: 'No auth or uid found'
+ });
+ }
+
+ if (!req.body.repository) {
+ return res
+ .status(404)
+ .json({
+ success: false,
+ message: 'No repository found'
+ });
+ }
+});
+
+exports.scannedList = functions.https.onRequest((req, res) => {
});
diff --git a/src/.temp/temp.json b/src/.temp/temp.json
index 6c030b9..386180e 100644
--- a/src/.temp/temp.json
+++ b/src/.temp/temp.json
@@ -137,6 +137,14 @@
{
"source": "/disconnect",
"function": "disconnect"
+ },
+ {
+ "source": "/scanned-list-for-sponsor",
+ "function": "scannedList"
+ },
+ {
+ "source": "/submit-repo",
+ "function": "submitRepo"
}
],
"headers": [
diff --git a/src/authentication/index.js b/src/authentication/index.js
index a781fb4..0c70d02 100644
--- a/src/authentication/index.js
+++ b/src/authentication/index.js
@@ -1,13 +1,22 @@
+import { store } from '../../core/modules/state-manager';
+
export default {
exampleAuthentication: () => {
return false;
},
isLoggedIn: () => {
- return true;
+ if (window.firebase) {
+ return window.firebase.auth().currentUser.uid;
+ }
},
isSponsor: () => {
- return true;
+ if (window.firebase) {
+ if (window.firebase.auth().currentUser.uid) {
+ var profile = store.getState().profile;
+ return profile && profile.sponsorId;
+ }
+ }
}
};
diff --git a/src/config/dev.json b/src/config/dev.json
index 6c030b9..386180e 100644
--- a/src/config/dev.json
+++ b/src/config/dev.json
@@ -137,6 +137,14 @@
{
"source": "/disconnect",
"function": "disconnect"
+ },
+ {
+ "source": "/scanned-list-for-sponsor",
+ "function": "scannedList"
+ },
+ {
+ "source": "/submit-repo",
+ "function": "submitRepo"
}
],
"headers": [
diff --git a/src/config/prod.json b/src/config/prod.json
index 0b5e945..ee34ca4 100644
--- a/src/config/prod.json
+++ b/src/config/prod.json
@@ -137,6 +137,14 @@
{
"source": "/disconnect",
"function": "disconnect"
+ },
+ {
+ "source": "/scanned-list-for-sponsor",
+ "function": "scannedList"
+ },
+ {
+ "source": "/submit-repo",
+ "function": "submitRepo"
}
],
"headers": [
diff --git a/src/modules/content-loader/content-loader-mixin.js b/src/modules/content-loader/content-loader-mixin.js
index bc00365..92aed68 100644
--- a/src/modules/content-loader/content-loader-mixin.js
+++ b/src/modules/content-loader/content-loader-mixin.js
@@ -6,8 +6,9 @@ export default (superClass) => {
super()
this.__observeProps = {}
}
- _fetchJson (content, prop) {
- fetch(`${app.contentRepo + app.branch}/${content}`)
+ _fetchJson (content, prop, own) {
+ var href = own ? `/${content}` : `${app.contentRepo + app.branch}/${content}`
+ fetch(href)
.then(res => {
return res.json()
})
diff --git a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.html b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.html
index efbfd57..ee7cb1a 100644
--- a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.html
+++ b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.html
@@ -2,8 +2,45 @@
-
+
+ List for [[profile.sponsorId]]
+
+
+
+
+ Name
+
+
+ Email
+
+
+ Scanned by
+
+
+ Scanned date
+
+
+
+
+
+
+
+ [[item.displayName]]
+
+
+ [[item.email]]
+
+
+ [[item.scannedBy]]
+
+
+ [[item.dateScanned]]
+
+
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js
index a4b7433..00fcaf8 100644
--- a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js
+++ b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js
@@ -41,7 +41,9 @@ class DevfestScannedListPage extends User(contentLoaderMixin(Polymer.Element)) {
this.reload();
}
- reload () {}
+ reload () {
+ this._fetchJson('scanned-list-for-sponsor', 'speakers');
+ }
}
window.customElements.define(DevfestScannedListPage.is, DevfestScannedListPage);
From b251abb1a6db6e37cc849cbf650686a1d6473a92 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 17:36:38 +0800
Subject: [PATCH 50/56] added working
Signed-off-by: Toni-Jan Keith Monserrat
---
core/shell/index.ejs | 2 +-
core/shell/index.js | 2 +-
src/authentication/index.js | 18 ++++++++++++++++--
.../devfest-module/models/user-model.js | 15 ++++++++++++++-
.../devfest-scanned-list-page.js | 2 +-
5 files changed, 33 insertions(+), 6 deletions(-)
diff --git a/core/shell/index.ejs b/core/shell/index.ejs
index 839a343..7ed2312 100644
--- a/core/shell/index.ejs
+++ b/core/shell/index.ejs
@@ -194,7 +194,7 @@
<% for (var i in htmlWebpackPlugin.options.config.routing) { var node = htmlWebpackPlugin.options.config.routing[i].name || htmlWebpackPlugin.options.config.routing[i] %>
- <<%= node %> route="<%= i %>"><%= node %>>
+ <<%= node %> route="<%= i %>" <% if (htmlWebpackPlugin.options.config.routing[i].auth) { %> auth="<%= htmlWebpackPlugin.options.config.routing[i].auth %>" <% } %>><%= node %>>
<% } %>
<% for (var i in htmlWebpackPlugin.options.config.httpCodes) { var node = htmlWebpackPlugin.options.config.httpCodes[i].name || htmlWebpackPlugin.options.config.httpCodes[i] %>
<<%= node %> route="<%= i %>"><%= node %>>
diff --git a/core/shell/index.js b/core/shell/index.js
index 661b812..8b17ebc 100644
--- a/core/shell/index.js
+++ b/core/shell/index.js
@@ -261,7 +261,7 @@ class AppShell extends ReduxMixin(QueryParamsMixin(LocationMixin(Polymer.Element
_checkAuth (route) {
if (this._routes[route] && this._routes[route].auth && auth[this._routes[route].auth]) {
if (auth[this._routes[route].auth] instanceof Promise) {
- auth[this._routes[route].auth]()
+ auth[this._routes[route].auth]
.then((res) => {
if (res) {
this._loadPage(route)
diff --git a/src/authentication/index.js b/src/authentication/index.js
index 0c70d02..57e8083 100644
--- a/src/authentication/index.js
+++ b/src/authentication/index.js
@@ -1,5 +1,17 @@
import { store } from '../../core/modules/state-manager';
+const isSponsor = new Promise(resolve => {
+ console.log(window.firebase)
+ if (window.firebase) {
+ if (window.firebase.auth().currentUser.uid) {
+ var profile = store.getState().profile;
+ console.log(profile)
+ return resolve(profile && profile.sponsorId);
+ }
+ }
+ resolve(false)
+})
+
export default {
exampleAuthentication: () => {
return false;
@@ -11,11 +23,13 @@ export default {
}
},
+ // isSponsor: isSponsor
+
isSponsor: () => {
if (window.firebase) {
if (window.firebase.auth().currentUser.uid) {
- var profile = store.getState().profile;
- return profile && profile.sponsorId;
+ var user = store.getState().user;
+ return user && user.profile && user.profile.sponsorId;
}
}
}
diff --git a/src/modules/devfest-module/models/user-model.js b/src/modules/devfest-module/models/user-model.js
index 22848a1..c5d0fae 100644
--- a/src/modules/devfest-module/models/user-model.js
+++ b/src/modules/devfest-module/models/user-model.js
@@ -79,6 +79,9 @@ const userState = (user) => {
type: USER_ACTION.UPDATE,
user
});
+
+ const shell = document.querySelector('app-shell');
+ shell._pathChanged(shell.path);
};
observeAuth(userState);
@@ -101,6 +104,17 @@ export default (superClass) => {
};
}
+ static get observers () {
+ return [
+ '_checkSponsorIdReloadPage(profile.sponsorId)'
+ ];
+ }
+
+ _checkSponsorIdReloadPage (sponsorId) {
+ const shell = document.querySelector('app-shell');
+ shell._pathChanged(shell.path);
+ }
+
_userChanged (user) {
if (user) {
this.dispatch({
@@ -193,7 +207,6 @@ export default (superClass) => {
unlink (e) {
if (this.user && this.user.providerData && this.user.providerData.length > 1) {
var provider = this._unlinkId;
- console.log(provider)
unlink(this.user, provider)
.then(() => {
const user = reloadUser();
diff --git a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js
index 00fcaf8..3871165 100644
--- a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js
+++ b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js
@@ -42,7 +42,7 @@ class DevfestScannedListPage extends User(contentLoaderMixin(Polymer.Element)) {
}
reload () {
- this._fetchJson('scanned-list-for-sponsor', 'speakers');
+ this._fetchJson('scanned-list-for-sponsor', 'speakers', true);
}
}
From 64065e65e0db8ad3cb3fd64ad3b1f94638dea2c2 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 18:07:42 +0800
Subject: [PATCH 51/56] addded stuff
Signed-off-by: Toni-Jan Keith Monserrat
---
functions/index.js | 94 ++++++++++++++++++-
.../devfest-module/models/user-model.js | 8 +-
.../devfest-scanned-list-page.html | 46 +++++----
.../devfest-scanned-list-page.js | 39 +++++++-
.../devfest-scanned-list-page.scss | 26 +++++
5 files changed, 189 insertions(+), 24 deletions(-)
diff --git a/functions/index.js b/functions/index.js
index 4520d94..8352598 100644
--- a/functions/index.js
+++ b/functions/index.js
@@ -267,7 +267,7 @@ exports.scanId = functions.https.onRequest((req, res) => {
});
})
.catch(error => {
- console.log(error)
+ console.log(error);
return res
.status(error.status_code || 500)
.json(error);
@@ -295,7 +295,99 @@ exports.submitRepo = functions.https.onRequest((req, res) => {
});
exports.scannedList = functions.https.onRequest((req, res) => {
+ if (!req.body.token) {
+ return res
+ .status(404)
+ .json({
+ success: false,
+ message: 'No auth or uid found'
+ });
+ }
+
+ if (!req.body.company) {
+ return res
+ .status(404)
+ .json({
+ success: false,
+ message: 'No repository found'
+ });
+ }
+
+ const updates = {};
+ const promises = [];
+
+ promises.push(
+ admin.auth().verifyIdToken(req.body.token)
+ );
+
+ promises.push(
+ admin.database().ref(`v1/sponsors/source/${req.body.company}/cross/sponsorUsers/`)
+ .once('value')
+ );
+
+ promises.push(
+ admin.database().ref(`v1/sponsors/source/${req.body.company}/cross/scanned/`)
+ .once('value')
+ );
+
+ Promise.all(promises)
+ .then(results => {
+ var user = results[0];
+ var sponsor = results[1];
+ var scanned = results[2];
+ var list = [];
+
+ if (!user) {
+ var error2 = {
+ status_code: 404,
+ message: 'No User found'
+ };
+ return Promise.reject(error2);
+ }
+
+ if (!sponsor.exists()) {
+ var error3 = {
+ status_code: 404,
+ message: 'No Sponsor found for the given company ID'
+ };
+ return Promise.reject(error3);
+ }
+ if (!sponsor.val()[user.uid].value) {
+ var error5 = {
+ status_code: 403,
+ message: 'Your user is not connected to this sponsor'
+ };
+ return Promise.reject(error5);
+ }
+
+ scanned.forEach(child => {
+ list.push({
+ $key: child.key,
+ displayName: child.val().displayName,
+ email: child.val().email,
+ scannedBy: child.val().scannedBy,
+ dateScanned: child.val().dateScanned
+ });
+ });
+
+ list.sort((a, b) => {
+ return a.dateScanned - b.dateScanned;
+ });
+
+ return res
+ .status(200)
+ .json({
+ success: true,
+ list
+ });
+ })
+ .catch(error => {
+ console.log(error);
+ return res
+ .status(error.status_code || 500)
+ .json(error);
+ });
});
exports.disconnect = functions.https.onRequest((req, res) => {
diff --git a/src/modules/devfest-module/models/user-model.js b/src/modules/devfest-module/models/user-model.js
index c5d0fae..9f86f69 100644
--- a/src/modules/devfest-module/models/user-model.js
+++ b/src/modules/devfest-module/models/user-model.js
@@ -111,8 +111,12 @@ export default (superClass) => {
}
_checkSponsorIdReloadPage (sponsorId) {
- const shell = document.querySelector('app-shell');
- shell._pathChanged(shell.path);
+ console.log(sponsorId, this.__sponsorId)
+ if (sponsorId !== this.__sponsorId) {
+ const shell = document.querySelector('app-shell');
+ shell._pathChanged(shell.path);
+ this.__sponsorId = sponsorId;
+ }
}
_userChanged (user) {
diff --git a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.html b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.html
index ee7cb1a..05e4823 100644
--- a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.html
+++ b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.html
@@ -3,44 +3,50 @@
- List for [[profile.sponsorId]]
+ List for attendees scanned by: [[profile.sponsorId]]
-
+
-
-
+
+
Name
-
-
+
+
Email
-
-
+
+
Scanned by
-
-
+
+
Scanned date
-
-
+
+
-
-
-
-
+
+
+
+
[[item.displayName]]
-
+
[[item.email]]
-
+
[[item.scannedBy]]
-
- [[item.dateScanned]]
+
+ [[_renderDate(item.dateScanned)]]
+
+
+
+ Go back
+
+
diff --git a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js
index 3871165..276ccd5 100644
--- a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js
+++ b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.js
@@ -42,7 +42,44 @@ class DevfestScannedListPage extends User(contentLoaderMixin(Polymer.Element)) {
}
reload () {
- this._fetchJson('scanned-list-for-sponsor', 'speakers', true);
+ const headers = new Headers();
+ headers.append('Content-Type', 'application/json');
+ var user = this.user;
+ var profile = this.profile;
+ if (user && profile) {
+ user.getIdToken().then(token => {
+ fetch('/scanned-list-for-sponsor', {
+ method: 'POST',
+ headers,
+ body: JSON.stringify({
+ uid: user.uid,
+ company: profile.sponsorId,
+ token
+ })
+ }).then(res => {
+ return res.json();
+ }).then(json => {
+ if (json.success) {
+ this.scanned = json.list;
+ } else {
+ if (Raven) {
+ Raven.captureException(json);
+ }
+ document.querySelector('app-shell').showMessage('Error in scanning: ' + json.message, function () { document.querySelector('app-shell').closeToast(); }, 'Close', null, 10000);
+ }
+ });
+ });
+ }
+ // this._fetchJson('scanned-list-for-sponsor', 'speakers', true);
+ }
+
+ _renderDate (d) {
+ var date = d;
+ if (typeof d === 'object' && d.value) {
+ date = d.value;
+ }
+ var nd = new Date(date);
+ return nd.toLocaleDateString() + ' - ' + nd.toLocaleTimeString();
}
}
diff --git a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.scss b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.scss
index 4c50add..38f0fed 100644
--- a/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.scss
+++ b/src/modules/devfest-module/pages/devfest-scanned-list-page/devfest-scanned-list-page.scss
@@ -1,3 +1,29 @@
@import '../../styles/components/host.scss';
@import '../../styles/components/typography.scss';
@import '../../styles/components/section.scss';
+
+.table {
+ padding: 20px;
+ width: 100%;
+}
+
+.table-body {
+ text-align: left;
+}
+
+.table-cell {
+ padding: 5px;
+ border-bottom: 1px solid grey;
+}
+
+.hide-on-small {
+ @media screen and (max-width: 700px){
+ display: none;
+ }
+}
+
+.make-small {
+ @media screen and (max-width: 700px){
+ font-size: 10px;
+ }
+}
\ No newline at end of file
From df846acdb2a07630907e2647c45803239c8406ee Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Thu, 12 Oct 2017 19:30:17 +0800
Subject: [PATCH 52/56] added stuff
Signed-off-by: Toni-Jan Keith Monserrat
---
firebase.json | 12 +++++
gulp/utils/create-firebase-json.js | 14 ++++++
src/authentication/index.js | 14 +-----
.../codelab-block/codelab-block.html | 9 ++++
.../components/codelab-block/codelab-block.js | 22 +++++++++
.../codelab-block/codelab-block.scss | 2 +
.../components/codelab-item/codelab-item.html | 9 ++++
.../components/codelab-item/codelab-item.js | 22 +++++++++
.../components/codelab-item/codelab-item.scss | 2 +
.../components/codelab-step/codelab-step.html | 9 ++++
.../components/codelab-step/codelab-step.js | 22 +++++++++
.../components/codelab-step/codelab-step.scss | 2 +
.../devfest-module/models/user-model.js | 1 -
.../devfest-codelabs-page.html | 25 ++++++++++-
.../devfest-codelabs-page.js | 45 ++++++++++++++-----
.../devfest-codelabs-page.scss | 11 +++++
.../devfest-sessions-page.html | 3 ++
.../devfest-sessions-page.js | 1 -
.../devfest-sessions-page.scss | 10 +++++
19 files changed, 208 insertions(+), 27 deletions(-)
create mode 100644 src/modules/devfest-module/components/codelab-block/codelab-block.html
create mode 100644 src/modules/devfest-module/components/codelab-block/codelab-block.js
create mode 100644 src/modules/devfest-module/components/codelab-block/codelab-block.scss
create mode 100644 src/modules/devfest-module/components/codelab-item/codelab-item.html
create mode 100644 src/modules/devfest-module/components/codelab-item/codelab-item.js
create mode 100644 src/modules/devfest-module/components/codelab-item/codelab-item.scss
create mode 100644 src/modules/devfest-module/components/codelab-step/codelab-step.html
create mode 100644 src/modules/devfest-module/components/codelab-step/codelab-step.js
create mode 100644 src/modules/devfest-module/components/codelab-step/codelab-step.scss
diff --git a/firebase.json b/firebase.json
index 46fbf80..7286178 100644
--- a/firebase.json
+++ b/firebase.json
@@ -76,6 +76,18 @@
"source": "/codelabs/**/**/**",
"destination": "/index.html"
},
+ {
+ "source": "/codelabs/**/**",
+ "destination": "/index.html"
+ },
+ {
+ "source": "/codelabs/**",
+ "destination": "/index.html"
+ },
+ {
+ "source": "/codelabs",
+ "destination": "/index.html"
+ },
{
"source": "/connect-ticket",
"destination": "/index.html"
diff --git a/gulp/utils/create-firebase-json.js b/gulp/utils/create-firebase-json.js
index 0d126a8..6899cf2 100644
--- a/gulp/utils/create-firebase-json.js
+++ b/gulp/utils/create-firebase-json.js
@@ -23,6 +23,20 @@ module.exports = (env, dest) => {
source: i.split('/').map(path => (path.indexOf(':') === 0 ? '**' : path)).join('/'),
destination: '/index.html'
})
+ var arr = i.split('/')
+
+ while(arr.length > 0) {
+ if (arr[arr.length - 1].indexOf(':') === 0 && arr[arr.length -1].indexOf('?') === arr[arr.length - 1].length - 1) {
+ arr.pop()
+ firebase.hosting.rewrites.push({
+ source: arr.map(path => (path.indexOf(':') === 0 ? '**' : path)).join('/'),
+ destination: '/index.html'
+ })
+ } else {
+ break;
+ }
+ }
+
}
firebase.hosting.public = dest
diff --git a/src/authentication/index.js b/src/authentication/index.js
index 57e8083..19b3d19 100644
--- a/src/authentication/index.js
+++ b/src/authentication/index.js
@@ -1,17 +1,5 @@
import { store } from '../../core/modules/state-manager';
-const isSponsor = new Promise(resolve => {
- console.log(window.firebase)
- if (window.firebase) {
- if (window.firebase.auth().currentUser.uid) {
- var profile = store.getState().profile;
- console.log(profile)
- return resolve(profile && profile.sponsorId);
- }
- }
- resolve(false)
-})
-
export default {
exampleAuthentication: () => {
return false;
@@ -19,7 +7,7 @@ export default {
isLoggedIn: () => {
if (window.firebase) {
- return window.firebase.auth().currentUser.uid;
+ return window.firebase.auth() && window.firebase.auth().currentUser && window.firebase.auth().currentUser.uid;
}
},
diff --git a/src/modules/devfest-module/components/codelab-block/codelab-block.html b/src/modules/devfest-module/components/codelab-block/codelab-block.html
new file mode 100644
index 0000000..5cf29a6
--- /dev/null
+++ b/src/modules/devfest-module/components/codelab-block/codelab-block.html
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/devfest-module/components/codelab-block/codelab-block.js b/src/modules/devfest-module/components/codelab-block/codelab-block.js
new file mode 100644
index 0000000..7899312
--- /dev/null
+++ b/src/modules/devfest-module/components/codelab-block/codelab-block.js
@@ -0,0 +1,22 @@
+import 'polymer/polymer-element.html';
+import 'shadycss/apply-shim.html';
+import '../../fonts/devfest-fonts.html';
+import '../../icons/devfest-icons.html';
+import './codelab-block.html';
+import marked from 'marked';
+window.marked = window.marked || marked;
+
+const {Polymer} = window;
+
+class CodelabBlock extends Polymer.Element {
+ static get is () { return 'codelab-block'; }
+
+ static get properties () {
+ return {
+ };
+ }
+}
+
+window.customElements.define(CodelabBlock.is, CodelabBlock);
+
+export default CodelabBlock;
diff --git a/src/modules/devfest-module/components/codelab-block/codelab-block.scss b/src/modules/devfest-module/components/codelab-block/codelab-block.scss
new file mode 100644
index 0000000..cf91b23
--- /dev/null
+++ b/src/modules/devfest-module/components/codelab-block/codelab-block.scss
@@ -0,0 +1,2 @@
+@import '../../styles/components/host.scss';
+@import '../../styles/components/typography.scss';
diff --git a/src/modules/devfest-module/components/codelab-item/codelab-item.html b/src/modules/devfest-module/components/codelab-item/codelab-item.html
new file mode 100644
index 0000000..3f1c35b
--- /dev/null
+++ b/src/modules/devfest-module/components/codelab-item/codelab-item.html
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/devfest-module/components/codelab-item/codelab-item.js b/src/modules/devfest-module/components/codelab-item/codelab-item.js
new file mode 100644
index 0000000..7ac39e5
--- /dev/null
+++ b/src/modules/devfest-module/components/codelab-item/codelab-item.js
@@ -0,0 +1,22 @@
+import 'polymer/polymer-element.html';
+import 'shadycss/apply-shim.html';
+import '../../fonts/devfest-fonts.html';
+import '../../icons/devfest-icons.html';
+import './codelab-item.html';
+import marked from 'marked';
+window.marked = window.marked || marked;
+
+const {Polymer} = window;
+
+class CodelabItem extends Polymer.Element {
+ static get is () { return 'codelab-item'; }
+
+ static get properties () {
+ return {
+ };
+ }
+}
+
+window.customElements.define(CodelabItem.is, CodelabItem);
+
+export default CodelabItem;
diff --git a/src/modules/devfest-module/components/codelab-item/codelab-item.scss b/src/modules/devfest-module/components/codelab-item/codelab-item.scss
new file mode 100644
index 0000000..cf91b23
--- /dev/null
+++ b/src/modules/devfest-module/components/codelab-item/codelab-item.scss
@@ -0,0 +1,2 @@
+@import '../../styles/components/host.scss';
+@import '../../styles/components/typography.scss';
diff --git a/src/modules/devfest-module/components/codelab-step/codelab-step.html b/src/modules/devfest-module/components/codelab-step/codelab-step.html
new file mode 100644
index 0000000..410c368
--- /dev/null
+++ b/src/modules/devfest-module/components/codelab-step/codelab-step.html
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/devfest-module/components/codelab-step/codelab-step.js b/src/modules/devfest-module/components/codelab-step/codelab-step.js
new file mode 100644
index 0000000..a3c19aa
--- /dev/null
+++ b/src/modules/devfest-module/components/codelab-step/codelab-step.js
@@ -0,0 +1,22 @@
+import 'polymer/polymer-element.html';
+import 'shadycss/apply-shim.html';
+import '../../fonts/devfest-fonts.html';
+import '../../icons/devfest-icons.html';
+import './codelab-step.html';
+import marked from 'marked';
+window.marked = window.marked || marked;
+
+const {Polymer} = window;
+
+class CodelabStep extends Polymer.Element {
+ static get is () { return 'codelab-step'; }
+
+ static get properties () {
+ return {
+ };
+ }
+}
+
+window.customElements.define(CodelabStep.is, CodelabStep);
+
+export default CodelabStep;
diff --git a/src/modules/devfest-module/components/codelab-step/codelab-step.scss b/src/modules/devfest-module/components/codelab-step/codelab-step.scss
new file mode 100644
index 0000000..cf91b23
--- /dev/null
+++ b/src/modules/devfest-module/components/codelab-step/codelab-step.scss
@@ -0,0 +1,2 @@
+@import '../../styles/components/host.scss';
+@import '../../styles/components/typography.scss';
diff --git a/src/modules/devfest-module/models/user-model.js b/src/modules/devfest-module/models/user-model.js
index 9f86f69..93c66e6 100644
--- a/src/modules/devfest-module/models/user-model.js
+++ b/src/modules/devfest-module/models/user-model.js
@@ -111,7 +111,6 @@ export default (superClass) => {
}
_checkSponsorIdReloadPage (sponsorId) {
- console.log(sponsorId, this.__sponsorId)
if (sponsorId !== this.__sponsorId) {
const shell = document.querySelector('app-shell');
shell._pathChanged(shell.path);
diff --git a/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.html b/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.html
index b6ac2f4..5930373 100644
--- a/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.html
+++ b/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.html
@@ -2,9 +2,30 @@
-
+
+
+
+
Welcome to Codelabs!
+
+ GDG Devfest 2017 Codelabs is a curated list of a guided, tutorial, hands-on coding experience handpicked by volunteers from the Google Developers Codelabs.
+ Most codelabs will step you through the process of building a small application, or adding a new feature to an existing application.
+ Connect your Github account , if you haven't, to be eligible to our raffle at the end of the event.
+
+
+
-
+
+
+
+
+ [[item.$key]]
+
+
+
+
+
diff --git a/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js b/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js
index 2d7c5d7..8cf4e4c 100644
--- a/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js
+++ b/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.js
@@ -20,26 +20,51 @@ class DevfestCodelabsPage extends contentLoaderMixin(Polymer.Element) {
static get properties () {
return {
- perks: {
- type: Array,
- value: []
+ codelabs: {
+ type: Array
},
- details: {
- type: Array,
- value: []
- },
- payment: {
- type: Array,
- value: []
+ codelabType: {
+ type: String,
+ value: 'all'
}
};
}
+ static get observers () {
+ return [
+ '_changeListCodelab(codelabType, params.id, params.page)'
+ ];
+ }
+
connectedCallback () {
super.connectedCallback();
this.reload();
}
+ _changeListCodelab (codelabType, id, page) {
+ console.log(codelabType, id, page)
+ if (this._codelabs) {
+ this._codelabs.off();
+ }
+
+ if (codelabType === 'done') {
+
+ } if (codelabType === 'exer') {
+
+ } else {
+ this._codelabs = firebase.database().ref(`v1/codelabs/query/${codelabType}`)
+ this._codelabs.on('value', (snapshot) => {
+ var list = [];
+ snapshot.forEach(child => {
+ list.push({
+ $key: child.key
+ });
+ });
+ this.codelabs = list;
+ });
+ }
+ }
+
reload () {}
}
diff --git a/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.scss b/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.scss
index 4c50add..a9f25ef 100644
--- a/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.scss
+++ b/src/modules/devfest-module/pages/devfest-codelabs-page/devfest-codelabs-page.scss
@@ -1,3 +1,14 @@
@import '../../styles/components/host.scss';
@import '../../styles/components/typography.scss';
@import '../../styles/components/section.scss';
+
+.banner {
+ padding: 40px 0 48px 0;
+ box-shadow: 0px 3px 6px -3px #BDBDBD;
+}
+
+.banner-text {
+ margin: 0 auto;
+ width: 90vw;
+ max-width: 1024px;
+}
\ No newline at end of file
diff --git a/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.html b/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.html
index 05874f3..193389c 100644
--- a/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.html
+++ b/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.html
@@ -32,6 +32,9 @@
[[_getSpeaker(session.session, sessions, speakers)]]
+
+ Room: [[session.room]]
+
diff --git a/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.js b/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.js
index 4e54c17..aaa5436 100644
--- a/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.js
+++ b/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.js
@@ -25,7 +25,6 @@ class DevfestSessionsPage extends contentLoaderMixin(Polymer.Element) {
connectedCallback () {
super.connectedCallback()
this.reload()
- console.log(document.referrer)
}
reload () {
diff --git a/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.scss b/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.scss
index c5e8a55..51366e4 100644
--- a/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.scss
+++ b/src/modules/devfest-module/pages/devfest-sessions-page/devfest-sessions-page.scss
@@ -22,6 +22,12 @@
padding: 20px;
// border-right: 1px solid #666;
width: 100px;
+
+ @media screen and (max-width: 800px){
+ padding-left: 0px;
+ width: auto;
+ border-bottom: 1px solid rgba(0,0,0, .2)
+ }
}
.time-number {
@@ -39,6 +45,10 @@
.schedule-item {
@apply --layout-flex;
+
+ @media screen and (max-width: 800px){
+ padding-left: 20px;
+ }
}
.session-item {
From f6c180feb9449d5264a0b55f257582b695728c77 Mon Sep 17 00:00:00 2001
From: Toni-Jan Keith Monserrat
Date: Fri, 13 Oct 2017 00:31:10 +0800
Subject: [PATCH 53/56] added stuff
Signed-off-by: Toni-Jan Keith Monserrat
---
bower.json | 3 +-
functions/index.js | 165 +++++++++++++++++-
functions/package.json | 1 +
src/images/codelabs/android.svg | 1 +
src/images/codelabs/assistant.png | Bin 0 -> 1128 bytes
src/images/codelabs/cloud.png | Bin 0 -> 9426 bytes
src/images/codelabs/firebase.png | Bin 0 -> 27037 bytes
src/images/codelabs/tensorflow.png | Bin 0 -> 2949 bytes
src/images/codelabs/vr.svg | 1 +
src/images/codelabs/web.svg | 1 +
.../codelab-block/codelab-block.html | 55 +++++-
.../components/codelab-block/codelab-block.js | 109 +++++++++++-
.../codelab-block/codelab-block.scss | 144 ++++++++++++++-
.../components/codelab-item/codelab-item.html | 22 ++-
.../components/codelab-item/codelab-item.js | 52 +++++-
.../components/codelab-item/codelab-item.scss | 67 ++++++-
.../devfest-module/icons/devfest-icons.html | 2 +
.../devfest-codelabs-page.html | 6 +-
.../devfest-codelabs-page.js | 125 ++++++++++++-
.../devfest-codelabs-page.scss | 12 ++
.../devfest-scores-page.html | 10 ++
.../devfest-scores-page.js | 48 +++++
.../devfest-scores-page.scss | 3 +
23 files changed, 810 insertions(+), 17 deletions(-)
create mode 100644 src/images/codelabs/android.svg
create mode 100644 src/images/codelabs/assistant.png
create mode 100644 src/images/codelabs/cloud.png
create mode 100644 src/images/codelabs/firebase.png
create mode 100644 src/images/codelabs/tensorflow.png
create mode 100644 src/images/codelabs/vr.svg
create mode 100644 src/images/codelabs/web.svg
create mode 100644 src/modules/devfest-module/pages/devfest-scores-page/devfest-scores-page.html
create mode 100644 src/modules/devfest-module/pages/devfest-scores-page/devfest-scores-page.js
create mode 100644 src/modules/devfest-module/pages/devfest-scores-page/devfest-scores-page.scss
diff --git a/bower.json b/bower.json
index 3e2619d..1068799 100644
--- a/bower.json
+++ b/bower.json
@@ -34,7 +34,8 @@
"paper-button": "PolymerElements/paper-button#^2.0.0",
"paper-spinner": "PolymerElements/paper-spinner#^2.0.0",
"paper-input": "PolymerElements/paper-input#^2.0.2",
- "paper-dialog": "PolymerElements/paper-dialog#^2.0.0"
+ "paper-dialog": "PolymerElements/paper-dialog#^2.0.0",
+ "paper-fab": "PolymerElements/paper-fab#^2.0.0"
},
"devDependencies": {
"web-component-tester": "^6.0.0"
diff --git a/functions/index.js b/functions/index.js
index 8352598..a1af04d 100644
--- a/functions/index.js
+++ b/functions/index.js
@@ -3,6 +3,10 @@ const admin = require('firebase-admin');
const fetch = require('node-fetch');
const fs = require('fs');
const path = require('path');
+var Chance = require('chance');
+
+// Instantiate Chance so it can be used
+var chance = new Chance();
if (fs.existsSync(path.resolve(__dirname, './firebase-config.json'))) {
var serviceAccount = require('./firebase-config.json');
@@ -48,6 +52,25 @@ exports.createProfile = functions.auth.user().onCreate(event => {
// ...
});
+exports.updateScore = functions.database.ref('v1/user/source/{userId}/cross/codelabs')
+ .onWrite(event => {
+ var score = 0;
+ var updates = {};
+ event.data.forEach(child => {
+ updates[`v1/codelabs/source/${child.key}/cross/scores/${event.params.userId}/value`] = child.val().value;
+ if (updates[`v1/codelabtype/source/${child.val().type}/cross/scores/${event.params.userId}/value`]) {
+ updates[`v1/codelabtype/source/${child.val().type}/cross/scores/${event.params.userId}/value`] += child.val().value;
+ } else {
+ updates[`v1/codelabtype/source/${child.val().type}/cross/scores/${event.params.userId}/value`] = child.val().value;
+ }
+ score = score + child.val().value;
+ });
+ updates[`v1/user/source/${event.params.userId}/meta/score`] = score;
+ updates[`v1/user/query/score/${event.params.userId}/value`] = score;
+
+ return admin.database().ref().update(updates);
+ });
+
exports.validate = functions.https.onRequest((req, res) => {
if (!req.body.token) {
return res
@@ -284,7 +307,7 @@ exports.submitRepo = functions.https.onRequest((req, res) => {
});
}
- if (!req.body.repository) {
+ if (!req.body.repo) {
return res
.status(404)
.json({
@@ -292,6 +315,144 @@ exports.submitRepo = functions.https.onRequest((req, res) => {
message: 'No repository found'
});
}
+
+ if (!req.body.codelabId) {
+ return res
+ .status(404)
+ .json({
+ success: false,
+ message: 'No codelabId found'
+ });
+ }
+
+ const github = 'https://raw.githubusercontent.com';
+ const updates = {};
+ const promises = [];
+
+ admin.auth().verifyIdToken(req.body.token)
+ .then(user => {
+ if (!user) {
+ var error2 = {
+ status_code: 404,
+ message: 'No User found'
+ };
+ return Promise.reject(error2);
+ }
+
+ promises.push(
+ Promise.resolve(user)
+ );
+
+ promises.push(
+ admin.database().ref(`v1/user/source/${user.uid}/primary/githubName`).once('value')
+ );
+
+ promises.push(
+ admin.database().ref(`v1/user/source/${user.uid}/meta/accepted`).once('value')
+ );
+
+ promises.push(
+ admin.database().ref(`v1/codelabChecker/source/${req.body.codelabId}/primary/files`).once('value')
+ );
+
+ promises.push(
+ admin.database().ref(`v1/codelabs/source/${req.body.codelabId}/meta/type`).once('value')
+ );
+
+ return Promise.all(promises);
+ })
+ .then(results => {
+ var user = results[0];
+ var githubName = results[1].val();
+ var accepted = results[2].val();
+ var codelab = results[3];
+ var typeSnapshot = results[4];
+ var newPromises = [];
+
+ var multiplier = accepted ? 2 : 1;
+
+ if (!githubName) {
+ var error2 = {
+ status_code: 404,
+ message: 'No Github account found'
+ };
+ return Promise.reject(error2);
+ }
+
+ if (!codelab.exists()) {
+ var error3 = {
+ status_code: 404,
+ message: 'No codelab id found'
+ };
+ return Promise.reject(error3);
+ }
+
+ if (!typeSnapshot.exists()) {
+ var error4 = {
+ status_code: 404,
+ message: 'No codelab type found'
+ };
+ return Promise.reject(error4);
+ }
+
+ newPromises.push(Promise.resolve(user));
+ newPromises.push(Promise.resolve(multiplier));
+ var list = [];
+ codelab.forEach(child => {
+ list.push(child.val());
+ });
+
+ const index = chance.integer({min: 0, max: list.length - 1});
+ newPromises.push(Promise.resolve(list[index].strings));
+ console.log(`${github}/${githubName}/${req.body.repo}/master${list[index].filename}`);
+ newPromises.push(fetch(`${github}/${githubName}/${req.body.repo}/master${list[index].filename}`).then(response => response.text()));
+ newPromises.push(Promise.resolve(typeSnapshot.val()));
+
+ return Promise.all(newPromises);
+ })
+ .then(results => {
+ var user = results[0];
+ var multiplier = results[1];
+ var strings = results[2];
+ var string = results[3];
+ var type = results[4];
+ var score = 0;
+
+ if (string.indexOf('404: Not Found') < 0) {
+ score = 5 * multiplier;
+ }
+
+ if (strings && strings.length) {
+ for (var i in strings) {
+ // console.log(strings[i], string.indexOf(strings[i]))
+ if (string.indexOf(strings[i]) >= 0) {
+ score = score + (multiplier * 1);
+ }
+ }
+ }
+
+ updates[`v1/user/source/${user.uid}/cross/codelabs/${req.body.codelabId}/value`] = score;
+ updates[`v1/user/source/${user.uid}/cross/codelabs/${req.body.codelabId}/type`] = type;
+
+ return admin.database().ref().update(updates);
+ // console.log(score);
+
+ // return Promise.resolve();
+ })
+ .then(() => {
+ res
+ .status(200)
+ .json({
+ success: true
+ });
+ })
+ .catch(error => {
+ console.log(error);
+ return res
+ .status(error.status_code || 500)
+ .json(error);
+ });
+ // https://raw.githubusercontent.com/
});
exports.scannedList = functions.https.onRequest((req, res) => {
@@ -313,7 +474,6 @@ exports.scannedList = functions.https.onRequest((req, res) => {
});
}
- const updates = {};
const promises = [];
promises.push(
@@ -442,6 +602,7 @@ exports.disconnect = functions.https.onRequest((req, res) => {
updates[`v1/user/source/${user.uid}/primary/ticketNumber`] = '';
updates[`v1/user/source/${user.uid}/meta/accepted`] = false;
updates[`v1/user/source/${user.uid}/meta/score`] = 0;
+ updates[`v1/user/source/${user.uid}/cross/codelabs`] = null;
updates[`v1/eventbrite/source/${req.body.id}`] = null;
return admin
diff --git a/functions/package.json b/functions/package.json
index 7130698..f473044 100644
--- a/functions/package.json
+++ b/functions/package.json
@@ -2,6 +2,7 @@
"name": "functions",
"description": "Cloud Functions for Firebase",
"dependencies": {
+ "chance": "^1.0.11",
"firebase-admin": "~5.4.0",
"firebase-functions": "^0.7.0",
"node-fetch": "^1.7.3"
diff --git a/src/images/codelabs/android.svg b/src/images/codelabs/android.svg
new file mode 100644
index 0000000..f810b33
--- /dev/null
+++ b/src/images/codelabs/android.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/images/codelabs/assistant.png b/src/images/codelabs/assistant.png
new file mode 100644
index 0000000000000000000000000000000000000000..e978afc67612ebd0c4287531b9dea5f0737213f4
GIT binary patch
literal 1128
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
TO4`4_N&tCj6=02|amarG-Y#s|
literal 0
HcmV?d00001
diff --git a/src/images/codelabs/firebase.png b/src/images/codelabs/firebase.png
new file mode 100644
index 0000000000000000000000000000000000000000..140d5a50cc8eeab57880d2cba702b7acdbffa408
GIT binary patch
literal 27037
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