@asd20/ui 3.2.593 → 3.2.595

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,547 @@
1
+ <template>
2
+ <div class="asd20-template-clubs">
3
+ <!-- Skip Nav -->
4
+ <asd20-skip-to />
5
+
6
+ <!-- Site Navigation -->
7
+ <asd20-site-navigation
8
+ :navigation="navigation"
9
+ :action-items="actionItems"
10
+ @update:menuOpen="$emit('update:menuOpen', $event)"
11
+ :menu-open="menuOpen"
12
+ @update:searchOpen="$emit('update:searchOpen', $event)"
13
+ :search-open="searchOpen"
14
+ :organization="organization"
15
+ :organization-options="organizationOptions"
16
+ >
17
+ </asd20-site-navigation>
18
+
19
+ <!-- Banner Notifications -->
20
+ <client-only>
21
+ <asd20-notification-group
22
+ :notifications="activeNotificationsByType.banner"
23
+ group-type="banner"
24
+ @dismiss="$emit('dismiss-notification', $event)"
25
+ @toggle-all="$emit('toggle-all')"
26
+ />
27
+ </client-only>
28
+
29
+ <!-- Page Header -->
30
+ <asd20-page-header
31
+ id="page-header"
32
+ v-if="pageHeaderContent"
33
+ v-bind="pageHeaderContent"
34
+ :organization="organization"
35
+ :organization-options="organizationOptions"
36
+ :languageCode="languageCode"
37
+ v-on="$listeners"
38
+ :breadcrumb-links="breadcrumbLinks"
39
+ >
40
+ <!-- Floating Notifications -->
41
+ <template slot="top">
42
+ <client-only>
43
+ <asd20-notification-group
44
+ class="asd20-notification-group--floating"
45
+ :notifications="activeNotificationsByType.floating"
46
+ :total-dismissed-notifications="totalDismissedNotifications"
47
+ group-type="floating"
48
+ @dismiss="$emit('dismiss-notification', $event)"
49
+ @toggle-all="$emit('toggle-all')"
50
+ ></asd20-notification-group>
51
+ </client-only>
52
+ </template>
53
+ <!-- <asd20-breadcrumb slot="top" :links="breadcrumbLinks"></asd20-breadcrumb> -->
54
+ </asd20-page-header>
55
+
56
+ <!-- Inline-Notifications -->
57
+ <client-only>
58
+ <asd20-notification-group
59
+ :notifications="activeNotificationsByType.inline"
60
+ group-type="inline"
61
+ @dismiss="$emit('dismiss-notification', $event)"
62
+ @toggle-all="$emit('toggle-all')"
63
+ ></asd20-notification-group>
64
+ </client-only>
65
+
66
+ <!-- Page Content -->
67
+ <asd20-page-content
68
+ :primary-messages="primaryMessages"
69
+ :secondary-messages="secondaryMessages"
70
+ omit-detail-links
71
+ omit-calls-to-action
72
+ grid
73
+ ></asd20-page-content>
74
+
75
+ <intersect @enter="$emit('stories-in-view')">
76
+ <div class="article-digest">
77
+ <h2 class="feed-title">
78
+ {{
79
+ storiesFeedProps && storiesFeedProps.title
80
+ ? storiesFeedProps.title
81
+ : 'Stories & Features'
82
+ }}
83
+ </h2>
84
+ <div class="search-header">
85
+ <asd20-search-field
86
+ :value="keywords"
87
+ @input="$emit('update:keywords', $event)"
88
+ medium
89
+ />
90
+ <asd20-multiselect-input
91
+ label="Categories"
92
+ :taggable="false"
93
+ :value="selectedCategories"
94
+ :items="categoryOptions"
95
+ @input="$emit('update:selected-categories', $event)"
96
+ />
97
+ </div>
98
+
99
+ <div v-if="cards.length < 1">
100
+ <br />
101
+ <p>There are currently no featues to view.</p>
102
+ </div>
103
+ <div class="feed" v-if="cards.length > 0">
104
+ <div
105
+ v-if="cards.length > numberToShow"
106
+ id="list-start"
107
+ class="article-pagination"
108
+ >
109
+ <p class="result-count">
110
+ Viewing article {{ counter }}
111
+ {{ counter === cards.length ? '' : '-' }}
112
+ {{
113
+ counter === cards.length
114
+ ? ''
115
+ : counter2 <= cards.length
116
+ ? counter2
117
+ : cards.length
118
+ }}
119
+ of {{ cards.length }}.
120
+ </p>
121
+ <div class="page-selector">
122
+ <div class="prev-next">
123
+ <asd20-button
124
+ @click.native="prevSet()"
125
+ class="load-more"
126
+ icon="chevron"
127
+ label="Prev"
128
+ :iconAngle="-90"
129
+ size="md"
130
+ horizontal
131
+ transparent
132
+ centered
133
+ opposite
134
+ />
135
+ <p>
136
+ Page {{ Math.ceil(counter2 / numberToShow) }} of
137
+ {{ Math.ceil(cards.length / numberToShow) }}
138
+ </p>
139
+ <asd20-button
140
+ @click.native="nextSet()"
141
+ class="load-more"
142
+ icon="chevron"
143
+ label="Next"
144
+ :iconAngle="90"
145
+ size="md"
146
+ horizontal
147
+ transparent
148
+ centered
149
+ />
150
+ </div>
151
+ </div>
152
+ </div>
153
+ <div class="feed-items">
154
+ <asd20-card
155
+ v-for="(card, index) in cards.slice(counter - 1, counter2)"
156
+ :key="index"
157
+ v-bind="card"
158
+ zoom
159
+ ></asd20-card>
160
+ </div>
161
+ <div v-if="cards.length > numberToShow" class="article-pagination">
162
+ <p class="result-count">
163
+ Viewing article {{ counter }}
164
+ {{ counter === cards.length ? '' : '-' }}
165
+ {{
166
+ counter === cards.length
167
+ ? ''
168
+ : counter2 <= cards.length
169
+ ? counter2
170
+ : cards.length
171
+ }}
172
+ of {{ cards.length }}.
173
+ </p>
174
+ <div class="page-selector">
175
+ <div class="prev-next">
176
+ <a href="#list-start">
177
+ <asd20-button
178
+ @click.native="prevSet()"
179
+ class="load-more"
180
+ icon="chevron"
181
+ label="Prev"
182
+ :iconAngle="-90"
183
+ size="md"
184
+ horizontal
185
+ transparent
186
+ centered
187
+ opposite
188
+ />
189
+ </a>
190
+ <p>
191
+ Page {{ Math.ceil(counter2 / numberToShow) }} of
192
+ {{ Math.ceil(cards.length / numberToShow) }}
193
+ </p>
194
+ <a href="#list-start">
195
+ <asd20-button
196
+ @click.native="nextSet()"
197
+ class="load-more"
198
+ icon="chevron"
199
+ label="Next"
200
+ :iconAngle="90"
201
+ size="md"
202
+ horizontal
203
+ transparent
204
+ centered
205
+ />
206
+ </a>
207
+ </div>
208
+ </div>
209
+ </div>
210
+ </div>
211
+ </div>
212
+ </intersect>
213
+
214
+ <asd20-media-section
215
+ v-if="combinedMessageImages.length > 1 || combinedMessageVideos.length"
216
+ :images="this.combinedMessageImages || []"
217
+ :videos="this.combinedMessageVideos || []"
218
+ >
219
+ </asd20-media-section>
220
+
221
+ <!-- Bottom Widgets -->
222
+ <asd20-widgets-section
223
+ v-if="widgetsSectionProps.footer || $slots.widgets"
224
+ v-bind="{ ...widgetsSectionProps.footer, ...widgetsSectionProps.sidebar }"
225
+ @events-in-view="$emit('events-in-view')"
226
+ @files-in-view="$emit('files-in-view')"
227
+ @people-in-view="$emit('people-in-view')"
228
+ full
229
+ ><slot name="widgets"
230
+ /></asd20-widgets-section>
231
+
232
+ <!-- Feeds -->
233
+ <asd20-feeds-section
234
+ :announcements="announcements"
235
+ :announcements-feed-props="announcementsFeedProps"
236
+ @announcements-in-view="$emit('announcements-in-view')"
237
+ ></asd20-feeds-section>
238
+
239
+ <!-- Quick Links -->
240
+ <asd20-quicklinks-menu slot="before-footer" :quick-links="quickLinks">
241
+ <slot name="quicklinks-menu" />
242
+ </asd20-quicklinks-menu>
243
+
244
+ <!-- Footer -->
245
+ <asd20-page-footer
246
+ :organization="organization"
247
+ :socialLinks="socialLinks"
248
+ :disclosureLinks="disclosureLinks"
249
+ :websiteLogoProps="websiteLogoProps"
250
+ >
251
+ <slot name="page-footer" />
252
+ </asd20-page-footer>
253
+ </div>
254
+ </template>
255
+
256
+ <script>
257
+ // Components
258
+ import Asd20SkipTo from '../../../components/atoms/Asd20SkipTo'
259
+ import Asd20PageHeader from '../../../components/organisms/Asd20PageHeader'
260
+
261
+ import Asd20SiteNavigation from '../../../components/organisms/Asd20SiteNavigation'
262
+ import Asd20PageContent from '../../../components/organisms/Asd20PageContent'
263
+
264
+ import Asd20WidgetsSection from '../../../components/organisms/Asd20WidgetsSection'
265
+ import Asd20FeedsSection from '../../../components/organisms/Asd20FeedsSection'
266
+ import Asd20MediaSection from '../../../components/organisms/Asd20MediaSection'
267
+
268
+ import Asd20PageFooter from '../../../components/organisms/Asd20PageFooter'
269
+ import Asd20QuicklinksMenu from '../../../components/organisms/Asd20QuicklinksMenu'
270
+ import Asd20NotificationGroup from '@asd20/notifications-ui/src/components/Asd20NotificationGroup'
271
+
272
+ import Asd20SearchField from '../../../components/molecules/Asd20SearchField'
273
+ import Asd20MultiselectInput from '../../../components/atoms/Asd20MultiselectInput'
274
+ import Asd20Card from '../../../components/molecules/Asd20Card'
275
+ import Asd20Button from '../../../components/atoms/Asd20Button'
276
+
277
+ import Intersect from 'vue-intersect'
278
+
279
+ // Mixins
280
+ import pageTemplateMixin from '../../../mixins/pageTemplateMixin'
281
+
282
+ // Helpers
283
+ import mapMessageToCard from '../../../helpers/mapMessageToCard'
284
+
285
+ export default {
286
+ name: 'ClubsTemplate',
287
+ mixins: [pageTemplateMixin],
288
+ components: {
289
+ Asd20PageContent,
290
+ Asd20SkipTo,
291
+ Asd20PageHeader,
292
+ Asd20PageFooter,
293
+ Asd20SiteNavigation,
294
+ Asd20WidgetsSection,
295
+ Asd20FeedsSection,
296
+ Asd20NotificationGroup,
297
+ Asd20QuicklinksMenu,
298
+ Asd20SearchField,
299
+ Asd20MultiselectInput,
300
+ Asd20Card,
301
+ Asd20Button,
302
+ Intersect,
303
+ Asd20MediaSection,
304
+ },
305
+
306
+ props: {
307
+ keywords: { type: String, default: '' },
308
+ selectedCategories: { type: Array, default: () => [] },
309
+ // categoryOptions: { type: Array, default: () => [] },
310
+ },
311
+ data: function() {
312
+ return {
313
+ numberToShow: 25,
314
+ counter: 1,
315
+ counter2: 25,
316
+ }
317
+ },
318
+ computed: {
319
+ cards() {
320
+ if (!Array.isArray(this.stories)) return []
321
+ return this.stories
322
+ .map(s =>
323
+ mapMessageToCard(s, {
324
+ // reversed: true,
325
+ date: '',
326
+ time: '',
327
+ description: '',
328
+ // image: '',
329
+ pinned: false,
330
+ })
331
+ )
332
+ .sort((a, b) => (a.title > b.title ? 1 : b.title > a.title ? -1 : 0))
333
+ // .map(c => ({
334
+ // ...c,
335
+ // link: c.link.replace('/stories', '/announcements'),
336
+ // }))
337
+ },
338
+ categoryOptions() {
339
+ // get a unique array of categories with duplicates removed
340
+ return [
341
+ ...new Set(
342
+ this.cards.reduce((a, c) => a.concat(c.categories || []), []).sort()
343
+ ),
344
+ ]
345
+ },
346
+ // computedCategoryOptions() {
347
+ // // get a unique array of categories with duplicates removed
348
+ // if (this.categoryOptions.length === 0) {
349
+ // return [
350
+ // ...new Set(
351
+ // this.cards.reduce((a, c) => a.concat(c.categories || []), []).sort()
352
+ // ),
353
+ // ]
354
+ // }
355
+ // return this.categoryOptions
356
+ // },
357
+ },
358
+ watch: {
359
+ selectedCategories: function(newVal, oldVal) {
360
+ if (newVal !== oldVal) {
361
+ this.reset()
362
+ }
363
+ },
364
+ },
365
+ methods: {
366
+ nextSet() {
367
+ if (
368
+ Math.ceil(this.counter2 / this.numberToShow) <
369
+ Math.ceil(this.cards.length / this.numberToShow)
370
+ ) {
371
+ this.counter = this.counter + this.numberToShow
372
+ this.counter2 = this.counter2 + this.numberToShow
373
+ this.$emit('announcements-in-view')
374
+ }
375
+ },
376
+ prevSet() {
377
+ if (Math.ceil(this.counter2 / this.numberToShow) > 1) {
378
+ this.counter = this.counter - this.numberToShow
379
+ this.counter2 = this.counter2 - this.numberToShow
380
+ this.$emit('announcements-in-view')
381
+ }
382
+ },
383
+ reset() {
384
+ this.counter = 1
385
+ this.counter2 = 25
386
+ this.$emit('announcements-in-view')
387
+ },
388
+ },
389
+ }
390
+ </script>
391
+
392
+ <style lang="scss">
393
+ @import '../../../design/_variables.scss';
394
+ @import '../../../design/_mixins.scss';
395
+ @import '../../../design/_typography.scss';
396
+ @import '../../../design/_template.scss';
397
+ @import '../../../design/_print.scss';
398
+ @import '../../../design/tokens.css';
399
+
400
+ .asd20-template-clubs {
401
+ @include typography;
402
+ @include template;
403
+ display: flex;
404
+ flex-direction: column;
405
+ flex-grow: 1;
406
+ flex-shrink: 0;
407
+ overflow: hidden;
408
+ margin-top: space(2.25);
409
+ .asd20-notification-group--floating {
410
+ position: absolute;
411
+ top: space(2.0375);
412
+ // .bell {
413
+ // box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.125) !important;
414
+ // svg {
415
+ // fill: var(--color__accent) !important;
416
+ // }
417
+ // span {
418
+ // background: var(--color__accent) !important;
419
+ // top: inherit !important;
420
+ // right: inherit !important;
421
+ // width: 1.2rem !important;
422
+ // height: 1.2rem !important;
423
+ // font-size: 0.75rem !important;
424
+ // }
425
+ // }
426
+ }
427
+ .feed-title {
428
+ margin: space(1) 0 0 space(1);
429
+ }
430
+ .asd20-card {
431
+ margin-bottom: space(0.5);
432
+ // &__date-time {
433
+ // display: none;
434
+ // }
435
+ // &__description {
436
+ // display: none;
437
+ // }
438
+ }
439
+ .article-pagination {
440
+ display: flex;
441
+ align-items: center;
442
+ justify-content: space-between;
443
+ margin: space(1) space(0.25) space(0) space(0.25);
444
+ flex-direction: column;
445
+ p {
446
+ margin: 0;
447
+ }
448
+ .page-selector {
449
+ display: flex;
450
+ align-items: center;
451
+ .prev-next {
452
+ display: flex;
453
+ align-items: center;
454
+ justify-content: space-between;
455
+ a {
456
+ text-decoration: none !important;
457
+ }
458
+ .asd20-button {
459
+ padding: 0;
460
+ > .asd20-button__label {
461
+ margin: 0;
462
+ }
463
+ }
464
+ p {
465
+ margin: 0;
466
+ }
467
+ }
468
+ }
469
+ }
470
+ .notification-group--inline {
471
+ margin: space(2) space(1) space(1) space(1);
472
+ }
473
+ .search-header,
474
+ .result-count {
475
+ margin: space(0) space(1) space(1) space(1);
476
+ }
477
+
478
+ .asd20-search-field .asd20-icon {
479
+ margin-left: 0;
480
+ }
481
+ }
482
+
483
+ @media (min-width: 1024px) {
484
+ .asd20-template-clubs {
485
+ @include template-desktop;
486
+ margin-left: space(3);
487
+ margin-top: 0;
488
+ .asd20-notification-group--floating {
489
+ position: absolute;
490
+ top: space(1);
491
+ // .bell {
492
+ // span {
493
+ // background: var(--color__accent);
494
+ // top: -0.6em !important;
495
+ // right: -0.6em !important;
496
+ // }
497
+ // }
498
+ }
499
+ .feed-title {
500
+ margin-left: 0;
501
+ }
502
+
503
+ .asd20-page-content {
504
+ margin-top: space(1);
505
+ display: flex;
506
+ justify-content: space-between;
507
+ align-items: stretch;
508
+ flex-wrap: wrap;
509
+ }
510
+ .notification-group--inline {
511
+ margin: space(2) space(3) space(1) space(3);
512
+ flex-basis: 100%;
513
+ }
514
+ .prev-next {
515
+ margin: space(1) 0;
516
+ }
517
+ .primary-messaging-section {
518
+ max-width: 100vw;
519
+ }
520
+ .feed-items {
521
+ display: grid;
522
+ grid-template-columns: 1fr 1fr 1fr;
523
+ grid-gap: space(1);
524
+ margin-bottom: space(1);
525
+ .asd20-card {
526
+ margin-bottom: 0;
527
+ }
528
+ }
529
+ .search-header,
530
+ .result-count {
531
+ margin: space(0) space(0) space(1) space(0);
532
+ }
533
+ .search-header {
534
+ display: flex;
535
+ flex-basis: 100%;
536
+ justify-content: space-between;
537
+ }
538
+ .article-pagination {
539
+ flex-direction: row;
540
+ }
541
+ .article-digest {
542
+ // flex-basis: 100%;
543
+ margin: space(1) space(3) space(1) space(3);
544
+ }
545
+ }
546
+ }
547
+ </style>
@@ -111,6 +111,11 @@
111
111
  @events-in-view="$emit('events-in-view')"
