您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Reduces amount of space used by each post tile in the list view, by compacting each post to a single line on Ed discussion forum. Also reduces some whitespace in messages panel.
// ==UserScript== // @name Compact View on Ed Discussions // @namespace waqas // @description Reduces amount of space used by each post tile in the list view, by compacting each post to a single line on Ed discussion forum. Also reduces some whitespace in messages panel. // @match *://edstem.org/* // @version 0.2 // @author Waqas Ilyas // @homepageURL https://github.com/waqasilyas/userscripts/tree/main/edstem // @require https://code.jquery.com/jquery-3.6.0.min.js // @run-at document-start // @license MIT // ==/UserScript== (function() { 'use strict'; // GM_addStyle replacement function addStyle(css) { const style = document.createElement('style'); style.textContent = css; document.head.appendChild(style); } addStyle(` .split-divider-wi { padding-left: 0.5px; } .discuss-feed-thread-wi { padding: 2px !important; } .dft-body-wi { margin: 2px !important; padding: 0 5px 0 20px !important; } .dft-body-unseen-wi { font-weight: bold !important; padding: 0 5px 0 5px !important; } .dft-body-seen-wi { color: var(--text-lightest); } .dft-category-wi { margin: 0 2px 0 2px; } .dft-author-wi { font-size: 70% !important; width: 2em; text-align: center; background-color: #eee; padding: 0 2px 0 2px; margin: 0 2px 0 2px; } .theme-dark .dft-author-wi { background-color: #3f3e41 !important; } .discuss-show-full-wi { max-width: 90% !important; } .dft-count-new-wi { font-size: 70% !important; } `); var initialWidthSet = false; window.addEventListener('load', function() { var MutationObserver = window.MutationObserver; var myObserver = new MutationObserver(applyUpdates); var obsConfig = { childList: true, attributes: true, subtree: true, attributeFilter: ['class'] }; myObserver.observe(document, obsConfig); }); function applyUpdates() { var selector = $('.split-divider'); if (selector.length == 0) // HTML of our interest not available yet return; selector.addClass('split-divider-wi'); // Allow wider threads panel if (!initialWidthSet) { initialWidthSet = true; var threadsPanel = $('section.disindf-tf-container').get(0); threadsPanel.parentElement.style = "flex: 0 0 35%"; } // Compact post tiles in the list selector = $('a.discuss-feed-thread'); if (selector.length > 0) selector.addClass('discuss-feed-thread-wi'); // Hide all the footers, we will accomadate useful information into dft-body selector = $('a.discuss-feed-thread footer'); if (selector.length > 0) selector.hide(); // Selector for post tiles, compact even more var dftBodySelector = $('a.discuss-feed-thread .dft-body'); if (dftBodySelector.length > 0) dftBodySelector.addClass('dft-body-wi'); // Make changes to each tile dftBodySelector.each(function(i, o) { var dftBody = $(o); // Adjust padding so that unread and read posts are aligned var unseenIcons = dftBody.find('.dft-unseen-icon'); if (unseenIcons.length > 0) { dftBody.addClass('dft-body-unseen-wi'); dftBody.removeClass('dft-body-seen-wi'); } else { dftBody.removeClass('dft-body-unseen-wi'); dftBody.addClass('dft-body-seen-wi'); } // Check if the post is from an instructor var footer = dftBody.parent().find('footer'); // Number of new unread messages var newRepliesSpan = footer.find('.dft-count > span.dft-count-new'); if (newRepliesSpan.length > 0) { console.log(newRepliesSpan.children().length); if (dftBody.find('.dft-count-new').length == 0) dftBody.find('.dft-title').after(` <span title="New Replies" class="dft-count-new dft-count-new-wi"> ${newRepliesSpan.html()} </span> `); } // Author name var authorSpan = footer.find('.dft-foot-fill > span.dft-user'); // Handle author's role var roleDiv = footer.find('.dft-foot-fill > div.user-role-label'); if (dftBody.find('.dft-author-wi').length == 0) { var role = 'S'; var roleClass = 'url-student'; var roleSegment = '' // Add an author tag, with initials if (roleDiv.hasClass('url-admin')) { dftBody.append(` <div class="user-role-label dft-user-role dft-author-wi url-admin"> <span title='${roleDiv.find('span').html().trim()}: ${authorSpan.html()}' class='url-segment'> ${authorSpan.html().split(' ').map((n) => n[0]).slice(0, 3).join('')} </span> </div> `); } else { dftBody.append(` <span title='${authorSpan.html()}' class='user-role-label dft-user-role dft-author-wi'> ${authorSpan.html().split(' ').map((n) => n[0]).slice(0, 3).join('')} </span> `); } } // Handle category, add a tag for it var catSpan = footer.find('.dft-foot-fill > .dft-category'); var catColor = catSpan.get(0).style.color; //var catSpan = footer.find('.dft-foot-fill > .dft-thread-category-group > span'); var category = catSpan.find('span').html(); if (dftBody.find('span.dft-category-wi').length == 0) dftBody.append(` <span title='${category}' class='discuss-category-tag dsb-category-tag dft-category-wi' style='background-color: ${catColor}'></span> `); // Post body, reduce whitespace $('.discuss-show-full').addClass('discuss-show-full-wi'); }); } })();