summaryrefslogtreecommitdiff
path: root/static/webcam
diff options
context:
space:
mode:
authorsostler <sbostler@gmail.com>2010-04-23 23:23:19 -0400
committersostler <sbostler@gmail.com>2010-04-23 23:23:19 -0400
commit37f8a2d7c1c829ec3d225c8932931e3d0e2a85cd (patch)
tree516b959b7a29237b662b46200615108104746d1f /static/webcam
parent4bf18f0771162cd7618851bf5a5126d9666b6750 (diff)
Changed upload error handling
Diffstat (limited to 'static/webcam')
-rw-r--r--static/webcam/webcam.js431
1 files changed, 218 insertions, 213 deletions
diff --git a/static/webcam/webcam.js b/static/webcam/webcam.js
index aa7bf0a..06a4d1a 100644
--- a/static/webcam/webcam.js
+++ b/static/webcam/webcam.js
@@ -8,220 +8,225 @@
// Everything is under a 'webcam' Namespace
window.webcam = {
- version: '1.0.8',
-
- // globals
- ie: !!navigator.userAgent.match(/MSIE/),
- protocol: location.protocol.match(/https/i) ? 'https' : 'http',
- callback: null, // user callback for completed uploads
- swf_url: 'webcam.swf', // URI to webcam.swf movie (defaults to cwd)
- shutter_url: 'shutter.mp3', // URI to shutter.mp3 sound
- api_url: '', // URL to upload script
- loaded: false, // true when webcam movie finishes loading
- quality: 90, // JPEG quality (1 - 100)
- shutter_sound: true, // shutter sound effect on/off
- hooks: {
- onLoad: null,
- onComplete: null,
- onError: null
- }, // callback hook functions
-
- init: function(){
- webcam.set_api_url( '/upload/message' );
- webcam.set_swf_url('/static/webcam/webcam.swf')
- webcam.set_quality( 90 );
- webcam.set_shutter_sound(false);
- webcam.set_hook('onComplete', webcam.uploadCompleted );
- $("#webcam-button-upload").click(webcam.show);
- $("#webcam-button-snap").click(webcam.takePicture)
- },
-
- uploadCompleted: function(){
- if (typeof pageTracker !== 'undefined') {
- pageTracker._trackEvent('Message', 'Webcam', typeof Room !== 'undefined' ? Room : 'UnknownRoom');
- }
- $("#webcam-button-snap").attr("value", "Send Pic")
- webcam.reset();
- },
-
- takePicture: function(){
- webcam.set_form_data({"room": Room})
- $("#webcam-button-snap").attr("value", "Sending...")
- webcam.snap()
- },
-
- show: function() {
- var closeHtml = '<img src="/static/webcam/close.gif" onclick="webcam.hide()" id="webcam-button-close" />'
- var camHtml = '<div id="webcam-preview">' + webcam.get_html(320, 240) + closeHtml + "</div>"
- $("body").append(camHtml)
- $("#webcam-button-upload").addClass("invisible")
- $("#webcam-button-snap").removeClass("invisible")
- $("#effects-msg").removeClass("invisible").fadeOut(70000)
- paletteHide()
- blinkStart()
- },
-
- hide: function() {
- $("#webcam-button-snap").addClass("invisible")
- $("#webcam-button-upload").removeClass("invisible")
- $("#effects-msg").addClass("invisible")
- blinkStop()
- $("#webcam-preview").remove()
- },
-
- set_hook: function(name, callback) {
- // set callback hook
- // supported hooks: onLoad, onComplete, onError
- if (typeof(this.hooks[name]) == 'undefined')
- return alert("Hook type not supported: " + name);
-
- this.hooks[name] = callback;
- },
-
- fire_hook: function(name, value) {
- // fire hook callback, passing optional value to it
- if (this.hooks[name]) {
- if (typeof(this.hooks[name]) == 'function') {
- // callback is function reference, call directly
- this.hooks[name](value);
- }
- else if (typeof(this.hooks[name]) == 'array') {
- // callback is PHP-style object instance method
- this.hooks[name][0][this.hooks[name][1]](value);
- }
- else if (window[this.hooks[name]]) {
- // callback is global function name
- window[ this.hooks[name] ](value);
- }
- return true;
- }
- return false; // no hook defined
- },
-
- set_api_url: function(url) {
- // set location of upload API script
- this.api_url = url;
- },
-
- set_swf_url: function(url) {
- // set location of SWF movie (defaults to webcam.swf in cwd)
- this.swf_url = url;
- },
-
- get_html: function(width, height, server_width, server_height) {
- // Return HTML for embedding webcam capture movie
- // Specify pixel width and height (640x480, 320x240, etc.)
- // Server width and height are optional, and default to movie width/height
- if (!server_width) server_width = width;
- if (!server_height) server_height = height;
-
- var html = '';
- var flashvars = 'shutter_enabled=' + (this.shutter_sound ? 1 : 0) +
- '&shutter_url=' + escape(this.shutter_url) +
- '&width=' + width +
- '&height=' + height +
- '&server_width=' + server_width +
- '&server_height=' + server_height;
-
- if (this.ie) {
- html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+this.protocol+'://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="webcam_movie" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+this.swf_url+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/></object>';
- }
- else {
- html += '<embed id="webcam_movie" src="'+this.swf_url+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="webcam_movie" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" />';
- }
-
- this.loaded = false;
- return html;
- },
-
- get_movie: function() {
- // get reference to movie object/embed in DOM
- if (!this.loaded) return alert("ERROR: Movie is not loaded yet");
- var movie = document.getElementById('webcam_movie');
- if (!movie) alert("ERROR: Cannot locate movie 'webcam_movie' in DOM");
- return movie;
- },
-
- snap: function(url, callback) {
- // take snapshot and send to server
- // specify fully-qualified URL to server API script
- // and callback function (string or function object)
- if (callback) this.set_hook('onComplete', callback);
- if (url) this.set_api_url(url);
-
- this.get_movie()._snap( this.api_url, this.quality, this.shutter_sound ? 1 : 0 );
- },
-
- set_form_data: function(form_data) {
- this.get_movie()._set_form_data(form_data);
- },
-
- freeze: function() {
- // freeze webcam image (capture but do not upload)
- this.get_movie()._snap('', this.quality, this.shutter_sound ? 1 : 0 );
- },
-
- upload: function(url, callback) {
- // upload image to server after taking snapshot
- // specify fully-qualified URL to server API script
- // and callback function (string or function object)
- if (callback) this.set_hook('onComplete', callback);
- if (url) this.set_api_url(url);
-
- this.get_movie()._upload( this.api_url );
- },
-
- reset: function() {
- // reset movie after taking snapshot
- this.get_movie()._reset();
- },
-
- configure: function(panel) {
- // open flash configuration panel -- specify tab name:
- // "camera", "privacy", "default", "localStorage", "microphone", "settingsManager"
- if (!panel) panel = "camera";
- this.get_movie()._configure(panel);
- },
-
- set_quality: function(new_quality) {
- // set the JPEG quality (1 - 100)
- // default is 90
- this.quality = new_quality;
- },
-
- set_shutter_sound: function(enabled, url) {
- // enable or disable the shutter sound effect
- // defaults to enabled
- this.shutter_sound = enabled;
- this.shutter_url = url ? url : 'shutter.mp3';
- },
-
- flash_notify: function(type, msg) {
- // receive notification from flash about event
- switch (type) {
- case 'flashLoadComplete':
- // movie loaded successfully
- this.loaded = true;
- this.fire_hook('onLoad');
- break;
+ version: '1.0.8',
+
+ // globals
+ ie: !!navigator.userAgent.match(/MSIE/),
+ protocol: location.protocol.match(/https/i) ? 'https' : 'http',
+ callback: null, // user callback for completed uploads
+ swf_url: 'webcam.swf', // URI to webcam.swf movie (defaults to cwd)
+ shutter_url: 'shutter.mp3', // URI to shutter.mp3 sound
+ api_url: '', // URL to upload script
+ loaded: false, // true when webcam movie finishes loading
+ quality: 90, // JPEG quality (1 - 100)
+ shutter_sound: true, // shutter sound effect on/off
+ hooks: {
+ onLoad: null,
+ onComplete: null,
+ onError: null
+ }, // callback hook functions
+
+ init: function(){
+ webcam.set_api_url( '/upload/message' );
+ webcam.set_swf_url('/static/webcam/webcam.swf')
+ webcam.set_quality( 90 );
+ webcam.set_shutter_sound(false);
+ webcam.set_hook('onComplete', webcam.uploadCompleted );
+ $("#webcam-button-upload").click(webcam.show);
+ $("#webcam-button-snap").click(webcam.takePicture)
+ },
+
+ uploadCompleted: function(text) {
+ $("#webcam-button-snap").attr("value", "Send Pic");
+ webcam.reset();
+
+ text = $.trim(text);
+ if (text != "OK") {
+ alert(text);
+ return;
+ } else if (typeof pageTracker !== 'undefined') {
+ pageTracker._trackEvent('Message', 'Webcam', typeof Room !== 'undefined' ? Room : 'UnknownRoom');
+ }
+ },
- case 'error':
- // HTTP POST error most likely
- if (!this.fire_hook('onError', msg)) {
- alert("JPEGCam Flash Error: " + msg);
- }
- break;
+ takePicture: function(){
+ webcam.set_form_data({"room": Room})
+ $("#webcam-button-snap").attr("value", "Sending...")
+ webcam.snap()
+ },
- case 'success':
- // upload complete, execute user callback function
- // and pass raw API script results to function
- this.fire_hook('onComplete', msg.toString());
- break;
+ show: function() {
+ var closeHtml = '<img src="/static/webcam/close.gif" onclick="webcam.hide()" id="webcam-button-close" />'
+ var camHtml = '<div id="webcam-preview">' + webcam.get_html(320, 240) + closeHtml + "</div>"
+ $("body").append(camHtml)
+ $("#webcam-button-upload").addClass("invisible")
+ $("#webcam-button-snap").removeClass("invisible")
+ $("#effects-msg").removeClass("invisible").fadeOut(70000)
+ paletteHide()
+ blinkStart()
+ },
- default:
- // catch-all, just in case
- alert("jpegcam flash_notify: " + type + ": " + msg);
- break;
- }
- }
+ hide: function() {
+ $("#webcam-button-snap").addClass("invisible")
+ $("#webcam-button-upload").removeClass("invisible")
+ $("#effects-msg").addClass("invisible")
+ blinkStop()
+ $("#webcam-preview").remove()
+ },
+
+ set_hook: function(name, callback) {
+ // set callback hook
+ // supported hooks: onLoad, onComplete, onError
+ if (typeof(this.hooks[name]) == 'undefined')
+ return alert("Hook type not supported: " + name);
+
+ this.hooks[name] = callback;
+ },
+
+ fire_hook: function(name, value) {
+ // fire hook callback, passing optional value to it
+ if (this.hooks[name]) {
+ if (typeof(this.hooks[name]) == 'function') {
+ // callback is function reference, call directly
+ this.hooks[name](value);
+ }
+ else if (typeof(this.hooks[name]) == 'array') {
+ // callback is PHP-style object instance method
+ this.hooks[name][0][this.hooks[name][1]](value);
+ }
+ else if (window[this.hooks[name]]) {
+ // callback is global function name
+ window[ this.hooks[name] ](value);
+ }
+ return true;
+ }
+ return false; // no hook defined
+ },
+
+ set_api_url: function(url) {
+ // set location of upload API script
+ this.api_url = url;
+ },
+
+ set_swf_url: function(url) {
+ // set location of SWF movie (defaults to webcam.swf in cwd)
+ this.swf_url = url;
+ },
+
+ get_html: function(width, height, server_width, server_height) {
+ // Return HTML for embedding webcam capture movie
+ // Specify pixel width and height (640x480, 320x240, etc.)
+ // Server width and height are optional, and default to movie width/height
+ if (!server_width) server_width = width;
+ if (!server_height) server_height = height;
+
+ var html = '';
+ var flashvars = 'shutter_enabled=' + (this.shutter_sound ? 1 : 0) +
+ '&shutter_url=' + escape(this.shutter_url) +
+ '&width=' + width +
+ '&height=' + height +
+ '&server_width=' + server_width +
+ '&server_height=' + server_height;
+
+ if (this.ie) {
+ html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+this.protocol+'://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="webcam_movie" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+this.swf_url+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/></object>';
+ }
+ else {
+ html += '<embed id="webcam_movie" src="'+this.swf_url+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="webcam_movie" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" />';
+ }
+
+ this.loaded = false;
+ return html;
+ },
+
+ get_movie: function() {
+ // get reference to movie object/embed in DOM
+ if (!this.loaded) return alert("ERROR: Movie is not loaded yet");
+ var movie = document.getElementById('webcam_movie');
+ if (!movie) alert("ERROR: Cannot locate movie 'webcam_movie' in DOM");
+ return movie;
+ },
+
+ snap: function(url, callback) {
+ // take snapshot and send to server
+ // specify fully-qualified URL to server API script
+ // and callback function (string or function object)
+ if (callback) this.set_hook('onComplete', callback);
+ if (url) this.set_api_url(url);
+
+ this.get_movie()._snap( this.api_url, this.quality, this.shutter_sound ? 1 : 0 );
+ },
+
+ set_form_data: function(form_data) {
+ this.get_movie()._set_form_data(form_data);
+ },
+
+ freeze: function() {
+ // freeze webcam image (capture but do not upload)
+ this.get_movie()._snap('', this.quality, this.shutter_sound ? 1 : 0 );
+ },
+
+ upload: function(url, callback) {
+ // upload image to server after taking snapshot
+ // specify fully-qualified URL to server API script
+ // and callback function (string or function object)
+ if (callback) this.set_hook('onComplete', callback);
+ if (url) this.set_api_url(url);
+
+ this.get_movie()._upload( this.api_url );
+ },
+
+ reset: function() {
+ // reset movie after taking snapshot
+ this.get_movie()._reset();
+ },
+
+ configure: function(panel) {
+ // open flash configuration panel -- specify tab name:
+ // "camera", "privacy", "default", "localStorage", "microphone", "settingsManager"
+ if (!panel) panel = "camera";
+ this.get_movie()._configure(panel);
+ },
+
+ set_quality: function(new_quality) {
+ // set the JPEG quality (1 - 100)
+ // default is 90
+ this.quality = new_quality;
+ },
+
+ set_shutter_sound: function(enabled, url) {
+ // enable or disable the shutter sound effect
+ // defaults to enabled
+ this.shutter_sound = enabled;
+ this.shutter_url = url ? url : 'shutter.mp3';
+ },
+
+ flash_notify: function(type, msg) {
+ // receive notification from flash about event
+ switch (type) {
+ case 'flashLoadComplete':
+ // movie loaded successfully
+ this.loaded = true;
+ this.fire_hook('onLoad');
+ break;
+
+ case 'error':
+ // HTTP POST error most likely
+ if (!this.fire_hook('onError', msg)) {
+ alert("JPEGCam Flash Error: " + msg);
+ }
+ break;
+
+ case 'success':
+ // upload complete, execute user callback function
+ // and pass raw API script results to function
+ this.fire_hook('onComplete', msg.toString());
+ break;
+
+ default:
+ // catch-all, just in case
+ alert("jpegcam flash_notify: " + type + ": " + msg);
+ break;
+ }
+ }
};