68 lines
3.3 KiB
JavaScript
68 lines
3.3 KiB
JavaScript
// ==UserScript==
|
|
// @name Free Competitors 2.0
|
|
// @namespace https://suod.madiator.com
|
|
// @description Script to search and display software and recommendations
|
|
// @license AGPLv3
|
|
// ==/UserScript==
|
|
|
|
function searchSoftware() {
|
|
const query = document.getElementById('searchBox').value;
|
|
|
|
// Clear previous results and recommendations
|
|
document.getElementById('results').innerHTML = '';
|
|
document.getElementById('recommendations').innerHTML = '';
|
|
|
|
fetch(`/software/${query}`)
|
|
.then(response => response.json())
|
|
.then(data => displayResults([data]))
|
|
.catch(error => console.error('Error:', error));
|
|
|
|
fetch(`/recommendations?q=${query}`)
|
|
.then(response => response.json())
|
|
.then(data => displayRecommendations(data))
|
|
.catch(error => console.error('Error:', error));
|
|
}
|
|
|
|
function displayResults(data) {
|
|
const resultsSection = document.getElementById('results');
|
|
resultsSection.innerHTML = '';
|
|
data.forEach(software => {
|
|
const softwareDiv = document.createElement('div');
|
|
softwareDiv.classList.add('software');
|
|
softwareDiv.innerHTML = `
|
|
<h2><img src="${software.links?.icon ?? '#'}" alt="${software.names[0]} logo"> ${software.names[0]}</h2>
|
|
<p>${software.comment}</p>
|
|
<p><strong>Platforms:</strong> ${software.platforms?.join(', ') ?? 'Unknown'}</p>
|
|
<p><strong>Licenses:</strong> ${software.licenses?.join(', ') ?? 'Unknown'}</p>
|
|
<p><strong>Interfaces:</strong> ${software.interface?.join(', ') ?? 'Unknown'}</p>
|
|
<p><strong>Programming Languages:</strong> ${software.languages?.join(', ') ?? 'Unknown'}</p>
|
|
<p><strong>Issues:</strong> ${software.issues?.join(', ') ?? 'None'}</p>
|
|
<a href="${software.links?.website ?? '#'}" target="_blank">Website</a>
|
|
<a href="${software.links?.wikipedia ?? '#'}" target="_blank">Wikipedia</a>
|
|
`;
|
|
resultsSection.appendChild(softwareDiv);
|
|
});
|
|
}
|
|
|
|
function displayRecommendations(data) {
|
|
const recommendationsSection = document.getElementById('recommendations');
|
|
recommendationsSection.innerHTML = '';
|
|
data.forEach(({software, score}) => {
|
|
const softwareDiv = document.createElement('div');
|
|
softwareDiv.classList.add('software');
|
|
softwareDiv.innerHTML = `
|
|
<h2><img src="${software.links?.icon ?? '#'}" alt="${software.names[0]} logo"> ${software.names[0]}</h2>
|
|
<p>Score: ${score}</p>
|
|
<p>${software.comment}</p>
|
|
<p><strong>Platforms:</strong> ${software.platforms?.join(', ') ?? 'Unknown'}</p>
|
|
<p><strong>Licenses:</strong> ${software.licenses?.join(', ') ?? 'Unknown'}</p>
|
|
<p><strong>Interfaces:</strong> ${software.interface?.join(', ') ?? 'Unknown'}</p>
|
|
<p><strong>Programming Languages:</strong> ${software.languages?.join(', ') ?? 'Unknown'}</p>
|
|
<p><strong>Issues:</strong> ${software.issues?.join(', ') ?? 'None'}</p>
|
|
<a href="${software.links?.website ?? '#'}" target="_blank">Website</a>
|
|
<a href="${software.links?.wikipedia ?? '#'}" target="_blank">Wikipedia</a>
|
|
`;
|
|
recommendationsSection.appendChild(softwareDiv);
|
|
});
|
|
}
|