Skip to content
Snippets Groups Projects
Select Git revision
  • b57422a8a850428c39fb622c597c98a63e398ad5
  • main default protected
  • step-3263
  • feature/plugins-cli
  • feature/vite
  • step-2484-peerreview
  • biest/issue-5051
  • tests/simplify-jsonapi-tests
  • fix/typo-in-1a70031
  • feature/broadcasting
  • database-seeders-and-factories
  • feature/peer-review-2
  • feature-feedback-jsonapi
  • feature/peerreview
  • feature/balloon-plus
  • feature/stock-images-unsplash
  • tic-2588
  • 5.0
  • 5.2
  • biest/unlock-blocks
  • biest-1514
21 results

ResponsiveHelper.php

Blame
  • Forked from Stud.IP / Stud.IP
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    CoursewareSharedItems.vue 3.22 KiB
    <template>
        <div class="cw-shared-items">
            <h2 v-if="sharedElements.length > 0">{{ $gettext('Geteilte Lernmaterialien') }}</h2>
            <ul class="cw-tiles">
                <li
                    v-for="element in sharedElements"
                    :key="element.id"
                    class="tile"
                    :class="[element.attributes.payload.color, sharedElements.length > 3 ? '':  'cw-tile-margin']"
                >
                    <a :href="getSharedElementUrl(element.id)" :title="element.attributes.title">
                        <div
                            class="preview-image"
                            :class="[hasImage(element) ? '' : 'default-image']"
                            :style="getChildStyle(element)"
                        >
                            <div class="overlay-text">{{ getOwnerName(element) }}</div>
                        </div>
                        <div class="description">
                            <header
                                :class="[element.attributes.purpose !== '' ? 'description-icon-' + element.attributes.purpose : '']"
                            >
                                {{ element.attributes.title }}
                            </header>
                            <div class="description-text-wrapper">
                                <p>{{ element.attributes.payload.description }}</p>
                            </div>
                            <footer>
                                {{ countChildren(element) + 1 }}
                                <translate
                                    :translate-n="countChildren(element) + 1"
                                    translate-plural="Seiten"
                                >
                                    Seite
                                </translate>
                            </footer>
                        </div>
                    </a>
                </li>
            </ul>
        </div>
    </template>
    <script>
    import { mapGetters } from 'vuex';
    
    export default {
        name: 'courseware-shared-items',
        computed: {
            ...mapGetters({
                sharedElements: 'courseware-structural-elements-shared/all',
                userById: 'users/byId',
            }),
        },
        methods: {
            getChildStyle(child) {
                let url = child.relationships?.image?.meta?.['download-url'];
    
                if(url) {
                    return {'background-image': 'url(' + url + ')'};
                } else {
                    return {};
                }
            },
            hasImage(child) {
                return child.relationships?.image?.data !== null;
            },
            getElementUrl(elementId) {
                return STUDIP.URLHelper.base_url + 'dispatch.php/contents/courseware/courseware#/structural_element/' + elementId;
            },
            getSharedElementUrl(elementId) {
                return STUDIP.URLHelper.base_url + 'dispatch.php/contents/courseware/shared_content_courseware/' + elementId;
            },
            getOwnerName(element) {
                const ownerId = element.relationships.owner.data.id;
                const owner = this.userById({ id: ownerId });
    
                return owner.attributes['formatted-name']; 
            },
            countChildren(element) {
                let data = element.relationships.children.data;
                if (data) {
                    return data.length;
                }
                return 0;
            },
        },
    }
    </script>