Skip to content
Snippets Groups Projects
Commit fca7f5cf authored by Viktoria Wiebe's avatar Viktoria Wiebe Committed by Elmar Ludwig
Browse files

fixes #1171 and #1169

Closes #1171 and #1169

Merge request studip/studip!844
parent f0f88fb2
No related branches found
No related tags found
No related merge requests found
Showing
with 170 additions and 134 deletions
...@@ -117,11 +117,7 @@ class Contents_CoursewareController extends AuthenticatedController ...@@ -117,11 +117,7 @@ class Contents_CoursewareController extends AuthenticatedController
private function setCoursewareSidebar() private function setCoursewareSidebar()
{ {
$sidebar = \Sidebar::Get(); $sidebar = \Sidebar::Get();
$actions = new TemplateWidget( $sidebar->addWidget(new VueWidget('courseware-action-widget'));
_('Aktionen'),
$this->get_template_factory()->open('course/courseware/action_widget')
);
$sidebar->addWidget($actions)->addLayoutCSSClass('courseware-action-widget');
$views = new TemplateWidget( $views = new TemplateWidget(
_('Suche'), _('Suche'),
...@@ -129,17 +125,8 @@ class Contents_CoursewareController extends AuthenticatedController ...@@ -129,17 +125,8 @@ class Contents_CoursewareController extends AuthenticatedController
); );
$sidebar->addWidget($views)->addLayoutCSSClass('courseware-search-widget'); $sidebar->addWidget($views)->addLayoutCSSClass('courseware-search-widget');
$views = new \TemplateWidget( $sidebar->addWidget(new VueWidget('courseware-view-widget'));
_('Ansichten'), $sidebar->addWidget(new VueWidget('courseware-export-widget'));
$this->get_template_factory()->open('course/courseware/view_widget')
);
$sidebar->addWidget($views)->addLayoutCSSClass('courseware-view-widget');
$exports = new TemplateWidget(
_('Export '),
$this->get_template_factory()->open('course/courseware/export_widget')
);
$sidebar->addWidget($exports)->addLayoutCSSClass('courseware-export-widget');
} }
private function getLicences() private function getLicences()
......
...@@ -110,11 +110,7 @@ class Course_CoursewareController extends AuthenticatedController ...@@ -110,11 +110,7 @@ class Course_CoursewareController extends AuthenticatedController
private function setIndexSidebar(): void private function setIndexSidebar(): void
{ {
$sidebar = Sidebar::Get(); $sidebar = Sidebar::Get();
$actions = new TemplateWidget( $sidebar->addWidget(new VueWidget('courseware-action-widget'));
_('Aktionen'),
$this->get_template_factory()->open('course/courseware/action_widget')
);
$sidebar->addWidget($actions)->addLayoutCSSClass('courseware-action-widget');
$views = new TemplateWidget( $views = new TemplateWidget(
_('Suche'), _('Suche'),
...@@ -122,20 +118,10 @@ class Course_CoursewareController extends AuthenticatedController ...@@ -122,20 +118,10 @@ class Course_CoursewareController extends AuthenticatedController
); );
$sidebar->addWidget($views)->addLayoutCSSClass('courseware-search-widget'); $sidebar->addWidget($views)->addLayoutCSSClass('courseware-search-widget');
$views = new TemplateWidget( $sidebar->addWidget(new VueWidget('courseware-view-widget'));
_('Ansichten'), $sidebar->addWidget(new VueWidget('courseware-export-widget'));
$this->get_template_factory()->open('course/courseware/view_widget')
);
$sidebar->addWidget($views)->addLayoutCSSClass('courseware-view-widget');
$exports = new TemplateWidget(
_('Export '),
$this->get_template_factory()->open('course/courseware/export_widget')
);
$sidebar->addWidget($exports)->addLayoutCSSClass('courseware-export-widget');
} }
private function setDashboardSidebar(): void private function setDashboardSidebar(): void
{ {
$sidebar = Sidebar::Get(); $sidebar = Sidebar::Get();
......
<aside id="courseware-action-widget" class="widget-sidebar"></aside>
<aside id="courseware-export-widget" class="widget-sidebar"></aside>
<aside id="courseware-view-widget" class="widget-sidebar"></aside>
<?php
/**
* This widget type delegates all rendering of the widget to vuejs.
*
* @author Elmar Ludwig
* @license GPL2 or any later version
* @since Stud.IP 5.0
*/
class VueWidget extends Widget
{
/**
* Constructs the widget with the given id on the element.
*/
public function __construct($id)
{
$this->id = $id;
$this->layout = 'widgets/vue-widget';
$this->forced_rendering = true;
}
}
import Multiselect from './components/Multiselect.vue'; import Multiselect from './components/Multiselect.vue';
import EditableList from "./components/EditableList.vue"; import EditableList from "./components/EditableList.vue";
import Quicksearch from './components/Quicksearch.vue'; import Quicksearch from './components/Quicksearch.vue';
import SidebarWidget from './components/SidebarWidget.vue';
import StudipActionMenu from './components/StudipActionMenu.vue'; import StudipActionMenu from './components/StudipActionMenu.vue';
import StudipAssetImg from './components/StudipAssetImg.vue'; import StudipAssetImg from './components/StudipAssetImg.vue';
import StudipDateTime from './components/StudipDateTime.vue'; import StudipDateTime from './components/StudipDateTime.vue';
...@@ -23,6 +24,7 @@ const BaseComponents = { ...@@ -23,6 +24,7 @@ const BaseComponents = {
EditableList, EditableList,
Quicksearch, Quicksearch,
RangeInput, RangeInput,
SidebarWidget,
StudipActionMenu, StudipActionMenu,
StudipAssetImg, StudipAssetImg,
StudipDateTime, StudipDateTime,
......
<template>
<div class="sidebar-widget">
<div class="sidebar-widget-header" v-if="title">
{{ title }}
</div>
<div class="sidebar-widget-content">
<slot name="content" />
</div>
</div>
</template>
<script>
export default {
name: 'sidebar-widget',
props: {
title: String,
},
}
</script>
<template> <template>
<ul class="widget-list widget-links cw-action-widget" v-if="structuralElement"> <sidebar-widget :title="$gettext('Aktionen')" v-if="structuralElement">
<li class="cw-action-widget-show-toc"> <template #content>
<button @click="toggleTOC"> <ul class="widget-list widget-links cw-action-widget">
{{ tocText }} <li class="cw-action-widget-show-toc">
</button> <button @click="toggleTOC">
</li> {{ tocText }}
<li class="cw-action-widget-show-consume-mode"> </button>
<button @click="showConsumeMode"> </li>
<translate>Vollbild einschalten</translate> <li class="cw-action-widget-show-consume-mode">
</button> <button @click="showConsumeMode">
</li> <translate>Vollbild einschalten</translate>
<li v-if="canEdit" class="cw-action-widget-edit"> </button>
<button @click="editElement"> </li>
<translate>Seite bearbeiten</translate> <li v-if="canEdit" class="cw-action-widget-edit">
</button> <button @click="editElement">
</li> <translate>Seite bearbeiten</translate>
<li v-if="canEdit" class="cw-action-widget-sort"> </button>
<button @click="sortContainers"> </li>
<translate>Abschnitte sortieren</translate> <li v-if="canEdit" class="cw-action-widget-sort">
</button> <button @click="sortContainers">
</li> <translate>Abschnitte sortieren</translate>
<li v-if="canEdit" class="cw-action-widget-add"> </button>
<button @click="addElement"> </li>
<translate>Seite hinzufügen</translate> <li v-if="canEdit" class="cw-action-widget-add">
</button> <button @click="addElement">
</li> <translate>Seite hinzufügen</translate>
<li class="cw-action-widget-info"> </button>
<button @click="showElementInfo"> </li>
<translate>Informationen anzeigen</translate> <li class="cw-action-widget-info">
</button> <button @click="showElementInfo">
</li> <translate>Informationen anzeigen</translate>
<li class="cw-action-widget-star"> </button>
<button @click="createBookmark"> </li>
<translate>Lesezeichen setzen</translate> <li class="cw-action-widget-star">
</button> <button @click="createBookmark">
</li> <translate>Lesezeichen setzen</translate>
<li v-if="context.type === 'users'" class="cw-action-widget-link"> </button>
<button @click="linkElement"> </li>
<translate>Öffentlichen Link erzeugen</translate> <li v-if="context.type === 'users'" class="cw-action-widget-link">
</button> <button @click="linkElement">
</li> <translate>Öffentlichen Link erzeugen</translate>
<li v-if="!isOwner" class="cw-action-widget-oer"> </button>
<button @click="suggestOER"> </li>
<translate>Material für %{oerTitle} vorschlagen</translate> <li v-if="!isOwner" class="cw-action-widget-oer">
</button> <button @click="suggestOER">
</li> <translate>Material für %{oerTitle} vorschlagen</translate>
<li v-if="!isRoot && canEdit" class="cw-action-widget-trash"> </button>
<button @click="deleteElement"> </li>
<translate>Seite löschen</translate> <li v-if="!isRoot && canEdit" class="cw-action-widget-trash">
</button> <button @click="deleteElement">
</li> <translate>Seite löschen</translate>
</ul> </button>
</li>
</ul>
</template>
</sidebar-widget>
</template> </template>
<script> <script>
import StudipIcon from './../StudipIcon.vue'; import StudipIcon from './../StudipIcon.vue';
import SidebarWidget from '../SidebarWidget.vue';
import CoursewareExport from '@/vue/mixins/courseware/export.js'; import CoursewareExport from '@/vue/mixins/courseware/export.js';
import { mapActions, mapGetters } from 'vuex'; import { mapActions, mapGetters } from 'vuex';
...@@ -63,6 +68,7 @@ export default { ...@@ -63,6 +68,7 @@ export default {
props: ['structuralElement', 'canVisit'], props: ['structuralElement', 'canVisit'],
components: { components: {
StudipIcon, StudipIcon,
SidebarWidget,
}, },
mixins: [CoursewareExport], mixins: [CoursewareExport],
computed: { computed: {
......
<template> <template>
<ul class="widget-list widget-links cw-export-widget" v-if="structuralElement"> <sidebar-widget :title="$gettext('Export')" v-if="structuralElement">
<li v-if="showExportArchiv" class="cw-export-widget-export"> <template #content>
<button @click="exportElement"> <ul class="widget-list widget-links cw-export-widget" v-if="structuralElement">
<translate>Seite exportieren</translate> <li v-if="showExportArchiv" class="cw-export-widget-export">
</button> <button @click="exportElement">
</li> <translate>Seite exportieren</translate>
<li v-if="showExportPdf" class="cw-export-widget-export-pdf"> </button>
<button @click="pdfElement"> </li>
<translate>Seite als pdf-Dokument exportieren</translate> <li v-if="showExportPdf" class="cw-export-widget-export-pdf">
</button> <button @click="pdfElement">
</li> <translate>Seite als pdf-Dokument exportieren</translate>
<li v-if="showOer" class="cw-export-widget-oer"> </button>
<button @click="oerElement"> </li>
<translate>Seite auf %{oerTitle} veröffentlichen</translate> <li v-if="showOer" class="cw-export-widget-oer">
</button> <button @click="oerElement">
</li> <translate>Seite auf %{oerTitle} veröffentlichen</translate>
<li v-if="!showExportArchiv && !showExportPdf && !showOer"> </button>
<translate>Keine Exportoptionen verfügbar</translate> </li>
</li> <li v-if="!showExportArchiv && !showExportPdf && !showOer">
</ul> <translate>Keine Exportoptionen verfügbar</translate>
</li>
</ul>
</template>
</sidebar-widget>
</template> </template>
<script> <script>
import SidebarWidget from '../SidebarWidget.vue';
import CoursewareExport from '@/vue/mixins/courseware/export.js'; import CoursewareExport from '@/vue/mixins/courseware/export.js';
import { mapActions, mapGetters } from 'vuex'; import { mapActions, mapGetters } from 'vuex';
export default { export default {
name: 'courseware-export-widget', name: 'courseware-export-widget',
props: ['structuralElement', 'canVisit'], props: ['structuralElement', 'canVisit'],
components: {
SidebarWidget
},
mixins: [CoursewareExport], mixins: [CoursewareExport],
computed: { computed: {
...mapGetters({ ...mapGetters({
......
...@@ -15,12 +15,14 @@ ...@@ -15,12 +15,14 @@
</div> </div>
<div class="cw-ribbon-wrapper-right"> <div class="cw-ribbon-wrapper-right">
<button <button
v-if="showToolbarButton"
class="cw-ribbon-button cw-ribbon-button-menu" class="cw-ribbon-button cw-ribbon-button-menu"
:title="textRibbon.toolbar" :title="textRibbon.toolbar"
@click.prevent="activeToolbar" @click.prevent="activeToolbar"
> >
</button> </button>
<button <button
v-if="showModeSwitchButton"
ref="consumeModeSwitch" ref="consumeModeSwitch"
class="cw-ribbon-button" class="cw-ribbon-button"
:class="[consumeMode ? 'cw-ribbon-button-zoom-out' : 'cw-ribbon-button-zoom']" :class="[consumeMode ? 'cw-ribbon-button-zoom-out' : 'cw-ribbon-button-zoom']"
......
<template> <template>
<ul class="widget-list widget-links sidebar-views cw-view-widget"> <sidebar-widget :title="$gettext('Ansichten')" v-if="structuralElement">
<li :class="{ active: readView }"> <template #content>
<button @click="setReadView"> <ul class="widget-list widget-links sidebar-views cw-view-widget">
<translate>Lesen</translate> <li :class="{ active: readView }">
</button> <button @click="setReadView">
</li> <translate>Lesen</translate>
<li </button>
v-if="canEdit" </li>
:class="{ active: editView }" <li
> v-if="canEdit"
<button @click="setEditView"> :class="{ active: editView }"
<translate>Bearbeiten</translate> >
</button> <button @click="setEditView">
</li> <translate>Bearbeiten</translate>
<li </button>
v-if="context.type === 'courses' && canVisit" </li>
:class="{ active: discussView }" <li
> v-if="context.type === 'courses' && canVisit"
<button @click="setDiscussView"> :class="{ active: discussView }"
<translate>Kommentieren</translate> >
</button> <button @click="setDiscussView">
</li> <translate>Kommentieren</translate>
</ul> </button>
</li>
</ul>
</template>
</sidebar-widget>
</template> </template>
<script> <script>
import SidebarWidget from '../SidebarWidget.vue';
import { mapActions, mapGetters } from 'vuex'; import { mapActions, mapGetters } from 'vuex';
export default { export default {
name: 'courseware-view-widget', name: 'courseware-view-widget',
props: ['structuralElement', 'canVisit'], props: ['structuralElement', 'canVisit'],
components: {
SidebarWidget
},
computed: { computed: {
...mapGetters({ ...mapGetters({
viewMode: 'viewMode', viewMode: 'viewMode',
......
...@@ -10,16 +10,16 @@ ...@@ -10,16 +10,16 @@
@select="selectStructuralElement" @select="selectStructuralElement"
></courseware-structural-element> ></courseware-structural-element>
<MountingPortal mountTo="#courseware-action-widget" name="sidebar-actions"> <MountingPortal mountTo="#courseware-action-widget" name="sidebar-actions">
<courseware-action-widget :structural-element="selected" :canVisit="canVisit"></courseware-action-widget> <courseware-action-widget :structural-element="selected" :canVisit="canVisit" v-if="!showSearchResults"></courseware-action-widget>
</MountingPortal> </MountingPortal>
<MountingPortal mountTo="#courseware-search-widget" name="sidebar-search"> <MountingPortal mountTo="#courseware-search-widget" name="sidebar-search">
<courseware-search-widget></courseware-search-widget> <courseware-search-widget></courseware-search-widget>
</MountingPortal> </MountingPortal>
<MountingPortal mountTo="#courseware-view-widget" name="sidebar-views"> <MountingPortal mountTo="#courseware-view-widget" name="sidebar-views">
<courseware-view-widget :structural-element="selected" :canVisit="canVisit"></courseware-view-widget> <courseware-view-widget :structural-element="selected" :canVisit="canVisit" v-if="!showSearchResults"></courseware-view-widget>
</MountingPortal> </MountingPortal>
<MountingPortal mountTo="#courseware-export-widget" name="sidebar-export"> <MountingPortal mountTo="#courseware-export-widget" name="sidebar-export">
<courseware-export-widget :structural-element="selected" :canVisit="canVisit"></courseware-export-widget> <courseware-export-widget :structural-element="selected" :canVisit="canVisit" v-if="!showSearchResults"></courseware-export-widget>
</MountingPortal> </MountingPortal>
</div> </div>
<studip-progress-indicator <studip-progress-indicator
......
<div id="<?= htmlReady($id) ?>"></div>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment