From 0d568de7b210821972996937b7008bd57f30a766 Mon Sep 17 00:00:00 2001
From: Deepak Khatri <lorforlinux@beagleboard.org>
Date: Sat, 24 Aug 2024 15:25:53 +0530
Subject: [PATCH] Add a big red button to list outstanding todo items on any
 page

---
 _templates/todo.html | 49 ++++++++++++++++++++++++++++++++++++++++++++
 conf.py              |  2 +-
 requirements.txt     |  2 +-
 3 files changed, 51 insertions(+), 2 deletions(-)
 create mode 100644 _templates/todo.html

diff --git a/_templates/todo.html b/_templates/todo.html
new file mode 100644
index 00000000..7f2609b9
--- /dev/null
+++ b/_templates/todo.html
@@ -0,0 +1,49 @@
+<a role="button" data-bs-toggle="modal" data-bs-target="#todoModal" href="#" id="modalfortodoitems">
+    <button type="button" class="btn btn-danger">Outstanding todo items</button>
+</a>
+
+<div class="modal fade" id="todoModal" aria-labelledby="todoModalLabel" aria-hidden="true">
+    <div class="modal-dialog modal-lg modal-dialog-centered">
+        <div class="modal-content">
+        <div class="modal-header">
+            <h5 class="modal-title m-0 text-dark" id="todoModalLabel">Outstanding todo items</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+        </div> 
+        <div class="modal-body">
+            <ul class="list-group list-group-flush" id="todolist">
+                <!-- Auto generated for page -->
+            </ul>
+        </div>
+        </div>
+    </div>
+</div>
+
+<script>
+
+    document.body.appendChild(document.getElementById('todoModal'));
+    var modalfortodoitems = document.getElementById('modalfortodoitems');
+    var modalfortodoitemsparent = modalfortodoitems.parentNode;
+    var todoItems = document.getElementsByClassName('admonition-todo');
+    var todolist = document.getElementById('todolist')
+
+    if(todoItems.length == 0) {
+        modalfortodoitemsparent.remove();
+    } else  {
+        for (var i = 0; i < todoItems.length; ++i) {
+            var todoItem = document.createElement('li');
+            var link = document.createElement('a');
+            link.textContent = todoItems[i].getElementsByTagName('p')[1].innerHTML;
+            link.href = '#' + todoItems[i].id;
+            link.addEventListener('click', function() {
+                // Use Bootstrap's modal method to hide the modal
+                const todoModal = document.getElementById('todoModal');
+                const modal = bootstrap.Modal.getInstance(todoModal);
+                modal.hide();
+            });
+            todoItem.appendChild(link);
+            todoItem.classList.add('list-group-item');
+            todolist.appendChild(todoItem);
+        }
+    }
+    
+</script>
\ No newline at end of file
diff --git a/conf.py b/conf.py
index 2f746d68..2e0f7f2a 100644
--- a/conf.py
+++ b/conf.py
@@ -222,7 +222,7 @@ html_theme_options = {
     "footer_end": ["last-updated"],
     # "content_footer_items": ["last-updated"],
     "secondary_sidebar_items": {
-        "**": ["page-toc", "edit-this-page", "sourcelink","pdf", "feedback", "forum", "license-terms", "message", "oshw"]
+        "**": ["todo", "page-toc", "edit-this-page", "sourcelink","pdf", "feedback", "forum", "license-terms", "message", "oshw"]
     },
 }
 
diff --git a/requirements.txt b/requirements.txt
index fc7b2d5c..0f24296d 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -20,7 +20,7 @@ snowballstemmer==2.2.0
 Sphinx==7.2.6
 sphinx-autobuild==2021.3.14
 sphinx-copybutton==0.5.2
-pydata-sphinx-theme==0.15.2
+pydata-sphinx-theme==0.15.4
 sphinx-serve==1.0.1
 sphinx-tabs==3.4.4
 sphinx_design==0.5.0
-- 
GitLab