From d76e69bf13777b149ebec2b11fb86eba3e1bc8a1 Mon Sep 17 00:00:00 2001 From: Robin Sonnabend <robin@fsmpi.rwth-aachen.de> Date: Wed, 15 Mar 2017 01:55:32 +0100 Subject: [PATCH] Resize textareas with their content This is a feature requiring javascript. It's not as bad as expected. /close #56 --- static/css/style.css | 7 +++++++ static/js/script.js | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/static/css/style.css b/static/css/style.css index fd41b49..fa1d235 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -48,3 +48,10 @@ pre.error-description { .expansion-text { display: none; } + +textarea { + border: 0 none white; + padding: 0; + outline: none; + background-color: #d0d0d0; +} diff --git a/static/js/script.js b/static/js/script.js index 3077568..7307cc4 100644 --- a/static/js/script.js +++ b/static/js/script.js @@ -6,10 +6,44 @@ function toggle_expansion() { description_element.style.display = new_state; }; +var max_height = 400; +function resize_textarea(textarea) { + function _inner_resize_textarea() { + textarea.style.height = "auto"; + var new_height = textarea.scrollHeight; + var overflow = "hidden"; + if (new_height > max_height) { + new_height = max_height; + overflow = "visible"; + } + textarea.style.height = new_height + "px"; + textarea.style.overflow = overflow; + } + return _inner_resize_textarea +} +function resize_textarea_delayed(textarea) { + function _inner_resize_textarea_delayed() { + window.setTimeout(resize_textarea(textarea), 0); + } + return _inner_resize_textarea_delayed; +} + window.onload=function() { + // toggle expansion var buttons = document.getElementsByClassName("expansion-button"); for (var i = 0; i < buttons.length; i++) { var button = buttons[i]; button.onclick = toggle_expansion; } + // resize textarea + var textareas = document.getElementsByTagName("textarea"); + for (var i = 0; i < textareas.length; i++) { + var textarea = textareas[i]; + textarea.addEventListener("change", resize_textarea(textarea), false); + textarea.addEventListener("cut", resize_textarea_delayed(textarea), false); + textarea.addEventListener("paste", resize_textarea_delayed(textarea), false); + textarea.addEventListener("drop", resize_textarea_delayed(textarea), false); + textarea.addEventListener("keydown", resize_textarea_delayed(textarea), false); + resize_textarea(textarea)(); + } }; -- GitLab