diff --git a/client/src/App.vue b/client/src/App.vue index 35725e99..8e26ed22 100644 --- a/client/src/App.vue +++ b/client/src/App.vue @@ -10,6 +10,7 @@ import DefaultLayout from '@/layouts/DefaultLayout'; import SimpleLayout from '@/layouts/SimpleLayout'; import BlankLayout from '@/layouts/BlankLayout'; + import FullScreenLayout from '@/layouts/FullScreenLayout'; import Modal from '@/components/Modal'; import MobileNavigation from '@/components/MobileNavigation'; import NewContentBlockWizard from '@/components/content-block-form/NewContentBlockWizard'; @@ -33,6 +34,7 @@ DefaultLayout, SimpleLayout, BlankLayout, + FullScreenLayout, Modal, MobileNavigation, NewContentBlockWizard, diff --git a/client/src/components/ContentBlock.vue b/client/src/components/ContentBlock.vue index 1be89d92..f15b1161 100644 --- a/client/src/components/ContentBlock.vue +++ b/client/src/components/ContentBlock.vue @@ -61,6 +61,7 @@ import EyeIcon from '@/components/icons/EyeIcon'; import PenIcon from '@/components/icons/PenIcon'; import TrashIcon from '@/components/icons/TrashIcon'; + import ModuleRoomSlug from '@/components/content-blocks/ModuleRoomSlug' import CHAPTER_QUERY from '@/graphql/gql/chapterQuery.gql'; import DELETE_CONTENT_BLOCK_MUTATION from '@/graphql/gql/mutations/deleteContentBlock.gql'; @@ -93,6 +94,7 @@ 'genially_block': GeniallyBlock, 'subtitle': SubtitleBlock, 'content_list': ContentListBlock, + 'module_room_slug': ModuleRoomSlug, Survey, Solution, Assignment, diff --git a/client/src/components/content-blocks/ModuleRoomSlug.vue b/client/src/components/content-blocks/ModuleRoomSlug.vue new file mode 100644 index 00000000..b5f2f686 --- /dev/null +++ b/client/src/components/content-blocks/ModuleRoomSlug.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/client/src/components/mixins/room.js b/client/src/components/mixins/room.js new file mode 100644 index 00000000..6059b87e --- /dev/null +++ b/client/src/components/mixins/room.js @@ -0,0 +1,38 @@ +import AddRoomEntryButton from '@/components/rooms/AddRoomEntryButton.vue'; +import RoomEntry from '@/components/rooms/RoomEntry.vue'; +import RoomGroupWidget from '@/components/rooms/RoomGroupWidget'; +import EntryCountWidget from '@/components/rooms/EntryCountWidget'; +import RoomActions from '@/components/rooms/RoomActions'; + +export default { + components: { + EntryCountWidget, + RoomGroupWidget, + AddRoomEntryButton, + RoomEntry, + RoomActions + }, + + beforeDestroy() { + this.$store.dispatch('setSpecialContainerClass', ''); + }, + + created() { + }, + + data() { + return { + room: [], + entries: [] + } + }, + + computed: { + roomEntryCount() { + return (this.room && this.room.roomEntries) ? this.room.roomEntries.length : 0 + }, + roomAppearance() { + return this.room ? this.room.appearance : '' + } + } +} diff --git a/client/src/components/modules/ModuleNavigation.vue b/client/src/components/modules/ModuleNavigation.vue index d7496eb0..0ad57d14 100644 --- a/client/src/components/modules/ModuleNavigation.vue +++ b/client/src/components/modules/ModuleNavigation.vue @@ -10,7 +10,7 @@ :key="assignment.id" class="module-navigation__anchor sub-navigation-item__link" exact-active-class="module-navigation__anchor--active" - >{{assignmentTitle(assignment)}} + >{{assignment.value.assignment}}
@@ -41,8 +41,6 @@ class="module-navigation__solution-toggle" data-cy="toggle-enable-solutions">
- - @@ -79,13 +77,14 @@ showResults() { return this.me.permissions.includes('users.can_manage_school_class_content'); }, - assignments() { - return [...this.module.assignments].sort((a, b) => { - return a.title.toLowerCase() > b.title.toLowerCase() ? 1 : -1; - }) - }, canManageContent() { return this.me.permissions.includes('users.can_manage_school_class_content'); + }, + assignments() { + if (!this.module.chapters) { + return []; + } + return this.extractAssignmentsFromChapters(this.module.chapters, []); } }, @@ -105,10 +104,47 @@ return `#chapter-${index}` }, submissionsLink(assignment) { - return `/module/${this.module.slug}/submissions/${assignment.id}`; + return `/module/${this.module.slug}/submissions/${assignment.value.id}`; }, - assignmentTitle(assignment) { - return assignment.assignment.length > 25 ? assignment.assignment.substring(0, 22) + '...' : assignment.assignment; + extractAssignmentsFromChapters(chapters, assignments) { + chapters.forEach(node => { + if (node.contentBlocks) { // in chapter node + // if chapter information is required then do it here like so: + // assignments.push({ + // chapterTitle: node.title + // }); + // return this.extractAssignmentsFromChapters(node.contentBlocks, assignments); + assignments = this.extractAssignmentsFromChapters(node.contentBlocks, assignments); + } else if (node.contents) { + let foundAssignments = []; + node.contents.forEach(contentNode => { + foundAssignments = this.concatAssignments(foundAssignments, contentNode); + }); + assignments = [...assignments, ...foundAssignments]; + } + }); + return assignments; + }, + concatAssignments(foundAssignments, node) { + let foundAssignment = this.findAssignment(node); + return foundAssignment ? [...foundAssignments, ...foundAssignment] : foundAssignments; + }, + findAssignment(node) { + if (node.type && node.type === 'assignment') { + return [node]; + } else if (node.type && node.type === 'content_list_item') { + let foundAssignments = []; + node.value.forEach(contentNode => { + foundAssignments = this.concatAssignments(foundAssignments, contentNode); + }); + return this.flattenArray(foundAssignments) + } else { + return null; + } + }, + flattenArray(arrayToFlatten) { + // https://stackoverflow.com/questions/10865025/merge-flatten-an-array-of-arrays + return [].concat.apply([], arrayToFlatten); } } } @@ -156,6 +192,9 @@ font-size: 0.875rem; line-height: 1.2rem; margin-bottom: .6875rem; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; &--active { color: $color-brand; diff --git a/client/src/components/portfolio/ProjectWidget.vue b/client/src/components/portfolio/ProjectWidget.vue index 87873352..df9493ad 100644 --- a/client/src/components/portfolio/ProjectWidget.vue +++ b/client/src/components/portfolio/ProjectWidget.vue @@ -59,8 +59,8 @@ display: grid; margin-bottom: 0; } - grid-template-rows: 150px 1fr; - -ms-grid-rows: 150px 48px; + grid-template-rows: 175px 1fr; + -ms-grid-rows: 175px 48px; -ms-grid-columns: 1fr; &__content { diff --git a/client/src/components/profile/Avatar.vue b/client/src/components/profile/Avatar.vue index 8e781a7e..7d19d570 100644 --- a/client/src/components/profile/Avatar.vue +++ b/client/src/components/profile/Avatar.vue @@ -25,8 +25,10 @@ mounted () { if (this.avatarUrl !== '') { this.$refs.fakeImage.addEventListener('load', () => { - this.$refs.fakeImage.remove(); - this.isAvatarLoaded = true; + if (this.$refs.fakeImage) { + this.$refs.fakeImage.remove(); + this.isAvatarLoaded = true; + } }); }; } diff --git a/client/src/components/toggle-menu/ToggleSolutionsForModule.vue b/client/src/components/toggle-menu/ToggleSolutionsForModule.vue index 21d23ce9..503c448f 100644 --- a/client/src/components/toggle-menu/ToggleSolutionsForModule.vue +++ b/client/src/components/toggle-menu/ToggleSolutionsForModule.vue @@ -1,5 +1,5 @@ diff --git a/client/src/graphql/gql/moduleRoomEntryQuery.gql b/client/src/graphql/gql/moduleRoomEntryQuery.gql new file mode 100644 index 00000000..5f0d275d --- /dev/null +++ b/client/src/graphql/gql/moduleRoomEntryQuery.gql @@ -0,0 +1,14 @@ +#import "./fragments/roomParts.gql" +#import "./fragments/roomEntryParts.gql" +query ModuleRoomEntriesQuery($slug: String, $classId: ID!) { + moduleRoom(slug: $slug, classId: $classId) { + ...RoomParts + roomEntries { + edges { + node { + ...RoomEntryParts + } + } + } + } +} diff --git a/client/src/layouts/DefaultLayout.vue b/client/src/layouts/DefaultLayout.vue index d9e05517..b29dabc7 100644 --- a/client/src/layouts/DefaultLayout.vue +++ b/client/src/layouts/DefaultLayout.vue @@ -35,74 +35,6 @@ diff --git a/client/src/layouts/FullScreenLayout.vue b/client/src/layouts/FullScreenLayout.vue new file mode 100644 index 00000000..446edf75 --- /dev/null +++ b/client/src/layouts/FullScreenLayout.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/client/src/layouts/SimpleLayout.vue b/client/src/layouts/SimpleLayout.vue index ff35ba0f..58442114 100644 --- a/client/src/layouts/SimpleLayout.vue +++ b/client/src/layouts/SimpleLayout.vue @@ -7,7 +7,7 @@ - diff --git a/client/src/pages/portfolio.vue b/client/src/pages/portfolio.vue index 4b74e30d..8b796d3f 100644 --- a/client/src/pages/portfolio.vue +++ b/client/src/pages/portfolio.vue @@ -66,7 +66,7 @@ grid-template-columns: minmax(max-content, 840px); } grid-row-gap: 30px; - grid-auto-rows: 200px; + grid-auto-rows: 225px; max-width: 840px; width: 100vw; /*justify-self: center;*/ diff --git a/client/src/pages/room.vue b/client/src/pages/room.vue index 9b781af1..bc527133 100644 --- a/client/src/pages/room.vue +++ b/client/src/pages/room.vue @@ -25,46 +25,11 @@ diff --git a/client/src/pages/start.vue b/client/src/pages/start.vue index b95af4cc..704ad233 100644 --- a/client/src/pages/start.vue +++ b/client/src/pages/start.vue @@ -35,16 +35,16 @@ -
-

News

- - - -
Mehr...
-
+ + + + + + + + + +