fix: detect editor change to enable plyr on newly added videos

This commit is contained in:
Jannat Patel
2025-04-25 11:18:19 +05:30
parent 66f28ef7a6
commit 63319d32e8
4 changed files with 40 additions and 7 deletions

View File

@@ -5,7 +5,7 @@
> >
<Breadcrumbs class="h-7" :items="breadcrumbs" /> <Breadcrumbs class="h-7" :items="breadcrumbs" />
<div class="flex items-center space-x-2"> <div class="flex items-center space-x-2">
<Tooltip :text="__('Zen Mode')"> <Tooltip v-if="lesson.data?.membership" :text="__('Zen Mode')">
<Button @click="goFullScreen()"> <Button @click="goFullScreen()">
<template #icon> <template #icon>
<Focus class="w-4 h-4 stroke-2" /> <Focus class="w-4 h-4 stroke-2" />
@@ -147,7 +147,7 @@
/> />
</div> </div>
<div v-else class="text-sm mt-1 text-ink-gray-7"> <div v-else class="text-sm mt-1 text-ink-gray-7">
{{ lesson.data.course_title }} {{ lesson.data.chapter_title }} - {{ lesson.data.course_title }}
</div> </div>
<div <div
@@ -168,19 +168,19 @@
</div> </div>
<div <div
v-else-if="lesson.data.instructor_notes" v-else-if="lesson.data.instructor_notes"
class="ProseMirror prose prose-table:table-fixed prose-td:p-2 prose-th:p-2 prose-td:border prose-th:border prose-td:border-outline-gray-2 prose-th:border-outline-gray-2 prose-td:relative prose-th:relative prose-th:bg-surface-gray-2 prose-sm max-w-none !whitespace-normal mt-10" class="ProseMirror prose prose-table:table-fixed prose-td:p-2 prose-th:p-2 prose-td:border prose-th:border prose-td:border-outline-gray-2 prose-th:border-outline-gray-2 prose-td:relative prose-th:relative prose-th:bg-surface-gray-2 prose-sm max-w-none !whitespace-normal mt-8"
> >
<LessonContent :content="lesson.data.instructor_notes" /> <LessonContent :content="lesson.data.instructor_notes" />
</div> </div>
<div <div
v-if="lesson.data.content" v-if="lesson.data.content"
class="ProseMirror prose prose-table:table-fixed prose-td:p-2 prose-th:p-2 prose-td:border prose-th:border prose-td:border-outline-gray-2 prose-th:border-outline-gray-2 prose-td:relative prose-th:relative prose-th:bg-surface-gray-2 prose-sm max-w-none !whitespace-normal mt-10" class="ProseMirror prose prose-table:table-fixed prose-td:p-2 prose-th:p-2 prose-td:border prose-th:border prose-td:border-outline-gray-2 prose-th:border-outline-gray-2 prose-td:relative prose-th:relative prose-th:bg-surface-gray-2 prose-sm max-w-none !whitespace-normal mt-8"
> >
<div id="editor"></div> <div id="editor"></div>
</div> </div>
<div <div
v-else v-else
class="ProseMirror prose prose-table:table-fixed prose-td:p-2 prose-th:p-2 prose-td:border prose-th:border prose-td:border-outline-gray-2 prose-th:border-outline-gray-2 prose-td:relative prose-th:relative prose-th:bg-surface-gray-2 prose-sm max-w-none !whitespace-normal mt-10" class="ProseMirror prose prose-table:table-fixed prose-td:p-2 prose-th:p-2 prose-td:border prose-th:border prose-td:border-outline-gray-2 prose-th:border-outline-gray-2 prose-td:relative prose-th:relative prose-th:bg-surface-gray-2 prose-sm max-w-none !whitespace-normal mt-8"
> >
<LessonContent <LessonContent
v-if="lesson.data?.body" v-if="lesson.data?.body"

View File

@@ -97,10 +97,12 @@ import {
import { sessionStore } from '../stores/session' import { sessionStore } from '../stores/session'
import EditorJS from '@editorjs/editorjs' import EditorJS from '@editorjs/editorjs'
import LessonHelp from '@/components/LessonHelp.vue' import LessonHelp from '@/components/LessonHelp.vue'
import { ChevronRight } from 'lucide-vue-next' import { AppleIcon, ChevronRight } from 'lucide-vue-next'
import { createToast, getEditorTools } from '@/utils' import { createToast, getEditorTools } from '@/utils'
import { capture } from '@/telemetry' import { capture } from '@/telemetry'
import { useOnboarding } from 'frappe-ui/frappe' import { useOnboarding } from 'frappe-ui/frappe'
import Plyr from 'plyr'
import 'plyr/dist/plyr.css'
const { brand } = sessionStore() const { brand } = sessionStore()
const editor = ref(null) const editor = ref(null)
@@ -143,6 +145,9 @@ const renderEditor = (holder) => {
tools: getEditorTools(true), tools: getEditorTools(true),
autofocus: true, autofocus: true,
defaultBlock: 'markdown', defaultBlock: 'markdown',
onChange: async (api, event) => {
enablePlyr()
},
}) })
} }
@@ -672,4 +677,30 @@ iframe {
.ce-popover-item[data-item-name='markdown'] { .ce-popover-item[data-item-name='markdown'] {
display: none !important; display: none !important;
} }
.plyr__volume input[type='range'] {
display: none;
}
.plyr__control--overlaid {
background: radial-gradient(
circle,
rgba(0, 0, 0, 0.4) 0%,
rgba(0, 0, 0, 0.5) 50%
);
}
.plyr__control:hover {
background: none;
}
.plyr--video {
border: 1px solid theme('colors.gray.200');
border-radius: 8px;
}
:root {
--plyr-range-fill-background: white;
--plyr-video-control-background-hover: transparent;
}
</style> </style>

View File

@@ -87,7 +87,6 @@ import { sessionStore } from '@/stores/session'
const user = inject('$user') const user = inject('$user')
const router = useRouter() const router = useRouter()
const { brand } = sessionStore() const { brand } = sessionStore()
console.log(user.data?.sitename)
const persona = reactive({ const persona = reactive({
role: null, role: null,

View File

@@ -1313,6 +1313,9 @@ def get_lesson(course, chapter, lesson):
else: else:
progress = get_progress(course, lesson_details.name) progress = get_progress(course, lesson_details.name)
lesson_details.chapter_title = frappe.db.get_value(
"Course Chapter", chapter_name, "title"
)
lesson_details.rendered_content = render_html(lesson_details) lesson_details.rendered_content = render_html(lesson_details)
neighbours = get_neighbour_lesson(course, chapter, lesson) neighbours = get_neighbour_lesson(course, chapter, lesson)
lesson_details.next = neighbours["next"] lesson_details.next = neighbours["next"]