diff --git a/.github/semgrep/tailwind-rtl.yml b/.github/semgrep/tailwind-rtl.yml index ae1af13066..517696f2dd 100644 --- a/.github/semgrep/tailwind-rtl.yml +++ b/.github/semgrep/tailwind-rtl.yml @@ -1,4 +1,4 @@ -# Local run: semgrep scan --config .github/semgrep/tailwind-rtl.yml --metrics off . +# Local run: semgrep scan --config .github/semgrep/tailwind-rtl.yml rules: - id: tailwind-physical-class message: | @@ -6,17 +6,41 @@ rules: languages: [generic] severity: WARNING paths: { include: ["*.vue"] } - pattern-regex: | - (?x) - (?:^|[\s'"`{(\[,]) !?(?:[a-z][a-z0-9-]*:)*-? - (?: - (?:scroll-)?[mp][lr]-(?:auto|px|full|\d+(?:[./]\d+)?|\[[^\]]+\]) - | (?:left|right)-(?:auto|px|full|\d+(?:[./]\d+)?|\[[^\]]+\]) - | text-(?:left|right) - | float-(?:left|right) - | clear-(?:left|right) - | (?:border|rounded)-[lr](?:-[A-Za-z0-9\[\]./#%_-]+)? - | rounded-(?:tl|tr|bl|br)(?:-[A-Za-z0-9\[\]./#%_-]+)? - | space-x-(?:auto|px|reverse|\d+(?:[./]\d+)?|\[[^\]]+\]) - ) - !? (?=$|[\s'"`})\],>;]) + patterns: + - pattern-either: + - pattern-regex: | + (?x) + (?:^|[\s"'`(\[{,]) + !? + (?:[^\s"':]+:)* + -? + (?: + (?:scroll-)?[mp][lr]-(?:auto|px|full|\d+(?:[./]\d+)?|\[[^\]]+\]) + | (?:left|right)-(?:auto|px|full|\d+(?:[./]\d+)?|\[[^\]]+\]) + | (?:text|float|clear)-(?:left|right) + | (?:border|rounded)-[lr](?:-[A-Za-z0-9\[\]./#%_-]+)? + | rounded-(?:tl|tr|bl|br)(?:-[A-Za-z0-9\[\]./#%_-]+)? + ) + !? + (?=$|[\s'"`})\],>;]) + - pattern-not-regex: '\b(?:rtl|ltr):' + + - id: tailwind-space-x-needs-reverse-or-gap + message: | + RTL: `space-x-*` does not flip in RTL. add `rtl:space-x-reverse` or `gap-x-* ms-*` + languages: [generic] + severity: WARNING + paths: { include: ["*.vue"] } + patterns: + - pattern-regex: 'class\s*[:=]\s*"[^"]*\bspace-x-\S+[^"]*"' + - pattern-not-regex: '\brtl:space-x-reverse\b' + + - id: tailwind-divide-x-needs-reverse + message: | + RTL: `divide-x-*` does not flip in RTL, sdd `rtl:divide-x-reverse`. + languages: [generic] + severity: WARNING + paths: { include: ["*.vue"] } + patterns: + - pattern-regex: 'class\s*[:=]\s*"[^"]*\bdivide-x(?:-\S+)?[^"]*"' + - pattern-not-regex: '\brtl:divide-x-reverse\b' diff --git a/frontend/src/components/CourseCardOverlay.vue b/frontend/src/components/CourseCardOverlay.vue index 309d1783a8..1e2941d3f4 100644 --- a/frontend/src/components/CourseCardOverlay.vue +++ b/frontend/src/components/CourseCardOverlay.vue @@ -230,7 +230,7 @@ const is_instructor = () => { const canGetCertificate = computed(() => { if ( props.course.data?.enable_certification && - props.course.data?.membership?.progress == 100 + props.course.data?.membership?.progress >= 100 ) { return true } diff --git a/frontend/src/components/Layouts/MobileLayout.vue b/frontend/src/components/Layouts/MobileLayout.vue index f4c423e997..374ff7a6a8 100644 --- a/frontend/src/components/Layouts/MobileLayout.vue +++ b/frontend/src/components/Layouts/MobileLayout.vue @@ -1,7 +1,7 @@