Built motion from commit (unavailable).|2.5.4
[motion2.git] / snippet / 1.0.15 / scripts / app.js
diff --git a/snippet/1.0.15/scripts/app.js b/snippet/1.0.15/scripts/app.js
deleted file mode 100644 (file)
index d2b4b75..0000000
+++ /dev/null
@@ -1 +0,0 @@
-!function(){"use strict";function e(t){return function(e){return t.trustAsHtml(e)}}e.$inject=["$sce"],angular.module("motion",["ngAnimate","ngAria","ngMessages","ngMaterial","ngResource","ngSanitize","ngCsv","ngEmbed","ui.router","LocalStorageModule","ngRateIt","flow"]).filter("toTrusted",e).constant("STORAGE_PREFIX","motion_chat").constant("STORAGE_VISITOR","visitor").constant("STORAGE_LAYOUT","layout").directive("ngEnter",function(){return function(t,e,n){e.bind("keydown keypress",function(e){13===e.which&&(t.$apply(function(){t.$eval(n.ngEnter)}),e.preventDefault())})}}).directive("ngPrint",function(){function i(e,t){for(var n,i=document.createElement("div"),o=t.visitor,s=t.settings,a=0;a<t.messages.length;a++){var r=t.messages[a],l="Sender: ",c="Message: "+r.body,d="Sent At: "+moment(r.createdAt).format("YYYY-MM-DD HH:mm:ss");if(0!==a){switch(t.settings.agentIdentifier){case"website_alias":l+="out"===r.direction?r.UserId?s.agentAlias+r.UserId:"System":s.customerAlias||o.from||"Visitor"+r.ContactId;break;case"agent_alias":l+="out"===r.direction?r.UserId?r.User.alias||r.User.fullname:"System":s.customerAlias||o.from||"Visitor"+r.ContactId;break;case"agent_fullname":l+="out"===r.direction?r.UserId?r.User.fullname:"System":s.customerAlias||o.from||"Visitor"+r.ContactId;break;default:l+="out"===r.direction?r.UserId?(s.agentAlias||"Agent")+r.UserId:"System":s.customerAlias||o.from||"Visitor"+r.ContactId}i.appendChild(document.createTextNode(l)),i.appendChild(document.createElement("br")),i.appendChild(document.createTextNode(c)),i.appendChild(document.createElement("br")),i.appendChild(document.createTextNode(d)),i.appendChild(document.createElement("br")),i.appendChild(document.createElement("br"))}else n=r.createdAt}var m=window.open();m.document.write("<html><head><title>"+document.title+"</title>"),m.document.write("</head><body >"),m.document.write("<h3> Website: "+s.referer+"</h3>"),m.document.write("<h3> Start Time: "+moment(n).format("YYYY-MM-DD HH:mm:ss")+"</h3>"),m.document.write("<h3> Print Time: "+moment().format("YYYY-MM-DD HH:mm:ss")+"</h3>"),m.document.write(i.innerHTML),m.document.write("</body></html>"),m.document.close(),m.focus(),m.print(),m.close()}return{link:function(t,e,n){e.on("click",function(){var e=document.getElementById("chatContent1");e&&i(e,t)})},restrict:"A"}})}(),function(){"use strict";function e(e,s,t,n,i,o,a,r,l,c){var d,m,g,u,p=this;p.errors={},s.messages=[],p.emojiOptions={watchEmbedData:!1,fontSmiley:!1,emoji:!0,link:!0,linkTarget:"_blank"},p.$onInit=function(){s.status="chat",s.loading=!1,s.settings.showMenu=!0,p.replyMessage="",s.visitor.interaction&&s.visitor.interaction.closed?(s.updateStorage(l,null,!0),s.updateStorage(c,null,!0),f()):(v(),m=n(y,2e3),g=n(v,3e3));d=$("#emojionearea").emojioneArea({placeholder:s.settings.placeholderMessage||"Type a message",events:{keyup:function(e,t){x(t)},ready:function(){this.setFocus()}}})},p.reply=x,p.reply_button=function(e){var t=d[0].emojioneArea.getText();if(""===t)return;b(_.merge({body:t},s.visitor)),d[0].emojioneArea.setFocus()},p.fileAdded=function(e){var t=new FormData;t.append("file",e.file),a.post(s.settings.remote+"/api/chat/interactions/"+s.visitor.interaction.id+"/attachment_upload?token="+s.settings.token,t,{transformRequest:angular.identity,headers:{"Content-Type":void 0}}).then(function(e){(e=e.data).id?(delete p.errors.sendAttachment,b(_.merge({body:'<a href="'+s.settings.remote+"/api/chat/interactions/"+s.visitor.interaction.id+"/attachment_download?attachId="+e.id+"&token="+s.settings.token+'" target="_blank">'+e.name+"</a>",AttachmentId:e.id},s.visitor))):h("sendAttachment")},h("sendAttachment"))},e.$on("$destroy",function(){n.cancel(m),n.cancel(g),g=m=null}),s.$on("$download",function(e,t){t&&t(_.values(s.messages))});function f(){s.settings.online?o.go("app.online",null,{location:"replace"}):o.go("app.offline",null,{location:"replace"})}function v(){s.visitor&&s.visitor.interaction&&s.visitor.interaction.id&&r.chatInteraction.get({id:s.visitor.interaction.id}).$promise.then(function(e){delete p.errors.getInteraction,e.closed&&(s.visitor.interaction.closed=!0,s.updateStorage(l,s.visitor),"unmanaged"===e.disposition?o.go("app.unmanaged",null,{location:"replace"}):o.go("app.closing",null,{location:"replace"}))}).catch(function(e){switch(e.status){case 403:o.go("app.closing",null,{location:"replace"});break;case 404:s.updateStorage(l,null,!0),s.updateStorage(c,null,!0),f();break;case 405:o.go("app.unmanaged",null,{location:"replace"});break;default:console.error(e)}})}function h(t){return function(e){p.errors[t]=e.data,w()}}function x(e){var t=d[0].emojioneArea.getText();e&&13===e.keyCode&&e.shiftKey||e&&13!==e.keyCode||""!==t&&b(_.merge({body:t},s.visitor))}function b(e){r.chatWebsite.notify(e).$promise.then(function(e){delete p.errors.chatMessageError,_.isNil(s.visitor.interaction)&&(s.visitor.interaction={id:e.interaction.id},s.updateStorage(l,s.visitor)),d[0].emojioneArea.setText(""),w()}).catch(h("chatMessageError"))}function y(){s.visitor&&s.visitor.interaction&&s.visitor.interaction.id&&r.chatInteraction.getMessages({intid:s.visitor.interaction.id,includeAgent:!0,id:u||void 0}).$promise.then(function(e){if(delete p.errors.interaction,e.count){for(var t=0,n=!1;t<e.rows.length;t++){var i=_.find(s.messages,{id:e.rows[t].id});i?e.rows[t].read&&(i.read=!0):(n=!0,s.messages.push(e.rows[t])),"out"!==e.rows[t].direction||e.rows[t].read||(o=e.rows[t].id,r.chatMessage.update({id:o,read:!0}).$promise.catch(function(e){console.error(e)}))}n&&w(),e.rows[t-1].read&&(u=e.rows[t-1].id)}var o}).catch(function(e){switch(e.status){case 403:o.go("app.closing",null,{location:"replace"});break;case 405:o.go("app.unmanaged",null,{location:"replace"});break;default:console.error(e)}})}function w(){t(function(){var e=i[0].getElementsByClassName("chat-messages")[0];e&&(e.scrollTop=e.scrollHeight)})}}e.$inject=["$scope","$rootScope","$timeout","$interval","$document","$state","$http","api","STORAGE_VISITOR","STORAGE_LAYOUT"],angular.module("motion").controller("ChatController",e)}(),function(){"use strict";function e(i,e,o,t,n,s){var a=this;function r(){i.settings.online?e.go("app.online",null,{location:"replace"}):e.go("app.offline",null,{location:"replace"})}function l(){a.form={},a.upColor=null,a.downColor=null,a.userForm.$setPristine(),a.userForm.$setUntouched(),delete i.visitor.interaction,i.enableDownload=!1}function c(n){return function(e){a.errors[n]=e.data;var t=o.simple().textContent(i.settings.formSubmitFailureMessage||"Form submission error").toastClass("md-failure-toast").position("top");o.show(t)}}function d(){i.loading=!1}a.$onInit=function(){i.status="closing",i.updateStorage(n,null,!0),i.updateStorage(s,null,!0),i.loading=!1},a.submit=function(){i.loading=!0,i.visitor.interaction&&i.visitor.interaction.id?t.chatInteraction.close(_.merge({id:i.visitor.interaction.id,ratingType:i.settings.ratingType,customer:i.settings.customerAlias||i.visitor.from},a.form)).$promise.then(function(){delete a.errors.submit;var e=o.simple().textContent(i.settings.formSubmitSuccessMessage||"Form properly submitted").toastClass("md-success-toast").parent(angular.element(document.querySelector("#chat-toolbar")));o.show(e)}).then(l).then(r).catch(c("submit")).finally(d):(d(),c("submit"))},a.skip=function(){l(),r()},a.form={},a.errors={}}e.$inject=["$rootScope","$state","$mdToast","api","STORAGE_VISITOR","STORAGE_LAYOUT"],angular.module("motion").controller("ClosingController",e)}(),function(){"use strict";function e(l,c,d,n,i,m,o,g,u){var e=this;l.location=l.settings.location,e.$onInit=function(){l.status="init";var e=!1,t=m.get(u)||{},n=m.get(g)||{};l.visitor=t[l.location]?t[l.location]:{},l.layout=n[l.location]?n[l.location]:{},l.visitor.interaction&&l.layout.up?e=!0:l.layout.up=!1;v(e),d.go((i=l.settings.online,o=!!(l.visitor&&l.visitor.interaction&&l.visitor.interaction.id),s=Number(l.settings.maxInteractions)&&Number(l.settings.openedInteractions)>=Number(l.settings.maxInteractions),o||!s&&i?"app.online":"app.offline"),null,{location:"replace"});var i,o,s;var a="";a=l.settings.online||!l.settings.hideWhenOffline?"init":"offline";c.parent.postMessage({cmd:a,div_color:l.settings.color,text_color:l.settings.textColor,client_height:Math.max(document.documentElement.clientHeight,window.innerHeight||0),client_width:document.documentElement.clientWidth},"*");var r=document.createElement("style");document.head.appendChild(r),r.sheet.insertRule(".mdi-send:before {color:"+l.settings.color+"!important}"),window.visualViewport&&window.visualViewport.addEventListener("resize",function(e){if(document.getElementById("chatContent1")){var t=p();f(t)}})},e.close=function(){var e=l.visitor.interaction;if(e&&e.id){var t=n.confirm().parent(angular.element(document.querySelector("#chat-app"))).clickOutsideToClose(!0).title(l.settings.closingQuestion||"Do you want to close the interaction?").ok("Ok").cancel("Cancel");n.show(t).then(function(){return o.chatInteraction.customUpdate({id:e.id,closed:!0,closeReason:"contact",closedAt:moment().format("YYYY-MM-DD HH:mm:ss")}).$promise}).then(function(){d.go("app.closing",null,{location:"replace"})}).catch(function(e){console.error("keep open",e)})}},e.toggle=v,e.download=function(e){var t=i.defer(),n=l.visitor.interaction;n&&n.id&&o.chatInteraction.getMessages({intid:n.id,includeAll:!0}).$promise.then(function(e){t.resolve(_.map(e.rows.slice(1),function(e){var t;if("in"===e.direction&&(t=l.settings.customerAlias||l.visitor.from||"Visitor"+e.ContactId),"out"===e.direction)switch(l.settings.agentIdentifier){case"website_alias":t=e.UserId?l.settings.agentAlias+e.UserId:"System";break;case"agent_alias":t=e.UserId?e.User.alias||e.User.fullname:"System";break;case"agent_fullname":t=e.UserId?e.User.fullname:"System";break;default:t=e.UserId?l.settings.agentAlias+e.UserId:"System"}return{sender:t,message:e.body,createdAt:moment(e.createdAt).format("MM/DD/YYYY HH:mm:ss")}}))}).catch(function(e){console.error(e)});return t.promise},e.getHeaderShape=function(){return"rounded"===l.settings.header_shape?"15px":"0px"},l.updateStorage=a;var s=0;function p(){var e=Math.max(document.body.clientHeight,window.innerHeight||0),t=e/100*s+450;if(e<t)var n=450-(t-e);else n=450;return n}function f(e){240<e?(void 0!==document.getElementById("chat-app")&&(document.getElementById("chat-app").style.height=e+"px"),void 0!==document.getElementById("chatContent1")&&(document.getElementById("chatContent1").style.height=e-108+"px"),void 0!==document.getElementById("id-row")&&(document.getElementById("id-row").style.height=e-52+"px"),void 0!==document.getElementById("chat-app")&&(document.getElementById("chat-app").style.top=s+"%")):(void 0!==document.getElementById("chat-app")&&(document.getElementById("chat-app").style.height="190px"),void 0!==document.getElementById("chatContent1")&&(document.getElementById("chatContent1").style.height="134px"),void 0!==document.getElementById("id-row")&&(document.getElementById("id-row").style.height="190px"),void 0!==document.getElementById("chat-app")&&(document.getElementById("chat-app").style.top="calc(100% - 240px)"))}function a(e,t,n){var i=m.get(e)||{};n?delete i[l.location]:i[l.location]=t,m.set(e,i)}function v(e){var t;l.layout.up=e,a(g,l.layout),t=e?"show":"hide",c.parent.postMessage({cmd:t},"*")}window.addEventListener("message",function(e){"show"==e.data.evt?v(!0):"hide"==e.data.evt&&v(!1)},!1),window.addEventListener("resize",function(e){document.getElementById("chatContent1")&&document.getElementById("chat-app")&&document.getElementById("id-row")&&f(p())}),window.visualViewport&&window.visualViewport.addEventListener("resize",function(e){document.getElementById("chatContent1")&&document.getElementById("chat-app")&&document.getElementById("id-row")&&f(p())})}e.$inject=["$rootScope","$window","$state","$mdDialog","$q","localStorageService","api","STORAGE_LAYOUT","STORAGE_VISITOR"],angular.module("motion").config(["$mdGestureProvider",function(e){e.skipClickHijack()}]).controller("IndexController",e)}(),function(){"use strict";function e(e,t){var n={baseUrl:e.settings.remote+"/api/"},i={id:"@id",token:e.settings.token};return n.chatWebsite=t(n.baseUrl+"chat/websites/:id",i,{notify:{method:"POST",url:n.baseUrl+"chat/websites/:id/notify"},offline:{method:"POST",url:n.baseUrl+"chat/websites/:id/offline"},getFields:{method:"GET",url:n.baseUrl+"chat/websites/:id/fields"}}),n.chatInteraction=t(n.baseUrl+"chat/interactions/:id",i,{update:{method:"PUT",url:n.baseUrl+"chat/interactions/:id"},customUpdate:{method:"PUT",url:n.baseUrl+"chat/interactions/:id/custom_update"},close:{method:"PUT",url:n.baseUrl+"chat/interactions/:id/close"},getMessages:{method:"GET",url:n.baseUrl+"chat/interactions/:intid/my_messages"},uploadAttachment:{method:"POST",url:n.baseUrl+"chat/interactions/:id/attachment_upload",headers:{"Content-Type":void 0},transformRequest:angular.identity},downloadAttachment:{method:"GET",url:n.baseUrl+"chat/interactions/:id/attachment_download"}}),n.chatMessage=t(n.baseUrl+"chat/messages/:id",i,{update:{method:"PUT",url:n.baseUrl+"chat/messages/:id"}}),n}e.$inject=["$rootScope","$resource"],angular.module("motion").factory("api",e)}(),function(){"use strict";function e(n,e){var t=e.search();n.settings={cursor:"pointer",hide:!0},_.forIn(t,function(e,t){""===e||_.isNil(e)||("true"===e&&(e=!0),"false"===e&&(e=!1),n.settings[t]=e)})}function t(e,t,n,i,o,s){n.html5Mode(!0),i.defaults.headers.get||(i.defaults.headers.get={}),i.defaults.headers.get["If-Modified-Since"]="Mon, 26 Jul 1997 05:00:00 GMT",i.defaults.headers.get["Cache-Control"]="no-cache",i.defaults.headers.get.Pragma="no-cache",o.setPrefix(s),e.state("app",{url:"/app",abstract:!0}).state("app.waiting",{url:"/waiting",templateUrl:"app/waiting/index.html",controller:"WaitingController as vm"}).state("app.online",{url:"/online",templateUrl:"app/online/index.html",controller:"OnlineController as vm"}).state("app.offline",{url:"/offline",templateUrl:"app/offline/index.html",controller:"OfflineController as vm"}).state("app.chat",{url:"/chat",templateUrl:"app/chat/index.html",controller:"ChatController as vm"}).state("app.unmanaged",{url:"/unmanaged",templateUrl:"app/unmanaged/index.html",controller:"UnmanagedController as vm"}).state("app.closing",{url:"/closing",templateUrl:"app/closing/index.html",controller:"ClosingController as vm"})}e.$inject=["$rootScope","$location"],t.$inject=["$stateProvider","$urlRouterProvider","$locationProvider","$httpProvider","localStorageServiceProvider","STORAGE_PREFIX"],angular.module("motion").config(t).run(e)}(),function(){"use strict";function e(i,o,s){var a=this,r=null;function l(){i.loading=!1}a.$onInit=function(){i.status="offline",a.visitor={id:i.settings.id,mapKeyOffline:"firstName",from:"Anonymous"+_.random(1,1e6)},i.settings.showMenu=!1,i.loading=!1,o.chatWebsite.getFields({id:i.settings.id,online:!1}).$promise.then(function(e){e.count&&(r=e.fromKey,a.fields=e.rows)}).then(function(){for(var e=0;e<a.fields.length;e++){var t=a.fields[e];if(t.props.helpText){var n=RegExp.prototype.test.bind(/(<([^>]+)>)/i);a.checkHTML[e]=n(t.props.helpText)}}}).catch(function(e){console.error(e)})},a.submit=function(){i.loading=!0;for(var e=0;e<a.fields.length;e++){var t=a.fields[e];t.props&&a.form.hasOwnProperty(t.props.title)&&(_.isNil(t.cmField)||(a.visitor[t.cmField]=_.isArray(a.form[t.props.title])?a.form[t.props.title].join():a.form[t.props.title]),e===r&&(_.isNil(i.settings.mapKeyOffline)||(a.visitor.mapKeyOffline=i.settings.mapKeyOffline,a.visitor.from=_.isArray(a.form[t.props.title])?a.form[t.props.title].join():a.form[t.props.title])))}o.chatWebsite.offline(_.merge({body:a.form},a.visitor)).$promise.then(function(){delete a.errors.submit,i.$emit("hide"),a.form={},a.userForm.$setPristine(),a.userForm.$setUntouched();var e=s.simple().textContent(i.settings.formSubmitSuccessMessage||"Form properly submitted").toastClass("md-success-toast").parent(angular.element(document.querySelector("#chat-toolbar")));s.show(e)}).catch((n="submit",function(e){var t=s.simple().textContent(i.settings.formSubmitFailureMessage||"Form submission error").toastClass("md-failure-toast").parent(angular.element(document.querySelector("#chat-toolbar")));s.show(t),a.errors[n]=e.data})).finally(l);var n},a.toggle=function(e,t){a.form[e]||(a.form[e]=[]);var n=a.form[e].indexOf(t);-1<n?a.form[e].splice(n,1):a.form[e].push(t)},a.exists=function(e,t){a.form[e]||(a.form[e]=[]);return-1<a.form[e].indexOf(t)},a.checkHTML=[],a.form={},a.errors={},a.userForm={}}e.$inject=["$rootScope","api","$mdToast"],angular.module("motion").controller("OfflineController",e)}(),function(){"use strict";function e(o,s,a,r){var l=this,c=null;l.checkHTML=[],l.$onInit=function(){o.status="online",o.visitor&&o.visitor.interaction?o.visitor.interaction.id?s.go("app.chat",null,{location:"replace"}):s.go("app.waiting",null,{location:"replace"}):(o.visitor={id:o.settings.id,mapKey:"firstName",from:"Anonymous"+_.random(1,1e6)},o.settings.showMenu=!1,o.updateStorage(r,o.visitor),a.chatWebsite.getFields({id:o.settings.id,online:!0}).$promise.then(function(e){e.count&&(c=e.fromKey,l.fields=e.rows)}).then(function(){for(var e=0;e<l.fields.length;e++){var t=l.fields[e];if(t.props.helpText){var n=RegExp.prototype.test.bind(/(<([^>]+)>)/i);l.checkHTML[e]=n(t.props.helpText)}}}).catch(function(e){console.error(e)}))},l.submit=function(){for(var e="",t=0;t<l.fields.length;t++){var n=l.fields[t];n.props&&l.form.hasOwnProperty(n.props.title)&&(_.isNil(n.variable)||(o.visitor[n.variable]=_.isArray(l.form[n.props.title])?l.form[n.props.title].join():l.form[n.props.title]),_.isNil(n.cmField)||(o.visitor[n.cmField]=_.isArray(l.form[n.props.title])?l.form[n.props.title].join():l.form[n.props.title]),t===c&&(_.isNil(o.settings.mapKey)||(o.visitor.mapKey=o.settings.mapKey,o.visitor.from=_.isArray(l.form[n.props.title])?l.form[n.props.title].join():l.form[n.props.title])),e+=n.props.title+": "+l.form[n.props.title]+"\n")}i=_.merge({body:e,referer:o.settings.referer,customerIp:o.settings.customerIp},o.visitor),l.disableItem=!0,a.chatWebsite.notify(i).$promise.then(function(e){delete l.errors.chatMessageError,o.visitor.message={id:e.message.id},o.visitor.interaction={id:e.interaction.id},o.updateStorage(r,o.visitor),l.disableItem=!1,o.settings.enableCustomerWriting?s.go("app.chat",null,{location:"replace"}):s.go("app.waiting",null,{location:"replace"})}).catch(function(e){l.disableItem=!1,console.error(e)});var i},l.toggle=function(e,t){l.form[e]||(l.form[e]=[]);var n=l.form[e].indexOf(t);-1<n?l.form[e].splice(n,1):l.form[e].push(t)},l.exists=function(e,t){l.form[e]||(l.form[e]=[]);return-1<l.form[e].indexOf(t)},l.form={},l.errors={},l.userForm={},l.disableItem=!1}e.$inject=["$rootScope","$state","api","STORAGE_VISITOR"],angular.module("motion").config(["$mdGestureProvider",function(e){e.skipClickHijack()}]).controller("OnlineController",e)}(),function(){"use strict";function e(i,e,o,t,n,s){var a=this;function r(){i.settings.online?e.go("app.online",null,{location:"replace"}):e.go("app.offline",null,{location:"replace"})}function l(){a.form={},a.upColor=null,a.downColor=null,a.userForm.$setPristine(),a.userForm.$setUntouched(),i.visitor={},i.enableDownload=!1,i.$emit("hide")}function c(n){return function(e){a.errors[n]=e.data;var t=o.simple().textContent(i.settings.formSubmitFailureMessage||"Form submission error").toastClass("md-failure-toast").parent(angular.element(document.querySelector("#chat-toolbar")));o.show(t)}}function d(){i.loading=!1}a.form={},a.errors={},a.$onInit=function(){i.status="unmanaged",i.updateStorage(n,null,!0),i.updateStorage(s,null,!0),i.loading=!1},a.submit=function(){i.loading=!0,i.visitor.interaction&&i.visitor.interaction.id?t.chatInteraction.customUpdate({id:i.visitor.interaction.id,note:a.form.note}).$promise.then(function(){delete a.errors.submit;var e=o.simple().textContent(i.settings.formSubmitSuccessMessage||"Form properly submitted").toastClass("md-success-toast").parent(angular.element(document.querySelector("#chat-toolbar")));o.show(e)}).then(l).then(r).catch(c("submit")).finally(d):(d(),c("submit"))},a.skip=function(){l(),r()}}e.$inject=["$rootScope","$state","$mdToast","api","STORAGE_VISITOR","STORAGE_LAYOUT"],angular.module("motion").controller("UnmanagedController",e)}(),function(){"use strict";function e(i,e,t,o,n,s,a,r){var l,c=!1;this.$onInit=function(){i.status="waiting",i.visitor&&i.visitor.interaction&&i.visitor.interaction.id&&(l=t(d,3e3))};function d(){var t={},n=!1;s.chatInteraction.get({id:i.visitor.interaction.id}).$promise.then(function(e){return t=e,s.chatInteraction.getMessages({intid:i.visitor.interaction.id}).$promise}).then(function(e){n=1<e.rows.length,t.closed?(i.visitor.interaction.closed=!0,i.updateStorage(a,i.visitor),"unmanaged"===t.disposition&&o.go("app.unmanaged",null,{location:"replace"})):t.UserId?(i.visitor.interaction.UserId=t.UserId,i.updateStorage(a,i.visitor),o.go("app.chat",null,{location:"replace"})):n&&o.go("app.chat",null,{location:"replace"})}).catch(function(e){switch(e.status){case 403:o.go("app.closing",null,{location:"replace"});break;case 405:o.go("app.unmanaged",null,{location:"replace"});break;default:console.error(e)}})}function m(){if(i.visitor&&i.visitor.interaction&&i.visitor.interaction.id&&!c){c=!0;var e=new XMLHttpRequest;e.open("PUT",i.settings.remote+"/api/chat/interactions/"+i.visitor.interaction.id+"/abandon?token="+i.settings.token,!1),e.setRequestHeader("Content-type","application/json; charset=utf-8"),e.send(JSON.stringify({channel:"chat",interaction:{id:i.visitor.interaction.id},message:{id:i.visitor.message.id},disposition:"abandoned",closed:!0,closeReason:"contact",closedAt:moment().format("YYYY-MM-DD HH:mm:ss")})),4===e.readyState&&200===e.status&&(i.updateStorage(a,null,!0),i.updateStorage(r,null,!0))}}e.$on("$destroy",function(){n.removeEventListener("beforeunload",m),n.removeEventListener("unload",m),t.cancel(l)}),n.addEventListener("beforeunload",m),n.addEventListener("unload",m)}e.$inject=["$rootScope","$scope","$interval","$state","$window","api","STORAGE_VISITOR","STORAGE_LAYOUT"],angular.module("motion").controller("WaitingController",e)}(),angular.module("motion").run(["$templateCache",function(e){"use strict";e.put("app/chat/index.html",'\x3c!-- CHAT CONTENT --\x3e\n<md-content id="chatContent1" class="chat-messages" ng-style="{\'background-color\': \'{{settings.backgroundColor}}\'}">\n  <div layout="row" ng-if="!$first" ng-repeat="(key, message) in messages track by $index"\n    class="md-padding message-row" ng-style="{\'font-size\': \'{{settings.messageFontSize}}px\'}"\n    ng-class="{\'in\':( message.direction === \'in\' && settings.messagesAlignment === \'alternate\'), \'in2\': ( message.direction === \'in\' && settings.messagesAlignment === \'centered\'), \'out\': message.direction === \'out\' && message.UserId, \'auto\': message.direction === \'out\' && !message.UserId}">\n    <img ng-if="message.direction ===\'out\' && !message.UserId"\n      ng-src="{{settings.remote}}/api/chat/websites/{{settings.id}}/system_avatar?token={{settings.token}}"\n      class="avatar" alt="system" />\n    <img ng-if="message.direction ===\'out\' && message.UserId"\n      ng-src="{{settings.remote}}/api/{{settings.showAgentAvatar ? \'users/\' + visitor.interaction.UserId + \'/avatar\' : \'chat/websites/\' + settings.id + \'/avatar\'}}?token={{settings.token}}"\n      class="avatar" alt="agent" />\n    <img ng-if="message.direction ===\'in\'"\n      ng-src="{{settings.remote}}/api/chat/websites/{{settings.id}}/customer_avatar?token={{settings.token}}"\n      class="avatar" alt="customer" />\n\n    <div class="bubble">\n      <div layout="row" layout-align="end center">\n        <div class="time secondary-text" ng-switch="settings.agentIdentifier">\n          <span ng-switch-when="website_alias">\n            {{message.direction === \'out\' ? (message.UserId ? (settings.agentAlias + message.UserId) : settings.systemAlias) : (settings.customerAlias || visitor.from || \'Visitor\' + message.ContactId)}}\n            - {{message.createdAt | date : \'h:mm\'}}\n          </span>\n          <span ng-switch-when="agent_alias">\n            {{message.direction === \'out\' ? (message.UserId ? (message.User.alias || message.User.fullname) : settings.systemAlias) : (settings.customerAlias || visitor.from || \'Visitor\' + message.ContactId)}}\n            - {{message.createdAt | date : \'h:mm\'}}\n          </span>\n          <span ng-switch-when="agent_fullname">\n            {{message.direction === \'out\' ? (message.UserId ? message.User.fullname : settings.systemAlias) : (settings.customerAlias || visitor.from || \'Visitor\' + message.ContactId)}}\n            - {{message.createdAt | date : \'h:mm\'}}\n          </span>\n          <span ng-switch-default>\n            {{message.direction === \'out\' ? (message.UserId ? ((settings.agentAlias || \'Agent\') + message.UserId) : settings.systemAlias) : (settings.customerAlias || visitor.from || \'Visitor\' + message.ContactId)}}\n            - {{message.createdAt | date : \'h:mm\'}}\n          </span>\n        </div>\n        <div style="padding-left: 5px;" ng-if="message.direction === \'in\' && settings.enableCustomerCheckmarks">\n          <i ng-if="!message.read" class="mdi mdi-18px mdi-check" style="color: grey"></i>\n          <i ng-if="message.read" class="mdi mdi-18px mdi-check-all" style="color: #34b7f1"></i>\n        </div>\n      </div>\n      <div\n        ng-class="{\'in\': message.direction === \'in\', \'out\': message.direction ===\'out\' && message.UserId, \'auto\': message.direction ===\'out\' && !message.UserId}">\n        <div ng-if="message.AttachmentId" ng-bind-html="message.body" class="message"></div>\n        <div ng-if="!message.AttachmentId" ng-bind-html="message.body | embed:vm.emojiOptions" class="message"></div>\n      </div>\n    </div>\n  </div>\n\n  \x3c!-- CHAT ERROR --\x3e\n  <div class="chat-error" ng-repeat="error in vm.errors" layout="row" layout-align="center end" layout-margin>\n    <i class="mdi mdi-alert mdi-24px mdi-light"></i>\n    <md-tooltip md-direction="top">{{error.message || \'Service temporarily unavailable.\'}}</md-tooltip>\n    <span class="chat-error-message">{{error.message || \'Service temporarily unavailable.\'}}</span>\n  </div>\n  \x3c!-- CHAT ERROR --\x3e\n</md-content>\n\x3c!-- / CHAT CONTENT --\x3e\n\n\x3c!-- CHAT FOOTER --\x3e\n<div layout="row" layout-align="center center" class="chat-footer md-padding">\n\n  <div id="input_text" layout="row" layout-align="end center">\n    <input id="emojionearea"> </input>\n\n    <md-button id="attachmentButton" ng-if="settings.enableCustomerAttachment" class="md-fab md-mini md-warn"\n      type="button" flow-init flow-btn flow-file-added="vm.fileAdded($file, $event, $flow)">\n      <i class="mdi mdi-attachment mdi-24px mdi-light"></i>\n    </md-button>\n\n  </div>\n\n  <md-button id="sendButton" ng-if="settings.enableSendButton" class="md-fab md-mini md-warn" type="button"\n    ng-click="vm.reply_button($event)">\n    <i id="sendButton_icon" class="mdi mdi-send mdi-24px mdi-light icon_color"></i>\n  </md-button>\n\n</div>\n\x3c!-- / CHAT FOOTER --\x3e'),e.put("app/closing/index.html",'\x3c!-- CHAT CONTENT --\x3e\n<md-content class="chat-online">\n  \x3c!-- CHAT ERROR --\x3e\n  <div class="chat-error" ng-repeat="error in vm.errors" layout="row" layout-margin>\n    <i class="mdi mdi-alert mdi-24px mdi-light"></i>\n    <md-tooltip md-direction="top">{{error.message || \'Service temporarily unavailable.\'}}</md-tooltip>\n    <span class="chat-error-message">{{error.message || \'Service temporarily unavailable.\'}}</span>\n  </div>\n  \x3c!-- CHAT ERROR --\x3e\n\n  <md-content layout="row" layout-align="center end">\n    <span ng-bind-html = "settings.closingMessage | toTrusted" ng-style="{\'font-size\': \'{{settings.fontSize}}px\'}"></span>\n  </md-content>\n\n  <form name="vm.userForm" layout="column" ng-style="{\'font-size\': \'{{settings.fontSize}}px\'}" novalidate>\n    <md-input-container ng-if="settings.enableRating" ng-switch="settings.ratingType" class="md-block" style="margin: 0px; padding: 10px 0px 5px 0px;" md-no-float>\n     \n      \x3c!-- START thumb rating --\x3e\n      <md-radio-group name="ratingValue" ng-switch-when="thumb" ng-model="vm.form.ratingValue" ng-change="vm.upColor = vm.form.ratingValue ? \'green\' : null; vm.downColor = !vm.form.ratingValue ? \'red\' : null;" layout="row" layout-align="center center">\n        <md-radio-button ng-value="1" class="thumb">\n          <div class="{{vm.upColor}}">\n            <i class="mdi mdi-48px mdi-thumb-up-outline"></i>\n          </div>\n        </md-radio-button>\n        <md-radio-button ng-value="0" class="thumb">\n          <div class="{{vm.downColor}}">\n            <i class="mdi mdi-48px mdi-thumb-down-outline"></i>\n          </div>\n        </md-radio-button>\n      </md-radio-group>\n      \x3c!-- END thumb rating --\x3e\n\n      \x3c!-- START star rating --\x3e\n      <div ng-switch-when="star" layout="row" layout-align="center center">\n        <ng-rate-it name="ratingValue" ng-model="vm.form.ratingValue" min="0" max="settings.ratingStarsNumber" step="1" resetable="false"></ng-rate-it>\n      </div>\n      \x3c!-- END star rating --\x3e\n    </md-input-container>\n\n    <md-input-container ng-if="settings.enableFeedback" class="md-block" style="margin: 0px; padding: 0px 0px 10px 0px;" md-no-float>\n      \x3c!-- START textarea --\x3e\n      <span style="padding: 5px 0px 5px 0px;"><br><br><br>{{settings.feedbackTitle}}</span>\n      <textarea name="message" ng-model="vm.form.ratingMessage" md-maxlength="150" rows="3"></textarea>\n      \x3c!-- END textarea --\x3e\n    </md-input-container>\n\n    <md-input-container ng-if="settings.forwardTranscript" class="md-block" style="margin: 0px; padding: 0px 0px 10px 0px;" md-no-float>\n      <span ng-if="settings.forwardTranscriptMessage" style="padding: 5px 0px 5px 0px;">{{settings.forwardTranscriptMessage}}</span>\n      <span ng-if="!settings.forwardTranscriptMessage" style="padding: 5px 0px 5px 0px;">Email</span>\n      \x3c!-- START email --\x3e\n      <input type="email" name="mailTranscript" ng-model="vm.form.mailTranscript" placeholder="email">\n      <div ng-messages="vm.userForm[\'mailTranscript\'].$error" ng-show="vm.userForm[\'mailTranscript\'].$touched" role="alert">\n        <div ng-message="email">\n            <span>Email must be a valid e-mail address</span>\n        </div>\n      </div>\n      \x3c!-- END email --\x3e\n    </md-input-container>\n\n    <div layout="row" layout-align="center center">\n      <md-button title="{{settings.closingMessageButton}}" class="md-raised" ng-if="settings.enableRating || settings.enableFeedback || settings.forwardTranscript" ng-click="vm.submit()" ng-disabled="vm.userForm.$invalid || loading" ng-style="{\'background-color\': \'{{settings.color_button}}\', \'color\': \'{{settings.textColor}}\'}">\n        {{settings.closingMessageButton}}\n      </md-button>\n      <md-button title="{{settings.skipMessageButton}}"class="md-raised" ng-style="{\'background-color\': \'{{settings.color_button}}\', \'color\': \'{{settings.textColor}}\'}" ng-click="vm.skip()">\n        {{settings.skipMessageButton}}\n      </md-button>\n    </div>\n  </form>\n\n  <md-content layout="row" layout-align="center end">\n    <span ng-bind-html = "(settings.custom && !settings.defaultWhiteLabel) ? settings.whiteLabel : \'Powered By XCALLY\' | toTrusted" ng-style="{\'font-size\': \'{{settings.fontSize}}px\'}"></span>\n  </md-content>\n\n</md-content>\n\x3c!-- / CHAT CONTENT --\x3e\n'),e.put("app/offline/index.html",'\x3c!-- CHAT CONTENT --\x3e\n<md-content class="chat-online">\n\n  <div id="toaster"></div>\n\n  <form ng-if="vm.fields.length" name="vm.userForm" layout="column" ng-style="{\'font-size\': \'{{settings.fontSize}}px\'}" novalidate>\n    <div ng-repeat="field in ::vm.fields | orderBy:\'index\'" layout="column">\n      <span>{{field.props.title + (field.config.required ? \'*\' : \'\')}}</span>\n\n      <span style="font-size: 13px; line-height: 14px; color: grey; padding: 5px 0px 5px 0px;">\n        <div ng-if="vm.checkHTML[$index]" ng-bind-html="field.props.helpText"></div>\n        <div ng-if="!vm.checkHTML[$index]" ng-bind-html="field.props.helpText | embed:{linkTarget:\'_blank\'}"></div>\n      </span>\n\n      \x3c!-- CHAT ERROR --\x3e\n      <div class="chat-error" ng-repeat="error in vm.errors" layout="row" layout-margin>\n        <i class="mdi mdi-alert mdi-24px mdi-light"></i>\n        <md-tooltip md-direction="top">{{error.message || \'Service temporarily unavailable.\'}}</md-tooltip>\n        <span class="chat-error-message">{{error.message || \'Service temporarily unavailable.\'}}</span>\n      </div>\n      \x3c!-- CHAT ERROR --\x3e\n\n      <md-input-container md-no-float ng-switch="field.type" style="margin: 0px; padding: 0px 0px 10px 0px;">\n        \x3c!-- START label --\x3e\n        <div ng-switch-when="label">\n          <md-content flex layout-padding layout="row" layout-align="center center">\n            <span>{{field.value}}</span>\n          </md-content>\n        </div>\n        \x3c!-- END label --\x3e\n\n        \x3c!-- START textinput --\x3e\n        <div ng-switch-when="input">\n          <input name="{{field.props.title}}" ng-model="vm.form[field.props.title]" placeholder="{{field.config.placeholder}}" type="{{field.config.type}}" ng-required="field.config.required">\n        </div>\n        \x3c!-- END textinput --\x3e\n\n        \x3c!-- START textarea --\x3e\n        <div ng-switch-when="textarea">\n          <textarea name="{{field.props.title}}" ng-model="vm.form[field.props.title]" placeholder="{{field.config.placeholder}}" md-maxlength="150" rows="3"></textarea>\n        </div>\n        \x3c!-- END textarea --\x3e\n\n        \x3c!-- START select --\x3e\n        <div ng-switch-when="chooseFromList">\n          <md-select name="{{field.props.title}}" ng-model="vm.form[field.props.title]" placeholder="{{field.config.placeholder}}" ng-required="field.config.required">\n            <md-option ng-repeat="option in ::field.options" ng-value="option.value">{{option.value}}</md-option>\n          </md-select>\n        </div>\n        \x3c!-- END select --\x3e\n\n        \x3c!-- START radio --\x3e\n        <div ng-switch-when="multipleChoices" layout="{{field.config.direction === \'vertical\' ? \'row\' : \'column\'}}">\n          <md-radio-group name="{{field.props.title}}" ng-model="vm.form[field.props.title]" ng-required="field.config.required" layout="{{field.config.direction === \'vertical\' ? \'row\' : \'column\'}}">\n            <md-radio-button ng-repeat="option in ::field.options" value="{{option.value}}" class="md-primary">{{option.value}}</md-radio-button>\n          </md-radio-group>\n        </div>\n        \x3c!-- END radio --\x3e\n\n        \x3c!-- START checkbox --\x3e\n        <div ng-switch-when="checkboxes">\n          <div layout="{{field.config.direction === \'vertical\' ? \'row\' : \'column\'}}">\n            <md-checkbox\n            md-no-ink\n            aria-label="{{field.props.title}}"\n            ng-repeat="option in ::field.options"\n            ng-checked="vm.exists(field.props.title, option.value)"\n            ng-disabled="!vm.exists(field.props.title, option.value) && field.config.maxSelections === vm.form[field.props.title].length"\n            ng-click="vm.toggle(field.props.title, option.value)"\n            flex>\n              {{option.value}}\n            </md-checkbox>\n          </div>\n        </div>\n        \x3c!-- END checkbox --\x3e\n\n        \x3c!-- START agreement --\x3e\n        <div ng-switch-when="agreement" layout="column">\n            <md-checkbox md-no-ink ng-model="vm.form[field.props.title]" aria-label="{{field.props.title}}" ng-required="field.config.required">\n              {{field.options[0].value}}\n            </md-checkbox>\n        </div>\n        \x3c!-- END agreement --\x3e\n\n        <div ng-messages="vm.userForm[field.props.title].$error" ng-show="vm.userForm[field.props.title].$touched" role="alert">\n            <div ng-message="required">\n                <span>Required Field</span>\n            </div>\n            <div ng-message="email">\n                <span>Wrong type field</span>\n            </div>\n        </div>\n      </md-input-container>\n    </div>\n\n    <md-button title="{{settings.offline_chat_button}}" ng-click="vm.submit()" class="md-raised" ng-disabled="vm.userForm.$invalid || vm.userForm.$pristine || loading" ng-style="{\'background-color\': \'{{settings.color_button}}\', \'color\': \'{{settings.textColor}}\'}">\n      {{settings.offline_chat_button}}\n    </md-button>\n  </form>\n\n  <md-content layout="row" layout-align="center end">\n    <span ng-bind-html = "(settings.custom && !settings.defaultWhiteLabel) ? settings.whiteLabel : \'Powered By XCALLY\' | toTrusted" ng-style="{\'font-size\': \'{{settings.fontSize}}px\'}"></span>\n  </md-content>\n</md-content>\n\x3c!-- / CHAT CONTENT --\x3e\n'),e.put("app/online/index.html",'\x3c!-- CHAT CONTENT --\x3e\n<md-content class="chat-online">\n  <form ng-if="vm.fields.length" name="vm.userForm" layout="column" ng-style="{\'font-size\': \'{{settings.fontSize}}px\'}" novalidate>\n    <div ng-repeat="field in ::vm.fields | orderBy:\'index\'" layout="column">\n      <span>{{field.props.title + (field.config.required ? \'*\' : \'\')}}</span>\n\n      <span style="line-height: 14px; color: grey; padding: 5px 0px 5px 0px;" >\n        <div ng-if="vm.checkHTML[$index]" ng-bind-html="field.props.helpText"></div>\n        <div ng-if="!vm.checkHTML[$index]" ng-bind-html="field.props.helpText | embed:{linkTarget:\'_blank\'}"></div>\n      </span>\n\n      \x3c!-- CHAT ERROR --\x3e\n      <div class="chat-error" ng-repeat="error in vm.errors" layout="row" layout-margin>\n        <i class="mdi mdi-alert mdi-24px mdi-light"></i>\n        <md-tooltip md-direction="top">{{error.message || \'Service temporarily unavailable.\'}}</md-tooltip>\n        <span class="chat-error-message">{{error.message || \'Service temporarily unavailable.\'}}</span>\n      </div>\n      \x3c!-- CHAT ERROR --\x3e\n\n      <md-input-container md-no-float ng-switch="field.type" style="margin: 0px; padding: 0px 0px 10px 0px;">\n        \x3c!-- START label --\x3e\n        <div ng-switch-when="label">\n          <md-content flex layout-padding layout="row" layout-align="center center">\n            <span>{{field.value}}</span>\n          </md-content>\n        </div>\n        \x3c!-- END label --\x3e\n\n        \x3c!-- START textinput --\x3e\n        <div ng-switch-when="input">\n          <input name="{{field.props.title}}" ng-model="vm.form[field.props.title]" placeholder="{{field.config.placeholder}}" type="{{field.config.type}}" ng-required="field.config.required">\n        </div>\n        \x3c!-- END textinput --\x3e\n\n        \x3c!-- START textarea --\x3e\n        <div ng-switch-when="textarea">\n          <textarea name="{{field.props.title}}" ng-model="vm.form[field.props.title]" placeholder="{{field.config.placeholder}}" md-maxlength="150" rows="3"></textarea>\n        </div>\n        \x3c!-- END textarea --\x3e\n\n        \x3c!-- START select --\x3e\n        <div ng-switch-when="chooseFromList">\n          <md-select name="{{field.props.title}}" ng-model="vm.form[field.props.title]" placeholder="{{field.config.placeholder}}" ng-required="field.config.required">\n            <md-option ng-repeat="option in ::field.options" ng-value="option.value">{{option.value}}</md-option>\n          </md-select>\n        </div>\n        \x3c!-- END select --\x3e\n\n        \x3c!-- START radio --\x3e\n        <div ng-switch-when="multipleChoices">\n          <md-radio-group md-no-ink name="{{field.props.title}}" ng-model="vm.form[field.props.title]" ng-required="field.config.required" layout="{{field.config.direction === \'vertical\' ? \'row\' : \'column\'}}">\n            <md-radio-button ng-repeat="option in ::field.options" ng-value="option.value" class="md-primary">{{option.value}}</md-radio-button>\n          </md-radio-group>\n        </div>\n        \x3c!-- END radio --\x3e\n\n        \x3c!-- START checkbox --\x3e\n        <div ng-switch-when="checkboxes" layout="{{field.config.direction === \'vertical\' ? \'row\' : \'column\'}}">\n            <md-checkbox\n            md-no-ink\n            aria-label="{{field.props.title}}"\n            ng-repeat="option in ::field.options"\n            ng-checked="vm.exists(field.props.title, option.value)"\n            ng-disabled="!vm.exists(field.props.title, option.value) && field.config.maxSelections === vm.form[field.props.title].length"\n            ng-required="vm.getSelected()"\n            ng-click="vm.toggle(field.props.title, option.value)">\n              {{option.value}}\n            </md-checkbox>\n        </div>\n        \x3c!-- END checkbox --\x3e\n\n        \x3c!-- START agreement --\x3e\n        <div ng-switch-when="agreement" layout="{{field.config.direction === \'vertical\' ? \'row\' : \'column\'}}">\n            <md-checkbox md-no-ink ng-model="vm.form[field.props.title]" aria-label="{{field.props.title}}" ng-required="field.config.required">\n              {{field.options[0].value}}\n            </md-checkbox>\n        </div>\n        \x3c!-- END agreement --\x3e\n\n        <div ng-messages="vm.userForm[field.props.title].$error" ng-show="vm.userForm[field.props.title].$touched" role="alert">\n            <div ng-message="required">\n                <span>Required Field</span>\n            </div>\n            <div ng-message="email">\n                <span>Wrong type field</span>\n            </div>\n        </div>\n      </md-input-container>\n    </div>\n    <md-button title="{{settings.start_chat_button}}" class="md-raised" ng-click="vm.submit()" ng-disabled="vm.userForm.$invalid || vm.userForm.$pristine || vm.disableItem" ng-style="{\'background-color\': \'{{settings.color_button}}\', \'color\': \'{{settings.textColor}}\'}">\n      {{settings.start_chat_button}}\n    </md-button>\n  </form>\n\n  <md-content layout="row" layout-align="center end">\n    <span ng-bind-html = "(settings.custom && !settings.defaultWhiteLabel) ? settings.whiteLabel : \'Powered By XCALLY\' | toTrusted" ng-style="{\'font-size\': \'{{settings.fontSize}}px\'}"></span>\n  </md-content>\n</md-content>\n\x3c!-- / CHAT CONTENT --\x3e\n'),e.put("app/unmanaged/index.html",'\x3c!-- CHAT CONTENT --\x3e\n<md-content class="chat-unmanaged">\n  \x3c!-- CHAT ERROR --\x3e\n  <div class="chat-error" ng-repeat="error in vm.errors" layout="row" layout-margin>\n    <i class="mdi mdi-alert mdi-24px mdi-light"></i>\n    <md-tooltip md-direction="top">{{error.message || \'Service temporarily unavailable.\'}}</md-tooltip>\n    <span class="chat-error-message">{{error.message || \'Service temporarily unavailable.\'}}</span>\n  </div>\n  \x3c!-- CHAT ERROR --\x3e\n\n  <md-content layout="row" layout-margin>\n    <span ng-style="{\'font-size\': \'{{settings.fontSize}}px\'}">{{ settings.unmanagedMessage }}</span>\n  </md-content>\n\n  <form name="vm.userForm" layout="column" layout-margin ng-style="{\'font-size\': \'{{settings.fontSize}}px\'}" novalidate>\n    <span ng-if="settings.enableUnmanagedNote">{{ settings.noteTitle || \'Note\' }}</span>\n\n    <md-input-container ng-if="settings.enableUnmanagedNote" class="md-block" style="margin: 0px; padding: 0px 0px 10px 0px;" md-no-float>\n      \x3c!-- START textarea --\x3e\n      <textarea name="note" ng-model="vm.form.note" md-maxlength="150" rows="3"></textarea>\n      \x3c!-- END textarea --\x3e\n    </md-input-container>\n\n    <div layout="row" layout-align="center center">\n      <md-button title="{{settings.sendUnmanaged}}" ng-if="settings.enableUnmanagedNote" ng-click="vm.submit()" class="md-raised" ng-disabled="vm.userForm.$invalid || loading" ng-style="{\'background-color\': \'{{settings.color_button}}\', \'color\': \'{{settings.textColor}}\'}">\n        {{settings.sendUnmanaged}}\n      </md-button>\n      <md-button title="{{settings.skipUnmanaged}}" class="md-raised" ng-style="{\'background-color\': \'{{settings.color_button}}\', \'color\': \'{{settings.textColor}}\'}" ng-click="vm.skip()">\n        {{settings.skipUnmanaged}}\n      </md-button>\n    </div>\n  </form>\n\n  <md-content layout="row" layout-align="center end">\n    <span ng-bind-html = "(settings.custom && !settings.defaultWhiteLabel) ? settings.whiteLabel : \'Powered By XCALLY\' | toTrusted" ng-style="{\'font-size\': \'{{settings.fontSize}}px\'}"></span>\n  </md-content>\n</md-content>\n\x3c!-- / CHAT CONTENT --\x3e\n'),e.put("app/waiting/index.html",'\x3c!-- WAITING CONTENT --\x3e\n<md-content id="waiting" layout="column" layout-align="center center">\n  <div layout="row" layout-align="center center" class="sk-fading-circle" flex="10">\n    <div class="sk-circle1 sk-circle"></div>\n    <div class="sk-circle2 sk-circle"></div>\n    <div class="sk-circle3 sk-circle"></div>\n    <div class="sk-circle4 sk-circle"></div>\n    <div class="sk-circle5 sk-circle"></div>\n    <div class="sk-circle6 sk-circle"></div>\n    <div class="sk-circle7 sk-circle"></div>\n    <div class="sk-circle8 sk-circle"></div>\n    <div class="sk-circle9 sk-circle"></div>\n    <div class="sk-circle10 sk-circle"></div>\n    <div class="sk-circle11 sk-circle"></div>\n    <div class="sk-circle12 sk-circle"></div>\n  </div>\n  <div layout="row" layout-align="center end" flex>\n    <span ng-style="{\'font-size\': \'{{settings.fontSize}}px\'}">{{settings.waitingTitle}}</span>\n  </div>\n  <div layout="row" layout-align="center start" class="subtitle" flex>\n    <span ng-style="{\'font-size\': \'{{settings.fontSize}}px\'}">{{settings.waitingMessage}}</span>\n  </div>\n</md-content>\n\x3c!-- / WAITING CONTENT --\x3e\n')}]);
\ No newline at end of file