function init_edit(partID) { $('table#details tr#location td p').hide(); $('#location-dropdown').show(); $('#container-dropdown').show(); $('table#details tr#partno td p').hide(); $('table#details tr#partno td input').show(); $('#magical_autofill').show(); $('table#details tr#description td p').hide(); $('table#details tr#description td input').show(); $('table#details tr#datasheet td input').show(); $('#duplicate-button').closest('div').hide(); var datasheet_input = $('') $('#datasheet-info').replaceWith(datasheet_input); var newButton = '
'; $('.round-button-left').replaceWith(newButton); } function new_entry() { $('table#details tr#location 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(''); container_onchange(); init_edit(-1); overlay_in(); } function end_edit() { $('table#details tr#location td p').text($('table#details tr#location td select option:checked').text()); $('table#details tr#location td p').show(); $('#location-dropdown').hide(); $('#container-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(); $('table#details tr#datasheet td input').hide(); $('#duplicate-button').closest('div').show(); var newButton = '
'; $('.round-button-left').replaceWith(newButton); } function save(partID) { var location_id_v = $('#location-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; 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]); } data.append('partno', partno_v); data.append('location_id', location_id_v) data.append('description', description_v); $.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 show_part_info(partID) { $.getJSON(rootURL + 'getpartinfo/' + partID, function(data) { $('table#details tr#location td p').text(text_filter(data.location_descriptor)); // name is the location friendly name $('#location-dropdown').val(data.location_id); $('#container-dropdown').val(data.container_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)); container_onchange(); if (data.datasheet != null) { $('tr#datasheet-head').html($('DATASHEET: ')); $('#datasheet-input').val(data.datasheet); } else $('tr#datasheet-head td').text('DATASHEET: '); $('#edit-button').click(function() { init_edit(partID); }); $('#delete-button').click(function() { delete_entry(partID); }); overlay_in(); }).fail(function() { console.log( "Fetching part info failed" ); }); } function perform_query() { $('#no-results').stop(); $('#no-results').css("opacity", 0); var query = $('.search-bar').val(); var data = { l:$('#location').is(':checked'), p:$('#partno').is(':checked'), d:$('#description').is(':checked'), n:$('#has-docs').is(':checked') }; filter = '0'; $("#results").find("tr:not(:first)").remove(); // Delete all table rows $.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].location_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').animate({opacity:1},2000); } }).fail(function() { $('#no-results').animate({opacity:1},2000); console.log( "Query failed" ); }); } function container_onchange() { var selected_container_id = $('#container-dropdown').val(); if (selected_container_id > 0) { $('img#map').attr('src', 'parts/map/' + selected_container_id); $('#location-dropdown').empty(); $.getJSON('parts/getlocationsInContainer/' + selected_container_id, function(data) { $.each(data, function(location_id, location_name) { $('#location-dropdown').append(''); }); }); } } function octopartFetch(){ $.getJSON(rootURL + 'fetchOctopartSnippet/' + $('#partno-input').val()).done(function(json){ if (json['result']=='ok'){ $('#description-input').val(json['snippet']); }else{ $('#description-input').val(''); $('#description-input').attr('placeholder', json['result']); } }); } $(document).ready(function() { $.ajaxSetup({ cache: false }); $('.search-bar').on('keyup', function() { perform_query(); }); $('.checkbox').change( function() { if ( !$('#location').is(':checked') && !$('#partno').is(':checked') && !$('#description').is(':checked') && !$('#has-docs').is(':checked')) $(this).prop('checked', true); else perform_query(); }); });