blob: 14556b814151911169d2d5716a0ecaa6331b8fe1 [file] [log] [blame]
var mutationObserver, intersectionObserver, options;
function parseUrl(url) {
var forum_a = url.match(/forum\/([0-9]+)/i);
var thread_a = url.match(/thread\/([0-9]+)/i);
if (forum_a === null || thread_a === null) {
return false;
}
return {
'forum': forum_a[1],
'thread': thread_a[1],
};
}
function addProfileHistoryLink(node, type, query) {
var urlpart = encodeURIComponent('query=' + query);
var container = document.createElement('div');
container.style.margin = '3px 0';
var link = document.createElement('a');
link.setAttribute(
'href', 'https://support.google.com/s/community/search/' + urlpart);
link.innerText = chrome.i18n.getMessage('inject_previousposts_' + type);
container.appendChild(link);
node.querySelector('.main-card-content').appendChild(container);
}
function mutationCallback(mutationList, observer) {
mutationList.forEach((mutation) => {
if (mutation.type == 'childList') {
mutation.addedNodes.forEach(function(node) {
if (typeof node.classList !== 'undefined') {
if (options.thread && node.classList.contains('load-more-bar')) {
intersectionObserver.observe(
node.querySelector('.load-more-button'));
}
if (options.threadall && node.classList.contains('load-more-bar')) {
intersectionObserver.observe(
node.querySelector('.load-all-button'));
}
if (options.history && ('parentNode' in node) &&
node.parentNode !== null && ('tagName' in node.parentNode) &&
node.parentNode.tagName == 'EC-USER') {
var nameElement = node.querySelector('.name span');
if (nameElement !== null) {
var forumId =
location.href.split('/forum/')[1].split('/')[0] || '0';
var name = escapeUsername(nameElement.innerHTML);
var query1 = encodeURIComponent(
'(creator:"' + name + '" | replier:"' + name + '") forum:'+forumId);
var query2 = encodeURIComponent(
'(creator:"' + name + '" | replier:"' + name + '") forum:any');
addProfileHistoryLink(node, 'forum', query1);
addProfileHistoryLink(node, 'all', query2);
}
}
}
});
}
});
}
function intersectionCallback(entries, observer) {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.click();
}
});
};
var observerOptions = {
childList: true,
attributes: true,
subtree: true,
}
var intersectionOptions = {
root: document.querySelector('.scrollable-content'),
rootMargin: '0px',
threshold: 1.0,
};
chrome.storage.sync.get(null, function(items) {
options = items;
mutationObserver = new MutationObserver(mutationCallback);
mutationObserver.observe(
document.querySelector('.scrollable-content'), observerOptions);
intersectionObserver =
new IntersectionObserver(intersectionCallback, intersectionOptions);
if (options.fixedtoolbar) {
injectStyles(
'ec-bulk-actions{position: sticky; top: 0; background: white; z-index: 96;}');
}
if (options.increasecontrast) {
injectStyles('.thread-summary.read{background: #ecedee!important;}');
}
if (options.stickysidebarheaders) {
injectStyles(
'material-drawer .main-header{background: #fff; position: sticky; top: 0; z-index: 1;}');
}
if (options.profileindicator) {
injectScript(
chrome.runtime.getURL('injections/profileindicator_inject.js'));
injectStylesheet(
chrome.runtime.getURL('injections/profileindicator_inject.css'));
// In order to pass i18n strings to the injected script, which doesn't have
// access to the chrome.i18n API.
window.addEventListener('geti18nString', evt => {
var request = evt.detail;
var response = {
string: chrome.i18n.getMessage(request.msg),
requestId: request.id
};
window.dispatchEvent(
new CustomEvent('sendi18nString', {detail: response}));
});
}
});