Skip to content
Snippets Groups Projects
Commit 033f350b authored by jurgenhaas's avatar jurgenhaas
Browse files

Re-use div-container if already present and re-check content for dynamically loaded content

parent 447ea9f5
No related branches found
No related tags found
1 merge request!1Update readme
...@@ -16,6 +16,7 @@ function TogglButtonGM(selector, renderer) { ...@@ -16,6 +16,7 @@ function TogglButtonGM(selector, renderer) {
$newApiUrl = "https://www.toggl.com/api/v8", $newApiUrl = "https://www.toggl.com/api/v8",
$legacyApiUrl = "https://new.toggl.com/api/v8", $legacyApiUrl = "https://new.toggl.com/api/v8",
$triedAlternative = false, $triedAlternative = false,
$addedDynamicListener = false,
$api_token = null, $api_token = null,
$default_wid = null, $default_wid = null,
$clientMap = {}, $clientMap = {},
...@@ -119,34 +120,48 @@ function TogglButtonGM(selector, renderer) { ...@@ -119,34 +120,48 @@ function TogglButtonGM(selector, renderer) {
if (selector == null) { if (selector == null) {
return; return;
} }
var i, len, elems = document.querySelectorAll(selector); var i, len, elems = document.querySelectorAll(selector + ':not(.toggl)');
for (i = 0, len = elems.length; i < len; i += 1) { for (i = 0, len = elems.length; i < len; i += 1) {
elems[i].classList.add('toggl'); elems[i].classList.add('toggl');
$instances[i] = new TogglButtonGMInstance(renderer(elems[i])); $instances[i] = new TogglButtonGMInstance(renderer(elems[i]));
} }
document.addEventListener('TogglButtonGMUpdateStatus', function() {
GM_xmlhttpRequest({ if (!$addedDynamicListener) {
method: "GET", $addedDynamicListener = true;
url: $activeApiUrl + "/time_entries/current",
headers: { document.addEventListener('TogglButtonGMUpdateStatus', function() {
"Authorization": "Basic " + btoa($api_token + ':api_token') GM_xmlhttpRequest({
}, method: "GET",
onload: function (result) { url: $activeApiUrl + "/time_entries/current",
if (result.status === 200) { headers: {
var resp = JSON.parse(result.responseText), "Authorization": "Basic " + btoa($api_token + ':api_token')
data = resp.data || false; },
if (data) { onload: function (result) {
for (i in $instances) { if (result.status === 200) {
$instances[i].checkCurrentLinkStatus(data); var resp = JSON.parse(result.responseText),
data = resp.data || false;
if (data) {
for (i in $instances) {
$instances[i].checkCurrentLinkStatus(data);
}
} }
} }
} }
} });
}); });
});
window.addEventListener('focus', function() { window.addEventListener('focus', function() {
document.dispatchEvent(new CustomEvent('TogglButtonGMUpdateStatus')); document.dispatchEvent(new CustomEvent('TogglButtonGMUpdateStatus'));
}); });
if (selector !== 'body') {
document.body.addEventListener('DOMSubtreeModified', function () {
setTimeout(function () {
render(selector, renderer);
}, 1000);
});
}
}
} }
this.clickLinks = function() { this.clickLinks = function() {
...@@ -341,13 +356,26 @@ function TogglButtonGM(selector, renderer) { ...@@ -341,13 +356,26 @@ function TogglButtonGM(selector, renderer) {
document.querySelector('body').classList.add('toggl-button-available'); document.querySelector('body').classList.add('toggl-button-available');
if (params.targetSelectors == undefined) { if (params.targetSelectors == undefined) {
var wrapper = document.createElement('div'), var wrapper,
existingWrapper = document.querySelectorAll('#toggl-button-wrapper'),
content = createTag('div', 'content'); content = createTag('div', 'content');
wrapper.id = 'toggl-button-wrapper';
content.appendChild($link); content.appendChild($link);
content.appendChild(createProjectSelect()); content.appendChild(createProjectSelect());
wrapper.appendChild(content); if (existingWrapper.length > 0) {
document.querySelector('body').appendChild(wrapper); console.log('Re-use existing toggl');
wrapper = existingWrapper[0];
while (wrapper.firstChild) {
wrapper.removeChild(wrapper.firstChild);
}
wrapper.appendChild(content);
}
else {
console.log('Create new toggl');
wrapper = document.createElement('div');
wrapper.id = 'toggl-button-wrapper';
wrapper.appendChild(content);
document.querySelector('body').appendChild(wrapper);
}
} else { } else {
var elem = params.targetSelectors.context || document; var elem = params.targetSelectors.context || document;
if (params.targetSelectors.link != undefined) { if (params.targetSelectors.link != undefined) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment