From f720b25e47d9820420124cd77b7b743050b3ed4e Mon Sep 17 00:00:00 2001 From: Artem Korsakov Date: Sun, 16 Mar 2025 11:02:32 +0300 Subject: [PATCH] Fixed the comments --- docs/images/progress.png | Bin 114281 -> 91581 bytes helpers/awardsBlock.ts | 95 ++++++++++++ helpers/commonBlocks.ts | 30 ++++ helpers/fetchProgress.ts | 91 +++++++---- helpers/friendsBlock.ts | 89 +++++++++++ helpers/htmlGenerators.ts | 316 -------------------------------------- helpers/levelsBlock.ts | 86 +++++++++++ helpers/parsers.ts | 2 - helpers/profileBlock.ts | 60 ++++++++ helpers/progressBlock.ts | 241 +++++++++++++++++++++++++++++ helpers/ratingBlock.ts | 82 ++++++++++ helpers/types.ts | 8 + main.ts | 11 +- manifest.json | 2 +- 14 files changed, 751 insertions(+), 362 deletions(-) create mode 100644 helpers/awardsBlock.ts create mode 100644 helpers/commonBlocks.ts create mode 100644 helpers/friendsBlock.ts delete mode 100644 helpers/htmlGenerators.ts create mode 100644 helpers/levelsBlock.ts create mode 100644 helpers/profileBlock.ts create mode 100644 helpers/progressBlock.ts create mode 100644 helpers/ratingBlock.ts diff --git a/docs/images/progress.png b/docs/images/progress.png index 61ad3c01d87cab88c88859285978a9daa44c6b4e..35f274dd0f7992ff932d52b880757c24259eaeb7 100644 GIT binary patch literal 91581 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 S(%3ohC-+E6Do@hj?f(H{EXhp( literal 114281 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 diff --git a/helpers/awardsBlock.ts b/helpers/awardsBlock.ts new file mode 100644 index 0000000..df2cee7 --- /dev/null +++ b/helpers/awardsBlock.ts @@ -0,0 +1,95 @@ +import { AwardData, AwardBlockData } from './types'; +import { createProgressBar, createSectionHeader } from './commonBlocks'; + +function createAwardTableRow(award: AwardData): HTMLElement { + const row = document.createElement('tr'); + + const awardCell = document.createElement('td'); + const awardLink = document.createElement('a'); + awardLink.href = award.link; + awardLink.textContent = award.award; + awardCell.appendChild(awardLink); + row.appendChild(awardCell); + + const descriptionCell = document.createElement('td'); + descriptionCell.textContent = award.description; + row.appendChild(descriptionCell); + + const membersCell = document.createElement('td'); + membersCell.textContent = award.members; + row.appendChild(membersCell); + + const progressCell = document.createElement('td'); + progressCell.textContent = award.progress; + row.appendChild(progressCell); + + const progressBarCell = document.createElement('td'); + progressBarCell.appendChild(createProgressBar(award.percentage)); + row.appendChild(progressBarCell); + + return row; +} + +function createAwardTable(awardData: AwardBlockData): HTMLElement { + const table = document.createElement('table'); + const tableBody = document.createElement('tbody'); + + const headerRow = document.createElement('tr'); + ['Award', 'Description', 'Members', 'Progress', 'Progress bar'].forEach(headerText => { + const headerCell = document.createElement('th'); + headerCell.textContent = headerText; + headerRow.appendChild(headerCell); + }); + tableBody.appendChild(headerRow); + + awardData.awards.forEach(award => { + if (!award.isCompleted) { + tableBody.appendChild(createAwardTableRow(award)); + } + }); + + table.appendChild(tableBody); + return table; +} + +function createAwardBlock(awardData: AwardBlockData): HTMLElement { + const awardBlock = document.createElement('div'); + + const awardName = document.createElement('h3'); + awardName.textContent = awardData.name; + awardBlock.appendChild(awardName); + + const completed = awardData.getCompletedCount(); + const total = awardData.awards.length; + + const completedStatus = document.createElement('h4'); + completedStatus.textContent = `Status: Won ${completed} out of ${total}`; + awardBlock.appendChild(completedStatus); + + const uncompletedStatus = document.createElement('h4'); + uncompletedStatus.textContent = `Uncompleted awards: ${total - completed}`; + awardBlock.appendChild(uncompletedStatus); + + awardBlock.appendChild(createAwardTable(awardData)); + + return awardBlock; +} + +/** + * Generates HTML for the awards table. + * @param awardsData - The awards data. + * @returns The generated HTMLElement (awards table container). + */ +export function generateAwardsTableHTML(awardsData: AwardBlockData[]): HTMLElement { + const awardsContainer = document.createElement('div'); + + const awardsHeader = document.createElement('h2'); + awardsHeader.textContent = 'Awards'; + awardsContainer.appendChild(awardsHeader); + + awardsData.forEach(awardData => { + awardsContainer.appendChild(createAwardBlock(awardData)); + }); + + return awardsContainer; +} diff --git a/helpers/commonBlocks.ts b/helpers/commonBlocks.ts new file mode 100644 index 0000000..3bdb386 --- /dev/null +++ b/helpers/commonBlocks.ts @@ -0,0 +1,30 @@ +/** + * Creates a progress bar element. + * @param percentage - The progress percentage (0 to 100). + * @returns The generated HTMLElement (progress bar container). + */ +export function createProgressBar(percentage: number): HTMLElement { + const clampedPercentage = Math.min(100, Math.max(0, percentage)); + + const progressContainer = document.createElement('div'); + progressContainer.className = 'progress-container'; + + const progressBar = document.createElement('span'); + progressBar.className = 'progress-bar'; + progressBar.style.width = `${clampedPercentage}%`; + + const progressText = document.createElement('span'); + progressText.className = 'progress-text'; + progressText.textContent = `${clampedPercentage}%`; + + progressContainer.appendChild(progressBar); + progressContainer.appendChild(progressText); + + return progressContainer; +} + +export function createSectionHeader(title: string, tagName: 'h2' | 'h4' | 'h5' = 'h2'): HTMLElement { + const header = document.createElement(tagName); + header.textContent = title; + return header; +} diff --git a/helpers/fetchProgress.ts b/helpers/fetchProgress.ts index 3108c84..9ceb943 100644 --- a/helpers/fetchProgress.ts +++ b/helpers/fetchProgress.ts @@ -8,15 +8,12 @@ import { parseLevelData, parseFriends } from './parsers'; -import { - generateProfileHTML, - generateImageHTML, - generateProgressTableHTML, - generateRatingTableHTML, - generateLevelsTableHTML, - generateAwardsTableHTML, - generateFriendsHTML -} from './htmlGenerators'; +import { generateProfileHTML, generateImageHTML } from './profileBlock'; +import { generateProgressTableHTML } from './progressBlock'; +import { generateRatingTableHTML } from './ratingBlock'; +import { generateLevelsTableHTML } from './levelsBlock'; +import { generateAwardsTableHTML } from './awardsBlock'; +import { generateFriendsHTML } from './friendsBlock'; import { AccountData, AwardBlockData, @@ -30,20 +27,28 @@ const mainUrl = 'https://projecteuler.net/'; const sessionIdName = 'PHPSESSID'; const keepAliveName = 'keep_alive'; -export async function fetchProgress(session: string, keep_alive: string, retries: number = 1): Promise { - const cookies = `${sessionIdName}=${session}; ${keepAliveName}=${keep_alive}`; - console.log(`Fetching progress with cookies: ${cookies}`); +/** + * Fetches progress data and returns it as an HTMLElement. + * @param session - The session cookie value. + * @param keep_alive - The keep-alive cookie value. + * @param retries - The number of retries in case of failure. + * @returns A Promise that resolves to an HTMLElement. + */ +export async function fetchProgress(session: string, keep_alive: string): Promise { + const cookies = `${sessionIdName}=${session}; ${keepAliveName}=${keep_alive}`; try { return await tryToFetchProgress(cookies); } catch (error) { console.error('Error fetching progress:', error); - return `

Error fetching progress. Please update your cookies in the settings and try again.
`; + const errorContainer = document.createElement('div'); + errorContainer.textContent = 'Error fetching progress. Please update your cookies in the settings and try again.'; + return errorContainer; } } -async function tryToFetchProgress(cookies: string): Promise { +async function tryToFetchProgress(cookies: string): Promise { const [ accountData, progressData, @@ -104,25 +109,43 @@ async function fetchAwardsData(cookies: string): Promise { return parseAwardsData(myAwardsHtml, awardsHtml); } -function generateHTML(accountData: AccountData, progressData: ProgressData, euleriansPlace: string, locationUrl: string, languageUrl: string, locationRating: RatingData, languageRating: RatingData, levelDataArray: LevelData[], awardsData: AwardBlockData[], friends: FriendData[]): string { - const profileHTML = generateProfileHTML(accountData, progressData); - console.log("Successfully generated profile HTML."); - const imageHTML = generateImageHTML(accountData.account); - console.log("Successfully generated image HTML."); - const progressHTML = generateProgressTableHTML(accountData, progressData, locationUrl, languageUrl, euleriansPlace, locationRating, languageRating, awardsData); - console.log("Successfully generated progress HTML."); - const locationTitle = `Progress in
the ${accountData.location}'s rating` - const locationRatingHTML = generateRatingTableHTML(locationTitle, progressData.solved, locationRating); - console.log("Successfully generated location rating HTML."); - const languageTitle = `Progress in the ${accountData.language}'s rating` - const languageRatingHTML = generateRatingTableHTML(languageTitle, progressData.solved, languageRating); - console.log("Successfully generated language rating HTML."); - const levelsHTML = generateLevelsTableHTML(progressData, levelDataArray); - console.log("Successfully generated levels HTML."); - const awardsHTML = generateAwardsTableHTML(awardsData); - console.log("Successfully generated awards HTML."); - const friendsHTML = generateFriendsHTML(friends, accountData); - console.log("Successfully generated friends HTML."); +function generateHTML( + accountData: AccountData, + progressData: ProgressData, + euleriansPlace: string, + locationUrl: string, + languageUrl: string, + locationRating: RatingData, + languageRating: RatingData, + levelDataArray: LevelData[], + awardsData: AwardBlockData[], + friends: FriendData[] +): HTMLElement { + const container = document.createElement('div'); - return profileHTML + imageHTML + progressHTML + locationRatingHTML + languageRatingHTML + levelsHTML + awardsHTML + friendsHTML; + const profileElement = generateProfileHTML(accountData, progressData); + container.appendChild(profileElement); + + const imageElement = generateImageHTML(accountData.account); + container.appendChild(imageElement); + + const progressElement = generateProgressTableHTML(accountData, progressData, locationUrl, languageUrl, euleriansPlace, locationRating, languageRating, awardsData); + container.appendChild(progressElement); + + const locationRatingElement = generateRatingTableHTML(locationUrl, accountData.location, progressData.solved, locationRating); + container.appendChild(locationRatingElement); + + const languageRatingElement = generateRatingTableHTML(languageUrl, accountData.language, progressData.solved, languageRating); + container.appendChild(languageRatingElement); + + const levelsElement = generateLevelsTableHTML(progressData, levelDataArray); + container.appendChild(levelsElement); + + const awardsElement = generateAwardsTableHTML(awardsData); + container.appendChild(awardsElement); + + const friendsElement = generateFriendsHTML(friends, accountData); + container.appendChild(friendsElement); + + return container; } diff --git a/helpers/friendsBlock.ts b/helpers/friendsBlock.ts new file mode 100644 index 0000000..dd02be4 --- /dev/null +++ b/helpers/friendsBlock.ts @@ -0,0 +1,89 @@ +import { AccountData, FriendData } from './types'; +import { createSectionHeader } from './commonBlocks'; + +function createFriendTableRow(friend: FriendData, myAccount: FriendData, accountData: AccountData): HTMLElement { + const row = document.createElement('tr'); + + // Get the current account + if (friend.username === accountData.alias) { + row.id = 'your-account'; + } + + // Rank + const rankCell = document.createElement('td'); + rankCell.textContent = friend.rank; + row.appendChild(rankCell); + + // Username + const usernameCell = document.createElement('td'); + const usernameLink = document.createElement('a'); + usernameLink.href = `https://projecteuler.net/progress=${friend.username}`; + usernameLink.textContent = friend.username; + usernameCell.appendChild(usernameLink); + row.appendChild(usernameCell); + + // Solved tasks + const solvedCell = document.createElement('td'); + solvedCell.textContent = friend.username === accountData.alias + ? friend.solved.toString() + : friend.solved > myAccount.solved + ? `${friend.solved} (+${friend.solved - myAccount.solved})` + : friend.solved.toString(); + row.appendChild(solvedCell); + + // Level + const levelCell = document.createElement('td'); + levelCell.textContent = friend.username === accountData.alias + ? friend.level.toString() + : friend.level > myAccount.level + ? `${friend.level} (+${friend.level - myAccount.level})` + : friend.level.toString(); + row.appendChild(levelCell); + + // Awards + const awardsCell = document.createElement('td'); + awardsCell.textContent = friend.username === accountData.alias + ? friend.awards.toString() + : friend.awards > myAccount.awards + ? `${friend.awards} (+${friend.awards - myAccount.awards})` + : friend.awards.toString(); + row.appendChild(awardsCell); + + return row; +} + +function createFriendsTable(friends: FriendData[], myAccount: FriendData, accountData: AccountData): HTMLElement { + const table = document.createElement('table'); + const tableBody = document.createElement('tbody'); + + const headerRow = document.createElement('tr'); + ['Rank', 'Username', 'Solved', 'Level', 'Awards'].forEach(headerText => { + const headerCell = document.createElement('th'); + headerCell.textContent = headerText; + headerRow.appendChild(headerCell); + }); + tableBody.appendChild(headerRow); + + friends.forEach(friend => { + tableBody.appendChild(createFriendTableRow(friend, myAccount, accountData)); + }); + + table.appendChild(tableBody); + return table; +} + +/** + * Generates HTML for the friends table. + * @param friends - The friends data. + * @param accountData - The account data. + * @returns The generated HTMLElement (friends table container). + */ +export function generateFriendsHTML(friends: FriendData[], accountData: AccountData): HTMLElement { + const friendsContainer = document.createElement('div'); + friendsContainer.appendChild(createSectionHeader('Friends')); + const myAccount = friends.find(friend => friend.username === accountData.alias) ?? new FriendData('-', accountData.alias, 0, 0, 0); + friendsContainer.appendChild(createFriendsTable(friends, myAccount, accountData)); + + return friendsContainer; +} + diff --git a/helpers/htmlGenerators.ts b/helpers/htmlGenerators.ts deleted file mode 100644 index df928b4..0000000 --- a/helpers/htmlGenerators.ts +++ /dev/null @@ -1,316 +0,0 @@ -import { stringToNumber } from './parsers'; -import { AccountData, AwardData, AwardBlockData, FriendData, ProgressData, RatingData, LevelData } from './types'; - -/** - * Generates HTML for the profile section. - * @param accountData - The account data. - * @param progressData - The progress data. - * @returns The generated HTML string. - */ -export function generateProfileHTML(accountData: AccountData, progressData: ProgressData): string { - return ` -

Profile

- - - - - - - - - -
Account${accountData.account}
Alias${accountData.alias}
Location${accountData.location}
Language${accountData.language}
Level${progressData.level}
Solved${progressData.solved}
- `; -} - -/** - * Generates HTML for the profile image. - * @param account - The account name. - * @returns The generated HTML string. - */ -export function generateImageHTML(account: string): string { - const imageSrc = `https://projecteuler.net/profile/${account}.png`; - return `Profile ${account}`; -} - -interface Result { - message: string; - percentage: number; -} - -export function determineTop(solved: number, rating: RatingData): Result { - const thresholds = [ - { limit: 100, top: rating.top100, title: 'Top 100' }, - { limit: 50, top: rating.top50, title: 'Top 50' }, - { limit: 25, top: rating.top25, title: 'Top 25' }, - { limit: 10, top: rating.top10, title: 'Top 10' }, - { limit: 5, top: rating.top5, title: 'Top 5' }, - { limit: 1, top: rating.top1, title: 'Top 1' }, - ]; - - for (let i = 0; i < thresholds.length; i++) { - const { limit, top, title } = thresholds[i]; - if (rating.place > limit) { - const prevTop = i > 0 ? thresholds[i - 1].top : 0; // Получаем предыдущее значение top - const rest = top - solved + 1; - const all = top - prevTop + 1; - - const percentage = all > 0 ? Math.round(((all - rest) / all) * 100) : 0; - const message = `${rest} problems away from ${title}`; - return { message, percentage }; - } - } - - return { message: 'You are in the Top 1', percentage: 100 }; -} - -/** - * Функция для нахождения AwardData с максимальным значением members. - * @param awardBlocks - Массив AwardBlockData. - * @returns AwardData с максимальным значением members или null, если не найдено. - */ -export function findAwardWithMaxMembers(awardBlocks: AwardBlockData[]): AwardData | null { - const allAwards = awardBlocks.flatMap(block => block.awards).filter(award => !award.isCompleted);; - - return allAwards.reduce((maxAward, currentAward) => { - const currentMembers = parseInt(currentAward.members.replace(/\D/g, '')) || 0; - const maxMembers = parseInt(maxAward.members.replace(/\D/g, '')) || 0; - - return currentMembers > maxMembers ? currentAward : maxAward; - }, allAwards[0] || null); -} - -function createProgressBar(percentage: number): string { - const clampedPercentage = Math.min(100, Math.max(0, percentage)); - - return ` -
- - ${clampedPercentage}% -
- `; -} - -/** - * Generates HTML for the progress table. - * @param accountData - The account data. - * @param progressData - The progress data. - * @param locationUrl - The URL for the location rating. - * @param languageUrl - The URL for the language rating. - * @param euleriansPlace - The user's place in Eulerians' rating. - * @param locationRating - The location rating data. - * @param languageRating - The language rating data. - * @returns The generated HTML string. - */ -export function generateProgressTableHTML( - accountData: AccountData, - progressData: ProgressData, - locationUrl: string, - languageUrl: string, - euleriansPlace: string, - locationRating: RatingData, - languageRating: RatingData, - awardsData: AwardBlockData[] -): string { - const locationPlace = locationRating.place > 100 ? 'You are not in the Top 100' : locationRating.place; - const languagePlace = languageRating.place > 100 ? 'You are not in the Top 100' : languageRating.place; - - const progressPercentage = createProgressBar(progressData.percentage); - - const locationPlaceToTop = locationRating.place > 100 ? 0 : 100 - locationRating.place; - const locationPercentage = createProgressBar(locationPlaceToTop); - const languagePlaceToTop = languageRating.place > 100 ? 0 : 100 - languageRating.place; - const languagePercentage = createProgressBar(languagePlaceToTop); - - const matchToTheNext = progressData.toTheNext.match(/(\d+)/); - const countToTheNext = matchToTheNext ? (25 - parseInt(matchToTheNext[1], 10)) * 4 : 0; - const toTheNextPercentage = createProgressBar(countToTheNext); - - const locationResult = determineTop(progressData.solved, locationRating) - const locationLiElement = `
  • ${accountData.location}: ${locationResult.message}. ${createProgressBar(locationResult.percentage)}
  • `; - - const languageResult = determineTop(progressData.solved, languageRating) - const languageLiElement = `
  • ${accountData.language}: ${languageResult.message}. ${createProgressBar(languageResult.percentage)}
  • `; - - const award = findAwardWithMaxMembers(awardsData); - const awardPlace = award ? `
  • Most unresolved award: ${award.award} (${award.description}) by ${award.members}. ${createProgressBar(award.percentage)}
  • ` : ''; - - return ` -

    Progress

    - ${progressPercentage} - - - - - - - - -
    CompetitionStatusProgress bar
    Progress${progressData.progress}${progressPercentage}
    Place in Eulerians${euleriansPlace}
    Place in ${accountData.location}${locationPlace}${locationPercentage}
    Place in ${accountData.language}${languagePlace}${languagePercentage}
    -

    Tasks

    -
      -
    • ${progressData.level}: ${progressData.toTheNext}. ${toTheNextPercentage}
    • - ${locationLiElement} - ${languageLiElement} - ${awardPlace} -
    - `; -} - -/** - * Generates HTML for the rating table. - * @param title - The title of the rating table. - * @param solved - The number of solved problems. - * @param rating - The rating data. - * @returns The generated HTML string. - */ -export function generateRatingTableHTML(title: string, solved: number, rating: RatingData): string { - const place = rating.place > 100 ? 'You are not in the Top 100' : rating.place; - const top1Row = rating.place >= 1 ? `Top 1${rating.top1}${rating.top1 - solved + 1} problems away from Top 1` : ''; - const top5Row = rating.place > 5 ? `Top 5${rating.top5}${rating.top5 - solved + 1} problems away from Top 5` : ''; - const top10Row = rating.place > 10 ? `Top 10${rating.top10}${rating.top10 - solved + 1} problems away from Top 10` : ''; - const top25Row = rating.place > 25 ? `Top 25${rating.top25}${rating.top25 - solved + 1} problems away from Top 25` : ''; - const top50Row = rating.place > 50 ? `Top 50${rating.top50}${rating.top50 - solved + 1} problems away from Top 50` : ''; - const top100Row = rating.place > 100 ? `Top 100${rating.top100}${rating.top100 - solved + 1} problems away from Top 100` : ''; - - return ` -

    ${title}

    -

    Current place: ${place}

    -
    Solved problems: ${solved}
    - - - - ${top100Row} - ${top50Row} - ${top25Row} - ${top10Row} - ${top5Row} - ${top1Row} - -
    CompetitionSolvedRemaining
    - `; -} - -export function generateLevelsTableHTML(progressData: ProgressData, levelDataArray: LevelData[]): string { - const level = stringToNumber(progressData.level); - - // Проверяем, что levelDataArray не пустой и уровень не выходит за пределы массива - if (!levelDataArray.length || level >= levelDataArray.length) { - return `

    No levels available

    `; - } - - // Используем slice для получения подмассива, начиная с текущего уровня - const slicedArray = levelDataArray.slice(level - 1); - - // Преобразуем каждый элемент в строку - const rows = slicedArray.map(levelData => { - const rowLevel = stringToNumber(levelData.level); - const needForLevel = rowLevel * 25; - const remaining = Math.max(0, needForLevel - progressData.solved); - - return ` - - ${levelData.level} - ${needForLevel} - ${remaining} - ${levelData.members} - - `; - }).join(''); - - const allMembers = slicedArray.reduce((total, levelData) => { - const membersCount = stringToNumber(levelData.members); - return total + (isNaN(membersCount) ? 0 : membersCount); - }, 0); - - return ` -

    Level progress

    -

    Current level: ${progressData.level}

    -
    Solved problems: ${progressData.solved}
    -
    Status: ${allMembers} members have made it this far.
    - - - - ${rows} - -
    LevelSolveRemainingMembers
    - `; -} -export function generateAwardsTableHTML(awardsData: AwardBlockData[]): string { - const tables = awardsData.map(awardData => { - const awards = awardData.awards; - const length = awards.length; - - // Подсчитываем завершенные и создаем строки таблицы за один проход - const { completed, rows } = awards.reduce<{ completed: number; rows: string[] }>( - (acc, { award, link, description, isCompleted, progress, percentage, members }) => { - if (isCompleted) { - acc.completed++; - } else { - const progressBar = createProgressBar(percentage); - - acc.rows.push(` - - ${award} - ${description} - ${members} - ${progress} - ${progressBar} - - `); - } - return acc; - }, - { completed: 0, rows: [] } // Начальное значение аккумулятора - ); - - return ` -

    ${awardData.name}

    -

    Status: Won ${completed} out of ${length}

    -

    Uncompleted awards: ${length - completed}

    - - - - ${rows.join('')} - -
    AwardDescriptionMembersProgressProgress bar
    - `; - }).join(''); - - return ` -

    Awards

    - ${tables} - `; -} - -export function generateFriendsHTML(friends: FriendData[], accountData: AccountData): string { - const myAccount = friends.find(friend => friend.username === accountData.alias) ?? new FriendData( `-`, accountData.alias, 0, 0, 0); - - const rows = friends.map(friend => { - const idCss = friend.username === accountData.alias ? 'id="your-account"' : ''; - const username = `${friend.username}`; - const solved = friend.username === accountData.alias ? friend.solved : friend.solved > myAccount.solved ? `${friend.solved} (+${friend.solved - myAccount.solved})` : friend.solved; - const level = friend.username === accountData.alias ? friend.level : friend.level > myAccount.level ? `${friend.level} (+${friend.level - myAccount.level})` : friend.level; - const awards = friend.username === accountData.alias ? friend.awards : friend.awards > myAccount.awards ? `${friend.awards} (+${friend.awards - myAccount.awards})` : friend.awards; - - return ` - - ${friend.rank} - ${username} - ${solved} - ${level} - ${awards} - - `; - }); - - return ` -

    Friends

    - - - - ${rows.join('')} - -
    RankUsernameSolvedLevelAwards
    - `; -} diff --git a/helpers/levelsBlock.ts b/helpers/levelsBlock.ts new file mode 100644 index 0000000..9081150 --- /dev/null +++ b/helpers/levelsBlock.ts @@ -0,0 +1,86 @@ +import { stringToNumber } from './parsers'; +import { ProgressData, LevelData } from './types'; +import { createSectionHeader } from './commonBlocks'; + +function createLevelTableRow(levelData: LevelData, progressData: ProgressData): HTMLElement { + const row = document.createElement('tr'); + const cell1 = document.createElement('td'); + const cell2 = document.createElement('td'); + const cell3 = document.createElement('td'); + const cell4 = document.createElement('td'); + + const rowLevel = stringToNumber(levelData.level); + const needForLevel = rowLevel * 25; + const remaining = Math.max(0, needForLevel - progressData.solved); + + const levelLink = document.createElement('a'); + levelLink.href = `https://projecteuler.net/level=${rowLevel}`; + levelLink.textContent = levelData.level; + + cell1.appendChild(levelLink); + cell2.textContent = needForLevel.toString(); + cell3.textContent = remaining.toString(); + cell4.textContent = levelData.members; + + row.appendChild(cell1); + row.appendChild(cell2); + row.appendChild(cell3); + row.appendChild(cell4); + return row; +} + +function createLevelsTable(progressData: ProgressData, levelDataArray: LevelData[]): HTMLElement { + const table = document.createElement('table'); + const tableBody = document.createElement('tbody'); + + const headerRow = document.createElement('tr'); + ['Level', 'Solve', 'Remaining', 'Members'].forEach(headerText => { + const headerCell = document.createElement('th'); + headerCell.textContent = headerText; + headerRow.appendChild(headerCell); + }); + tableBody.appendChild(headerRow); + + levelDataArray.forEach(levelData => { + tableBody.appendChild(createLevelTableRow(levelData, progressData)); + }); + + table.appendChild(tableBody); + return table; +} + +function calculateTotalMembers(levelDataArray: LevelData[]): number { + return levelDataArray.reduce((total, levelData) => { + const membersCount = stringToNumber(levelData.members); + return total + (isNaN(membersCount) ? 0 : membersCount); + }, 0); +} + +/** + * Generates HTML for the levels table. + * @param progressData - The progress data. + * @param levelDataArray - The array of level data. + * @returns The generated HTMLElement (levels table container). + */ +export function generateLevelsTableHTML(progressData: ProgressData, levelDataArray: LevelData[]): HTMLElement { + const level = stringToNumber(progressData.level); + + const levelsContainer = document.createElement('div'); + + // If there are no levels or the current level is higher than the last available level, display a message + if (!levelDataArray.length || level >= levelDataArray.length) { + levelsContainer.appendChild(createSectionHeader('No levels available')); + return levelsContainer; + } + + const slicedArray = levelDataArray.slice(level - 1); + levelsContainer.appendChild(createSectionHeader('Level progress')); + levelsContainer.appendChild(createSectionHeader(`Current level: ${progressData.level}`, 'h4')); + levelsContainer.appendChild(createSectionHeader(`Solved problems: ${progressData.solved}`, 'h5')); + const allMembers = calculateTotalMembers(slicedArray); + levelsContainer.appendChild(createSectionHeader(`Status: ${allMembers} members have made it this far.`, 'h5')); + + levelsContainer.appendChild(createLevelsTable(progressData, slicedArray)); + + return levelsContainer; +} diff --git a/helpers/parsers.ts b/helpers/parsers.ts index 3b08aad..5d87955 100644 --- a/helpers/parsers.ts +++ b/helpers/parsers.ts @@ -115,10 +115,8 @@ export function parseLevelData(html: string): LevelData[] { const parser = new DOMParser(); const doc = parser.parseFromString(html, 'text/html'); - // Находим все элементы, соответствующие селектору const tileBoxes = doc.querySelectorAll('#tile_grid > .tile_box'); - // Используем map для создания массива LevelData return Array.from(tileBoxes).map(tileBox => { const levelElement = tileBox.querySelector('a'); const membersElement = tileBox.querySelector('.small_notice'); diff --git a/helpers/profileBlock.ts b/helpers/profileBlock.ts new file mode 100644 index 0000000..eb8b210 --- /dev/null +++ b/helpers/profileBlock.ts @@ -0,0 +1,60 @@ +import { AccountData, ProgressData } from './types'; + +/** + * Generates HTML for the profile section. + * @param accountData - The account data. + * @param progressData - The progress data. + * @returns The generated HTMLElement. + */ +export function generateProfileHTML(accountData: AccountData, progressData: ProgressData): HTMLElement { + const profileContainer = document.createElement('div'); + + const profileHeader = document.createElement('h2'); + profileHeader.textContent = 'Profile'; + profileContainer.appendChild(profileHeader); + + const profileTable = document.createElement('table'); + profileTable.className = 'profile-table'; + + const tableBody = document.createElement('tbody'); + + const addRow = (label: string, value: string | number) => { + const row = document.createElement('tr'); + const labelCell = document.createElement('td'); + const valueCell = document.createElement('td'); + + labelCell.textContent = label; + valueCell.textContent = String(value); + + row.appendChild(labelCell); + row.appendChild(valueCell); + tableBody.appendChild(row); + }; + + addRow('Account', accountData.account); + addRow('Alias', accountData.alias); + addRow('Location', accountData.location); + addRow('Language', accountData.language); + addRow('Level', progressData.level); + addRow('Solved', progressData.solved); + + profileTable.appendChild(tableBody); + profileContainer.appendChild(profileTable); + + return profileContainer; +} + +/** + * Generates HTML for the profile image. + * @param account - The account name. + * @returns The generated HTMLElement (img element). + */ +export function generateImageHTML(account: string): HTMLElement { + const imageElement = document.createElement('img'); + + imageElement.src = `https://projecteuler.net/profile/${account}.png`; + imageElement.alt = `Profile ${account}`; + imageElement.title = account; + + return imageElement; +} diff --git a/helpers/progressBlock.ts b/helpers/progressBlock.ts new file mode 100644 index 0000000..ed00e55 --- /dev/null +++ b/helpers/progressBlock.ts @@ -0,0 +1,241 @@ +import { AccountData, AwardData, AwardBlockData, ProgressData, RatingData } from './types'; +import { createProgressBar, createSectionHeader } from './commonBlocks'; + +interface Result { + message: string; + percentage: number; +} + +function determineTop(solved: number, rating: RatingData): Result { + const thresholds = [ + { limit: 100, top: rating.top100, title: 'Top 100' }, + { limit: 50, top: rating.top50, title: 'Top 50' }, + { limit: 25, top: rating.top25, title: 'Top 25' }, + { limit: 10, top: rating.top10, title: 'Top 10' }, + { limit: 5, top: rating.top5, title: 'Top 5' }, + { limit: 1, top: rating.top1, title: 'Top 1' }, + ]; + + for (let i = 0; i < thresholds.length; i++) { + const { limit, top, title } = thresholds[i]; + if (rating.place > limit) { + const prevTop = i > 0 ? thresholds[i - 1].top : 0; // Get the previous top + const rest = top - solved + 1; + const all = top - prevTop + 1; + + const percentage = all > 0 ? Math.round(((all - rest) / all) * 100) : 0; + const message = `${rest} problems away from ${title}`; + return { message, percentage }; + } + } + + return { message: 'You are in the Top 1', percentage: 100 }; +} + +/** Function to determine AwardData with the maximum number of members. + * + * @param awardBlocks - AwardBlockData array. + * @returns AwardData with the maximum number of members or null if there are no unfinished awards. + */ +function findAwardWithMaxMembers(awardBlocks: AwardBlockData[]): AwardData | null { + const allAwards = awardBlocks.flatMap(block => block.awards).filter(award => !award.isCompleted);; + + return allAwards.reduce((maxAward, currentAward) => { + const currentMembers = parseInt(currentAward.members.replace(/\D/g, '')) || 0; + const maxMembers = parseInt(maxAward.members.replace(/\D/g, '')) || 0; + + return currentMembers > maxMembers ? currentAward : maxAward; + }, allAwards[0] || null); +} + +function createTableRow(label: string | HTMLElement, status: string, progressBar?: HTMLElement): HTMLElement { + const row = document.createElement('tr'); + const labelCell = document.createElement('td'); + const statusCell = document.createElement('td'); + const progressCell = document.createElement('td'); + + // If label is a string, set the text content directly + if (typeof label === 'string') { + labelCell.textContent = label; + } else { // If label is an HTMLElement, append it to the cell + labelCell.appendChild(label); + } + + statusCell.textContent = status; + + if (progressBar) { + progressCell.appendChild(progressBar); + } + + row.appendChild(labelCell); + row.appendChild(statusCell); + row.appendChild(progressCell); + return row; +} + +function createProgressTable( + progressData: ProgressData, + euleriansPlace: string, + locationUrl: string, + languageUrl: string, + accountData: AccountData, + locationRating: RatingData, + languageRating: RatingData +): HTMLElement { + const table = document.createElement('table'); + const tableBody = document.createElement('tbody'); + + const headerRow = document.createElement('tr'); + ['Competition', 'Status', 'Progress bar'].forEach(headerText => { + const headerCell = document.createElement('th'); + headerCell.textContent = headerText; + headerRow.appendChild(headerCell); + }); + tableBody.appendChild(headerRow); + + // Solved out of total + const progressPercentage = createProgressBar(progressData.percentage); + tableBody.appendChild(createTableRow( + `Progress`, + progressData.progress, + progressPercentage + )); + + // Eulerians' place + const euleriansLink = document.createElement('a'); + euleriansLink.href = 'https://projecteuler.net/eulerians'; + euleriansLink.textContent = 'Place in Eulerians'; + tableBody.appendChild(createTableRow( + euleriansLink, + euleriansPlace + )); + + // Location rating + const locationPlace = locationRating.place > 100 ? 'You are not in the Top 100' : locationRating.place.toString(); + const locationPlaceToTop = locationRating.place > 100 ? 0 : 100 - locationRating.place; + const locationPercentage = createProgressBar(locationPlaceToTop); + const locationLink = document.createElement('a'); + locationLink.href = locationUrl; + locationLink.textContent = `Place in ${accountData.location}`; + tableBody.appendChild(createTableRow( + locationLink, + locationPlace, + locationPercentage + )); + + // Language rating + const languagePlace = languageRating.place > 100 ? 'You are not in the Top 100' : languageRating.place.toString(); + const languagePlaceToTop = languageRating.place > 100 ? 0 : 100 - languageRating.place; + const languagePercentage = createProgressBar(languagePlaceToTop); + const languageLink = document.createElement('a'); + languageLink.href = languageUrl; + languageLink.textContent = `Place in ${accountData.language}`; + tableBody.appendChild(createTableRow( + languageLink, + languagePlace, + languagePercentage + )); + + table.appendChild(tableBody); + return table; +} + +function createTasksList( + progressData: ProgressData, + accountData: AccountData, + locationRating: RatingData, + languageRating: RatingData, + awardsData: AwardBlockData[] +): HTMLElement { + const tasksList = document.createElement('ul'); + tasksList.className = 'tasks-list'; + + // Progress to the next level + const matchToTheNext = progressData.toTheNext.match(/(\d+)/); + const countToTheNext = matchToTheNext ? (25 - parseInt(matchToTheNext[1], 10)) * 4 : 0; + const toTheNextPercentage = createProgressBar(countToTheNext); + const levelTask = document.createElement('li'); + levelTask.textContent = `${progressData.level}: ${progressData.toTheNext}. `; + levelTask.appendChild(toTheNextPercentage); + tasksList.appendChild(levelTask); + + // Location progress + const locationResult = determineTop(progressData.solved, locationRating); + const locationLi = document.createElement('li'); + locationLi.textContent = `${accountData.location}: ${locationResult.message}. `; + locationLi.appendChild(createProgressBar(locationResult.percentage)); + tasksList.appendChild(locationLi); + + // Language progress + const languageResult = determineTop(progressData.solved, languageRating); + const languageLi = document.createElement('li'); + languageLi.textContent = `${accountData.language}: ${languageResult.message}. `; + languageLi.appendChild(createProgressBar(languageResult.percentage)); + tasksList.appendChild(languageLi); + + // Award progress + const award = findAwardWithMaxMembers(awardsData); + if (award) { + const awardLi = document.createElement('li'); + const awardLink = document.createElement('a'); + awardLink.href = award.link; + awardLink.textContent = award.award; + awardLi.textContent = `Most unresolved award: `; + awardLi.appendChild(awardLink); + awardLi.append(` (${award.description}) by ${award.members}. `); + awardLi.appendChild(createProgressBar(award.percentage)); + tasksList.appendChild(awardLi); + } + + return tasksList; +} + +/** + * Generates HTML for the progress table. + * @param accountData - The account data. + * @param progressData - The progress data. + * @param locationUrl - The URL for the location rating. + * @param languageUrl - The URL for the language rating. + * @param euleriansPlace - The user's place in Eulerians' rating. + * @param locationRating - The location rating data. + * @param languageRating - The language rating data. + * @param awardsData - The awards data. + * @returns The generated HTMLElement (progress table container). + */ +export function generateProgressTableHTML( + accountData: AccountData, + progressData: ProgressData, + locationUrl: string, + languageUrl: string, + euleriansPlace: string, + locationRating: RatingData, + languageRating: RatingData, + awardsData: AwardBlockData[] +): HTMLElement { + const progressContainer = document.createElement('div'); + progressContainer.appendChild(createSectionHeader('Progress')); + progressContainer.appendChild(createProgressBar(progressData.percentage)); + progressContainer.appendChild(createProgressTable( + progressData, + euleriansPlace, + locationUrl, + languageUrl, + accountData, + locationRating, + languageRating + )); + + // Tasks section + const tasksHeader = document.createElement('h3'); + tasksHeader.textContent = 'Tasks'; + progressContainer.appendChild(tasksHeader); + progressContainer.appendChild(createTasksList( + progressData, + accountData, + locationRating, + languageRating, + awardsData + )); + + return progressContainer; +} diff --git a/helpers/ratingBlock.ts b/helpers/ratingBlock.ts new file mode 100644 index 0000000..adebb11 --- /dev/null +++ b/helpers/ratingBlock.ts @@ -0,0 +1,82 @@ +import { RatingData } from './types'; +import { createSectionHeader } from './commonBlocks'; + +function createTableRow(label: string, solvedCount: number, remaining: number): HTMLElement { + const row = document.createElement('tr'); + const cell1 = document.createElement('td'); + const cell2 = document.createElement('td'); + const cell3 = document.createElement('td'); + + cell1.textContent = label; + cell2.textContent = solvedCount.toString(); + cell3.textContent = `${remaining} problems away from ${label}`; + + row.appendChild(cell1); + row.appendChild(cell2); + row.appendChild(cell3); + return row; +} + +function createRatingTable(solved: number, rating: RatingData): HTMLElement { + const table = document.createElement('table'); + const tableBody = document.createElement('tbody'); + + const headerRow = document.createElement('tr'); + ['Competition', 'Solved', 'Remaining'].forEach(headerText => { + const headerCell = document.createElement('th'); + headerCell.textContent = headerText; + headerRow.appendChild(headerCell); + }); + tableBody.appendChild(headerRow); + + if (rating.place > 100) { + tableBody.appendChild(createTableRow('Top 100', rating.top100, rating.top100 - solved + 1)); + } + if (rating.place > 50) { + tableBody.appendChild(createTableRow('Top 50', rating.top50, rating.top50 - solved + 1)); + } + if (rating.place > 25) { + tableBody.appendChild(createTableRow('Top 25', rating.top25, rating.top25 - solved + 1)); + } + if (rating.place > 10) { + tableBody.appendChild(createTableRow('Top 10', rating.top10, rating.top10 - solved + 1)); + } + if (rating.place > 5) { + tableBody.appendChild(createTableRow('Top 5', rating.top5, rating.top5 - solved + 1)); + } + if (rating.place >= 1) { + tableBody.appendChild(createTableRow('Top 1', rating.top1, rating.top1 - solved + 1)); + } + + table.appendChild(tableBody); + return table; +} + +/** + * Generates HTML for the rating table. + * @param title - The title of the rating table. + * @param solved - The number of solved problems. + * @param rating - The rating data. + * @returns The generated HTMLElement (rating table container). + */ +export function generateRatingTableHTML(url: string, title: string, solved: number, rating: RatingData): HTMLElement { + const ratingContainer = document.createElement('div'); + + // Header with link + const header = document.createElement('h2'); + const textNode = document.createTextNode(`Progress in `); + header.appendChild(textNode); + const link = document.createElement('a'); + link.href = url; + link.textContent = `the ${title}'s rating`; + header.appendChild(link); + ratingContainer.appendChild(header); + + const place = rating.place > 100 ? 'You are not in the Top 100' : rating.place.toString(); + ratingContainer.appendChild(createSectionHeader(`Current place: ${place}`, 'h4')); + ratingContainer.appendChild(createSectionHeader(`Solved problems: ${solved}`, 'h5')); + ratingContainer.appendChild(createRatingTable(solved, rating)); + + return ratingContainer; +} + diff --git a/helpers/types.ts b/helpers/types.ts index 606e849..3bcd13a 100644 --- a/helpers/types.ts +++ b/helpers/types.ts @@ -66,6 +66,14 @@ export class AwardBlockData { public name: string, public awards: AwardData[] ) {} + + /** + * Calculates the number of completed awards in this block. + * @returns The number of completed awards. + */ + getCompletedCount(): number { + return this.awards.filter(award => award.isCompleted).length; + } } /** diff --git a/main.ts b/main.ts index 3e82096..4858748 100644 --- a/main.ts +++ b/main.ts @@ -9,20 +9,13 @@ export default class ProjectEulerStatsPlugin extends Plugin { this.addSettingTab(new ProjectEulerStatsSettingTab(this.app, this)); - this.registerDomEvent(document, 'click', (evt: MouseEvent) => { - console.log('click', evt); - }); - - this.registerInterval(window.setInterval(() => console.log('setInterval'), 5 * 60 * 1000)); - const session = this.settings.session_id; const keep_alive = this.settings.keep_alive; - this.registerMarkdownCodeBlockProcessor('euler-stats', async (source, el, ctx) => { + this.registerMarkdownCodeBlockProcessor('euler-stats', async (source, el, ctx) => { const stats = await fetchProgress(session, keep_alive); - const container = el.createEl('div'); - container.innerHTML = stats; + container.appendChild(stats); }); } diff --git a/manifest.json b/manifest.json index fdcd5d4..2eb4e84 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "project-euler-stats", "name": "Project Euler Stats", - "version": "1.0.0", + "version": "1.0.1", "minAppVersion": "0.15.0", "description": "Plugin for getting statistics from ProjectEuler.", "author": "Artem Korsakov",