• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Freegle / Iznik / 11495

09 May 2026 07:35AM UTC coverage: 69.06% (-3.8%) from 72.847%
11495

Pull #408

circleci

edwh
docs(migration): mark restartproject and repaircafewales as migrated (PR #408)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Pull Request #408: feat(batch): migrate check_cgas, visualise, tn_sync + dry-run improvements

9127 of 10554 branches covered (86.48%)

Branch coverage included in aggregate %.

507 of 663 new or added lines in 16 files covered. (76.47%)

11902 existing lines in 138 files now uncovered.

101630 of 149824 relevant lines covered (67.83%)

19.56 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.85
/iznik-nuxt3/components/MessageModal.vue
1
<template>
1✔
2
  <b-modal
1✔
3
    ref="modal"
1✔
4
    scrollable
1✔
5
    size="xl"
1✔
6
    no-trap
1✔
7
    hide-header
1✔
8
    :fullscreen="showImagesProxy ? true : 'lg-down'"
1✔
9
    class="hide-footer message-modal"
1✔
10
    body-class="p-0"
1✔
11
    dialog-class="message-modal-dialog"
1✔
12
    content-class="message-modal-content"
1✔
13
    @shown="bumpMessage++"
1✔
14
  >
15
    <template #default>
1✔
16
      <div v-if="message" class="message-content-wrapper">
1✔
17
        <div v-if="showImagesProxy">
1✔
18
          <div>
1✔
19
            <b-button
1✔
20
              variant="primary"
1✔
21
              size="md"
1✔
22
              class="w-100 d-block d-md-none"
1✔
23
              block
1✔
24
              @click="showImagesProxy = false"
1✔
25
            >
26
              <v-icon icon="angle-double-left" /> Back to description
1✔
27
            </b-button>
1✔
28
          </div>
1✔
29
          <ImageCarousel
1✔
30
            v-if="message?.attachments?.length"
1✔
31
            :message-id="id"
1✔
32
            :attachments="message.attachments"
1✔
33
          />
1✔
34
          <hr />
1✔
35
          <div class="d-flex justify-content-around p-2 mb-2 p-md-0 mb-md-0">
1✔
36
            <div>
1✔
37
              <b-button
1✔
38
                variant="secondary"
1✔
39
                size="lg"
1✔
40
                class="d-none d-md-block"
1✔
41
                block
1✔
42
                @click="showImagesProxy = false"
1✔
43
              >
1✔
44
                Close
45
              </b-button>
1✔
46
            </div>
1✔
47
          </div>
1✔
48
        </div>
1✔
49
        <MessageExpanded
1✔
50
          v-else-if="bumpMessage"
1✔
51
          :id="id"
1✔
52
          :key="bumpMessage"
1✔
53
          :replyable="replyable"
1✔
54
          :hide-close="hideClose"
1✔
55
          :actions="actions"
1✔
56
          class="ml-md-2 mr-md-2 mt-md-2 ml-0 mr-0 mt-0"
1✔
57
          in-modal
1✔
58
          @close="hide"
1✔
59
        />
1✔
60
      </div>
1✔
61
      <div
1✔
62
        v-else
63
        class="d-flex flex-column -justify-content-around align-content-center"
1✔
64
      >
65
        <Spinner :size="50" />
1✔
66
      </div>
1✔
67
    </template>
68
  </b-modal>
1✔
69
</template>
70
<script setup>
71
import { computed, ref, defineAsyncComponent } from 'vue'
1✔
72
import { useMessageStore } from '~/stores/message'
1✔
73
import { useOurModal } from '~/composables/useOurModal'
1✔
74
import ImageCarousel from '~/components/ImageCarousel'
1✔
75

76
const MessageExpanded = defineAsyncComponent(() =>
1✔
UNCOV
77
  import('~/components/MessageExpanded')
×
78
)
1✔
79

80
const messageStore = useMessageStore()
1✔
81

82
const props = defineProps({
1✔
83
  // model
84
  showImages: {
85
    type: Boolean,
86
    required: false,
87
    default: false,
88
  },
89
  id: {
90
    type: Number,
91
    required: true,
92
  },
93
  hideClose: {
94
    type: Boolean,
95
    required: false,
96
    default: false,
97
  },
98
  replyable: {
99
    type: Boolean,
100
    required: false,
101
    default: true,
102
  },
103
  actions: {
104
    type: Boolean,
105
    required: false,
106
    default: true,
107
  },
108
})
109

110
const emit = defineEmits(['update:showImages'])
1✔
111

112
const { modal, hide } = useOurModal()
1✔
113

114
const bumpMessage = ref(0)
1✔
115

116
const message = computed(() => {
1✔
117
  return messageStore.byId(props.id)
20✔
118
})
20✔
119

120
const showImagesProxy = computed({
1✔
121
  get() {
1✔
122
    return props.showImages ?? false
20!
123
  },
1✔
124

125
  set(value) {
1✔
126
    emit('update:showImages', value)
2✔
127
  },
1✔
128
})
1✔
129
</script>
130

131
<style scoped lang="scss">
132
@import 'bootstrap/scss/functions';
133
@import 'bootstrap/scss/variables';
134
@import 'bootstrap/scss/mixins/_breakpoints';
135

136
.close {
137
  top: -15px;
138
  right: -15px;
139
  position: absolute;
140
  z-index: 10000;
141
  opacity: 1;
142
  background-color: white;
143
  border-radius: 50%;
144

145
  @include media-breakpoint-down(sm) {
146
    top: 3px;
147
    right: 3px;
148
  }
149
}
150

151
:deep(.carousel-caption) {
152
  position: unset !important;
153
  padding-top: 0px !important;
154
  padding-bottom: 0px !important;
155
}
156

157
:deep(.carousel-item.active) {
158
  background-color: transparent !important;
159
}
160

161
.maybeAd {
162
  visibility: hidden;
163

164
  @media only screen and (min-width: 386px) {
165
    visibility: visible;
166
    height: 50px;
167
    width: 320px;
168
  }
169
}
170

171
.noborder {
172
  border: none !important;
173
  border-color: $color-white !important;
174
}
175

176
.layout {
177
  display: grid;
178
  width: 100%;
179
  align-items: center;
180
  grid-template-rows: 1fr;
181
  grid-template-columns: calc(100% - 5rem) 5rem;
182

183
  .closebutton {
184
    max-width: 5rem;
185
    align-content: end;
186
  }
187
}
188
</style>
189

190
<style lang="scss">
191
@import 'assets/css/_color-vars.scss';
192

193
/* Global styles for message modal - always near-full height */
194
.message-modal-dialog {
195
  height: 96vh;
196
  margin-top: 2vh;
197
  margin-bottom: 2vh;
198
}
199

200
.message-modal-content {
201
  height: 100%;
202
  overflow: hidden;
203
  padding: 0.5rem;
204
  background: $color-white;
205
  position: relative;
206
}
207

208
/* Ensure body fills content */
209
.message-modal .modal-body {
210
  height: 100%;
211
  overflow: hidden;
212
  display: flex;
213
  flex-direction: column;
214
}
215

216
/* Wrapper div for conditional content - fill flex parent */
217
.message-content-wrapper {
218
  flex: 1;
219
  display: flex;
220
  flex-direction: column;
221
  min-height: 0;
222
  overflow: hidden;
223
}
224
</style>
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc