Skip to content

Commit 1ea73fb

Browse files
committed
[vue2] fix name包含非法字符时样式无法正常显示的问题
1 parent 0363541 commit 1ea73fb

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

src/Terminal.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ export default {
363363
}
364364

365365
// 移除样式文件
366-
let style = document.getElementById(this.getThemeStyleId(this.getName()))
366+
let style = document.getElementById(this.getThemeStyleId(this.parseNameHtmlSafely(this.getName())))
367367
if (style) {
368368
document.body.removeChild(style)
369369
}
@@ -386,7 +386,7 @@ export default {
386386
let oldName = oldVal ? oldVal : this._name
387387

388388
rename(newName, oldName, this.terminalListener)
389-
this.changeThemeFlag(newName, oldName)
389+
this.changeThemeFlag(this.parseNameHtmlSafely(newName), this.parseNameHtmlSafely(oldName))
390390
}
391391
},
392392
// 监听层级变化
@@ -521,6 +521,9 @@ export default {
521521
getThemeStyleId(salt) {
522522
return `t-theme-style-${salt}`
523523
},
524+
parseNameHtmlSafely(name) {
525+
return name.replace(/[[\]{}#\s\\.,;%*+=@!&()/]/g, '_')
526+
},
524527
setTheme(theme) {
525528
let customThemes = getOptions().themes
526529
let themeStyle
@@ -535,10 +538,11 @@ export default {
535538
return
536539
}
537540
let css = themeStyle.match(/^.*\{(.*)}\s*$/s)[1]
541+
let terminalName = this.parseNameHtmlSafely(this.getName())
538542

539-
themeStyle = `#t-${this.getName()} { ${css} }`
543+
themeStyle = `#t-${terminalName} { ${css} }`
540544

541-
let tagId = this.getThemeStyleId(this.getName())
545+
let tagId = this.getThemeStyleId(terminalName)
542546
let styleTag = document.getElementById(tagId)
543547
if (styleTag) {
544548
styleTag.innerHTML = themeStyle

src/Terminal.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<template>
22
<div :class="'t-container ' + (isActive() ? '' : 't-disable-select')"
3-
:id="`t-${getName()}`"
3+
:id="`t-${parseNameHtmlSafely(getName())}`"
44
:style="_getContainerStyle()"
55
ref="terminalContainerRef">
66
<div v-if="isDraggable()">

test/App.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export default {
6767
terminals: [
6868
{
6969
show: true,
70-
name: 'terminal-test',
70+
name: 'terminal-test [default]',
7171
context: '/vue-web-terminal/test',
7272
dragConf: {
7373
width: "60%",

0 commit comments

Comments
 (0)