Greasy Fork editor adjuster

Automatically adjusts the height of editor.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         Greasy Fork editor adjuster
// @namespace    https://greasyfork.org/ja/users/570127
// @version      2025.12.14.5
// @description  Automatically adjusts the height of editor.
// @description:ja ソースエディタのテキストエリアの高さを行数に応じて高くします。
// @author       universato
// @match        https://greasyfork.org/*
// @license      MIT
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    const textarea = document.querySelector('#script_version_code');
    if (!textarea) return;

    // Adjust the height of editor.
    const numberOfLines = textarea.value.split('\n').length;
    textarea.style.height = (18 * Math.min(44, Math.max(12, numberOfLines))) + "px";

    const submit = document.querySelector('input[type="submit"][name="commit"]');
    if (!submit) return;

    return;

    submit.addEventListener('click', function (event) {
        const hasTrailingSpace = /[ \t]+$/m.test(textarea.value);
        if (!hasTrailingSpace) return;

        const proceed = confirm(
            '[UserScript] Greasy Fork editor adjuster:\n\n' +
            'Trailing whitespace were found.\n\n' +
            'Do you want to continue and submit anyway?'
        );

        if (!proceed) {
            event.preventDefault();
            event.stopPropagation();
        }
        // proceed === true の場合は何もせず送信続行
    }, true); // capture
})();