Иногда важно установить лимит скрипта.
Вы можете использовать следующий код, чтобы отключить вставку, если значение редактора длиннее некоторого ограничения.
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 :)
Самый полезный комментарий
Чтобы гарантировать, что конечная длина будет ограничена, и чтобы можно было вставлять большие пасты, обрезая конец, попробуйте следующее редактирование:
Возможно, будет полезно оптимизировать его больше для производства, но я надеюсь, что это все равно кому-то поможет!
Кроме того, я столкнулся с тем же вариантом использования, что и @christianbs :)