Merge pull request #841 from jloguercio/7181-1.10x
	
		
	
				
					
				
			Upgrade to WebcamJS from JPEGCam in Document Tools - Refs #7181 to 1.10.x1.10.x
						commit
						87ffdf664e
					
				@ -1,165 +0,0 @@ | 
				
			||||
		   GNU LESSER GENERAL PUBLIC LICENSE | 
				
			||||
                       Version 3, 29 June 2007 | 
				
			||||
 | 
				
			||||
 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> | 
				
			||||
 Everyone is permitted to copy and distribute verbatim copies | 
				
			||||
 of this license document, but changing it is not allowed. | 
				
			||||
 | 
				
			||||
 | 
				
			||||
  This version of the GNU Lesser General Public License incorporates | 
				
			||||
the terms and conditions of version 3 of the GNU General Public | 
				
			||||
License, supplemented by the additional permissions listed below. | 
				
			||||
 | 
				
			||||
  0. Additional Definitions.  | 
				
			||||
 | 
				
			||||
  As used herein, "this License" refers to version 3 of the GNU Lesser | 
				
			||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU | 
				
			||||
General Public License. | 
				
			||||
 | 
				
			||||
  "The Library" refers to a covered work governed by this License, | 
				
			||||
other than an Application or a Combined Work as defined below. | 
				
			||||
 | 
				
			||||
  An "Application" is any work that makes use of an interface provided | 
				
			||||
by the Library, but which is not otherwise based on the Library. | 
				
			||||
Defining a subclass of a class defined by the Library is deemed a mode | 
				
			||||
of using an interface provided by the Library. | 
				
			||||
 | 
				
			||||
  A "Combined Work" is a work produced by combining or linking an | 
				
			||||
Application with the Library.  The particular version of the Library | 
				
			||||
with which the Combined Work was made is also called the "Linked | 
				
			||||
Version". | 
				
			||||
 | 
				
			||||
  The "Minimal Corresponding Source" for a Combined Work means the | 
				
			||||
Corresponding Source for the Combined Work, excluding any source code | 
				
			||||
for portions of the Combined Work that, considered in isolation, are | 
				
			||||
based on the Application, and not on the Linked Version. | 
				
			||||
 | 
				
			||||
  The "Corresponding Application Code" for a Combined Work means the | 
				
			||||
object code and/or source code for the Application, including any data | 
				
			||||
and utility programs needed for reproducing the Combined Work from the | 
				
			||||
Application, but excluding the System Libraries of the Combined Work. | 
				
			||||
 | 
				
			||||
  1. Exception to Section 3 of the GNU GPL. | 
				
			||||
 | 
				
			||||
  You may convey a covered work under sections 3 and 4 of this License | 
				
			||||
without being bound by section 3 of the GNU GPL. | 
				
			||||
 | 
				
			||||
  2. Conveying Modified Versions. | 
				
			||||
 | 
				
			||||
  If you modify a copy of the Library, and, in your modifications, a | 
				
			||||
facility refers to a function or data to be supplied by an Application | 
				
			||||
that uses the facility (other than as an argument passed when the | 
				
			||||
facility is invoked), then you may convey a copy of the modified | 
				
			||||
version: | 
				
			||||
 | 
				
			||||
   a) under this License, provided that you make a good faith effort to | 
				
			||||
   ensure that, in the event an Application does not supply the | 
				
			||||
   function or data, the facility still operates, and performs | 
				
			||||
   whatever part of its purpose remains meaningful, or | 
				
			||||
 | 
				
			||||
   b) under the GNU GPL, with none of the additional permissions of | 
				
			||||
   this License applicable to that copy. | 
				
			||||
 | 
				
			||||
  3. Object Code Incorporating Material from Library Header Files. | 
				
			||||
 | 
				
			||||
  The object code form of an Application may incorporate material from | 
				
			||||
a header file that is part of the Library.  You may convey such object | 
				
			||||
code under terms of your choice, provided that, if the incorporated | 
				
			||||
material is not limited to numerical parameters, data structure | 
				
			||||
layouts and accessors, or small macros, inline functions and templates | 
				
			||||
