You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.1 KiB
41 lines
1.1 KiB
export default { |
|
template: "<textarea disabled></textarea>", |
|
data() { |
|
return { |
|
num_lines: 0, |
|
total_count: 0, |
|
}; |
|
}, |
|
mounted() { |
|
const text = decodeURIComponent(this.lines); |
|
this.$el.innerHTML = text; |
|
this.num_lines = text ? text.split("\n").length : 0; |
|
this.total_count = this.num_lines; |
|
}, |
|
methods: { |
|
push(line, total_count) { |
|
if (total_count <= this.total_count) return; |
|
this.total_count = total_count; |
|
const decoded = decodeURIComponent(line); |
|
const textarea = this.$el; |
|
textarea.innerHTML += (this.num_lines ? "\n" : "") + decoded; |
|
textarea.scrollTop = textarea.scrollHeight; |
|
this.num_lines += decoded.split("\n").length; |
|
while (this.max_lines && this.num_lines > this.max_lines) { |
|
const index = textarea.innerHTML.indexOf("\n"); |
|
if (index == -1) break; |
|
textarea.innerHTML = textarea.innerHTML.slice(index + 1); |
|
this.num_lines -= 1; |
|
} |
|
}, |
|
clear() { |
|
const textarea = this.$el; |
|
textarea.innerHTML = ""; |
|
this.num_lines = 0; |
|
}, |
|
}, |
|
props: { |
|
max_lines: Number, |
|
lines: String, |
|
}, |
|
};
|
|
|