Ace: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ: ์ตœ๋Œ€ ๊ธธ์ด ์˜ต์…˜์— ๋Œ€ํ•œ ์ง€์› ์ œ๊ณต

์— ๋งŒ๋“  2017๋…„ 08์›” 24์ผ  ยท  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 ๋“ฑ๊ธ‰