diff --git a/source/plugins/languages/README.md b/source/plugins/languages/README.md index 0e43e50b..9d32f77e 100644 --- a/source/plugins/languages/README.md +++ b/source/plugins/languages/README.md @@ -8,7 +8,7 @@ The *languages* plugin displays which programming languages you use the most acr
With both total bytes size and percentage version
-
Recently used version (based on recent activity) +
Recently used version (based on recent activity)
diff --git a/source/plugins/languages/index.mjs b/source/plugins/languages/index.mjs index 3d196694..f78e567a 100644 --- a/source/plugins/languages/index.mjs +++ b/source/plugins/languages/index.mjs @@ -9,6 +9,13 @@ export default async function({login, data, imports, q, rest, account}, {enabled if ((!enabled) || (!q.languages)) return null + //Context + let context = {mode:"user"} + if (q.repo) { + console.debug(`metrics/compute/${login}/plugins > activity > switched to repository mode`) + context = {...context, mode:"repository"} + } + //Load inputs let {ignored, skipped, colors, details, threshold, limit, indepth, sections} = imports.metadata.plugins.languages.inputs({data, account, q}) threshold = (Number(threshold.replace(/%$/, "")) || 0) / 100 @@ -23,9 +30,12 @@ export default async function({login, data, imports, q, rest, account}, {enabled colors = Object.fromEntries(decodeURIComponent(colors).split(",").map(x => x.trim().toLocaleLowerCase()).filter(x => x).map(x => x.split(":").map(x => x.trim()))) console.debug(`metrics/compute/${login}/plugins > languages > custom colors ${JSON.stringify(colors)}`) + //Unique languages + const unique = new Set(data.user.repositories.nodes.flatMap(repository => repository.languages.edges.map(({node:{name}}) => name))).size + //Iterate through user's repositories and retrieve languages data console.debug(`metrics/compute/${login}/plugins > languages > processing ${data.user.repositories.nodes.length} repositories`) - const languages = {sections, details, colors:{}, total:0, stats:{}, "stats.recent":{}} + const languages = {unique, sections, details, colors:{}, total:0, stats:{}, "stats.recent":{}} for (const repository of data.user.repositories.nodes) { //Skip repository if asked if ((skipped.includes(repository.name.toLocaleLowerCase())) || (skipped.includes(`${repository.owner.login}/${repository.name}`.toLocaleLowerCase()))) { @@ -41,7 +51,7 @@ export default async function({login, data, imports, q, rest, account}, {enabled } //Recently used languages - if ((sections.includes("recently-used"))&&(["user", "organization"].includes(account))) { + if ((sections.includes("recently-used"))&&(context.mode === "user")) { console.debug(`metrics/compute/${login}/plugins > languages > using recent analyzer`) languages["stats.recent"] = await recent_analyzer({login, data, imports, rest, account}, {skipped}) } diff --git a/source/templates/classic/partials/languages.ejs b/source/templates/classic/partials/languages.ejs index e0f902a5..50bf52fc 100644 --- a/source/templates/classic/partials/languages.ejs +++ b/source/templates/classic/partials/languages.ejs @@ -1,55 +1,62 @@ -<% if (plugins.languages) { for (const section of plugins.languages.sections) { const languages = {"most-used":plugins.languages.favorites, "recently-used":plugins.languages.recent}[section] %> -
+<% if (plugins.languages) { %> +

- <%= {"most-used":"Most used languages", "recently-used":"Recently used languages"}[section] %> + <%= plugins.languages.unique %> Language<%= s(plugins.languages.unique) %>

- <% if (plugins.languages.error) { %> -
-
- - <%= plugins.languages.error.message %> -
-
- <% } else { const width = 460 * (1 + large) %> - - - - - - <% for (const {name, value, color, x} of languages) { %> - - <% } %> - - <% if (plugins.languages.details?.length) { const rows = large ? [0, 1, 2, 3] : [0, 1] %> -
- <% for (const row of rows) { %> -
- <% for (const {name, value, color, size} of languages.filter((_, i) => i%rows.length === row)) { %> -
-
- - <%= name %> -
- - <% if (plugins.languages.details.includes("bytes-size")) { %>
<%= f.bytes(size) %>
<% } %> - <% if (plugins.languages.details.includes("percentage")) { %>
<%= f.percentage(value) %>
<% } %> -
-
- <% } %> -
- <% } %> -
- <% } else { %> -
- <% for (const {name, value, color} of languages) { %> -
- - <%= name %> -
- <% } %> -
- <% } %> - <% } %>
-<% } } %> \ No newline at end of file + <% for (const section of plugins.languages.sections) { const languages = {"most-used":plugins.languages.favorites, "recently-used":plugins.languages.recent}[section] %> +
+

+ <%= {"most-used":"Most used languages", "recently-used":"Recently used languages"}[section] %> +

+ <% if (plugins.languages.error) { %> +
+
+ + <%= plugins.languages.error.message %> +
+
+ <% } else { const width = 460 * (1 + large) %> + + + + + + <% for (const {name, value, color, x} of languages) { %> + "/> + <% } %> + + <% if (plugins.languages.details?.length) { const rows = large ? [0, 1, 2, 3] : [0, 1] %> +
+ <% for (const row of rows) { %> +
+ <% for (const {name, value, color, size} of languages.filter((_, i) => i%rows.length === row)) { %> +
+
+ " fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8z"> + <%= name %> +
+ + <% if (plugins.languages.details.includes("bytes-size")) { %>
<%= f.bytes(size) %>
<% } %> + <% if (plugins.languages.details.includes("percentage")) { %>
<%= f.percentage(value) %>
<% } %> +
+
+ <% } %> +
+ <% } %> +
+ <% } else { %> +
+ <% for (const {name, value, color} of languages) { %> +
+ + <%= name %> +
+ <% } %> +
+ <% } %> + <% } %> +
+ <% } %> +<% } %> \ No newline at end of file diff --git a/source/templates/repository/partials/languages.ejs b/source/templates/repository/partials/languages.ejs index f1bc1c87..d5879b6e 100644 --- a/source/templates/repository/partials/languages.ejs +++ b/source/templates/repository/partials/languages.ejs @@ -1,9 +1,14 @@ <% if (plugins.languages) { %> -
+

- Most used languages + <%= plugins.languages.unique %> Language<%= s(plugins.languages.unique) %>

+
+
+

+ Most used languages +

<% if (plugins.languages.error) { %>