├── .github
└── workflows
│ ├── Auto_Comment.yml
│ └── main.yml
├── README.md
├── assets
├── icon_128.png
├── image.png
├── loading.png
└── logoauto.png
├── background_script
├── api.js
├── apicallpack.json
├── background.js
└── helpui.js
├── content
└── content.js
├── manifest.json
├── popup
├── active_page.js
├── popup.css
├── popup.html
├── popup.js
└── setting_table.css
├── privacy-policy.txt
├── readme_en
└── README.md
└── readme_vn
├── README.md
├── img.png
├── img_1.png
├── img_2.png
├── img_3.png
├── img_4.png
├── img_5.png
├── img_6.png
├── img_7.png
└── img_8.png
/.github/workflows/Auto_Comment.yml:
--------------------------------------------------------------------------------
1 | name: Auto Comment
2 | on: [issues, pull_request]
3 | jobs:
4 | run:
5 | runs-on: ubuntu-latest
6 | steps:
7 | - uses: wow-actions/auto-comment@v1
8 | with:
9 | GITHUB_TOKEN: ${{ secrets.TOKEN_Assignees }}
10 | issuesOpened: |
11 | 👋 @{{ author }}
12 | Thank you for raising an issue. We will will investigate into the matter and get back to you as soon as possible.
13 | Please make sure you have given us as much context as possible.
14 |
15 | pullRequestOpened: |
16 | 👋 @{{ author }}
17 | Thank you for raising your pull request.
18 | Please make sure you have followed our contributing guidelines. We will review it as soon as possible
19 | - name: 'Auto-assign issue'
20 | uses: pozil/auto-assign-issue@v1
21 | with:
22 | assignees: Carl-Johnsons
23 | numOfAssignee: 1
24 | allowSelfAssign: false
25 |
--------------------------------------------------------------------------------
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # autonext
2 | #### [NEW: Đã cập nhật phù hợp Edunext mới ]
3 | - This automatic grading tool on edunext is intended for fpt university students
4 | - Công cụ chấm điểm tự động trên edunext này dành cho sinh viên fbip
5 |
6 | > The tool is now available on the Chrome Store:
7 | > - https://chrome.google.com/webstore/detail/autonext/boflhmepcnacopclkkedcgoemjglankf?hl=en
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | https://github.com/khengyun/autonext/assets/78076796/fdf435f4-d5c8-49d0-8f12-4bd5f14d9475
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | # User Manual
26 |
27 | | 1. [Hướng Dẫn Sử Dụng](https://github.com/khengyun/nextauto/tree/main/readme_vn#readme) |
28 | |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
29 | | 2. **[User Manual](https://github.com/khengyun/nextauto/tree/main/readme_vn#readme)** |
30 | | **Feature [ (Latest)](https://github.com/khengyun/autonext/releases/latest) **
- Presentation Grading
- Group Members Grading |
31 |
32 | # License
33 | MIT © [khengyun](https://github.com/khengyun)
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/assets/icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/khengyun/autonext/71d1b33aedd69c9523055d43d8fd3d75dab56c46/assets/icon_128.png
--------------------------------------------------------------------------------
/assets/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/khengyun/autonext/71d1b33aedd69c9523055d43d8fd3d75dab56c46/assets/image.png
--------------------------------------------------------------------------------
/assets/loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/khengyun/autonext/71d1b33aedd69c9523055d43d8fd3d75dab56c46/assets/loading.png
--------------------------------------------------------------------------------
/assets/logoauto.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/khengyun/autonext/71d1b33aedd69c9523055d43d8fd3d75dab56c46/assets/logoauto.png
--------------------------------------------------------------------------------
/background_script/api.js:
--------------------------------------------------------------------------------
1 | var TOKEN = ""
2 | var PORT = 8443;
3 | var NEW_PORT = ""
4 | var USER_INFOR = {};
5 | var USER_SUBJECTS = [];
6 | var USER_CLASS = [];
7 | var USER_COURSE = [];
8 | var API = {};
9 |
10 |
11 | function post_api(input_get_data) {
12 | return new Promise((resolve, reject) => {
13 | const url = input_get_data.url;
14 | const options = {
15 | method: "POST",
16 | headers: {
17 | "Content-Type": "application/json",
18 | "Authorization": `${TOKEN}`,
19 | },
20 | body: input_get_data.body ? JSON.stringify(input_get_data.body) : null,
21 | };
22 |
23 | fetch(url, options)
24 | .then((response) => {
25 | if (!response.ok) {
26 | throw new Error("Network response was not ok");
27 | }
28 | return response.json();
29 | })
30 | .then((data) => {
31 | resolve(data);
32 | })
33 | .catch((error) => {
34 | console.error("There was a problem with the fetch operation:", error);
35 | reject(error);
36 | });
37 | });
38 | }
39 |
40 |
41 |
42 | function get_api(input_get_data) {
43 | return new Promise((resolve, reject) => {
44 |
45 | var myHeaders = new Headers();
46 | myHeaders.append("Content-Type", "application/json");
47 | myHeaders.append("Authorization", `${TOKEN}`);
48 | var requestOptions = {
49 | method: 'GET',
50 | headers: myHeaders,
51 | redirect: 'follow'
52 | };
53 | fetch(input_get_data.url, requestOptions)
54 | .then(response => {
55 | if (!response.ok) {
56 | throw new Error(`Error when load ${input_get_data.url}`);
57 | }
58 | return response.json();
59 | })
60 | .then(data => {
61 | resolve(data);
62 | })
63 | .catch(error => {
64 | reject(`Error when load ${input_get_data.url}`);
65 | });
66 | });
67 | }
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/background_script/apicallpack.json:
--------------------------------------------------------------------------------
1 | {
2 | "token_check": "https://fugw-edunext.fpt.edu.vn/api/auth/token",
3 | "get_grade": "https://fugw-edunext.fpt.edu.vn:8443/api/v1/grade/get-grade",
4 | "grade_teammates": "https://fugw-edunext.fpt.edu.vn:8443/api/v1/grade/grade-teammates",
5 | "list_group": "https://fugw-edunext.fpt.edu.vn:8443/api/v1/group/list-group?classroomSessionId=",
6 | "course_detail": [
7 | "https://fugw-edunext.fpt.edu.vn:8443/api/v1/course/course-detail?id=",
8 | "¤tPage=1&pageSize=100&statusClickAll=false"
9 | ],
10 | "class_info": "https://fugw-edunext.fpt.edu.vn:8443/api/v1/class/class-info?id=",
11 | "semester": [
12 | "https://fugw-edunext.fpt.edu.vn:8443/api/v1/class/home/student?id=",
13 | "&semesterName="
14 | ],
15 | "round": "https://fugw-edunext.fpt.edu.vn:8443/api/v1/round/get?privateCqId=",
16 | "grading_group": "https://fugw-edunext.fpt.edu.vn:8443/api/v1/grade/grading-group"
17 | }
--------------------------------------------------------------------------------
/background_script/background.js:
--------------------------------------------------------------------------------
1 | console.log("background.js");
2 | importScripts("api.js");
3 | importScripts("helpui.js");
4 | update_api();
5 |
6 | function get_grade_group(params) {
7 | privateCqId = params.privateCqId;
8 | classroomSessionId = params.classroomSessionId;
9 | roundId = params.roundId;
10 | presentGroupId = params.presentGroupId;
11 | presentGroupName = params.presentGroupName;
12 | reviewGroupId = params.reviewGroupId;
13 | reviewGroupName = params.reviewGroupName;
14 |
15 | const listgroup = post_api({
16 | url: `${API.list_group}${classroomSessionId}`,
17 | });
18 |
19 | // Handle the response from the API.
20 | listgroup
21 | .then((groups) => {
22 | user_group = group_have_user(groups);
23 | teamlist = user_group.listStudentByGroups;
24 | team_classroomSessionId = user_group.classroomSessionId;
25 | team_groupId = user_group.groupId;
26 |
27 | post_present = post_api({
28 | url: `${API.grading_group}`,
29 | body: format_grade_present({
30 | classroomSessionId: team_classroomSessionId,
31 | roundId: roundId,
32 | presentGroupId: presentGroupId,
33 | privateCqId: privateCqId,
34 | }),
35 | });
36 | post_present
37 | .then((data) => {
38 | console.log(data);
39 | })
40 | .catch((e) => {
41 | console.log(e);
42 | });
43 | })
44 | .catch((e) => {
45 | console.log({
46 | error: `${e}`,
47 | message: `${API.list_group}${course.classroomSessionId}`,
48 | });
49 | });
50 |
51 | // ans = post_api({
52 | // url: `https://fugw-edunext.fpt.edu.vn:8443/api/v1/grade/get-grade-group`,
53 | // body: {
54 | // classroomSessionId: classroomSessionId,
55 | // privateCqId: privateCqId,
56 | // roundId: roundId,
57 | // }
58 | // })
59 | // ans.then((data) => {
60 |
61 | // })
62 |
63 | // console.log(privateCqId, classroomSessionId, roundId, presentGroupId, presentGroupName, reviewGroupId, reviewGroupName)
64 | }
65 |
66 | function get_round_for_grading(params) {
67 | ans = get_api({
68 | url: `${API.round}${params}`,
69 | });
70 | ans
71 | .then((data) => {
72 | // console.log(data.datacqDetail)
73 | console.log(data.data);
74 | data.data.forEach((datum) => {
75 | get_grade_group(datum);
76 | });
77 |
78 | })
79 | .catch((e) => {
80 | console.log(e);
81 | });
82 | }
83 |
84 | function grade_teammates(groups, privateCqId, classroomSessionId, groupId) {
85 | console.log("groupsooo: ", groups);
86 | // console.log(params);
87 | const ans = post_api({
88 | url: `${API.grade_teammates}`,
89 | body: {
90 | gradeTeammatesList: format_grade_teammates(
91 | groups,
92 | privateCqId,
93 | classroomSessionId,
94 | groupId
95 | ),
96 | },
97 | });
98 | ans
99 | .then((data) => {})
100 | .catch((e) => {
101 | console.log("catch: ", {
102 | gradeTeammatesList: format_grade_teammates(
103 | groups,
104 | privateCqId,
105 | classroomSessionId,
106 | groupId
107 | ),
108 | });
109 | console.log({
110 | error: `${e}`,
111 | message: `${API.grade_teammates}`,
112 | });
113 | });
114 | }
115 |
116 | function get_grade(params, groups) {
117 | // param = {"privateCqId":privateCqId,"sessionId":sessionId,"groupId":groupID}
118 | privateCqId = params.privateCqId;
119 | sessionId = params.sessionId;
120 | groupId = params.groupId;
121 | console.log("get_grade: ", groups, params);
122 | grade_teammates(groups, privateCqId, sessionId, groupId);
123 | get_round_for_grading(privateCqId);
124 | }
125 |
126 | // This function lists all the groups in a classroom.
127 | // Iterate over all the courses in the USER_COURSE array.
128 | function list_group(params) {
129 | console.log("some thing here");
130 | // Get the current course.
131 | const element = params;
132 |
133 | // Iterate over all the courses in the current course.
134 | for (let j = 0; j < element.courseList.length; j++) {
135 | // Get the current course.
136 | var course = element.courseList[j];
137 |
138 | // Get the classroom session ID for the current course.
139 | classroomSessionId = course.classroomSessionId;
140 |
141 | // Iterate over all the questions in the current course.
142 | for (let k = 0; k < course.questions.length; k++) {
143 | // console.log(element2.questions[k]);
144 | const privateCqId = course.questions[k].privateCqId;
145 | const sessionId = course.questions[k].sessionId;
146 |
147 | // Post a request to the API to get the list of groups for the current course.
148 | const ans = post_api({
149 | url: `${API.list_group}${course.classroomSessionId}`,
150 | });
151 |
152 | // Handle the response from the API.
153 | ans
154 | .then((groups) => {
155 | get_grade(
156 | {
157 | privateCqId: privateCqId,
158 | sessionId: sessionId,
159 | groupId: 12345678,
160 | },
161 | groups
162 | );
163 |
164 | // Iterate over the groups in the response.
165 | })
166 | .then(() => {})
167 | .catch((e) => {
168 | console.log({
169 | error: `${e}`,
170 | message: `${API.list_group}${course.classroomSessionId}`,
171 | });
172 | });
173 | }
174 | }
175 | }
176 |
177 | function course_detail(params) {
178 | //load course detail
179 | for (let i = 0; i < USER_CLASS.length; i++) {
180 | const element = USER_CLASS[i];
181 | const ans = get_api({
182 | url: `${API.course_detail[0]}${element.id}${API.course_detail[1]}`,
183 | });
184 | ans
185 | .then((data) => {
186 | // console.log(data.data)
187 | console.log(
188 | USER_CLASS.length >= USER_COURSE.length,
189 | check_course_list(USER_CLASS[i].id)
190 | );
191 | if (
192 | USER_CLASS.length >= USER_COURSE.length &&
193 | check_course_list(USER_CLASS[i].id) == false
194 | ) {
195 | let format = {
196 | className: USER_CLASS[i].className,
197 | id: USER_CLASS[i].id,
198 | courseCode: USER_CLASS[i].courseCode,
199 | courseTitle: USER_CLASS[i].courseTitle,
200 | courseId: USER_CLASS[i].courseId,
201 | courseList: question_format(data.data),
202 | };
203 | USER_COURSE.push(format);
204 | }
205 | // console.log(USER_COURSE);
206 | })
207 | .then(() => {
208 | // question_detail()
209 | console.log("log here");
210 | console.log(USER_COURSE);
211 | list_group(USER_COURSE[i]);
212 | console.log("haha");
213 | })
214 | .catch((e) => {
215 | console.log({
216 | error: `${e}`,
217 | message: `${API.course_detail[0]}${element.id}${API.course_detail[1]}`,
218 | });
219 | });
220 | }
221 | }
222 |
223 | function class_infor() {
224 | for (let i = 0; i < USER_SUBJECTS.length; i++) {
225 | const element = USER_SUBJECTS[i];
226 | const ans = get_api({
227 | url: `${API.class_info}${element.classId}`,
228 | });
229 | ans
230 | .then((data) => {
231 | // console.log(data.data)
232 | if (USER_CLASS.length <= 2) {
233 | USER_CLASS.push(data.data);
234 | course_detail();
235 | }
236 | })
237 | .catch((e) => {
238 | console.log({
239 | error: `${e}`,
240 | message: `${API.class_info}${element.classId}`,
241 | });
242 | });
243 | }
244 | }
245 |
246 | function subjects_in_the_semester(params) {
247 | const ans = get_api({
248 | url: `${API.semester[0]}${USER_INFOR.userId}${API.semester[1]}${params}`,
249 | });
250 | ans
251 | .then((data) => {
252 | USER_SUBJECTS = data;
253 | // console.log(USER_SUBJECTS)
254 | class_infor();
255 | })
256 | .catch((e) => {
257 | console.log({
258 | error: `${e}`,
259 | message: `${API.semester[0]}${USER_INFOR.userId}${API.semester[1]}${params}`,
260 | });
261 | });
262 | }
263 |
264 | chrome.webRequest.onBeforeSendHeaders.addListener(
265 | function (details) {
266 | // initiator
267 | if (details.initiator == "https://fu-edunext.fpt.edu.vn") {
268 | const token = details.requestHeaders[2].value;
269 | if (token.includes("Bearer")) {
270 | TOKEN = token;
271 | // console.log(TOKEN);
272 | }
273 | //get token infor
274 | let ans = post_api(details);
275 | ans
276 | .then((data) => {
277 | USER_INFOR = data.data;
278 | console.log(USER_INFOR);
279 |
280 | subjects_in_the_semester("DEFAULT");
281 | //background
282 |
283 | // send mess from background script to popup script
284 | messtopopup({ type: "background", message: USER_INFOR });
285 | //send mess from background script to content script
286 | messtocontent(details, token);
287 | })
288 | .catch((e) => {
289 | console.log(e.message);
290 | });
291 | }
292 | },
293 | {
294 | urls: [
295 | `https://fugw-edunext.fpt.edu.vn/api/auth/token`,
296 | `https://fugw-edunext.fpt.edu.vn:8443/api/auth/token`,
297 | ],
298 | },
299 | ["requestHeaders"]
300 | );
301 |
--------------------------------------------------------------------------------
/background_script/helpui.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | function format_grade_present(params){
4 |
5 | return {
6 | classroomSessionId: params.classroomSessionId,
7 | roundId: params.roundId,
8 | privateCqId: params.privateCqId,
9 | bonusPoint : 0,
10 | presentingGroupDTO:{
11 | keepTime: 5,
12 | meetRequirement: 5,
13 | presentations: 5,
14 | goodInformation: 5,
15 | presentGroupId: params.presentGroupId
16 | },
17 | reviewingGroupDTO: null
18 |
19 | }
20 |
21 | }
22 |
23 |
24 | function check_course_list(params) {
25 | var boolean = false;
26 |
27 | USER_COURSE.forEach((element) => {
28 | if (element.id == params) {
29 | boolean = true;
30 | }
31 | });
32 | return boolean;
33 | }
34 |
35 | // convert questions to json
36 | function question_format(params) {
37 | for (let i = 0; i < params.length; i++) {
38 | const element = params[i];
39 | params[i].questions = JSON.parse(element.questions);
40 | }
41 |
42 | return params;
43 | }
44 |
45 | function check_group_user(params) {
46 | var boolean = false;
47 | params.listStudentByGroups.forEach((element) => {
48 | if (element.id == USER_INFOR.userId) {
49 | boolean = true;
50 | // console.log(params)
51 | }
52 | });
53 | return boolean;
54 | }
55 |
56 | function group_have_user(params) {
57 | var team = [];
58 | params.forEach((group) => {
59 | console.log("group: ", group);
60 |
61 | // return group.listStudentByGroups;
62 | group.listStudentByGroups.forEach((element) => {
63 | if (element.id == USER_INFOR.userId) {
64 | team = group;
65 | console.log(team);
66 | }
67 | });
68 | });
69 |
70 |
71 | return {
72 | listStudentByGroups: team.listStudentByGroups,
73 | classroomSessionId: team.classroomSessionId,
74 | groupId: team.id,
75 | };
76 | }
77 |
78 | function format_grade_teammates(
79 | groups,
80 | privateCqId,
81 | classroomSessionId,
82 | groupId
83 | ) {
84 | // console.log(params);
85 | // console.log(privateCqId, classroomSessionId, groupId);
86 | user_group = group_have_user(groups);
87 | var teamlist = user_group.listStudentByGroups;
88 | var team_classroomSessionId = user_group.classroomSessionId;
89 | var team_groupId = user_group.groupId;
90 | console.log("user_group: ", user_group);
91 | console.log("teamlist: ", teamlist);
92 | console.log("teamlist: ", teamlist.length);
93 |
94 | // var teamlist = params;
95 | var newParams = [];
96 |
97 | for (let index = 0; index < teamlist.length; index++) {
98 | if (teamlist[index].id != USER_INFOR.userId) {
99 | console.log("user_in_teamlist", teamlist[index]);
100 | console.log(privateCqId, classroomSessionId);
101 |
102 | newParams.push({
103 | id: 539319,
104 | hardWorking: 5,
105 | goodKnowledge: 5,
106 | teamWorking: 5,
107 | userIsGraded: teamlist[index].id ? teamlist[index].id : 0,
108 | groupId: team_groupId ? team_groupId : 0,
109 | privateCqId: privateCqId,
110 | classroomSessionId: team_classroomSessionId ? team_classroomSessionId : 0,
111 | userIsGradedId: teamlist[index].id ? teamlist[index].id : 0,
112 | });
113 | }
114 | }
115 |
116 | console.log("newparams: ", newParams);
117 | // console.log("newparams: \n\n\n\n\n\n\n\n\n" , newParams.length);
118 | return newParams;
119 | }
120 |
121 | //call update api from github
122 | function update_api() {
123 | const ans = get_api({
124 | url: "https://raw.githubusercontent.com/khengyun/autonext/main/background_script/apicallpack.json",
125 | });
126 | ans.then((data) => {
127 | API = data;
128 | console.log(API);
129 | });
130 | }
131 |
132 | // declare mess to post to popup script
133 | function messtopopup(params) {
134 | chrome.runtime.sendMessage({
135 | message: params.message,
136 | type: params.type,
137 | });
138 | }
139 | // declare mess to post to popup script
140 | function messtocontent(params, token) {
141 | chrome.tabs.sendMessage(params.tabId, {
142 | token: token,
143 | details: params,
144 | });
145 | }
146 |
147 | // background script listen message from popup script and content script
148 | chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
149 | // console.log(request);
150 | if (request.type == "content_to_background") {
151 | const ans = post_api({
152 | url: `https://fugw-edunext.fpt.edu.vn/api/auth/token`,
153 | });
154 | ans.then((data) => {
155 | // console.log(data)
156 | messtopopup({ type: "background", message: data.data });
157 | });
158 | }
159 | if (request.type == "popup_to_background") {
160 | const ans = post_api({
161 | url: `https://fugw-edunext.fpt.edu.vn/api/auth/token`,
162 | });
163 | ans.then((data) => {
164 | // console.log(data)
165 | messtopopup({ type: "background", message: data.data });
166 | });
167 | }
168 | });
169 |
--------------------------------------------------------------------------------
/content/content.js:
--------------------------------------------------------------------------------
1 | console.log("content script is running")
2 | // Listen for messages from the content script
3 |
4 | function sendmess(params) {
5 | console.log(params)
6 | chrome.runtime.sendMessage(
7 | params
8 | )}
9 |
10 |
11 |
12 | function logMessage(message) {
13 | console.log(message)
14 | token = localStorage.getItem("token")
15 | console.log(`this is token: ${token}`)
16 | sendmess({type: "content_to_background", data: token})
17 | }
18 |
19 | chrome.runtime.onMessage.addListener(
20 | (request, sender, sendResponse) => {
21 | logMessage(request)
22 | }
23 | );
--------------------------------------------------------------------------------
/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "khengyun",
3 | "short_name": "AutoNext",
4 | "name": "AutoNext",
5 | "description": "This automatic grading tool on edunext\n__Hovilo__",
6 | "icons": {
7 | "128": "assets/logoauto.png"
8 | },
9 | "version": "3.5.3",
10 | "manifest_version": 3,
11 | "permissions": [
12 | "webRequest",
13 | "storage",
14 | "tabs",
15 | "scripting",
16 | "https://*.fpt.edu.vn/*"
17 | ],
18 | "host_permissions": ["https://*.fpt.edu.vn/*"],
19 | "web_accessible_resources": [
20 | {
21 | "resources": [
22 | "background_script/*.js",
23 | "assets/*.png",
24 | "popup/*.js",
25 | "popup/*.html",
26 | "popup/*.css"
27 | ],
28 | "matches": ["https://*.fpt.edu.vn/*"],
29 | "use_dynamic_url": true
30 | }
31 | ],
32 | "background": {
33 | "service_worker": "background_script/background.js"
34 | },
35 | "content_scripts": [
36 | {
37 | "matches": ["*://*/*"],
38 | "js": ["content/content.js"],
39 | "all_frames": true,
40 | "run_at": "document_start"
41 | }
42 | ],
43 | "action": {
44 | "default_icon": {
45 | "16": "assets/logoauto.png",
46 | "24": "assets/logoauto.png",
47 | "32": "assets/logoauto.png",
48 | "48": "assets/logoauto.png",
49 | "128": "assets/logoauto.png",
50 | "512": "assets/logoauto.png"
51 | },
52 | "default_title": "AutoNext",
53 | "default_popup": "popup/popup.html"
54 | },
55 | "content_security_policy": {
56 | "extension_pages": "script-src 'self' ; object-src 'self'",
57 | "sandbox": "sandbox allow-scripts; script-src 'self' 'https://apis.google.com/' 'https://www.gstatic.com/' 'https://*.firebaseio.com' 'https://www.googleapis.com' 'https://ajax.googleapis.com'; object-src 'self'"
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/popup/active_page.js:
--------------------------------------------------------------------------------
1 |
2 | function check_version(data) {
3 | let local_version = version
4 | let github_version = data.tag_name.replace('v', '')
5 |
6 | if (local_version !== github_version) {
7 | let download_link = `https://github.com/khengyun/autonext/archive/refs/tags/${data.tag_name}.zip`
8 |
9 | let text = '
Email: ${USER_INFOR.email} 54 | // Name: ${USER_INFOR.name} 55 | // RollNumber: ${USER_INFOR.rollNumber} 56 | //
`; 57 | // } else { 58 | // document.getElementById("container").innerHTML = 'Email: ${USER_INFOR.email} 41 | Name: ${USER_INFOR.name} 42 | RollNumber: ${USER_INFOR.rollNumber} 43 |
`; 44 | } else { 45 | document.getElementById("container").innerHTML = 46 | '