112
112
  ></asd20-feeds-section>
113
113
 
114
+ <asd20-factoids-section
115
+ v-if="factoids && factoids.length > 0"
116
+ :factoids="factoids"
117
+ />
118
+
114
119
  <!-- Quick Links -->
115
120
  <asd20-quicklinks-menu :quickLinks="quickLinks">
116
121
  <slot name="quicklinks-menu" />
@@ -148,7 +153,7 @@ import Asd20QuicklinksMenu from '../../../components/organisms/Asd20QuicklinksMe
148
153
  // import Asd20DistrictLogo from '../../../components/atoms/Asd20DistrictLogo'
149
154
  import Asd20OrganizationPicker from '../../../components/organisms/Asd20OrganizationPicker'
150
155
  import Asd20NotificationGroup from '@asd20/notifications-ui/src/components/Asd20NotificationGroup'
151
- // import Asd20FactoidsSection from '../../../components/organisms/Asd20FactoidsSection'
156
+ import Asd20FactoidsSection from '../../../components/organisms/Asd20FactoidsSection'
152
157
  import Asd20FeedsSection from '../../../components/organisms/Asd20FeedsSection'
153
158
  import Asd20VideoHeader from '../../../components/organisms/Asd20VideoHeader'
154
159
  import Asd20VideoHeaderContent from '../../../components/organisms/Asd20VideoHeaderContent'
