@@ -21,7 +21,7 @@ const loadLimit = 20;
21
21
const titleLength = 48 ;
22
22
const nameLength = 24 ;
23
23
var usp = new URLSearchParams ( window . location . search ) ;
24
- import { initializeApp } from "https://www.gstatic.com/firebasejs/9.8.1/firebase-app.js" ; import firebaseConfig from '../json/fs.js' ; const app = initializeApp ( firebaseConfig ) ;
24
+ import { initializeApp } from "https://www.gstatic.com/firebasejs/9.8.1/firebase-app.js" ; import firebaseConfig from '../json/fs.js' ; const app = initializeApp ( firebaseConfig ) ;
25
25
import { getFirestore , doc , getDoc , setDoc , getDocs , collection , deleteDoc , query , updateDoc , addDoc , where , orderBy , limit } from "https://www.gstatic.com/firebasejs/9.8.1/firebase-firestore.js" ; const db = getFirestore ( ) ;
26
26
import { getAuth , createUserWithEmailAndPassword , signInWithEmailAndPassword } from "https://www.gstatic.com/firebasejs/9.8.1/firebase-auth.js" ; const auth = getAuth ( ) ;
27
27
if ( isNaN ( usp . get ( "f" ) ) ) { // Update View counter
@@ -32,7 +32,7 @@ if (isNaN(usp.get("f"))) { // Update View counter
32
32
//console.log(docData.timestamp);
33
33
//console.log(Date.now());
34
34
//console.log((Date.now()-docData.timestamp)/(1000*60*60*24));
35
- var newScore = Math . max ( docData . score - 10 , Math . min ( docData . score + 10 , docData . views + docData . likes * 10 - Math . pow ( Math . floor ( ( Date . now ( ) - docData . timestamp ) / ( 1000 * 60 * 60 * 24 ) ) , 1.337 ) ) ) ;
35
+ var newScore = Math . max ( docData . score - 10 , Math . min ( docData . score + 10 , docData . views + Math . pow ( docData . likes * 10 , 1.069 ) - Math . pow ( Math . floor ( ( Date . now ( ) - docData . timestamp ) / ( 1000 * 60 * 60 * 24 ) ) , 1.337 ) ) ) ;
36
36
await updateDoc (
37
37
ref , {
38
38
views : docData . views + 1 ,
@@ -256,6 +256,63 @@ if (isNaN(usp.get("f"))) { // Update View counter
256
256
document . getElementById ( "copyForOverlayBtn" ) . addEventListener ( "click" , copyForOverlay ) ;
257
257
document . getElementById ( "copyForOverlayBtnMobile" ) . addEventListener ( "click" , copyForOverlay ) ;
258
258
259
+ //////////////////////////////////////////////////
260
+ // UPVOTE / DOWNVOTE SYSTEM
261
+ //////////////////////////////////////////////////
262
+ const usr = auth . currentUser ;
263
+ if ( usr != null ) {
264
+ var liked = false ;
265
+ var disliked = false ;
266
+ var newDislikers = [ ] ;
267
+ if ( docData . likers . includes ( usr . uid ) ) {
268
+ liked = true ;
269
+ } else if ( docData . hasOwnProperty ( "dislikers" ) ) {
270
+ newDislikers = docData . dislikers ;
271
+ if ( docData . dislikers . includes ( usr . uid ) ) {
272
+ disliked = true ;
273
+ }
274
+ }
275
+ if ( liked == false ) {
276
+ document . querySelector ( '#upvote' ) . addEventListener ( 'click' , ( e ) => {
277
+ var newLikers = docData . likers ;
278
+ newLikers . push ( usr . uid ) ;
279
+ var newLikes = docData . likes + 1 ;
280
+ if ( disliked == true ) {
281
+ newDislikers = newDislikers . filter ( item => item !== usr . uid )
282
+ newLikes += 1 ;
283
+ }
284
+ return updateDoc (
285
+ ref , {
286
+ likers : newLikers ,
287
+ dislikers : newDislikers ,
288
+ likes : newLikes
289
+ } ) . catch ( ( error ) => {
290
+ console . log ( "Unsuccesful operation, error: " + error ) ;
291
+ } ) ;
292
+ } ) ;
293
+ }
294
+ if ( disliked == false ) {
295
+ document . querySelector ( '#downvote' ) . addEventListener ( 'click' , ( e ) => {
296
+
297
+ newDislikers . push ( usr . uid ) ;
298
+ var newLikes = docData . likes - 1 ;
299
+ var newLikers = docData . likers ;
300
+ if ( liked == true ) {
301
+ newLikers = newLikers . filter ( item => item !== usr . uid )
302
+ newLikes -= 1 ;
303
+ }
304
+ return updateDoc (
305
+ ref , {
306
+ likers : newLikers ,
307
+ dislikers : newDislikers ,
308
+ likes : newLikes
309
+ } ) . catch ( ( error ) => {
310
+ console . log ( "Unsuccesful operation, error: " + error ) ;
311
+ } ) ;
312
+ } ) ;
313
+ }
314
+ }
315
+
259
316
//////////////////////////////////////////////////
260
317
// READ json/icons.json data
261
318
//////////////////////////////////////////////////
@@ -385,7 +442,7 @@ async function GetYourBuilds(uid) {
385
442
// doc.data() is never undefined for query doc snapshots
386
443
var docId = doc . id ;
387
444
var docData = doc . data ( ) ;
388
- html += `<tr><td><a href="#" class="delete-builds" bid="${ docId } " style="color: red">Delete Build?</a></td>` ;
445
+ html += `<tr><td><a href="#" class="delete-builds" bid="${ docId } " style="color: red" onmouseover="this.style['text-decoration']='underline';" onmouseout="this.style['text-decoration']='none';" >Delete Build?</a></td>` ;
389
446
html += "<td><img src=\"img/flag" + docData . civ + ".png\" height=\"24\" onerror=\"this.src = 'assets/placeholder.png';\"><a href=\"view.html?f=" + docId + "\"></img> " + escapeHtml ( docData . title ) . substring ( 0 , titleLength ) + " (by " + escapeHtml ( docData . user ) . substring ( 0 , nameLength ) + ")</a></td></tr>" ;
390
447
} ) ;
391
448
document . querySelector ( '#yourBuilds' ) . innerHTML = `
@@ -400,13 +457,14 @@ async function GetYourBuilds(uid) {
400
457
${ html }
401
458
</tbody>
402
459
</table>
403
- <p style="color: red">Deleting builds cannot be undone! Click once, then refresh page and your build is gone !</p>
460
+ <p style="color: red">Deleting builds cannot be undone!!</p>
404
461
`
405
462
const deleteYourDocs = document . querySelectorAll ( '.delete-builds' ) ;
406
463
deleteYourDocs . forEach ( link => {
407
464
link . addEventListener ( 'click' , ( e ) => {
408
465
//console.log(link.getAttribute('bid'));
409
466
deleteDoc ( doc ( db , "Age4Builds" , link . getAttribute ( 'bid' ) ) ) ;
467
+ location . reload ( ) ;
410
468
} )
411
469
} ) ;
412
470
}
@@ -492,4 +550,5 @@ const setupUI = (user) => {
492
550
document . addEventListener ( 'DOMContentLoaded' , function ( ) {
493
551
var modals = document . querySelectorAll ( '.modal' ) ;
494
552
M . Modal . init ( modals ) ;
495
- } ) ;
553
+ } ) ;
554
+
0 commit comments