blob: d804459e8404917de59d3f23eda55397515e027a [file] [log] [blame]
avm99963cbea3142019-03-28 00:48:15 +01001var mutationObserver, intersectionObserver, options;
2
avm99963af7860e2019-06-04 03:33:26 +02003function parseUrl(url) {
4 var forum_a = url.match(/forum\/([0-9]+)/i);
5 var thread_a = url.match(/thread\/([0-9]+)/i);
6
7 if (forum_a === null || thread_a === null) {
8 return false;
9 }
10
11 return {
avm99963b69eb3d2020-08-20 02:03:44 +020012 'forum': forum_a[1],
13 'thread': thread_a[1],
avm99963af7860e2019-06-04 03:33:26 +020014 };
15}
16
avm99963943b8492020-08-31 23:40:43 +020017function addProfileHistoryLink(node, type, query) {
18 var urlpart = encodeURIComponent('query=' + query);
19 var container = document.createElement('div');
20 container.style.margin = '3px 0';
21
22 var link = document.createElement('a');
23 link.setAttribute(
24 'href', 'https://support.google.com/s/community/search/' + urlpart);
25 link.innerText = chrome.i18n.getMessage('inject_previousposts_' + type);
26
27 container.appendChild(link);
avm9996306167752020-09-08 00:50:36 +020028 node.appendChild(container);
avm99963943b8492020-08-31 23:40:43 +020029}
30
avm99963847ee632019-03-27 00:57:44 +010031function mutationCallback(mutationList, observer) {
32 mutationList.forEach((mutation) => {
avm99963b69eb3d2020-08-20 02:03:44 +020033 if (mutation.type == 'childList') {
34 mutation.addedNodes.forEach(function(node) {
35 if (typeof node.classList !== 'undefined') {
36 if (options.thread && node.classList.contains('load-more-bar')) {
37 intersectionObserver.observe(
38 node.querySelector('.load-more-button'));
avm99963d0757252019-03-30 20:13:00 +010039 }
40
avm99963b69eb3d2020-08-20 02:03:44 +020041 if (options.threadall && node.classList.contains('load-more-bar')) {
42 intersectionObserver.observe(
43 node.querySelector('.load-all-button'));
avm999636d9c5fe2019-06-04 00:35:53 +020044 }
45
avm99963b69eb3d2020-08-20 02:03:44 +020046 if (options.history && ('parentNode' in node) &&
47 node.parentNode !== null && ('tagName' in node.parentNode) &&
48 node.parentNode.tagName == 'EC-USER') {
49 var nameElement = node.querySelector('.name span');
avm99963d0757252019-03-30 20:13:00 +010050 if (nameElement !== null) {
avm99963943b8492020-08-31 23:40:43 +020051 var forumId =
52 location.href.split('/forum/')[1].split('/')[0] || '0';
53
avm9996314116b02020-11-02 14:04:14 +010054 var name = escapeUsername(nameElement.textContent);
avm99963943b8492020-08-31 23:40:43 +020055 var query1 = encodeURIComponent(
avm99963ad65e752020-09-01 00:13:59 +020056 '(creator:"' + name + '" | replier:"' + name +
57 '") forum:' + forumId);
avm99963943b8492020-08-31 23:40:43 +020058 var query2 = encodeURIComponent(
avm99963ad65e752020-09-01 00:13:59 +020059 '(creator:"' + name + '" | replier:"' + name +
60 '") forum:any');
avm9996306167752020-09-08 00:50:36 +020061
62 var container = document.createElement('div');
63 container.classList.add('TWPT-previous-posts');
64
65 var badge = document.createElement('div');
66 badge.classList.add('TWPT-badge');
67 badge.setAttribute(
68 'title',
69 chrome.i18n.getMessage(
70 'inject_extension_badge_helper',
71 [chrome.i18n.getMessage('appName')]));
72
73 var badgeI = document.createElement('i');
74 badgeI.classList.add(
75 'material-icon-i', 'material-icons-extended');
76 badgeI.textContent = 'repeat';
77
78 badge.appendChild(badgeI);
79 container.appendChild(badge);
80
81 var linkContainer = document.createElement('div');
82 linkContainer.classList.add('TWPT-previous-posts--links');
83
84 addProfileHistoryLink(linkContainer, 'forum', query1);
85 addProfileHistoryLink(linkContainer, 'all', query2);
86
87 container.appendChild(linkContainer);
88
89 node.querySelector('.main-card-content').appendChild(container);
avm99963d0757252019-03-30 20:13:00 +010090 }
91 }
92 }
avm99963847ee632019-03-27 00:57:44 +010093 });
94 }
95 });
96}
97
avm99963adf90862020-04-12 13:27:45 +020098function intersectionCallback(entries, observer) {
avm99963847ee632019-03-27 00:57:44 +010099 entries.forEach(entry => {
100 if (entry.isIntersecting) {
101 entry.target.click();
102 }
103 });
104};
105
106var observerOptions = {
107 childList: true,
108 attributes: true,
avm99963b69eb3d2020-08-20 02:03:44 +0200109 subtree: true,
avm99963847ee632019-03-27 00:57:44 +0100110}
111
avm99963129fb502020-08-28 05:18:53 +0200112var intersectionOptions = {
113 root: document.querySelector('.scrollable-content'),
114 rootMargin: '0px',
115 threshold: 1.0,
116};
avm99963847ee632019-03-27 00:57:44 +0100117
avm99963129fb502020-08-28 05:18:53 +0200118chrome.storage.sync.get(null, function(items) {
119 options = items;
avm99963cbea3142019-03-28 00:48:15 +0100120
avm99963129fb502020-08-28 05:18:53 +0200121 mutationObserver = new MutationObserver(mutationCallback);
122 mutationObserver.observe(
123 document.querySelector('.scrollable-content'), observerOptions);
avm99963cbea3142019-03-28 00:48:15 +0100124
avm99963129fb502020-08-28 05:18:53 +0200125 intersectionObserver =
126 new IntersectionObserver(intersectionCallback, intersectionOptions);
avm99963122dc9b2019-03-30 18:44:18 +0100127
avm99963129fb502020-08-28 05:18:53 +0200128 if (options.fixedtoolbar) {
129 injectStyles(
avm999630bc113a2020-09-07 13:02:11 +0200130 'ec-bulk-actions{position: sticky; top: 0; background: var(--TWPT-primary-background, #fff); z-index: 96;}');
avm99963129fb502020-08-28 05:18:53 +0200131 }
avm99963ae6a26d2020-04-12 14:03:51 +0200132
avm99963129fb502020-08-28 05:18:53 +0200133 if (options.increasecontrast) {
avm999630bc113a2020-09-07 13:02:11 +0200134 injectStyles(
avm99963a2a06442020-11-25 21:11:10 +0100135 '.thread-summary.read:not(.checked){background: var(--TWPT-thread-read-background, #ecedee)!important;}');
avm99963129fb502020-08-28 05:18:53 +0200136 }
avm999630f9503f2020-07-27 13:56:52 +0200137
avm99963129fb502020-08-28 05:18:53 +0200138 if (options.stickysidebarheaders) {
139 injectStyles(
avm999630bc113a2020-09-07 13:02:11 +0200140 'material-drawer .main-header{background: var(--TWPT-drawer-background, #fff)!important; position: sticky; top: 0; z-index: 1;}');
141 }
142
143 if (options.ccdarktheme && options.ccdarktheme_mode == 'switch') {
144 injectStylesheet(
145 chrome.runtime.getURL('injections/ccdarktheme_switch.css'));
146
147 var darkThemeSwitch = document.createElement('material-button');
148 darkThemeSwitch.classList.add('TWPT-dark-theme');
149 darkThemeSwitch.setAttribute('button', '');
150 darkThemeSwitch.setAttribute(
151 'title', chrome.i18n.getMessage('inject_ccdarktheme_helper'));
152
153 darkThemeSwitch.addEventListener('click', e => {
154 chrome.storage.sync.get(null, currentOptions => {
155 currentOptions.ccdarktheme_switch_status =
156 !options.ccdarktheme_switch_status;
157 chrome.storage.sync.set(currentOptions, _ => {
158 location.reload();
159 });
160 });
161 });
162
163 var switchContent = document.createElement('div');
164 switchContent.classList.add('content');
165
166 var icon = document.createElement('material-icon');
167
168 var i = document.createElement('i');
169 i.classList.add('material-icon-i', 'material-icons-extended');
170 i.textContent = 'brightness_4';
171
172 icon.appendChild(i);
173 switchContent.appendChild(icon);
174 darkThemeSwitch.appendChild(switchContent);
175
avm9996306167752020-09-08 00:50:36 +0200176 var badgeContent = document.createElement('div');
177 badgeContent.classList.add('TWPT-badge');
178 badgeContent.setAttribute(
179 'title', chrome.i18n.getMessage('inject_extension_badge_helper', [
180 chrome.i18n.getMessage('appName')
181 ]));
182
183 var badgeI = document.createElement('i');
184 badgeI.classList.add('material-icon-i', 'material-icons-extended');
185 badgeI.textContent = 'repeat';
186
187 badgeContent.appendChild(badgeI);
188 darkThemeSwitch.appendChild(badgeContent);
189
avm999630bc113a2020-09-07 13:02:11 +0200190 var rightControl = document.querySelector('header .right-control');
191 rightControl.style.width =
192 (parseInt(window.getComputedStyle(rightControl).width) + 58) + 'px';
193 rightControl.insertAdjacentElement('afterbegin', darkThemeSwitch);
avm99963129fb502020-08-28 05:18:53 +0200194 }
avm99963129942f2020-09-08 02:07:18 +0200195
196 if (options.ccforcehidedrawer) {
197 var drawer = document.querySelector('material-drawer');
198 if (drawer !== null && drawer.classList.contains('mat-drawer-expanded')) {
199 document.querySelector('.material-drawer-button').click();
200 }
201 }
avm99963129fb502020-08-28 05:18:53 +0200202});