/*
* jRecorder Plugin for jQuery JavaScript Library (Alpha) * http://www.sajithmr.me/jrecorder * * Copyright (c) 2011 - 2013 Sajithmr.ME * Dual licensed under the MIT and GPL licenses. * - http://www.opensource.org/licenses/mit-license.php * - http://www.gnu.org/copyleft/gpl.html * * Author: Sajith Amma * Version: 1.1 * Date: 14 December 2011 */
/* Code is not verified using www.jshint.com/ */
(function ($){
var methods = { play : function( options ) { alert(options); }, pause : function( ) { } }; var jRecorderSettings = {} ; $.jRecorder = function( options, element ) { // allow instantiation without initializing for simple inheritance if(typeof(options) == "string") { if ( methods[options] ) { return methods[ options ].apply( this, Array.prototype.slice.call( arguments, 1 )); } return false; } //if the element to be appended is not defind, append to body if(element == undefined) { element = $("body"); } //default settings var settings = { 'rec_width': '300', 'rec_height': '200', 'rec_top': '0px', 'rec_left': '0px', 'recorderlayout_id' : 'flashrecarea', 'recorder_id' : 'audiorecorder', 'recorder_name': 'audiorecorder', 'wmode' : 'transparent', 'bgcolor': '#ff0000', 'swf_path': 'jRecorder.swf', 'host': 'acceptfile.php?filename=hello.wav', 'callback_started_recording' : function(){}, 'callback_finished_recording' : function(){}, 'callback_stopped_recording': function(){}, 'callback_error_recording' : function(){}, 'callback_activityTime': function(time){}, 'callback_activityLevel' : function(level){} }; //if option array is passed, merget the values if ( options ) { $.extend( settings, options ); } jRecorderSettings = settings; var myNav = navigator.userAgent.toLowerCase(); var ie = (myNav.indexOf('msie') != -1) ? true : false; if(ie && parseInt(myNav.split('msie')[1]) <= 8) { var objStr = '<object name="'+ settings['recorder_name'] +'" id="' + settings['recorder_id'] + '" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="'+ settings['rec_width'] +'" height="'+ settings['rec_height']+'"></object>'; var paramStr = [ '<param name="movie" value="'+ settings['swf_path'] + '?host=' + settings['host'] + '" />', '<param name="allowScriptAccess" value="always" />', '<param name="bgcolor" value="' + settings['bgcolor'] + '" />', '<param name="wmode" value="' + settings['wmode'] + '" />' ]; htmlObj = document.createElement(objStr); for(var i=0; i < paramStr.length; i++) { htmlObj.appendChild(document.createElement(paramStr[i])); } //var divStr = ' <div id="'+ settings['recorderlayout_id'] +'" style="position:absolute;top:0px;left:0px;z-index:-1" ></div>'; //var divObj = document.createElement(divStr); } else { var createParam = function(el, n, v) { var p = document.createElement("param"); p.setAttribute("name", n); p.setAttribute("value", v); el.appendChild(p); }; htmlObj = document.createElement("object"); htmlObj.setAttribute("id", settings['recorder_id'] ); htmlObj.setAttribute("name", settings['recorder_name'] ); htmlObj.setAttribute("data", settings['swf_path'] + '?host=' + settings['host'] ); htmlObj.setAttribute("type", "application/x-shockwave-flash"); htmlObj.setAttribute("width", settings['rec_width']); // Non-zero htmlObj.setAttribute("height", settings['rec_height']); // Non-zero createParam(htmlObj, "allowscriptaccess", "always"); createParam(htmlObj, "bgcolor", settings['bgcolor']); createParam(htmlObj, "wmode", settings['wmode'] ); } var divObj = document.createElement("div"); divObj.setAttribute("id", settings['recorderlayout_id']); divObj.setAttribute("style", "position:absolute;top:"+ settings['rec_top'] +";left:"+ settings['rec_left'] +";z-index:-1"); divObj.appendChild(htmlObj); element.append(divObj); }; //function call to start a recording $.jRecorder.record = function(max_time){ //change z-index to make it top $( '#' + jRecorderSettings['recorderlayout_id'] ).css('z-index', 1000); getFlashMovie(jRecorderSettings['recorder_name']).jStartRecording(max_time); } //function call to stop recording $.jRecorder.stop = function(){ getFlashMovie(jRecorderSettings['recorder_name']).jStopRecording(); } //function call to send wav data to server url from the init configuration $.jRecorder.sendData = function(){ getFlashMovie(jRecorderSettings['recorder_name']).jSendFileToServer(); } $.jRecorder.callback_started_recording = function(){ jRecorderSettings['callback_started_recording'](); } $.jRecorder.callback_finished_recording = function(){ jRecorderSettings['callback_finished_recording'](); } $.jRecorder.callback_error_recording = function(){ jRecorderSettings['callback_error_recording'](); } $.jRecorder.callback_stopped_recording = function(){ jRecorderSettings['callback_stopped_recording'](); } $.jRecorder.callback_finished_sending = function(){ jRecorderSettings['callback_finished_sending'](); } $.jRecorder.callback_activityLevel = function(level){ jRecorderSettings['callback_activityLevel'](level); } $.jRecorder.callback_activityTime = function(time){ //put back flash while recording $( '#' + jRecorderSettings['recorderlayout_id'] ).css('z-index', -1); jRecorderSettings['callback_activityTime'](time); } //function to return flash object from name function getFlashMovie(movieName) { var isIE = navigator.appName.indexOf("Microsoft") != -1; return (isIE) ? window[movieName] : document[movieName]; }
})(jQuery);