--- layout: layout --- <% function groupByKey(arr, key) { let results = []; arr.forEach(function(item) { let keyValue = item[key]; if (!keyValue) {return}; let check = results.findIndex(function(x) {return x.name === keyValue}); if (check>=0) { results[check].count +=1; } else { let newGroup = {}; newGroup.name = keyValue; newGroup.count = 1; results.push(newGroup); } }); return results; } const apps = site.data.miscellaneous.apps; const langList = groupByKey(apps, "codeLanguage").sort((a,b) => b.count - a.count); const licenseList = groupByKey(apps, "license").sort((a,b) => b.count - a.count); const byCategory = [['snMacro', 'Social network (macro)'], ['snMicro', 'Social network (micro)'], ['blogPub', 'Blog and Publishing'], ['media', 'Media sharing'], ['links', 'Link sharing'], ['evMeet', 'Events and Meetups'], ['files', 'File hosting'], ['data', 'Open data'], ['reviews', 'Reviews and ratings'], ['games', 'Gaming'], ['dev', 'Software development'], ['extend', 'Extensions'], ['forums', 'Forums, boards'], ['other', 'Other']]; const byProtocol = [['sortDiaspora', 'diaspora'], ['sortZot', 'Zot'], ['sortAP', 'ActivityPub'], ['sortOstatus', 'OStatus']]; const pattern = /[\s0.-]/g; %> <%- partial('_partial/heroheader') %>

EXPLORE FEDIVERSE SOFTWARE

→ Check out other Fediverse Tools ←

Sort by category:

<% for (item in byCategory) { %> <% } %>

Sort by protocol:

<% for (item in byProtocol) { %> <% } %>

Sort by code language:

<% for (i in langList) { %> <% } %>

Sort by license:

<% for (i in licenseList) { %> <% } %>
<% for (item in apps) { %> <% let type = apps[item].categories %> <% let lang = apps[item].codeLanguage.toLowerCase() %> <% } %>