(ten or fewer lines in length), you do both of the following: | 
				
			||||
 | 
				
			||||
   a) Give prominent notice with each copy of the object code that the | 
				
			||||
   Library is used in it and that the Library and its use are | 
				
			||||
   covered by this License. | 
				
			||||
 | 
				
			||||
   b) Accompany the object code with a copy of the GNU GPL and this license | 
				
			||||
   document. | 
				
			||||
 | 
				
			||||
  4. Combined Works. | 
				
			||||
 | 
				
			||||
  You may convey a Combined Work under terms of your choice that, | 
				
			||||
taken together, effectively do not restrict modification of the | 
				
			||||
portions of the Library contained in the Combined Work and reverse | 
				
			||||
engineering for debugging such modifications, if you also do each of | 
				
			||||
the following: | 
				
			||||
 | 
				
			||||
   a) Give prominent notice with each copy of the Combined Work that | 
				
			||||
   the Library is used in it and that the Library and its use are | 
				
			||||
   covered by this License. | 
				
			||||
 | 
				
			||||
   b) Accompany the Combined Work with a copy of the GNU GPL and this license | 
				
			||||
   document. | 
				
			||||
 | 
				
			||||
   c) For a Combined Work that displays copyright notices during | 
				
			||||
   execution, include the copyright notice for the Library among | 
				
			||||
   these notices, as well as a reference directing the user to the | 
				
			||||
   copies of the GNU GPL and this license document. | 
				
			||||
 | 
				
			||||
   d) Do one of the following: | 
				
			||||
 | 
				
			||||
       0) Convey the Minimal Corresponding Source under the terms of this | 
				
			||||
       License, and the Corresponding Application Code in a form | 
				
			||||
       suitable for, and under terms that permit, the user to | 
				
			||||
       recombine or relink the Application with a modified version of | 
				
			||||
       the Linked Version to produce a modified Combined Work, in the | 
				
			||||
       manner specified by section 6 of the GNU GPL for conveying | 
				
			||||
       Corresponding Source. | 
				
			||||
 | 
				
			||||
       1) Use a suitable shared library mechanism for linking with the | 
				
			||||
       Library.  A suitable mechanism is one that (a) uses at run time | 
				
			||||
       a copy of the Library already present on the user's computer | 
				
			||||
       system, and (b) will operate properly with a modified version | 
				
			||||
       of the Library that is interface-compatible with the Linked | 
				
			||||
       Version.  | 
				
			||||
 | 
				
			||||
   e) Provide Installation Information, but only if you would otherwise | 
				
			||||
   be required to provide such information under section 6 of the | 
				
			||||
   GNU GPL, and only to the extent that such information is | 
				
			||||
   necessary to install and execute a modified version of the | 
				
			||||
   Combined Work produced by recombining or relinking the | 
				
			||||
   Application with a modified version of the Linked Version. (If | 
				
			||||
   you use option 4d0, the Installation Information must accompany | 
				
			||||
   the Minimal Corresponding Source and Corresponding Application | 
				
			||||
   Code. If you use option 4d1, you must provide the Installation | 
				
			||||
   Information in the manner specified by section 6 of the GNU GPL | 
				
			||||
   for conveying Corresponding Source.) | 
				
			||||
 | 
				
			||||
  5. Combined Libraries. | 
				
			||||
 | 
				
			||||
  You may place library facilities that are a work based on the | 
				
			||||
Library side by side in a single library together with other library | 
				
			||||
facilities that are not Applications and are not covered by this | 
				
			||||
License, and convey such a combined library under terms of your | 
				
			||||
choice, if you do both of the following: | 
				
			||||
 | 
				
			||||
   a) Accompany the combined library with a copy of the same work based | 
				
			||||
   on the Library, uncombined with any other library facilities, | 
				
			||||
   conveyed under the terms of this License. | 
				
			||||
 | 
				
			||||
   b) Give prominent notice with the combined library that part of it | 
				
			||||
   is a work based on the Library, and explaining where to find the | 
				
			||||
   accompanying uncombined form of the same work. | 
				
			||||
 | 
				
			||||
  6. Revised Versions of the GNU Lesser General Public License. | 
				
			||||
 | 
				
			||||
  The Free Software Foundation may publish revised and/or new versions | 
				
			||||
of the GNU Lesser General Public License from time to time. Such new | 
				
			||||
versions will be similar in spirit to the present version, but may | 
				
			||||
