Hide Asana Blocked Tasks

Adds 'show/hide blocked tasks' button in Asana

  1. // ==UserScript==
  2. // @name Hide Asana Blocked Tasks
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.3
  5. // @description Adds 'show/hide blocked tasks' button in Asana
  6. // @author David McNab <david@conscious.co.nz>
  7. // @match http://*/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. /*
  12. Instructions for installing this script:
  13.  
  14. 1. Install the TamperMonkey browser plugin
  15. 2. Load up your Asana tasks lists in a browser tab
  16. 3. While still in that tab, click the TamperMonkey button on your browser
  17. toolbar to open the TamperMonkey menu
  18. 4. In the TamperMonkey menu, click 'Create a New Script...'
  19. 5. When the script edit tab opens,
  20. 6. Delete the comment block
  21. 7. Paste in this script in its place
  22. 8. Click the 'Settings' tab in the script editor
  23. 9. In the "Includes/Excludes" section, add a 'User Include' entry for
  24. https://app.asana.com/*
  25. 10. Go back to 'Editor tab, click the 'save' icon (or press Ctrl-s)
  26. 11. Go back to the Asana tab
  27. 12. Click again on TamperMonkey button
  28.  
  29. If you've followed all these correctly, you should be able to return
  30. to the Asana tab, refresh it, and notice a new button labelled 'Show Blocked'
  31. or 'Hide Blocked'
  32. */
  33.  
  34. (function() {
  35. 'use strict';
  36.  
  37. console.log("TamperMonkey: Adding 'Show/Hide Blocked Tasks' button to Asana");
  38. var hide = Object();
  39. hide.hide = true;
  40. hide.btn = null;
  41. hide.btnAddTask = null;
  42. hide.taskRows = null;
  43. hide.tasksHeading = null;
  44. hide.interval = null;
  45. hide.addedSheet = false;
  46. hide.buttonHTML = "<button id='toggleHide' style='padding: 6px 10px 5px 10px;margin-left:20px;border:solid 1px #e0e0e0; border-radius:7px'>Show Blocked</button>";
  47.  
  48. hide.update = function() {
  49. hide.btnToggleHide = document.getElementById("toggleHide");
  50. if (hide.btnToggleHide) {
  51. console.log("found btnToggleHide");
  52. var row = document.getElementsByClassName('DropTargetRow');
  53. if (hide.hide) {
  54. for (var r of row) {
  55. if (r.innerHTML && r.innerHTML.search('dependentOnIcon') > 0) {
  56. r.setAttribute('style', 'display:none;');
  57. }
  58. }
  59. } else {
  60. for (r of row) {
  61. if (r.innerHTML && r.innerHTML.search('dependentOnIcon') > 0) {
  62. r.setAttribute('style', 'display:inline;');
  63. }
  64. }
  65. }
  66. window.setTimeout(hide.update, 3000);
  67. } else {
  68. console.log("hideBlocked.update: lost button, recreate it");
  69. hide.init();
  70. }
  71. };
  72.  
  73. hide.onClick = function() {
  74. if (hide.hide) {
  75. hide.btnToggleHide.innerText = 'Hide Blocked';
  76. hide.hide = false;
  77. } else {
  78. hide.btnToggleHide.innerText = 'Show Blocked';
  79. hide.hide = true;
  80. }
  81. hide.update();
  82. hide.updateTasksHeading();
  83. };
  84.  
  85. hide.updateTasksHeading = function() {
  86. if (!hide.tasksHeading) {
  87. var e = hide.tasksHeading = document.getElementsByClassName('SpreadsheetHeaderLeftStructure-taskNameHeading');
  88. if (e.length) {
  89. hide.tasksHeading = e[0];
  90. }
  91. }
  92. if (hide.tasksHeading) {
  93. hide.tasksHeading.innerHTML = hide.hide ? "Task name (blocked tasks hidden)" : "Task name (including blocked)";
  94. }
  95. };
  96.  
  97. hide.init = function() {
  98. hide.tasksHeading = null;
  99. hide.btnAddTask = document.getElementsByClassName("AddTaskDropdownButton");
  100. if (hide.btnAddTask.length) {
  101. hide.btnAddTask = hide.btnAddTask[0];
  102. hide.btnToggleHide = document.getElementById("toggleHide");
  103. if (!hide.btnToggleHide) {
  104. window.clearInterval(hide.initInterval);
  105. // button either doesn't exist, or disappeared
  106. hide.btnAddTask.insertAdjacentHTML("afterend", hide.buttonHTML);
  107. hide.btnToggleHide = document.getElementById("toggleHide");
  108. hide.btnToggleHide.innerText = hide.hide ? 'Show Blocked' : 'Hide Blocked';
  109. hide.updateTasksHeading();
  110. hide.btnToggleHide.addEventListener("click", hide.onClick);
  111. if (!hide.addedSheet) {
  112. var sheet = window.document.styleSheets[0];
  113. sheet.insertRule('#toggleHide:before { display:none;}', sheet.cssRules.length );
  114. hide.addedSheet = true;
  115. }
  116. window.setTimeout(hide.update, 1000);
  117. }
  118. }
  119. };
  120.  
  121. hide.initInterval = window.setInterval(hide.init, 1000);
  122. console.log("GreaseMonkey Code insertion completed");
  123. })();
  124.