2012-10-25 05:27:44 +08:00
|
|
|
|
2013-01-15 04:27:21 +08:00
|
|
|
var presenterUserID = "";
|
|
|
|
|
2012-10-25 03:28:24 +08:00
|
|
|
var registerListeners = function() {
|
2012-11-22 03:10:46 +08:00
|
|
|
console.log("Listening for events.");
|
2013-06-12 02:19:35 +08:00
|
|
|
BBB.listen("QueryPresentationsReplyEvent", function(bbbEvent) {
|
|
|
|
console.log("Number of presentations [" + bbbEvent.presentations.length + "]. First presentation [" + bbbEvent.presentations[0] + "].");
|
|
|
|
});
|
2013-05-20 06:51:08 +08:00
|
|
|
BBB.listen("OpenExternalFileUploadWindowEvent", function(bbbEvent) {
|
|
|
|
console.log("Open file upload dialog. Max file size is [" + bbbEvent.maxFileSize + "].");
|
|
|
|
});
|
|
|
|
BBB.listen("UserKickedOutEvent", function(bbbEvent) {
|
2013-05-30 00:06:02 +08:00
|
|
|
console.log("User has been kicked [" + bbbEvent.userID + "].");
|
|
|
|
});
|
2013-01-12 00:59:30 +08:00
|
|
|
BBB.listen("SwitchedLayoutEvent", function(bbbEvent) {
|
|
|
|
console.log("New Layout [" + bbbEvent.layoutID + "].");
|
|
|
|
});
|
|
|
|
BBB.listen("NewRoleEvent", function(bbbEvent) {
|
2013-01-12 06:27:18 +08:00
|
|
|
console.log("New Role Event [amIPresenter=" + bbbEvent.amIPresenter + ",role=" + bbbEvent.role + ",newPresenterUserID=" + bbbEvent.newPresenterUserID + "].");
|
2013-01-12 00:59:30 +08:00
|
|
|
});
|
|
|
|
BBB.listen("SwitchedPresenterEvent", function(bbbEvent) {
|
|
|
|
console.log("Switched Presenter [amIPresenter=" + bbbEvent.amIPresenter + ",role=" + bbbEvent.role + ",newPresenterUserID=" + bbbEvent.newPresenterUserID + "].");
|
2013-01-15 04:27:21 +08:00
|
|
|
|
|
|
|
presenterUserID = bbbEvent.newPresenterUserID;
|
|
|
|
|
2013-01-15 03:03:51 +08:00
|
|
|
if (bbbEvent.amIPresenter) {
|
2013-01-15 04:27:21 +08:00
|
|
|
console.log("*** I am presenter. Am I publishing webcam?");
|
2013-01-15 03:03:51 +08:00
|
|
|
BBB.listen("AmISharingCamQueryResponse", function(bbbEvent2) {
|
|
|
|
console.log("AmISharingCamQueryResponse [isPublishing=" + bbbEvent2.isPublishing + ",camIndex=" + bbbEvent2.camIndex + "]");
|
|
|
|
});
|
|
|
|
BBB.amISharingWebcam();
|
|
|
|
BBB.amISharingWebcam(function(bbbEvent3) {
|
|
|
|
console.log("amISharingWebcam [isPublishing=" + bbbEvent3.isPublishing
|
|
|
|
+ ",camIndex=" + bbbEvent3.camIndex
|
|
|
|
+ ",camWidth=" + bbbEvent3.camWidth
|
|
|
|
+ ",camHeight=" + bbbEvent3.camHeight
|
|
|
|
+ ",camKeyFrameInterval=" + bbbEvent3.camKeyFrameInterval
|
|
|
|
+ ",camModeFps=" + bbbEvent3.camModeFps
|
|
|
|
+ ",camQualityBandwidth=" + bbbEvent3.camQualityBandwidth
|
|
|
|
+ ",camQualityPicture=" + bbbEvent3.camQualityPicture
|
|
|
|
+ "]");
|
2013-01-15 04:27:21 +08:00
|
|
|
if (bbbEvent3.isPublishing) {
|
2013-05-25 23:55:13 +08:00
|
|
|
CAM_PREVIEW.stopPreviewCamera(bbbEvent3.avatarURL);
|
2013-01-15 04:27:21 +08:00
|
|
|
CAM_PREVIEW.previewCamera(bbbEvent3.camIndex, bbbEvent3.camWidth, bbbEvent3.camHeight, bbbEvent3.camKeyFrameInterval,
|
2013-05-25 23:55:13 +08:00
|
|
|
bbbEvent3.camModeFps, bbbEvent3.camQualityBandwidth, bbbEvent3.camQualityPicture, bbbEvent3.avatarURL);
|
2013-01-15 04:27:21 +08:00
|
|
|
}
|
2013-01-15 03:03:51 +08:00
|
|
|
});
|
|
|
|
} else {
|
2013-01-15 04:27:21 +08:00
|
|
|
console.log("*** I am NOT presenter. Is new presenter publishing webcam?");
|
2013-01-15 03:03:51 +08:00
|
|
|
BBB.listen("IsUserPublishingCamResponse", function(bbbEvent4) {
|
|
|
|
console.log("IsUserPublishingCamResponse [isUserPublishing=" + bbbEvent4.isUserPublishing
|
|
|
|
+ ",uri=" + bbbEvent4.uri
|
|
|
|
+ ",streamName=" + bbbEvent4.streamName + "]");
|
|
|
|
});
|
|
|
|
BBB.isUserSharingWebcam(bbbEvent.newPresenterUserID);
|
|
|
|
BBB.isUserSharingWebcam(bbbEvent.newPresenterUserID, function(bbbEvent5) {
|
|
|
|
console.log("isUserSharingWebcam [isUserPublishing=" + bbbEvent5.isUserPublishing
|
|
|
|
+ ",uri=" + bbbEvent5.uri
|
|
|
|
+ ",streamName=" + bbbEvent5.streamName + "]");
|
2013-01-15 04:27:21 +08:00
|
|
|
if (presenterUserID == bbbEvent.userID) {
|
2013-05-25 23:55:13 +08:00
|
|
|
CAM_VIEW.stopViewWebcamStream(bbbEvent.avatarURL);
|
2013-05-31 04:01:58 +08:00
|
|
|
CAM_VIEW.viewWebcamStream(bbbEvent.uri, bbbEvent.streamName, bbbEvent5.avatarURL);
|
2013-01-15 04:27:21 +08:00
|
|
|
}
|
2013-01-15 03:03:51 +08:00
|
|
|
});
|
2013-05-25 23:55:13 +08:00
|
|
|
CAM_PREVIEW.stopPreviewCamera(bbbEvent.avatarURL);
|
2013-01-15 03:03:51 +08:00
|
|
|
}
|
2013-01-12 00:59:30 +08:00
|
|
|
});
|
2012-10-25 03:28:24 +08:00
|
|
|
BBB.listen("UserLeftEvent", function(bbbEvent) {
|
|
|
|
console.log("User [" + bbbEvent.userID + "] has left.");
|
|
|
|
});
|
|
|
|
BBB.listen("UserJoinedEvent", function(bbbEvent) {
|
|
|
|
console.log("User [" + bbbEvent.userID + ", [" + bbbEvent.userName + "] has joined.");
|
|
|
|
});
|
|
|
|
BBB.listen("NewPublicChatEvent", function(bbbEvent) {
|
|
|
|
console.log("Received NewPublicChatEvent [" + bbbEvent.message + "]");
|
|
|
|
});
|
|
|
|
BBB.listen("NewPrivateChatEvent", function(bbbEvent) {
|
|
|
|
console.log("Received NewPrivateChatEvent event");
|
|
|
|
});
|
2012-11-22 03:10:46 +08:00
|
|
|
BBB.listen("UserJoinedVoiceEvent", function(bbbEvent) {
|
|
|
|
console.log("User [" + bbbEvent.userID + "] had joined the voice conference.");
|
|
|
|
});
|
|
|
|
BBB.listen("UserLeftVoiceEvent", function(bbbEvent) {
|
|
|
|
console.log("User [" + bbbEvent.userID + "has left the voice conference.");
|
|
|
|
});
|
|
|
|
BBB.listen("UserVoiceMutedEvent", function(bbbEvent) {
|
|
|
|
console.log("User [" + bbbEvent.userID + "] is muted [" + bbbEvent.muted + "]");
|
|
|
|
});
|
|
|
|
BBB.listen("UserLockedVoiceEvent", function(bbbEvent) {
|
|
|
|
console.log("User [" + bbbEvent.userID + "] is locked [" + bbbEvent.locked + "]");
|
|
|
|
});
|
2012-12-15 05:02:05 +08:00
|
|
|
BBB.listen("CamStreamSharedEvent", function(bbbEvent) {
|
|
|
|
console.log("User CamStreamSharedEvent [" + bbbEvent.uri + "," + bbbEvent.streamName + "]");
|
2013-01-15 04:27:21 +08:00
|
|
|
if (presenterUserID == bbbEvent.userID) {
|
2013-05-25 23:55:13 +08:00
|
|
|
CAM_VIEW.stopViewWebcamStream(bbbEvent.avatarURL);
|
|
|
|
CAM_VIEW.viewWebcamStream(bbbEvent.uri, bbbEvent.streamName, bbbEvent.avatarURL);
|
2013-01-15 04:27:21 +08:00
|
|
|
}
|
2012-12-15 05:02:05 +08:00
|
|
|
});
|
|
|
|
BBB.listen("BroadcastingCameraStartedEvent", function(bbbEvent) {
|
|
|
|
console.log("User BroadcastingCameraStartedEvent [" + bbbEvent.camIndex + "] [" + bbbEvent.camWidth + "]");
|
2013-01-15 04:27:21 +08:00
|
|
|
if (bbbEvent.isPresenter) {
|
2013-05-25 23:55:13 +08:00
|
|
|
CAM_PREVIEW.stopPreviewCamera(bbbEvent.avatarURL);
|
2013-01-15 04:27:21 +08:00
|
|
|
CAM_PREVIEW.previewCamera(bbbEvent.camIndex, bbbEvent.camWidth, bbbEvent.camHeight, bbbEvent.camKeyFrameInterval,
|
2013-05-25 23:55:13 +08:00
|
|
|
bbbEvent.camModeFps, bbbEvent.camQualityBandwidth, bbbEvent.camQualityPicture, bbbEvent.avatarURL);
|
2013-01-15 04:27:21 +08:00
|
|
|
}
|
2012-12-15 05:02:05 +08:00
|
|
|
});
|
|
|
|
BBB.listen("BroadcastingCameraStoppedEvent", function(bbbEvent) {
|
|
|
|
console.log("User BroadcastingCameraStoppedEvent ]");
|
2013-05-25 23:55:13 +08:00
|
|
|
CAM_PREVIEW.stopPreviewCamera(bbbEvent.avatarURL);
|
2012-12-15 05:02:05 +08:00
|
|
|
});
|
2013-05-09 07:17:06 +08:00
|
|
|
|
|
|
|
console.log("Listen Presentation Updates");
|
2013-05-11 00:59:50 +08:00
|
|
|
BBB.listen("OfficeDocConversionSuccessEvent", function(bbbEvent) {
|
|
|
|
console.log("Successfully converted Office document. : " + JSON.stringify(bbbEvent));
|
2013-05-09 07:17:06 +08:00
|
|
|
});
|
|
|
|
|
2013-05-11 00:59:50 +08:00
|
|
|
BBB.listen("OfficeDocConversionFailedEvent", function(bbbEvent) {
|
|
|
|
console.log("Failed to convert Office document. : " + JSON.stringify(bbbEvent));
|
2013-05-09 07:17:06 +08:00
|
|
|
});
|
|
|
|
|
2013-05-11 00:59:50 +08:00
|
|
|
BBB.listen("SupportedDocEvent", function(bbbEvent) {
|
|
|
|
console.log("Uploaded presentation file type is supported. : " + JSON.stringify(bbbEvent));
|
2013-05-09 07:17:06 +08:00
|
|
|
});
|
|
|
|
|
2013-05-11 00:59:50 +08:00
|
|
|
BBB.listen("UnsupportedDocEvent", function(bbbEvent) {
|
|
|
|
console.log("Uploaded presentation file type is unsupported. : " + JSON.stringify(bbbEvent));
|
2013-05-09 07:17:06 +08:00
|
|
|
});
|
|
|
|
|
2013-05-11 00:59:50 +08:00
|
|
|
BBB.listen("PageCountFailedEvent", function(bbbEvent) {
|
|
|
|
console.log("Failed to determine number of pages for the uploaded presentation. : " + JSON.stringify(bbbEvent));
|
2013-05-09 07:17:06 +08:00
|
|
|
});
|
|
|
|
|
2013-05-11 00:59:50 +08:00
|
|
|
BBB.listen("ThumbnailsUpdateEvent", function(bbbEvent) {
|
|
|
|
console.log("Generating thumbnails for uploaded presentation. : " + JSON.stringify(bbbEvent));
|
2013-05-09 07:17:06 +08:00
|
|
|
});
|
|
|
|
|
2013-05-11 00:59:50 +08:00
|
|
|
BBB.listen("PageCountExceededEvent", function(bbbEvent) {
|
|
|
|
console.log("Uploaded presentation had exceeded max number of pages. : " + JSON.stringify(bbbEvent));
|
2013-05-09 07:17:06 +08:00
|
|
|
});
|
|
|
|
|
2013-05-11 00:59:50 +08:00
|
|
|
BBB.listen("ConversionSuccessEvent", function(bbbEvent) {
|
|
|
|
console.log("Successfully converted uploaded presentation. : " + JSON.stringify(bbbEvent));
|
2013-05-09 07:17:06 +08:00
|
|
|
});
|
|
|
|
|
2013-05-11 00:59:50 +08:00
|
|
|
BBB.listen("ConversionProgressEvent", function(bbbEvent) {
|
|
|
|
console.log("Progress update on conversion process. : " + JSON.stringify(bbbEvent));
|
2013-05-09 07:17:06 +08:00
|
|
|
});
|
|
|
|
|
2012-10-25 03:28:24 +08:00
|
|
|
}
|
|
|
|
|
2012-12-13 03:21:09 +08:00
|
|
|
var leaveVoiceConference2 = function () {
|
|
|
|
BBB.leaveVoiceConference();
|
|
|
|
}
|
|
|
|
|
2012-10-25 03:28:24 +08:00
|
|
|
var joinVoiceConference2 = function () {
|
2012-10-05 03:46:23 +08:00
|
|
|
BBB.joinVoiceConference();
|
|
|
|
}
|
|
|
|
|
2012-12-14 23:32:08 +08:00
|
|
|
var amIPresenterAsync = function() {
|
|
|
|
BBB.listen("AmIPresenterQueryResponse", function(bbbEvent) {
|
|
|
|
console.log("Received AmIPresenterQueryResponse event [" + bbbEvent.amIPresenter + "]");
|
|
|
|
});
|
|
|
|
|
|
|
|
BBB.amIPresenter();
|
|
|
|
}
|
|
|
|
|
|
|
|
var amIPresenterSync = function() {
|
|
|
|
BBB.amIPresenter(function(amIPresenter) {
|
|
|
|
console.log("Am I Presenter = " + amIPresenter);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2013-01-12 00:59:30 +08:00
|
|
|
var getMyUserInfoAsynch = function() {
|
|
|
|
BBB.listen("GetMyUserInfoResponse", function(bbbEvent) {
|
2013-02-21 01:36:20 +08:00
|
|
|
console.log("User info response [myUserID=" + bbbEvent.myUserID
|
|
|
|
+ ",myUsername=" + bbbEvent.myUsername + ",myAvatarURL=" + bbbEvent.myAvatarURL
|
2013-02-25 23:14:52 +08:00
|
|
|
+ ",myRole=" + bbbEvent.myRole + ",amIPresenter=" + bbbEvent.amIPresenter
|
|
|
|
+ ",dialNumber=" + bbbEvent.dialNumber + ",voiceBridge=" + bbbEvent.voiceBridge + "].");
|
|
|
|
|
2013-02-21 01:36:20 +08:00
|
|
|
for(var key in bbbEvent.customdata){
|
|
|
|
console.log(key + " " + bbbEvent.customdata[key]);
|
|
|
|
}
|
2013-01-12 00:59:30 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
BBB.getMyUserInfo();
|
|
|
|
}
|
|
|
|
|
|
|
|
var getMyUserInfoSynch = function() {
|
|
|
|
BBB.getMyUserInfo(function(userInfo) {
|
2013-02-21 01:36:20 +08:00
|
|
|
console.log("User info callback [myUserID=" + userInfo.myUserID
|
|
|
|
+ ",myUsername=" + userInfo.myUsername + ",myAvatarURL=" + userInfo.myAvatarURL
|
2013-02-25 23:14:52 +08:00
|
|
|
+ ",myRole=" + userInfo.myRole + ",amIPresenter=" + userInfo.amIPresenter
|
|
|
|
+ ",dialNumber=" + userInfo.dialNumber + ",voiceBridge=" + userInfo.voiceBridge + "].");
|
|
|
|
|
2013-02-21 01:36:20 +08:00
|
|
|
for(var key in userInfo.customdata){
|
|
|
|
console.log(key + " " + userInfo.customdata[key]);
|
|
|
|
}
|
2013-01-12 00:59:30 +08:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2013-02-21 01:36:20 +08:00
|
|
|
|
2012-10-05 05:24:10 +08:00
|
|
|
var getMyRoleAsynch = function() {
|
|
|
|
BBB.listen("GetMyRoleResponse", function(bbbEvent) {
|
2013-01-12 00:59:30 +08:00
|
|
|
console.log("Received GetMyRoleResponse event [" + bbbEvent.myRole + "]");
|
2012-10-05 05:24:10 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
BBB.getMyRole();
|
|
|
|
}
|
|
|
|
|
|
|
|
var getMyRoleSynch = function() {
|
|
|
|
BBB.getMyRole(function(myRole) {
|
|
|
|
console.log("My role = " + myRole);
|
|
|
|
});
|
2012-10-05 03:46:23 +08:00
|
|
|
}
|
2012-10-05 05:24:10 +08:00
|
|
|
|
2012-11-21 04:20:12 +08:00
|
|
|
var getMyUserID = function() {
|
|
|
|
BBB.getMyUserID(function(userID) {
|
|
|
|
console.log("My user ID = [" + userID + "]");
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2012-11-21 03:27:23 +08:00
|
|
|
var getMeetingID = function() {
|
|
|
|
BBB.getMeetingID(function(meetingID) {
|
|
|
|
console.log("Meeting ID = [" + meetingID + "]");
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2013-06-01 04:55:12 +08:00
|
|
|
var raiseHand = function(raiseHand) {
|
|
|
|
BBB.raiseHand(raiseHand);
|
|
|
|
}
|
|
|
|
|
2012-10-06 04:54:45 +08:00
|
|
|
var muteMe = function() {
|
|
|
|
BBB.muteMe();
|
|
|
|
}
|
|
|
|
|
|
|
|
var unmuteMe = function() {
|
|
|
|
BBB.unmuteMe();
|
|
|
|
}
|
2012-10-06 05:07:22 +08:00
|
|
|
|
|
|
|
var muteAll = function() {
|
|
|
|
BBB.muteAll();
|
|
|
|
}
|
|
|
|
|
|
|
|
var unmuteAll = function() {
|
|
|
|
BBB.unmuteAll();
|
2012-10-18 22:17:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
var switchLayout = function(newLayout) {
|
|
|
|
BBB.switchLayout(newLayout);
|
|
|
|
}
|
|
|
|
|
2012-11-02 02:45:51 +08:00
|
|
|
var lockLayout = function(lock) {
|
|
|
|
BBB.lockLayout(lock);
|
|
|
|
}
|
|
|
|
|
2013-06-12 02:19:35 +08:00
|
|
|
var queryListOfPresentations = function() {
|
|
|
|
BBB.queryListOfPresentations();
|
|
|
|
}
|
|
|
|
|
|
|
|
var displayPresentation = function(presentationID) {
|
|
|
|
BBB.displayPresentation(presentationID);
|
|
|
|
}
|
|
|
|
|
|
|
|
var deletePresentation = function(presentationID) {
|
|
|
|
BBB.deletePresentation(presentationID);
|
|
|
|
}
|
2012-11-02 02:45:51 +08:00
|
|
|
|
2012-10-25 03:28:24 +08:00
|
|
|
var sendPublicChat = function () {
|
|
|
|
var message = "Hello from the Javascript API";
|
|
|
|
BBB.sendPublicChatMessage('0x7A7A7A', "en", message);
|
2012-10-19 04:32:20 +08:00
|
|
|
}
|
|
|
|
|
2012-10-25 03:28:24 +08:00
|
|
|
var sendPrivateChat = function () {
|
|
|
|
var message = "ECHO: " + bbbEvent.message;
|
|
|
|
BBB.sendPrivateChatMessage(bbbEvent.fromColor, bbbEvent.fromLang, message, bbbEvent.fromUserID);
|
2012-10-19 04:32:20 +08:00
|
|
|
}
|
2013-02-13 05:09:45 +08:00
|
|
|
|
|
|
|
var webcamViewStandaloneAppReady = function() {
|
|
|
|
console.log("WebcamViewStandalone App is ready.");
|
2013-02-14 01:05:05 +08:00
|
|
|
BBB.getPresenterUserID(function(puid) {
|
|
|
|
if (puid == "") {
|
|
|
|
console.log("There is no presenter in the meeting");
|
|
|
|
} else {
|
|
|
|
console.log("The presenter user id is [" + puid + "]");
|
|
|
|
// Is presenter sharing webcam? If so, get the webcam stream and display.
|
|
|
|
}
|
|
|
|
});
|
2013-02-13 05:09:45 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
var webcamPreviewStandaloneAppReady = function() {
|
|
|
|
console.log("WebcamPreviewStandalone App is ready.");
|
2013-02-14 01:05:05 +08:00
|
|
|
BBB.getPresenterUserID(function(puid) {
|
|
|
|
if (puid == "") {
|
|
|
|
console.log("There is no presenter in the meeting");
|
|
|
|
} else {
|
|
|
|
console.log("The presenter user id is [" + puid + "]");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
// Am I presenter? If so, am I publishing my camera? If so, display my camera.
|
|
|
|
|
2013-02-13 05:09:45 +08:00
|
|
|
}
|
2013-05-09 07:17:06 +08:00
|
|
|
|
|
|
|
var uploadPresentation = function() {
|
|
|
|
|
|
|
|
console.log("uploadPresentation");
|
|
|
|
|
|
|
|
BBB.getInternalMeetingID(function(meetingID) {
|
|
|
|
var formData = new FormData($('form')[0]);
|
2013-05-10 02:37:07 +08:00
|
|
|
formData.append("presentation_name", document.getElementById('fileUpload').value.split(/(\\|\/)/g).pop());
|
2013-05-09 07:17:06 +08:00
|
|
|
formData.append("conference", meetingID);
|
|
|
|
formData.append("room", meetingID);
|
|
|
|
|
|
|
|
$.ajax({
|
|
|
|
url: '/bigbluebutton/presentation/upload', //server script to process data
|
|
|
|
type: 'POST',
|
|
|
|
xhr: function() { // custom xhr
|
|
|
|
myXhr = $.ajaxSettings.xhr();
|
|
|
|
if(myXhr.upload){ // check if upload property exists
|
|
|
|
myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload
|
|
|
|
}
|
|
|
|
return myXhr;
|
|
|
|
},
|
|
|
|
//Ajax events
|
|
|
|
success: completeHandler,
|
|
|
|
error: errorHandler,
|
|
|
|
// Form data
|
|
|
|
data: formData,
|
|
|
|
//Options to tell JQuery not to process data or worry about content-type
|
|
|
|
cache: false,
|
|
|
|
contentType: false,
|
|
|
|
processData: false
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function progressHandlingFunction(e){
|
|
|
|
if(e.lengthComputable){
|
|
|
|
console.log("progress: loaded " + e.loaded + " total:" + e.total);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function completeHandler(e){
|
|
|
|
$('form')[0].reset();
|
|
|
|
console.log("you file has been uploaded!");
|
|
|
|
}
|
|
|
|
function errorHandler(e){
|
|
|
|
console.log("There was an error uploading your file.");
|
|
|
|
}
|