@xcpcio/core 0.34.1 → 0.35.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +13 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.mjs +13 -3
- package/package.json +2 -2
- package/src/submission-status.ts +5 -0
- package/src/utils/color.ts +11 -2
package/dist/index.cjs
CHANGED
|
@@ -15,8 +15,8 @@ const relativeTime = require('dayjs/plugin/relativeTime');
|
|
|
15
15
|
const _ = require('lodash');
|
|
16
16
|
const XLSX = require('xlsx-js-style');
|
|
17
17
|
const stringWidth = require('string-width');
|
|
18
|
-
const colorDiff = require('color-diff');
|
|
19
18
|
const chroma = require('chroma-js');
|
|
19
|
+
const colorDiff = require('color-diff');
|
|
20
20
|
|
|
21
21
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; }
|
|
22
22
|
|
|
@@ -63,6 +63,9 @@ function stringToSubmissionStatus(status) {
|
|
|
63
63
|
if (["RJ", "INCORRECT", types.SubmissionStatus.REJECTED.toString()].includes(status)) {
|
|
64
64
|
return types.SubmissionStatus.REJECTED;
|
|
65
65
|
}
|
|
66
|
+
if (["NO", types.SubmissionStatus.NO_OUTPUT.toString()].includes(status)) {
|
|
67
|
+
return types.SubmissionStatus.NO_OUTPUT;
|
|
68
|
+
}
|
|
66
69
|
if (["PD", types.SubmissionStatus.PENDING.toString()].includes(status)) {
|
|
67
70
|
return types.SubmissionStatus.PENDING;
|
|
68
71
|
}
|
|
@@ -135,6 +138,7 @@ function isRejected(status) {
|
|
|
135
138
|
types.SubmissionStatus.IDLENESS_LIMIT_EXCEEDED,
|
|
136
139
|
types.SubmissionStatus.WRONG_ANSWER,
|
|
137
140
|
types.SubmissionStatus.REJECTED,
|
|
141
|
+
types.SubmissionStatus.NO_OUTPUT,
|
|
138
142
|
types.SubmissionStatus.JUDGEMENT_FAILED,
|
|
139
143
|
types.SubmissionStatus.HACKED
|
|
140
144
|
];
|
|
@@ -465,7 +469,7 @@ function calcDirt(attemptedNum, solvedNum) {
|
|
|
465
469
|
return Math.floor((attemptedNum - solvedNum) * 100 / attemptedNum);
|
|
466
470
|
}
|
|
467
471
|
|
|
468
|
-
function
|
|
472
|
+
function getWhiteOrBlackColorV1(background) {
|
|
469
473
|
const [R, G, B] = chroma__default(background).rgb();
|
|
470
474
|
const color = { R, G, B };
|
|
471
475
|
const palette = [
|
|
@@ -479,6 +483,12 @@ function getWhiteOrBlackColor(background) {
|
|
|
479
483
|
return "#fff";
|
|
480
484
|
}
|
|
481
485
|
}
|
|
486
|
+
function getWhiteOrBlackColor(background) {
|
|
487
|
+
const [R, G, B] = chroma__default(background).rgb();
|
|
488
|
+
const brightness = (R * 299 + G * 587 + B * 114) / 1e3;
|
|
489
|
+
const threshold = 148;
|
|
490
|
+
return brightness <= threshold ? "#fff" : "#000";
|
|
491
|
+
}
|
|
482
492
|
|
|
483
493
|
class ProblemStatistics {
|
|
484
494
|
constructor() {
|
|
@@ -1713,6 +1723,7 @@ exports.getImageSource = getImageSource;
|
|
|
1713
1723
|
exports.getTimeDiff = getTimeDiff;
|
|
1714
1724
|
exports.getTimestamp = getTimestamp;
|
|
1715
1725
|
exports.getWhiteOrBlackColor = getWhiteOrBlackColor;
|
|
1726
|
+
exports.getWhiteOrBlackColorV1 = getWhiteOrBlackColorV1;
|
|
1716
1727
|
exports.isAccepted = isAccepted;
|
|
1717
1728
|
exports.isNotCalculatedPenaltyStatus = isNotCalculatedPenaltyStatus;
|
|
1718
1729
|
exports.isPending = isPending;
|
package/dist/index.d.ts
CHANGED
|
@@ -83,6 +83,7 @@ declare class TeamProblemStatistics {
|
|
|
83
83
|
|
|
84
84
|
declare function calcDirt(attemptedNum: number, solvedNum: number): number;
|
|
85
85
|
|
|
86
|
+
declare function getWhiteOrBlackColorV1(background: string): "#000" | "#fff";
|
|
86
87
|
declare function getWhiteOrBlackColor(background: string): "#000" | "#fff";
|
|
87
88
|
|
|
88
89
|
declare function createDayJS(time?: Date | string | number | undefined): dayjs.Dayjs;
|
|
@@ -327,4 +328,4 @@ declare function isRejected(status: SubmissionStatus): boolean;
|
|
|
327
328
|
declare function isPending(status: SubmissionStatus): boolean;
|
|
328
329
|
declare function isNotCalculatedPenaltyStatus(status: SubmissionStatus): boolean;
|
|
329
330
|
|
|
330
|
-
export { Award, Awards, Balloon, Balloons, CodeforcesGymGhostDATConverter, Contest, ContestIndex, ContestIndexConfig, ContestIndexList, ContestOptions, GeneralExcelConverter, MedalType, PlaceChartPointData, Problem, ProblemStatistics, Problems, Rank, RankOptions, RankStatistics, Resolver, SelectOptionItem, Submission, Submissions, Team, TeamProblemStatistics, Teams, calcDirt, createContest, createContestIndex, createContestIndexList, createDayJS, createProblem, createProblems, createProblemsByProblemIds, createSubmission, createSubmissions, createTeam, createTeams, getImageSource, getTimeDiff, getTimestamp, getWhiteOrBlackColor, isAccepted, isNotCalculatedPenaltyStatus, isPending, isRejected, isValidMedalType, stringToSubmissionStatus };
|
|
331
|
+
export { Award, Awards, Balloon, Balloons, CodeforcesGymGhostDATConverter, Contest, ContestIndex, ContestIndexConfig, ContestIndexList, ContestOptions, GeneralExcelConverter, MedalType, PlaceChartPointData, Problem, ProblemStatistics, Problems, Rank, RankOptions, RankStatistics, Resolver, SelectOptionItem, Submission, Submissions, Team, TeamProblemStatistics, Teams, calcDirt, createContest, createContestIndex, createContestIndexList, createDayJS, createProblem, createProblems, createProblemsByProblemIds, createSubmission, createSubmissions, createTeam, createTeams, getImageSource, getTimeDiff, getTimestamp, getWhiteOrBlackColor, getWhiteOrBlackColorV1, isAccepted, isNotCalculatedPenaltyStatus, isPending, isRejected, isValidMedalType, stringToSubmissionStatus };
|
package/dist/index.mjs
CHANGED
|
@@ -12,8 +12,8 @@ import relativeTime from 'dayjs/plugin/relativeTime';
|
|
|
12
12
|
import _ from 'lodash';
|
|
13
13
|
import * as XLSX from 'xlsx-js-style';
|
|
14
14
|
import stringWidth from 'string-width';
|
|
15
|
-
import { furthest } from 'color-diff';
|
|
16
15
|
import chroma from 'chroma-js';
|
|
16
|
+
import { furthest } from 'color-diff';
|
|
17
17
|
|
|
18
18
|
function stringToSubmissionStatus(status) {
|
|
19
19
|
status = status.toUpperCase().replace(" ", "_");
|
|
@@ -32,6 +32,9 @@ function stringToSubmissionStatus(status) {
|
|
|
32
32
|
if (["RJ", "INCORRECT", SubmissionStatus.REJECTED.toString()].includes(status)) {
|
|
33
33
|
return SubmissionStatus.REJECTED;
|
|
34
34
|
}
|
|
35
|
+
if (["NO", SubmissionStatus.NO_OUTPUT.toString()].includes(status)) {
|
|
36
|
+
return SubmissionStatus.NO_OUTPUT;
|
|
37
|
+
}
|
|
35
38
|
if (["PD", SubmissionStatus.PENDING.toString()].includes(status)) {
|
|
36
39
|
return SubmissionStatus.PENDING;
|
|
37
40
|
}
|
|
@@ -104,6 +107,7 @@ function isRejected(status) {
|
|
|
104
107
|
SubmissionStatus.IDLENESS_LIMIT_EXCEEDED,
|
|
105
108
|
SubmissionStatus.WRONG_ANSWER,
|
|
106
109
|
SubmissionStatus.REJECTED,
|
|
110
|
+
SubmissionStatus.NO_OUTPUT,
|
|
107
111
|
SubmissionStatus.JUDGEMENT_FAILED,
|
|
108
112
|
SubmissionStatus.HACKED
|
|
109
113
|
];
|
|
@@ -434,7 +438,7 @@ function calcDirt(attemptedNum, solvedNum) {
|
|
|
434
438
|
return Math.floor((attemptedNum - solvedNum) * 100 / attemptedNum);
|
|
435
439
|
}
|
|
436
440
|
|
|
437
|
-
function
|
|
441
|
+
function getWhiteOrBlackColorV1(background) {
|
|
438
442
|
const [R, G, B] = chroma(background).rgb();
|
|
439
443
|
const color = { R, G, B };
|
|
440
444
|
const palette = [
|
|
@@ -448,6 +452,12 @@ function getWhiteOrBlackColor(background) {
|
|
|
448
452
|
return "#fff";
|
|
449
453
|
}
|
|
450
454
|
}
|
|
455
|
+
function getWhiteOrBlackColor(background) {
|
|
456
|
+
const [R, G, B] = chroma(background).rgb();
|
|
457
|
+
const brightness = (R * 299 + G * 587 + B * 114) / 1e3;
|
|
458
|
+
const threshold = 148;
|
|
459
|
+
return brightness <= threshold ? "#fff" : "#000";
|
|
460
|
+
}
|
|
451
461
|
|
|
452
462
|
class ProblemStatistics {
|
|
453
463
|
constructor() {
|
|
@@ -1646,4 +1656,4 @@ class Resolver extends Rank {
|
|
|
1646
1656
|
}
|
|
1647
1657
|
}
|
|
1648
1658
|
|
|
1649
|
-
export { Award, Balloon, CodeforcesGymGhostDATConverter, Contest, ContestIndex, ContestIndexConfig, ContestOptions, GeneralExcelConverter, MedalType, PlaceChartPointData, Problem, ProblemStatistics, Rank, RankOptions, RankStatistics, Resolver, Submission, Team, TeamProblemStatistics, calcDirt, createContest, createContestIndex, createContestIndexList, createDayJS, createProblem, createProblems, createProblemsByProblemIds, createSubmission, createSubmissions, createTeam, createTeams, getImageSource, getTimeDiff, getTimestamp, getWhiteOrBlackColor, isAccepted, isNotCalculatedPenaltyStatus, isPending, isRejected, isValidMedalType, stringToSubmissionStatus };
|
|
1659
|
+
export { Award, Balloon, CodeforcesGymGhostDATConverter, Contest, ContestIndex, ContestIndexConfig, ContestOptions, GeneralExcelConverter, MedalType, PlaceChartPointData, Problem, ProblemStatistics, Rank, RankOptions, RankStatistics, Resolver, Submission, Team, TeamProblemStatistics, calcDirt, createContest, createContestIndex, createContestIndexList, createDayJS, createProblem, createProblems, createProblemsByProblemIds, createSubmission, createSubmissions, createTeam, createTeams, getImageSource, getTimeDiff, getTimestamp, getWhiteOrBlackColor, getWhiteOrBlackColorV1, isAccepted, isNotCalculatedPenaltyStatus, isPending, isRejected, isValidMedalType, stringToSubmissionStatus };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xcpcio/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.35.1",
|
|
4
4
|
"description": "XCPCIO Core",
|
|
5
5
|
"author": "Dup4 <lyuzhi.pan@gmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"lodash": "^4.17.21",
|
|
47
47
|
"string-width": "^6.1.0",
|
|
48
48
|
"xlsx-js-style": "^1.2.0",
|
|
49
|
-
"@xcpcio/types": "0.
|
|
49
|
+
"@xcpcio/types": "0.35.1"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@babel/types": "^7.22.4",
|
package/src/submission-status.ts
CHANGED
|
@@ -23,6 +23,10 @@ export function stringToSubmissionStatus(status: string): SubmissionStatus {
|
|
|
23
23
|
return SubmissionStatus.REJECTED;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
if (["NO", SubmissionStatus.NO_OUTPUT.toString()].includes(status)) {
|
|
27
|
+
return SubmissionStatus.NO_OUTPUT;
|
|
28
|
+
}
|
|
29
|
+
|
|
26
30
|
if (["PD", SubmissionStatus.PENDING.toString()].includes(status)) {
|
|
27
31
|
return SubmissionStatus.PENDING;
|
|
28
32
|
}
|
|
@@ -117,6 +121,7 @@ export function isRejected(status: SubmissionStatus): boolean {
|
|
|
117
121
|
SubmissionStatus.IDLENESS_LIMIT_EXCEEDED,
|
|
118
122
|
SubmissionStatus.WRONG_ANSWER,
|
|
119
123
|
SubmissionStatus.REJECTED,
|
|
124
|
+
SubmissionStatus.NO_OUTPUT,
|
|
120
125
|
SubmissionStatus.JUDGEMENT_FAILED,
|
|
121
126
|
SubmissionStatus.HACKED,
|
|
122
127
|
];
|
package/src/utils/color.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { furthest } from "color-diff";
|
|
2
1
|
import chroma from "chroma-js";
|
|
2
|
+
import { furthest } from "color-diff";
|
|
3
3
|
|
|
4
|
-
export function
|
|
4
|
+
export function getWhiteOrBlackColorV1(background: string) {
|
|
5
5
|
const [R, G, B] = chroma(background).rgb();
|
|
6
6
|
const color = { R, G, B };
|
|
7
7
|
const palette = [
|
|
@@ -17,3 +17,12 @@ export function getWhiteOrBlackColor(background: string) {
|
|
|
17
17
|
return "#fff";
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
+
|
|
21
|
+
export function getWhiteOrBlackColor(background: string) {
|
|
22
|
+
const [R, G, B] = chroma(background).rgb();
|
|
23
|
+
|
|
24
|
+
const brightness = (R * 299 + G * 587 + B * 114) / 1000;
|
|
25
|
+
const threshold = 148;
|
|
26
|
+
|
|
27
|
+
return brightness <= threshold ? "#fff" : "#000";
|
|
28
|
+
}
|