Ace: ميزة جديدة: توفير الدعم لخيار الطول الأقصى

تم إنشاؤها على ٢٤ أغسطس ٢٠١٧  ·  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 التقييمات