Às vezes é importante definir um limite para o script.
Você pode usar o seguinte código para desabilitar a inserção se o valor do editor for maior que algum limite
var doc = editor.session.doc
doc.applyAnyDelta = doc.applyAnyDelta || doc.applyDelta
doc.applyDelta = function(delta) {
if (delta.action == "insert" && this.$maxLength
&& this.getValue().length > this.$maxLength) {
return false;
}
return this.applyAnyDelta(delta);
}
doc.$maxLength = 20
Você poderia dizer em quais casos você precisa disso, para nos ajudar a entender se isso precisa ser parte do conjunto de opções padrão ou uma extensão.
Claro!! Portanto, em nossa aplicação, o script é persistido no banco de dados e há um limite para esta coluna. Eu acho que isso deve ser muito comum porque o editor na verdade é muito usado em aplicações web. Por outro lado, o script acima deve resolver meu problema ... obrigado
Para garantir que o comprimento resultante é aquele que fica limitado e para permitir grandes pastas aparando a extremidade, tente esta edição:
var doc = editor.session.doc
doc.applyAnyDelta = doc.applyAnyDelta || doc.applyDelta
doc.applyDelta = function(delta) {
let joinedLines = delta.lines.join("\n")
if (delta.action == "insert" && this.$maxLength
&& this.getValue().length + joinedLines.length > this.$maxLength) {
let newPasteLength = this.$maxLength - this.getValue().length
if(newPasteLength > 0) {
delta.lines = joinedLines.substr(0, newPasteLength).split("\n")
if(delta.lines.length == 1 && delta.start.row == delta.end.row) {
delta.end = {
row: delta.start.row,
column: delta.start.column+newPasteLength
}
} else {
delta.end = {
row: delta.start.row+delta.lines.length,
column: delta.lines[delta.lines.length-1].length
}
}
} else return false;
}
return this.applyAnyDelta(delta);
}
doc.$maxLength = 20
Pode ser benéfico otimizá-lo mais para produção, mas espero que isso ajude alguém de qualquer maneira!
Além disso, encontrei o mesmo caso de uso de @christianbs :)
Comentários muito úteis
Para garantir que o comprimento resultante é aquele que fica limitado e para permitir grandes pastas aparando a extremidade, tente esta edição:
Pode ser benéfico otimizá-lo mais para produção, mas espero que isso ajude alguém de qualquer maneira!
Além disso, encontrei o mesmo caso de uso de @christianbs :)