<!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 - Resources</title>
<meta name="description" content="Find the answers to your questions about Capella, an Open Source MBSE tool that implements the Arcadia method.">
<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>
<!-- bootstrap js -->
<script src="js/bootstrap.min.js"></script>
<!-- wow js -->
<script src="js/wow.min.js"></script>
<!-- template main js -->
<script 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 resources">
		<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">Resources</h1>
						</section>
						<!-- cd-intro -->
						<h2 class="wow fadeInUp animated" data-wow-delay=".6s">
								New to Eclipse Capella? Advanced user? Business executive?<br> Find the answers to your questions about Capella.
						</h2>
					</div>
				</div>
			</div>
		</div>
	</section>
	<!--/#intro_banner-->

	<section id="resources" class="">
		<div class="container">
			<div class="row">
					<ul class="nav nav-tabs">
						<li class="active"><a href="#topics" data-toggle="tab">Discover by Topics</a></li>
						<li><a href="#types" data-toggle="tab">Discover by Types</a></li>
						<li><a href="#domains" data-toggle="tab">Discover by Domains</a></li>
					</ul>
					<div id="myTabContent" class="tab-content">
						<div id="topics" class="tab-pane fade active in">
								<div id="topics_accordion" class="accordion dropdown_content"></div>
						</div>
						<div id="types" class="tab-pane">
								<div id="types_accordion" class="accordion dropdown_content"></div>
						</div>
						<div id="domains" class="tab-pane">
								<div id="domains_accordion" class="accordion dropdown_content"></div>
						</div>
					</div>

				<script>
					// Sort items by ascending order
					function GetSortOrder(prop) {
						return function(a, b) {
							if (a[prop] > b[prop]) {
								return 1;
							} else if (a[prop] < b[prop]) {
								return -1;
							}
							return 0;
						}
					}

					// Sort items by descending order
					function GetSortOrder_des(prop) {
						return function(a, b) {
							if (a[prop] < b[prop]) {
								return 1;
							} else if (a[prop] > b[prop]) {
								return -1;
							}
							return 0;
						}
					}

					$.getJSON('json/resources.json', function(data) {
						var topics_accordion_group = " ";
						var types_accordion_group = " ";
						var domains_accordion_group = " ";
						var topics_categories_row = " ";
						var types_categories_row = " ";
						var domains_categories_row = " ";

						for (var i in data.resources.topics) {
							var accordion_heading = " ";
							var accordion_body = " ";
							var accordion_inner = " ";
							var category_anchor = " ";
							var title = " ";
							var descr = " ";

							category_anchor = "<div class='col-md-2 col-xs-12'><a class='wow smooth-scroll' href='resources.html#topic-" + data.resources.topics[i].anchor + "' data-row='#topic-" + data.resources.topics[i].anchor + "'><img src='" + data.resources.topics[i].icon + "' /><p>" + data.resources.topics[i].title + "</p></a></div>";

							title += "<h3>" + data.resources.topics[i].title + "</h3>";
							descr += "<span class='descr txt_indigo'>" + data.resources.topics[i].descr + "</span><span class='fa fa-caret-down txt_yellow'>&nbsp;</span></a></div>";

							accordion_heading += "<div class='accordion-heading'><a class='accordion-toggle collapsed' data-toggle='collapse' data-parent='#types_accordion' href='#"
							+ data.resources.topics[i].anchor + "'>" + title + descr;

							for (var j in data.resources.items) {
								var item_infos = " ";

								data.resources.items.sort(GetSortOrder("topic_order"));

								if(data.resources.items[j].author != ""){
									item_infos += " | " + data.resources.items[j].author;
								}
								if(data.resources.items[j].year != ""){
									item_infos += " | " + data.resources.items[j].year;
								}
								if(data.resources.items[j].topic == data.resources.topics[i].title){
									if(data.resources.items[j].topic_order < 5){
										accordion_inner += "<div class='accordion-inner with_thumb'><div class='col-md-8 col-xs-8'><h4 class='linked_title'><a href='"
											+ data.resources.items[j].link + "' target='_blank'>"
											+ data.resources.items[j].title + "</a></h4><p class='descr txt_indigo txt_weight_300'>" + data.resources.items[j].type + item_infos + " | " + data.resources.items[j].language + "</p><p>"
											+ data.resources.items[j].descr + "</p></div><div class='col-md-4 col-xs-12'><a href='"
											+ data.resources.items[j].link + "' target='_blank'><img src='" + data.resources.items[j].thumb + "' alt='" + data.resources.items[j].title + "' /></a></div><div class='clearfix'></div></div>";
									}
									else{
										accordion_inner += "<div class='accordion-inner'><h4 class='linked_title'><a href='"
											+ data.resources.items[j].link + "' target='_blank'>"
											+ data.resources.items[j].title + "</a></h4><p class='descr txt_indigo txt_weight_300'>" + data.resources.items[j].type + item_infos + " | " + data.resources.items[j].language + "</p></div>";
									}
								}
							}

							topics_categories_row += category_anchor;

							accordion_body += "<div id='" + data.resources.topics[i].anchor + "' class='accordion-body collapse' style='height: 0px;'>" + accordion_inner + "</div>";
							topics_accordion_group += "<div class='accordion-group' id='topic-" + data.resources.topics[i].anchor + "'>" + accordion_heading + accordion_body + "</div>";

							document.getElementById("topics_accordion").innerHTML = "<div class='categories_anchors linked_title'>" + topics_categories_row + "</div><div class='clearfix'></div>" + topics_accordion_group;
						}

						for (var k in data.resources.types) {
							var accordion_heading = " ";
							var accordion_body = " ";
							var accordion_inner = " ";
							var category_anchor = " ";
							var title = " ";
							var descr = " ";

							category_anchor = "<div class='col-md-2 col-xs-12'><a class='wow smooth-scroll' href='resources.html#type-" + data.resources.types[k].anchor + "' data-row='#type-" + data.resources.types[k].anchor + "'><img src='" + data.resources.types[k].icon + "' /><p>" + data.resources.types[k].title + "</p></a></div>";

							title += "<h3>" + data.resources.types[k].title + "</h3>";
							descr += "<span class='descr txt_indigo'>" + data.resources.types[k].descr + "</span><span class='fa fa-caret-down txt_yellow'>&nbsp;</span></a></div>";

							accordion_heading += "<div class='accordion-heading'><a class='accordion-toggle collapsed' data-toggle='collapse' data-parent='#topics_accordion' href='#"
							+ data.resources.types[k].anchor + "'>" + title + descr;

							for (var m in data.resources.items) {
								var item_infos = " ";

								data.resources.items.sort(GetSortOrder("type_order"));

								if(data.resources.items[m].author != ""){
									item_infos += " | " + data.resources.items[m].author;
								}
								if(data.resources.items[m].year != ""){
									item_infos += " | " + data.resources.items[m].year;
								}
								if(data.resources.items[m].type == data.resources.types[k].title){
									if(data.resources.items[m].type_order < 5){
										accordion_inner += "<div class='accordion-inner with_thumb'><div class='col-md-8 col-xs-8'><h4 class='linked_title'><a href='"
											+ data.resources.items[m].link + "' target='_blank'>"
											+ data.resources.items[m].title + "</a></h4><p class='descr txt_indigo txt_weight_300'>" + data.resources.items[m].topic + item_infos + " | " + data.resources.items[m].language + "</p><p>"
											+ data.resources.items[m].descr + "</p></div><div class='col-md-4 col-xs-12'><a href='"
											+ data.resources.items[m].link + "' target='_blank'><img src='" + data.resources.items[m].thumb + "' alt='" + data.resources.items[m].title + "' /></a></div><div class='clearfix'></div></div>";
									}
									else{
										accordion_inner += "<div class='accordion-inner'><h4 class='linked_title'><a href='"
											+ data.resources.items[m].link + "' target='_blank'>"
											+ data.resources.items[m].title + "</a></h4><p class='descr txt_indigo txt_weight_300'>" + data.resources.items[m].topic + item_infos + " | " + data.resources.items[m].language + "</p></div>";
									}
								}
							}

							types_categories_row += category_anchor;

							accordion_body += "<div id='" + data.resources.types[k].anchor + "' class='accordion-body collapse' style='height: 0px;'>" + accordion_inner + "</div>";
							types_accordion_group += "<div class='accordion-group' id='type-" + data.resources.types[k].anchor + "'>" + accordion_heading + accordion_body + "</div>";

							document.getElementById("types_accordion").innerHTML = "<div class='categories_anchors linked_title'>" + types_categories_row + "</div><div class='clearfix'></div>" + types_accordion_group;
						}

						for (var i in data.resources.types) {
							var accordion_heading = " ";
							var accordion_body = " ";
							var accordion_inner = " ";
							var category_anchor = " ";
							var title = " ";
							var descr = " ";

							category_anchor = "<div class='col-md-2 col-xs-12'><a class='wow smooth-scroll' href='resources.html#domain-" + data.resources.domains[i].anchor + "' data-row='#domain-" + data.resources.domains[i].anchor + "'><img src='" + data.resources.domains[i].icon + "' /><p>" + data.resources.domains[i].title + "</p></a></div>";

							title += "<h3>" + data.resources.domains[i].title + "</h3>";
							descr += "<span class='descr txt_indigo'>" + data.resources.domains[i].descr + "</span><span class='fa fa-caret-down txt_yellow'>&nbsp;</span></a></div>";

							accordion_heading += "<div class='accordion-heading'><a class='accordion-toggle collapsed' data-toggle='collapse' data-parent='#types_accordion' href='#"
							+ data.resources.domains[i].anchor + "'>" + title + descr;

							for (var j in data.resources.items) {
								var item_infos = " ";

								data.resources.items.sort(GetSortOrder("domain_order"));

								if(data.resources.items[j].author != ""){
									item_infos += " | " + data.resources.items[j].author;
								}
								if(data.resources.items[j].year != ""){
									item_infos += " | " + data.resources.items[j].year;
								}
								if(data.resources.items[j].domain == data.resources.domains[i].title){
									if(data.resources.items[j].domain_order < 5){
										accordion_inner += "<div class='accordion-inner with_thumb'><div class='col-md-8 col-xs-8'><h4 class='linked_title'><a href='"
											+ data.resources.items[j].link + "' target='_blank'>"
											+ data.resources.items[j].title + "</a></h4><p class='descr txt_indigo txt_weight_300'>" + data.resources.items[j].type + item_infos + " | " + data.resources.items[j].language + "</p><p>"
											+ data.resources.items[j].descr + "</p></div><div class='col-md-4 col-xs-12'><a href='"
											+ data.resources.items[j].link + "' target='_blank'><img src='" + data.resources.items[j].thumb + "' alt='" + data.resources.items[j].title + "' /></a></div><div class='clearfix'></div></div>";
									}
									else{
										accordion_inner += "<div class='accordion-inner'><h4 class='linked_title'><a href='"
											+ data.resources.items[j].link + "' target='_blank'>"
											+ data.resources.items[j].title + "</a></h4><p class='descr txt_indigo txt_weight_300'>" + data.resources.items[j].type + item_infos + " | " + data.resources.items[j].language + "</p></div>";
									}
								}
							}

							domains_categories_row += category_anchor;

							accordion_body += "<div id='" + data.resources.domains[i].anchor + "' class='accordion-body collapse' style='height: 0px;'>" + accordion_inner + "</div>";
							domains_accordion_group += "<div class='accordion-group' id='domain-" + data.resources.domains[i].anchor + "'>" + accordion_heading + accordion_body + "</div>";

							document.getElementById("domains_accordion").innerHTML = "<div class='categories_anchors linked_title'>" + domains_categories_row + "</div><div class='clearfix'></div>" + domains_accordion_group;
						}

						new WOW().init();
						jQuery('.smooth-scroll').scrollingTo();
					});
				</script>
		</div>
	</section>

	<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.html'"></ng-include>

	<!--
        ==================================================
        Footer Section
        ================================================== -->
	<ng-include src="'angular/blocks/footer.html'"></ng-include>
	<script async src="js/googleAnalytics.js" ></script>
</body>
</html>