|
| 1 | +// Handles the insertion of the "Create alert" option in the dropdown menu |
| 2 | +const addAlertButtonInRecapAction = (court, pacerCaseId) => { |
| 3 | + let dropdownHeader = document.getElementById('action-button-dropdown-header'); |
| 4 | + if (!dropdownHeader) { |
| 5 | + return; |
| 6 | + } |
| 7 | + let existingAlertButton = document.getElementById('create-alert-button'); |
| 8 | + if (!existingAlertButton) { |
| 9 | + let alertLi = document.createElement('li'); |
| 10 | + alertLi.setAttribute('id', 'create-alert-button'); |
| 11 | + let createAlert = document.createElement('a'); |
| 12 | + |
| 13 | + const url = new URL('https://www.courtlistener.com/alert/docket/new/'); |
| 14 | + url.searchParams.append('pacer_case_id', pacerCaseId); |
| 15 | + url.searchParams.append('court_id', court); |
| 16 | + |
| 17 | + createAlert.href = url.toString(); |
| 18 | + createAlert.innerHTML = 'Create alert'; |
| 19 | + createAlert.setAttribute('target', '_blank'); |
| 20 | + alertLi.appendChild(createAlert); |
| 21 | + dropdownHeader.after(alertLi); |
| 22 | + } |
| 23 | +}; |
| 24 | + |
| 25 | +// Handles the insertion of the "Search this docket" option in the dropdown menu |
| 26 | +const addSearchDocketInRecapAction = (cl_id) => { |
| 27 | + let viewDocketButton = document.getElementById('view-docket-button'); |
| 28 | + if (!viewDocketButton) { |
| 29 | + return; |
| 30 | + } |
| 31 | + let existingSearchButton = document.getElementById('search-docket-button'); |
| 32 | + if (!existingSearchButton) { |
| 33 | + let docketLi = document.createElement('li'); |
| 34 | + docketLi.setAttribute('id', 'search-docket-button'); |
| 35 | + let searchDocket = document.createElement('a'); |
| 36 | + searchDocket.innerHTML = 'Search this Docket'; |
| 37 | + searchDocket.href = `https://www.courtlistener.com/?type=r&q=docket_id%3A${cl_id}`; |
| 38 | + searchDocket.setAttribute('target', '_blank'); |
| 39 | + docketLi.appendChild(searchDocket); |
| 40 | + viewDocketButton.before(docketLi); |
| 41 | + } |
| 42 | +}; |
| 43 | + |
| 44 | +// creates the dropdown menu content |
| 45 | +const recapDropdownMenu = (court, pacerCaseId) => { |
| 46 | + let dropdownWrapper = document.createElement('ul'); |
| 47 | + dropdownWrapper.classList.add('dropdown-menu'); |
| 48 | + |
| 49 | + let groupHeader = document.createElement('h2'); |
| 50 | + groupHeader.classList.add('dropdown-header'); |
| 51 | + groupHeader.setAttribute('id', 'action-button-dropdown-header'); |
| 52 | + groupHeader.innerHTML = 'CourtListener'; |
| 53 | + dropdownWrapper.appendChild(groupHeader); |
| 54 | + |
| 55 | + let viewOnClLi = document.createElement('li'); |
| 56 | + viewOnClLi.setAttribute('id', 'view-docket-button'); |
| 57 | + let viewOnCl = document.createElement('a'); |
| 58 | + viewOnCl.innerHTML = 'View this docket'; |
| 59 | + viewOnCl.href = `https://www.courtlistener.com/recap/gov.uscourts.${court}.${pacerCaseId}/`; |
| 60 | + viewOnCl.setAttribute('target', '_blank'); |
| 61 | + viewOnClLi.appendChild(viewOnCl); |
| 62 | + dropdownWrapper.appendChild(viewOnClLi); |
| 63 | + |
| 64 | + let divider2 = document.createElement('div'); |
| 65 | + divider2.classList.add('recap-dropdown-divider'); |
| 66 | + dropdownWrapper.appendChild(divider2); |
| 67 | + |
| 68 | + let checkLi = document.createElement('li'); |
| 69 | + let checkDoc = document.createElement('a'); |
| 70 | + checkDoc.innerHTML = 'Refresh RECAP Links'; |
| 71 | + checkDoc.setAttribute('href', 'javascript:void(0);'); |
| 72 | + checkDoc.setAttribute('id', 'refresh-recap-links'); |
| 73 | + checkDoc.setAttribute('role', 'button'); |
| 74 | + |
| 75 | + checkDoc.addEventListener('click', () => { |
| 76 | + let links = document.querySelectorAll('.recap-inline, .recap-inline-appellate'); |
| 77 | + links.forEach((link) => { |
| 78 | + link.remove(); |
| 79 | + }); |
| 80 | + let spinner = document.getElementById('recap-button-spinner'); |
| 81 | + if (spinner) { |
| 82 | + spinner.classList.remove('recap-btn-spinner-hidden'); |
| 83 | + } |
| 84 | + getTabIdForContentScript().then((msg) => { |
| 85 | + addRecapInformation(msg); |
| 86 | + }); |
| 87 | + }); |
| 88 | + |
| 89 | + checkLi.appendChild(checkDoc); |
| 90 | + dropdownWrapper.appendChild(checkLi); |
| 91 | + |
| 92 | + return dropdownWrapper; |
| 93 | +}; |
| 94 | + |
| 95 | +// creates a single button with a dropdown toggle menu |
| 96 | +const recapActionsButton = (court, pacerCaseId) => { |
| 97 | + const mainDiv = document.createElement('div'); |
| 98 | + mainDiv.classList.add('btn-group'); |
| 99 | + mainDiv.setAttribute('id', 'recap-action-button'); |
| 100 | + |
| 101 | + const spinner = createRecapSpinner(); |
| 102 | + |
| 103 | + const mainButton = document.createElement('a'); |
| 104 | + mainButton.classList.add('btn', 'btn-primary', 'dropdown-toggle'); |
| 105 | + mainButton.innerHTML = `${spinner.outerHTML} RECAP Actions`; |
| 106 | + mainButton.setAttribute('data-toggle', 'dropdown'); |
| 107 | + mainButton.setAttribute('aria-haspopup', true); |
| 108 | + mainButton.setAttribute('aria-expanded', false); |
| 109 | + |
| 110 | + const caret = document.createElement('span'); |
| 111 | + caret.classList.add('caret'); |
| 112 | + |
| 113 | + hiddenDropdown = recapDropdownMenu(court, pacerCaseId); |
| 114 | + |
| 115 | + mainButton.appendChild(caret); |
| 116 | + mainDiv.appendChild(mainButton); |
| 117 | + mainDiv.appendChild(hiddenDropdown); |
| 118 | + |
| 119 | + return mainDiv; |
| 120 | +}; |
0 commit comments