<!DOCTYPE html> | |
<html class="no-js"> | |
<head> | |
<!-- Basic Page Needs | |
================================================== --> | |
<meta charset="utf-8"> | |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | |
<link rel="icon" type="image/png" href="images/favicon.ico"> | |
<title>Capella MBSE Tool - Add-Ons</title> | |
<meta name="description" content="Beyond Capella, the ecosystem offers extensions to unleash the power of your MBSE workbench."> | |
<meta name="keywords" content=""> | |
<meta name="author" content=""> | |
<!-- Mobile Specific Metas | |
================================================== --> | |
<meta name="format-detection" content="telephone=no"> | |
<meta name="viewport" content="width=device-width, initial-scale=1"> | |
<!-- Template CSS Files | |
================================================== --> | |
<!-- Twitter Bootstrs CSS --> | |
<link rel="stylesheet" href="css/bootstrap.min.css"> | |
<!-- animate css --> | |
<link rel="stylesheet" href="css/animate.css"> | |
<!-- template main css file --> | |
<link rel="stylesheet" href="css/main.css"> | |
<!-- responsive css --> | |
<link rel="stylesheet" href="css/responsive.css"> | |
<link rel="stylesheet" href="css/latofonts.css"> | |
<script src="https://use.fontawesome.com/b51f77a16a.js"></script> | |
<!-- Cookie content --> | |
<link rel="stylesheet" type="text/css" href="//www.eclipse.org/eclipse.org-common/themes/solstice/public/stylesheets/vendor/cookieconsent/cookieconsent.min.css" /> | |
<script async src="//www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/vendor/cookieconsent/default.min.js"></script> | |
<!-- Eclipse Foundation Google Tag Manager --> | |
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': | |
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], | |
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= | |
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); | |
})(window,document,'script','dataLayer','GTM-5WLCZXC');</script> | |
<!-- End Google Tag Manager --> | |
<!-- Template Javascript Files | |
================================================== --> | |
<!-- Angular --> | |
<base href="/capella/"> | |
<script src="js/angular-1.7.8.min.js"></script> | |
<script src="angular/capella.js"></script> | |
<!-- modernizr js --> | |
<script src="js/vendor/modernizr-2.6.2.min.js"></script> | |
<!-- jquery --> | |
<script src="js/jquery-3.4.1.min.js"></script> | |
<script src="js/popper-1.14.3.min.js"></script> | |
<!-- bootstrap js --> | |
<script src="js/bootstrap.min.js"></script> | |
<!-- wow js --> | |
<script src="js/wow.min.js"></script> | |
<!-- template main js --> | |
<script async src="js/main.js"></script> | |
</head> | |
<body ng-app="capella" data-deferred-cloak> | |
<!-- | |
================================================== | |
Header Section | |
================================================== --> | |
<ng-include src="'angular/blocks/header.html'"></ng-include> | |
<!-- | |
================================================== | |
Intro Section | |
================================================== --> | |
<section class="hero-area addons"> | |
<div class="container"> | |
<div class="row"> | |
<div class="col-md-12 text-center"> | |
<div class="block wow fadeInUp" data-wow-delay=".3s"> | |
<section class="cd-intro"> | |
<h1 class="wow fadeInUp animated" data-wow-delay=".4s">Add-Ons</h1> | |
</section> | |
<!-- cd-intro --> | |
<h2 class="wow fadeInUp animated" data-wow-delay=".6s"> | |
Beyond Eclipse Capella, the ecosystem offers extensions <br>to | |
unleash the power of your MBSE workbench | |
</h2> | |
</div> | |
</div> | |
</div> | |
</div> | |
</section> | |
<!--/#intro_banner--> | |
<!-- | |
================================================== | |
Secure your industrial Capella deployment | |
================================================== --> | |
<section id="services" class=""> | |
<div class="container"> | |
<div class="row"> | |
<p><i>To install Capella extensions have a look to the <a href="https://github.com/eclipse/capella/blob/master/doc/plugins/org.polarsys.capella.ui.doc/html/Installation%20Guide/How%20to%20install%20Capella%20and%20Addons.mediawiki#Configuration_and_Extensibility" target="_blank">installation procedure</a></i></p> | |
</div> | |
<div class="row"> | |
<div id="accordion-opensource-addons" class="accordion dropdown_content"> | |
</div> | |
</div> | |
<div class="row"> | |
<div id="accordion-commercial-addons" class="accordion dropdown_content"> | |
</div> | |
</div> | |
<div class="row"> | |
<div id="accordion-labs-addons"><h1>Labs add-ons</h1></div> | |
It is the place where Capella users, as well as tool providers, can collaborate and create synergies to develop Capella add-ons | |
<a class="btn btn-default" href="https://labs4capella.github.io">Discover Labs for Capella <i class="fa fa-external-link"></i></a> | |
<br/><br/> | |
</div> | |
<div class="row"> | |
<div id="accordion-sample-addons" class="accordion dropdown_content"> | |
</div> | |
</div> | |
<div class="row"> | |
<p class="underline"><b><u>Compatibility and integration</u></b></p> | |
<p><i>Each author is responsible for the compatibility of his add-ons with different versions of Capella. See the Add-ons <a href="https://wiki.eclipse.org/Capella/Roadmap#Add-ons" target="_blank">releases and compatibility matrix</a></i> | |
<br><i>Additional integration may be needed between two add-ons provided by different authors.</i></p> | |
</div> | |
</div> | |
</section> | |
<script> | |
$.getJSON('json/downloads.json', function(data) { | |
let eplAddons = data.addons.filter(function(a) { return a.licence == 'EPL' && !a.isSample }); //Open-source add-ons | |
let commercialAddons = data.addons.filter(function(a) { return a.licence == 'Commercial' }); //Commercial add-ons | |
let sampleAddons = data.addons.filter(function(a) { return a.isSample }); | |
if (eplAddons.length != 0) { | |
addTitleToDiv("accordion-opensource-addons", "Open-Source Add-ons"); | |
for (addon in eplAddons) { | |
addAddonSection(data, eplAddons[addon], "accordion-opensource-addons"); | |
} | |
} | |
if (commercialAddons.length != 0) { | |
addTitleToDiv("accordion-commercial-addons", "Commercial Add-ons"); | |
for (addon in commercialAddons) { | |
addAddonSection(data, commercialAddons[addon], "accordion-commercial-addons"); | |
} | |
} | |
if (sampleAddons.length != 0) { | |
addTitleToDiv("accordion-sample-addons", "Sample Add-ons", "Add-ons that show how to start developing add-ons for Capella using Capella Studio"); | |
for (addon in sampleAddons) { | |
addAddonSection(data, sampleAddons[addon], "accordion-sample-addons"); | |
} | |
} | |
}); | |
function addTitleToDiv(divId, title, description) { | |
let desc = description == undefined ? "": description; | |
document.getElementById(divId).innerHTML += "<div><h1>" + title + "</h1>" + desc + "</div>"; | |
} | |
function createKeysLinks(data, addon, download, icons) { | |
let keys = Object.keys(download).filter(function(x) { return x != "notes" }); | |
let links = keys.map(function(k) { | |
let icon = icons == undefined && data.lang[k].icon ? '<i class="pl-2 {0}" aria-hidden="true"></i>'.format(data.lang[k].icon) : ""; | |
if (data.lang[k].target == "_expand") { | |
return '<a data-toggle="collapse" data-target="#collapse-notes-{3}">{4}{5}</a>'.format(download[k], data.lang[k].target, data.versionBranch, addon.key, data.lang[k].text, icon); | |
} else if (Array.isArray(download[k])) { | |
let value = download[k]; | |
return data.lang[k].text + "s"+ icon + " (" + value.map(function(x) { return '<a href="{0}" onClick="ga(\'send\', \'event\', \'Capella\', \'{1}\', \'{2}\');">{3}</a>'.format(x.url, data.versionBranch, addon.key, x.name) }).join(" + ")+")"; | |
} | |
return '<a href="{0}" {1} onClick="ga(\'send\', \'event\', \'Capella\', \'{2}\', \'{3}\');">{4}{5}</a>'.format(download[k], data.lang[k].target == undefined ? "" : 'target="'+data.lang[k].target+'}"', data.versionBranch, addon.key, data.lang[k].text, icon); | |
}).join(" - "); | |
return links; | |
} | |
function addAddonSection(data, addon, divId) { | |
let keys = Object.keys(addon.download); | |
let links = createKeysLinks(data, addon, addon.download); | |
let header = []; | |
if (addon.contact) { | |
header.push("Contact: "+addon.contact); | |
} | |
if (addon.licence) { | |
header.push("License: "+addon.licence); | |
} | |
if (addon.tags) { | |
let tags=''; | |
for (tag in addon.tags) { | |
tags+=' <button class="tag">'+addon.tags[tag]+'</button>'; | |
} | |
header.push(tags); | |
} | |
header=header.join(" - "); | |
let compatible = addon.compatibleWithCurrentVersion === false ? '<button role="button" class="fa fa-exclamation-triangle btn-link btn-xs alert-compatibility" data-toggle="tooltip" data-placement="bottom" title="{0}" ></button>'.format(data.lang.compatibility.text) : ""; | |
let addonName = addon.isViewpoint ? addon.name + " Viewpoint" : addon.name; | |
let fragment = addon.fragment != undefined ? addon.fragment : addon.key; | |
let dropdown = '<div class="accordion-heading"><a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordion2" href="#{0}"><h3>{1}</h3><span class="fa fa-caret-down txt_yellow"> </span><span class="descr txt_lightest_grey">{2}</span></a></div>'.format(fragment, addonName, header); | |
let sections = keys.filter(function(k) { return data.lang[k].target == "_expand" }).map(function(k) { | |
let div = '<div class="collapse notes-section" id="collapse-notes-'+addon.key+'"><h3>'+data.lang[k].text+'</h3>'+createKeysLinks(data, addon, addon.download[k])+addon.download[k]["notes"]+'</div>'; | |
return div; | |
}).join(""); | |
let content = '<div id="{0}" class="accordion-body collapse" style="height: 0px;"><div class="accordion-inner">{1}<p>{2}{3}</p>{4}</div></div>'.format(fragment, addon.description, compatible, links, sections); | |
let result = '<div class="accordion-group">{0}{1}</div>'.format(dropdown, content); | |
document.getElementById(divId).innerHTML += result; | |
$('[data-toggle="popover"]').popover( { html: true, container: 'body' }); | |
$('[data-toggle="tooltip"]').tooltip(); | |
} | |
</script> | |
<!-- #services --> | |
<div id="back-to-top" data-spy="affix" data-offset-top="100" | |
class="back-to-top hidden-xs hidden-sm affix-top"> | |
<button class="btn btn-default" title="Back to Top"> | |
<i class="fa fa-caret-up"></i> | |
</button> | |
</div> | |
<script type="text/javascript"> | |
// Back to top | |
jQuery('#back-to-top').on('click', function() { | |
jQuery("html, body").animate({ | |
scrollTop : 0 | |
}, 500); | |
return false; | |
}); | |
</script> | |
<!-- | |
================================================== | |
Call To Action Section Start | |
================================================== --> | |
<ng-include src="'angular/blocks/call2action_services.html'"></ng-include> | |
<!-- | |
================================================== | |
Footer Section | |
================================================== --> | |
<ng-include src="'angular/blocks/footer.html'"></ng-include> | |
<script async src="js/googleAnalytics.js" ></script> | |
</body> | |
</html> |