@@ -449,6 +449,10 @@ export default {
449
449
}
450
450
this.isMenuLoaded = true
451
451
},
452
+
453
+ /**
454
+ * Handle avatar loading if user or url defined
455
+ */
452
456
loadAvatarUrl() {
453
457
this.isAvatarLoaded = false
454
458
@@ -459,44 +463,63 @@ export default {
459
463
return
460
464
}
461
465
462
- const urlGenerator = (user, size) => {
463
- let url = '/avatar/{user}/{size}'
464
- if (this.isGuest) {
465
- url = '/avatar/guest/{user}/{size}'
466
- }
466
+ // Directly use the url if defined
467
+ if (this.isUrlDefined) {
468
+ this.updateImageIfValid (this.url)
469
+ return
470
+ }
467
471
468
- let avatarUrl = generateUrl(
469
- url,
470
- {
471
- user,
472
- size,
473
- } )
472
+ const avatarUrl = this.avatarUrlGenerator(this.user, this.size)
473
+ const srcset = [
474
+ avatarUrl + ' 1x',
475
+ this.avatarUrlGenerator(this. user, this.size * 2) + ' 2x' ,
476
+ this.avatarUrlGenerator(this.user, this. size * 4) + ' 4x' ,
477
+ ].join(', ' )
474
478
475
- // eslint-disable-next-line camelcase
476
- if (user === getCurrentUser()?.uid && typeof oc_userconfig !== 'undefined') {
477
- avatarUrl += '?v=' + oc_userconfig.avatar.version
478
- }
479
+ this.updateImageIfValid(avatarUrl, srcset)
480
+ },
479
481
480
- return avatarUrl
482
+ /**
483
+ * Generate an avatar url from the server's avatar endpoint
484
+ *
485
+ * @param {string} user the user id
486
+ * @param {number} size the desired size
487
+ * @returns {string}
488
+ */
489
+ avatarUrlGenerator(user, size) {
490
+ let url = '/avatar/{user}/{size}'
491
+ if (this.isGuest) {
492
+ url = '/avatar/guest/{user}/{size}'
481
493
}
482
494
483
- let avatarUrl = urlGenerator(this.user, this.size)
484
- if (this.isUrlDefined) {
485
- avatarUrl = this.url
495
+ let avatarUrl = generateUrl(
496
+ url,
497
+ {
498
+ user,
499
+ size,
500
+ })
501
+
502
+ // eslint-disable-next-line camelcase
503
+ if (user === getCurrentUser()?.uid && typeof oc_userconfig !== 'undefined') {
504
+ avatarUrl += '?v=' + oc_userconfig.avatar.version
486
505
}
487
506
488
- const srcset = [
489
- avatarUrl + ' 1x',
490
- urlGenerator(this.user, this.size * 2) + ' 2x',
491
- urlGenerator(this.user, this.size * 4) + ' 4x',
492
- ].join(', ')
507
+ return avatarUrl
508
+ },
493
509
510
+ /**
511
+ * Check if the provided url is valid and update Avatar if so
512
+ *
513
+ * @param {string} url the avatar url
514
+ * @param {array} srcset the avatar srcset
515
+ */
516
+ updateImageIfValid(url, srcset = null) {
494
517
// skip loading
495
518
const userHasAvatar = getUserHasAvatar(this.user)
496
519
if (typeof userHasAvatar === 'boolean') {
497
520
this.isAvatarLoaded = true
498
- this.avatarUrlLoaded = avatarUrl
499
- if (!this.isUrlDefined ) {
521
+ this.avatarUrlLoaded = url
522
+ if (srcset ) {
500
523
this.avatarSrcSetLoaded = srcset
501
524
}
502
525
if (userHasAvatar === false) {
@@ -507,8 +530,8 @@ export default {
507
530
508
531
const img = new Image()
509
532
img.onload = () => {
510
- this.avatarUrlLoaded = avatarUrl
511
- if (!this.isUrlDefined ) {
533
+ this.avatarUrlLoaded = url
534
+ if (srcset ) {
512
535
this.avatarSrcSetLoaded = srcset
513
536
}
514
537
this.isAvatarLoaded = true
@@ -521,10 +544,10 @@ export default {
521
544
setUserHasAvatar(this.user, false)
522
545
}
523
546
524
- if (!this.isUrlDefined ) {
547
+ if (srcset ) {
525
548
img.srcset = srcset
526
549
}
527
- img.src = avatarUrl
550
+ img.src = url
528
551
},
529
552
},
530
553
}
0 commit comments