photobooth/photos/static/photo.js
2018-05-21 21:55:20 +02:00

154 lines
4.3 KiB
JavaScript

$(function() {
if (window.JpegCamera) {
var camera; // Initialized at the end
//var url = "https://isonzeinterndronken.nl/11bt/photos.json/";
var url = "http://localhost:8000/new/";
var update_stream_stats = function(stats) {
$("#stream_stats").html(
"Mean luminance = " + stats.mean +
"; Standard Deviation = " + stats.std);
setTimeout(function() {camera.get_stats(update_stream_stats);}, 1000);
};
var take_snapshots = function(count) {
var snapshot = camera.capture();
if (JpegCamera.canvas_supported()) {
snapshot.get_canvas(add_snapshot);
}
else {
// <canvas> is not supported in this browser. We'll use anonymous
// graphic instead.
var image = document.createElement("img");
image.src = "no_canvas_photo.jpg";
setTimeout(function() {add_snapshot.call(snapshot, image)}, 1);
}
if (count > 1) {
setTimeout(function() {take_snapshots(count - 1);}, 500);
}
};
var add_snapshot = function(element) {
$(element).data("snapshot", this).addClass("item");
var $container = $("#snapshots").append(element);
var $camera = $("#camera");
var camera_ratio = $camera.innerWidth() / $camera.innerHeight();
var height = $container.height()
element.style.height = "" + height + "px";
element.style.width = "" + Math.round(camera_ratio * height) + "px";
var scroll = $container[0].scrollWidth - $container.innerWidth();
$container.animate({
scrollLeft: scroll
}, 200);
clear_upload_data();
$("#loader").show();
snapshot = $(element).data("snapshot");
snapshot.upload({api_url: url}).done(upload_done).fail(upload_fail);
};
var select_snapshot = function () {
$(".item").removeClass("selected");
var snapshot = $(this).addClass("selected").data("snapshot");
};
var clear_upload_data = function() {
$("#upload_status, #upload_result").html("");
};
var upload_snapshot = function() {
var api_url = $("#api_url").val();
if (!api_url.length) {
$("#upload_status").html("Please provide URL for the upload");
return;
}
clear_upload_data();
$("#loader").show();
$("#upload_snapshot").prop("disabled", true);
var snapshot = $(".item.selected").data("snapshot");
snapshot.upload({api_url: url}).done(upload_done).fail(upload_fail);
};
var upload_done = function(response) {
$("#upload_snapshot").prop("disabled", false);
$("#loader").hide();
$("#upload_status").html("Upload successful");
$("#upload_result").html(response);
};
var upload_fail = function(code, error, response) {
$("#upload_snapshot").prop("disabled", false);
$("#loader").hide();
$("#upload_status").html(
"Upload failed with status " + code + " (" + error + ")");
$("#upload_result").html(response);
};
var discard_snapshot = function() {
var element = $(".item.selected").removeClass("item selected");
var next = element.nextAll(".item").first();
if (!next.size()) {
next = element.prevAll(".item").first();
}
if (next.size()) {
next.addClass("selected");
next.data("snapshot").show();
}
else {
hide_snapshot_controls();
}
element.data("snapshot").discard();
element.hide("slow", function() {$(this).remove()});
};
var show_stream = function() {
$(this).hide();
$(".item").removeClass("selected");
hide_snapshot_controls();
clear_upload_data();
camera.show_stream();
};
var hide_snapshot_controls = function() {
$("#discard_snapshot, #upload_snapshot, #api_url").hide();
$("#upload_result, #upload_status").html("");
$("#show_stream").hide();
};
$("#take_snapshots").click(function() {take_snapshots(1);});
$("#snapshots").on("click", ".item", select_snapshot);
$("#upload_snapshot").click(upload_snapshot);
$("#discard_snapshot").click(discard_snapshot);
$("#show_stream").click(show_stream);
$(document).on("keypress", function (e) {
take_snapshots(1);
});
var options = {
}
camera = new JpegCamera("#camera", options).ready(function(info) {
//$("#take_snapshots").show();
$("#camera_info").html(
"Camera resolution: " + info.video_width + "x" + info.video_height);
this.get_stats(update_stream_stats);
});
}
});