index.html (802 lines of code) (raw):

<!doctype html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="x-ua-compatible" content="ie=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>BugDash</title> <link rel="preload" href="assets/FiraGO-Book.woff2" as="font" crossorigin /> <link rel="preload" href="assets/FiraGO-BookItalic.woff2" as="font" crossorigin /> <link rel="preload" href="assets/FiraGO-Medium.woff2" as="font" crossorigin /> <link rel="preload" href="assets/FiraGO-MediumItalic.woff2" as="font" crossorigin /> <link rel="preload" href="assets/FiraGO-SemiBold.woff2" as="font" crossorigin /> <link rel="preload" href="assets/FiraGO-SemiBoldItalic.woff2" as="font" crossorigin /> <link rel="preload" href="assets/MaterialSymbolsOutlined.woff" as="font" crossorigin /> <link rel="stylesheet" type="text/css" href="app/global.css?a094240244633373e2aa380c13a976e3" /> <link rel="stylesheet" type="text/css" href="app/tabs.css?7e6a6abd55a4ef6a934e84f1e48e51d2" /> <link rel="stylesheet" type="text/css" href="app/tabs/components.css?b1b1bfcafc86e46e3dc7cb233a2a1ce4" /> <link rel="stylesheet" type="text/css" href="app/tabs/overview.css?7c8e9135cc4c6ffd6c64b53d9f1bb6bb" /> <link rel="stylesheet" type="text/css" href="app/tabs/help.css?c85e68301e2f59a3727b7f4884e85d71" /> <link rel="stylesheet" type="text/css" href="app/buglist.css?620e54a3c69c44c45578bacf160ec123" /> <link rel="stylesheet" type="text/css" href="app/bugtable.css?858502ef516bc0d8f89bf6a491d4d4ff" /> <link rel="stylesheet" type="text/css" href="app/dialog.css?0b89cde36ac140a69346756901fc0155" /> <link rel="stylesheet" type="text/css" href="app/tooltips.css?2f120cc74703183727f6b80825e33d12" /> <link rel="icon shortcut" href="assets/bugdash.svg" type="image/svg" /> <script type="importmap">{ "imports": { "bugdash": "./app/bugdash.mjs?737e39dcbb34e19747c10552c1bbd539", "buglist": "./app/buglist.mjs?c618699658a0375213bbf13a66db8522", "buglists/assigned-inactive": "./app/buglists/assigned-inactive.mjs?b67a90e725c212c02980ca7c8581275a", "buglists/blockers": "./app/buglists/blockers.mjs?f6e798f0359994ed20a373149cb49798", "buglists/blockers-unassigned": "./app/buglists/blockers-unassigned.mjs?a0cee09f85518dd9e32f9edc7e6e41ad", "buglists/criticals": "./app/buglists/criticals.mjs?6fdcb204dc26bd419a9e068235001603", "buglists/criticals-unassigned": "./app/buglists/criticals-unassigned.mjs?4996920df9bdf579ef92186b82e1b83b", "buglists/long-defects": "./app/buglists/long-defects.mjs?95e95e3b0489ecd5843a732ae1acec34", "buglists/long-enhancements": "./app/buglists/long-enhancements.mjs?da8a1e6239d575328da0a527bf8b3dc5", "buglists/long-tasks": "./app/buglists/long-tasks.mjs?19d1b6c5f947a13a9ee95bc086e1908c", "buglists/needinfo-escalated": "./app/buglists/needinfo-escalated.mjs?1a90a65c314b8cfd23e3dbe6ca00c7f7", "buglists/needinfo-stale": "./app/buglists/needinfo-stale.mjs?dc84c62b5d70b78f1a0b7d3f463b3923", "buglists/recent-enhancements": "./app/buglists/recent-enhancements.mjs?20ff24591f3857a9e63529e0490dd44e", "buglists/recent-regressions": "./app/buglists/recent-regressions.mjs?cc6ff2953e2dbafabf00374136e09fc4", "buglists/recent-tasks": "./app/buglists/recent-tasks.mjs?2c5f3a0d1c2f81b37db38ebb1d1586b9", "buglists/regressions": "./app/buglists/regressions.mjs?5bbbf6bfd80a2ee635a87f95f40e6bd9", "buglists/reo": "./app/buglists/reo.mjs?cea7533c254b4f1758ee030c75b4beb8", "buglists/stalled": "./app/buglists/stalled.mjs?da2d4f814ac5b70c90a3ebb32f3b23e6", "buglists/topcrashers": "./app/buglists/topcrashers.mjs?b747f1889a13ac5127212473cf75fc78", "buglists/tracked": "./app/buglists/tracked.mjs?47a696d9df9ad3ece6f367fb61e9c6e8", "buglists/triage-needed": "./app/buglists/triage-needed.mjs?29a26c06f30761d9e334be1c080692b6", "bugtable": "./app/bugtable.mjs?9436ca2b2f674d94f6d52af9da9856b8", "bugzilla": "./app/bugzilla.mjs?dd6eb272598bd1a60c70acba11f7173a", "dialog": "./app/dialog.mjs?8c2b0b6af0aa3d362f724856cba39482", "global": "./app/global.mjs?57a5a70bb29a7739edda36e228d8d6c1", "menus": "./app/menus.mjs?f766e80f5362fc3c647559fac6755822", "tabs": "./app/tabs.mjs?ab412902c846ef1daa0950117986f251", "tabs/components": "./app/tabs/components.mjs?b328fe75b376d4a17f489174156f6991", "tabs/help": "./app/tabs/help.mjs?beaaacb30a657ab9eb1e0383e9be2d62", "tabs/important": "./app/tabs/important.mjs?a6806c28e53a600a0e44bd26e1ae7df2", "tabs/overview": "./app/tabs/overview.mjs?e6d5c91d79b6b9f75158a73b85dc0e10", "tabs/reo": "./app/tabs/reo.mjs?ce8d5276985eefecf499a28b54375725", "tabs/stalled": "./app/tabs/stalled.mjs?e06cd9b45aacdd42569caf618d9b6018", "tabs/tracked": "./app/tabs/tracked.mjs?6a9d0e2e895455cd18e51c0ba53ff52a", "tabs/triage": "./app/tabs/triage.mjs?d085a8bfb14425f2ee5fc86dda4d2088", "tooltips": "./app/tooltips.mjs?f6ce915e9ef0058cae9ecc157ad8a1a9", "util": "./app/util.mjs?2819adf7dd003d98a354fbdd975c8c38" } }</script> </head> <body class="loading"> <div id="loading"> Starting BugDash… <div id="loading-stage"></div> <div id="no-importmap" class="hidden"> <p> BugDash is unable to start as your browser does not support the "importMap" feature. </p> <p>For Firefox you'll require at least version 108.</p> </div> </div> <div id="dialog-wrapper" class="hidden"> <div id="dialog"> <div id="dialog-message"></div> <input type="text" id="dialog-input" /> <div id="dialog-buttons"> <div class="dialog-button" id="dialog-cancel">Cancel</div> <div class="dialog-button" id="dialog-ok">OK</div> </div> </div> </div> <div id="order-menu-template" class="hidden"> <p>Order by</p> <ul> <li data-value="default">Default</li> <li data-value="oldest">Oldest</li> <li data-value="newest">Newest</li> <li data-value="random">Random</li> </ul> </div> <div id="closed-filter-menu-template" class="hidden"> <p>Opened</p> <ul> <li data-value="all">Any time</li> <li data-value="1y">&lt; 1 year ago</li> <li data-value="2y">&lt; 2 years ago</li> </ul> </div> <div id="nav"> <div class="tab-group"> <div class="tab" data-tab="help">Help</div> </div> <div id="components-tab-group" class="tab-group"> <div class="tab selected" data-tab="components"> <span id="selected-components-title" >Components <span id="selected-components-count"></span> </span> <span id="selected-components-warning" class="material-icons" title="Some of the specified components were not valid" > warning </span> </div> </div> <div id="refresh-all-button" class="nav-button material-icons" title="Refresh all bug lists. Shift+Click to also refresh components" > refresh </div> <div class="tab filler"> <span id="global-error" title="Failed to load all required information; check web console for details. Some list may produce incorrect or invalid results." > General failure reading data. <span class="egg">Abort, Retry, Fail?</span> </span> </div> <div id="username"></div> <div id="key-button" class="nav-button material-icons" title="Set Bugzilla API-Key" > key </div> </div> <div id="tabs-content"></div> <!-- help --> <div id="tab-help" class="content"> <h1>BugDash</h1> <p> Dashboard of bug lists for Firefox-related components in Bugzilla, with a focus on triage and release tracking. </p> <p> For more information about the purpose and process of triage, see <a href="https://firefox-source-docs.mozilla.org/bug-mgmt/policies/triage-bugzilla.html" >the Triage for Bugzilla documentation</a >. </p> <p> This code lives at <a href="https://github.com/mozilla/bugdash" >GitHub in the bugdash project</a >. Pull requests welcome. </p> <h1>How To Use</h1> <ol> <li> Provide your Bugzilla API-Key by clicking on the <span class="material-icons">key</span> icon near the top right of the page (saved in your browser's localStorage). </li> <li> Use the <b>Components</b> tab to select Bugzilla components you want to view. </li> <li>Switch to the relevant tab.</li> </ol> <h1>Bug List Fields</h1> <p> Use the tooltips on the sample bug below to see the field associated with each value. </p> <div id="help-sample"></div> </div> <!-- components --> <div id="tab-components" class="content selected"> <h1>Select Component(s)</h1> <div> <input id="component-filter" type="search" placeholder="Filter…" /> <select id="filter-scope"> <option value="title">Name</option> <option value="team">Team</option> </select> <div id="filter-actions"> <button id="filter-all">Select Visible</button> <button id="filter-none-visible">Deselect Visible</button> <button id="filter-none">Deselect All</button> <input type="checkbox" id="filter-selected" /> <label for="filter-selected">Selected Only</label> </div> </div> <table id="components"> <thead> <tr> <th id="components-th-cb"></th> <th id="components-th-name">Component</th> <th id="components-th-team">Team</th> <th id="components-th-desc">Description</th> </tr> </thead> <tbody></tbody> </table> <template id="components-row"> <tr class="row"> <td><input type="checkbox" /></td> <td class="name"><label data-field="title"></label></td> <td class="team"><label data-field="team"></label></td> <td class="desc"><label data-field="desc"></label></td> </tr> </template> <div id="no-matching-components">No matching components.</div> </div> <!-- template: tab --> <template id="tab-template"> <div class="tab" data-tab="" data-field="title"></div> </template> <!-- template: tab-content --> <template id="tab-content-template"> <div data-id-field="outer" class="content"> <div data-id-field="inner"></div> </div> </template> <!-- template: buglist group --> <template id="buglist-group-template"> <div class="buglist-group"> <div class="buglist-group-actions"> <a href="#" data-action="expand">Expand All</a> &bull; <a href="#" data-action="collapse">Collapse All</a> </div> </div> </template> <!-- template: buglist --> <template id="buglist-template"> <div class="buglist-container closed loading"> <div class="buglist-header"> <div class="toggle"></div> <div class="summary" data-field="title"></div> <div class="loading-spinner"></div> <div class="counter">-</div> <div class="actions"> <div class="info material-icons" data-title-field="description"> question_mark </div> <button class="refresh-btn material-icons">refresh</button> <div class="action"> <button class="order-btn material-icons" data-mode="default" > sort </button> </div> <button class="buglist-btn material-icons">bug_report</button> </div> </div> <div class="buglist-loading">Loading…</div> <table class="buglist"></table> </div> </template> <!-- template: default bug row --> <template id="bug-row-template"> <tr class="bug-row"> <td class="bug-id"> <a href="#" data-href-field="url" data-field="id" target="_blank" ></a> </td> <td colspan="7"> <a href="#" class="bug-summary" data-field="summary" data-href-field="url" target="_blank" ></a> </td> </tr> <tr class="bug-row bug-meta"> <td class="bug-icons material-icons"> <span class="type" data-title-field="type" data-field="type_icon" ></span ><span class="needinfo" data-title-field="needinfo_target" data-field="needinfo_icon" ></span ><span class="groups" data-title-field="groups" data-field="groups_icon" ></span> </td> <td class="severity" data-title-field="severity_title" data-field="severity" ></td> <td class="priority" data-title-field="priority_title" data-field="priority" ></td> <td class="component" data-title-field="component_title"> <span data-field="product"></span>: <span data-field="component"></span> </td> <td class="reporter" data-field="creator_nick" data-title-field="creator_name" ></td> <td class="owner" data-field="assigned_to_nick" data-title-field="assigned_to_name" ></td> <td class="keywords" data-title-field="keywords_title" data-field="keywords" ></td> <td class="timestamp"></td> </tr> </template> <template id="bug-row-timestamp-creation"> <span class="creation" data-field="timestamp_ago" data-title-field="timestamp" ></span> </template> <template id="bug-row-timestamp-needinfo"> <span data-field="needinfo_nick" data-title-field="needinfo_name"></span> : <span data-field="needinfo_ago" data-title-field="needinfo_date"></span> </template> <!-- template: overview --> <template id="overview-template"> <div class="open-defects bugtable-container"> <div class="bugtable-header"> <div class="summary">Open Defects by Severity</div> <div class="loading-spinner"></div> <div class="error">Failed to load bugs</div> <div class="actions"> <button class="refresh-btn material-icons">refresh</button> </div> </div> <table class="bugtable"> <tr> <th>All</th> <th>S1</th> <th>S2</th> <th>S3</th> <th>S4</th> <th title="Untriaged">Un</th> </tr> <tr> <td> <a href="#" data-href-field="saurl" data-field="sa"></a> </td> <td> <a href="#" data-href-field="s1url" data-field="s1"></a> </td> <td> <a href="#" data-href-field="s2url" data-field="s2"></a> </td> <td> <a href="#" data-href-field="s3url" data-field="s3"></a> </td> <td> <a href="#" data-href-field="s4url" data-field="s4"></a> </td> <td> <a href="#" data-href-field="suurl" data-field="su"></a> </td> </tr> </table> </div> <div class="trends-defects bugtable-container"> <div class="bugtable-header"> <div class="summary">Maintenance Trend</div> <div class="loading-spinner"></div> <div class="error">Failed to load bugs</div> <div class="info"> <a href="https://docs.google.com/document/d/1y2dUDZI5U3xvY0jMY1LfIDARc5b_QB9mS2DV7MWrfa0" >About Maintenance Effectiveness</a > </div> <div class="actions"> <button class="refresh-btn material-icons">refresh</button> </div> </div> <table class="bugtable"> <tr> <th rowspan="2" title="Values for bugs within the last N weeks"> Period </th> <th rowspan="2" title="Maintenance Effectiveness"> Maint<br />Effect </th> <th rowspan="2" title="Estimated Burndown Time (years)"> Burn<br />Down </th> <th class="spanned" colspan="6"> <div class="sub-header"> <div></div> <div class="sub-title">Opened</div> <div class="actions"> <div class="action"> <div class="material-icons" title="Bugs opened/created within the period."> question_mark </div> </div> </div> </div> </th> <th class="spanned" colspan="6"> <div class="sub-header"> <div></div> <div class="sub-title">Closed</div> <div class="actions"> <div class="action"> <div class="material-icons" title="Bugs closed within the period. Use the filter to restrict the list based on the bug's age."> question_mark </div> </div> <div class="action"> <button id="closed-filter-btn" class="material-icons">filter_alt</button> </div> </div> </div> </th> </tr> <tr class="no-border"> <th class="sub-border">All</th> <th>S1</th> <th>S2</th> <th>S3</th> <th>S4</th> <th title="Untriaged" class="force-border">Un</th> <th class="sub-border">All</th> <th>S1</th> <th>S2</th> <th>S3</th> <th>S4</th> <th title="Untriaged">Un</th> </tr> <tr> <td>1 week</td> <td data-field="w1_me"></td> <td data-field="w1_bd"></td> <td class="sub-border"> <a href="#" data-href-field="w1_opened_saurl" data-field="w1_opened_sa" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w1_opened_s1url" data-field="w1_opened_s1" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w1_opened_s2url" data-field="w1_opened_s2" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w1_opened_s3url" data-field="w1_opened_s3" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w1_opened_s4url" data-field="w1_opened_s4" ></a> </td> <td class="force-border"> <a href="#" data-href-field="w1_opened_suurl" data-field="w1_opened_su" ></a> </td> <td class="sub-border"> <a href="#" data-href-field="w1_closed_saurl" data-field="w1_closed_sa" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w1_closed_s1url" data-field="w1_closed_s1" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w1_closed_s2url" data-field="w1_closed_s2" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w1_closed_s3url" data-field="w1_closed_s3" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w1_closed_s4url" data-field="w1_closed_s4" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w1_closed_suurl" data-field="w1_closed_su" ></a> </td> </tr> <tr> <td>4 weeks</td> <td data-field="w4_me"></td> <td data-field="w4_bd"></td> <td class="sub-border"> <a href="#" data-href-field="w4_opened_saurl" data-field="w4_opened_sa" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w4_opened_s1url" data-field="w4_opened_s1" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w4_opened_s2url" data-field="w4_opened_s2" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w4_opened_s3url" data-field="w4_opened_s3" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w4_opened_s4url" data-field="w4_opened_s4" ></a> </td> <td class="force-border"> <a href="#" data-href-field="w4_opened_suurl" data-field="w4_opened_su" ></a> </td> <td class="sub-border"> <a href="#" data-href-field="w4_closed_saurl" data-field="w4_closed_sa" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w4_closed_s1url" data-field="w4_closed_s1" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w4_closed_s2url" data-field="w4_closed_s2" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w4_closed_s3url" data-field="w4_closed_s3" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w4_closed_s4url" data-field="w4_closed_s4" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w4_closed_suurl" data-field="w4_closed_su" ></a> </td> </tr> <tr> <td>12 weeks</td> <td data-field="w12_me"></td> <td data-field="w12_bd"></td> <td class="sub-border"> <a href="#" data-href-field="w12_opened_saurl" data-field="w12_opened_sa" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w12_opened_s1url" data-field="w12_opened_s1" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w12_opened_s2url" data-field="w12_opened_s2" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w12_opened_s3url" data-field="w12_opened_s3" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w12_opened_s4url" data-field="w12_opened_s4" ></a> </td> <td class="force-border"> <a href="#" data-href-field="w12_opened_suurl" data-field="w12_opened_su" ></a> </td> <td class="sub-border"> <a href="#" data-href-field="w12_closed_saurl" data-field="w12_closed_sa" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w12_closed_s1url" data-field="w12_closed_s1" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w12_closed_s2url" data-field="w12_closed_s2" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w12_closed_s3url" data-field="w12_closed_s3" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w12_closed_s4url" data-field="w12_closed_s4" ></a> </td> <td class="no-border"> <a href="#" data-href-field="w12_closed_suurl" data-field="w12_closed_su" ></a> </td> </tr> </table> </div> </template> <script> import("util").catch(() => { document.querySelector("#no-importmap").classList.remove("hidden"); }); </script> <script src="assets/popperjs-2.11.7.min.js"></script> <script src="assets/tippyjs-6.3.7.min.js"></script> <script type="module" src="app/bugdash.mjs?737e39dcbb34e19747c10552c1bbd539" ></script> </body> </html>