Produce charts of component availability at JLCPCB from a BOM
Mirrored from https://github.com/gavanfantom/jlc-chart
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.9 KiB
97 lines
2.9 KiB
<!DOCTYPE html> |
|
<html lang="en"> |
|
<head> |
|
<meta charset="utf-8" /> |
|
<title>JLCPCB stock query: BOM</title> |
|
<style> |
|
table, th, td { |
|
border: 1px solid #ddd; |
|
border-collapse: collapse; |
|
padding: 8px; |
|
} |
|
th { |
|
padding-top: 12px; |
|
padding-bottom: 12px; |
|
background-color: #04AA6D; |
|
color: white; |
|
} |
|
tr:nth-child(even) {background-color: #f2f2f2;} |
|
tr:hover {background-color: #ddd;} |
|
.error { |
|
background-color: #ff0000; |
|
color: white; |
|
} |
|
</style> |
|
<script> |
|
function add_to_db(code, id) { |
|
fetch('{{ url_for('bom.add') }}', { |
|
method:'POST', |
|
headers: { |
|
'Content-Type': 'application/json' |
|
}, |
|
body: JSON.stringify({ |
|
'code': code |
|
}) |
|
}) |
|
.then(response => { |
|
if (!response.ok) { |
|
return Promise.reject("Request failed") |
|
} else { |
|
return response.json() |
|
} |
|
}) |
|
.then(data => { |
|
if (data.id) { |
|
document.getElementById(id).innerHTML = data.id; |
|
update_link(); |
|
} |
|
}) |
|
.catch((error) => { |
|
document.getElementById(id).innerHTML = '<div class="error">FAIL</div>'; |
|
console.error('Error', error); |
|
}); |
|
} |
|
function update_link() { |
|
var rows = {{table|length}}; |
|
var id_col = {{headings|length}}; |
|
var idlist = []; |
|
for (let i = 1; i <= rows; i++) { |
|
if (document.getElementById('select_' + i).checked) { |
|
var id = document.getElementById('td_' + i + '_' + id_col).innerHTML; |
|
if (!isNaN(id)) { |
|
idlist.push(id) |
|
} |
|
} |
|
} |
|
var url = '{{ url_for('components.components', components='') }}' + idlist.join('+'); |
|
document.getElementById('graphlink').href = url; |
|
} |
|
</script> |
|
</head> |
|
|
|
<body> |
|
<table> |
|
<tr> |
|
{% for item in headings -%} |
|
<th>{{ item }}</th> |
|
{% endfor -%} |
|
<th>View</th> |
|
</tr> |
|
{% for row in table -%} |
|
{% set rowloop = loop -%} |
|
<tr> |
|
{% for item in row -%} |
|
{% if loop.last and item == '' -%} |
|
<td id="td_{{rowloop.index}}_{{loop.index}}"><button onclick="add_to_db('{{loop.previtem}}', 'td_{{rowloop.index}}_{{loop.index}}')">Fetch data</button></td> |
|
{% else -%} |
|
<td id="td_{{rowloop.index}}_{{loop.index}}">{{ item }}</td> |
|
{% endif -%} |
|
{% endfor -%} |
|
<td><input type="checkbox" id="select_{{rowloop.index}}" checked=checked onclick="update_link()"></td> |
|
</tr> |
|
{% endfor -%} |
|
</table> |
|
<p/> |
|
<center><h1><a id='graphlink' href='{{ url_for('components.components', components='') }}{{table | map('last') | select('number') | join('+') }}'>See the graphs!</a></h1></center> |
|
</body> |
|
</html>
|
|
|