Ace: Novo recurso: Fornece suporte para a opção de comprimento máximo

Criado em 24 ago. 2017  ·  3Comentários  ·  Fonte: ajaxorg/ace

Às vezes é importante definir um limite para o script.

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:

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 :)

Todos 3 comentários

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 :)

Esta página foi útil?
0 / 5 - 0 avaliações