diff --git a/app/build.gradle b/app/build.gradle index 72fe2ab..c9c0c64 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,7 +21,7 @@ android { versionName "1.13" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - + // 16KB page size support ndk { abiFilters 'arm64-v8a', 'x86_64' @@ -37,6 +37,9 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' signingConfig signingConfigs.debug + ndk { + debugSymbolLevel 'FULL' + } } } compileOptions { diff --git a/app/src/main/assets/assets/ic_chart.svg b/app/src/main/assets/assets/ic_chart.svg new file mode 100644 index 0000000..af6fea6 --- /dev/null +++ b/app/src/main/assets/assets/ic_chart.svg @@ -0,0 +1,4 @@ + diff --git a/app/src/main/assets/assets/main.js b/app/src/main/assets/assets/main.js index 0c499a6..4539c12 100644 --- a/app/src/main/assets/assets/main.js +++ b/app/src/main/assets/assets/main.js @@ -1,77 +1,136 @@ // function to handle tab switching for any table function activateTab(tableContainer, tabIndex) { - if (!tableContainer) return; + if (!tableContainer) return; - tableContainer.querySelectorAll('.tab-button, .tab, .tab, .tab').forEach(tab => { - tab.classList.remove('active-option', 'active-tab'); + tableContainer + .querySelectorAll(".tab-button, .tab, .tab, .tab") + .forEach((tab) => { + tab.classList.remove("active-option", "active-tab"); }); - - tableContainer.querySelectorAll('.option-content, .tab-content, .tab-content, .tab-content').forEach(content => { - content.classList.remove('active-option', 'active-tab'); + + tableContainer + .querySelectorAll( + ".option-content, .tab-content, .tab-content, .tab-content" + ) + .forEach((content) => { + content.classList.remove("active-option", "active-tab"); }); - // Add active class to selected tab and content - const selectedTab = tableContainer.querySelectorAll('.tab-button, .tab, .tab, .tab')[tabIndex]; - const selectedContent = tableContainer.querySelectorAll('.option-content, .tab-content, .tab-content, .tab-content')[tabIndex]; - - if (selectedTab) { - if (selectedTab.classList.contains('tab')) { - selectedTab.classList.add('active-tab'); - } else if (selectedTab.classList.contains('tab-button')) { - selectedTab.classList.add('active-option'); - } else if (selectedTab.classList.contains('tab')) { - selectedTab.classList.add('active-tab'); - } else if (selectedTab.classList.contains('tab')) { - selectedTab.classList.add('active-tab'); - } + // Add active class to selected tab and content + const selectedTab = tableContainer.querySelectorAll( + ".tab-button, .tab, .tab, .tab" + )[tabIndex]; + const selectedContent = tableContainer.querySelectorAll( + ".option-content, .tab-content, .tab-content, .tab-content" + )[tabIndex]; + + if (selectedTab) { + if (selectedTab.classList.contains("tab")) { + selectedTab.classList.add("active-tab"); + } else if (selectedTab.classList.contains("tab-button")) { + selectedTab.classList.add("active-option"); + } else if (selectedTab.classList.contains("tab")) { + selectedTab.classList.add("active-tab"); + } else if (selectedTab.classList.contains("tab")) { + selectedTab.classList.add("active-tab"); } - - if (selectedContent) { - if (selectedContent.classList.contains('tab-content')) { - selectedContent.classList.add('active-tab'); - } else if (selectedContent.classList.contains('option-content')) { - selectedContent.classList.add('active-option'); - } else if (selectedContent.classList.contains('tab-content')) { - selectedContent.classList.add('active-tab'); - } else if (selectedContent.classList.contains('tab-content')) { - selectedContent.classList.add('active-tab'); - } + } + + if (selectedContent) { + if (selectedContent.classList.contains("tab-content")) { + selectedContent.classList.add("active-tab"); + } else if (selectedContent.classList.contains("option-content")) { + selectedContent.classList.add("active-option"); + } else if (selectedContent.classList.contains("tab-content")) { + selectedContent.classList.add("active-tab"); + } else if (selectedContent.classList.contains("tab-content")) { + selectedContent.classList.add("active-tab"); } + } } // Function to handle tab switching with event function handleTabSwitch(event, tabIndex) { - // Get the clicked button from the event - const clickedButton = event.currentTarget; - - const tableContainer = clickedButton.closest('.uk-overflow-auto'); - if (!tableContainer) return; - - // Get all tab buttons in this container - const tabButtons = tableContainer.querySelectorAll('.tab-button, .tab, .tab, .tab'); - - // Find the index of the clicked button within its container - const clickedIndex = Array.from(tabButtons).indexOf(clickedButton); - - // Generate a unique ID for the container if it doesn't have one - if (!tableContainer.id) { - tableContainer.id = 'table-' + Math.random().toString(36).substr(2, 9); - } - - // Switch to the correct tab - activateTab(tableContainer, clickedIndex); + // Get the clicked button from the event + const clickedButton = event.currentTarget; + + const tableContainer = clickedButton.closest(".uk-overflow-auto"); + if (!tableContainer) return; + + // Get all tab buttons in this container + const tabButtons = tableContainer.querySelectorAll( + ".tab-button, .tab, .tab, .tab" + ); + + // Find the index of the clicked button within its container + const clickedIndex = Array.from(tabButtons).indexOf(clickedButton); + + // Generate a unique ID for the container if it doesn't have one + if (!tableContainer.id) { + tableContainer.id = "table-" + Math.random().toString(36).substr(2, 9); + } + + // Switch to the correct tab + activateTab(tableContainer, clickedIndex); } function switchTab(tabIndex, event) { - handleTabSwitch(event, tabIndex); + handleTabSwitch(event, tabIndex); } // For Dropdown Togglers function toggleItem(clickedTitle) { - const itemContent = clickedTitle.nextElementSibling; - - itemContent.classList.toggle('active'); + const itemContent = clickedTitle.nextElementSibling; + + itemContent.classList.toggle("active"); + + const chevronUp = clickedTitle.querySelector(".chevron-up"); + chevronUp.classList.toggle("active"); +} + +document.addEventListener("DOMContentLoaded", function () { + const tooltips = document.querySelectorAll(".info-icon"); + + document.addEventListener("click", function (event) { + if (!event.target.closest(".info-icon")) { + document.querySelectorAll(".info-icon.active").forEach((activeIcon) => { + activeIcon.classList.remove("active"); + }); + } + }); - const chevronUp = clickedTitle.querySelector('.chevron-up'); - chevronUp.classList.toggle('active'); -} \ No newline at end of file + tooltips.forEach(function (icon) { + let tooltip = icon.querySelector(".tooltip"); + if (!tooltip) { + tooltip = document.createElement("div"); + tooltip.className = "tooltip"; + tooltip.textContent = + icon.getAttribute("data-tooltip") || "Additional information"; + + // Get positioning class from data attribute + const positionClass = + icon.getAttribute("data-tooltip-position") || "tooltip-center"; + tooltip.classList.add(positionClass); + + icon.appendChild(tooltip); + } + + let isTooltipVisible = false; + + icon.addEventListener("click", function (event) { + event.stopPropagation(); + + document.querySelectorAll(".info-icon.active").forEach((activeIcon) => { + if (activeIcon !== icon) { + activeIcon.classList.remove("active"); + const otherTooltip = activeIcon.querySelector(".tooltip"); + if (otherTooltip) otherTooltip.style.display = "none"; + } + }); + + isTooltipVisible = !this.classList.contains("active"); + this.classList.toggle("active"); + tooltip.style.display = isTooltipVisible ? "block" : "none"; + }); + }); +}); diff --git a/app/src/main/assets/assets/style.css b/app/src/main/assets/assets/style.css index 9887946..2a64eec 100644 --- a/app/src/main/assets/assets/style.css +++ b/app/src/main/assets/assets/style.css @@ -1,11 +1,11 @@ /* Import from the UIkit.css file */ :root { color-scheme: light dark; - --primary-color: #5182FF; - --white-color: #FFFFFF; - --yellow-color: #FFC107; - --green-color: #009C8E; - --background-color: #F7F7F7; + --primary-color: #5182ff; + --white-color: #ffffff; + --yellow-color: #ffc107; + --green-color: #009c8e; + --background-color: #f7f7f7; --background-color-secondary: var(--white-color); --body-color: #747474; --body-color-secondary: #000; @@ -20,53 +20,53 @@ --tab-box-shadow: 0px 0px 32px 0px rgba(187, 187, 187, 0.25); --transition-duration: 500ms; --list-title-color: var(--yellow-color); - --divider-color: #C6C6C8; + --divider-color: #c6c6c8; --last-updated-color: #636366; } @media screen and (prefers-color-scheme: dark) { :root { - --primary-color: #7090FD; - --white-color: #FFFFFF; - --yellow-color: #FFC107; - --green-color: #009C8E; - --background-color: #2A2A2A; + --primary-color: #7090fd; + --white-color: #ffffff; + --yellow-color: #ffc107; + --green-color: #009c8e; + --background-color: #2a2a2a; --background-color-secondary: #343434; - --body-color: #D5D5D5; - --body-color-secondary: #F9F9F9; + --body-color: #d5d5d5; + --body-color-secondary: #f9f9f9; --link-color: var(--primary-color); --table-title-color: var(--primary-color); --titles-color: var(--white-color); --inactive-tab-color: var(--background-color-secondary); - --inactive-tab-text-color: #ECECEC; + --inactive-tab-text-color: #ececec; --active-tab-color: var(--primary-color); - --active-tab-text-color: #F9F9F9; + --active-tab-text-color: #f9f9f9; --tab-radius: 5px; --tab-box-shadow: 0px 0px 32px 0px rgba(0, 0, 0, 0.2); --transition-duration: 500ms; --list-title-color: var(--yellow-color); - --divider-color: #C6C6C8; - --last-updated-color: #B9B9B9; + --divider-color: #c6c6c8; + --last-updated-color: #b9b9b9; } } /* Keyframes + Animations */ @keyframes fadeIn { - from { + from { opacity: 0; } - to { + to { opacity: 1; } } @keyframes slideInTop { - from { + from { opacity: 0; /* height: 0; */ transform: translateY(-100%); } - to { + to { opacity: 1; /* height: auto; */ transform: translateY(0); @@ -74,12 +74,12 @@ } @keyframes slideOutTop { - from { + from { opacity: 1; height: auto; transform: translateY(0); } - to { + to { opacity: 0; height: 0; transform: translateY(-20%); @@ -87,44 +87,44 @@ } @keyframes slideInLeft { - from { + from { opacity: 0; transform: translateX(-10%); } - to { + to { opacity: 1; transform: translateX(0); } } @keyframes slideOutRight { - from { + from { opacity: 1; transform: translateX(0); } - to { + to { opacity: 0; transform: translateX(-10%); } } @keyframes slideInBottom { - from { + from { opacity: 0; transform: translateY(10%); } - to { + to { opacity: 1; transform: translateY(0); } } @keyframes slideOutBottom { - from { + from { opacity: 1; transform: translateY(0); } - to { + to { opacity: 0; transform: translateY(-10%); } @@ -132,7 +132,9 @@ html { /* 1 */ - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 1rem; font-weight: normal; line-height: 1.5; @@ -182,7 +184,12 @@ strong { } /* Headings */ -h1, h2, h3, h4, h5, h6 { +h1, +h2, +h3, +h4, +h5, +h6 { color: var(--titles-color); } @@ -204,9 +211,9 @@ img { } .ic_title_icon { - height: 50px !important; - width: 50px !important; - object-fit: fill !important; + height: 50px !important; + width: 50px !important; + object-fit: fill !important; } .chapter-header { @@ -398,48 +405,7 @@ hr { .uk-table-small .uk-table-link > a { padding: 0.625rem 0.75rem; } -/* Responsive table - ========================================================================== */ -/* Phone landscape and smaller */ -@media (max-width: 959px) { - .uk-table-responsive, - .uk-table-responsive tbody, - .uk-table-responsive th, - .uk-table-responsive td, - .uk-table-responsive tr { - display: block; - } - .uk-table-responsive thead { - display: none; - } - .uk-table-responsive th, - .uk-table-responsive td { - width: auto !important; - max-width: none !important; - min-width: 0 !important; - overflow: visible !important; - white-space: normal !important; - } - .uk-table-responsive th:not(:first-child):not(.uk-table-link), - .uk-table-responsive td:not(:first-child):not(.uk-table-link), - .uk-table-responsive .uk-table-link:not(:first-child) > a { - padding-top: 5px !important; - } - .uk-table-responsive th:not(:last-child):not(.uk-table-link), - .uk-table-responsive td:not(:last-child):not(.uk-table-link), - .uk-table-responsive .uk-table-link:not(:last-child) > a { - padding-bottom: 5px !important; - } - .uk-table-justify.uk-table-responsive th, - .uk-table-justify.uk-table-responsive td { - padding-left: 0; - padding-right: 0; - } - .uk-tabs-container .tabs { - justify-content: center !important; /* Center tabs on small screens */ - } -} .uk-table tbody tr { transition: background-color 0.1s linear; } @@ -470,11 +436,16 @@ th.uk-text-truncate, td.uk-text-truncate { max-width: 0; } +.uk-text-wrap { + white-space: wrap; +} /* End of import from UIkit.css file */ -table, td, th { - border: 1px solid #adadad; +table, +td, +th { + border: 1px solid #adadad; } .res-width { @@ -482,103 +453,103 @@ table, td, th { } .border-left-hidden { - border-left: hidden; + border-left: hidden; } .border-right-hidden { - border-right: hidden; + border-right: hidden; } .border-left-right-hidden { - border-right: hidden; - border-left: hidden; + border-right: hidden; + border-left: hidden; } .border-bottom-left-right-hidden { - border-right: hidden; - border-bottom: hidden; - border-left: hidden; + border-right: hidden; + border-bottom: hidden; + border-left: hidden; } .reddish { - color: var(--table-title-color); + color: var(--table-title-color); } .orange { - color: var(--link-color); + color: var(--link-color); } a { - font-style: normal; - text-decoration: underline !important; - color: var(--link-color) !important; + font-style: normal; + text-decoration: underline !important; + color: var(--link-color) !important; } .uk-table th { - padding: 1rem 0.75rem; - text-align: left; - vertical-align: bottom; - font-size: 1rem; - font-weight: bold; - color: var(--table-title-color); - text-transform: none; + padding: 1rem 0.75rem; + text-align: left; + vertical-align: bottom; + font-size: 1rem; + font-weight: bold; + color: var(--table-title-color); + text-transform: none; } .uk-table td { color: var(--body-color-secondary); } - /* Tabs */ .uk-tabs-container .tabs { - display: flex; - flex-direction: row; - justify-content: center; - flex-wrap: wrap; - align-items: stretch; - align-content: start; - gap: 24px; - width: 100%; - list-style: none; - padding: 0; - margin: 0; + display: flex; + flex-direction: row; + justify-content: center; + /* justify-items: center; */ + flex-wrap: wrap; + align-items: stretch; + align-content: start; + gap: 24px; + width: 100%; + list-style: none; + padding: 0; + margin: 0; } .tab, .tab-button { - display: inline-flex; - justify-items: center; - justify-content: center; - align-items: center; - gap: 1rem; - padding: 0.75rem; - text-align: center; - vertical-align: bottom; - font-size: 0.870rem; - background-color: var(--inactive-tab-color); - color: var(--inactive-tab-text-color); - text-transform: capitalize; - cursor: pointer; - border: none; - border-radius: var(--tab-radius); - box-shadow: var(--tab-box-shadow); - min-width: 120px; - max-width: 200px; - width: auto; - height: auto; - white-space: normal; - word-wrap: break-word; - min-height: 70px; - box-sizing: border-box; + display: inline-flex; + justify-items: center; + justify-content: center; + align-items: center; + gap: 1rem; + padding: 0.75rem; + text-align: center; + vertical-align: bottom; + font-size: 0.87rem; + background-color: var(--inactive-tab-color); + color: var(--inactive-tab-text-color); + text-transform: capitalize; + cursor: pointer; + border: none; + border-radius: var(--tab-radius); + box-shadow: var(--tab-box-shadow); + min-width: 120px; + max-width: 200px; + width: auto; + height: auto; + white-space: normal; + word-wrap: break-word; + min-height: 70px; + box-sizing: border-box; } .tab.active-tab, .tab-button.active-option, .option.active-option { - background-color: var(--active-tab-color); - color: var(--active-tab-text-color); - box-shadow: var(--tab-box-shadow); + background-color: var(--active-tab-color); + color: var(--active-tab-text-color); + box-shadow: var(--tab-box-shadow); } .tab-content, @@ -601,10 +572,11 @@ a { } .highlight { - color: var(--active-tab-color); + color: var(--primary-color); } -th, td { +th, +td { vertical-align: middle !important; } @@ -613,24 +585,24 @@ td { } td ul { - padding-left: 1.25rem; - padding-top: 0.625rem; - padding-bottom: 0.625rem; + padding-left: 1.25rem; + padding-top: 0.625rem; + padding-bottom: 0.625rem; } h3.highlight { - margin-top: 1rem; - padding-top: 0; + margin-top: 1rem; + padding-top: 0; } .view-in-chapter-highlight { - color: var(--body-color-secondary); + color: var(--body-color-secondary); } .duration { - font-size: 1rem; - margin-bottom: 0; - padding-bottom: 0; + font-size: 1rem; + margin-bottom: 0; + padding-bottom: 0; } .nested-list { @@ -644,12 +616,12 @@ h3.highlight { } .uk-list { - padding-left: 1.5rem; - font-style: normal; + padding-left: 1.5rem; + font-style: normal; } .uk-list.togglers-list { - padding-left: 0; + padding-left: 0; } .uk-paragraph { @@ -663,17 +635,17 @@ h3.highlight { position: absolute; left: 0; top: -0.25rem; - height: 2rem; - width: 0.5rem; + height: 2rem; + width: 0.5rem; background-color: var(--primary-color); - border-radius: 0.25rem; + border-radius: 0.25rem; } .uk-list-title, .uk-table-title, .custom-table-title { - position: relative; - padding-left: 1.5rem; + position: relative; + padding-left: 1.5rem; } .uk-list-title::before, @@ -683,18 +655,18 @@ h3.highlight { position: absolute; left: 0; top: -0.1875rem; - height: 2rem; - width: 0.5rem; - border-radius: 0.25rem; + height: 2rem; + width: 0.5rem; + border-radius: 0.25rem; } .uk-list-title::before { - top: -0.125rem; - background-color: var(--list-title-color); + top: -0.125rem; + background-color: var(--list-title-color); } .custom-table-title::before { - background-color: var(--green-color); + background-color: var(--green-color); } /* Togglers */ @@ -712,14 +684,14 @@ h3.highlight { } .chevron-up { - transform: rotate(-180deg); - transition: transform var(--transition-duration) ease-in-out; - font-size: 1.5rem; + transform: rotate(-180deg); + transition: transform var(--transition-duration) ease-in-out; + font-size: 1.5rem; } .chevron-up.active { - transform: rotate(0); - transition: transform var(--transition-duration) ease-in-out; + transform: rotate(0); + transition: transform var(--transition-duration) ease-in-out; } .item { @@ -731,4 +703,179 @@ h3.highlight { .item.active { max-height: 5000px; transition: max-height 800ms cubic-bezier(0.4, 0, 1, 1); -} \ No newline at end of file +} + +.with-info-icon { + display: inline-flex; + align-items: center; + gap: 0.25rem; +} + +.info-icon { + display: inline-flex; + justify-content: center; + align-items: center; + font-family: serif; + font-size: 0.7rem; + background-color: var(--primary-color); + color: white; + border-radius: 50%; + cursor: pointer; + width: 18px; + height: 18px; + line-height: 16px; + margin: 0 0rem; + position: relative; + transition: all 0.2s ease; +} + +.tooltip { + visibility: hidden; + position: absolute; + background-color: var(--primary-color); + font-weight: normal; + text-align: left; + border-radius: 6px; + padding: 10px; + /* font-size: 0.9em; */ + line-height: 1.4; + bottom: 100%; + margin-bottom: 10px; + opacity: 0; + transition: opacity 0.3s, visibility 0.3s; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); + pointer-events: none; + white-space: normal; + word-wrap: break-word; + font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; + width: max-content; + max-width: calc(100% + 200px); + z-index: 5000 !important; +} + +/* Tooltip positioning variants */ +.tooltip-right { + left: 0px; +} + +.tooltip-center { + left: 50%; + transform: translateX(-50%); +} + +.tooltip-left { + right: 0px; + left: auto; +} + +.tooltip-bottom-center { + top: 100%; + bottom: auto; + left: auto; + transform: translateX(-50%); + margin-bottom: 0; + margin-top: 10px; +} + +.tooltip-center-center { + bottom: -500px; + left: 30%; + margin-bottom: 0; + margin-top: 10px; +} + +/* Tooltip arrow */ +/* .tooltip::after { + content: ""; + position: absolute; + top: 100%; + left: 50%; + margin-left: -5px; + border-width: 5px; + border-style: solid; + border-color: var(--primary-color) transparent transparent transparent; +} */ + +/* Show tooltip when active */ +.info-icon.active .tooltip { + visibility: visible; + opacity: 1; + overflow: scroll; +} + +/* Responsive table + ========================================================================== */ +/* Phone landscape and smaller */ +@media (max-width: 959px) { + .uk-table-responsive, + .uk-table-responsive tbody, + .uk-table-responsive th, + .uk-table-responsive td, + .uk-table-responsive tr { + display: block; + } + .uk-table-responsive thead { + display: none; + } + .uk-table-responsive th, + .uk-table-responsive td { + width: auto !important; + max-width: none !important; + min-width: 0 !important; + overflow: visible !important; + white-space: normal !important; + } + .uk-table-responsive th:not(:first-child):not(.uk-table-link), + .uk-table-responsive td:not(:first-child):not(.uk-table-link), + .uk-table-responsive .uk-table-link:not(:first-child) > a { + padding-top: 5px !important; + } + .uk-table-responsive th:not(:last-child):not(.uk-table-link), + .uk-table-responsive td:not(:last-child):not(.uk-table-link), + .uk-table-responsive .uk-table-link:not(:last-child) > a { + padding-bottom: 5px !important; + } + .uk-table-justify.uk-table-responsive th, + .uk-table-justify.uk-table-responsive td { + padding-left: 0; + padding-right: 0; + } + + .uk-tabs-container .tabs { + display: grid; + grid-template-columns: repeat(4, 1fr); + align-content: center; + width: 100%; + } + + .tab, + .tab-button { + display: inline-block; + width: 100%; + } +} + +@media (max-width: 700px) { + .uk-tabs-container .tabs { + grid-template-columns: repeat(3, 1fr); + } +} + +@media (max-width: 500px) { + .uk-tabs-container .tabs { + grid-template-columns: repeat(2, 1fr); + } +} + +/* Shift the long AAP isoniazid tooltip in the LTBI table slightly right + so its content is not clipped. Targets only this tooltip on table_5 + and does not affect other tooltips. + This was done to solve the problem on the tooltip that was causing the text to be blurred by the background. + so the possitioning of the tooltip was changed to the left and the css below was added so that the pop up doesnt get clipped by the margin + */ +#table_5_dosages_for_recommended_lbti_treatment_regimens + .info-icon[data-tooltip*="American Academy of Pediatrics recommends an isoniazid dosage of 10 - 15 mg/kg"] + .tooltip { + right: -30px; /* move popup 30px to the right */ +} diff --git a/app/src/main/assets/json/chapter.json b/app/src/main/assets/json/chapter.json index 21c3bd3..877f23f 100644 --- a/app/src/main/assets/json/chapter.json +++ b/app/src/main/assets/json/chapter.json @@ -86,7 +86,7 @@ }, { "chapterId": 18, - "chapterTitle": "Hello and welcome clinical statement", + "chapterTitle": "Hello and Welcome clinical statement", "chapterHomePosition": 0 }, { diff --git a/app/src/main/assets/json/chart.json b/app/src/main/assets/json/chart.json index db8bc8f..d7b5692 100644 --- a/app/src/main/assets/json/chart.json +++ b/app/src/main/assets/json/chart.json @@ -63,87 +63,66 @@ "chartHomePosition": 0 }, { - "id": "table_10_pediatric_dosages_rifampin_in_children_(birth_to_15_years)", + "id": "table_10_antituberculosis_antibiotics_in_adult_patients_with_renal_impairment", "subChapterTitle": "Special Clinical Situations", "subChapterId": 24, - "chartTitle": "Table 10: Pediatric dosages - rifampin in children (birth to 15 years) dose for either daily or twice weekly therapy", + "chartTitle": "Table 10: Antituberculosis Antibiotics in Adult Patients with Renal Impairment", "chartHomePosition": 0 }, { - "id": "table_11_pediatric_dosages_ethambutol_in_children_(birth_to_15_years)", + "id": "table_11_antituberculosis_medications_which_may_be_used_for_patients_who_have_contraindications_to_or_intolerance", "subChapterTitle": "Special Clinical Situations", "subChapterId": 24, - "chartTitle": "Table 11: Pediatric dosages - Ethambutol in children (birth to 15 years)\nEthambutol is available in 100mg and 400 mg tablets", + "chartTitle": "Table 11: Antituberculosis Medications for Patients who have Contraindications to or Intolerance of First Line Agents or require IV Therapy during Acute or Critical Illness", "chartHomePosition": 0 }, { - "id": "table_12_pediatric_dosages_pyrazinamide_in_children_(birth_to_15_years)", + "id": "table_12_clinical_situations_for_which_standard_therapy_cannot_be_given_or_is_not_well_tolerated", "subChapterTitle": "Special Clinical Situations", "subChapterId": 24, - "chartTitle": "Table 12: Pediatric Dosages - Pyrazinamide in children (birth to 15 years)\nPyrazinamide is available in 500 mg tablets which are scored and can be cut in ½.", + "chartTitle": "Table 12: Clinical Situations for which Standard Therapy cannot be given or is not well-tolerated or may not be effective: Potential Alternative Regimens (Dosing and/or Drugs)", "chartHomePosition": 0 }, { - "id": "table_13_antituberculosis_antibiotics_in_adult_patients_with_renal_impairment", + "id": "table_13_when_to_start_hiv_therapy", "subChapterTitle": "Special Clinical Situations", "subChapterId": 24, - "chartTitle": "Table 13: Antituberculosis antibiotics in adult patients with renal impairment", + "chartTitle": "Table 13: When to Start HIV Therapy", "chartHomePosition": 0 }, { - "id": "table_14_antituberculosis_medications_which_may_be_used_for_patients_who_have_contraindications_to_or_intolerance", + "id": "table_14_what_to_start_choice_of_tb_therapy_and_antiretroviral_therapy_(art)_when_treating_co-infected_patients", "subChapterTitle": "Special Clinical Situations", "subChapterId": 24, - "chartTitle": "Table 14: Antituberculosis medications which may be used for patients who have contraindications to or intolerance of first line agents or who require IV therapy during acute or critical illness", + "chartTitle": "Table 14: What to start: Choice of TB Therapy and Antiretroviral Therapy (ART) when treating Co-infected Patients", "chartHomePosition": 0 }, { - "id": "table_15_clinical_situations_for_which_standard_therapy_cannot_be_given_or_is_not_well_tolerated", + "id": "table_15_summary_of_recommendations_for_treatment_of_active_tb_disease_in_persons_with_hiv", "subChapterTitle": "Special Clinical Situations", "subChapterId": 24, - "chartTitle": "Table 15: Clinical Situations for which standard therapy cannot be given or is not well- tolerated or may not be effective: Potential Alternative Regimens (Dosing and/or Drugs)", + "chartTitle": "Table 15: Summary of Recommendations for Treatment of Active TB Disease in Persons with HIV", "chartHomePosition": 0 }, { - "id": "table_16_when_to_start_hiv_therapy", + "id": "table_16_guidelines_for_treatment_of_extrapulmonary_tuberculosis", "subChapterTitle": "Antiretroviral Therapy (ART) and Treatment of HIV Seropositive Patients with Active Tuberculosis Disease", "subChapterId": 28, - "chartTitle": "Table 16: HHS Panel Recommendations on treatment of Tuberculosis Disease with HIV co-infection: Timing of Antiretroviral Therapy (ART) Initiation relative to TB treatment", + "chartTitle": "Table 16: Guidelines for Treatment of Extrapulmonary Tuberculosis: Length of Therapy and Adjunctive Use of Corticosteroids\n\n", "chartHomePosition": 0 }, { - "id": "table_17_what_to_start_choice_of_tb_therapy_and_antiretroviral_therapy_(art)_when_treating_co-infected_patients", + "id": "table_17_use_of_anti-tb_medications_in_special_situations_pregnancy_tuberculosis_meningitis_and_renal_failure", "subChapterTitle": "Antiretroviral Therapy (ART) and Treatment of HIV Seropositive Patients with Active Tuberculosis Disease", "subChapterId": 28, - "chartTitle": "Table 17: What to start: Choice of TB therapy and Antiretroviral Therapy (ART) when treating co-infected patients", + "chartTitle": "Table 17: Use of Anti-TB Medications in Special Situations: Pregnancy, Tuberculosis Meningitis, and Renal Failures", "chartHomePosition": 0 }, { - "id": "table_18_dosage_adjustments_for_art_and_rifamycins_when_used_in_combination", - "subChapterTitle": "Antiretroviral Therapy (ART) and Treatment of HIV Seropositive Patients with Active Tuberculosis Disease", - "subChapterId": 28, - "chartTitle": "Table 18: Dosage Adjustments for ART and Rifamycins when used in Combination", - "chartHomePosition": 0 - }, - { - "id": "table_19_guidelines_for_treatment_of_extrapulmonary_tuberculosis", - "subChapterTitle": "Adjunctive Use of Corticosteroid Therapy (Table 19)", - "subChapterId": 31, - "chartTitle": "Table 19: Guidelines for Treatment of Extrapulmonary* Tuberculosis: Length of therapy and Adjunctive Use of Corticosteroids", - "chartHomePosition": 0 - }, - { - "id": "table_20_use_of_anti-tb_medications_in_special_situations_pregnancy_tuberculosis_meningitis_and_renal_failure", - "subChapterTitle": "Treatment of Active TB in Pregnancy", - "subChapterId": 33, - "chartTitle": "Table 20: Use of Anti-TB Medications in Special Situations: Pregnancy, Tuberculous Meningitis and Renal Failure", - "chartHomePosition": 0 - }, - { - "id": "table_21_grady_hospital_tb_isolation_policy", - "subChapterTitle": "Surveillance for Health Care Workers", - "subChapterId": 40, - "chartTitle": "Table 21: Grady Hospital TB Isolation Policy", + "id": "table_18_grady_hospital_tb_isolation_policy", + "subChapterTitle": "Adjunctive Use of Corticosteroid Therapy", + "subChapterId": 32, + "chartTitle": "Table 18: Grady Hospital TB Isolation Policy", "chartHomePosition": 0 } ] diff --git a/app/src/main/assets/pages/10_tb_infection_control_hospital_isolation_procedures.html b/app/src/main/assets/pages/10_tb_infection_control_hospital_isolation_procedures.html index 183650b..45f7c40 100644 --- a/app/src/main/assets/pages/10_tb_infection_control_hospital_isolation_procedures.html +++ b/app/src/main/assets/pages/10_tb_infection_control_hospital_isolation_procedures.html @@ -19,7 +19,7 @@
X. TB Infection Control: Hospital Isolation Procedures
X. TB Infection Control: Hospital Isolation Procedures
X. TB Infection Control: Hospital Isolation Procedures
| Grady Hospital TB Isolation Policy | -|||
|---|---|---|---|
| Criteria for Isolation | -Length of Isolation | +Criteria for Isolation | +Length of Isolation |
| 1. Active Pulmonary TB | +Active Pulmonary TB | Duration of hospitalization if less than 4 weeks; if >4 weeks must have clinical response, drug susceptibility data and 2 negative AFB sputum smears | |
| 2. "Rule Out" TB + | "Rule Out" TB Any patient who has sputum for AFB collected or pulmonary TB is in the differential diagnosis. | -Until 2 sputum AFB smears are negative - | +Until 2 sputum AFB smears are negative |
| 3. HIV+ patient admitted with abnormal CXR | +Person living with HIV admitted with abnormal CXR | Until 2 sputum AFB smears are negative | |