diff --git a/views/options/social/challenges.jade b/views/options/social/challenges.jade index 541c814358..444a44a20b 100644 --- a/views/options/social/challenges.jade +++ b/views/options/social/challenges.jade @@ -50,7 +50,7 @@ script(type='text/ng-template', id='partials/options.social.challenges.detail.ht =env.t('exportChallengeCSV') h3=env.t('hows') menu - button.customize-option(ng-repeat='member in challenge.members', ng-click='toggleMember(challenge._id, member._id)') {{member.profile.name}} + button.customize-option(ng-repeat='member in challenge.members track by member._id', ng-click='toggleMember(challenge._id, member._id)') {{member.profile.name}} div(ui-view) // Accordion version if we choose that instead @@ -135,7 +135,7 @@ script(type='text/ng-template', id='partials/options.social.challenges.html') // Challenges list .panel-group - .panel.panel-default(ng-repeat='challenge in challenges|filter:filterChallenges') + .panel.panel-default(ng-repeat='challenge in challenges|filter:filterChallenges track by challenge._id ') .panel-heading ul.pull-right.challenge-accordion-header-specs li(ng-if='challenge.official') diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 170a4a22c6..742e34c616 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -1,4 +1,4 @@ -li.chat-message(ng-repeat='message in group.chat', ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid}') +li.chat-message(ng-repeat='message in group.chat track by message.id', ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid}') .scrollable-message span(ng-if='::message.uuid!="system"') a.label.label-default.chat-message.hidden-label diff --git a/views/options/social/group.jade b/views/options/social/group.jade index 3f0d6cd518..132ead5b30 100644 --- a/views/options/social/group.jade +++ b/views/options/social/group.jade @@ -60,7 +60,7 @@ a.pull-right.gem-wallet(ng-if='group.type!="party"', popover-trigger='mouseenter ng-change='set({"party.order": user.party.order})' ) table.table.table-striped(bindonce='group') - tr(ng-repeat='member in group.members') + tr(ng-repeat='member in group.members track by member._id') td // allow leaders to ban members div(ng-show='group.leader == user.id && user.id!=member._id') diff --git a/views/options/social/index.jade b/views/options/social/index.jade index 2e2709ed3e..3dad9f4252 100644 --- a/views/options/social/index.jade +++ b/views/options/social/index.jade @@ -39,7 +39,7 @@ script(type='text/ng-template', id='partials/options.social.guilds.public.html') .col-md-3 input.form-control(type='text',ng-model='guildSearch', placeholder=env.t('search')) table.table.table-striped - tr(ng-repeat='group in groups.public | filter:guildSearch') + tr(ng-repeat='group in groups.public | filter:guildSearch track by group._id') td ul.pull-right.challenge-accordion-header-specs li='{{::group.memberCount}} ' + env.t('members') @@ -65,7 +65,7 @@ script(type='text/ng-template', id='partials/options.social.guilds.html') li(ng-class="{ active: $state.includes('options.social.guilds.public') }") a(ui-sref='options.social.guilds.public') =env.t('publicGuilds') - li(ng-class="{ active: $stateParams.gid == group._id }", ng-repeat='group in groups.guilds') + li(ng-class="{ active: $stateParams.gid == group._id }", ng-repeat='group in groups.guilds track by group._id') a(ui-sref="options.social.guilds.detail({gid:group._id})") | {{group.name}} li(ng-class="{ active: $state.includes('options.social.guilds.create') }") diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index 6ed27f728c..376d6b8b20 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -1,4 +1,4 @@ -li(bindonce='list', bo-id='"task-"+task.id', ng-repeat='task in obj[list.type+"s"]', class='task {{Shared.taskClasses(task, user.filters, user.preferences.dayStart, user.lastCron, list.showCompleted, main)}}', ng-click='spell && castEnd(task, "task", $event)', ng-class='{"cast-target":spell}', popover-trigger='mouseenter', popover-placement='top', popover='{{task.notes}}') +li(bindonce='list', bo-id='"task-"+task.id', ng-repeat='task in obj[list.type+"s"] track by task.id', class='task {{Shared.taskClasses(task, user.filters, user.preferences.dayStart, user.lastCron, list.showCompleted, main)}}', ng-click='spell && castEnd(task, "task", $event)', ng-class='{"cast-target":spell}', popover-trigger='mouseenter', popover-placement='top', popover='{{task.notes}}') // right-hand side control buttons .task-meta-controls