1
1
2
2
console . log ( "Fullstack frontend loaded" ) ;
3
3
4
- var images = [
5
- "https://static.wikia.nocookie.net/mlp/images/b/b2/Pinkie_Pie_ID_S4E11.png" ,
6
- "https://media.karousell.com/media/photos/products/2017/02/02/lego_batman_lobster_figure_1486041715_4eed985e.jpg" ,
7
- "https://static.dw.com/image/18463014_303.jpg" ,
8
- "https://static.wikia.nocookie.net/mlp/images/b/b2/Pinkie_Pie_ID_S4E11.png"
9
- ]
10
-
11
4
var users = [ ]
5
+ var logged_in = null
6
+ var h_row1 = null
7
+
8
+ var copter_img = "https://www.puppentoys.com/WebRoot/ce_es/Shops/940395445/5320/45C4/8DBF/84BC/3270/C0A8/8010/C606/A5935-2.jpg"
9
+ var nocopter_img = "http://www.skyblue-pink.com/wp-content/uploads/2013/08/sadbatman.jpg"
12
10
13
11
function load_copter ( ) {
14
- var copter_img = "https://www.puppentoys.com/WebRoot/ce_es/Shops/940395445/5320/45C4/8DBF/84BC/3270/C0A8/8010/C606/A5935-2.jpg"
15
- var nocopter_img = "http://www.skyblue-pink.com/wp-content/uploads/2013/08/sadbatman.jpg"
16
12
row = this . parentElement . parentElement ;
17
- copter = Boolean ( users [ row . id - 1 ] [ 2 ] ) ;
18
- console . log ( `Loading copter for ${ row . id } . Has ponycopter? ${ users [ row . id - 1 ] [ 2 ] } ` ) ;
13
+ user_id = row . id ;
14
+ user = users [ user_id ] ;
15
+ console . log ( `Loading copter for user ${ user_id } ` )
16
+ copter = Boolean ( user [ 3 ] ) ;
19
17
var h_img = row . querySelector ( ".card-image" ) ;
20
18
h_img . src = copter ? copter_img : nocopter_img ;
21
19
}
22
20
21
+ function remove_users ( ) {
22
+ var h_list = document . getElementById ( "user_list" ) ;
23
+ var rows = h_list . querySelectorAll ( ".row" ) ;
24
+ console . log ( `Removign users: ${ rows } ` ) ;
25
+ rows . forEach ( node => {
26
+ console . log ( `removing row ${ node . id } ` ) ;
27
+ node . remove ( ) ;
28
+ } ) ;
29
+ }
30
+
23
31
function render_users ( data ) {
24
32
console . log ( `Rendering ${ data } ` )
33
+
25
34
var h_list = document . getElementById ( "user_list" ) ;
26
- var h_row1 = document . getElementById ( "first_row" ) ;
35
+ if ( h_row1 == null ) {
36
+ h_row1 = document . getElementById ( "first_row" ) ;
37
+ }
27
38
console . log ( `My DOM list: ${ h_list } ` )
28
- for ( i in data ) {
29
- users [ i ] = data [ i ] ;
30
- [ id , n , copter ] = data [ i ] ;
39
+ console . log ( `data length: ${ data . length } data: ${ data } ` )
40
+
41
+ for ( var i = 0 ; i < data . length ; i ++ ) {
42
+ console . log ( `Rendering element ${ data [ i ] } \n\n` ) ;
43
+
44
+ // NOTE: This is very brittle - objects with named keys are better
45
+ [ id , n , email , copter , access , img ] = data [ i ] ;
46
+
47
+ /* Add information from the google profile if this is
48
+ the logged in user */
49
+ if ( logged_in && email == logged_in . getEmail ( ) ) {
50
+ n = logged_in . getName ( ) ;
51
+ img = logged_in . getImageUrl ( ) ;
52
+ // Google has a nice API for resizing images
53
+ // from https://developers.google.com/people/image-sizing
54
+ img = img . split ( "=" ) [ 0 ] + "=s300" ;
55
+ }
56
+
57
+ console . log ( `Image: ${ img } ` )
31
58
32
59
var cloned_row = h_row1 . cloneNode ( true ) ;
33
- cloned_row . id = id ;
60
+ cloned_row . id = i ;
34
61
35
62
var h_title = cloned_row . querySelector ( ".card-title" ) ;
36
63
h_title . innerHTML = id . toString ( ) + ". Name: " + n ;
37
-
64
+
38
65
var h_img = cloned_row . querySelector ( ".card-image" ) ;
39
- h_img . src = images [ id - 1 ] ;
66
+ h_img . src = img
40
67
41
68
var h_btn = cloned_row . querySelector ( ".btn" ) ;
42
69
h_btn . onclick = load_copter ;
43
- console . log ( `Added onclick: ${ h_btn . onclick } ` )
44
-
70
+ console . log ( `Added onclick` )
45
71
console . log ( `ID: ${ id } , Name: ${ n } , Copter? ${ Boolean ( copter ) } ` ) ;
46
- h_list . appendChild ( cloned_row ) ;
72
+
73
+ if ( logged_in && logged_in . getEmail ( ) == email ) {
74
+ h_list . insertBefore ( cloned_row , h_list . querySelector ( ".row" ) )
75
+ } else {
76
+ h_list . appendChild ( cloned_row ) ;
77
+ }
47
78
48
79
}
49
80
h_row1 . remove ( ) ;
50
81
}
51
82
52
- fetch ( "./api/users" )
53
- . then ( response => response . json ( ) )
54
- . then ( data => render_users ( data ) ) ;
83
+ function load_users ( ) {
84
+ users = [ ]
85
+ fetch ( "./api/users" )
86
+ . then ( response => response . json ( ) )
87
+ . then ( data => {
88
+ users = data ;
89
+
90
+ if ( h_row1 != null ) {
91
+ remove_users ( ) ;
92
+ }
93
+ render_users ( data )
94
+ } ) ;
95
+
96
+ console . log ( "Fetch in progress" ) ;
97
+ }
98
+
99
+ load_users ( ) ;
100
+
101
+ // Google sign-on
102
+ console . log ( "Signin javascript loading" ) ;
103
+
104
+ var id_token = null ;
105
+
106
+ function onSignIn ( googleUser ) {
107
+ var profile = googleUser . getBasicProfile ( ) ;
108
+ console . log ( 'ID: ' + profile . getId ( ) ) ; // Do not send to your backend! Use an ID token instead.
109
+ console . log ( 'Name: ' + profile . getName ( ) ) ;
110
+ console . log ( 'Image URL: ' + profile . getImageUrl ( ) ) ;
111
+ console . log ( 'Email: ' + profile . getEmail ( ) ) ; // This is null if the 'email' scope is not present.
112
+
113
+ id_token = googleUser . getAuthResponse ( ) . id_token ;
114
+ console . log ( `ID Token to pass to server: ${ id_token } ` )
115
+
116
+ logged_in = profile ;
117
+
118
+ // Render again to get the logged in users card
119
+ // updated from the google profile
120
+ remove_users ( ) ;
121
+ render_users ( users ) ;
122
+ }
123
+
124
+ console . log ( "Adding signOut function" ) ;
125
+ function signOut ( ) {
126
+ var auth2 = gapi . auth2 . getAuthInstance ( ) ;
127
+ auth2 . signOut ( ) . then ( function ( ) {
128
+ console . log ( 'User signed out.' ) ;
129
+ logged_in = null ;
130
+ remove_users ( ) ;
131
+ load_users ( ) ;
132
+ } ) ;
133
+ id_token = null ;
134
+ }
135
+
136
+
137
+ function danger_return ( data ) {
138
+ console . log ( "Authenticated request returned" ) ;
139
+ console . log ( data ) ;
140
+ remove_users ( ) ;
141
+ render_users ( data ) ;
142
+ }
143
+
144
+ function danger ( ) {
145
+ console . log ( "Danger!" ) ;
146
+ if ( id_token == null ) {
147
+ alert ( "ILLEGAL ACCESS ATTEMPT REGISTERED" ) ;
148
+ return ;
149
+ }
150
+
151
+ fetch ( "./api/users" , {
152
+ headers : {
153
+ 'Authorization' : id_token
154
+ }
155
+ } ) . then ( response => response . json ( ) )
156
+ . then ( data => danger_return ( data ) ) ;
157
+
158
+ }
55
159
56
- console . log ( "Fetch in progress" ) ;
0 commit comments