User:Remember the dot/Long edit summary.js

// LIMIT EDIT SUMMARIES TO EXACTLY 250 UTF-8 BYTES

// see EditPage::importFormData() in MediaWiki source for the source of the limit

// created by Ilmari Karonen and Remember_the_dot

addOnloadHook(function() {

var wpSummary = document.getElementById("wpSummary")

if (wpSummary) {

var adjustMaxLength = function () {

// subtract the number of UTF-8 continuation bytes (0x80-0xBF) from the maxlength

var maxLength = 250 - encodeURI(wpSummary.value).split(/%[89AB]/i).length + 1

wpSummary.maxLength = maxLength

// the last character or group might've pushed us over; if so, inform the user

var errorMessage = document.getElementById("editSummaryTooLong")

if (wpSummary.value.length > maxLength) {

if (!errorMessage) {

wpSummary.style.border = "3px solid red"

document.getElementById("wpSave").disabled = true

var editSummaryTooLong = document.createElement("div")

editSummaryTooLong.id = "editSummaryTooLong"

editSummaryTooLong.style.color = "red"

editSummaryTooLong.style.fontWeight = "bold"

editSummaryTooLong.appendChild(document.createTextNode("Your edit summary is too long."))

var wpMinoredit = document.getElementById("wpMinoredit")

wpMinoredit.parentNode.insertBefore(editSummaryTooLong, wpMinoredit)

}

} else {

if (errorMessage) {

wpSummary.style.border = ""

document.getElementById("wpSave").disabled = false

errorMessage.parentNode.removeChild(errorMessage)

}

}

oldValue = wpSummary.value

}

addHandler(wpSummary, "keyup", adjustMaxLength)

addHandler(wpSummary, "change", adjustMaxLength)

adjustMaxLength()

}

})