Adrià Vilanova MartÃnez | 0d92a0c | 2023-11-06 01:37:20 +0100 | [diff] [blame^] | 1 | import {MDCTooltip} from '@material/tooltip'; |
| 2 | |
| 3 | import {parseUrl} from '../../../../common/commonUtils.js'; |
| 4 | import {createExtBadge} from '../../utils/common.js'; |
| 5 | import {kItemMetadataState, kItemMetadataStateI18n} from '../consts.js'; |
| 6 | import ThreadExtraInfoService from '../services/thread.js'; |
| 7 | |
| 8 | import BaseExtraInfoInjection from './base.js'; |
| 9 | |
| 10 | export default class ThreadListExtraInfoInjection extends |
| 11 | BaseExtraInfoInjection { |
| 12 | getInjectionDetails(li) { |
| 13 | const headerContent = li.querySelector( |
| 14 | 'ec-thread-summary .main-header .header a.header-content'); |
| 15 | if (headerContent === null) { |
| 16 | throw new Error( |
| 17 | `extraInfo: Header is not present in the thread item's DOM.`); |
| 18 | } |
| 19 | |
| 20 | const threadInfo = parseUrl(headerContent.href); |
| 21 | if (threadInfo === false) |
| 22 | throw new Error(`extraInfo: Thread's link cannot be parsed.`); |
| 23 | |
| 24 | return { |
| 25 | li, |
| 26 | threadInfo, |
| 27 | isExpanded: false, |
| 28 | }; |
| 29 | } |
| 30 | |
| 31 | inject(threads, injectionDetails) { |
| 32 | const thread = ThreadExtraInfoService.getThreadFromThreadList( |
| 33 | threads, injectionDetails.threadInfo); |
| 34 | |
| 35 | const state = thread?.['2']?.['12']?.['1']; |
| 36 | if (!state || [1, 13, 18, 9].includes(state)) return; |
| 37 | |
| 38 | const [label, badgeTooltip] = this.createLabelElement(state); |
| 39 | const authorLine = this.getAuthorLine(injectionDetails.li); |
| 40 | authorLine.prepend(label); |
| 41 | |
| 42 | new MDCTooltip(badgeTooltip); |
| 43 | } |
| 44 | |
| 45 | createLabelElement(state) { |
| 46 | const label = document.createElement('div'); |
| 47 | label.classList.add('TWPT-label'); |
| 48 | |
| 49 | const [badge, badgeTooltip] = createExtBadge(); |
| 50 | |
| 51 | let span = document.createElement('span'); |
| 52 | const stateI18nKey = |
| 53 | 'inject_extrainfo_message_state_' + kItemMetadataStateI18n[state]; |
| 54 | span.textContent = chrome.i18n.getMessage(stateI18nKey) ?? state; |
| 55 | span.title = kItemMetadataState[state] ?? state; |
| 56 | |
| 57 | label.append(badge, span); |
| 58 | |
| 59 | return [label, badgeTooltip]; |
| 60 | } |
| 61 | |
| 62 | getAuthorLine(li) { |
| 63 | const authorLine = li.querySelector( |
| 64 | 'ec-thread-summary .header-content .top-row .author-line'); |
| 65 | if (!authorLine) { |
| 66 | throw new Error( |
| 67 | `extraInfo: Author line is not present in the thread item's DOM.`); |
| 68 | } |
| 69 | return authorLine; |
| 70 | } |
| 71 | } |