differ in detail to address new problems or concerns. | 
				
			||||
 | 
				
			||||
  Each version is given a distinguishing version number. If the | 
				
			||||
Library as you received it specifies that a certain numbered version | 
				
			||||
of the GNU Lesser General Public License "or any later version" | 
				
			||||
applies to it, you have the option of following the terms and | 
				
			||||
conditions either of that published version or of any later version | 
				
			||||
published by the Free Software Foundation. If the Library as you | 
				
			||||
received it does not specify a version number of the GNU Lesser | 
				
			||||
General Public License, you may choose any version of the GNU Lesser | 
				
			||||
General Public License ever published by the Free Software Foundation. | 
				
			||||
 | 
				
			||||
  If the Library as you received it specifies that a proxy can decide | 
				
			||||
whether future versions of the GNU Lesser General Public License shall | 
				
			||||
apply, that proxy's public statement of acceptance of any version is | 
				
			||||
permanent authorization for you to choose that version for the | 
				
			||||
Library. | 
				
			||||
@ -1,8 +0,0 @@ | 
				
			||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | 
				
			||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | 
				
			||||
<head> | 
				
			||||
</head> | 
				
			||||
<body> | 
				
			||||
<br /> | 
				
			||||
</body> | 
				
			||||
</html> | 
				
			||||
									
										Binary file not shown.
									
								
							
						@ -1,197 +0,0 @@ | 
				
			||||
/* JPEGCam v1.0.9 */ | 
				
			||||
/* Webcam library for capturing JPEG images and submitting to a server */ | 
				
			||||
/* Copyright (c) 2008 - 2009 Joseph Huckaby <jhuckaby@goldcartridge.com> */ | 
				
			||||
/* Licensed under the GNU Lesser Public License */ | 
				
			||||
/* http://www.gnu.org/licenses/lgpl.html */ | 
				
			||||
 | 
				
			||||
/* Usage: | 
				
			||||
	<script language="JavaScript"> | 
				
			||||
		document.write( webcam.get_html(320, 240) ); | 
				
			||||
		webcam.set_api_url( 'test.php' ); | 
				
			||||
		webcam.set_hook( 'onComplete', 'my_callback_function' ); | 
				
			||||
		function my_callback_function(response) { | 
				
			||||
			alert("Success! PHP returned: " + response); | 
				
			||||
		} | 
				
			||||
	</script> | 
				
			||||
	<a href="javascript:void(webcam.snap())">Take Snapshot</a> | 
				
			||||
*/ | 
				
			||||
 | 
				
			||||
// Everything is under a 'webcam' Namespace
 | 
				
			||||
window.webcam = { | 
				
			||||
	version: '1.0.9', | 
				
			||||
	
 | 
				
			||||
	// 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
 | 
				
			||||
	stealth: false, // stealth mode (do not freeze image upon capture)
 | 
				
			||||
	hooks: { | 
				
			||||
		onLoad: null, | 
				
			||||
		onComplete: null, | 
				
			||||
		onError: null | 
				
			||||
	}, // callback hook functions
 | 
				
			||||
	
 | 
				
			||||
	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; | 
				
			||||
	}, | 
				
			||||
	
 | 
				
			||||
	set_stealth: function(stealth) { | 
				
			||||
		// set or disable stealth mode
 | 
				
			||||
		this.stealth = stealth; | 
				
			||||
	}, | 
				
			||||
	
 | 
				
			||||
	snap: function(url, callback, stealth) { | 
				
			||||
		// 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); | 
				
			||||
		if (typeof(stealth) != 'undefined') this.set_stealth( stealth ); | 
				
			||||
		
 | 
				
			||||
		this.get_movie()._snap( this.api_url, this.quality, this.shutter_sound ? 1 : 0, this.stealth ? 1 : 0 ); | 
				
			||||
	}, | 
				
			||||
	
 | 
				
			||||
	freeze: function() { | 
				
			||||
		// freeze webcam image (capture but do not upload)
 | 
				
			||||
		this.get_movie()._snap('', this.quality, this.shutter_sound ? 1 : 0, 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; | 
				
			||||
		} | 
				
			||||
	} | 
				
			||||
}; | 
				
			||||
									
										Binary file not shown.
									
								
							
						
					Loading…
					
					
				
		Reference in new issue