Skip to content

Commit 49d678c

Browse files
committed
macOS code
1 parent 7a02e03 commit 49d678c

File tree

100 files changed

+35356
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+35356
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>NSExtension</key>
6+
<dict>
7+
<key>NSExtensionPointIdentifier</key>
8+
<string>com.apple.Safari.web-extension</string>
9+
<key>NSExtensionPrincipalClass</key>
10+
<string>$(PRODUCT_MODULE_NAME).SafariWebExtensionHandler</string>
11+
<key>SFSafariPageProperties</key>
12+
<dict>
13+
<key>Allowed Domains</key>
14+
<array>
15+
<string>ecf.*</string>
16+
<string>ecf-train.*</string>
17+
<string>pacer.*</string>
18+
<string>*.uscourts.gov</string>
19+
</array>
20+
<key>Level</key>
21+
<string>Some</string>
22+
</dict>
23+
</dict>
24+
</dict>
25+
</plist>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>com.apple.security.app-sandbox</key>
6+
<true/>
7+
<key>com.apple.security.files.user-selected.read-only</key>
8+
<true/>
9+
</dict>
10+
</plist>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
2+
if (request.message === 'content_script_status') {
3+
sendResponse({ status: 'loaded' });
4+
}
5+
});
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
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

Comments
 (0)