|
|
|
var active_timer = 100;
|
|
|
|
|
|
|
|
function init_edit(partID) {
|
|
|
|
$('table#details tr#location td p').hide();
|
|
|
|
$('#location-dropdown').show();
|
|
|
|
$('#container-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();
|
|
|
|
|
|
|
|
// var newButton = '<div class="round-button-left"><a href="#" onclick="save(' + partID + ')"><i class="fa fa-check" aria-hidden="true"></i></a></div>';
|
|
|
|
// $('.round-button-left').replaceWith(newButton);
|
|
|
|
$('#edit-button').html('<i class="fa fa-check" aria-hidden="true"></i>');
|
|
|
|
$('#edit-button').off('click').on('click', function(){
|
|
|
|
save(partID);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
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('');
|
|
|
|
$('input[name=datasheet-url-input]').val('');
|
|
|
|
init_edit(-1);
|
|
|
|
overlay_in();
|
|
|
|
container_onchange();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
|
|
|
$('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('<i class="fa fa-pencil" aria-hidden="true"></i>');
|
|
|
|
// var newButton = '<div class="round-button-left"><a href="#" id="edit-button"><i class="fa fa-pencil" aria-hidden="true"></i></a></div>';
|
|
|
|
// $('.round-button-left').replaceWith(newButton);
|
|
|
|
}
|
|
|
|
|
|
|
|
function save(partID) {
|
|
|
|
if (!$('#location-dropdown').val() || ($'#location-dropdown').val()== -1 ) {
|
|
|
|
alert('Please select a location.');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
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;
|
|
|
|
var datasheet_url_v = $('input[name=datasheet-url-input]').val();
|
|
|
|
var notes_v = $('input[name=notes-input]').val();
|
|
|
|
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('location_id', location_id_v);
|
|
|
|
data.append('description', description_v);
|
|
|
|
data.append('notes', notes_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 = '<p id="datasheet-info"><i class="fa fa-check"></i></p>';
|
|
|
|
$('#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
|
|
|
|
$('#container-dropdown').val(data.container_id);
|
|
|
|
$('img#map').attr('src', 'parts/map/' + data.container_id);
|
|
|
|
$('#location-dropdown').empty();
|
|
|
|
$.getJSON('parts/getlocationsInContainer/' + data.container_id, function(json) {
|
|
|
|
$.each(json, function(loc_id, loc_name) {
|
|
|
|
$('#location-dropdown').append('<option value="' + loc_id + '">' + loc_name + '</option>');
|
|
|
|
});
|
|
|
|
$('#location-dropdown').val(data.location_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));
|
|
|
|
// Resetting file input. Super dirty hack. Disgusting
|
|
|
|
var $el = $('#datasheet-finput');
|
|
|
|
$el.wrap('<form>').closest('form').get(0).reset();
|
|
|
|
$el.unwrap();
|
|
|
|
if (data.datasheet != null) {
|
|
|
|
$('tr#datasheet-head').html($('<td>DATASHEET: <a href="' + data.datasheet + '" target="_blank"><i class="fa fa-file-text" aria-hidden="true"></i></a></td>'));
|
|
|
|
$('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);
|
|
|
|
});
|
|
|
|
overlay_in();
|
|
|
|
}).fail(function() {
|
|
|
|
console.log( "Fetching part info failed" );
|
|
|
|
});
|
|
|
|
|
|
|
|
// update URL and history
|
|
|
|
update_url(partID);
|
|
|
|
}
|
|
|
|
|
|
|
|
function update_url(partID){
|
|
|
|
params = {}
|
|
|
|
// If there is a seach bar, take its content
|
|
|
|
if($('.search-bar').length){
|
|
|
|
params['q'] = $('.search-bar').val();
|
|
|
|
}
|
|
|
|
if(partID != 0){
|
|
|
|
params['p'] = partID
|
|
|
|
}
|
|
|
|
window.history.pushState('searching', '', 'parts?' + jQuery.param(params));
|
|
|
|
}
|
|
|
|
|
|
|
|
function perform_query() {
|
|
|
|
$('#no-results').stop();
|
|
|
|
$('#no-results').css("opacity", 0);
|
|
|
|
$('#no-results').hide();
|
|
|
|
var query = $('.search-bar').val();
|
|
|
|
var data = {
|
|
|
|
l:$('#location').is(':checked'),
|
|
|
|
p:$('#partno').is(':checked'),
|
|
|
|
d:$('#description').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 = $('<tr onclick="show_part_info(' + data[i].id + ')"></tr>');
|
|
|
|
|
|
|
|
newRow.append($('<td id="location"></td>').text(text_filter(data[i].location_descriptor)));
|
|
|
|
newRow.append($('<td id="partno"></td>').text(text_filter(data[i].partno)));
|
|
|
|
newRow.append($('<td id="description"></td>').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" );
|
|
|
|
});
|
|
|
|
|
|
|
|
update_url(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
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('<option value="' + location_id + '">' + location_name + '</option>');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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 ( !$('#location').is(':checked')
|
|
|
|
&& !$('#partno').is(':checked')
|
|
|
|
&& !$('#description').is(':checked')
|
|
|
|
&& !$('#has-docs').is(':checked'))
|
|
|
|
$(this).prop('checked', true);
|
|
|
|
else
|
|
|
|
perform_query();
|
|
|
|
});
|
|
|
|
|
|
|
|
//For linking to a search query or specific part
|
|
|
|
const search_params = new URLSearchParams(window.location.search);
|
|
|
|
if(search_params.has('q')){
|
|
|
|
$('.search-bar').val(search_params.get('q')); perform_query();
|
|
|
|
}
|
|
|
|
if(search_params.has('p')){
|
|
|
|
show_part_info(search_params.get('p'));
|
|
|
|
}
|
|
|
|
|
|
|
|
// $('#partno-input').bind('blur',function() {
|
|
|
|
// if($('#partno-input').val().length > 0){
|
|
|
|
// octopartFetch();
|
|
|
|
// }
|
|
|
|
// });
|
|
|
|
});
|