您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
resizable chatbox text area
// ==UserScript== // @name Whatsapp TextArea Resize // @namespace https://github.com/kenng/whatsapp-chatbox-resizer // @version 1.0 // @description resizable chatbox text area // @author Ken Ng // @match https://web.whatsapp.com/ // @grant none // ==/UserScript== /* jshint esversion: 6 */ (function () { ('use strict'); const resizerSize = 10; function prependResizer() { const resizer = document.createElement('div'); resizer.className = 'iw-resizer'; resizer.style.height = `${resizerSize}px`; resizer.style.backgroundColor = '#ccc'; resizer.style.cursor = 'move'; const footer = document.getElementsByTagName('footer')[0]; footer.prepend(resizer); } function resize(e) { document.body.style.cursor = 'move'; const chatboxElem = document.querySelector('footer [contenteditable]'); const chatboxElemParen = chatboxElem.parentElement.parentElement; chatboxElem.style.maxHeight = 'initial'; chatboxElem.parentElement.style.maxHeight = '100%'; const min_height = 42; const original_height = parseFloat( getComputedStyle(chatboxElemParen, null) .getPropertyValue('height') .replace('px', ''), ); const original_y = chatboxElemParen.getBoundingClientRect().top; const new_y = original_y - e.pageY - resizerSize; const height = original_height + new_y; if (height > min_height) { chatboxElemParen.style.height = height + 'px'; chatboxElemParen.style.top = new_y + 'px'; } // console.log(height, original_height, new_y, original_y, e.pageY); } function stopResize() { document.body.style.cursor = 'initial'; window.removeEventListener('mousemove', resize); } function evMouseDown(ev) { ev.preventDefault(); window.addEventListener('mousemove', resize); window.addEventListener('mouseup', stopResize); } function makeResizableDiv() { const resizers = document.getElementsByClassName('iw-resizer'); for (let i = 0; i < resizers.length; i++) { const currentResizer = resizers[i]; currentResizer.removeEventListener('mousedown', evMouseDown); currentResizer.addEventListener('mousedown', evMouseDown); } } function init() { let mutationObserver = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { if (mutation.previousSibling?.id === 'main') { prependResizer(); makeResizableDiv(); } // console.log(mutation); }); }); mutationObserver.observe( document.getElementById('app').querySelector('[tabindex].two'), { childList: true, subtree: true, }, ); } function checkIfLoaded() { setTimeout(function () { let pane = document.getElementById('pane-side'); if (pane != null) { init(); } else { checkIfLoaded(); } }, 800); } checkIfLoaded(); })();