123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596 |
- 'use strict';
- var cur_call = null;
- var confMan = null;
- var verto;
- var ringing = false;
- var autocall = false;
- var chatting_with = false;
- $( ".selector" ).pagecontainer({ "theme": "a" });
- function display(msg) {
- $("#calltitle").html(msg);
- }
- function clearConfMan() {
- if (confMan) {
- confMan.destroy();
- confMan = null;
- }
- $("#conf").hide();
- $("#message").hide();
- chatting_with = null;
- }
- function goto_dialog(where) {
- $( ":mobile-pagecontainer" ).pagecontainer( "change", "#dialog-" + where, { role: "dialog" } );
- }
- function goto_page(where, force) {
- $( ":mobile-pagecontainer" ).pagecontainer( "change", "#page-" + where);
- }
- var first_login = false;
- var online_visible = false;
- function online(on) {
- if (on) {
- $("#online").show();
- $("#offline").hide();
- first_login = true;
- } else {
- $("#online").hide();
- $("#offline").show();
- }
- online_visible = on;
- }
- function setupChat() {
- $("#chatwin").html("");
- $("#chatsend").click(function() {
- if (!cur_call && chatting_with) {
- return;
- }
- cur_call.message({to: chatting_with,
- body: $("#chatmsg").val(),
- from_msg_name: cur_call.params.caller_id_name,
- from_msg_number: cur_call.params.caller_id_number
- });
- $("#chatmsg").val("");
- });
- $("#chatmsg").keyup(function (event) {
- if (event.keyCode == 13 && !event.shiftKey) {
- $( "#chatsend" ).trigger( "click" );
- }
- });
- }
- function check_vid() {
- var use_vid = $("#use_vid").is(':checked');
- return use_vid;
- }
- function messageTextToJQ(body) {
- // Builds a jQuery collection from body text, linkifies http/https links, imageifies http/https links to images, and doesn't allow script injection
-
- var match, $link, img_url, $body_parts = $(), rx = /(https?:\/\/[^ \n\r]+|\n\r|\n|\r)/;
-
- while ((match = rx.exec(body)) !== null) {
- if (match.index !== 0) {
- $body_parts = $body_parts.add(document.createTextNode(body.substr(0, match.index)));
- }
- if (match[0].match(/^(\n|\r|\n\r)$/)) {
- // Make a BR from a newline
- $body_parts = $body_parts.add($('<br />'));
- body = body.substr(match.index + match[0].length);
- } else {
- // Make a link (or image)
- $link = $('<a target="_blank" />').attr('href', match[0]);
-
- if (match[0].search(/\.(gif|jpe?g|png)/) > -1) {
- // Make an image
- img_url = match[0];
- // Handle dropbox links
- if (img_url.indexOf('dropbox.com') !== -1) {
- if (img_url.indexOf('?dl=1') === -1 && img_url.indexOf('?dl=0') === -1) {
- img_url += '?dl=1';
- } else if (img_url.indexOf('?dl=0') !== -1) {
- img_url = img_url.replace(/dl=0$/, 'dl=1');
- }
- }
- $link.append($('<img border="0" class="chatimg" />').attr('src', img_url));
- } else {
- // Make a link
- $link.text(match[0]);
- }
- body = body.substr(match.index + match[0].length);
- $body_parts = $body_parts.add($link);
- }
- }
- if (body) {
- $body_parts = $body_parts.add(document.createTextNode(body));
- }
- return $body_parts;
- } // END function messageTextToJQ
- var callbacks = {
- onMessage: function(verto, dialog, msg, data) {
- switch (msg) {
- case $.verto.enum.message.pvtEvent:
- // console.error("pvtEvent", data.pvtData);
- if (data.pvtData) {
- switch (data.pvtData.action) {
- case "conference-liveArray-part":
- clearConfMan();
- break;
- case "conference-liveArray-join":
- clearConfMan();
- confMan = new $.verto.confMan(verto, {
- tableID: "#conf_list",
- statusID: "#conf_count",
- mainModID: "#conf_mod",
- displayID: "#conf_display",
- dialog: dialog,
- hasVid: check_vid(),
- laData: data.pvtData
- });
- $("#conf").show();
- $("#chatwin").html("");
- $("#message").show();
- chatting_with = data.pvtData.chatID;
- break;
- }
- }
- break;
- case $.verto.enum.message.info:
- var body = data.body;
- /*
- // This section has been replaced with messageTextToJQ function
- if (body.match(/\.gif|\.jpg|\.jpeg|\.png/)) {
- var mod = "";
- if (body.match(/dropbox.com/)) {
- mod = "?dl=1";
- }
- body = body.replace(/(http[s]{0,1}:\/\/\S+)/g, "<a target='_blank' href='$1'>$1<br><img border='0' class='chatimg' src='$1'" + mod + "><\/a>");
- } else {
- body = body.replace(/(http[s]{0,1}:\/\/\S+)/g, "<a target='_blank' href='$1'>$1<\/a>");
- }
- if (body.slice(-1) !== "\n") {
- body += "\n";
- }
- body = body.replace(/(?:\r\n|\r|\n)/g, '<br />');
-
- var from = data.from_msg_name || data.from;
- $("#chatwin").append("<span class=chatuid>" + from + ":</span><br>" + body);
- $('#chatwin').animate({"scrollTop": $('#chatwin')[0].scrollHeight}, "fast");
- */
-
- var from = data.from_msg_name || data.from;
-
- $('#chatwin')
- .append($('<span class="chatuid" />').text(from + ':'))
- .append($('<br />'))
- .append(messageTextToJQ(body))
- .append($('<br />'));
- $('#chatwin').animate({"scrollTop": $('#chatwin')[0].scrollHeight}, "fast");
-
- break;
- case $.verto.enum.message.display:
- var party = dialog.params.remote_caller_id_name + "<" + dialog.params.remote_caller_id_number + ">";
- display("Talking to: " + dialog.cidString());
- break;
- default:
- break;
- }
- },
- onDialogState: function(d) {
- cur_call = d;
- if (d.state == $.verto.enum.state.ringing) {
- ringing = true;
- } else {
- ringing = false;
- }
- switch (d.state) {
- case $.verto.enum.state.ringing:
- display("Call From: " + d.cidString());
- $("#ansbtn").click(function() {
- cur_call.answer({
- useStereo: $("#use_stereo").is(':checked'),
- callee_id_name: $("#name").val(),
- callee_id_number: $("#cid").val(),
- });
- $('#dialog-incoming-call').dialog('close');
- });
- $("#declinebtn").click(function() {
- cur_call.hangup();
- $('#dialog-incoming-call').dialog('close');
- });
- goto_dialog("incoming-call");
- $("#dialog-incoming-call-txt").text("Incoming call from: " + d.cidString());
- if (d.params.wantVideo) {
- $("#vansbtn").click(function() {
- $("#use_vid").prop("checked", true);
- cur_call.answer({
- useVideo: true,
- useStereo: $("#use_stereo").is(':checked')
- });
- });
- // the buttons in this jquery mobile wont hide .. gotta wrap them in a div as a workaround
- $("#vansdiv").show();
- } else {
- $("#vansdiv").hide();
- }
- break;
- case $.verto.enum.state.trying:
- display("Calling: " + d.cidString());
- goto_page("incall");
- break;
- case $.verto.enum.state.early:
- case $.verto.enum.state.active:
- display("Talking to: " + d.cidString());
- goto_page("incall");
- break;
- case $.verto.enum.state.hangup:
- $("#main_info").html("Call ended with cause: " + d.cause);
- goto_page("main");
- case $.verto.enum.state.destroy:
- $("#hangup_cause").html("");
- clearConfMan();
- cur_call = null;
- break;
- case $.verto.enum.state.held:
- break;
- default:
- display("");
- break;
- }
- },
- onWSLogin: function(v, success) {
- display("");
- cur_call = null;
- ringing = false;
- if (success) {
- online(true);
- /*
- verto.subscribe("presence", {
- handler: function(v, e) {
- console.error("PRESENCE:", e);
- }
- });
- */
- if (!window.location.hash) {
- goto_page("main");
- }
- if (autocall) {
- autocall = false;
- docall();
- }
- } else {
- goto_page("main");
- goto_dialog("login-error");
- }
- },
- onWSClose: function(v, success) {
- display("");
- online(false);
- var today = new Date();
- $("#errordisplay").html("Connection Error.<br>Last Attempt: " + today);
- goto_page("main");
- },
- onEvent: function(v, e) {
- console.debug("GOT EVENT", e);
- },
- };
- $("#hold").click(function(e) {
- cur_call.toggleHold();
- goto_dialog("hold");
- });
- $("#cancelxferbtn").click(function(e) {
- $("#xferto").val("");
- $("#xferdiv").hide();
- });
- $(".startxferbtn").click(function(e) {
- if ($('#xferdiv').is(':visible')) {
- var xfer = $("#xferto").val();
- if (xfer) {
- cur_call.transfer(xfer);
- }
- $("#xferto").val("");
- $("#xferdiv").hide();
- } else {
- $("#xferdiv").show();
- }
- });
- $("#clearbtn").click(function(e) {
- $("#ext").val("");
- });
- $(".dialbtn").click(function(e) {
- $("#ext").val($("#ext").val() + e.currentTarget.textContent);
- });
- $(".dtmf").click(function(e) {
- if ($('#xferdiv').is(':visible')) {
- $("#xferto").val($("#xferto").val() + e.currentTarget.textContent);
- } else {
- cur_call.dtmf(e.currentTarget.textContent);
- }
- });
- $("#hupbtn").click(function() {
- verto.hangup();
- cur_call = null;
- });
- $("#webcam").click(function() {
- check_vid();
- });
- function docall() {
- $('#ext').trigger('change');
- if (cur_call) {
- return;
- }
- $("#main_info").html("Trying");
- cur_call = verto.newCall({
- destination_number: $("#ext").val(),
- caller_id_name: $("#name").val(),
- caller_id_number: $("#cid").val(),
- useVideo: check_vid(),
- useStereo: $("#use_stereo").is(':checked')
- });
- }
- $("#callbtn").click(function() {
- docall();
- });
- function pop(id, cname, dft) {
- var tmp = $.cookie(cname) || dft;
- $.cookie(cname, tmp, {
- expires: 365
- });
- $(id).val(tmp).change(function() {
- $.cookie(cname, $(id).val(), {
- expires: 365
- });
- });
- }
- function init() {
- cur_call = null;
- if (!autocall) {
- pop("#ext", "verto_demo_ext", "3500");
- }
- pop("#name", "verto_demo_name", "FreeSWITCH User");
- pop("#cid", "verto_demo_cid", "1008");
- pop("#textto", "verto_demo_textto", "1000");
- pop("#login", "verto_demo_login", "1008");
- pop("#passwd", "verto_demo_passwd", "1234");
- pop("#hostName", "verto_demo_hostname", window.location.hostname);
- pop("#wsURL", "verto_demo_wsurl", "wss://" + window.location.hostname + ":8082");
- var tmp = $.cookie("verto_demo_vid_checked") || "false";
- $.cookie("verto_demo_vid_checked", tmp, {
- expires: 365
- });
- $("#use_vid").prop("checked", tmp === "true").change(function(e) {
- tmp = $("#use_vid").is(':checked');
- $.cookie("verto_demo_vid_checked", tmp ? "true" : "false", {
- expires: 365
- });
- });
- tmp = $.cookie("verto_demo_stereo_checked") || "false";
- $.cookie("verto_demo_stereo_checked", tmp, {
- expires: 365
- });
- $("#use_stereo").prop("checked", tmp === "true").change(function(e) {
- tmp = $("#use_stereo").is(':checked');
- $.cookie("verto_demo_stereo_checked", tmp ? "true" : "false", {
- expires: 365
- });
- });
- tmp = $.cookie("verto_demo_stun_checked") || "true";
- $.cookie("verto_demo_stun_checked", tmp, {
- expires: 365
- });
- $("#use_stun").prop("checked", tmp === "true").change(function(e) {
- tmp = $("#use_stun").is(':checked');
- $.cookie("verto_demo_stun_checked", tmp ? "true" : "false", {
- expires: 365
- });
- if (verto) {
- verto.iceServers(tmp);
- }
- });
- verto = new $.verto({
- login: $("#login").val() + "@" + $("#hostName").val(),
- passwd: $("#passwd").val(),
- socketUrl: $("#wsURL").val(),
- tag: "webcam",
- ringFile: "sounds/bell_ring2.wav",
- videoParams: {
- "minWidth": "1280",
- "minHeight": "720",
- "minFrameRate": 30
- },
- audioParams: {
- googAutoGainControl: false,
- googNoiseSuppression: false,
- googHighpassFilter: false
- },
- iceServers: $("#use_stun").is(':checked')
- },callbacks);
- $("#login").change(function(e) {
- $("#cid").val(e.currentTarget.value);
- $.cookie("verto_demo_cid", e.currentTarget.value, {
- expires: 365
- });
- });
- $("#vtxtbtn").click(function() {
- verto.message({
- to: $("#textto").val(),
- body: $("#textmsg").val()
- });
- $("#textmsg").val("");
- });
- $("#logoutbtn").click(function() {
- verto.logout();
- online(false);
- });
- $("#loginbtn").click(function() {
- online(false);
- verto.loginData({
- login: $("#login").val() + "@" + $("#hostName").val(),
- passwd: $("#passwd").val()
- });
- verto.login();
- goto_page("main");
- });
- $("#xferdiv").hide();
- $("#webcam").hide();
- online(false);
- setupChat();
- $("#ext").keyup(function (event) {
- if (event.keyCode == 13) {
- $( "#callbtn" ).trigger( "click" );
- }
- });
- $(document).keypress(function(event) {
- if (!(cur_call && event.target.id == "page-incall")) return;
- var key = String.fromCharCode(event.keyCode);
- var i = parseInt(key);
- if (key === "#" || key === "*" || key === "0" || (i > 0 && i <= 9)) {
- cur_call.dtmf(key);
- }
- });
- if (window.location.hostname !== "webrtc.freeswitch.org") {
- $("#directory").hide();
- }
- }
- $(document).ready(function() {
- var hash = window.location.hash.substring(1);
- var a = [];
- if (hash && hash.indexOf("page-") == -1) {
- window.location.hash = "";
- $("#ext").val(hash);
- autocall = true;
- }
- if (hash && (a = hash.split("&"))) {
- window.location.hash = a[0];
- }
- init();
- });
- var lastTo = 0;
- $(document).bind("pagecontainerchange", function(e, data) {
- if (lastTo) {
- clearTimeout(lastTo);
- }
- switch (window.location.hash) {
- case "#page-incall":
- lastTo = setTimeout(function() {
- if (!cur_call) {
- goto_page("main");
- }
- }, 1000);
- break;
- case "#page-main":
- if (cur_call) {
- goto_page("incall");
- }
- break;
- case "#page-login":
- lastTo = setTimeout(function() {
- if (online_visible) {
- goto_page("main");
- }
- },
- 1000);
- break;
- }
- });
|