您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Changes the Colour of To-Dos based on Dates
// Basecamp - Colour Due Dates in To-Do Lists // Copyright (c) 2009, Alex Burkhardt // http://www.alex3d.de // 10 January 2009 // // Original script created by Alex Burkhardt // // 28 February 2011 - Modified by sonar_m to handle new Bascamp format // 06 February 2012 - Modified by Markp to give different colour scheme // 07 February 2012 - Modified by Markp to exclude colours on the "Today" view page, as they are all the same (all green) // 08 February 2012 - Modified by Markp to exclude colours on "Messages" and "Calendar" pages, where they are not appropriate // 17 February 2012 - Modified by Markp to exclude colours on "Account" page, where they are not appropriate // 30 March 2012 - Modified by Markp to put back colours on the "Today" page; in retrospect it seems better that way! // 19 April 2012 - Modified by Markp to experiment with revised colour scheme to highlight tasks due yesterday in yellow and next week's tasks in light green // 20 April 2012 - Modified by Markp to tweak the light green and grey colors (future tasks) to make them lighter and less obtrusive // 14 May 2012 - Modified by Markp to exclude colours on "Files" page, where they are not appropriate // // ==UserScript== // @name Basecamp - Coloured to-dos based on due dates // @version 1.0.10 // @description Changes the Colour of To-Dos based on Dates // @namespace https://www.posen.net/ // @include https://*.updatelog.*/* // @include https://*.clientsection.*/* // @include https://*.seework.*/* // @include https://*.grouphub.*/* // @include https://*.projectpath.*/* // @include https://*.basecamphq.*/* // @include http://*.updatelog.*/* // @include http://*.clientsection.*/* // @include http://*.seework.*/* // @include http://*.grouphub.*/* // @include http://*.projectpath.*/* // @include http://*.basecamphq.*/* // @exclude https://*.basecamphq.*/*/posts/* // @exclude https://*.basecamphq.*/*/posts // @exclude https://*.basecamphq.*/*/milestones/* // @exclude https://*.basecamphq.*/account // @exclude https://*.basecamphq.*/projects/*/files // // ==/UserScript== // // How to use: // When you have a to-do with a deadline, just set the date in Basecamp // The script will then colour-code the to-do-item dates as follows: // More than 1 week Old - > red // Within the past 7 days -> orange // Yesterday -> yellow // Today -> green // In the next 7 days -> light green // In the future by more than 7 days -> grey var today = new Date(); textnodes = document.evaluate( "//body//text()", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var u = 0; u < textnodes.snapshotLength; u++) { node = textnodes.snapshotItem(u); s = node.data; var datum = s.match(/\[[\d]{2}\/[\d]{2}\/[\d]{2}\]/g); var datum = s.match(/[\d]{1,2} [\w]{3} [\d]{4}/); if(datum) { var datum1; var dateDisplayed; var future; node.parentNode.setAttribute("style", "color: black;background-color: #d8d8d8"); //Default format is black on grey for (i=0;i<datum.length;i++) { datum1 = datum[i].split(' '); dateDisplayed = new Date(); dateDisplayed.setYear(datum1[2]); var month = datum1[1]; var m_names = new Array("Jan", "Feb", "Mar", "Apr", "May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"); for(j=0;j<12;j++) { if(month == m_names[j]) { dateDisplayed.setMonth(j); break; } } dateDisplayed.setDate(datum1[0]); future = new Date(); future.setYear(today.getFullYear()); future.setMonth(today.getMonth()); future.setDate(today.getDate() +1); LastWeek = new Date(); LastWeek.setYear(today.getFullYear()); LastWeek.setMonth(today.getMonth()); LastWeek.setDate(today.getDate() -7); NextWeek = new Date(); NextWeek.setYear(today.getFullYear()); NextWeek.setMonth(today.getMonth()); NextWeek.setDate(today.getDate() +7); Yesterday = new Date(); Yesterday.setYear(today.getFullYear()); Yesterday.setMonth(today.getMonth()); Yesterday.setDate(today.getDate() -1); toDostyle = getComputedStyle(node.parentNode, ''); if (toDostyle.textDecoration == "line-through"); else { if(dateDisplayed.toString().substring(0,15) == today.toString().substring(0,15)) node.parentNode.setAttribute("style", "color: white;background-color: #0EA93A"); //today (in green) else if(dateDisplayed < today && dateDisplayed >= Yesterday) node.parentNode.setAttribute("style", "color: black;background-color: #FFFF00"); //yesterday (in yellow) else if(dateDisplayed < Yesterday && dateDisplayed >= LastWeek) node.parentNode.setAttribute("style", "color: white;background-color: #FF8D1C"); //within the past 7 days (in orange) else if(dateDisplayed < LastWeek) node.parentNode.setAttribute("style", "color: white;background-color: #f00"); //more than a week old (in red) else if(dateDisplayed > today && dateDisplayed < NextWeek) node.parentNode.setAttribute("style", "color: black;background-color: #BCF5A9"); //Next week (in pale green) // Orange: #FF8D1C - Grey: #d8d8d8 - Green: #0EA93A - Red: #f00 - Yellow: #FFFF00 - Blue: #0000ff - Pale Green: #BCF5A9 } } } }