Created
March 19, 2015 21:23
-
-
Save markbratanov/859df0b1a70d1e15446c to your computer and use it in GitHub Desktop.
This is the file that the AJAX call loads. The Javascript is included at the bottom (and the library that it references to is called on page load)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div class='admin-box'> | |
<h3>Vocabulary</h3> | |
<?php echo form_open($this->uri->uri_string(), 'class="form-horizontal"'); ?> | |
<fieldset> | |
<div class="control-group<?php echo form_error('vocab_text') ? ' error' : ''; ?>"> | |
<?php echo form_label('Vocab text'. lang('bf_form_label_required'), 'vocab_text', array('class' => 'control-label')); ?> | |
<div class='controls'> | |
<input id='vocab_text' type='text' required='required' name='vocab_text' maxlength='255' value="<?php echo set_value('vocab_text', isset($vocabulary->vocab_text) ? $vocabulary->vocab_text : ''); ?>" /> | |
<span class='help-inline'><?php echo form_error('vocab_text'); ?></span> | |
</div> | |
</div> | |
<div class="control-group<?php echo form_error('audio_fk') ? ' error' : ''; ?>"> | |
<label for="file_name" class="control-label"><span id="restart-recording-content" style="display:none;"><a id="restart-recording" href="#"><img style="width:25px; margin-right:10px" src="/assets/images/restart.jpg"></a></span>Record Audio</label> | |
<div class='controls'> | |
<button id="start-recording">Start Recording</button> | |
<button id="stop-recording" disabled>Stop Recording</button> | |
<div id="audios-container"></div> | |
</div> | |
</div> | |
<div class="control-group<?php echo form_error('image_fk') ? ' error' : ''; ?>"> | |
<?php echo form_label('Image', 'image_fk', array('class' => 'control-label')); ?> | |
<div class='controls'> | |
<label> | |
<input id="choose_image" type="file" name="files[]" accept="image/*" title='Click to add Image'> | |
</label> | |
<div class="col-md-6"> | |
<div class="panel panel-default"> | |
<div class="panel-body demo-panel-files" id='stark-files'> | |
<!--<span class="demo-note">No image has been uploaded</span>--> | |
</div> | |
</div> | |
</div> | |
<!-- / Right column --> | |
</div> | |
</div> | |
</fieldset> | |
<fieldset class='form-actions'> | |
<?php | |
$data = array( | |
'save' => 1, | |
'audio_url' => '', | |
'file_name' => '', | |
'text' => '', | |
'image_name' => '', | |
'image_file_name' => '', | |
'direct_url' => '' | |
); | |
echo form_hidden($data); | |
?> | |
<input type='submit' name='save-button' class='btn btn-primary' value="<?php echo lang('vocabulary_action_create'); ?>" /> | |
</fieldset> | |
<?php echo form_close(); ?> | |
</div> | |
<script language="javascript" type="text/javascript"> | |
$(function() { | |
init(); | |
}); | |
function __log(e, data) { | |
console.log ( "\n" + e + " " + (data || '')); | |
} | |
var audio_context; | |
var recorder; | |
alert("script loaded"); | |
document.querySelector('#start-recording').onclick = function() { | |
this.disabled = true; | |
recorder && recorder.record(); | |
__log('Recording...'); | |
document.querySelector('#stop-recording').disabled = false; | |
}; | |
document.querySelector('#stop-recording').onclick = function() { | |
recorder && recorder.stop(); | |
__log('Stopped recording.'); | |
// create WAV download link using audio data blob | |
createDownloadLink(); | |
recorder.clear(); | |
this.disabled = true; | |
}; | |
document.querySelector('#restart-recording').onclick = function() { | |
this.disabled = true; | |
$('#audios-container').html(''); | |
document.querySelector('#start-recording').disabled = false; | |
document.querySelector('#stop-recording').disabled = false; | |
$('#start-recording').show(); | |
$('#stop-recording').show(); | |
}; | |
function startUserMedia(stream) { | |
alert("inside startusermedia"); | |
var input = audio_context.createMediaStreamSource(stream); | |
__log('Media stream created.'); | |
recorder = new Recorder(input); | |
__log('Recorder initialised.'); | |
} | |
function createDownloadLink() { | |
var audio = document.createElement('audio'); | |
$('#restart-recording-content').show(); | |
$('#start-recording').hide(); | |
$('#stop-recording').hide(); | |
document.querySelector('#start-recording').onclick = function() { | |
this.disabled = true; | |
recorder && recorder.record(); | |
__log('Recording...'); | |
}; | |
recorder && recorder.exportWAV(function(blob) { | |
var fileType = 'audio'; // or "audio" | |
var fileName = 'temp-ajax-audio.wav'; // or "wav" or "ogg" | |
var cookie = getCookie('ci_csrf_token'); | |
audiosContainer.appendChild(audio); | |
audio = mergeProps(audio, { | |
controls: true, | |
src: URL.createObjectURL(blob) | |
}); | |
audio.play(); | |
var formData = new FormData(); | |
formData.append(fileType + '-filename', fileName); | |
formData.append(fileType + '-blob', blob); | |
formData.append('ci_csrf_token', cookie); | |
$.ajax({ | |
url : "/admin/content/audio/audio_upload", | |
type: "POST", | |
data : formData, | |
contentType: false, | |
processData: false, | |
success: function(data, textStatus, jqXHR) | |
{ | |
document.querySelector('#start-recording').disabled = false; | |
alert(result.file_path); | |
var result = jQuery.parseJSON(data); | |
$("#file_name").val(result.file_name); | |
$("#audio_url").val(result.file_path); | |
}, | |
error: function (jqXHR, textStatus, errorThrown) | |
{ | |
alert("Oops something happened." + " --- "); | |
} | |
}); | |
}); | |
} | |
function mergeProps(mergein, mergeto) { | |
mergeto = reformatProps(mergeto); | |
for (var t in mergeto) { | |
if (typeof mergeto[t] !== 'function') { | |
mergein[t] = mergeto[t]; | |
} | |
} | |
return mergein; | |
} | |
function reformatProps(obj) { | |
var output = {}; | |
for (var o in obj) { | |
if (o.indexOf('-') != -1) { | |
var splitted = o.split('-'); | |
var name = splitted[0] + splitted[1].split('')[0].toUpperCase() + splitted[1].substr(1); | |
output[name] = obj[o]; | |
} else output[o] = obj[o]; | |
} | |
return output; | |
} | |
function getCookie(key) { | |
var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)'); | |
return keyValue ? keyValue[2] : null; | |
} | |
// below function via: http://goo.gl/B3ae8c | |
function bytesToSize(bytes) { | |
var k = 1000; | |
var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; | |
if (bytes === 0) return '0 Bytes'; | |
var i = parseInt(Math.floor(Math.log(bytes) / Math.log(k)),10); | |
return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i]; | |
} | |
// below function via: http://goo.gl/6QNDcI | |
function getTimeLength(milliseconds) { | |
var data = new Date(milliseconds); | |
return data.getUTCHours()+" hours, "+data.getUTCMinutes()+" minutes and "+data.getUTCSeconds()+" second(s)"; | |
} | |
var audiosContainer = document.getElementById('audios-container'); | |
var index = 1; | |
function init() { | |
try { | |
// webkit shim | |
window.AudioContext = window.AudioContext || window.webkitAudioContext; | |
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia; | |
window.URL = window.URL || window.webkitURL; | |
audio_context = new AudioContext; | |
__log('Audio context set up.'); | |
__log('navigator.getUserMedia ' + (navigator.getUserMedia ? 'available.' : 'not present!')); | |
} catch (e) { | |
alert('No web audio support in this browser!'); | |
} | |
if(navigator.getUserMedia) { | |
alert("condition true"); | |
navigator.getUserMedia({audio: true}, startUserMedia, function(e) { | |
__log('No live audio input: ' + e); | |
}); | |
} else { | |
__log('fail '); | |
} | |
} | |
</script> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment