Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
4317c22
fix: add overflow-y-auto to settings dialog content panel (#2079)
NuriaAmoros Mar 23, 2026
b62edef
chore: Spanish translations
frappe-pr-bot Mar 25, 2026
ce719f8
chore: Serbian (Cyrillic) translations
frappe-pr-bot Mar 25, 2026
72bc9f9
chore: Serbian (Latin) translations
frappe-pr-bot Mar 25, 2026
029d76c
fix: demo data roles and email account message
pateljannat Mar 26, 2026
71c13d6
fix: enhancements in quiz
pateljannat Mar 26, 2026
5b50701
fix: ui improvements in batch feedback and evaluator slots
pateljannat Mar 26, 2026
79c732e
Merge pull request #2255 from frappe/l10n_develop2
pateljannat Mar 26, 2026
26623ec
Merge pull request #2260 from pateljannat/issues-216
pateljannat Mar 26, 2026
73122d1
fix: change overflow-y-scroll to overflow-y-auto in settings list com…
NuriaAmoros Mar 26, 2026
5efcaab
fix: better sanitization of form fields
pateljannat Mar 27, 2026
ba01c1e
Merge pull request #2262 from NuriaAmoros/fix/overflow-settings-dialog
pateljannat Mar 27, 2026
839c8ec
Merge pull request #2264 from pateljannat/issues-217
pateljannat Mar 27, 2026
c510f28
fix: remove horizontal scrollbar and duplicate overflow div in sidebar
Owaishk08 Mar 27, 2026
0f7322b
chore: update POT file
frappe-pr-bot Mar 27, 2026
edf3a80
fix(style): improve payment gateway header text visibility in dark mode
LeoDanielA01 Mar 28, 2026
3509da6
fix(style): improve header text contrast in settings pages dark mode
LeoDanielA01 Mar 28, 2026
79441ae
fix: evaluator navigation by syncing modal visibility with route change
LeoDanielA01 Mar 28, 2026
c0f5cea
Merge pull request #2266 from frappe/pot_develop_2026-03-27
pateljannat Mar 30, 2026
81e8ff5
Merge pull request #2265 from Owaishk08/fix/sidebar-overflow
pateljannat Mar 30, 2026
e926fde
Merge pull request #2269 from LeoDanielA01/fix/payment-gateway-header…
pateljannat Mar 30, 2026
0fd5d6b
Merge pull request #2270 from LeoDanielA01/fix/settings-header-text-c…
pateljannat Mar 30, 2026
0e9abf9
Merge pull request #2271 from LeoDanielA01/fix/elevators-route
pateljannat Mar 30, 2026
bb1b1f6
fix: prevent path transversals in scorm upload
raizasafeel Mar 30, 2026
36c8c29
Merge pull request #2274 from raizasafeel/security
raizasafeel Mar 30, 2026
755a694
chore: French translations
frappe-pr-bot Mar 30, 2026
a02cc1e
chore: Spanish translations
frappe-pr-bot Mar 30, 2026
b660c81
chore: Arabic translations
frappe-pr-bot Mar 30, 2026
5845308
chore: Czech translations
frappe-pr-bot Mar 30, 2026
b80f6bc
chore: Danish translations
frappe-pr-bot Mar 30, 2026
15de77c
chore: German translations
frappe-pr-bot Mar 30, 2026
c95662a
chore: Hungarian translations
frappe-pr-bot Mar 30, 2026
b580b38
chore: Italian translations
frappe-pr-bot Mar 30, 2026
9aa8e72
chore: Dutch translations
frappe-pr-bot Mar 30, 2026
4714835
chore: Polish translations
frappe-pr-bot Mar 30, 2026
ed65713
chore: Portuguese translations
frappe-pr-bot Mar 30, 2026
e6dba19
chore: Russian translations
frappe-pr-bot Mar 30, 2026
d26c704
chore: Slovenian translations
frappe-pr-bot Mar 30, 2026
b35eda2
chore: Serbian (Cyrillic) translations
frappe-pr-bot Mar 30, 2026
eb4f348
chore: Swedish translations
frappe-pr-bot Mar 30, 2026
42c8823
chore: Turkish translations
frappe-pr-bot Mar 30, 2026
37a63c5
chore: Chinese Simplified translations
frappe-pr-bot Mar 30, 2026
d8faa43
chore: Vietnamese translations
frappe-pr-bot Mar 30, 2026
2a3a5bc
chore: Indonesian translations
frappe-pr-bot Mar 30, 2026
c87c21c
chore: Persian translations
frappe-pr-bot Mar 30, 2026
ff96120
chore: Thai translations
frappe-pr-bot Mar 30, 2026
399c893
chore: Croatian translations
frappe-pr-bot Mar 30, 2026
dc0a4ca
chore: Burmese translations
frappe-pr-bot Mar 30, 2026
0a732da
chore: Bosnian translations
frappe-pr-bot Mar 30, 2026
f736c89
chore: Norwegian Bokmal translations
frappe-pr-bot Mar 30, 2026
21c6372
chore: Serbian (Latin) translations
frappe-pr-bot Mar 30, 2026
46c0e86
chore: Portuguese, Brazilian translations
frappe-pr-bot Mar 30, 2026
1c43e6f
chore: Esperanto translations
frappe-pr-bot Mar 30, 2026
8100c67
Merge pull request #2277 from frappe/l10n_develop2
pateljannat Mar 31, 2026
42abc67
fix(notifications): single-line mobile header and improve empty state…
LeoDanielA01 Mar 31, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions frontend/src/components/Modals/AssignmentForm.vue
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
<script setup lang="ts">
import { Button, Dialog, FormControl, TextEditor, toast } from 'frappe-ui'
import { computed, reactive, watch } from 'vue'
import { escapeHTML, sanitizeHTML } from '@/utils'
import { sanitizeHTML } from '@/utils'
import Link from '@/components/Controls/Link.vue'

const show = defineModel()
Expand Down Expand Up @@ -133,7 +133,7 @@ watch(show, (newVal) => {
})

const validateFields = () => {
assignment.title = escapeHTML(assignment.title.trim())
assignment.title = sanitizeHTML(assignment.title.trim())
assignment.question = sanitizeHTML(assignment.question)
}

Expand Down
41 changes: 33 additions & 8 deletions frontend/src/components/Modals/FeedbackModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<Dialog
v-model="show"
:options="{
size: '4xl',
size: '5xl',
}"
>
<template #body>
Expand All @@ -19,10 +19,17 @@
rowHeight: 'h-16',
selectable: false,
}"
class="border rounded-lg py-2 px-3"
>
<ListHeader
class="mb-2 grid items-center space-x-4 rounded bg-surface-gray-2 p-2"
></ListHeader>
class="mb-2 grid items-center rounded bg-surface-white border-b rounded-none !px-0"
>
<ListHeaderItem :item="item" v-for="item in feedbackColumns">
<template #prefix="{ item }">
<FeatherIcon :name="item.icon?.toString()" class="h-4 w-4" />
</template>
</ListHeaderItem>
</ListHeader>
<ListRows>
<ListRow
:row="row"
Expand All @@ -41,7 +48,7 @@
class="flex"
:image="row['member_image']"
:label="item"
size="sm"
size="xl"
/>
</div>
</template>
Expand All @@ -63,9 +70,11 @@
<script setup lang="ts">
import {
Dialog,
ListView,
Avatar,
FeatherIcon,
ListView,
ListHeader,
ListHeaderItem,
ListRows,
ListRow,
ListRowItem,
Expand All @@ -89,27 +98,43 @@ const feedbackColumns = computed(() => {
label: 'Member',
key: 'member_name',
width: '10rem',
align: 'left',
icon: 'user',
},
{
label: 'Feedback',
key: 'feedback',
width: '15rem',
align: 'left',
icon: 'message-square',
},
{
label: 'Content',
key: 'content',
width: '9rem',
width: '10rem',
align: 'center',
icon: 'book',
},
{
label: 'Instructors',
key: 'instructors',
width: '9rem',
width: '10rem',
align: 'center',
icon: 'users',
},
{
label: 'Value',
key: 'value',
width: '9rem',
width: '10rem',
align: 'center',
icon: 'dollar-sign',
},
]
})
</script>
<style>
.feedback-list > button > div {
padding: 0.2rem 0;
margin-bottom: 0.2rem;
}
</style>
16 changes: 5 additions & 11 deletions frontend/src/components/Quiz.vue
Original file line number Diff line number Diff line change
Expand Up @@ -228,14 +228,6 @@
:model-value="reviewQuestions.includes(activeQuestion) ? 1 : 0"
@change="markForReview($event, activeQuestion)"
/>
<!-- <div class="text-sm text-ink-gray-5">
{{
__('Question {0} of {1}').format(
activeQuestion,
questions.length
)
}}
</div> -->
<div
v-if="!quiz.data.show_answers"
class="flex items-center space-x-2"
Expand All @@ -257,11 +249,13 @@
'cursor-pointer': item !== '...',
'bg-surface-gray-4 border border-outline-gray-5 font-medium':
activeQuestion == item,
'bg-surface-gray-3 text-ink-gray-6':
activeQuestion != item && item !== '...',
'text-ink-gray-5': item === '...',
'bg-surface-blue-3 text-ink-white':
attemptedQuestions.includes(item) && activeQuestion != item,
'bg-surface-gray-3 text-ink-gray-6':
activeQuestion != item &&
item !== '...' &&
!attemptedQuestions.includes(item),
}"
@click="item !== '...' && switchQuestion(item)"
>
Expand Down Expand Up @@ -315,7 +309,7 @@
<div class="flex items-center space-x-2 mt-2">
<div
v-for="index in reviewQuestions"
@click="activeQuestion = index"
@click="switchQuestion(index)"
class="w-6 h-6 rounded-full flex items-center justify-center text-sm cursor-pointer bg-surface-gray-3"
>
{{ index }}
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Settings/Badges.vue
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
{{ __('New') }}
</Button>
</div>
<div v-if="badges.data?.length" class="overflow-y-scroll">
<div v-if="badges.data?.length" class="overflow-y-auto">
<ListView
:columns="columns"
:rows="badges.data"
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Settings/Categories.vue
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
</Button>
</div>