@@ -170,6 +175,38 @@ export default {
170
175
  return this.$mq || 'sm'
171
176
  },
172
177
  },
178
+ data: () => ({
179
+ factoids: [
180
+ {
181
+ start: 0,
182
+ end: 40,
183
+ suffix: '+',
184
+ label: 'Schools/Programs',
185
+ once: true,
186
+ },
187
+ {
188
+ start: 0,
189
+ end: 26000,
190
+ suffix: '+',
191
+ label: 'Students',
192
+ once: true,
193
+ },
194
+ {
195
+ start: 0,
196
+ end: 15,
197
+ suffix: 'years',
198
+ label: 'Accredited With Distiction',
199
+ once: true,
200
+ },
201
+ {
202
+ start: 0,
203
+ end: 94,
204
+ suffix: '%',
205
+ label: 'Graduation Rate',
206
+ once: true,
207
+ },
208
+ ],
209
+ }),
173
210
 
174
211
  components: {
175
212
  Asd20SkipTo,
@@ -179,7 +216,7 @@ export default {
179
216
  // Asd20DistrictLogo,
180
217
  Asd20OrganizationPicker,
181
218
  Asd20NotificationGroup,
182
- // Asd20FactoidsSection,
219
+ Asd20FactoidsSection,
183
220
  Asd20FeedsSection,
184
221
  Asd20VideoHeader,
185
222
  Asd20VideoHeaderContent,
@@ -14,8 +14,8 @@
14
14
  },
15
15
  {
16
16
  "start": 0,
17
- "end": 5,
18
- "label": "New Buildings",
17
+ "end": 15,
18
+ "label": "Accredited With Distinction",
19
19
  "once": true
20
20
  },
21
21
  {