Basecamp - Coloured to-dos based on due dates

Changes the Colour of To-Dos based on Dates

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// 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
               }
        }
     }
}