add attach functionality
This commit is contained in:
parent
eb66f0c81a
commit
ebe52f2d38
|
@ -42,6 +42,7 @@
|
||||||
<tbody id="properties"></tbody>
|
<tbody id="properties"></tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="hscroll" id="attachments"></div>
|
<div class="hscroll" id="attachments"></div>
|
||||||
|
<div><input type="text" id="attachment" placeholder="URL"><button type="button" onclick="attach()">attach</button></div>
|
||||||
<table>
|
<table>
|
||||||
<thead><tr><th>component</th><th>quantity</th><th>description</th></tr></thead>
|
<thead><tr><th>component</th><th>quantity</th><th>description</th></tr></thead>
|
||||||
<tbody id="components"></tbody>
|
<tbody id="components"></tbody>
|
||||||
|
|
|
@ -262,3 +262,29 @@ function update_part()
|
||||||
};
|
};
|
||||||
post.send(JSON.stringify(part));
|
post.send(JSON.stringify(part));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function attach()
|
||||||
|
{
|
||||||
|
const results = document.getElementById('results');
|
||||||
|
if (results.selectedIndex >= 0) {
|
||||||
|
part_id = parseInt(results.options[results.selectedIndex].value);
|
||||||
|
} else {
|
||||||
|
part_id = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const attachment = document.getElementById('attachment');
|
||||||
|
if (null == attachment.value || 0 == attachment.value.length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const xhr = new XMLHttpRequest();
|
||||||
|
xhr.open('GET', '/attach?id=' + part_id + "&url=" + encodeURI(attachment.value), true);
|
||||||
|
xhr.onload = function() {
|
||||||
|
clear();
|
||||||
|
search(); // refresh search
|
||||||
|
};
|
||||||
|
xhr.onerror = function() {
|
||||||
|
console.log("part attachment failed");
|
||||||
|
};
|
||||||
|
xhr.send();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
22
server.rb
22
server.rb
|
@ -17,6 +17,7 @@ require 'json'
|
||||||
require 'sinatra'
|
require 'sinatra'
|
||||||
require 'uri'
|
require 'uri'
|
||||||
require 'net/http'
|
require 'net/http'
|
||||||
|
require 'cgi'
|
||||||
|
|
||||||
# allow dumping crashes in browser
|
# allow dumping crashes in browser
|
||||||
DEBUG = false
|
DEBUG = false
|
||||||
|
@ -463,3 +464,24 @@ get '/import/lcsc/:lcsc' do
|
||||||
end
|
end
|
||||||
return 200, "#{part['name']} added"
|
return 200, "#{part['name']} added"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
get '/attach?' do
|
||||||
|
halt 401, "part name or id required" unless params['id'] or params['name']
|
||||||
|
halt 401, "attachement URL required" unless params['url']
|
||||||
|
statement = @db.prepare("SELECT id, name FROM part WHERE id = ? OR name = ?")
|
||||||
|
part = statement.execute(params['id'], params['name']).to_a[0]
|
||||||
|
halt 401, "unknown part" unless part
|
||||||
|
file = CGI.unescape(params['url']).split("/")[-1]
|
||||||
|
dir = PUBLIC + "/" + ATTACHMENTS + "/" + part["name"].gsub("/", "_")
|
||||||
|
path = "#{dir}/#{file}"
|
||||||
|
unless File.file?(path) then
|
||||||
|
uri = URI(params['url'])
|
||||||
|
res = Net::HTTP.get_response(uri)
|
||||||
|
if (res.is_a?(Net::HTTPSuccess)) then
|
||||||
|
Dir.mkdir(dir) unless File.directory?(dir)
|
||||||
|
File.open(path, "wb") do |f|
|
||||||
|
f.write res.body
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in New Issue