1
1
document . addEventListener ( "DOMContentLoaded" , ( ) => {
2
+ // Handle current problem display
2
3
browser . tabs . query ( { active : true , currentWindow : true } ) . then ( ( tabs ) => {
3
4
const tab = tabs [ 0 ] ;
4
-
5
5
const url = new URL ( tab . url ) ;
6
6
const pathParts = url . pathname . split ( "/" ) . filter ( Boolean ) ;
7
7
const slug = pathParts [ 1 ] || null ;
8
+ const container = document . getElementById ( "popupContent" ) ;
8
9
if ( ! slug ) {
9
- document . getElementById ( "popupContent" ) . innerHTML = "<p>To track a problem, please visit a leetcode problem page</p>" ;
10
+ container . innerHTML = "<p>To track a problem, please visit a leetcode problem page</p>" ;
10
11
return ;
11
12
}
12
-
13
- const container = document . getElementById ( "popupContent" ) ;
14
-
15
13
browser . storage . local . get ( slug ) . then ( ( result ) => {
16
14
let data = result [ slug ] ;
17
15
if ( data ) {
18
16
renderCurrentProblem ( data ) ;
19
17
} else {
20
-
21
18
browser . runtime
22
19
. sendMessage ( { type : "GET_PROBLEM_DATA" , slug } )
23
20
. then ( ( data ) => {
@@ -33,7 +30,6 @@ document.addEventListener("DOMContentLoaded", () => {
33
30
} ) ;
34
31
}
35
32
} ) ;
36
-
37
33
function renderCurrentProblem ( data ) {
38
34
container . innerHTML = "" ;
39
35
const titleEl = document . createElement ( "h3" ) ;
@@ -48,8 +44,6 @@ document.addEventListener("DOMContentLoaded", () => {
48
44
container . appendChild ( titleEl ) ;
49
45
container . appendChild ( diffEl ) ;
50
46
container . appendChild ( statusEl ) ;
51
-
52
- // Listen for problem solved message
53
47
browser . runtime . onMessage . addListener ( ( msg ) => {
54
48
if ( msg . type === "PROBLEM_SOLVED" && msg . slug === data . slug ) {
55
49
const statusEl = document . getElementById ( "status" ) ;
@@ -58,11 +52,9 @@ document.addEventListener("DOMContentLoaded", () => {
58
52
} ) ;
59
53
}
60
54
} ) ;
61
- } ) ;
62
55
63
- document . addEventListener ( "DOMContentLoaded" , ( ) => {
56
+ // Handle solved problems list and tag filter
64
57
browser . storage . local . get ( null ) . then ( ( allData ) => {
65
- // Filter out invalid/undefined problems before displaying
66
58
const problems = Object . values ( allData ) . filter (
67
59
( p ) =>
68
60
p &&
@@ -74,21 +66,16 @@ document.addEventListener("DOMContentLoaded", () => {
74
66
p . difficulty !== "Unknown Difficulty" &&
75
67
p . status === "Solved"
76
68
) ;
77
-
78
69
problems . sort ( ( a , b ) => ( b . solvedAt || 0 ) - ( a . solvedAt || 0 ) ) ;
79
-
80
70
const tagSet = new Set ( ) ;
81
71
problems . forEach ( ( p ) => {
82
72
if ( Array . isArray ( p . tags ) ) {
83
73
p . tags . forEach ( ( tag ) => tagSet . add ( tag ) ) ;
84
74
}
85
75
} ) ;
86
76
const tags = Array . from ( tagSet ) ;
87
-
88
- // Populate tag filter dropdown
89
77
const tagFilter = document . getElementById ( "tagFilter" ) ;
90
78
if ( tagFilter ) {
91
- // Remove old options except 'All'
92
79
tagFilter . innerHTML = '<option value="all">All</option>' ;
93
80
if ( tags . length > 0 ) {
94
81
tags . forEach ( ( tag ) => {
@@ -104,7 +91,6 @@ document.addEventListener("DOMContentLoaded", () => {
104
91
tagFilter . appendChild ( opt ) ;
105
92
}
106
93
}
107
-
108
94
function renderProblems ( ) {
109
95
const list = document . getElementById ( "solvedList" ) ;
110
96
list . innerHTML = "" ;
@@ -125,16 +111,13 @@ document.addEventListener("DOMContentLoaded", () => {
125
111
const difficultyClass = problem . difficulty
126
112
? problem . difficulty . toLowerCase ( )
127
113
: "" ;
128
-
129
114
const link = document . createElement ( "a" ) ;
130
115
link . href = problem . url ;
131
116
link . target = "_blank" ;
132
117
link . textContent = problem . title ;
133
-
134
118
const diffSpan = document . createElement ( "span" ) ;
135
119
diffSpan . className = `difficulty ${ difficultyClass } ` ;
136
120
diffSpan . textContent = problem . difficulty ;
137
-
138
121
const tagsSpan = document . createElement ( "span" ) ;
139
122
tagsSpan . style . fontSize = "0.85em" ;
140
123
tagsSpan . style . color =
@@ -144,20 +127,19 @@ document.addEventListener("DOMContentLoaded", () => {
144
127
problem . tags && problem . tags . length > 0
145
128
? `[${ problem . tags . join ( ", " ) } ]`
146
129
: "[No tags]" ;
147
-
148
130
item . appendChild ( link ) ;
149
131
item . appendChild ( diffSpan ) ;
150
132
item . appendChild ( tagsSpan ) ;
151
133
list . appendChild ( item ) ;
152
134
} ) ;
153
135
}
154
-
155
136
if ( tagFilter ) {
156
137
tagFilter . addEventListener ( "change" , renderProblems ) ;
157
138
}
158
139
renderProblems ( ) ;
159
140
} ) ;
160
141
142
+ // Handle view all link
161
143
const viewAllLink = document . getElementById ( "viewAllLink" ) ;
162
144
if ( viewAllLink ) {
163
145
viewAllLink . addEventListener ( "click" , ( e ) => {
@@ -169,9 +151,8 @@ document.addEventListener("DOMContentLoaded", () => {
169
151
}
170
152
} ) ;
171
153
}
172
- } ) ;
173
154
174
- document . addEventListener ( "DOMContentLoaded" , ( ) => {
155
+ // Handle options/settings button
175
156
const optionsBtn = document . getElementById ( "optionsBtn" ) ;
176
157
if ( optionsBtn ) {
177
158
optionsBtn . addEventListener ( "click" , ( ) => {
0 commit comments