From fa16c3165c97686a625aa612e71918b77f5da1c2 Mon Sep 17 00:00:00 2001 From: konomi_casa Date: Thu, 30 Jan 2020 18:28:55 +0100 Subject: [PATCH 01/11] Added background colour for C# language in medium.css (ignore VisualStudio Files in gitignore) --- .gitignore | 1 + theme/medium.css | 3 +++ 2 files changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 401a30d7..5787cefe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ widget.js _site cards +/.vs diff --git a/theme/medium.css b/theme/medium.css index 3627cfae..5673cefc 100644 --- a/theme/medium.css +++ b/theme/medium.css @@ -187,3 +187,6 @@ body.ready { .repo-card .Objective-C { background: #438eff; } +.repo-card .C\# { + background: #178600; +} From 8d96a84b3af94db8b9901c655a92f08bef9c3524 Mon Sep 17 00:00:00 2001 From: konomi_casa Date: Thu, 30 Jan 2020 19:14:09 +0100 Subject: [PATCH 02/11] . --- theme/default.css | 1 + 1 file changed, 1 insertion(+) diff --git a/theme/default.css b/theme/default.css index fe080853..050cd883 100644 --- a/theme/default.css +++ b/theme/default.css @@ -185,3 +185,4 @@ body.ready { font-size: 12px; padding-right: 5px; } + From cacb56c7df1bee4b0515c2edd3fbde4caaa67d24 Mon Sep 17 00:00:00 2001 From: konomi_casa Date: Tue, 4 Feb 2020 18:34:17 +0100 Subject: [PATCH 03/11] -New recentRepoCard(): Gets the most recently updated repo of the user -Extracted the generation of the repo card into generateRepoCard() to be used in repoCard() and recentRepoCard() -Modified linky() to accept an operation mode. Depending on the mode will add the resulting card to the body of the current document, or will replace a placeholder div --- src/card.js | 449 ++++++++++++++++++++++++++++------------------------ 1 file changed, 242 insertions(+), 207 deletions(-) diff --git a/src/card.js b/src/card.js index bdea690d..9de03af1 100644 --- a/src/card.js +++ b/src/card.js @@ -1,223 +1,258 @@ function querystring() { - var href = window.location.href, kv; - var params = href.slice(href.indexOf('?') + 1).split('&'); - var qs = []; - - for (i = 0; i < params.length; i++) { - kv = params[i].split('='); - qs.push(kv[0]); - qs[kv[0]] = kv[1]; - } - return qs; + var href = window.location.href, kv; + var params = href.slice(href.indexOf('?') + 1).split('&'); + var qs = []; + + for (i = 0; i < params.length; i++) { + kv = params[i].split('='); + qs.push(kv[0]); + qs[kv[0]] = kv[1]; + } + return qs; } var qs = querystring(); -(function(d) { - var baseurl = 'https://api.github.com/', i; +(function (d) { + var baseurl = 'https://api.github.com/', i; - function store(key, value) { - try { - if (window.localStorage) { - if (value) { - value._timestamp = new Date().valueOf(); - localStorage[key] = JSON.stringify(value); - } else { - var ret = localStorage[key]; - if (ret) { - return JSON.parse(ret); - } - return null; - } - } - } catch(e) {} - } - - function valueof(data, key) { - var ret = data; - var bits = key.split('.'); - for (var j = 0; j < bits.length; j++) { - if (ret) { - ret = ret[bits[j]]; - } else { - break; - } + function store(key, value) { + try { + if (window.localStorage) { + if (value) { + value._timestamp = new Date().valueOf(); + localStorage[key] = JSON.stringify(value); + } else { + var ret = localStorage[key]; + if (ret) { + return JSON.parse(ret); + } + return null; + } + } + } catch (e) { } } - if (ret === undefined || ret === null) { - return ''; + + function valueof(data, key) { + var ret = data; + var bits = key.split('.'); + for (var j = 0; j < bits.length; j++) { + if (ret) { + ret = ret[bits[j]]; + } else { + break; + } + } + if (ret === undefined || ret === null) { + return ''; + } + return ret; } - return ret; - } - - function template(type, data) { - var t = d.getElementById(type + '-card'); - var regex = /{([^}]+)}/g; - var text = t.innerHTML; - var m = text.match(regex); - for (i = 0; i < m.length; i++) { - text = text.replace(m[i], valueof(data, m[i].slice(1, -1))); + + function template(type, data) { + var t = d.getElementById(type + '-card'); + var regex = /{([^}]+)}/g; + var text = t.innerHTML; + var m = text.match(regex); + for (i = 0; i < m.length; i++) { + text = text.replace(m[i], valueof(data, m[i].slice(1, -1))); + } + return text; } - return text; - } - - function request(url, callback) { - var cache = store(url); - if (cache && cache._timestamp) { - // cache in 10s - if (new Date().valueOf() - cache._timestamp < 10000) { - return callback(cache); - } + + function request(url, callback) { + var cache = store(url); + if (cache && cache._timestamp) { + // cache in 10s + if (new Date().valueOf() - cache._timestamp < 10000) { + return callback(cache); + } + } + if (qs.client_id && qs.client_secret) { + url += '?client_id=' + qs.client_id + '&client_secret=' + qs.client_secret; + } + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.onload = function () { + callback(JSON.parse(xhr.response)); + }; + xhr.send(); } - if (qs.client_id && qs.client_secret) { - url += '?client_id=' + qs.client_id + '&client_secret=' + qs.client_secret; + + //mode 0 just adds the card at the bottom of the body (default) + //mode 1 replaces the first div in the document + function linky(card, mode=0) { + var links = card.getElementsByTagName('a'); + for (i = 0; i < links.length; i++) { + (function (link) { + link.target = '_' + (qs.target || 'top'); + })(links[i]); + } + + if (mode === 1) { + var ph = d.getElementById('placeholder'); + card.height = ph.height; + card.length = ph.length; + ph.parentNode.replaceChild(card, ph); + } else { + d.body.appendChild(card); + } + + d.body.className = 'ready'; + if (parent !== self && parent.postMessage) { + var height = Math.max( + d.body.scrollHeight, + d.documentElement.scrollHeight, + d.body.offsetHeight, + d.documentElement.offsetHeight, + d.body.clientHeight, + d.documentElement.clientHeight + ); + parent.postMessage({ + height: height, + sender: qs.identity || '*' + }, '*'); + } } - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, true); - xhr.onload = function() { - callback(JSON.parse(xhr.response)); - }; - xhr.send(); - } - - function linky(card, identity) { - var links = card.getElementsByTagName('a'); - for (i = 0; i < links.length; i++) { - (function(link) { - link.target = '_' + (qs.target || 'top'); - })(links[i]); + + function userCard(user) { + var url = baseurl + 'users/' + user; + request(url, function (data) { + data = data || {}; + var message = data.message; + var defaults = '0'; + if (message) { + data = store(url) || data; + defaults = '?'; + } else { + store(url, data); + } + data.login = user; + data.name = escape(data.name || user); + data.public_repos = numberic(data.public_repos) || defaults; + data.public_gists = numberic(data.public_gists) || defaults; + data.followers = numberic(data.followers) || defaults; + + var job = 'Not available for hire.'; + if (data.hireable) { + var link = ''; + if (data.email) { + link = 'mailto:' + data.email; + } else if (data.blog) { + link = data.blog; + } else { + link = data.html_url; + } + job = 'Available for hire.'; + } + if (message) { + job = message; + } + data.job = job; + + var card = d.createElement('div'); + card.className = 'github-card user-card'; + card.innerHTML = template('user', data); + linky(card); + }); } - d.body.appendChild(card); - d.body.className = 'ready'; - if (parent !== self && parent.postMessage) { - var height = Math.max( - d.body.scrollHeight, - d.documentElement.scrollHeight, - d.body.offsetHeight, - d.documentElement.offsetHeight, - d.body.clientHeight, - d.documentElement.clientHeight - ); - parent.postMessage({ - height: height, - sender: qs.identity || '*' - }, '*'); + + function repoCard(user, repo) { + var url = baseurl + 'repos/' + user + '/' + repo; + request(url, generateRepoCard(data)); } - } - - function userCard(user) { - var url = baseurl + 'users/' + user; - request(url, function(data) { - data = data || {}; - var message = data.message; - var defaults = '0'; - if (message) { - data = store(url) || data; - defaults = '?'; - } else { - store(url, data); - } - data.login = user; - data.name = escape(data.name || user); - data.public_repos = numberic(data.public_repos) || defaults; - data.public_gists = numberic(data.public_gists) || defaults; - data.followers = numberic(data.followers) || defaults; - - var job = 'Not available for hire.'; - if (data.hireable) { - var link = ''; - if (data.email) { - link = 'mailto:' + data.email; - } else if (data.blog) { - link = data.blog; + + //Returns the most recently updated repository's card + function recentRepoCard(user) { + var url = ''; + var urlRepos = baseurl + 'users/' + user + '/repos';//api.github.com/users/USERNAME/repos + request(urlRepos, function (data) { + var i; + var maxDate = data[0]; + for (i = 1; i < data.length; i++) { + if (maxDate.updated_at < data[i].updated_at) { + maxDate = data[i]; + } + } + url = maxDate.url; + + request(url, generateRepoCard(data)); + }); + } + + function generateRepoCard(data) { + data = data || {}; + var message = data.message; + var defaults = '0'; + if (message) { + data = store(url) || data; + defaults = '?'; + } else { + store(url, data); + } + data.login = user; + + data.avatar_url = ''; + if (data.owner && data.owner.avatar_url) { + data.avatar_url = data.owner.avatar_url; + } + data.forks_count = numberic(data.forks_count) || defaults; + data.watchers_count = numberic(data.watchers_count) || defaults; + if (data.fork) { + data.action = 'Forked by '; + } else { + data.action = 'Created by '; + } + var description = data.description; + if (!description && data.source) { + description = data.source.description; + } + if (!description && message) { + description = message; + } + if (!description) { + description = ''; + } + data.description = escape(description) || 'No description'; + var homepage = data.homepage; + if (!homepage && data.source) { + homepage = data.source.homepage; + } + if (homepage) { + data.homepage = ' ' + homepage.replace(/https?:\/\//, '').replace(/\/$/, '') + ''; } else { - link = data.html_url; - } - job = 'Available for hire.'; - } - if (message) { - job = message; - } - data.job = job; - - var card = d.createElement('div'); - card.className = 'github-card user-card'; - card.innerHTML = template('user', data); - linky(card); - }); - } - - function repoCard(user, repo) { - var url = baseurl + 'repos/' + user + '/' + repo; - request(url, function(data) { - data = data || {}; - var message = data.message; - var defaults = '0'; - if (message) { - data = store(url) || data; - defaults = '?'; - } else { - store(url, data); - } - data.login = user; - - data.avatar_url = ''; - if (data.owner && data.owner.avatar_url) { - data.avatar_url = data.owner.avatar_url; - } - data.forks_count = numberic(data.forks_count) || defaults; - data.watchers_count = numberic(data.watchers_count) || defaults; - if (data.fork) { - data.action = 'Forked by '; - } else { - data.action = 'Created by '; - } - var description = data.description; - if (!description && data.source) { - description = data.source.description; - } - if (!description && message) { - description = message; - } - data.description = escape(description) || 'No description'; - var homepage = data.homepage; - if (!homepage && data.source) { - homepage = data.source.homepage; - } - if (homepage) { - data.homepage = ' ' + homepage.replace(/https?:\/\//, '').replace(/\/$/, '') + ''; - } else { - data.homepage = ''; - } - - var card = d.createElement('div'); - card.className = 'github-card repo-card'; - card.innerHTML = template('repo', data); - linky(card); - }); - } - - function errorCard() { - } - - function numberic(num) { - if (!num) return null; - if (num === 1000) return '1k'; - if (num < 1000) return num; - num = num / 1000; - if (num > 10) return parseInt(num, 10) + 'k'; - return num.toFixed(1) + 'k'; - } - - if (!qs.user) { - errorCard(); - } else if (qs.repo) { - repoCard(qs.user, qs.repo); - } else { - userCard(qs.user); - } - - function escape(text) { - return text.replace(//g, '>'); - } + data.homepage = ''; + } + + var card = d.createElement('div'); + card.className = 'github-card repo-card'; + card.innerHTML = template('repo', data); + linky(card); + } + + + function errorCard() { + } + + function numberic(num) { + if (!num) return null; + if (num === 1000) return '1k'; + if (num < 1000) return num; + num = num / 1000; + if (num > 10) return parseInt(num, 10) + 'k'; + return num.toFixed(1) + 'k'; + } + + if (!qs.user) { + errorCard(); + } else if (qs.repo) { + repoCard(qs.user, qs.repo); + } else { + userCard(qs.user); + } + + function escape(text) { + return text.replace(//g, '>'); + } })(document); From 67ffc0a540586b03e755e7b107ce8efcf2958bdc Mon Sep 17 00:00:00 2001 From: konomi_casa Date: Tue, 4 Feb 2020 18:56:01 +0100 Subject: [PATCH 04/11] -Modified queryString() so in can take parameters from a placeholder with the atribute "datasrc" in case there is any. --- src/card.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/card.js b/src/card.js index 9de03af1..29731953 100644 --- a/src/card.js +++ b/src/card.js @@ -1,6 +1,19 @@ function querystring() { + var params; + var ph = d.getElementById("placeholder"); + ds = ph.getAttribute("datasrc"); + + var href = window.location.href, kv; - var params = href.slice(href.indexOf('?') + 1).split('&'); + + //Get the parameters from a placeholder in case there is any + //If not, use the url + if (ph && ph.getAttribute("datasrc")) { + params = ph.getAttribute("datasrc").split('&'); + } else { + params = href.slice(href.indexOf('?') + 1).split('&'); + } + var qs = []; for (i = 0; i < params.length; i++) { @@ -81,7 +94,7 @@ var qs = querystring(); //mode 0 just adds the card at the bottom of the body (default) //mode 1 replaces the first div in the document - function linky(card, mode=0) { + function linky(card, mode = 0) { var links = card.getElementsByTagName('a'); for (i = 0; i < links.length; i++) { (function (link) { @@ -229,7 +242,7 @@ var qs = querystring(); card.innerHTML = template('repo', data); linky(card); } - + function errorCard() { } From 7d6012028ea242ad8cc273d38a1916f6f77c5e09 Mon Sep 17 00:00:00 2001 From: konomi_casa Date: Tue, 4 Feb 2020 19:03:11 +0100 Subject: [PATCH 05/11] -Modification of generateRepoCard() to call linky in accordance with the presence of a placeholder --- src/card.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/card.js b/src/card.js index 29731953..36021244 100644 --- a/src/card.js +++ b/src/card.js @@ -1,8 +1,6 @@ function querystring() { var params; var ph = d.getElementById("placeholder"); - ds = ph.getAttribute("datasrc"); - var href = window.location.href, kv; @@ -240,7 +238,13 @@ var qs = querystring(); var card = d.createElement('div'); card.className = 'github-card repo-card'; card.innerHTML = template('repo', data); - linky(card); + + //In case of placeholder, linky is called in mode 1 (replacing placeholder) + if (d.getElementById("placeholder")) { + linky(card, 1); + } else { + linky(card); + } } @@ -260,6 +264,15 @@ var qs = querystring(); errorCard(); } else if (qs.repo) { repoCard(qs.user, qs.repo); + } else if (qs.mode) { + switch (qs.mode) { + case "recent": + recentRepoCard(qs.user); + break; + default: + //posible future modes + break; + } } else { userCard(qs.user); } From b9012c9aee3825738056569c9f150fc50a388456 Mon Sep 17 00:00:00 2001 From: konomi_casa Date: Tue, 4 Feb 2020 20:31:00 +0100 Subject: [PATCH 06/11] -Bug fixes. --- src/card.js | 61 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 24 deletions(-) diff --git a/src/card.js b/src/card.js index 36021244..a4437561 100644 --- a/src/card.js +++ b/src/card.js @@ -1,31 +1,34 @@ -function querystring() { - var params; - var ph = d.getElementById("placeholder"); +(function (d) { + var baseurl = 'https://api.github.com/', i; - var href = window.location.href, kv; - //Get the parameters from a placeholder in case there is any - //If not, use the url - if (ph && ph.getAttribute("datasrc")) { - params = ph.getAttribute("datasrc").split('&'); - } else { - params = href.slice(href.indexOf('?') + 1).split('&'); - } + //Parameters of the url: [user, repo, mode] + //Posible mode values: "recent". Posibility to add new modes. + //Example of placeholder:
+ function querystring() { + var params; + var ph = d.getElementById('placeholder'); - var qs = []; + var href = window.location.href, kv; - for (i = 0; i < params.length; i++) { - kv = params[i].split('='); - qs.push(kv[0]); - qs[kv[0]] = kv[1]; - } - return qs; -} + //Get the parameters from a placeholder in case there is any + //If not, use the url + if (ph && ph.getAttribute('datasrc')) { + params = ph.getAttribute('datasrc').split('&'); + } else { + params = href.slice(href.indexOf('?') + 1).split('&'); + } -var qs = querystring(); + var qs = []; + + for (i = 0; i < params.length; i++) { + kv = params[i].split('='); + qs.push(kv[0]); + qs[kv[0]] = kv[1]; + } + return qs; + } -(function (d) { - var baseurl = 'https://api.github.com/', i; function store(key, value) { try { @@ -170,7 +173,9 @@ var qs = querystring(); function repoCard(user, repo) { var url = baseurl + 'repos/' + user + '/' + repo; - request(url, generateRepoCard(data)); + qs.push("url"); + qs.url = url; + request(url, generateRepoCard); } //Returns the most recently updated repository's card @@ -187,12 +192,17 @@ var qs = querystring(); } url = maxDate.url; - request(url, generateRepoCard(data)); + + qs.push("url"); + qs.url = url; + request(url, generateRepoCard); }); } function generateRepoCard(data) { data = data || {}; + var user = qs.user; + var url = qs.url; var message = data.message; var defaults = '0'; if (message) { @@ -260,6 +270,8 @@ var qs = querystring(); return num.toFixed(1) + 'k'; } + var qs = querystring(); + if (!qs.user) { errorCard(); } else if (qs.repo) { @@ -271,6 +283,7 @@ var qs = querystring(); break; default: //posible future modes + userCard(qs.user); break; } } else { From 400af995c2ab8130cedb3728fab1cd52cfdcf6d8 Mon Sep 17 00:00:00 2001 From: konomi_casa Date: Tue, 4 Feb 2020 20:39:39 +0100 Subject: [PATCH 07/11] -Added content to the error card(ish) -Comments --- src/card.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/card.js b/src/card.js index a4437561..8811fd87 100644 --- a/src/card.js +++ b/src/card.js @@ -1,4 +1,4 @@ -(function (d) { +(function (d) { var baseurl = 'https://api.github.com/', i; @@ -29,7 +29,6 @@ return qs; } - function store(key, value) { try { if (window.localStorage) { @@ -173,6 +172,8 @@ function repoCard(user, repo) { var url = baseurl + 'repos/' + user + '/' + repo; + + //TODO change the way i'm passing this parameters qs.push("url"); qs.url = url; request(url, generateRepoCard); @@ -192,7 +193,7 @@ } url = maxDate.url; - + //TODO change the way i'm passing this parameters qs.push("url"); qs.url = url; request(url, generateRepoCard); @@ -259,6 +260,16 @@ function errorCard() { + var card = d.createElement('div'); + card.className = 'github-card repo-card'; + card.textContent = '¯\_(ツ)_ /¯'; + //In case of placeholder, linky is called in mode 1 (replacing placeholder) + if (d.getElementById("placeholder")) { + linky(card, 1); + } else { + linky(card); + } + } function numberic(num) { From 545f5621b975824a08164f7f92c3b859614e6081 Mon Sep 17 00:00:00 2001 From: konomi_casa Date: Tue, 11 Feb 2020 15:58:26 +0100 Subject: [PATCH 08/11] Support for multiple placeholders and more functionality for "recent mode" --- src/card.js | 74 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 29 deletions(-) diff --git a/src/card.js b/src/card.js index 8811fd87..c45309d7 100644 --- a/src/card.js +++ b/src/card.js @@ -2,12 +2,13 @@ var baseurl = 'https://api.github.com/', i; - //Parameters of the url: [user, repo, mode] - //Posible mode values: "recent". Posibility to add new modes. - //Example of placeholder:
- function querystring() { + //Parameters of the url: [user, repo, mode, (optional)position] + //Posible mode values: "recent". Posibility to add new modes.Uses "position" to get the second or third or nth most recent repo. if not specified, assumes 0 + //Example of placeholder:
+ function querystring(index = 0) { var params; - var ph = d.getElementById('placeholder'); + var ph = d.getElementsByClassName('placeholder')[index]; + var href = window.location.href, kv; @@ -180,18 +181,17 @@ } //Returns the most recently updated repository's card - function recentRepoCard(user) { + function recentRepoCard(user, index = 0) { var url = ''; var urlRepos = baseurl + 'users/' + user + '/repos';//api.github.com/users/USERNAME/repos request(urlRepos, function (data) { - var i; - var maxDate = data[0]; - for (i = 1; i < data.length; i++) { - if (maxDate.updated_at < data[i].updated_at) { - maxDate = data[i]; - } + + data.sort((a, b) => a.updated_at > b.updated_at ? 1 : -1); + if (index >= data.length) { + errorCard(); + return; } - url = maxDate.url; + url = data[index].url; //TODO change the way i'm passing this parameters qs.push("url"); @@ -281,24 +281,40 @@ return num.toFixed(1) + 'k'; } - var qs = querystring(); + function numberOfPlaceholders() { + return d.getElementsByClassName('placeholder').length; + } - if (!qs.user) { - errorCard(); - } else if (qs.repo) { - repoCard(qs.user, qs.repo); - } else if (qs.mode) { - switch (qs.mode) { - case "recent": - recentRepoCard(qs.user); - break; - default: - //posible future modes - userCard(qs.user); - break; + var i = 0; + var maxLoops = 1; + var nPh = numberOfPlaceholders(); + if (nPh > maxLoops) { + maxLoops = nPh; + } + for (i = 0; i < maxLoops; i++) { + var qs = querystring(i); + + if (!qs.user) { + errorCard(); + } else if (qs.repo) { + repoCard(qs.user, qs.repo); + } else if (qs.mode) { + switch (qs.mode) { + case "recent": + if (qs.position && qs.position > 0) { //In case of explicit position, we call the function like this + recentRepoCard(qs.user, qs.position); + } else { + recentRepoCard(qs.user); + } + break; + default: + //posible future modes + userCard(qs.user); + break; + } + } else { + userCard(qs.user); } - } else { - userCard(qs.user); } function escape(text) { From a6c1bd77257d276c97e0a2b7dfa7860ed279288e Mon Sep 17 00:00:00 2001 From: konomi_casa Date: Tue, 11 Feb 2020 16:23:45 +0100 Subject: [PATCH 09/11] Fixes in the sorting of repos --- src/card.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/card.js b/src/card.js index c45309d7..b0a241c1 100644 --- a/src/card.js +++ b/src/card.js @@ -186,7 +186,7 @@ var urlRepos = baseurl + 'users/' + user + '/repos';//api.github.com/users/USERNAME/repos request(urlRepos, function (data) { - data.sort((a, b) => a.updated_at > b.updated_at ? 1 : -1); + data.sort((a, b) => a.updated_at < b.updated_at ? 1 : -1); if (index >= data.length) { errorCard(); return; @@ -285,14 +285,13 @@ return d.getElementsByClassName('placeholder').length; } - var i = 0; var maxLoops = 1; var nPh = numberOfPlaceholders(); if (nPh > maxLoops) { maxLoops = nPh; } - for (i = 0; i < maxLoops; i++) { - var qs = querystring(i); + for (var j = 0; j < maxLoops; j++) { + var qs = querystring(j); if (!qs.user) { errorCard(); From afca22723e9c412fe04997babd951fe744633311 Mon Sep 17 00:00:00 2001 From: konomim Date: Thu, 13 Feb 2020 09:20:12 +0100 Subject: [PATCH 10/11] -Fixes to the access to multiple placeholders -Modifications in querystring to receive a placeholder -For the lack of a better solution, synchronization of requests to properly display multiple cards --- src/card.js | 51 ++++++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/src/card.js b/src/card.js index b0a241c1..8c3453d2 100644 --- a/src/card.js +++ b/src/card.js @@ -5,22 +5,21 @@ //Parameters of the url: [user, repo, mode, (optional)position] //Posible mode values: "recent". Posibility to add new modes.Uses "position" to get the second or third or nth most recent repo. if not specified, assumes 0 //Example of placeholder:
- function querystring(index = 0) { + function querystring(ph = null) { var params; - var ph = d.getElementsByClassName('placeholder')[index]; - - var href = window.location.href, kv; + var qs = []; //Get the parameters from a placeholder in case there is any //If not, use the url if (ph && ph.getAttribute('datasrc')) { params = ph.getAttribute('datasrc').split('&'); + qs.push('ph'); + qs['ph'] = ph; } else { params = href.slice(href.indexOf('?') + 1).split('&'); } - var qs = []; for (i = 0; i < params.length; i++) { kv = params[i].split('='); @@ -74,7 +73,7 @@ return text; } - function request(url, callback) { + function request(url, callback, async = true) { var cache = store(url); if (cache && cache._timestamp) { // cache in 10s @@ -86,16 +85,15 @@ url += '?client_id=' + qs.client_id + '&client_secret=' + qs.client_secret; } var xhr = new XMLHttpRequest(); - xhr.open('GET', url, true); + xhr.open('GET', url, async); xhr.onload = function () { callback(JSON.parse(xhr.response)); }; xhr.send(); } - //mode 0 just adds the card at the bottom of the body (default) - //mode 1 replaces the first div in the document - function linky(card, mode = 0) { + //In case of placeholder, it replaces it. If ph==null then it just adds the card at the bottom of the body + function linky(card, ph = null) { var links = card.getElementsByTagName('a'); for (i = 0; i < links.length; i++) { (function (link) { @@ -103,8 +101,7 @@ })(links[i]); } - if (mode === 1) { - var ph = d.getElementById('placeholder'); + if (ph) { card.height = ph.height; card.length = ph.length; ph.parentNode.replaceChild(card, ph); @@ -185,19 +182,17 @@ var url = ''; var urlRepos = baseurl + 'users/' + user + '/repos';//api.github.com/users/USERNAME/repos request(urlRepos, function (data) { - data.sort((a, b) => a.updated_at < b.updated_at ? 1 : -1); if (index >= data.length) { errorCard(); return; } url = data[index].url; - - //TODO change the way i'm passing this parameters - qs.push("url"); - qs.url = url; - request(url, generateRepoCard); - }); + }, false); + //TODO change the way i'm passing this parameters + qs.push("url"); + qs.url = url; + request(url, generateRepoCard, false); } function generateRepoCard(data) { @@ -251,8 +246,8 @@ card.innerHTML = template('repo', data); //In case of placeholder, linky is called in mode 1 (replacing placeholder) - if (d.getElementById("placeholder")) { - linky(card, 1); + if (qs.ph) { + linky(card, qs.ph); } else { linky(card); } @@ -264,8 +259,8 @@ card.className = 'github-card repo-card'; card.textContent = '¯\_(ツ)_ /¯'; //In case of placeholder, linky is called in mode 1 (replacing placeholder) - if (d.getElementById("placeholder")) { - linky(card, 1); + if (qs.ph) { + linky(card, qs.ph); } else { linky(card); } @@ -286,12 +281,18 @@ } var maxLoops = 1; - var nPh = numberOfPlaceholders(); + var placeholders = d.getElementsByClassName('placeholder'); + var nPh = placeholders.length; if (nPh > maxLoops) { maxLoops = nPh; } for (var j = 0; j < maxLoops; j++) { - var qs = querystring(j); + var qs; + if (nPh>0) { + qs = querystring(placeholders[0]); //Pick always the first placeholder because the previous has been replaced. It is no more. It is an ex-placeholder. + } else { + qs = querystring(); + } if (!qs.user) { errorCard(); From d05c5c69633924358435e485747ec9f5140b5385 Mon Sep 17 00:00:00 2001 From: konomim Date: Thu, 13 Feb 2020 09:23:44 +0100 Subject: [PATCH 11/11] Adaptations of userCard and repoCard to the new synchronous system --- src/card.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/card.js b/src/card.js index 8c3453d2..90793420 100644 --- a/src/card.js +++ b/src/card.js @@ -165,7 +165,7 @@ card.className = 'github-card user-card'; card.innerHTML = template('user', data); linky(card); - }); + }, false); } function repoCard(user, repo) { @@ -174,7 +174,7 @@ //TODO change the way i'm passing this parameters qs.push("url"); qs.url = url; - request(url, generateRepoCard); + request(url, generateRepoCard, false); } //Returns the most recently updated repository's card