| import {createPlainTooltip} from '../../../../common/tooltip.js'; |
| import {kItemMetadataState, kItemMetadataStateI18n} from '../consts.js'; |
| |
| export default class StatesExtraInfoService { |
| static getPendingStateChip(endPendingStateTimestampMicros) { |
| const endPendingStateTimestamp = |
| Math.floor(endPendingStateTimestampMicros / 1e3); |
| const now = Date.now(); |
| if (!endPendingStateTimestampMicros || endPendingStateTimestamp < now) |
| return [null, null]; |
| |
| const span = document.createElement('span'); |
| span.textContent = |
| chrome.i18n.getMessage('inject_extrainfo_message_pendingstate'); |
| |
| const date = new Date(endPendingStateTimestamp).toLocaleString(); |
| const pendingTooltip = createPlainTooltip( |
| span, |
| chrome.i18n.getMessage( |
| 'inject_extrainfo_message_pendingstate_tooltip', [date]), |
| false); |
| return [span, pendingTooltip]; |
| } |
| |
| static getLiveReviewStatusChip(liveReviewStatus) { |
| const verdict = liveReviewStatus?.['1']; |
| if (!verdict) return [null, null]; |
| |
| const [label, labelClass] = this.getLiveReviewStatusLabel(verdict); |
| if (!label || !labelClass) return [null, null]; |
| |
| const reviewedBy = liveReviewStatus?.['2']; |
| const timestamp = liveReviewStatus?.['3']; |
| const date = (new Date(Math.floor(timestamp / 1e3))).toLocaleString(); |
| |
| let a = document.createElement('a'); |
| a.href = 'https://support.google.com/s/community/user/' + reviewedBy; |
| a.classList.add(labelClass); |
| a.textContent = chrome.i18n.getMessage( |
| 'inject_extrainfo_message_livereviewverdict', |
| [chrome.i18n.getMessage( |
| 'inject_extrainfo_message_livereviewverdict_' + label)]); |
| let liveReviewTooltip = createPlainTooltip(a, date, false); |
| return [a, liveReviewTooltip]; |
| } |
| |
| static getLiveReviewStatusLabel(verdict) { |
| let label, labelClass; |
| switch (verdict) { |
| case 1: // LIVE_REVIEW_RELEVANT |
| label = 'relevant'; |
| labelClass = 'TWPT-extrainfo-good'; |
| break; |
| |
| case 2: // LIVE_REVIEW_OFF_TOPIC |
| label = 'offtopic'; |
| labelClass = 'TWPT-extrainfo-bad'; |
| break; |
| |
| case 3: // LIVE_REVIEW_ABUSE |
| label = 'abuse'; |
| labelClass = 'TWPT-extrainfo-bad'; |
| break; |
| |
| default: |
| return [null, null]; |
| } |
| return [label, labelClass]; |
| } |
| |
| static getMetadataChips(itemMetadata) { |
| return [ |
| this.getStateChip(itemMetadata), |
| this.getShadowBlockChip(itemMetadata), |
| ].filter(chip => chip !== null); |
| } |
| |
| static getStateChip(itemMetadata) { |
| const state = itemMetadata?.['1']; |
| if (!state || state == 1) return null; |
| |
| const stateI18nKey = |
| 'inject_extrainfo_message_state_' + kItemMetadataStateI18n[state]; |
| const stateLocalized = chrome.i18n.getMessage(stateI18nKey) ?? state; |
| |
| const span = document.createElement('span'); |
| span.textContent = chrome.i18n.getMessage( |
| 'inject_extrainfo_message_state', [stateLocalized]); |
| span.title = kItemMetadataState[state] ?? state; |
| return span; |
| } |
| |
| static getShadowBlockChip(itemMetadata) { |
| const shadowBlockInfo = itemMetadata?.['10']; |
| const blockedTimestampMicros = shadowBlockInfo?.['2']; |
| if (!blockedTimestampMicros) return null; |
| |
| const isBlocked = shadowBlockInfo?.['1']; |
| let span = document.createElement('span'); |
| span.textContent = chrome.i18n.getMessage( |
| 'inject_extrainfo_message_shadowblock' + |
| (isBlocked ? 'active' : 'notactive')); |
| if (isBlocked) span.classList.add('TWPT-extrainfo-bad'); |
| return span; |
| } |
| } |