xxxxxxxxxx
<html lang="en">
<head>
<title>Root Error Solver</title>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="Mobland - Mobile App Landing Page Template">
<meta name="keywords" content="HTML5, bootstrap, mobile, app, landing, ios, android, responsive">
<!-- Font -->
<link rel="dns-prefetch" href="//fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css?family=Rubik:300,400,500" rel="stylesheet">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta.2/css/bootstrap.min.css">
<!-- Themify Icons -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/lykmapipo/themify-icons@0.1.2/css/themify-icons.css">
<!-- Owl carousel -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/assets/owl.carousel.min.css">
<!-- Main css -->
<link href="style.css" rel="stylesheet">
<style>
.svg-container {
display: inline-block;
position: relative;
width: 100%;
padding-bottom: 80%;
/* aspect ratio */
vertical-align: top;
overflow: hidden;
}
.svg-content-responsive {
display: inline-block;
position: absolute;
top: 10px;
left: 0;
}
div#canvas {
background-color: white;
border: 1px solid #999;
border-radius: 5px;
position: relative;
}
div#canvas .description {
color: #777;
position: absolute;
bottom: 0;
left: 0;
right: 0;
background-color: #EEE;
border-top: 1px solid #999;
border-bottom-left-radius: inherit;
border-bottom-right-radius: inherit;
padding: 5px;
}
svg.rule {
opacity: 1;
}
.edge line {
stroke: rgb(153, 153, 153);
stroke-width: 1.5px;
pointer-events: none;
}
marker {
fill: rgb(99, 99, 99);
stroke: rgb(153, 153, 153);
}
.node circle {
stroke-width: 2;
stroke: rgb(153, 153, 153);
fill: rgb(153, 153, 153);
cursor: pointer;
}
</style>
</head>
<body data-spy="scroll" data-target="#navbar" data-offset="30">
<!-- Nav Menu -->
<div class="nav-menu fixed-top is-scrolling">
<div class="container">
<div class="row">
<div class="col-md-12">
<nav class="navbar navbar-dark navbar-expand-lg">
<a class="navbar-brand" href="index.html"><img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/logo.png" class="img-fluid" alt="logo"></a> <button class="navbar-toggler" type="button" data-toggle="collapse"
data-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button>
<div class="collapse navbar-collapse" id="navbar">
<ul class="navbar-nav ml-auto">
<li class="nav-item"> <a class="nav-link active" href="#home">HOME <span class="sr-only">(current)</span></a> </li>
<li class="nav-item"> <a class="nav-link" href="#features">FEATURES</a> </li>
<li class="nav-item"> <a class="nav-link" href="#gallery">GALLERY</a> </li>
<li class="nav-item"> <a class="nav-link" href="#pricing">PRICING</a> </li>
<li class="nav-item"> <a class="nav-link" href="#contact">CONTACT</a> </li>
<li class="nav-item"><a href="#" class="btn btn-outline-light my-3 my-sm-0 ml-lg-3">Download</a></li>
</ul>
</div>
</nav>
</div>
</div>
</div>
</div>
<header class="bg-gradient" id="home">
<div class="container mt-5">
<h1>Questionaire Validation</h1>
<p class="tagline">Validate and sort error of rule using centrality algorithm</p>
</div>
<div class="img-holder mt-3"><img src="images/questionaires.png" alt="phone" class="img-fluid"></div>
</header>
<div class="client-logos my-5">
<div class="container text-center">
<img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/client-logos.png" alt="client logos" class="img-fluid">
</div>
</div>
<!-- // end .section -->
<!-- // end .section -->
<div class="section light-bg">
<div class="container">
<div class="section-title">
<small>TRY IT YOURSELF</small>
<h3>Fill the questionaire and validate it</h3>
</div>
<ul class="nav nav-tabs nav-justified" role="tablist">
<li class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#q_demography">Demography</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#q_education">Education</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#q_healthy">Healthy</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane fade show active" id="q_demography">
<ul class="nav nav-pills nav-justified" role="tablist">
<li>
<a class="nav-link" data-toggle="tab" action="q_d_add" href="#q_d_+">+</a>
</li>
<li class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#q_d_1">ART-1</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane fade show active" id="q_d_1">
asdf
</div>
</div>
</div>
<div class="tab-pane fade" id="q_education">
<div class="d-flex flex-column flex-lg-row">
<div>
<h2>Scheduling when you want</h2>
<p class="lead">Uniquely underwhelm premium outsourcing with proactive leadership skills. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer rutrum, urna eu pellentesque pretium, nisi nisi fermentum enim, et sagittis dolor nulla vel sapien. Vestibulum sit amet mattis ante. Ut placerat dui eu nulla
congue tincidunt ac a nibh. Mauris accumsan pulvinar lorem placerat volutpat. Praesent quis facilisis elit. Sed condimentum neque quis ex porttitor,
</p>
<p> malesuada faucibus augue aliquet. Sed elit est, eleifend sed dapibus a, semper a eros. Vestibulum blandit vulputate pharetra. Phasellus lobortis leo a nisl euismod, eu faucibus justo sollicitudin. Mauris consectetur, tortor
sed tempor malesuada, sem nunc porta augue, in dictum arcu tortor id turpis. Proin aliquet vulputate aliquam.
</p>
</div>
<img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/graphic.png" alt="graphic" class="img-fluid rounded align-self-start mr-lg-5 mb-5 mb-lg-0">
</div>
</div>
<div class="tab-pane fade" id="q_healthy">
<div class="d-flex flex-column flex-lg-row">
<img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/graphic.png" alt="graphic" class="img-fluid rounded align-self-start mr-lg-5 mb-5 mb-lg-0">
<div>
<h2>Realtime Messaging service</h2>
<p class="lead">Uniquely underwhelm premium outsourcing with proactive leadership skills. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer rutrum, urna eu pellentesque pretium, nisi nisi fermentum enim, et sagittis dolor nulla vel sapien. Vestibulum sit amet mattis ante. Ut placerat dui eu nulla
congue tincidunt ac a nibh. Mauris accumsan pulvinar lorem placerat volutpat. Praesent quis facilisis elit. Sed condimentum neque quis ex porttitor,
</p>
<p> malesuada faucibus augue aliquet. Sed elit est, eleifend sed dapibus a, semper a eros. Vestibulum blandit vulputate pharetra. Phasellus lobortis leo a nisl euismod, eu faucibus justo sollicitudin. Mauris consectetur, tortor
sed tempor malesuada, sem nunc porta augue, in dictum arcu tortor id turpis. Proin aliquet vulputate aliquam.
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- // end .section -->
<div class="section">
<div class="container">
<div class="section-title">
<small>THE RULE</small>
<h3>Using Centrality Theory</h3>
</div>
<div id="canvas">
<span class="description">Rule Representation Graph</span>
<svg class="jsnx rule"></svg>
</div>
</div>
</div>
<!-- // end .section -->
<div class="section light-bg" id="gallery">
<div class="container">
<div class="section-title">
<small>GALLERY</small>
<h3>App Screenshots</h3>
</div>
<div class="img-gallery owl-carousel owl-theme owl-loaded owl-drag">
<div class="owl-stage-outer">
<div class="owl-stage" style="transition: 0.25s; width: 3100px; transform: translate3d(-1550px, 0px, 0px);">
<div class="owl-item cloned" style="width: 310px;"><img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/screen2.jpg" alt="image"></div>
<div class="owl-item cloned" style="width: 310px;"><img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/screen3.jpg" alt="image"></div>
<div class="owl-item cloned" style="width: 310px;"><img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/screen1.jpg" alt="image"></div>
<div class="owl-item" style="width: 310px;"><img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/screen1.jpg" alt="image"></div>
<div class="owl-item" style="width: 310px;"><img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/screen2.jpg" alt="image"></div>
<div class="owl-item active" style="width: 310px;"><img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/screen3.jpg" alt="image"></div>
<div class="owl-item active center" style="width: 310px;"><img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/screen1.jpg" alt="image"></div>
<div class="owl-item cloned active" style="width: 310px;"><img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/screen1.jpg" alt="image"></div>
<div class="owl-item cloned" style="width: 310px;"><img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/screen2.jpg" alt="image"></div>
<div class="owl-item cloned" style="width: 310px;"><img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/screen3.jpg" alt="image"></div>
</div>
</div>
<div class="owl-nav disabled">
<div class="owl-prev"><span class="ti-arrow-left"></span></div>
<div class="owl-next"><span class="ti-arrow-right"></span></div>
</div>
<div class="owl-dots">
<div class="owl-dot"><span></span></div>
<div class="owl-dot"><span></span></div>
<div class="owl-dot"><span></span></div>
<div class="owl-dot active"><span></span></div>
</div>
</div>
</div>
</div>
<!-- // end .section -->
<div class="section" id="pricing">
<div class="container">
<div class="section-title">
<small>PRICING</small>
<h3>Upgrade to Pro</h3>
</div>
<div class="card-deck">
<div class="card pricing">
<div class="card-head">
<small class="text-primary">PERSONAL</small>
<span class="price">$14<sub>/m</sub></span>
</div>
<ul class="list-group list-group-flush">
<div class="list-group-item">10 Projects</div>
<div class="list-group-item">5 GB Storage</div>
<div class="list-group-item">Basic Support</div>
<div class="list-group-item"><del>Collaboration</del></div>
<div class="list-group-item"><del>Reports and analytics</del></div>
</ul>
<div class="card-body">
<a href="#" class="btn btn-primary btn-lg btn-block">Choose this Plan</a>
</div>
</div>
<div class="card pricing popular">
<div class="card-head">
<small class="text-primary">FOR TEAMS</small>
<span class="price">$29<sub>/m</sub></span>
</div>
<ul class="list-group list-group-flush">
<div class="list-group-item">Unlimited Projects</div>
<div class="list-group-item">100 GB Storage</div>
<div class="list-group-item">Priority Support</div>
<div class="list-group-item">Collaboration</div>
<div class="list-group-item">Reports and analytics</div>
</ul>
<div class="card-body">
<a href="#" class="btn btn-primary btn-lg btn-block">Choose this Plan</a>
</div>
</div>
<div class="card pricing">
<div class="card-head">
<small class="text-primary">ENTERPRISE</small>
<span class="price">$249<sub>/m</sub></span>
</div>
<ul class="list-group list-group-flush">
<div class="list-group-item">Unlimited Projects</div>
<div class="list-group-item">Unlimited Storage</div>
<div class="list-group-item">Collaboration</div>
<div class="list-group-item">Reports and analytics</div>
<div class="list-group-item">Web hooks</div>
</ul>
<div class="card-body">
<a href="#" class="btn btn-primary btn-lg btn-block">Choose this Plan</a>
</div>
</div>
</div>
<!-- // end .pricing -->
</div>
</div>
<!-- // end .section -->
<div class="section pt-0">
<div class="container">
<div class="section-title">
<small>FAQ</small>
<h3>Frequently Asked Questions</h3>
</div>
<div class="row pt-4">
<div class="col-md-6">
<h4 class="mb-3">Can I try before I buy?</h4>
<p class="light-font mb-5">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer rutrum, urna eu pellentesque pretium, nisi nisi fermentum enim, et sagittis dolor nulla vel sapien. Vestibulum sit amet mattis ante. </p>
<h4 class="mb-3">What payment methods do you accept?</h4>
<p class="light-font mb-5">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer rutrum, urna eu pellentesque pretium, nisi nisi fermentum enim, et sagittis dolor nulla vel sapien. Vestibulum sit amet mattis ante. </p>
</div>
<div class="col-md-6">
<h4 class="mb-3">Can I change my plan later?</h4>
<p class="light-font mb-5">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer rutrum, urna eu pellentesque pretium, nisi nisi fermentum enim, et sagittis dolor nulla vel sapien. Vestibulum sit amet mattis ante. </p>
<h4 class="mb-3">Do you have a contract?</h4>
<p class="light-font mb-5">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer rutrum, urna eu pellentesque pretium, nisi nisi fermentum enim, et sagittis dolor nulla vel sapien. Vestibulum sit amet mattis ante. </p>
</div>
</div>
</div>
</div>
<!-- // end .section -->
<div class="section bg-gradient">
<div class="container">
<div class="call-to-action">
<div class="box-icon"><span class="ti-mobile gradient-fill ti-3x"></span></div>
<h2>Download Anywhere</h2>
<p class="tagline">Available for all major mobile and desktop platforms. Rapidiously visualize optimal ROI rather than enterprise-wide methods of empowerment. </p>
<div class="my-4">
<a href="#" class="btn btn-light"><img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/appleicon.png" alt="icon"> App Store</a>
<a href="#" class="btn btn-light"><img src="https://github.com/soedomoto/soedomoto.github.io/raw/master/images/playicon.png" alt="icon"> Google play</a>
</div>
<p class="text-primary"><small><i>*Works on iOS 10.0.5+, Android Kitkat and above. </i></small></p>
</div>
</div>
</div>
<!-- // end .section -->
<div class="light-bg py-5" id="contact">
<div class="container">
<div class="row">
<div class="col-lg-6 text-center text-lg-left">
<p class="mb-2"> <span class="ti-location-pin mr-2"></span> 1485 Pacific St, Brooklyn, NY 11216 USA</p>
<div class=" d-block d-sm-inline-block">
<p class="mb-2">
<span class="ti-email mr-2"></span> <a class="mr-4" href="mailto:support@mobileapp.com">support@mobileapp.com</a>
</p>
</div>
<div class="d-block d-sm-inline-block">
<p class="mb-0">
<span class="ti-headphone-alt mr-2"></span> <a href="tel:51836362800">518-3636-2800</a>
</p>
</div>
</div>
<div class="col-lg-6">
<div class="social-icons">
<a href="#"><span class="ti-facebook"></span></a>
<a href="#"><span class="ti-twitter-alt"></span></a>
<a href="#"><span class="ti-instagram"></span></a>
</div>
</div>
</div>
</div>
</div>
<!-- // end .section -->
<footer class="my-5 text-center">
<!-- Copyright removal is not prohibited! -->
<p class="mb-2"><small>COPYRIGHT © 2017. ALL RIGHTS RESERVED. MOBAPP TEMPLATE BY <a href="https://colorlib.com">COLORLIB</a></small></p>
<small>
<a href="#" class="m-2">PRESS</a>
<a href="#" class="m-2">TERMS</a>
<a href="#" class="m-2">PRIVACY</a>
</small>
</footer>
<!-- jQuery and Bootstrap -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta.2/js/bootstrap.bundle.min.js"></script>
<!-- Plugins JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/owlcarousel2/2.2.1/owl.carousel.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/sortable/1.4.0/sortable.min.js"></script>
<script src="https://d3js.org/d3.v3.min.js"></script>
<script src="/emeeks/9915de8989e2a5c34652/7d22d8e4f05e944ced10408ae64579beff3c0858/jsnetworkx.js"></script>
<script src="https://cdn.jsdelivr.net/gh/eligrey/canvas-toblob.js/f1a01896135ab378aa5c0118eadd81da55e698d8/canvas-toblob.js"></script>
<script src="https://cdn.jsdelivr.net/gh/eligrey/filesaver.js/e9d941381475b5df8b7d7691013401e171014e89/filesaver.min.js"></script>
<!-- Custom JS -->
<script src="script.js"></script>
<script type="text/javascript">
jQuery(function($) {
$(document).ready(function() {
// QUESTIONAIRE
$("[action=q_d_add]").on("click", function() {
$('<li class="nav-item"><a class="nav-link" data-toggle="tab" href="#q_d_2">ART-X ' +
'<button class="close" type="button" style="color: inherit;" title="Remove this tab">×</button></a></li>').appendTo($("#q_demography .nav"));
$('<div class="tab-pane fade show" id="q_d_2">qwer</div>')
.appendTo($("#q_demography .tab-content"));
});
$("#q_demography .nav").on('click', '.close', function() {
var tabID = $(this).parents('a').attr('href');
$(this).parents('li').remove();
$(tabID).remove();
//display first tab
var tabFirst = $('#q_demography li.nav-item:first a');
tabFirst.tab('show');
});
new Sortable($("#q_demography .nav")[0]);
});
});
// Draw Graph
var rule_graph_file = "https://gist.githubusercontent.com/soedomoto/423c6f39cabaf2e4725110ee96228597/raw/6a8193849dec981e9686fac4c38189dc90eb404b/rule_graph.json",
data_error_file = "https://gist.githubusercontent.com/soedomoto/69187b949305271ae4f118e0b53f3c64/raw/77aec3d12ca798182a5cafb1b159ddf2da5f8270/data_error.csv";
var color_map = {
"O": "rgb(255, 165, 0)",
"P": "rgb(255, 192, 203)",
"B": "rgb(0, 0, 255)",
"W": "rgb(255, 255, 255)",
"G": "rgb(0, 128, 0)",
"R": "rgb(255, 0, 0)",
"M": "rgb(255,0,255)",
"C": "rgb(0,255,255)"
}
var canvas_width = d3.select("#canvas").node().getBoundingClientRect().width,
canvas_height = 500,
svg_rule_width = 1.00 * canvas_width,
svg_rule_height = canvas_height - 30.23;
d3.select("div#canvas")
.style("height", canvas_height + 'px')
.classed("svg-container", true)
.select("svg.rule")
.attr("preserveAspectRatio", "xMinYMin meet")
.attr("viewBox", "0 0 " + svg_rule_width + " " + svg_rule_height + "")
.classed("svg-content-responsive", true);
function encode_rule(rule) {
rule = rule.replace("==", "_eq_");
rule = rule.replace("!=", "_neq_");
rule = rule.replace(">", "_g_");
rule = rule.replace(">=", "_ge_");
rule = rule.replace("<", "_l_");
rule = rule.replace("<=", "_le_");
vov = rule.split("_");
return {
'rule': rule,
'variable': vov[0],
'operator': vov[1],
'value': vov[2]
};
}
function random_int(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
d3.json(rule_graph_file, function(error, graph) {
if (error) throw error;
graph.nodes.forEach(function(n) {
r = encode_rule(n.id);
n.rule = r.rule;
n.variable = r.variable;
n.operator = r.operator;
n.value = r.value;
});
var nodeHash = graph.nodes.reduce(function(map, n) {
map[n.id] = n;
return map;
}, {});
graph.links.forEach(function(e, i) {
e.id = i;
e.source = nodeHash[e.source];
e.target = nodeHash[e.target];
e.weight = 5;
});
create_rule_network(graph.nodes, graph.links);
});
function create_rule_network(nodes, edges) {
var rule_force = d3.layout.force()
.nodes(nodes)
.links(edges)
.size([svg_rule_width, svg_rule_height])
.charge(-300)
.chargeDistance(100)
.gravity(0.05)
.on("tick", update_rule_network)
.on('end', function() {
console.log('Layout finished. Start processing data...');
process_data_error(data_error_file, nodes, edges);
});
var rule_drag = rule_force.drag();
var svg = d3.select("svg.rule"),
g = svg.append("g");
svg.append("svg:defs").selectAll("marker")
.data(["end"])
.enter().append("svg:marker")
.attr("id", String)
.attr("viewBox", "0 -5 10 10")
.attr("refX", 15)
.attr("refY", -1.5)
.attr("markerWidth", 6)
.attr("markerHeight", 6)
.attr("orient", "auto")
.append("svg:path")
.attr("d", "M0,-5L10,0L0,5")
.attr("class", "arrow");
g.append("g").attr("class", "edges")
.selectAll("g.edge")
.data(edges, function(d) {
return d.id
})
.enter()
.append("g")
.attr("class", "edge")
.append("line")
.attr("marker-end", "url(#end)");
var g_nodes = g.append("g").attr("class", "nodes")
.selectAll("g.node")
.data(nodes)
.enter()
.append("g")
.attr("class", function(d) {
return "node " + d.rule
})
.attr("variable", function(d) {
return d.variable
})
.attr("operator", function(d) {
return d.operator
})
.attr("value", function(d) {
return d.value
})
.call(rule_drag);
g_nodes.append("circle")
.attr("r", 6);
g_nodes.append("text")
.style("text-anchor", "middle")
.attr("y", 3)
.style("stroke-width", "1px")
.style("stroke-opacity", 0.75)
.style("stroke", "white")
.style("font-size", "8px")
.text(function(d) {
return d.id
})
.style("pointer-events", "none");
g_nodes.append("text")
.style("text-anchor", "middle")
.attr("y", 3)
.style("font-size", "8px")
.text(function(d) {
return d.id
})
.style("pointer-events", "none");
rule_force.start();
}
function update_rule_network(e) {
d3.select("svg.rule").selectAll("line")
.attr("x1", function(d) {
return d.source.x
})
.attr("y1", function(d) {
return d.source.y
})
.attr("x2", function(d) {
return d.target.x
})
.attr("y2", function(d) {
return d.target.y
});
d3.select("svg.rule").selectAll("g.node")
.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")";
});
}
function process_data_error(data_error_file, nodes, edges) {
d3.csv(data_error_file, function(error, data_error) {
// process_record_wrapper(data_error, 0);
process_record(data_error[0]);
});
}
function process_record_wrapper(data_error, i) {
if (i >= data_error.length) return;
if (i > 10) return;
console.log("+++++ PROCESSING RECORD #" + (i + 1) + " +++++");
process_record(data_error[i], function() {
process_record_wrapper(data_error, i + 1);
});
}
function process_record(data, finish_callback) {
var nodes_el = d3.selectAll(".node")
.each(function(d) {
d.input = data[d.variable];
if (d.input == null || d.input == "") d.input = "NULL";
});
start_evaluation(Number.MAX_SAFE_INTEGER, finish_callback);
}
function start_evaluation(previous_error, finish_callback) {
var current_error = previous_error,
init_color_it = 0;
d3.selectAll(".node")
.selectAll("circle")
.each(function(d) {
if (d.id.startsWith("G") && d.id.endsWith("-in")) {
d.color = "P";
} else if (d.id.startsWith("G") && d.id.endsWith("-out")) {
d.color = "B";
} else if (d.id.startsWith("C")) {
d.color = "W";
} else {
d.color = "O";
}
init_color_it += 1;
})
.transition()
.duration(200)
.style("fill", function(d) {
return color_map[d.color]
})
.delay(100)
.each("end", function(d) {
init_color_it -= 1;
if (init_color_it == 0) {
validate_input(this, d, function() {
console.log(" => Set valid rule(s) to " + color_map["G"]);
calculate_centrality(function(error_rules) {
current_error = error_rules.length;
console.log(" => Set error rule(s): " + error_rules.join(", ") +
" to " + color_map["M"]);
}, function(max_centrality_nodes) {
console.log(" => Max centrality rule(s): " + max_centrality_nodes.join(", "));
// make_revision(max_centrality_nodes, function(selected_node) {
// console.log(" => Selected rule: " + selected_node);
// }, function(variable, old_val, new_val) {
// console.log(" => Value of variable " + variable +
// " is revised from " + old_val +
// " to " + new_val);
// }, function() {
// if (current_error < previous_error) {
// start_evaluation(current_error, finish_callback);
// } else {
// console.log("FINISH");
// finish_callback();
// }
// });
});
});
}
});
}
function validate_input(el, d, callback) {
var val_inp_iter = 0;
d3.selectAll(".node")
.selectAll("circle")
.filter(function(d) {
if (d.id.startsWith("R")) return true;
else return false;
})
.each(function(d) {
d.valid = false;
}).each(function(d) {
var str_value = d.input,
val = Number(str_value),
rule_val = Number(d.value);
if (d.value == "NULL" && str_value == "NULL") d.valid = true;
if (d.operator == "eq") {
if (d.value.indexOf("-") !== -1) {
var min_max = d.value.split("-");
try {
var min = Number(min_max[0]),
max = Number(min_max[1]);
if (val >= min && val <= max) d.valid = true;
} catch (err) {}
} else if (d.value == str_value) d.valid = true;
}
if (val != NaN && rule_val != NaN) {
if (d.operator == "g") {
if (val > rule_val) d.valid = true;
} else if (d.operator == "ge") {
if (val >= rule_val) d.valid = true;
} else if (d.operator == "l") {
if (val < rule_val) d.valid = true;
} else if (d.operator == "le") {
if (val <= rule_val) d.valid = true;
}
}
}).filter(function(d) {
if (d.valid) return true;
else false;
})
.each(function(d) {
d.color = "G";
val_inp_iter += 1;
}).transition()
.duration(500)
.style("fill", function(d) {
return color_map[d.color]
}).delay(200)
.each("end", function(d) {
// Greenify the related group too
d3.selectAll("." + d.group + "-in,." + d.group + "-out")
.selectAll("circle")
.each(function(d) {
d.valid = true;
d.color = "G";
})
.transition()
.duration(500)
.style("fill", function(d) {
return color_map[d.color];
})
.delay(200)
.each("end", function(d) {});
val_inp_iter -= 1;
if (val_inp_iter == 0) {
callback();
}
});
}
function calculate_centrality(err_callback, cent_callback) {
var hyper_edges = {},
error_rules = [],
rule_error_iter = 0;
var err_nodes = d3.selectAll(".node")
.selectAll("circle")
.filter(function(d) {
if (d.id.startsWith("C")) return true;
return false
}).each(function(d) {
var source_variables = [],
target_variables = [],
is_target_error = false;
in_edges = d3.selectAll(".edge")
.filter(function(e) {
if (e.target.id == d.id) return true;
else return false;
}).each(function(f) {
// console.log(d.variable, f.source.id, f.source.color)
if (f.source.color == "G") {
if (f.source.rule.startsWith("G")) {
d3.selectAll(".edge")
.filter(function(e) {
if (e.target.id == f.source.id) return true;
return false;
})
.each(function(g) {
source_variables.push(g.source.variable);
});
} else {
source_variables.push(f.source.variable);
}
}
});
out_edges = d3.selectAll(".edge")
.filter(function(e) {
if (e.source.id == d.id) return true;
else return false;
}).each(function(d) {
if (d.target.rule.startsWith("G")) {
d3.selectAll(".edge")
.filter(function(e) {
if (e.source.id == d.target.id) return true;
return false;
})
.each(function(d) {
target_variables.push(d.target.variable);
});
} else {
target_variables.push(d.target.variable);
}
if (d.target.color == "G") is_target_error = true;
});
// console.log(d.rule, source_variables, target_variables)
d.source_variables = source_variables;
d.target_variables = target_variables;
if (source_variables.length != 0 && !is_target_error) {
d.error = true;
d.color = "M";
} else d.error = false;
})
.each(function(d) {
var hyper_edge = [];
if (d.error) {
d.source_variables.forEach(function(sv) {
d.target_variables.forEach(function(tv) {
if (!hyper_edge.includes(sv)) {
hyper_edge.push(sv);
}
if (!hyper_edge.includes(tv)) {
hyper_edge.push(tv);
}
});
});
// console.log("Hyperedges : ", d.rule, hyper_edge);
d.hyper_edge = hyper_edge;
hyper_edges[d.rule] = hyper_edge;
error_rules.push(d.id);;
}
})
.filter(function(d) {
return d.error;
})
.each(function(d) {
rule_error_iter += 1;
})
.transition()
.duration(1000)
.attr("r", 12)
.style("fill", function(d) {
return color_map[d.color];
})
.delay(200)
.each("end", function(d) {
d3.select(this)
.transition()
.duration(1000)
.attr("r", 6);
rule_error_iter -= 1;
if (rule_error_iter == 0) {
err_callback(error_rules);
var max_centrality_nodes = [],
c_hyper_edges = JSON.parse(JSON.stringify(hyper_edges));
while (Object.keys(hyper_edges).length > 0) {
var key = Object.keys(hyper_edges)[0],
hyper_edge = hyper_edges[key],
keys_to_remove = [];
hyper_edge.forEach(function(n) {
if (!(max_centrality_nodes.includes(n))) {
max_centrality_nodes.push(n);
}
Object.keys(hyper_edges).forEach(function(k) {
var he = hyper_edges[k];
if (he.includes(n)) {
if (!(keys_to_remove.includes(k))) {
keys_to_remove.push(k);
}
}
});
});
keys_to_remove.forEach(function(k) {
delete hyper_edges[k]
});
}
var max = -1,
selected_nodes = [];
max_centrality_nodes.forEach(function(n) {
var count = 0;
Object.keys(c_hyper_edges).forEach(function(k) {
var he = c_hyper_edges[k];
if (he.includes(n)) {
count += 1;
}
});
// console.log(n, count)
if (count > max) {
selected_nodes = [];
selected_nodes.push(n);
max = count;
} else if (count == max) {
selected_nodes.push(n);
}
});
max_centrality_nodes = selected_nodes;
cent_callback(max_centrality_nodes)
}
});
}
function make_revision(max_centrality_nodes, cdt_callback, change_callback, finish_callback) {
var revision_iter = 0,
candidate = 0;
var candidate_nodes = d3.selectAll(".node")
.selectAll("circle")
.each(function(d) {
d.candidate = -1;
})
.filter(function(d) {
if (max_centrality_nodes.includes(d.variable)) return true;
else return false;
})
.each(function(d) {
d.candidate = candidate;
candidate += 1;
});
var sel_cdt_idx = random_int(0, candidate - 1)
candidate_nodes.filter(function(d) {
if (d.candidate == sel_cdt_idx) {
d.color = "R";
cdt_callback(d.id)
return true;
}
return false;
})
.each(function() {
revision_iter += 1;
})
.transition()
.duration(1000)
.attr("r", 12)
.style("fill", function(d) {
return color_map[d.color];
})
.delay(200)
.each("end", function(d) {
d3.select(this)
.transition()
.duration(1000)
.attr("r", 6)
.delay(200)
.each("end", function(e) {
var val = d.value;
if (val.indexOf("-") !== -1) {
val = val.split("-")[0];
val = Number(val);
} else {
val = Number(val);
}
if (d.operator == "g") {
val += val;
} else if (d.operator == "l") {
val -= val;
}
change_callback(d.variable, d.input, val);
d.input = val;
// revision_iter -= 1;
// if (revision_iter == 0) {
finish_callback();
// }
});
});
}
</script>
</body>
</html>
Updated missing url https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/owl.carousel.min.js to https://cdnjs.cloudflare.com/ajax/libs/owlcarousel2/2.2.1/owl.carousel.min.js
Updated missing url https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.4.0/Sortable.min.js to https://cdnjs.cloudflare.com/ajax/libs/sortable/1.4.0/sortable.min.js
Updated missing url https://bl.ocks.org/emeeks/raw/9915de8989e2a5c34652/7d22d8e4f05e944ced10408ae64579beff3c0858/jsnetworkx.js to /emeeks/9915de8989e2a5c34652/7d22d8e4f05e944ced10408ae64579beff3c0858/jsnetworkx.js
Updated missing url https://cdn.rawgit.com/eligrey/canvas-toBlob.js/f1a01896135ab378aa5c0118eadd81da55e698d8/canvas-toBlob.js to https://cdn.jsdelivr.net/gh/eligrey/canvas-toblob.js/f1a01896135ab378aa5c0118eadd81da55e698d8/canvas-toblob.js
Updated missing url https://cdn.rawgit.com/eligrey/FileSaver.js/e9d941381475b5df8b7d7691013401e171014e89/FileSaver.min.js to https://cdn.jsdelivr.net/gh/eligrey/filesaver.js/e9d941381475b5df8b7d7691013401e171014e89/filesaver.min.js
https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js
https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta.2/js/bootstrap.bundle.min.js
https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/owl.carousel.min.js
https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.4.0/Sortable.min.js
https://d3js.org/d3.v3.min.js
https://bl.ocks.org/emeeks/raw/9915de8989e2a5c34652/7d22d8e4f05e944ced10408ae64579beff3c0858/jsnetworkx.js
https://cdn.rawgit.com/eligrey/canvas-toBlob.js/f1a01896135ab378aa5c0118eadd81da55e698d8/canvas-toBlob.js
https://cdn.rawgit.com/eligrey/FileSaver.js/e9d941381475b5df8b7d7691013401e171014e89/FileSaver.min.js