blob: 3cb2ea2fd8c7c1159368ad3345799d245b0f16f9 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="keywords" content="eclipse, Oomph, eclipse installer, eclipse marketplace"/>
<link rel="shortcut icon" href="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/images/favicon.ico"/>
<title>Eclipse Marketplace Listing</title>
<link rel="stylesheet" href="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/stylesheets/eclipse-ide.min.css?v1.7"/>
<meta name="description" content="The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 350 open source projects, including runtimes, tools and frameworks."/>
<script src='https://code.jquery.com/jquery-1.9.0.min.js' type='text/javascript'></script>
<link href="//fonts.googleapis.com/css?family=Libre+Franklin:400,700,300,600,100" rel="stylesheet" type="text/css"/>
<style>
.button, .button:visited, .button:hover, .button:active, .button:link {
margin-left: 0em;
margin-top: 1ex;
margin-bottom: 1ex;
font-weight: bold;
border: 1px solid Chocolate;
background-color: DarkOrange;
color: white;
padding: 0.25ex 0.25em;
text-align: center;
text-decoration: none;
display: inline-block;
}
.button:hover {
transition: background-color 0.5s ease;
background-color: rgb(218, 122,8);
}
.thumb {
width : 25em;
cursor: pointer;
transition: 0.3s;
}
.thumb:hover {
opacity: 0.7;
}
.section-header {
margin-bottom: 1.5ex;
text-indent: -1em;
margin-left: 1em;
}
.bb {
background-color: white;
border: none;
padding: 0px 0px;
}
.bb:focus {
outline: none;
}
.bb:hover {
transition: color 0.5s ease;
color: rgb(218, 122,8);
}
.help {
position: relative;
bottom: 1.2ex;
margin-left: -0.10ex;
margin-right: 0.10ex;
width: 1.6ex;
cursor: pointer;
}
.help:hover {
animation: rotation 1.5s infinite linear;
}
@keyframes rotation {
from {
transform: rotate(0deg);
transform-origin: center center;
}
to {
transform: rotate(359deg);
transform-origin: center center;
}
}
.help-link {
cursor: pointer;
transition: font-weight 2s;
}
.help-link:hover {
cursor: pointer;
text-decoration: underline;
text-decoration-color: orange;
}
.modal-popup {
display: none;
position: fixed;
z-index: 1;
padding-top: 100px;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgb(0,0,0);
background-color: rgba(0,0,0,0.8);
}
.modal-popup-content {
margin: auto;
display: block;
width: 80%;
max-width: 900px;
}
#modal-popup-caption {
margin: auto;
display: block;
width: 80%;
max-width: 90%;
text-align: left;
font-size: 150%;
color: white;
padding: 0 0;
height: 150px;
}
.modal-popup-content, #modal-popup-caption {
animation-name: zoom;
animation-duration: 0.6s;
}
@keyframes zoom {
from {transform:scale(0)}
to {transform:scale(1)}
}
.modal-popup-close {
position: absolute;
top: 15px;
right: 35px;
color: #f1f1f1;
font-size: 40px;
font-weight: bold;
transition: 0.3s;
}
.modal-popup-close:hover, .modal-popup-close:focus {
color: #bbb;
text-decoration: none;
cursor: pointer;
}
@media only screen and (max-width: 900px) {
modal-content {
width: 100%;
}
}
[tooltip]::after {
content: attr(tooltip);
position: absolute;
opacity: 0;
display: none;
white-space: pre-line;
font-weight: normal;
transition: all 0.15s ease;
padding: 10px;
color: #333;
border-radius: 10px;
box-shadow: 2px 2px 1px silver;
max-height: 0px;
}
[tooltip]:hover::after {
content: attr(tooltip);
opacity: 1;
display: inline-block;
background: Moccasin;
margin-top: -4ex;
margin-left: 1ex;
z-index: 99;
max-height: 100%;
}
#marketplace-title-span, .marketplace-title-span {
font-size: 100%;
cursor: pointer;
}
#marketplace-insertion-section, .marketplace-insertion-section {
display: none;
}
#marketplace-section, .marketplace-section {
overflow: hidden;
margin-left: 2em;
}
#marketplace-image, .marketplace-image {
float: left;
margin-right: 2ex;
margin-bottom: 2ex;
}
#marketplace-small-image, .marketplace-small-image {
font-size: 100%;
height: 2ex;
vertical-align: baseline;
margin-bottom: -0.1ex;
}
.loader {
border: 0.5ex solid #f3f3f3;
border-top: 0.5ex solid #3498db;
border-radius: 50%;
width: 3ex;
height: 3ex;
animation: spin 2s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>
<script>
var eclipse_org_common = {
"settings": {
"cookies_class": {
"name": "eclipse_settings",
"enabled": 1
}
}
}
function getParameter(search, name) {
try {
// This is not available on IE 11.
var urlParameters = new URLSearchParams(search);
return urlParameters.get(name);
}
catch (e) {
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(search);
if (results == null) {
return null;
}
else {
return decodeURI(results[1]) || 0;
}
}
}
window.onload = function () {
var scheme = getParameter(window.location.search, 'scheme');
if (scheme == null) {
scheme = 'eclipse+installer';
} else {
scheme = scheme.replace(/ /g, '+');
}
updateScheme('scheme', scheme);
var url = getParameter(window.location.search, 'url');
var nodeID = getParameter(window.location.search, 'id');
var os = getOS();
if (os == 'win') {
hide('installer-mac'); hide('installer-linux');
} else if (os == 'mac') {
hide('installer-win'); hide('installer-linux');
} else if (os == 'linux') {
hide('installer-win'); hide('installer-mac');
}
var style = getParameter(window.location.search, 'style');
var titleSection = document.getElementById('title');
if (nodeID != null || url != null)
{
titleSection.innerText = " for a single listing";
}
else if (style == null)
{
titleSection.innerText = 'usable ' + titleSection.innerText;
}
else if (style == 'all')
{
titleSection.innerText = 'all ' + titleSection.innerText;
}
else if (style == 'warning')
{
titleSection.innerText += ' with warnings'
}
else if (style == 'error-only')
{
titleSection.innerText += ' with errors'
}
else if (style == 'error')
{
titleSection.innerText += ' with errors or warnings'
}
else if (style == 'site-error')
{
titleSection.innerText += ' with broken sites'
}
else if (style == 'resolution-error')
{
titleSection.innerText += ' with resolution errors'
}
else if (style == 'iu-error')
{
titleSection.innerText += ' with installable unit errors'
}
if (nodeID != null) {
style='all';
loadSingleMarketplaceListings(style, url, null, nodeID);
} else if (url != null) {
style='all';
var marketplaceContentMatch = url.match(/https?:\/\/marketplace\.eclipse\.org\/content\/([^\/?#]*)/);
if (marketplaceContentMatch != null) {
var id = marketplaceContentMatch[1];
loadSingleMarketplaceListings(style, url, id, nodeID);
}
} else {
loadMarketplaceListings(style, url);
}
}
function updateHref(id, url, tooltip) {
var e = document.getElementById(id);
if (e != null) {
e.href = url;
e.setAttribute('tooltip', tooltip.replace(/\//g, '/\u200B'));
}
}
function hide(id) {
var e = document.getElementById(id);
if (e != null) {
document.getElementById(id).style.display = 'none';
}
}
function updateScheme(id, scheme) {
var e = document.getElementById(id);
if (e != null) {
e.innerHTML = scheme;
}
}
function getOS() {
var os='unknown';
var appVersion = navigator.appVersion;
if (appVersion.indexOf('Win') !=-1) os = 'win';
else if (appVersion.indexOf('Mac') !=-1) os = 'mac';
else if (appVersion.indexOf('X11') !=-1 || appVersion.indexOf('Linux') !=-1) os = 'linux';
return os;
}
function expand_collapse(id, navigate) {
var e = document.getElementById(id);
var f = document.getElementById(id + '_arrow');
if (e.style.display == 'none'){
e.style.display = 'block';
f.innerHTML = '&#x25E2;';
if (navigate) {
e.previousElementSibling.scrollIntoView();
}
} else {
e.style.display = 'none';
f.innerHTML = '&#x25B7;';
}
}
function copyToClipboard(element) {
var $temp = $("<textarea>");
$("body").append($temp);
$temp.val($(element).text().replaceAll('>', '>\n')).select();
document.execCommand("copy");
$temp.remove();
}
function downloadXML(filename, textElement) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/xml;charset=utf-8,' + encodeURIComponent($(textElement).text().replaceAll('>', '>\n')));
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
function popup(id) {
var popup = document.getElementById('popup');
popup.style.display = 'block';
// Get the source image and insert its "src" as the popup image's "src".
var sourceImage = document.getElementById(id);
var targetImage = document.getElementById('modal-popup-image');
targetImage.src = sourceImage.src;
// Use the source image's "alt" text as a caption.
var captionText = document.getElementById('modal-popup-caption');
captionText.innerHTML = sourceImage.alt;
// When the user clicks on close button, close the popup.
var closeButton = document.getElementsByClassName('modal-popup-close')[0];
closeButton.onclick = function() {
popup.style.display = 'none';
}
}
function popupMessage(image, text) {
var popup = document.getElementById('popup');
popup.style.display = 'block';
var targetImage = document.getElementById('modal-popup-image');
targetImage.style.display = 'none';
targetImage.src = image;
var captionText = document.getElementById('modal-popup-caption');
captionText.innerHTML = text;
captionText.style.textAlign = 'left';
captionText.style.fontSize = '80%';
captionText.style.whiteSpace = 'pre';
// When the user clicks on close button, close the popup.
var closeButton = document.getElementsByClassName('modal-popup-close')[0];
closeButton.onclick = function() {
popup.style.display = 'none';
}
}
function summarize(style)
{
var listingSummary = document.getElementById('listing-summary');
listingSummary.innerText = '<?xml version="1.0" encoding="UTF-8"?>\n<listings' + (style == null ? '' : ' style="' + style + '"') + '>\n' + listingSummary.innerText + '</listings>';
}
function loadSingleMarketplaceListings(style, url, id, nodeID) {
var request = new XMLHttpRequest();
var fetchURL = "fetch.php?id=" + (id != null ? id : nodeID);
request.open('GET', fetchURL, true);
request.onreadystatechange = function () {
if (request.readyState === 4 && request.status === 200 && request.responseText != null && request.responseText.length > 100) {
var progressTextHTML = document.getElementById('progress-text');
progressTextHTML.innerText = 'Analyzing the the catalog';
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(request.responseText, "text/xml");
createMarketplaceListings(xmlDoc, style, url);
summarize(style);
var expandButton = document.getElementsByClassName('marketplace-section_arrow')[0];
expandButton.onclick();
}
};
request.send();
}
function loadMarketplaceListings(style, url) {
var request = new XMLHttpRequest();
var requestURL = '../marketplace-listings/marketplace.eclipse.org.setup';
request.open('GET', requestURL, true);
request.onreadystatechange = function () {
if (request.readyState === 4 && request.status === 200 && request.responseText != null && request.responseText.length > 100) {
var progressTextHTML = document.getElementById('progress-text');
progressTextHTML.innerText = 'Analyzing the the catalog';
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(request.responseText, "text/xml");
createMarketplaceListings(xmlDoc, style, url);
summarize(style);
if (url != null) {
var expandButton = document.getElementsByClassName('marketplace-section_arrow')[0];
expandButton.onclick();
}
}
};
request.send();
}
function createMarketplaceListings(xmlDoc, style, url) {
var projects = xmlDoc.getElementsByTagName('project') ;
var progressTextHTML = document.getElementById('progress-text');
progressTextHTML.innerText = 'Processing ' + projects.length + ' lists.';
var count = 0;
var displayCount = 0;
var warningCount = 0;
var errorCount = 0;
for (var i = 0; i < projects.length; ++i) {
var result = createMarketplaceListing(projects[i], style, url);
++count;
if (result != null) {
++displayCount;
if (result[0] == 'Error.png') {
++errorCount;
} else if (result[0] == 'Warning.png') {
++warningCount;
}
}
}
var progressHTML = document.getElementById('progress');
progressHTML.style.display = 'none';
var summarySection = document.getElementById('summary');
summarySection.style.display = 'block';
var summaryCount = document.getElementById('summary-count');
if (style == null) {
summaryCount.innerText = displayCount + ' usable ';
} else {
summaryCount.innerText = count;
if (style != 'all')
{
var displaySummary = document.getElementById('display-summary');
displaySummary.style.display = 'inline-block';
var summaryDisplayCount = document.getElementById('display-count');
summaryDisplayCount.innerText = displayCount;
}
}
if (style != null) {
var summaryError = document.getElementById('summary-error');
summaryError.style.display = 'inline-block';
var summaryErrorCount = document.getElementById('summary-error-count');
summaryErrorCount.innerText = errorCount;
var summaryWarningCount = document.getElementById('summary-warning-count');
summaryWarningCount.innerText = warningCount;
}
}
function createMarketplaceListing(project, style, url) {
var siteURI = null;
var siteDetail = project.querySelector("detail[key='siteURI']");
if (siteDetail != null) {
siteURI = siteDetail.querySelector('value').textContent;
}
var marketplaceID = null;
var marketplaceIDDetail = project.querySelector("detail[key='marketplaceID']");
if (marketplaceIDDetail != null) {
marketplaceID = marketplaceIDDetail.querySelector('value').textContent;
}
if (url != null && url != siteURI && url != decodeURI(siteURI)) {
return null;
}
var imageURI = null;
var xmlImageDetail = project.querySelector("detail[key='imageURI']");
if (xmlImageDetail != null) {
imageURI = xmlImageDetail.querySelector('value').textContent;
}
var title = project.getAttribute('label');
var body= project.querySelector('description').textContent;
var mainUpdateURL = null;
var mainIUs = new Map();
var mainUpdateURLProblem = null;
var bogusIUs = false;
var failedResolutions = false;
var streamDetails = new Map();
var problem = [null, null];
var p2Task = project.querySelector(':scope > setupTask');
if (p2Task != null) {
var repository = p2Task.querySelector('repository');
if (repository != null) {
mainUpdateURL = repository.getAttribute('url');
var detailMessage = repository.querySelector("detail[key='message']")
if (detailMessage != null) {
mainUpdateURLProblem = detailMessage.querySelector('value').textContent;
problem[0] = 'Error.png';
problem[1] = mainUpdateURLProblem;
}
}
var requirements = p2Task.querySelectorAll('requirement');
for (var i = 0; i < requirements.length; ++i) {
var requirement = requirements[i];
var requirementID = requirement.getAttribute("name");
var requirementName = requirement.querySelector("detail[key='name']");
if (requirementName != null) {
var name = requirementName.querySelector('value').textContent;
mainIUs.set(requirementID, name);
if (name == 'BogusIU') {
bogusIUs = true;
if (problem[0] == null) {
problem[0] = 'Error.png';
problem[1] = "The installable unit with id '" + requirementID + "' cannot be resolved in the repository";
}
}
}
}
}
if (mainUpdateURLProblem == null) {
var streams = project.querySelectorAll('stream');
var successes = 0;
for (var i = 0; i < streams.length; ++i) {
var success = false;
const stream = streams[i];
const data = [ null, null, null, null, null ];
const exception = stream.querySelector("detail[key='exception']");
if (exception == null) {
success = true;
} else {
const reject = stream.querySelector("detail[key='reject']");
data[0] = exception.querySelector('value').textContent;
if (reject == null) {
failedResolutions = true;
if (problem[0] == null) {
problem[0] = 'Error.png';
problem[1] = data[0];
}
} else {
data[1] = 'reject';
}
}
streamDetails.set(stream.getAttribute('name'), data);
var streamP2Task = stream.querySelector('setupTask');
if (streamP2Task != null) {
var streamRepository = streamP2Task.querySelector('repository');
var streamUpdateURL = null;
var streamUpdateURLProblem = null;
if (streamRepository != null) {
streamUpdateURL = streamRepository.getAttribute('url');
var streamDetailMessage = streamRepository.querySelector("detail[key='message']")
if (streamDetailMessage != null) {
success = false;
streamUpdateURLProblem = streamDetailMessage.querySelector('value').textContent;
if (problem[0] == null) {
problem[0] = 'Error.png';
problem[1] = streamUpdateURLProblem;
}
}
}
var streamIUs = new Map();
var streamRequirements = streamP2Task.querySelectorAll('requirement');
for (var j = 0; j < streamRequirements.length; ++j) {
var streamRequirement = streamRequirements[j];
var streamRequirementID = streamRequirement.getAttribute("name");
var streamRequirementName = streamRequirement.querySelector("detail[key='name']");
if (streamRequirementName != null) {
var name = streamRequirementName.querySelector('value').textContent;
streamIUs.set(streamRequirementID, name);
if (name == 'BogusIU') {
bogusIUs = true;
if (problem[0] == null) {
problem[0] = 'Error.png';
problem[1] = "The installable unit with id '" + streamRequirementID + "' cannot be resolved in the repository";
}
}
}
}
data[2] = streamUpdateURL;
data[3] = streamUpdateURLProblem;
data[4] = streamIUs;
}
if (success) {
++successes;
}
if (successes > 0 && problem[0] != null) {
problem[0] = "Warning.png";
}
}
}
var prefix = '_' + project.getAttribute('name') + '_';
if (style == 'all' ||
style == 'error' && problem[0] != null ||
style == null && problem[0] != 'Error.png' ||
style == 'warning' && problem[0] == 'Warning.png' ||
style == 'error-only' && problem[0] == 'Error.png' ||
style == 'site-error' && mainUpdateURLProblem != null ||
style == 'iu-error' && bogusIUs ||
style == 'resolution-error' && mainUpdateURLProblem == null && problem[0] == 'Error.png') {
var sectionTemplate = document.getElementById('marketplace-insertion-section');
var section = sectionTemplate.cloneNode(true);
var allIDs = section.querySelectorAll("*[id]");
for (var i = 0; i < allIDs.length; ++i) {
var element = allIDs[i];
var id = element.getAttribute('id');
element.setAttribute('id', prefix + id);
}
var id = section.getAttribute('id');
section.setAttribute('id', prefix + section.getAttribute('id'));
sectionTemplate.parentNode.insertBefore(section, sectionTemplate);
updateMarketplace(prefix, imageURI, siteURI, marketplaceID, title, body, ' and create an installation that includes <b>' + title + '</b>', mainUpdateURL, mainUpdateURLProblem, mainIUs, streamDetails);
if (problem[0] != null) {
var statusHTML = document.getElementById(prefix +'marketplace-status-image');
if (statusHTML != null) {
statusHTML.src = problem[0];
statusHTML.style.display = 'inline-block';
statusHTML.onclick = function() {
popupMessage('Error.png', problem[1]);
}
}
}
var listingSummary = document.getElementById('listing-summary');
listingSummary.innerText += ' <listing id="' + marketplaceID + '" uri="' + siteURI + '"/>\n';
return problem;
}
return null;
}
function updateMarketplace(prefix, imageURI, siteURI, marketplaceID, title, body, instruction, mainUpdateURL, mainUpdateURLProblem, mainIUs, streamDetails) {
var init = function() {
if (imageURI != null) {
var sectionImage = document.getElementById(prefix + 'marketplace-image');
sectionImage.src = imageURI;
sectionImage.parentElement.href = siteURI;
}
var htmlBody = document.getElementById(prefix + 'marketplace-body');
htmlBody.innerHTML = body;
if (mainUpdateURL != null) {
var repositoryHTML = document.getElementById(prefix +'marketplace-main-repository');
repositoryHTML.style.display = 'block';
var anchorHTML = document.getElementById(prefix +'marketkplace-main-url');
anchorHTML.href = mainUpdateURL;
anchorHTML.innerText = mainUpdateURL;
if (mainUpdateURLProblem != null) {
var problemHTML = document.getElementById(prefix +'marketkplace-main-url-problem');
problemHTML.style.display = 'inline-block';
problemHTML.parentElement.onclick = function() {
popupMessage('Error.png', mainUpdateURLProblem);
}
}
}
var launchInstaller = document.getElementById(prefix + 'link-installer-launch');
launchInstaller.href = 'eclipse+installer:' + siteURI;
var launchInstallerHelp = document.getElementById(prefix + 'link-installer-launch-help');
launchInstallerHelp.href = '../installer/?show=true&url=' + siteURI;
var launchMPC = document.getElementById(prefix + 'link-mpc-launch');
launchMPC.href = 'eclipse+mpc://marketplace.eclipse.org/marketplace-client-intro?mpc_install=' + marketplaceID;
if (mainIUs.length != 0) {
var mainIUHTMLPrototype = document.getElementById(prefix +'marketplace-main-iu');
var mainIUNameHTMLPrototype = document.getElementById(prefix +'marketplace-main-iu-name');
var mainIUHTMLProblemPrototype = document.getElementById(prefix +'marketkplace-main-iu-problem');
for (var [key, value] of mainIUs) {
if (value == "BogusIU") {
mainIUNameHTMLPrototype.innerText = key;
mainIUHTMLProblemPrototype.style.display = 'inline-block';
} else {
mainIUNameHTMLPrototype.innerText = value;
mainIUHTMLProblemPrototype.style.display = 'none';
}
var mainIUHTML = mainIUHTMLPrototype.cloneNode(true);
if (value == 'BogusIU') {
const bogusIU = key;
var popup = function() {
popupMessage('Error.png', "The installable unit with id '" + bogusIU + "' cannot be resolved in the repository:\n " + mainUpdateURL);
};
mainIUHTML.querySelector('button').onclick = popup;
}
mainIUHTMLPrototype.parentElement.insertBefore(mainIUHTML, mainIUHTMLPrototype);
if (mainUpdateURL != null) {
mainIUHTML.style.marginLeft = '1em';
}
}
mainIUHTMLPrototype.style.display = 'none';
}
var streamPrototype = document.getElementById(prefix +'marketplace-stream');
if (streamDetails.length != 0) {
for (var [key, value] of streamDetails) {
var streamHTML = streamPrototype.cloneNode(true);
var streamName= streamHTML.querySelector("*[templateID='marketplace-stream-name']");
var streamProblem = streamHTML.querySelector("*[templateID='marketkplace-stream-problem']");
var streamAnchorHTML = streamHTML.querySelector("*[templateID='marketkplace-stream-url']");
var streamProblemHTML = streamHTML.querySelector("*[templateID='marketkplace-stream-url-problem']");
streamName.innerText = key;
const exception = value[0];
const reject = value[1];
const streamURL = value[2];
const streamURLProblem = value[3];
const streamIUs = value[4];
var popup = function () {
if (exception != null) {
popupMessage('Error.png', exception);
} else {
popupMessage('Error.png', streamURLProblem);
}
};
if (exception == null && streamURLProblem == null) {
streamProblem.src= 'OK.png';
} else {
// todo
streamProblem.parentElement.onclick = popup;
streamProblem.parentElement.style.display = 'inline-block';
if (reject == 'reject') {
streamProblem.src= 'Reject.png';
} else {
streamProblem.src= 'Error.png';
}
}
if (streamURL != null) {
streamAnchorHTML.href = streamURL;
streamAnchorHTML.innerText = streamURL;
streamAnchorHTML.parentElement.style.marginLeft = '1em';
streamAnchorHTML.parentElement.style.display = 'block';
} else {
streamAnchorHTML.parentElement.style.display = 'none';
}
var streamIUHTMLPrototype = streamHTML.querySelector("*[templateID='marketplace-stream-iu']");
if (streamIUs != null) {
for (var [key, value] of streamIUs) {
var streamIUHTML = streamIUHTMLPrototype.cloneNode(true);
var streamIUNameHTML = streamIUHTML.querySelector("*[templateID='marketplace-stream-iu-name']");
var streamIUHTMLProblem = streamIUHTML.querySelector("*[templateID='marketkplace-stream-iu-problem']");
if (value == "BogusIU") {
streamIUNameHTML.innerText = key;
streamIUHTMLProblem.style.display = 'inline-block';
} else {
streamIUNameHTML.innerText = value;
streamIUHTMLProblem.style.display = 'none';
}
streamIUHTML.style.display = 'block';
if (value == 'BogusIU') {
const badIU = key;
var popup = function() {
// todo
popupMessage('Error.png', "The installable unit with id '" + badIU + "' cannot be resolved in the repository:\n " + streamURL);
};
// todo
streamIUHTML.querySelector('button').onclick = popup;
}
streamIUHTMLPrototype.parentElement.insertBefore(streamIUHTML, streamIUHTMLPrototype);
if (streamURL != null) {
streamIUHTML.style.marginLeft = '2em';
} else {
streamIUHTML.style.marginLeft = '1em';
}
}
}
streamIUHTMLPrototype.style.display = 'none';
var problemButton = streamHTML.querySelector('button');
if (exception == null && streamURLProblem == null) {
// problemButton.style.display = 'none';
} else {
problemButton.style.display = 'inline-block';
problemButton.onclick = popup;
}
streamPrototype.parentElement.insertBefore(streamHTML, streamPrototype);
}
}
streamPrototype.style.display = 'none';
};
const expandCollapse = function() {
if (init != null) {
init();
init = null;
}
expand_collapse(prefix + 'marketplace-section');
}
if (imageURI != null) {
var smallImage = document.getElementById(prefix + 'marketplace-small-image');
smallImage.src = imageURI;
}
var button = document.getElementById(prefix + 'marketplace-section_arrow');
button.onclick = expandCollapse;
button = document.getElementById(prefix + 'marketplace-title-span');
button.onclick = expandCollapse;
var section = document.getElementById(prefix + 'marketplace-insertion-section');
section.style.display = 'block';
var sectionHeader = document.getElementById(prefix + 'marketplace-title-span');
sectionHeader.innerText = title;
}
</script>
</head>
<body id="body_solstice">
<header class="header-wrapper" id="header-wrapper">
<div class="clearfix toolbar-container-wrapper">
<div class="container">
<div class="text-right toolbar-row row hidden-print">
</div>
</div>
</div>
<div class="container">
<div class="row" id="header-row">
<div class="col-sm-5 col-md-4" id="header-left">
<div class="wrapper-logo-default">
<a href="https://www.eclipse.org/">
<img class="logo-eclipse-default hidden-xs" alt="Eclipse.org logo" width="160" src="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/images/logo/eclipse-ide/eclipse_logo_white.svg"/>
</a>
</div>
</div>
<div class="col-sm-19 col-md-20 margin-top-10" id="main-menu-wrapper">
<div class="float-right hidden-xs" id="btn-call-for-action"><a href="https://www.eclipse.org/donate/ide?scope=Eclipse%20Installer" class="btn btn-huge btn-primary"><i class="fa fa-star"></i> Donate</a></div>
<div class="navbar yamm float-sm-right" id="main-menu">
<div class="navbar-collapse collapse" id="navbar-main-menu">
<ul class="nav navbar-nav">
<li><a href="https://www.eclipse.org/membership/" target="_self">Members</a></li>
<li><a href="https://www.eclipse.org/org/workinggroups/" target="_self">Working Groups</a></li>
<li><a href="https://www.eclipse.org/projects/" target="_self">Projects</a></li>
<li class="dropdown visible-xs"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Community <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="https://marketplace.eclipse.org">Marketplace</a></li>
<li><a href="https://events.eclipse.org">Events</a></li>
<li><a href="https://www.planeteclipse.org/">Planet Eclipse</a></li>
<li><a href="https://www.eclipse.org/community/eclipse_newsletter/">Newsletter</a></li>
<li><a href="https://www.youtube.com/user/EclipseFdn">Videos</a></li>
<li><a href="https://blogs.eclipse.org">Blogs</a></li>
</ul>
</li>
<li class="dropdown visible-xs"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Participate <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li>
<li><a href="https://www.eclipse.org/forums/">Forums</a></li>
<li><a href="https://www.eclipse.org/mail/">Mailing Lists</a></li>
<li><a href="https://wiki.eclipse.org/">Wiki</a></li>
<li><a href="https://wiki.eclipse.org/IRC">IRC</a></li>
<li><a href="https://www.eclipse.org/org/research/">Research</a></li>
</ul>
</li>
<li class="dropdown visible-xs"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Eclipse IDE <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="https://www.eclipse.org/downloads">Download</a></li>
<li><a href="https://www.eclipse.org/eclipseide">Learn More</a></li>
<li><a href="https://help.eclipse.org">Documentation</a></li>
<li><a href="https://www.eclipse.org/getting_started">Getting Started / Support</a></li>
<li><a href="https://www.eclipse.org/contribute/">How to Contribute</a></li>
<li><a href="https://www.eclipse.org/ide/">IDE and Tools</a></li>
<li><a href="https://www.eclipse.org/forums/index.php/f/89/">Newcomer Forum</a></li>
</ul>
</li>
<!-- More -->
<li class="dropdown eclipse-more hidden-xs">
<a data-toggle="dropdown" class="dropdown-toggle" role="button">More<b class="caret"></b></a>
<ul class="dropdown-menu">
<li>
<!-- Content container to add padding -->
<div class="yamm-content">
<div class="row">
<ul class="col-sm-8 list-unstyled">
<li>
<p><strong>Community</strong></p>
</li>
<li><a href="https://marketplace.eclipse.org">Marketplace</a></li>
<li><a href="https://events.eclipse.org">Events</a></li>
<li><a href="https://www.planeteclipse.org/">Planet Eclipse</a></li>
<li><a href="https://www.eclipse.org/community/eclipse_newsletter/">Newsletter</a></li>
<li><a href="https://www.youtube.com/user/EclipseFdn">Videos</a></li>
<li><a href="https://blogs.eclipse.org">Blogs</a></li>
</ul>
<ul class="col-sm-8 list-unstyled">
<li>
<p><strong>Participate</strong></p>
</li>
<li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li>
<li><a href="https://www.eclipse.org/forums/">Forums</a></li>
<li><a href="https://www.eclipse.org/mail/">Mailing Lists</a></li>
<li><a href="https://wiki.eclipse.org/">Wiki</a></li>
<li><a href="https://wiki.eclipse.org/IRC">IRC</a></li>
<li><a href="https://www.eclipse.org/org/research/">Research</a></li>
</ul>
<ul class="col-sm-8 list-unstyled">
<li>
<p><strong>Eclipse IDE</strong></p>
</li>
<li><a href="https://www.eclipse.org/downloads">Download</a></li>
<li><a href="https://www.eclipse.org/eclipseide">Learn More</a></li>
<li><a href="https://help.eclipse.org">Documentation</a></li>
<li><a href="https://www.eclipse.org/getting_started">Getting Started / Support</a></li>
<li><a href="https://www.eclipse.org/contribute/">How to Contribute</a></li>
<li><a href="https://www.eclipse.org/ide/">IDE and Tools</a></li>
<li><a href="https://www.eclipse.org/forums/index.php/f/89/">Newcomer Forum</a></li>
</ul>
</div>
</div>
</li>
</ul>
</li>
<li class="dropdown eclipse-more main-menu-search">
<a data-toggle="dropdown" class="dropdown-toggle" role="button"><i class="fa fa-search"></i> <b class="caret"></b></a>
<ul class="dropdown-menu">
<li>
<!-- Content container to add padding -->
<div class="yamm-content">
<div class="row">
<div class="col-sm-24">
<p>Search</p>
<div class="row">
<div class="col-md-24">
<div id="custom-search-form" class="reset-box-sizing">
<script>
(function() {
var cx = '011805775785170369411:p3ec0igo0qq';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<gcse:searchbox-only gname="main" resultsUrl="https://www.eclipse.org/home/search.php"></gcse:searchbox-only>
</div>
</div>
</div>
</div>
</div>
</div>
</li>
</ul>
</li>
</ul>
</div>
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-main-menu">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="wrapper-logo-mobile">
<a class="navbar-brand visible-xs" href="https://www.eclipse.org/">
<img class="logo-eclipse-default-mobile img-responsive" alt="Eclipse.org logo" width="160" src="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/images/logo/eclipse-ide/eclipse_logo_white.svg"/>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</header>
<section class="default-breadcrumbs hidden-print breadcrumbs-default-margin" id="breadcrumb">
<div class="container">
<h3 class="sr-only">Breadcrumbs</h3>
<div class="row">
<div class="col-sm-24">
<ol class="breadcrumb">
<li><a href="/">Home</a></li>
<li><a href="https://www.eclipse.org/oomph/">Oomph</a></li>
<li><a href="https://wiki.eclipse.org/Oomph">Marketplace</a></li>
</ol>
</div>
</div>
</div>
</section>
<main>
<div class="novaContent container legacy-page" id="novaContent">
<div class="row">
<div class="col-md-18">
<div id="maincontent">
<div id="midcolumn" style="padding: 0;">
<div class="homeitem3col">
<div style="text-align: right; margin-top: -1.5ex; margin-bottom: -3ex; margin-right: -1.5em;">
<a href="https://wiki.eclipse.org/Oomph" target="oomph_wiki"><img id="brand-image" style="width: 4ex; height: 4ex;" src="../installer/oomph256.png"/></a>
</div>
<h3 class="section-header">
<button id="mpc_arrow" class="orange bb" onclick="expand_collapse('mpc');">&#x25E2;</button>
<img style="height: 2.5ex;" src="https://marketplace.eclipse.org/sites/default/files/styles/ds_medium/public/mpc-logo-marketplace.png?itok=F0Yk3YlX"/>
<span style=" font-variant: small-caps;">Marketplace.Eclipse.org <span id="title">listings</span></span>
</h3>
<div class="toggle-target" id="mpc">
<p>
The
<a class="help-link" style="font-family: Arial, Helvetica, sans-serif;" href="https://marketplace.eclipse.org/" target="eclipse_marketplace"><span style="color: #2c2255;">eclipse market</span><span class="orange">place</span></a>
provides a large number of listings that can be installed into an existing
<a class="help-link" style="font-family: Arial, Helvetica, sans-serif; white-space: nowrap;" href="https://www.eclipse.org/downloads/packages/" target="eclipse_downloads"><span style="color: #2c2255;">eclipse</span> <span class="orange">IDE</span></a>
or can be added to the
<a class="help-link" style="font-family: Arial, Helvetica, sans-serif; white-space: nowrap;" href="https://www.eclipse.org/setups/installer/?url=https://marketplace.eclipse.org/content/eclipse-marketplace-client" target="eclipse_installer"><span style="color: #2c2255;">eclipse</span> <span class="orange">installer</span></a>
while creating a new installation.
</p>
<p id="summary" style="display: none;">
There are a total of <span id="summary-count">1000+</span> listings<span id="display-summary" style="display:none;">, <span id="display-count">0</span> displayed</span><span id="summary-error" style="display: none;">, <span id="summary-error-count">0</span> of which contain errors and <span id="summary-warning-count">0</span> of which contain warnings</span>.
</p>
<pre id="listing-summary" style="display: none;"></pre>
</div>
<hr class="clearer"/>
<div id="progress">
<p id="progress-text">
The catalog is being loaded.
</p>
<div class="loader"></div>
<hr class="clearer"/>
</div>
<div id="marketplace-insertion-section" class="marketplace-insertion-section">
<h3 id="marketplace-title" class="section-header marketplace-title">
<button id="marketplace-section_arrow" class="orange bb marketplace-section_arrow" onclick="expand_collapse('marketplace-section');">&#x25B7;</button>
<img id="marketplace-small-image" class="marketplace-small-image" src="Configuration.png"/>
<href id="marketplace-title-span" class="marketplace-title-span bb" onclick="expand_collapse('marketplace-section');"></href>
<button class="bb"><img id="marketplace-status-image" style="display: none;" class="marketplace-small-image" src="Error.png"/></button>
</h3>
<div id="marketplace-section" class="marketplace-section" style="display: none;">
<div style=" overflow: hidden;">
<a href="" target="marketplace_listing"><img id="marketplace-image" class="marketplace-image" src=""/></a>
<div id="marketplace-body" class="marketplace-body"></div>
</div>
<div style="padding-bottom: 2ex;">
<span id="marketplace-launch" style="font-family: Arial, Helvetica, sans-serif;">
<a id="link-installer-launch" class="button" href="eclipse+installer:"><span style="color: #2c2255;">eclipse</span>+installer</a>
<a id="link-installer-launch-help" class="help-link" href="../installer/" target="eclipse_installer"><img class="help" src="../installer/Help.png"/></a>
<a id="link-mpc-launch" class="button" href="eclipse+mpc:" style="margin-left: 1em;"><span style="color: #2c2255;">eclipse</span>+mpc</a>
</span>
</div>
<div>
<div id="marketplace-main-repository" style="display: none;">
<img class="marketplace-small-image" src="Repository.png"/>
<a href="" id="marketkplace-main-url" class="marketplace-main-url" target="marketplace_site"></a>
<button class="bb" onclick=""><img id="marketkplace-main-url-problem" style="display: none;" class="marketplace-small-image" src="Error.png"/></button>
</div>
</div>
<div>
<div id="marketplace-main-iu" style="display: block;">
<img class="marketplace-small-image" src="Feature.png"/>
<span id="marketplace-main-iu-name" class="marketplace-main-iu-name"></span>
<button class="bb" onclick=""><img id="marketkplace-main-iu-problem" style="display: inline-block;" class="marketplace-small-image" src="Error.png"></button>
</div>
</div>
<div>
<div id="marketplace-stream" templateID="marketplace-stream" style="display: block;">
<img class="marketplace-small-image" src="Version.png"/>
<span templateID="marketplace-stream-name" class="marketplace-stream-name"></span>
<button class="bb" onclick=""><img templateID="marketkplace-stream-problem" style="display: inline-block;" class="marketplace-small-image" src="Error.png"></button>
<div>
<div templateID="marketplace-stream-repository" style="display: block;">
<img class="marketplace-small-image" src="Repository.png"/>
<a href="" templateID="marketkplace-stream-url" class="marketplace-stream-url" target="marketplace_site"></a>
<button class="bb" onclick=""><img templateID="marketkplace-stream-url-problem" style="display: none;" class="marketplace-small-image" src="Error.png"/></button>
</div>
</div>
<div>
<div templateID="marketplace-stream-iu" style="display: block;">
<img class="marketplace-small-image" src="Feature.png"/>
<span templateID="marketplace-stream-iu-name" class="marketplace-stream-iu-name"></span>
<button class="bb" onclick=""><img templateID="marketkplace-stream-iu-problem" style="display: inline-block;" class="marketplace-small-image" src="Error.png"></button>
</div>
</div>
</div>
</div>
</div>
<hr class="url-required clearer"/>
</div>
<div id="popup" class="modal-popup">
<span class="modal-popup-close">&times;</span>
<img class="modal-popup-content" id="modal-popup-image"/>
<div id="modal-popup-caption"></div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<!-- nav -->
<aside class="main-sidebar-default-margin" id="main-sidebar">
<ul id="leftnav" class="ul-left-nav fa-ul hidden-print">
<li class="separator">
<a class="separator">
<button id="copy" title="Copy Listing Summary to Clipboard" class="orange" style="background-color: transparent; border: none; padding: 0px 0px;" onclick="copyToClipboard('#listing-summary');">&#x270e;</button>
<a id="download" title="Download Listing Summary" href="" class="orange" style="color: DarkOrange;" onclick="downloadXML('list-report.xml', '#listing-summary');">&#x21e9;</a>
Reports
</a>
</li>
<li>
<i class="fa fa-caret-right fa-fw"/></i>
<a href="?">Usuable Listings</a>
</li>
<li>
<i class="fa fa-caret-right fa-fw"/></i>
<a href="?style=all">All Listings</a>
</li>
<li>
<i class="fa fa-caret-right fa-fw"/></i>
<a href="?style=warning">Listings with Warnings</a>
</li>
<li>
<i class="fa fa-caret-right fa-fw"/></i>
<a href="?style=error-only">Listings with Errors</a>
</li>
<li>
<i class="fa fa-caret-right fa-fw"/></i>
<a href="?style=error">Listings with Errors or Warnings</a>
</li>
<li>
<i class="fa fa-caret-right fa-fw"/></i>
<a href="?style=site-error">Listings with Broken Sites</a>
</li>
<li>
<i class="fa fa-caret-right fa-fw"/></i>
<a href="?style=resolution-error">Listings with Resolution Errors</a>
</li>
<li>
<i class="fa fa-caret-right fa-fw"/></i>
<a href="?style=iu-error">Listings with Unit Errors</a>
</li>
<li class="separator">Community</li>
<li>
<i class="fa fa-caret-right fa-fw"></i>
<a href="https://www.eclipse.org/forums/index.php/f/287/" target="oomph_forum">Ask a Question</a>
</li>
<li>
<i class="fa fa-caret-right fa-fw"></i>
<a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Oomph&amp;component=Setup&amp;short_desc=Marketplace%20reports" target="oomph_bugzilla">Report a Problem</a>
</li>
</ul>
</aside>
</div>
</div>
</div>
</main>
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/main.min.js?var=1.3"></script>
</body>
</html>