Merge branch 'frappe:develop' into fix/ui-teardown

This commit is contained in:
Raizaaa
2026-03-24 16:58:26 +05:30
committed by GitHub
34 changed files with 17698 additions and 11709 deletions
+10
View File
@@ -75,6 +75,12 @@
/>
</Tooltip>
</div>
<Check
v-if="
chapter.is_scorm_package && isScormChapterComplete(chapter)
"
class="h-4 w-4 text-green-700"
/>
</DisclosureButton>
<DisclosurePanel v-if="!chapter.is_scorm_package">
<Draggable
@@ -401,6 +407,10 @@ const redirectToChapter = (chapter) => {
})
}
const isScormChapterComplete = (chapter) => {
return chapter.lessons?.length && chapter.lessons.every((l) => l.is_complete)
}
const isActiveLesson = (lessonNumber) => {
return (
route.params.chapterNumber == lessonNumber.split('-')[0] &&
+15 -9
View File
@@ -157,7 +157,7 @@ import {
createResource,
usePageMeta,
} from 'frappe-ui'
import { inject, ref, computed } from 'vue'
import { inject, ref, computed, watch, nextTick } from 'vue'
import { sessionStore } from '../stores/session'
import JobApplicationModal from '@/components/Modals/JobApplicationModal.vue'
import {
@@ -193,17 +193,11 @@ const job = createResource({
},
cache: ['job', props.job],
auto: true,
onSuccess: (data) => {
if (user.data?.name) {
jobApplication.submit()
applicationCount.submit()
}
},
})
const jobApplication = createResource({
url: 'frappe.client.get_list',
makeParams(values) {
makeParams() {
return {
doctype: 'LMS Job Application',
filters: {
@@ -216,7 +210,7 @@ const jobApplication = createResource({
const applicationCount = createResource({
url: 'frappe.client.get_count',
makeParams(values) {
makeParams() {
return {
doctype: 'LMS Job Application',
filters: {
@@ -226,6 +220,18 @@ const applicationCount = createResource({
},
})
const stopWatch = watch(
() => [job.data?.name, user.data?.name],
([jobName, userName]) => {
if (jobName && userName) {
jobApplication.submit()
applicationCount.submit()
nextTick(() => stopWatch())
}
},
{ immediate: true }
)
const openApplicationModal = () => {
showApplicationModal.value = true
}
+25
View File
@@ -700,6 +700,31 @@ const updateVideoWatchDuration = () => {
}
})
}
attachVideoEndedListeners()
}
const attachVideoEndedListeners = () => {
const onVideoEnded = () => {
markProgress()
trackVideoWatchDuration()
}
document.querySelectorAll('video').forEach((video) => {
if (!video._lmsEndedAttached) {
video.addEventListener('ended', onVideoEnded)
video._lmsEndedAttached = true
}
})
plyrSources.value.forEach((plyrSource) => {
if (!plyrSource._lmsEndedAttached) {
plyrSource.on('ended', onVideoEnded)
plyrSource.on('statechange', (event) => {
if (event.detail?.code === 0) onVideoEnded()
})
plyrSource._lmsEndedAttached = true
}
})
}
const updatePlyrVideoTime = (video) => {
+3 -1
View File
@@ -109,9 +109,10 @@ const getDataFromLMS = (key) => {
let saveTimeout = null
const debouncedSaveProgress = (scormDetails) => {
if (isSuccessfullyCompleted.value) return
clearTimeout(saveTimeout)
saveTimeout = setTimeout(() => {
saveProgress(scormDetails)
if (!isSuccessfullyCompleted.value) saveProgress(scormDetails)
}, 300)
}
@@ -124,6 +125,7 @@ const saveDataToLMS = (key, value) => {
(key === 'cmi.completion_status' && value === 'incomplete')
if (isLessonStatus || isCompletionStatus) {
if (isSuccessfullyCompleted.value) return
isSuccessfullyCompleted.value = true
}
@@ -78,7 +78,7 @@ def save_progress(lesson: str, course: str, scorm_details: dict = None):
if not membership:
return 0
frappe.db.set_value("LMS Enrollment", membership, "current_lesson", lesson)
frappe.db.set_value("LMS Enrollment", membership, "current_lesson", lesson, update_modified=False)
progress_already_exists = frappe.db.exists(
"LMS Course Progress", {"lesson": lesson, "member": frappe.session.user}
)
@@ -133,6 +133,7 @@ def save_progress(lesson: str, course: str, scorm_details: dict = None):
# Had to get doc, as on_change doesn't trigger when you use set_value. The trigger is necessary for badge to get assigned.
enrollment = frappe.get_doc("LMS Enrollment", membership)
enrollment.progress = progress
enrollment.flags.ignore_version = True
enrollment.save()
enrollment.run_method("on_change")
+608 -403
View File
File diff suppressed because it is too large Load Diff
+611 -406
View File
File diff suppressed because it is too large Load Diff
+608 -403
View File
File diff suppressed because it is too large Load Diff
+607 -402
View File
File diff suppressed because it is too large Load Diff
+608 -403
View File
File diff suppressed because it is too large Load Diff
+611 -406
View File
File diff suppressed because it is too large Load Diff
+608 -403
View File
File diff suppressed because it is too large Load Diff
+607 -402
View File
File diff suppressed because it is too large Load Diff
+607 -402
View File
File diff suppressed because it is too large Load Diff
+611 -406
View File
File diff suppressed because it is too large Load Diff
+608 -403
View File
File diff suppressed because it is too large Load Diff
+607 -402
View File
File diff suppressed because it is too large Load Diff
+607 -402
View File
File diff suppressed because it is too large Load Diff
+607 -402
View File
File diff suppressed because it is too large Load Diff
+607 -402
View File
File diff suppressed because it is too large Load Diff
+607 -402
View File
File diff suppressed because it is too large Load Diff
+610 -405
View File
File diff suppressed because it is too large Load Diff
+607 -402
View File
File diff suppressed because it is too large Load Diff
+607 -402
View File
File diff suppressed because it is too large Load Diff
+607 -402
View File
File diff suppressed because it is too large Load Diff
+610 -405
View File
File diff suppressed because it is too large Load Diff
+608 -403
View File
File diff suppressed because it is too large Load Diff
+611 -406
View File
File diff suppressed because it is too large Load Diff
+611 -406
View File
File diff suppressed because it is too large Load Diff
+611 -406
View File
File diff suppressed because it is too large Load Diff
+607 -402
View File
File diff suppressed because it is too large Load Diff
+608 -403
View File
File diff suppressed because it is too large Load Diff
+607 -402
View File
File diff suppressed because it is too large Load Diff
+610 -405
View File
File diff suppressed because it is too large Load Diff