1919 @click.exact =" handleClick"
2020 @keydown.enter =" handleClick" >
2121 <span
22- :title =" file.name "
22+ :title =" sanitizedFileName "
2323 class =" image-container"
2424 :class =" { playable: isPlayable }"
2525 :style =" imageContainerStyle" >
2626 <img
2727 class =" file-preview__image"
2828 :class =" previewImageClass"
29- :alt =" file.name "
29+ :alt =" sanitizedFileName "
3030 :src =" failed ? defaultIconUrl : previewUrl"
3131 @load =" onLoad"
3232 @error =" onError" >
6565 </template >
6666 </NcButton >
6767 <div v-if =" shouldShowFileDetail" class =" name-container" >
68- {{ fileDetail }}
68+ <span class =" name-container__basename" >{{ fileNameWithoutExtension }}</span >
69+ <span v-if =" fileExtension" class =" name-container__extension" >{{ fileExtension }}</span >
6970 </div >
7071 </component >
7172</template >
@@ -88,6 +89,7 @@ import { SHARED_ITEM } from '../../../../../constants.ts'
8889import { getTalkConfig } from ' ../../../../../services/CapabilitiesManager.ts'
8990import { useActorStore } from ' ../../../../../stores/actor.ts'
9091import { useSharedItemsStore } from ' ../../../../../stores/sharedItems.ts'
92+ import { getFileExtension , sanitizeFileName } from ' ../../../../../utils/fileUpload.js'
9193
9294const PREVIEW_TYPE = {
9395 TEMPORARY : 0 ,
@@ -215,8 +217,18 @@ export default {
215217 )
216218 },
217219
218- fileDetail () {
219- return this .file .name
220+ // file.name with bidi control chars replaced by '_', for title/alt/aria-label text
221+ sanitizedFileName () {
222+ return sanitizeFileName (this .file .name )
223+ },
224+
225+ fileNameWithoutExtension () {
226+ return this .file .name .slice (0 , this .file .name .length - getFileExtension (this .file .name ).length )
227+ },
228+
229+ // Dot included, original case
230+ fileExtension () {
231+ return getFileExtension (this .file .name )
220232 },
221233
222234 fallbackLocalUrl () {
@@ -452,7 +464,7 @@ export default {
452464 },
453465
454466 removeAriaLabel () {
455- return t (' spreed' , ' Remove {fileName}' , { fileName: this .file . name })
467+ return t (' spreed' , ' Remove {fileName}' , { fileName: this .sanitizedFileName })
456468 },
457469 },
458470
@@ -648,7 +660,19 @@ export default {
648660 width: 100 % ;
649661 overflow: hidden;
650662 white- space: nowrap;
651- text- overflow: ellipsis;
663+ display: inline- flex;
664+
665+ & __basename {
666+ unicode- bidi: isolate;
667+ overflow: hidden;
668+ white- space: nowrap;
669+ text- overflow: ellipsis;
670+ }
671+
672+ & __extension {
673+ color: var (-- color- text- maxcontrast);
674+ overflow: visible;
675+ }
652676 }
653677
654678 & : not (.file - preview -- viewer - available ) {
0 commit comments