show all direct part fields

This commit is contained in:
King Kévin 2023-01-25 05:15:15 +01:00
parent ae5cf5b089
commit ccac519870
4 changed files with 46 additions and 13 deletions

View File

@ -16,6 +16,7 @@ div.resize {
} }
td { td {
padding: 0; padding: 0;
padding-left: 2px;
margin: 0px; margin: 0px;
align: top; align: top;
} }
@ -24,13 +25,12 @@ input.fill {
} }
div.name { div.name {
float:left; float:left;
margin-left: 2px;
margin-right: 5px; margin-right: 5px;
} }
div.justify { div.justify {
overflow: hidden; overflow: hidden;
} }
input.justify { .full {
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
box-sizing: border-box; box-sizing: border-box;

View File

@ -21,8 +21,15 @@
</td> </td>
<td class="right"> <td class="right">
<div class="resize"> <div class="resize">
<div class="name">name:</div><div class="justify"><input class="justify" type="text" id="part_name"></div> <div class="name">name:</div><div class="justify"><input class="full" type="text" id="part_name"></div>
<div class="name">description:</div><div class="justify"><input class="justify" type="text" id="part_description"></div> <div class="name">description:</div><div class="justify"><input class="full" type="text" id="part_description"></div>
<div>details:</div>
<div class="justify"><textarea class="full" id="part_details" rows="4"></textarea></div>
<div>package: <input type="text" id="part_package" size="4">-<input type="text" id="part_pincount" size="2"></div>
<div class="name">manufacturer:</div><div class="justify"><input class="full" type="text" id="part_manufacturer"></div>
<div class="name">family:</div><div class="justify"><input class="full" type="text" id="part_family"></div>
<div class="name"><a id="url_datasheet">datasheet</a>:</div><div class="justify"><input class="full" type="text" id="part_datasheet"></div>
<div class="name"><a id="url_page">page</a>:</div><div class="justify"><input class="full" type="text" id="part_page"></div>
</div> </div>
</td> </td>
</tr> </tr>

View File

@ -43,16 +43,41 @@ function results()
function select() function select()
{ {
const results = document.getElementById('results'); const results = document.getElementById('results');
const variants_select = document.getElementById('variants');
const pinout_preview = document.getElementById('pinout_preview');
if (results.selectedIndex >= 0) { if (results.selectedIndex >= 0) {
let part_selected = parseInt(results.options[results.selectedIndex].value); let part_selected = parseInt(results.options[results.selectedIndex].value);
for (const part of parts) { for (const part of parts) {
if (part.id == part_selected) { if (part.id == part_selected) {
const fields = ["name", "description"]; console.log(part);
// populate part fields
const fields = ["name", "description", "details", "package", "pincount", "manufacturer", "family", "datasheet", "page"];
for (const field of fields) { for (const field of fields) {
const input = document.getElementById('part_' + field); const input = document.getElementById('part_' + field);
input.value = part[field]; if (input.tagName == "INPUT") {
if (undefined === part[field]) {
input.value = "";
} else {
input.value = part[field];
}
} else if (input.tagName == "TEXTAREA") {
if (undefined === part[field]) {
input.innerHtml = null;
} else {
input.innerHtml = part[field];
}
}
}
// set URLs
const urls = ["page","datasheet"];
for (const field of urls) {
const a = document.getElementById('url_' + field);
if (null == a) {
continue;
}
if (undefined === part[field]) {
a.href = null;
} else {
a.href = part[field];
}
} }
} }
} }

View File

@ -63,20 +63,21 @@ get '/' do
end end
def get_part_by_id(id) def get_part_by_id(id)
statement = @db.prepare("SELECT part.id, part.name, part.description, part.datasheet, manufacturer.name AS manufacturer, package.name AS package, part.pincount AS pincount, part.page AS page, part.family AS family FROM part LEFT JOIN package ON package.id = part.package LEFT JOIN manufacturer ON manufacturer.id = part.manufacturer WHERE part.id = ?") statement = @db.prepare("SELECT part.id, part.name, part.description, part.datasheet, manufacturer.name AS manufacturer, package.name AS package, part.pincount AS pincount, part.page AS page, part.family AS parent FROM part LEFT JOIN package ON package.id = part.package LEFT JOIN manufacturer ON manufacturer.id = part.manufacturer WHERE part.id = ?")
part = statement.execute(id, :as => :hash).to_a[0] part = statement.execute(id, :as => :hash).to_a[0]
return nil unless part return nil unless part
# merge with family info # merge with family info
while part and part["family"] do while part and part["parent"] do
family = statement.execute(part["family"]).to_a[0] family = statement.execute(part["parent"]).to_a[0]
part["family"] = nil # reset info part["parent"] = nil # reset info
break unless family break unless family
part["family"] ||= family["name"]
family.each do |k,v| family.each do |k,v|
part[k] ||= v part[k] ||= v
end end
end end
# clean up # clean up
delete = ["family"] delete = ["parent"]
delete.each do |k| delete.each do |k|
part.delete k part.delete k
end end