<div class="overflow-y-scroll">
<div class="overflow-y-auto">
<div class="divide-y divide-outline-gray-modals space-y-2">
<div
v-for="(cat, index) in categories.data"
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Settings/Coupons/CouponList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
</Button>
</div>

<div v-if="coupons.data?.length" class="overflow-y-scroll">
<div v-if="coupons.data?.length" class="overflow-y-auto">
<ListView
:columns="columns"
:rows="coupons.data"
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Settings/EmailTemplates.vue
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
</Button>
</div>
</div>
<div v-if="emailTemplates.data?.length" class="overflow-y-scroll">
<div v-if="emailTemplates.data?.length" class="overflow-y-auto">
<ListView
:columns="columns"
:rows="emailTemplates.data"
Expand Down
2 changes: 2 additions & 0 deletions frontend/src/components/Settings/Evaluators.vue
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ import NewMemberModal from '@/components/Modals/NewMemberModal.vue'
import AddEvaluatorModal from '@/components/Modals/AddEvaluatorModal.vue'

const search = ref('')
const show = defineModel('show')
const showExistingUser = ref(false)
const showNewEvaluator = ref(false)
const router = useRouter()
Expand Down Expand Up @@ -173,6 +174,7 @@ watch(search, () => {
})

const openProfile = (username: string) => {
show.value = false
router.push({
name: 'Profile',
params: {
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Settings/GoogleMeetSettings.vue
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
</Button>
</div>
</div>
<div v-if="googleMeetAccounts.data?.length" class="overflow-y-scroll">
<div v-if="googleMeetAccounts.data?.length" class="overflow-y-auto">
<ListView
:columns="columns"
:rows="googleMeetAccounts.data"
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Settings/Members.vue
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
<Search class="size-4 stroke-1.5 text-ink-gray-5" />
</template>
</FormControl>
<div class="overflow-y-scroll max-h-[60vh]">
<div class="overflow-y-auto max-h-[60vh]">
<ul class="divide-y divide-outline-gray-modals">
<li
v-for="member in memberList"
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Settings/PaymentGatewayDetails.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
}"
>
<template #body-header>
<div class="text-lg font-semibold">
<div class="text-lg font-semibold text-ink-gray-9">
{{
gatewayID === 'new'
? __('New Payment Gateway')
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Settings/PaymentGateways.vue
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
</Button>
</div>

<div v-if="paymentGateways.data?.length" class="overflow-y-scroll">
<div v-if="paymentGateways.data?.length" class="overflow-y-auto">
<ListView
:columns="columns"
:rows="paymentGateways.data"
Expand Down
3 changes: 2 additions & 1 deletion frontend/src/components/Settings/Settings.vue
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
<div
v-if="activeTab && data.doc"
:key="activeTab.label"
class="flex flex-1 flex-col p-8 bg-surface-modal overflow-x-auto"
class="flex flex-1 flex-col p-8 bg-surface-modal overflow-x-auto overflow-y-auto"
>
<component
v-if="activeTab.template"
Expand All @@ -43,6 +43,7 @@
? { sections: activeTab.sections }
: {}),
...(activeTab.label == 'Members' ||
activeTab.label == 'Evaluators' ||
activeTab.label == 'Transactions'
? { 'onUpdate:show': (val) => (show = val), show }
: {}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
/>
</div>

<div class="font-semibold mt-10">
<div class="font-semibold mt-10 text-ink-gray-9">
{{ __('Payment Details') }}
</div>
<div class="grid grid-cols-3 gap-5 mt-5">
Expand All @@ -111,7 +111,7 @@
</div>

<div v-if="transactionData.coupon">
<div class="font-semibold mt-10">
<div class="font-semibold mt-10 text-ink-gray-9">
{{ __('Coupon Details') }}
</div>
<div class="grid grid-cols-3 gap-5 mt-5">
Expand Down Expand Up @@ -142,7 +142,7 @@
</div>
</div>

<div class="font-semibold mt-10">
<div class="font-semibold mt-10 text-ink-gray-9">
{{ __('Billing Details') }}
</div>
<div class="grid grid-cols-3 gap-5 mt-5">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
/>
</div>

<div v-if="transactions.data?.length" class="overflow-y-scroll">
<div v-if="transactions.data?.length" class="overflow-y-auto">
<ListView
:columns="columns"
:rows="transactions.data"
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Settings/ZoomSettings.vue
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
</Button>
</div>
</div>
<div v-if="zoomAccounts.data?.length" class="overflow-y-scroll">
<div v-if="zoomAccounts.data?.length" class="overflow-y-auto">
<ListView
:columns="columns"
:rows="zoomAccounts.data"
Expand Down
4 changes: 2 additions & 2 deletions frontend/src/components/Sidebar/AppSidebar.vue
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
<template>
<div
class="flex h-full flex-col justify-between transition-all duration-300 ease-in-out border-r bg-surface-menu-bar"
class="flex h-full flex-col justify-between transition-all duration-300 ease-in-out border-r bg-surface-menu-bar overflow-x-hidden"
:class="sidebarStore.isSidebarCollapsed ? 'w-14' : 'w-56'"
>
<div
class="flex flex-col overflow-y-auto"
:class="sidebarStore.isSidebarCollapsed ? 'items-center' : ''"
>
<UserDropdown :isCollapsed="sidebarStore.isSidebarCollapsed" />
<div class="flex flex-col overflow-y-auto" v-if="sidebarSettings.data">
<div class="flex flex-col" v-if="sidebarSettings.data">
<div v-for="link in sidebarLinks" class="mx-2 my-2.5">
<div
v-if="!link.hideLabel"
Expand Down
11 changes: 2 additions & 9 deletions frontend/src/pages/Batches/BatchForm.vue
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,6 @@ import {
} from 'frappe-ui'
import {
createLMSCategory,
escapeHTML,
getMetaInfo,
openSettings,
sanitizeHTML,
Expand Down Expand Up @@ -460,15 +459,9 @@ const formatTime = (timeStr) => {
}

const validateFields = () => {
batchDetail.doc.description = sanitizeHTML(batchDetail.doc.description)
batchDetail.doc.batch_details = sanitizeHTML(batchDetail.doc.batch_details)

Object.keys(batchDetail.doc).forEach((key) => {
if (
!['description', 'batch_details'].includes(key) &&
typeof batchDetail.doc[key] === 'string'
) {
batchDetail.doc[key] = escapeHTML(batchDetail.doc[key])
if (typeof batchDetail.doc[key] === 'string') {
batchDetail.doc[key] = sanitizeHTML(batchDetail.doc[key])
}
})
}
Expand Down
6 changes: 0 additions & 6 deletions frontend/src/pages/Batches/components/BatchFeedback.vue
Original file line number Diff line number Diff line change
Expand Up @@ -183,9 +183,3 @@ const isAdmin = computed(() => {
return user.data?.is_moderator || user.data?.is_evaluator
})
</script>
<style>
.feedback-list > button > div {
align-items: start;
padding: 0.15rem 0;
}
</style>
13 changes: 3 additions & 10 deletions frontend/src/pages/Batches/components/NewBatchModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ import { Button, Dialog, FormControl, TextEditor, toast } from 'frappe-ui'
import { useOnboarding, useTelemetry } from 'frappe-ui/frappe'
import { computed, inject, onMounted, onBeforeUnmount, ref } from 'vue'
import { useRouter } from 'vue-router'
import { sanitizeHTML, escapeHTML, createLMSCategory } from '@/utils'
import { sanitizeHTML, createLMSCategory } from '@/utils'
import MultiSelect from '@/components/Controls/MultiSelect.vue'
import Link from '@/components/Controls/Link.vue'
import NewMemberModal from '@/components/Modals/NewMemberModal.vue'
Expand Down Expand Up @@ -179,16 +179,9 @@ const onInstructorCreated = (user: any) => {
}

const validateFields = () => {
batch.value.description = sanitizeHTML(batch.value.description)
batch.value.batch_details = sanitizeHTML(batch.value.batch_details)

Object.keys(batch.value).forEach((key) => {
if (
key != 'description' &&
key != 'batch_details' &&
typeof batch.value[key as keyof Batch] === 'string'
) {
batch.value[key as keyof Batch] = escapeHTML(
if (typeof batch.value[key as keyof Batch] === 'string') {
batch.value[key as keyof Batch] = sanitizeHTML(
batch.value[key as keyof Batch] as string
)
}
Expand Down
Loading
Loading