Ace: Nouvelle fonctionnalité : fournir la prise en charge de l'option de longueur maximale

Créé le 24 août 2017  ·  3Commentaires  ·  Source: ajaxorg/ace

Parfois, il est important de définir une limite du script.

Commentaire le plus utile

Pour vous assurer que la longueur résultante est celle qui est limitée, et pour permettre des pâtes volumineuses en coupant l'extrémité, essayez cette modification :

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

Cela pourrait être bénéfique de l'optimiser davantage pour la production, mais j'espère que cela aidera quand même quelqu'un !

De plus, je suis tombé sur le même cas d'utilisation que @christianbs :)

Tous les 3 commentaires

Vous pouvez utiliser le code suivant pour désactiver l'insertion si la valeur de l'éditeur est plus longue qu'une certaine 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

Pourriez-vous s'il vous plaît dire dans quels cas en avez-vous besoin, pour nous aider à comprendre si cela doit faire partie de l'ensemble d'options par défaut ou d'une extension.

Bien sûr!! Ainsi, dans notre application, le script est persisté dans la base de données et il y a une limite à cette colonne. Je pense que cela devrait être très courant car l'éditeur est en fait très utilisé dans les applications Web. Par contre, le script ci-dessus devrait résoudre mon problème... merci

Pour vous assurer que la longueur résultante est celle qui est limitée, et pour permettre des pâtes volumineuses en coupant l'extrémité, essayez cette modification :

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

Cela pourrait être bénéfique de l'optimiser davantage pour la production, mais j'espère que cela aidera quand même quelqu'un !

De plus, je suis tombé sur le même cas d'utilisation que @christianbs :)

Cette page vous a été utile?
0 / 5 - 0 notes