Ace: Fitur Baru: Memberikan dukungan untuk opsi panjang maksimal

Dibuat pada 24 Agu 2017  ·  3Komentar  ·  Sumber: ajaxorg/ace

Terkadang penting menetapkan batas skrip.

Komentar yang paling membantu

Untuk memastikan panjang yang dihasilkan adalah yang dibatasi, dan untuk memungkinkan pasta besar dengan memangkas ujungnya, coba edit ini:

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

Mungkin bermanfaat untuk lebih mengoptimalkannya untuk produksi, tetapi saya harap ini membantu seseorang!

Juga, saya mengalami kasus penggunaan yang sama dengan @christianbs :)

Semua 3 komentar

Anda dapat menggunakan kode berikut untuk menonaktifkan penyisipan jika nilai editor lebih panjang dari batas tertentu

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

Bisakah Anda memberi tahu dalam kasus apa Anda memerlukan ini, untuk membantu kami memahami apakah ini perlu menjadi bagian dari rangkaian opsi default atau ekstensi.

Tentu saja!! Jadi, dalam aplikasi kami, skrip disimpan di database dan ada batasan untuk kolom ini. Saya pikir ini seharusnya sangat umum karena editor sebenarnya sangat digunakan dalam aplikasi web. Di sisi lain, skrip di atas harus menyelesaikan masalah saya ... terima kasih

Untuk memastikan panjang yang dihasilkan adalah yang dibatasi, dan untuk memungkinkan pasta besar dengan memangkas ujungnya, coba edit ini:

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

Mungkin bermanfaat untuk lebih mengoptimalkannya untuk produksi, tetapi saya harap ini membantu seseorang!

Juga, saya mengalami kasus penggunaan yang sama dengan @christianbs :)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat