Ace: Новая функция: поддержка опции максимальной длины

Созданный на 24 авг. 2017  ·  3Комментарии  ·  Источник: ajaxorg/ace

Иногда важно установить лимит скрипта.

Самый полезный комментарий

Чтобы гарантировать, что конечная длина будет ограничена, и чтобы можно было вставлять большие пасты, обрезая конец, попробуйте следующее редактирование:

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

Возможно, будет полезно оптимизировать его больше для производства, но я надеюсь, что это все равно кому-то поможет!

Кроме того, я столкнулся с тем же вариантом использования, что и @christianbs :)

Все 3 Комментарий

Вы можете использовать следующий код, чтобы отключить вставку, если значение редактора длиннее некоторого ограничения.

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

Не могли бы вы рассказать, в каких случаях вам это нужно, чтобы помочь нам понять, должно ли это быть частью набора параметров по умолчанию или расширением.

Конечно!! Итак, в нашем приложении сценарий сохраняется в базе данных, и этот столбец ограничен. Я думаю, что это должно быть очень распространено, потому что редактор на самом деле очень часто используется в веб-приложениях. С другой стороны, приведенный выше сценарий должен решить мою проблему ... спасибо

Чтобы гарантировать, что конечная длина будет ограничена, и чтобы можно было вставлять большие пасты, обрезая конец, попробуйте следующее редактирование:

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

Возможно, будет полезно оптимизировать его больше для производства, но я надеюсь, что это все равно кому-то поможет!

Кроме того, я столкнулся с тем же вариантом использования, что и @christianbs :)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги