| import {getOptions} from '../../../common/optionsUtils.js'; |
| import {softRefreshView} from '../utils/common.js'; |
| |
| import * as consts from './constants.js'; |
| |
| export default class ThreadToolbar { |
| constructor() { |
| this.getOptions().then(options => { |
| this.updateBodyClasses(options); |
| }); |
| } |
| |
| updateBodyClasses(options) { |
| if (this.shouldSeeToolbar(options)) |
| document.body.classList.add('TWPT-threadtoolbar-shown'); |
| else |
| document.body.classList.remove('TWPT-threadtoolbar-shown'); |
| |
| if (options.flattenthreads && options.flattenthreads_switch_enabled) |
| document.body.classList.add('TWPT-flattenthreads-enabled'); |
| else |
| document.body.classList.remove('TWPT-flattenthreads-enabled'); |
| } |
| |
| shouldSeeToolbar(options) { |
| return Object.values(options).some(option => !!option); |
| } |
| |
| getOptions() { |
| return getOptions(['flattenthreads', 'flattenthreads_switch_enabled']); |
| } |
| |
| inject(node, options) { |
| const toolbar = document.createElement('twpt-thread-toolbar-inject'); |
| toolbar.setAttribute('options', JSON.stringify(options)); |
| toolbar.addEventListener(consts.kEventFlattenThreadsUpdated, e => { |
| const enabled = e.detail?.enabled; |
| if (typeof enabled != 'boolean') return; |
| chrome.storage.sync.set({flattenthreads_switch_enabled: enabled}, _ => { |
| softRefreshView(); |
| }); |
| }); |
| node.parentElement.insertBefore(toolbar, node); |
| } |
| |
| injectIfApplicable(node) { |
| this.getOptions().then(options => { |
| this.updateBodyClasses(options); |
| if (!this.shouldSeeToolbar(options)) return; |
| return this.inject(node, options); |
| }); |
| } |
| |
| shouldInject(node) { |
| return node.matches(consts.kRepliesSectionSelector); |
| } |
| } |