// ==UserScript== // @name Trello - minimize lists // @description Minimize width of lists with toggle button // @version 1.0 // @author XcomeX // @namespace https://trello.com // @include https://trello.com/b/* // @grant none // @downloadURL none // ==/UserScript== // --- USER SETTINGS --- var defaultmMinimizedLists = new Array(1, 2, 3); var minimizeWidth = "100px"; // ------------------------------------------------------------------------------------------ var triggerMargin = '18px'; var triggerIconOpen = ''; var triggerIconClose = ''; addLoadEvent(function(){ // ADD MENU BUTTONS var toggleTrigger = document.createElement('a'); toggleTrigger.appendChild(document.createTextNode('Toggle size of lists |')); toggleTrigger.setAttribute('href','#'); toggleTrigger.classList.add('board-header-btn'); toggleTrigger.setAttribute('style', 'padding-left: 3px; padding-right: 0px;'); toggleTrigger.addEventListener('click', toggleAllOnClick); var minimizeTrigger = document.createElement('a'); minimizeTrigger.appendChild(document.createTextNode('minimize |')); minimizeTrigger.setAttribute('href','#'); minimizeTrigger.classList.add('board-header-btn'); minimizeTrigger.setAttribute('style', 'padding-left: 0px; padding-right: 0px;'); minimizeTrigger.addEventListener('click', minimizeAllOnClick); var maximizeTrigger = document.createElement('a'); maximizeTrigger.appendChild(document.createTextNode('maximize |')); maximizeTrigger.setAttribute('href','#'); maximizeTrigger.classList.add('board-header-btn'); maximizeTrigger.setAttribute('style', 'padding-left: 0px; padding-right: 0px;'); maximizeTrigger.addEventListener('click', maximizeAllOnClick); var defaultTrigger = document.createElement('a'); defaultTrigger.appendChild(document.createTextNode('default |')); defaultTrigger.setAttribute('href','#'); defaultTrigger.classList.add('board-header-btn'); defaultTrigger.setAttribute('style', 'padding-left: 0px; padding-right: 0px;'); defaultTrigger.addEventListener('click', defaultOnClick); var menuButtonsContainer = document.querySelector('.board-header-btns.left'); menuButtonsContainer.appendChild(toggleTrigger); menuButtonsContainer.appendChild(defaultTrigger); menuButtonsContainer.appendChild(minimizeTrigger); menuButtonsContainer.appendChild(maximizeTrigger); // ADD TRIGGER BUTTONS var listMenuButtons = document.getElementsByClassName("js-open-list-menu"); for (var i = 0; i < listMenuButtons.length; i++) { // list elements var listMenuButton = listMenuButtons[i]; var listHeader = listMenuButton.parentNode; var list = listHeader.parentNode; var triggerIcon = triggerIconClose; var triggerStyle = "z-index: 999; margin-right: " + triggerMargin + "; margin-top: 0px;"; // minimize default lists if (!!~defaultmMinimizedLists.indexOf(i+1)) { list.style.maxWidth = minimizeWidth; triggerIcon = triggerIconOpen; var triggerStyle = "z-index: 999; margin-right: 0px; margin-top: " + triggerMargin + ";"; } // minimize button var trigger = document.createElement('a'); var triggerId = "size-trigger-" + i; var triggerText = document.createTextNode(triggerIcon); trigger.appendChild(triggerText); trigger.setAttribute('id',triggerId); trigger.setAttribute('href','#'); trigger.classList.add('list-header-menu-icon'); trigger.classList.add('icon-sm'); trigger.classList.add('dark-hover'); trigger.classList.add('js-trigger-list-size'); trigger.setAttribute('style', triggerStyle); trigger.addEventListener('click', toggleOnClick,false); // add minimize button to list header listHeader.insertBefore(trigger, listMenuButton); } }); // --- EVENTS --- function toggleOnClick(e) { var triggerElement = e.target; toggleSize(triggerElement); } function toggleAllOnClick(e) { toggleAllSizeWith("all"); } function minimizeAllOnClick(e) { toggleAllSizeWith(triggerIconClose); } function maximizeAllOnClick(e) { toggleAllSizeWith(triggerIconOpen); } function defaultOnClick(e) { maximizeAllOnClick(this); var triggers = document.getElementsByClassName("js-trigger-list-size"); for (var i = 0; i < triggers.length; i++) { var trigger = document.getElementById(triggers[i].id); if (!!~defaultmMinimizedLists.indexOf(i+1)) { toggleSize(trigger); } } } function toggleAllSizeWith(triggerIcon) { var triggers = document.getElementsByClassName("js-trigger-list-size"); for (var i = 0; i < triggers.length; i++) { var trigger = document.getElementById(triggers[i].id); if (trigger.innerHTML == triggerIcon || "all" == triggerIcon) { toggleSize(trigger); } } } function toggleSize(triggerElement) { var listHeader = triggerElement.parentElement; var list = listHeader.parentElement; var listWidth = list.style.maxWidth; triggerElement.innerHTML = (triggerElement.innerHTML == triggerIconOpen ? triggerIconClose : triggerIconOpen); triggerElement.style.marginRight = (triggerElement.innerHTML == triggerIconOpen ? "0px" : triggerMargin); triggerElement.style.marginTop = (triggerElement.innerHTML == triggerIconOpen ? triggerMargin : "0px"); list.style.maxWidth = (listWidth == '' ? minimizeWidth : '' );; } // --- addLoadEvent --- function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { if (oldonload) { oldonload(); } func(); } } }