var active_timer = 100; var calculation = []; function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); } function truncator(numToTruncate, intDecimalPlaces) { var numPower = Math.pow(10, intDecimalPlaces); // "numPowerConverter" might be better return ~~(numToTruncate * numPower)/numPower; } function init_edit(partID) { $('table#details tr#type td p').hide(); $('#type-dropdown').show(); $('table#details tr#partno td p').hide(); $('input[name=partno-input]').show(); // $('#magical_autofill').show(); $('table#details tr#description td p').hide(); $('input[name=description-input]').show(); $('table#details tr#datasheet td input').closest().show(); $('table#details tr#datasheet td input').show(); $('#duplicate-button').closest('div').hide(); $('#delete-button').closest('div').hide(); $('tr#datasheet').show(); $('input[name=notes-input]').show(); $('table#details tr#notes td p').hide(); $('input[name=voltage-input]').show(); $('table#details tr#voltage td p').hide(); $('input[name=current-input]').show(); $('table#details tr#current td p').hide(); $('input[name=sleepcurrent-input]').show(); $('table#details tr#sleepcurrent td p').hide(); $('input[name=txrx-input]').show(); $('input[name=txrx-head]').show(); $('table#details tr#txrx td p').hide(); // var newButton = '
'; // $('.round-button-left').replaceWith(newButton); $('#edit-button').html(''); $('#edit-button').off('click').on('click', function(){ save(partID); }); } function new_entry() { $('table#details tr#type td p').text(''); $('table#details tr#partno td p').text(''); $('table#details tr#description td p').text(''); $('table#details tr#partno td input').val(''); $('table#details tr#description td input').val(''); $('input[name=datasheet-url-input]').val(''); container_onchange(); init_edit(-1); overlay_in(); } function calculate() { let total = 0; count = Object.keys(calculation).length; for(let m = 0; m < count; m++) { let jsonParameters = calculation[m]; let obj = Object.keys(jsonParameters); let values = Object.values(jsonParameters); $.getJSON(rootURL + 'getpartinfo/' + jsonParameters["partid"], function(data) { // $('table#calculations tr#results td p').text(data.partno+" "+jsonParameters["energy"]+" J over "+jsonParameters["period"]+" seconds"); // $('table#calculations tr#results td p').show(); total+= truncator(jsonParameters["energy"],5); if($('table#calculations tr#'+jsonParameters["partid"]).length == 0) { $('table#calculations').append('

'+data.partno+" "+truncator(jsonParameters["energy"],5)+" J over "+jsonParameters["period"]+' seconds

'); $('table#calculations tr#'+jsonParameters["partid"]+' td p').show(); } $('#results td p').text("Total: "+truncator(total,5)+" J"); }); } calculateoverlay_in(); } function end_edit() { $('table#details tr#type td p').text($('table#details tr#type td select option:checked').text()); $('table#details tr#type td p').show(); $('#type-dropdown').hide(); $('table#details tr#partno td p').text($('table#details tr#partno td input').val()); $('table#details tr#partno td p').show(); $('table#details tr#partno td input').hide(); // $('#magical_autofill').hide(); $('table#details tr#description td p').text($('table#details tr#description td input').val()); $('table#details tr#description td p').show(); $('table#details tr#description td input').hide(); $('tr#datasheet').hide(); $('input[name=notes-input]').hide(); $('table#details tr#notes td p').show(); $('#duplicate-button').closest('div').show(); $('#delete-button').closest('div').show(); $('#edit-button').html(''); // var newButton = '
'; // $('.round-button-left').replaceWith(newButton); } function save(partID) { if (!$('#type-dropdown').val()) { alert('Please select a component type.'); return; } var type_id_v = $('#type-dropdown').val(); var partno_v = $('input[name=partno-input]').val(); var description_v = $('input[name=description-input]').val(); var datasheet = $('table#details tr#datasheet td input')[0].files; var datasheet_url_v = $('input[name=datasheet-url-input]').val(); var notes_v = $('input[name=notes-input]').val(); var total = []; var mapped = {}; $('.parameter-content').find('input').each(function(index,elem){ //8 console.log(elem.value); total.push(elem.value); mapped[elem.name] = elem.value; }); //console.log(mapped); if(partno_v.length == 0){ alert('Please enter a part number.'); return; } if(description_v.length > 200) { alert('Description too long (max 200 characters).'); return; } if(description_v.length == 0) { alert('Please enter a description.'); return; } var data = new FormData(); if (datasheet.length == 1) { if(! datasheet[0]['name'].match(/^[\w\-]+\.pdf$/g)) { alert('Invalid filename. Please match /^[\w\-]+\.pdf$/g'); return; } if (datasheet[0]['size'] > 20 * 1000000) { alert('File too large. Must be < 20MB.'); return; } data.append('datasheet-file', datasheet[0]); } else if (datasheet_url_v.length > 0) { data.append('datasheet-url', datasheet_url_v); } data.append('partno', partno_v); data.append('type_id', type_id_v); data.append('description', description_v); data.append('notes', notes_v); data.append('parameters', JSON.stringify(mapped)); $.ajax({ // Your server script to process the upload url: rootURL + 'alter/' + partID, type: 'POST', data: data, // Tell jQuery not to process data or worry about content-type // You *must* include these options! cache: false, contentType: false, processData: false, success: function(data) { var datasheet_par = '

'; $('#datasheet-info').replaceWith(datasheet_par); // Fix addressing $('#edit-button').click(function() { init_edit(JSON.parse(data).part_id); }); }, error: function() { alert("Couldn't update the part information. Please retry."); } }); end_edit(); perform_query(); } function text_filter(string) { if (string != null) return string; else return ''; } function delete_entry(partID) { if (partID < 0) return; if (!confirm('Delete the selected entry?')) return; $.ajax({ url: rootURL + 'delete/' + partID, type: 'GET', cache: false, contentType: false, processData: false, success: function() { overlay_out(); perform_query(); }, fail: function() { console.log('An error occurred while deleting the entry'); }, }); } function calculate_entry(partID,jsonParameters) { if (partID < 0) return; if (!confirm('Add selected entry to calculation?')) return; if(jsonParameters != null) { // for(var k = 0; k < count; k++) { var obj = Object.keys(jsonParameters); var values = Object.values(jsonParameters); var voltage = 0; var activepower = 0; var sleeppower = 0; var single_period = 0; //console.log(obj); for (var key in obj) { var value = obj[key]; var numbers = values[key] //console.log(key+":"+value+":"+numbers); if(value.includes('voltage')) { voltage = values[key]; } else if(value.includes('current')) { if(value.includes('sleep')) { sleeppower = Number(values[key]); } else { activepower+=Number(values[key]); } } else if(value.includes('mode')) { single_period=Number(values[key])+Number(single_period); if(value.includes('sleep')) { sleeppower=sleeppower*Number(values[key]); } else { activepower=activepower*Number(values[key]); } } else { console.log("Unconfigured: "+value+":"+values[key]); } } jsonParameters["energy"]=voltage*(sleeppower+activepower); jsonParameters["period"]=single_period; jsonParameters["partid"]=partID; calculation.push(jsonParameters); } overlay_out(); } function show_part_info(partID) { $.getJSON(rootURL + 'getpartinfo/' + partID, function(data) { $('img#map').attr('src', 'parts/map/' + data.type_id); $('#type-dropdown').empty(); $.getJSON('/getTypes', function(json) { $.each(json, function(type_id, type_name) { $('#type-dropdown').append(''); if (data.type_id == type_id) { $('table#details tr#type td p').text(text_filter(type_name)); // name is the type friendly name } }); $('#type-dropdown').val(data.type_id); }); $('table#details tr#partno td p').text(text_filter(data.partno)); $('table#details tr#partno td input').val(text_filter(data.partno)); $('table#details tr#description td p').text(text_filter(data.description)); $('table#details tr#description td input').val(text_filter(data.description)); $('table#details tr#notes td p').text(text_filter(data.notes)); $('input[name=notes-input]').val(text_filter(data.notes)); if(data.parameters != null) { var jsonParameters = JSON.parse(data.parameters); var count = Object.keys(jsonParameters).length; // for(var k = 0; k < count; k++) { var obj = Object.keys(jsonParameters); var values = Object.values(jsonParameters); for (var key in obj) { var value = obj[key]; if(value.includes("input") && $('table#details tr#'+value.substring(0,value.indexOf("-"))).children().length == 0 ) { $('table#details').append('

') $('table#details tr#'+value.substring(0,value.indexOf("-"))+' td p').text(capitalizeFirstLetter(value.substring(0,value.indexOf("-")))); $('table#details tr#'+value.substring(0,value.indexOf("-"))+' td p').show(); $('table#details tr#'+value.substring(0,value.indexOf("-"))+' td input').val(values[key]); $('table#details tr#'+value.substring(0,value.indexOf("-"))+' td input').show(); } else { $('table#details tr#'+value.substring(0,value.indexOf("-"))+' td p').text(capitalizeFirstLetter(value.substring(0,value.indexOf("-")))); $('table#details tr#'+value.substring(0,value.indexOf("-"))+' td p').show(); $('table#details tr#'+value.substring(0,value.indexOf("-"))+' td input').val(values[key]); $('table#details tr#'+value.substring(0,value.indexOf("-"))+' td input').show(); } } } // } // Resetting file input. Super dirty hack. Disgusting var $el = $('#datasheet-finput'); $el.wrap('
').closest('form').get(0).reset(); $el.unwrap(); if (data.datasheet != null) { $('tr#datasheet-head').html($('DATASHEET: ')); $('input[name=datasheet-url-input]').val(data.datasheet); } else { $('tr#datasheet-head td').text('DATASHEET: '); $('input[name=datasheet-url-input]').val(''); } $('#edit-button').off('click').on('click', function() { init_edit(partID); }); $('#delete-button').off('click').on('click', function() { delete_entry(partID); }); $('#calculate-add-button').off('click').on('click', function() { for (var key in obj) { var value = obj[key]; jsonParameters[value]=$('table#details tr#'+value.substring(0,value.indexOf("-"))+' td input').val(); } calculate_entry(partID,jsonParameters); }); overlay_in(); }).fail(function() { console.log( "Fetching part info failed" ); }); } function perform_query() { $('#no-results').stop(); $('#no-results').css("opacity", 0); $('#no-results').hide(); var query = $('.search-bar').val(); var data = { l:$('#type').is(':checked'), p:$('#partno').is(':checked'), d:$('#description').is(':checked') }; filter = '0'; $("#results").find("tr:not(:first)").remove(); // Delete all table rows var queryPromise = $.getJSON(rootURL + 'query/' + filter + '/' + query, data, function(data) { for(var i = 0; i < data.length; i++) { var newRow = $(''); newRow.append($('').text(text_filter(data[i].type_descriptor))); newRow.append($('').text(text_filter(data[i].partno))); newRow.append($('').text(text_filter(data[i].description))); $('#results').append(newRow); } if(data.length == 0) { $('#no-results').show(); $('#no-results').animate({opacity:1},2000); } }).fail(function() { $('#no-results').show(); $('#no-results').animate({opacity:1},2000); console.log( "Query failed" ); }); //}); } function container_onchange() { var selected_container_id = $('#type-dropdown').val(); // if (selected_container_id > 0) { //$('#type-dropdown').empty(); $.getJSON('/getTypes', function(data) { $.each(data, function(type_id, type_name) { $('#type-dropdown').append(''); if (data.type_id == type_id) { $('table#details tr#type td p').text(text_filter(type_name)); // name is the type friendly name } }); }); // } } function octopartFetch(){ $('#magic-autofill-button').attr('disabled', 'disabled'); $.getJSON(rootURL + 'fetchOctopartSnippet/' + $('#partno-input').val()).done(function(json){ $('#magic-autofill-button').removeAttr('disabled'); if (json['result']=='ok'){ $('#description-input').val(json['snippet']); }else{ $('#description-input').val(''); $('#description-input').attr('placeholder', json['result']); } }).fail(function() { $('#magic-autofill-button').removeAttr('disabled'); }); } $(document).ready(function() { $.ajaxSetup({ cache: false }); $('.search-bar').on('keyup', function() { clearTimeout(active_timer); active_timer = setTimeout(perform_query, 100); }); $('.checkbox').change( function() { if ( !$('#type').is(':checked') && !$('#partno').is(':checked') && !$('#description').is(':checked') && !$('#has-docs').is(':checked')) $(this).prop('checked', true); else perform_query(); }); // $('#partno-input').bind('blur',function() { // if($('#partno-input').val().length > 0){ // octopartFetch(); // } // }); });