/* Cypress will embed our webpage into aut-iframe. */ var secCHUAPlatformVersion = 'unknown'; if (navigator.userAgentData && navigator.userAgentData.getHighEntropyValues) { navigator.userAgentData.getHighEntropyValues( ['platform', 'platformVersion'], ).then(function(ua) { if (ua && ua.platformVersion) { secCHUAPlatformVersion = ua.platformVersion; } } ); } var cypressIframes = window.top.document.getElementsByClassName("aut-iframe"); var synalio = (function(){ var isHideChatting = 0; var version = "1.12"; var cKey = "_rslgvry"; var isCancelling = false; var design_height_mobile = ''; var design_width_mobile = ''; var design_button_color = ''; var design_text_color2 = ''; var design_sub_color = ''; var design_width = ''; var design_height = ''; var chatbox_zindex = '999999997'; var hide_input = false; hide_input = true; var show_rtchat_survey = false; // var design_close_type = ''; var design_close_type = 'img'; var display_type = 'box'; var isClosedWindowChat = false; var currentPageParams = getUrlParams(window.location.href); var currentPageHasParam = hasParam(currentPageParams); var nonce = ''; var firstClick = false; var cssText = ''; var objectCss = {}; var positionTimeOut = null; var isHideChatBox = false; var isAutoDisplayBanner = false; var isOpenedChat = false; var feedbackBtnFixWidth = '165px'; var display_as_modal = false; var no_minimize_visual = false; var cookie_modal_key = 'as_modal'; var isOffline = false; const threeHourTimestamp = 3 * 3600 * 1000; // for case open link var cookie_modal_key_bk = 'as_modal_bk'; var iframeStylePosition = "left: auto;right: 0px;"; var windowPosition = "right"; var iframeStyle = "z-index:" + chatbox_zindex + ";position:fixed; bottom: 0px;border: 0px;background: none;" + iframeStylePosition; var iframeStyleHeightOpen = "height: " + getWindowHeight() + "px;"; // "height: 550px;"; var iframeStyleWidthClose; var iframeStyleHeightClose = "height: 52px;"; var iframeStyleWidthOpen = "width: " + getWindowWidth() + "px;"; var iframeStyleHeightImgClose; var position_close_box = '0px'; var userState; var autoOpenTime = 0; var isMobile = false; var isTabLetOrMobile = false; var isFullScreen = false; var isLogMessage = false; var animationEndEvent = whichAnimationEndEvent(); var transitionEndEvent = whichTransitionEndEvent(); var closeImageLoaded = false; var closeImageWidth; var closeImageHeight; var closeImageBadgeHeight = 25; // 25 is spacing for displaying badge number var closeImageMinimizeHeight = 15; // 15 is spacing for close visual icon var initFooterHeight; var loadingInterval = 1000; var appid = "cd84fffe28904a0fb8c35d2a203d17c4"; var is_sent_init = false; var is_toggled = false; var keyPressMode = 1; var textAreaHeight = 60; var socket; var logs = []; var richMenu = null; var richMenuInit = false; var headerText = ""; var characterImage = "https://d2ixvq6dqmuoso.cloudfront.net/d7e6acf/static/img/chat/chatbot_no_character.png"; var unread_ids = []; var windowElement; var windowToggled; var synalioDocument; var synalioParentDocument; var synalioParentWindow; var header; var body; var bodyInner; var bodyOuter; var bodyDefaultWidth = 341; // from synalio.css var bodyDefaultHeight = 347; // from synalio.css var widthDelta; var footer; var rowSize; var toggleStatus = -1; var xhrs; var xhr; var xhr_page; var xhr_state; var isHttpLoadingStarted; var httpLoadingTimer; var reservation; var reservation_autoreplies = []; var countInterval = 0; var idInterval = null; var skipReservation = false; var retryCount = 0; var hiddenStyle = ""; var backToHome = "メニューに戻る"; var ext = {}; var json = "None"; var jsonInheritanceParams = "None"; var cookies = (json !== 'None') ? JSON.parse(json.replace(/'/g, '"')) : []; var inheritanceParams = (jsonInheritanceParams !== 'None' && jsonInheritanceParams > '') ? getInheritanceParams(JSON.parse(jsonInheritanceParams.replace(/'/g, '"'))) : []; var needProcessParams = getNeedProcessParams(); var errorCheckbox; var errorCheckboxMessage = "Please check"; var carouselLastId = 0; var scrollBarWidth = 20; var mobileInnerWidth = isFullScreen ? 100 : 89.33333; // % var isSentFinishSignalAtLoading = false; var currentScrollPosition = {}; var isFocusInput = false; ///Action suggestion var isShowSuggestion = false; var delayThreshold = 5000; //3000ms delay threshold to determint when should call api after last key typed. var currentSuggestionLine = -1; var suggestionLength = 0; var lastInputText = null; var actionGroupName = null; ///End Action suggestion var chat_msg_common_tmpl = '
@1
'; var chat_msg_l_tmpl = '
...
@1
'; var chat_msg_l_img_tmpl = '
...
'; var chat_msg_r_tmpl = '
@1
'; var chat_msg_c_tmpl = '
@1
'; var chat_msg_c_img_tmpl = '
'; var chat_reply_wrap = '
@1
'; var chat_loading_tmpl = '
...
'; var chat_msg_f_tmpl = '
...
@1
'; var chat_msg_f_edit_button_tmpl = '
...
@1
'; var chat_cs_form_tmpl = '
...
ご利用ありがとうございます。
よろしければ、今後の改善のため、オペレータに対する評価をお願いいたします。
'; var chat_message_carousel_tmpl = '
<
>
'; var chat_message_carousel_item_tmpl = '
  • @3

    @1

    @2

    @4
  • '; var chat_message_carousel_item_image_tmpl = '
    '; var chat_message_carousel_button_tmpl = '
    @1
    '; var chat_message_rich_menu_button_tmpl = '
    '; var chat_feedback_form_tmpl = '
    '; var chat_suggestion_line_tmpl = '

    @1

    '; var chat_message_markdown_tmpl = '
    ...
    @1
    '; var chat_msg_f_names = []; var btnCharLen = 11; var maxConvNum = 99; var isDemo = 0; var isPublish = 1; var s = ''; var demo_scenario_id = -1; var scenario_id = 0; var canOpenOnReceiveLog = true; var refererUrl = location.href; var cntKey = '_rslgvry_conv_cnt'; var sessionId = ''; var sessionIdChanged = false; var pvNum = 0; var isSafari = /^((?!chrome|android|crios).)*safari/i.test(navigator.userAgent); var naCloseChatOpened = false; var nanalyticsParams = {}; function uuidv4() { var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); return uuid; } function getNeedProcessParams() { var needProcess = {}; if (currentPageHasParam && inheritanceParams.length > 0) { for (pName in currentPageParams) { if (inheritanceParams.indexOf(pName) > -1) { needProcess[pName] = currentPageParams[pName]; } } } return needProcess; } function getInheritanceParams(jsonParams) { params = []; for (var i = 0; i < jsonParams.length; i++) { params.push(jsonParams[i].param); } return params; } function getUrlParams(url) { var params = {}; var parser = document.createElement('a'); parser.href = url; var query = parser.search.substring(1); if (query > '') { var vars = query.split('&'); for (var i = 0; i < vars.length; i++) { if (typeof vars[i] !== undefined && vars[i].indexOf('=') >= 0) { var pair = vars[i].split('='); var param_name = pair[0].replace('amp;', ''); params[param_name] = decodeURIComponent(pair[1]); } } } return params; } function hasParam(objParams) { var hasParam = false; for (key in objParams) { if (objParams.hasOwnProperty(key)) { hasParam = true; break; } } return hasParam; } function updateLinksInHTML(html) { // no pram need process if (needProcessParams.length == 0) { return html; } var regex = /href\s*=\s*(['"])(https?:\/\/.+?)\1/ig; var link; var allLink = []; var allHref = []; while((link = regex.exec(html)) !== null) { if (link > '') { allHref.push(link[0]); allLink.push(link[2]); } } for (var i = 0; i < allLink.length; i++) { var addParamStr = createParamQS(allLink[i], needProcessParams); if (addParamStr > '') { var newLink = allLink[i] + addParamStr; var newHref = allHref[i].replace(allLink[i], newLink); html = html.replace(allHref[i], newHref); } } return html; } function createParamQS(url, needProcessParams) { var addParamStr = ''; var linkParams = getUrlParams(url); var linkHasParam = hasParam(linkParams); if (linkHasParam) { for (addParam in needProcessParams) { if (addParam in linkParams) { continue; } addParamStr = addParamStr + '&' + addParam + '=' + needProcessParams[addParam]; } } else { for (addParam in needProcessParams) { var andConnect = (addParamStr > '') ? '&' : ''; addParamStr = addParamStr + andConnect + addParam + '=' + needProcessParams[addParam]; } if (addParamStr > '') { addParamStr = '?' + addParamStr; } } return decodeURIComponent(addParamStr); } function getOrCreateUserId() { s = isSafari ? localStorage.getItem(cKey) : getCookie(cKey); if (!s) { s = uuidv4(); saveUserId(s); } } function saveUserId(uid) { if (isSafari) { localStorage.setItem(cKey, uid); } else { if (!uid) { setCookie(synalioParentDocument, cKey, '', null, 'Thu, 01 Jan 1970 00:00:00 UTC'); } else { setCookie(synalioParentDocument, cKey, uid); } } } function increaseConvCount() { var convCountStr = isSafari ? localStorage.getItem(cntKey) : getCookie(cntKey); var convCount = parseInt(convCountStr); if (isNaN(convCount)) { convCount = 0; } setConvCount(convCount + 1); } function setConvCount(cnt) { if (isSafari) { localStorage.setItem(cntKey, cnt.toString()); } else { setCookie(synalioParentDocument, cntKey, cnt.toString()); } } function updateNanalyticsParams(params) { var storeSessionId = localStorage.getItem("synalio.nasid"); if (storeSessionId != params.session_id) { sessionIdChanged = true; localStorage.setItem("synalio.nasid", params.session_id); } sessionId = params.session_id || null; pvNum = params.pv_num || 0; var keys = ['site_id', 'user_id', 'browser_width', 'browser_height', 'language', 'session_id', 'session_num', 'session_start_time', 'session_channel_url', 'source', 'medium', 'browser_time', 'url', 'referer_url', 'keyword', 'campaign']; for(var i = 0; i < keys.length; i++) { nanalyticsParams[keys[i]] = params[keys[i]] || ''; } nanalyticsParams['chatbot_talk'] = getCookie(cntKey) || 0; } function htmlToElement(html, isMenu) { var template = document.createElement('template'); html = updateLinksInHTML(html); template.innerHTML = html; if(template.content) { // return template.content.firstChild; return template.content; } else{ if(!isMenu){ return template.firstElementChild; } else { return template; } } } function decodeSystemMarks(text) { text = text.replace(/\[\[c\]\]/g, ",") .replace(/\[\[dq\]\]/g, '"') .replace(/\[\[sq\]\]/g, "'") .replace(/\[\[s\]\]/g, " "); return text; } function decodeMail(text) { if (text.match(/javascript:void\(location.href='mailto:/i)) text = text.replace(/%0A/g, "'+escape('\\r\\n')+'"); return text; } function decorateMessage(tmplType, messageHtml) { return messageHtml; } function initHttpLoading(){ isHttpLoadingStarted = false; if(httpLoadingTimer){ clearTimeout(httpLoadingTimer); httpLoadingTimer = null; } if(!isRtchat()){ httpLoadingTimer = setTimeout(function(){ isHttpLoadingStarted = true; stopLoading(); writeLoading(); scroll(1); }, 2000); } } function sendFinishRtChatSignal() { var msg = 'finish_rtchat'; scroll(1); toggleChatBodyScroll(0); var isButton = true; var isInitMsg = true; var image, mime_type, extraParams; xhr = new XMLHttpRequest(); xhr.onreadystatechange = httpStateChange; xhr.onerror = httpError; xhr.ontimeout = httpError; xhr.open('POST', 'https://synalio.com/api/web'); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send(createParam(msg, isButton, isInitMsg, image, mime_type, extraParams)) setTimeout(function(){ if(!isRtchat()){ toggleChatBodyScroll(1); } }, 500); } function sendMessage(msg, skip_msg, isButton, isInitMsg, image, mime_type, extraParams){ if(!skip_msg) { writeMessage(htmlToElement(decorateMessage('r', chat_msg_r_tmpl).replace(/@1/g, msg.replace(/\r?\n/g, '
    ')))); scroll(1); toggleChatBodyScroll(0); } skipReservation = true; if(reservation){ clearTimeout(reservation); } xhr = new XMLHttpRequest(); xhr.onreadystatechange = httpStateChange; xhr.onerror = httpError; xhr.ontimeout = httpError; xhr.open('POST', 'https://synalio.com/api/web'); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.setRequestHeader('SecCHUAPlatformVersion', secCHUAPlatformVersion); xhr.send(createParam(msg, isButton, isInitMsg, image, mime_type, extraParams)) initHttpLoading(); if(!isRtchat()){ toggleChatBodyScroll(1); } increaseConvCount(); hideActionSuggestion(); } function initData(){ if(!is_sent_init){ is_sent_init = true; sendMessage("メニュー", true, true, true, null, null, {'home': 1}); deleteSubmitForms(); var postData = { 'event_type': 'chat_opened', 'event_data': { 'unique_id': appid, 'user_id': s, 'scenario_id': scenario_id, } }; sendAnalyticsData(postData); } } function openLink(url, target){ if (!url.match(/^https?:\/\//i)) { url = '//' + url; } if (window.synalytics) { url = window.synalytics.getUrl(url); } // if short url if (url.indexOf(s) > -1) { var paramStr = JSON.stringify(needProcessParams); if (paramStr && paramStr != '{}') { var linkHasParam = hasParam(getUrlParams(url)); var connectChar = linkHasParam ? '&' : '?'; url = url + connectChar + 'url_params=' + paramStr; } } else { var addParamStr = createParamQS(url, needProcessParams); url = url + addParamStr; } window.open(url, target); } function sendPageinfo(){ if (skipReservation) { return; } xhr_page = new XMLHttpRequest(); xhr_page.onreadystatechange = receiveReserve; xhr_page.open('POST', 'https://synalio.com/api/web/cd84fffe28904a0fb8c35d2a203d17c4/move_page'); xhr_page.setRequestHeader('Content-Type', 'application/json'); var params = { s: s, title: synalioParentDocument.title, url: location.href }; if(checkDemo() == 1){ params['demo'] = 1; } if (Object.keys(ext).length > 0) { params.ext = ext; } // modal flg params['display_as_modal'] = display_as_modal ? "1" : "0"; if (userState){ params['u_st'] = userState; } xhr_page.send(JSON.stringify(params)); } function sendAnalyticsData(data){ if(checkDemo() != 1){ var xhr = new XMLHttpRequest(); if (data['event_data'] && synalioWindow.Nanalytics) { data['event_data']['session_id'] = sessionId; data['event_data']['pv_num'] = pvNum; data['nanalytics'] = nanalyticsParams; } xhr.open('POST', 'https://synalio.com/api/analytics'); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.send(JSON.stringify(data)); } } var afterGetLogsFunc = function() { setTimeout(function() { if (!isSentFinishSignalAtLoading) { isSentFinishSignalAtLoading = true; sendFinishRtChatSignal(); } }, 1500); }; //re-define afterGetLogsFunc to ignore 'isSentFinishSignalAtLoading' param. function resetAfterGetLogsFunc() { afterGetLogsFunc = function() { setTimeout(function() { sendFinishRtChatSignal(); if (!socket) {openWs();} }, 1500); }; } function getLogs(s, session_id){ synalioDocument = synalioParentDocument.getElementById('synalio-iframe').contentDocument; windowElement = synalioDocument.getElementsByClassName("window-box")[0]; if(demo_scenario_id > 0){ windowElement.style.visibility = "visible"; loadRichMenu(); if (display_as_modal) { synalio.toggle(0); } return; } var isNeed = 'None' != '-1'; if(!isNeed){ return; } xhrs = new XMLHttpRequest(); xhrs.onreadystatechange = receiveLogs; xhrs.open('POST', 'https://synalio.com/api/web/cd84fffe28904a0fb8c35d2a203d17c4/chat_logs'); xhrs.setRequestHeader('Content-Type', 'application/json'); xhrs.setRequestHeader('SecCHUAPlatformVersion', secCHUAPlatformVersion); xhrs.send(JSON.stringify({s:s, session_id: session_id, url: refererUrl})) } function sendReserveMessageInfo(s, state, response, buttons, node, scenario_response){ xhr_state = new XMLHttpRequest(); xhr_state.open('POST', 'https://synalio.com/api/web/cd84fffe28904a0fb8c35d2a203d17c4/auto_message'); xhr_state.setRequestHeader('Content-Type', 'application/json'); var params = {s:s, session_id: sessionId, state:state, response:response, buttons:buttons, node:node, scenario_response:scenario_response}; if(checkDemo() == 1){ params['demo'] = 1; } xhr_state.send(JSON.stringify(params)); } function sendSatisfactionSurvey(params){ xhr_state = new XMLHttpRequest(); xhr_state.open('POST', 'https://synalio.com/api/web/cd84fffe28904a0fb8c35d2a203d17c4/satisfaction_survey'); xhr_state.setRequestHeader('Content-Type', 'application/json'); xhr_state.send(JSON.stringify(params)) } function sendFeedbackResponse(params){ xhr_state = new XMLHttpRequest(); xhr_state.open('POST', 'https://synalio.com/api/web/cd84fffe28904a0fb8c35d2a203d17c4/feedback_response'); xhr_state.setRequestHeader('Content-Type', 'application/json'); xhr_state.send(JSON.stringify(params)) } function sendActionSuggestionRequest(text){ text = text.trim(); if(text != ""){ isShowSuggestion = true; xhr_page = new XMLHttpRequest(); xhr_page.onreadystatechange = receiveActionSuggestion; xhr_page.open('POST', 'https://synalio.com/api/apps/cd84fffe28904a0fb8c35d2a203d17c4/action/suggestion/'); xhr_page.setRequestHeader('Content-Type', 'application/json'); var params = { "q":text, "is_demo":isDemo, "groups": actionGroupName } xhr_page.send(JSON.stringify(params)) }else{ hideActionSuggestion(); } } function sendRtchatSurveyFlagRequest(){ xhr_page = new XMLHttpRequest(); xhr_page.onreadystatechange = receiveRtchatSurveyFlag; xhr_page.open('POST', 'https://synalio.com/api/apps/cd84fffe28904a0fb8c35d2a203d17c4/settings/'); xhr_page.setRequestHeader('Content-Type', 'application/json'); // in future can also check other setting var params = {"setting_type": "rtchat_survey_flag"}; xhr_page.send(JSON.stringify(params)) } function receiveLogs(){ switch(xhrs.readyState) { case 4: // リクエスト成功 if (((200 <= xhrs.status && xhrs.status < 300) || (xhrs.status == 304)) && xhrs.responseText) { var json = JSON.parse(xhrs.responseText); s = json.s; logs = json.logs; if (json.u_st) { userState = json.u_st; } richMenu = json.rich_menu; // Check rtchat status if(json.is_rtchat){ openWs(); if (json.reserve) { let ci = localStorage.getItem('countInterval') if (ci) { countInterval = parseInt(ci) if (idInterval) { clearInterval(idInterval); countInterval = 0; } setAutoReplies(json.reserve) } } } toggleRtchatStatus(json.is_rtchat); var is_open = getCookie('r_window'); let isModalAndDemo = display_as_modal && isDemo; // Continue from session if(logs.length > 0){ is_sent_init = true; var clearedMessages = false; if(retryCount > 0){ clearMessages(); clearedMessages = true; } if (!isMobile && !clearedMessages) { isLogMessage = true; } // if reservation_autoreplies set, check admin user replying or not. // ※ if last admin_message is after system_message, think "replied from admin" var isNotRepliedFromAdmin = false; var index = 0; var isSendSignal = false; logs.forEach(function(log){ index++; if (log.type == 'system') { isNotRepliedFromAdmin = true; } else if (log.type == 'admin_user') { isNotRepliedFromAdmin = false; } writeMessageProcess(log); //if finished_rtchat, send "finish_rtchat" signal for next scenario. if (logs.length === index && log.type === 'system' && log.text === 'オペレータ対応が終了しました') { afterGetLogsFunc(); } // check input show status of latest log if (index === logs.length && typeof log.input_show_status !== 'undefined' && log.input_show_status !== null) { overrideHideInputSetting(log.input_show_status); } }); if (reservation_autoreplies && reservation_autoreplies.length > 0 && !isNotRepliedFromAdmin) { // Cancel reservation message if (idInterval) { clearInterval(idInterval); countInterval = 0; localStorage.removeItem('countInterval') } reservation_autoreplies.forEach(function(timer){ clearTimeout(timer); }); } // final log => process menu var log = logs[logs.length - 1]; if((log.type === 'bot' || log.type === 'admin_user' || log.type === 'end_user' || log.type === 'system') && log.buttons){ menu_process(log); } isLogMessage = false; windowElement.style.visibility = "visible"; if(is_open === 'on' || isModalAndDemo){ if (canOpenOnReceiveLog || isModalAndDemo) { synalio.toggle(0); } } else { if(unread_ids.length > 0){ setBadge(); } } // CHANGED /*setTimeout(function(){ synalio.resize(windowElement.offsetHeight); scroll(1); }, 300);*/ } else { if( is_open === 'on' || isModalAndDemo) { if (canOpenOnReceiveLog || isModalAndDemo) { synalio.toggle(0); } } windowElement.style.visibility = "visible"; var postData = { 'event_type': 'page_start', 'event_data': { 'unique_id': appid, 'user_id': s, 'scenario_id': scenario_id, } }; if (synalioWindow.Nanalytics && Object.keys(nanalyticsParams).length == 0) { synalioWindow.Nanalytics('get',function(params) { updateNanalyticsParams(params); sendAnalyticsData(postData); }); } else { sendAnalyticsData(postData); } } // Send title and url sendPageinfo(); retryCount = 0; // rich menu loadRichMenu(); } break; } } function receiveReserve(){ if (skipReservation) { return; } switch(xhr_page.readyState) { case 4: // リクエスト成功 if (((200 <= xhr_page.status && xhr_page.status < 300) || (xhr_page.status == 304)) && xhr_page.responseText) { var json = JSON.parse(xhr_page.responseText); s = json.s; if(json.reserve){ // Reserve logic const time = autoOpenTime > 0 ? autoOpenTime : json.reserve.time; reservation = setTimeout(function(){ var postData = { 'event_type': 'chat_opened', 'event_data': { 'unique_id': appid, 'user_id': s, 'scenario_id': scenario_id, } }; sendAnalyticsData(postData); if (typeof json.input_show_status !== 'undefined' && json.input_show_status !== null ) { overrideHideInputSetting(json.input_show_status, json.teijin) } reserveProcess(json.reserve, s, true); }, time * 1000); } } break; } } function reserveProcess(message, s, showLoading){ var lastResElem; deleteReplyOptions(); deleteSubmitForms(); is_sent_init = true; if(message.is_open){ synalio.toggle(0); } var cnt = 0; var responses = message.response; var responsesLen = responses ? responses.length : 0; var responsesString = JSON.stringify(responses); responseProcess(function(){ //menu_process(message, lastResElem); sendReserveMessageInfo(s, message.state, JSON.parse(responsesString), message.buttons, message.node, message.scenario_response) }); function responseProcess(callback){ if(cnt == 0){ cnt++; if(responses.length == 0){ if(callback){ callback(); } return; } var response = responses[0]; var elementIdx = responsesLen - responses.length; lastResElem = writeMessageProcess({ 'text': response, 'type': message.type, }, showLoading, message, elementIdx); // show_menu var isCarousel = false; if(response && response.indexOf('##carousel##') == 0){ isCarousel = true; } menu_process(message, lastResElem, elementIdx, isCarousel); responses.shift(); setTimeout(function(){ responseProcess(callback); }, loadingInterval); } else { stopLoading(); cnt = 0; responseProcess(callback); } } } function setFocusInput(status) { isFocusInput = status; } function writeMessageProcess(message, showLoading, jsonObj, elementIdx){ var match; var isForm = false; var lastResElem; var chat_msg_template = (message.text.indexOf('id="chat-form-submit"') != -1) ? chat_msg_f_edit_button_tmpl : chat_msg_f_tmpl; if(message.message_type && message.message_type === 'form_ui'){ isForm = true; } else { match = message.text.match(/^##form:(.+)##/); if(match && match.length >= 2){ isForm = true; } } if(!isForm){ msg = message.text.replace(/\r?\n/g, '
    '); } var isCarousel = false; if(message.message_type && message.message_type === 'carousel' || message.text.indexOf('##carousel##') == 0){ isCarousel = true; } if (message.type === 'end_user') { if (message.image) { var imageUrl = 'https://synalio.com/api/web/cd84fffe28904a0fb8c35d2a203d17c4/get_media/img?content_type=' + message.mime_type + '&file=' + message.image; writeMessage(htmlToElement(decorateMessage('l', chat_msg_l_img_tmpl).replace(/@1/g, imageUrl)), showLoading); } else { writeMessage(htmlToElement(decorateMessage('r', chat_msg_r_tmpl).replace(/@1/g, msg))); } } else if (message.type === 'bot') { if(isForm){ if(match && match.length >= 2){ lastResElem = writeMessage(htmlToElement(chat_msg_template.replace(/@1/g, message.text.replace(match[0], '')).replace(/@2/g, match[1])), showLoading); chat_msg_f_names.push(match[1]); } else { lastResElem = writeMessage(htmlToElement(chat_msg_template.replace(/@1/g, message.text).replace(/@2/g, 'input')), showLoading); if (nonce) { var form = lastResElem.getElementsByTagName("form")[0]; form.onchange = parent.synalio.onFormChanged; var btnSend = form.getElementsByClassName("btn-send")[0]; btnSend.onclick = function () { return parent.synalio.onSubmitForm(btnSend); } } chat_msg_f_names.push('input'); } } else if(isCarousel){ carousel_process(message.text, jsonObj, elementIdx); } else{ if(message.text.indexOf("##markdown##") != -1){ msg = message.text.replace(/##markdown##/g, "") lastResElem = writeMessage(htmlToElement(decorateMessage('l', chat_message_markdown_tmpl).replace(/@1/g, msg)), showLoading); }else{ lastResElem = writeMessage(htmlToElement(decorateMessage('l', chat_msg_l_tmpl).replace(/@1/g, msg).replace(/@2/g, headerText).replace(/@3/g, characterImage)), showLoading); } cspHandleOnClick(lastResElem); } } else if (message.type === 'admin_user') { if (message.image) { writeMessage(htmlToElement(decorateMessage('l', chat_msg_l_img_tmpl).replace(/@1/g, message.image)), showLoading); } else { var nm = message.sender ? message.sender : headerText; var img = message.sender_image ? message.sender_image : characterImage; writeMessage(htmlToElement(decorateMessage('l', chat_msg_l_tmpl).replace(/@1/g, msg).replace(/@2/g, nm).replace(/@3/g, img)), showLoading); } if(!message.is_read){ // Unread messages unread_ids.push(message.msg_id); } } else if(message.type === 'system') { writeMessage(htmlToElement(chat_msg_common_tmpl.replace(/@1/g, message.text))); } return lastResElem; } function getFormData(form){ var formData={}; var formElements = form.elements; for (var i = 0; i < formElements.length; i++) if (formElements[i].type != 'button') formData[formElements[i].name]=formElements[i].value; return JSON.stringify(formData); } function startHttpFakeLoading(){ if(!isHttpLoadingStarted){ // reply time < 2 secs if(httpLoadingTimer){ clearTimeout(httpLoadingTimer); httpLoadingTimer = null; } writeLoading(); // start fake loading } } function setAutoReplies(arrayAutoReplies) { var autoReplies = arrayAutoReplies.sort(function(a,b) { return a.time - b.time }) idInterval = setInterval(function() { if (autoReplies.length > 0) { let autoReply = autoReplies[autoReplies.length - 1]; if (countInterval >= autoReply.time) { clearInterval(idInterval); countInterval = 0; return; } } countInterval += 1 localStorage.setItem('countInterval', countInterval) }, 1000) autoReplies.forEach(function(r){ let t = r.time; if (t > countInterval) { t = t - countInterval; } else { return; } var timer = setTimeout(function(){ reserveProcess(r, s, true); }, t * 1000); reservation_autoreplies.push(timer); }); } function httpStateChange(){ switch(xhr.readyState){ case 4: // リクエスト成功 if(((200 <= xhr.status && xhr.status < 300) || (xhr.status == 304)) && xhr.responseText) { var json = JSON.parse(xhr.responseText); s = json.s; var responses = json.response; var responseLength = responses.length; var responseMarkdown = json.response_markdown || []; var lastResElem; var tempLastResElem; var cnt = 0; actionGroupName = json.action_group_name; if (json.scenario_id > 0) { scenario_id = json.scenario_id; } startHttpFakeLoading(); // Check rtchat status if(json.is_rtchat){ if (json.refresh_log) { retryCount = 1; } openWs(); } var callback = !json.is_rtchat ? null : function(){ if(json.is_rtchat){ stopLoading(); writeMessage(htmlToElement(chat_msg_common_tmpl.replace(/@1/g, 'オペレータ対応が開始しました'))); toggleRtchatStatus(true); } }; if (typeof json.input_show_status !== 'undefined' && json.input_show_status !== null ) { overrideHideInputSetting(json.input_show_status, json.teijin) } message_process(callback); // reserve if(json.reserve){ setAutoReplies(json.reserve) } if(json.script){ for(var i=0;i= 2){ lastResElem = writeMessage(htmlToElement(chat_msg_template.replace('@1', res.replace(match[0], '')).replace(/@2/g, match[1])), true); if (nonce) { var form = lastResElem.getElementsByTagName("form")[0]; form.onchange = parent.synalio.onFormChanged; var btnSend = form.getElementsByClassName("btn-send")[0]; if (btnSend.parentElement.id == "chat-form-submit") { btnSend.onclick = function () { if(typeof parent.synalio !== 'undefined') { return parent.synalio.onSubmitForm(btnSend); } } } else { btnSend.onclick = parent.synalio.onSubmitForm; } } scroll(1); chat_msg_f_names.push(match[1]); } else if(res.indexOf('##carousel##') == 0){ stopLoading(); tempLastResElem = carousel_process(res, json, elementIdx); isCarouselRes = true; scroll(1); timer = 0; } else{ if(res.indexOf("##markdown##") != -1){ res = res.replace(/##markdown##/g, "") lastResElem = writeMessage(htmlToElement(decodeMail(decorateMessage('l', chat_message_markdown_tmpl).replace(/@1/g, res))), true); }else{ lastResElem = writeMessage(htmlToElement(decodeMail(decorateMessage('l', chat_msg_l_tmpl).replace(/@1/g, res).replace(/@2/g, headerText).replace(/@3/g, characterImage))), true); } cspHandleOnClick(lastResElem); scroll(1); } menu_process(json, lastResElem, elementIdx, isCarouselRes); responses.shift(); setTimeout(function(){ message_process(callback); }, timer); } else { stopLoading(); cnt = 0; message_process(callback); } } } else { toggleChatBodyScroll(0); } break; } } function handleChatElementClick(elem) { var dataValue = elem.getAttribute('data-val'); if (!dataValue) { return; } return function() { parent.synalio.onPressLink(elem); } } function cspHandleOnClick(elem) { if (!nonce) { return; } var childElems = elem.getElementsByClassName("chat-block"); if (childElems.length > 0) { childElems[0].onclick = handleChatElementClick(childElems[0]); } else { elem.onclick = handleChatElementClick(elem); } } function appendMenuToLastResponse(menuHtml, lastResElem){ if(!lastResElem){ var targets = synalioDocument.getElementsByClassName('chat-message-body'); if(targets.length <= 0) { return; } lastResElem = targets[targets.length - 1]; } var markdownEl = lastResElem.getElementsByClassName("markdown-body"); // no add the backToHome button on the markdown response. if (markdownEl.length > 0) return; if(lastResElem.className.indexOf('left-talk-box') != -1){ var elem = htmlToElement(menuHtml, true); while(elem.childNodes.length > 0){ var childElem = elem.childNodes[0]; cspHandleOnClick(childElem); ensureShowElement(childElem); lastResElem.appendChild(childElem); } } else { if(lastResElem.className.indexOf('custom-outer-box') == -1){ writeMessage(htmlToElement(chat_reply_wrap.replace(/@1/g, menuHtml), true), false, true); } } } function stopLoading(){ var targets = synalioDocument.querySelectorAll('[data-loading="on"]'); for(var i = 0; i <= targets.length - 1; i++){ if(targets[i].children.length >= 2){ targets[i].setAttribute('data-loading', 'complete'); } else if(targets[i].children.length > 0 && targets[i].children[0].className == 'loading-box'){ if(targets[i].parentNode){ targets[i].parentNode.removeChild(targets[i]); } } } scroll(1); } function existLoading(){ var targets = synalioDocument.querySelectorAll('[data-loading="on"]'); return targets.length > 0 ? true : false; } function getLastLoading(){ var targets = synalioDocument.querySelectorAll('[data-loading="on"]'); var loading = targets.length > 0 ? targets[targets.length-1] : null; if(!loading){ loading = writeLoading(); } return loading; } function menu_process(json, lastResElem, elementIdx, isCarouselResponse){ //var menu_count = 0; var hasButton = false; var buttonLst = json.buttons ? json.buttons : []; var replyDecos = json.reply_deco || []; // only check this flag in case not log-history var isCarouselRes = typeof isCarouselResponse !== 'undefined' ? isCarouselResponse : true; // feedback info var is_feedback = typeof json.is_feedback !== 'undefined' ? json.is_feedback : false; var feedback_log_id = typeof json.feedback_log_id !== 'undefined' ? json.feedback_log_id : null; var state = json.switch_state ? json.switch_state : ''; if (state == ''){ if (typeof json.dialogue_history !== 'undefined' && json.dialogue_history.length > 0){ state = json.dialogue_history[json.dialogue_history.length-1].state_name; } else { state = json.state;// page-stay } } var actionName = json.action; if (typeof json.state !== 'undefined' && json.state[state] && json.state[state].response){ actionName = json.state[state].response; } // new logic by response from back-end case ( not case log ) if (typeof json.result_buttons !== 'undefined'){ for (var idx = 0; idx < json.result_buttons.length; idx++) { if (json.result_buttons[idx].length > 0){ hasButton = true; break; } } buttonLst = json.result_buttons[elementIdx]; replyDecos = json.result_reply_deco[elementIdx] || []; var feedbackInfo = json.result_is_feedback[elementIdx]; if(feedbackInfo){ is_feedback = feedbackInfo.is_feedback; feedback_log_id = feedbackInfo.feedback_log_id; actionName = feedbackInfo.action; } } if(buttonLst && buttonLst.length > 0){ var l = []; var j = 0; for (var i = 0; i < buttonLst.length; i++) { var decoClass = ''; var buttonBackgroundcolor = ''; var buttonColor = ''; var borderColor = ''; var boderColorClass = ''; if(replyDecos.length > j){ decoClass = replyDecos[j]; var decoList = replyDecos[j].split('__'); if (decoList.length > 0) { decoClass = decoList[0]; buttonBackgroundcolor = decoList.length > 1 ? decoList[1]: ''; buttonColor = decoList.length > 2 ? decoList[2]: ''; if (buttonColor) { borderColor = '--border-color:' + buttonColor + ';'; boderColorClass = 'choice-block-color'; } } } j++; var val1 = buttonLst[i].img ? buttonLst[i].img : buttonLst[i].label.replace(/"/g,'"'); var tmpl = buttonLst[i].img ? chat_msg_c_img_tmpl : chat_msg_c_tmpl; var val2 = buttonLst[i].url ? buttonLst[i].url : buttonLst[i].msg.replace(/"/g,'"'); var val3 = buttonLst[i].url && buttonLst[i].url_target ? buttonLst[i].url_target : ''; var img_alt = buttonLst[i].img && buttonLst[i].img_alt ? buttonLst[i].img_alt : 'null'; l.push(decorateMessage('c', tmpl).replace(/@1/g, val1).replace(/@2/g, val2).replace(/@3/g, decoClass).replace(/@4/g, val3).replace(/@5/g, buttonBackgroundcolor).replace(/@6/g, buttonColor).replace(/@7/g, boderColorClass).replace(/@8/g, borderColor).replace(/@9/g, img_alt)); } appendMenuToLastResponse(l.join(''), lastResElem); //menu_count = l.length; } else if(!json.no_button && !hasButton) { var elm = decorateMessage('c', chat_msg_c_tmpl).replace(/@1/g, backToHome).replace(/@2/g, backToHome).replace(/@3/g, ''); if(chat_msg_f_names.length == 0){ //menu_count++; appendMenuToLastResponse(elm, lastResElem); } } if (!isCarouselRes && is_feedback && feedback_log_id && lastResElem) { var feedback_form = htmlToElement(chat_feedback_form_tmpl.replace(/@2/g, '

    回答に問題がある場合、以下のどちらだったかを教えてください。回答精度向上にフィードバックを活かします。

    ').replace(/@3/g, '見当違いな回答').replace(/@4/g, '正しいが不十分な回答').replace(/@5/g, '

    フィードバックありがとうございました。
    回答内容改善の参考にさせて頂きます。

    ').replace(/@6/g, actionName).replace(/@7/g, state).replace(/@8/g, feedback_log_id), true); lastResElem.appendChild(feedback_form); if (nonce) { var formElem = lastResElem.getElementsByTagName("form")[0]; formElem.onchange = function () { parent.synalio.onFormChanged(formElem) }; } var feedbackBtns = lastResElem.getElementsByClassName('feedbackBtn-' + feedback_log_id); if (feedbackBtns.length > 0) { for (var j = 0; j < feedbackBtns.length; j++) { feedbackBtns[j].style.width = feedbackBtnFixWidth; if (nonce) { var buttonIdx = feedbackBtns[j].innerText == '見当違いな回答' ? 1 : 2; feedbackBtns[j].onclick = function () { return parent.synalio.onSubmitFeedbackForm(buttonIdx, feedback_log_id); } } } } } } function isObject(obj) { return obj && !Array.isArray(obj) && typeof obj === 'object'; } function carousel_process(res, json, elementIdx){ var carouselData = []; try{ var index = res.indexOf('##carousel##'); if(index != -1){ var carouselString = res.substr(index); var arr = carouselString.split('##carousel##'); if(arr.length > 1){ carouselString = arr[1]; carouselData = JSON.parse(carouselString); } } }catch(ex){ } if(carouselData.length == 0){ return; } synalio_carousel.deleteButtons(); var carouselItems = []; var imageCarouselSize = (carouselData.length > 0 && carouselData[0].image_size) ? carouselData[0].image_size : '16_9'; var imageShowingMethod = (carouselData.length > 0 && carouselData[0].image_showing_method) ? carouselData[0].image_showing_method : 'cover'; for (var i = 0; i < carouselData.length; i++) { var decoClass = ''; var buttons = []; for(var j = 0; j < carouselData[i].buttons.length; j++){ if (carouselData[i].buttons[j].reply_link_target && carouselData[i].buttons[j].reply_link_target === 1) { carouselData[i].buttons[j].uri_target = '_self' } var btnVal1 = carouselData[i].buttons[j].label.replace(/"/g,'"'); //var btnVal2 = carouselData[i].buttons[j].uri ? carouselData[i].buttons[j].uri : carouselData[i].buttons[j].text.replace(/"/g,'"'); var btnVal2 = (carouselData[i].buttons[j].type=='uri' && carouselData[i].buttons[j].uri) ? carouselData[i].buttons[j].uri : carouselData[i].buttons[j].text.replace(/"/g,'"'); var btnVal3 = carouselData[i].buttons[j].uri && carouselData[i].buttons[j].uri_target ? carouselData[i].buttons[j].uri_target : ''; var btnVal5 = carouselData[i].buttons[j].reply_deco && carouselData[i].buttons[j].reply_deco === 1 ? 'font-weight: bold;' : '' ; var buttonColor = carouselData[i].buttons[j].reply_color ? carouselData[i].buttons[j].reply_color : '' ; var buttonBgColor = carouselData[i].buttons[j].reply_bgcolor ? carouselData[i].buttons[j].reply_bgcolor : '' ; if (buttonColor) { btnVal5 = btnVal5 + 'color:' + buttonColor + ';'; } if (buttonBgColor) { btnVal5 = btnVal5 + 'background-color:' + buttonBgColor + ';'; } if (btnVal5) { btnVal5 = 'style="' + btnVal5 + '"'; } buttons.push(chat_message_carousel_button_tmpl.replace(/@1/g, btnVal1).replace(/@2/g, btnVal2).replace(/@3/g, decoClass).replace(/@4/g, btnVal3).replace('@5', btnVal5)); } if(buttons.length > 0){ buttonValue = buttons.join(''); } var itemVal1 = carouselData[i].title.replace(/"/g,'"'); var itemVal2 = carouselData[i].text.replace(/"/g,'"'); var itemVal3 = ''; if(carouselData[i].image_url){ itemVal3 = chat_message_carousel_item_image_tmpl.replace(/@1/g, carouselData[i].image_url).replace(/@2/g, imageShowingMethod); var styleCursor = ''; var imageLink = ''; if (carouselData[i].image_link) { let img_alt = carouselData[i].image_alt ? carouselData[i].image_alt : 'null'; styleCursor = 'cursor: pointer'; imageLink = 'onclick="parent.synalio.onPressLink(this)" data-val="@url" data-val-label="@image_alt" data-val-target="_blank"'.replace(/@url/g, carouselData[i].image_link).replace(/@image_alt/g, img_alt); } itemVal3 = itemVal3.replace(/@3/g, styleCursor).replace(/@4/g, imageLink); } var itemVal4 = buttons.join(''); carouselItems.push(chat_message_carousel_item_tmpl.replace(/@1/g, itemVal1).replace(/@2/g, itemVal2).replace(/@3/g, itemVal3).replace(/@4/g, itemVal4)); } carouselLastId += 1; var carouselItemsHtml = carouselItems.join(''); var carouselHtml = chat_message_carousel_tmpl.replace(/@1/g, carouselLastId).replace(/@2/g, carouselItemsHtml); var lastResElem = writeMessage(htmlToElement(carouselHtml), false, false); if (nonce) { var buttonElems = lastResElem.getElementsByClassName("btn-box"); for (let i=0; i 0){ state = json.dialogue_history[json.dialogue_history.length-1].state_name; } else { state = json.state;// page-stay } } var actionName = feedbackInfo.action; var feedback_form = htmlToElement(chat_feedback_form_tmpl.replace(/@2/g, '

    回答に問題がある場合、以下のどちらだったかを教えてください。回答精度向上にフィードバックを活かします。

    ').replace(/@3/g, '見当違いな回答').replace(/@4/g, '正しいが不十分な回答').replace(/@5/g, '

    フィードバックありがとうございました。
    回答内容改善の参考にさせて頂きます。

    ').replace(/@6/g, actionName).replace(/@7/g, state).replace(/@8/g, feedbackInfo.feedback_log_id), true); var wrapDiv = document.createElement("DIV"); wrapDiv.className = "left-talk-box"; wrapDiv.setAttribute('data-talkshow', 'talkshow'); wrapDiv.appendChild(feedback_form); if (nonce) { var formElem = wrapDiv.getElementsByTagName("form")[0]; formElem.onchange = function () { parent.synalio.onFormChanged(formElem) }; } lastResElem.parentNode.appendChild(wrapDiv); var feedbackBtns = wrapDiv.getElementsByClassName('feedbackBtn-' + feedbackInfo.feedback_log_id); if (feedbackBtns.length > 0) { for (var j = 0; j < feedbackBtns.length; j++) { feedbackBtns[j].style.width = feedbackBtnFixWidth; if (nonce) { var buttonIdx = feedbackBtns[j].innerText == '見当違いな回答' ? 1 : 2; feedbackBtns[j].onclick = function () { return parent.synalio.onSubmitFeedbackForm(buttonIdx, feedbackInfo.feedback_log_id); } } } } } } return lastResElem; } function httpError(){ var msg = "
  • 送信に失敗しました。
    ネットワーク接続をご確認いただくか、お時間おいて再度お試しください。
  • "; writeMessage(htmlToElement(msg)); } function createParam(msg, isButton, isInitMsg, image, mime_type, extraParams){ if(!s) { // In case no s. s = new Date().getTime().toString(16) + Math.floor(1000 * Math.random()).toString(16) } var params = []; var cookieValue = null; params.push("appid=" + appid); params.push("content=" + encodeURIComponent(msg)); params.push("mode=web"); params.push("s=" + s); params.push("session_id=" + sessionId); params.push("pv_num=" + pvNum); params.push("url=" + encodeURIComponent(refererUrl)); if(checkDemo() == 1){ params.push("demo=1"); } if(isButton){ params.push("button=1"); } if(isInitMsg){ params.push("init=1"); } if (isInitMsg && userState && msg != "finish_rtchat"){ params.push('u_st='+userState); } if(image){ params.push("image=" + image); } if(image){ params.push("mime_type=" + mime_type); } if (Object.keys(ext).length > 0){ params.push("ext=" + JSON.stringify(ext)); } if (demo_scenario_id != ""){ params.push("demo_scenario_id="+demo_scenario_id); } for(var i = 0; i < cookies.length; i++) { cookieValue = getCookie(cookies[i].cookie_key); if (cookieValue) params.push(cookies[i].cookie_key + "=" + cookieValue); } if(extraParams){ for(arg in extraParams){ params.push(arg + '=' + extraParams[arg]); } } return params.join('&'); } function writeLoading(){ if (isHideChatting) { return; } // writeMessage(htmlToElement(decorateMessage('l', chat_msg_l_tmpl).replace(/@1/g, chat_loading_tmpl).replace(/@2/g, headerText).replace(/@3/g, characterImage))); var elem = synalioDocument.getElementById('synalio-chat-message'); var loadingElem = htmlToElement(chat_loading_tmpl); elem.appendChild(loadingElem); return elem.lastChild; } function deleteReplyOptions(){ var chatMessageBody; var options = synalioDocument.getElementsByClassName('reply-option'); while(options.length > 0){ if(options[0].parentNode){ if(!chatMessageBody){ chatMessageBody = options[0].parentNode; } options[0].parentNode.removeChild(options[0]); } } if(chatMessageBody && chatMessageBody.childNodes.length > 0){ var lastChild = chatMessageBody.childNodes[chatMessageBody.childNodes.length - 1]; lastChild = lastChild.nodeName == 'TEMPLATE' ? lastChild.childNodes[lastChild.childNodes.length - 1] : lastChild; if((!lastChild.className || (lastChild.className != 'chat-block' && lastChild.className != 'form-block')) && chatMessageBody.parentNode){ chatMessageBody.parentNode.removeChild(chatMessageBody); } } } function deleteSubmitForms(){ do{ var formName = chat_msg_f_names.shift(); if(formName != undefined) deleteSubmitForm(formName); }while(formName != undefined); } function deleteSubmitForm(formName){ var forms = synalioDocument.getElementsByName(formName) for(var i = 0; i < forms.length; i++){ var removeElem = forms[i].parentElement; var parentElem = removeElem.parentElement; parentElem.removeChild(removeElem); var rootElem = parentElem.parentElement; rootElem.removeChild(parentElem); } } function clearMessages(){ var elem = synalioDocument.getElementById('synalio-chat-message'); while (elem.firstChild) { elem.removeChild(elem.firstChild); } } // fix menu does not show function ensureShowElement(elem){ elem.addEventListener(animationEndEvent,(function(){ return function f(e){ elem.className += ' comp-anime-stop'; elem.removeEventListener(animationEndEvent, f, false); } })(1), false); } function writeMessage(chat_message, showLoading, isMenu){ /* if(showLoading && existLoading()){ setTimeout(function(){ writeMessage(chat_message, showLoading) }, loadingInterval); return; } stopLoading(); */ var elem = synalioDocument.getElementById('synalio-chat-message'); if(!isMenu){ if(!showLoading){ elem.appendChild(chat_message); } else{ var loading = getLastLoading(); if(loading){ try{ loading.appendChild(chat_message.childNodes[0].lastChild); }catch(ex){ loading.appendChild(chat_message.lastChild); } } else { elem.appendChild(chat_message); } } } else { while(chat_message.childNodes.length > 0){ elem.appendChild(chat_message.childNodes[0]); } } if(!isLogMessage){ ensureShowElement(elem.lastChild); // fix sent message does not show if(showLoading && !isHideChatting){ elem.lastChild.setAttribute('data-loading', 'on'); } elem.lastChild.setAttribute('data-talkshow', 'talkshow'); elem.lastChild.setAttribute('data-test', 'chat-dialogue'); } if(elem.childElementCount > maxConvNum){ elem.removeChild(elem.children[0]); } return elem.lastChild; } function writeButton(btn){ deleteReplyOptions(); var elem = synalioDocument.getElementsByClassName('foot-box')[0]; elem.appendChild(btn); } function scroll(type){ var scrollContainer = synalioDocument.getElementsByClassName("over-talk-box")[0]; if(scrollContainer.style.overflowY == 'hidden'){ scrollContainer.style.overflowY = 'visible'; } var targets = synalioDocument.getElementsByClassName("chat-message-body"); var firstElements = synalioDocument.getElementsByClassName("first-element"); if(targets.length - type >= 0){ var target = targets[targets.length - type]; var chatHeader = synalioDocument.getElementsByClassName("header-box")[0]; var chatBody = synalioDocument.getElementsByClassName("over-talk-box")[0]; if (firstElements.length > 0 && !isInRtchat()) { setTimeout(function () { //Set Timeout to make sure element is appended target = firstElements[firstElements.length - 1]; smoothScr.stopShow(); smoothScr.anim(target, chatBody, chatHeader); }, 100) } else { smoothScr.stopShow(); smoothScr.anim(target, chatBody, chatHeader); } // chat_body.scrollTop = target.offsetTop - chat_header.offsetHeight; //smoothScr.step = (target.offsetTop - chatHeader.offsetHeight - chatBody.scrollTop) / 15.0; } } function scrollOnLoad(){ var targets = synalioDocument.getElementsByClassName("chat-message-body"); var chatBody = synalioDocument.getElementsByClassName("over-talk-box")[0]; var chatHeader = synalioDocument.getElementsByClassName("header-box")[0]; var messageContainer = synalioDocument.getElementById('synalio-chat-message'); if(targets.length > 0){ setTimeout(function(){ chatBody.scrollTop = targets[targets.length - 1].offsetTop; // scroll(1); }, 50); } } var freezeVp = function(e) { e.preventDefault(); }; function setCurrentScrollPosition() { let doc = document.documentElement; let left = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0); let top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0); if (!currentScrollPosition.top) { currentScrollPosition.top = top; currentScrollPosition.left = left; } else if (currentScrollPosition.top > 0 && top > 0 && !isFocusInput) { currentScrollPosition.top = top; currentScrollPosition.left = left; } } function scrollToPosition() { if (currentScrollPosition.top) { let top = currentScrollPosition.top; window.scrollTo(0, top); } } function stopBodyScrolling(bool){ if (bool === true) { if (!firstClick) { firstClick = true; objectCss = { position: synalioParentDocument.body.style.position, width: synalioParentDocument.body.style.width, overflow: synalioParentDocument.body.style.overflow }; } synalioParentDocument.body.style.position = 'fixed'; synalioParentDocument.body.style.width = '100%'; synalioParentDocument.body.style.overflow = 'hidden'; // synalioParentDocument.body.setAttribute('style', "position:fixed;overflow:hidden;width:100%;"); setTimeout(function () { let mainBox = synalioDocument.getElementsByClassName('main-box')[0] if (mainBox) { mainBox.click(); } },200) } else { synalioParentDocument.body.style.position = objectCss.position; synalioParentDocument.body.style.width = objectCss.width; synalioParentDocument.body.style.overflow = objectCss.overflow; scrollToPosition(); } } function isScrolling(){ return window.lastScrollTime && new Date().getTime() < window.lastScrollTime + 10; } function getElement(className){ return synalioDocument.getElementsByClassName(className)[0]; } function getElementHeight(className){ var elem = getElement(className); var height = elem.clientHeight; if(elem.style.paddingTop){ height -= parseInt(elem.style.paddingTop.replace('px', '')); } if(elem.style.paddingBottom){ height -= parseInt(elem.style.paddingBottom.replace('px', '')); } return height; } function getWindowWidth(){ return parseInt(design_width); } function getWindowHeight(){ return parseInt(design_height); } function getWindowWidthMobile(){ return parseInt(design_width_mobile); } function getWindowHeightMobile(){ return !isFullScreen ? parseInt(design_height_mobile) : 100; } function getScreenSize(){ if(!isMobile){ return {width: getWindowWidth(), heigh: getWindowHeight()}; } else { return {width: window.innerWidth, height: window.innerHeight}; } } function getScrollBarWidth() { if(isFullScreen){ return 0; } var iframeStyle = ""; // Show to calculate the offset if (hiddenStyle === 'display:none;') { var iframe = synalioParentDocument.getElementById('synalio-iframe'); iframeStyle = iframe.getAttribute("style"); var tempStyle = iframeStyle.replace(hiddenStyle, ""); iframe.setAttribute("style", tempStyle); } var inner = synalioDocument.createElement('p'); inner.style.width = "100%"; inner.style.height = "200px"; var outer = synalioDocument.createElement('div'); outer.style.position = "absolute"; outer.style.top = "0px"; outer.style.left = "0px"; outer.style.visibility = "hidden"; outer.style.width = "200px"; outer.style.height = "150px"; outer.style.overflow = "hidden"; outer.appendChild(inner); synalioDocument.body.appendChild(outer); var w1 = inner.offsetWidth; outer.style.overflow = 'scroll'; var w2 = inner.offsetWidth; if (w1 == w2) { w2 = outer.clientWidth; } synalioDocument.body.removeChild(outer); // Restore iframe's style if (iframeStyle != "") { iframe.setAttribute("style", iframeStyle); } return (w1 - w2); } function whichAnimationEndEvent(){ var t, el = document.createElement("fakeelement"); var animations = { 'animation' : 'animationend', 'OAnimation' : 'oAnimationEnd', 'MozAnimation' : 'animationend', 'WebkitAnimation': 'webkitAnimationEnd' } for (t in animations){ if (el.style[t] !== undefined){ return animations[t]; } } } function whichTransitionEndEvent(){ var t, el = document.createElement("fakeelement"); var transitions = { 'transition' : 'transitionend', 'OTransition' : 'oTransitionEnd', 'MozTransition' : 'transitionend', 'WebkitTransition': 'webkitTransitionEnd' } for (t in transitions){ if (el.style[t] !== undefined){ return transitions[t]; } } } function addMultiLine() { var mainBox = synalioDocument.getElementsByClassName('main-box')[0]; mainBox.style.height = "calc(100vh - " + (header.offsetHeight + footer.offsetHeight + 20*2) + "px)"; // padding: 20 mainBox.style.transition = "none"; } function resetMultiLine(){ footer.style.height = initFooterHeight + 'px'; synalioDocument.getElementById('synalio-chat-text-input').style.height = textAreaHeight + 'px'; var mainBox = synalioDocument.getElementsByClassName('main-box')[0]; mainBox.style.height = "calc(100vh - " + (header.offsetHeight + initFooterHeight + 20*2) + "px)"; // padding: 20 mainBox.style.transition = ''; } function changeCloseHeight(displayType) { if(displayType != 'img'){ iframeStyleHeightClose = 'height: ' + (windowElement.offsetHeight + 4) + 'px;'; } else { iframeStyleHeightClose = iframeStyleHeightImgClose; } if(design_close_type == 'img'){ iframeStyleHeightClose = "height: " + synalioDocument.getElementsByClassName('img-box')[0].offsetHeight + "px;"; } } function alignCloseImagePosition() { synalioDocument.getElementsByClassName("img-box")[0].setAttribute("style", imgClosePosition); } function onChatBodyScroll(){ window.lastScrollTime = new Date().getTime(); } function toggleChatBodyScroll(e){ if(e === 1){ synalioDocument.getElementsByClassName("over-talk-box")[0].style.overflowY = 'hidden'; } else { synalioDocument.getElementsByClassName("over-talk-box")[0].style.overflowY = 'visible'; } } function initMobileSize(iframe, windowBox){ iframe.style.width = '100vw'; iframe.style.height = getWindowHeightMobile() + '%'; iframe.style.bottom = 0; windowBox.style.width = '100vw'; windowBox.style.height = '100vh'; synalioDocument.getElementsByClassName('main-box')[0].style.height = 'calc(100vh - ' + (getElementHeight('header-box') + getElementHeight('foot-box')) + 'px)'; } function customChatSize(){ var self = this; var iframe = synalioParentDocument.getElementById('synalio-iframe'); var windowBox = synalioDocument.getElementsByClassName('window-box')[0]; if (positionTimeOut) { clearTimeout(positionTimeOut); } windowBox.removeEventListener(animationEndEvent, customChatSize, false); windowBox.setAttribute('data-wtype', 'chat'); windowBox.setAttribute('data-first', true); windowBox.removeAttribute('style'); getElement('main-box').removeAttribute('style'); synalioDocument.getElementsByClassName('outer-talk-set-box')[0].removeAttribute('style'); if(isMobile){ initMobileSize(iframe, windowBox); }else{ iframe.style.width = getWindowWidth() + 'px'; iframe.style.height = getWindowHeight() + 'px'; var mainBox = getElement('main-box'); mainBox.removeAttribute('style'); resizeFitBrowser(synalioParentWindow); iframe.style.bottom = 0; } var contentElements = synalioDocument.getElementsByClassName('chat-message-body'); for(var i = 0; i < contentElements.length; i++){ if(!contentElements[i].getAttribute('data-talkshow')){ contentElements[i].setAttribute('data-talkshow', 'talkshow'); } } // scroll(1); scrollOnLoad(); } function customCloseSize(displayType) { var iframe = synalioParentDocument.getElementById('synalio-iframe'); var windowBox = synalioDocument.getElementsByClassName('window-box')[0]; windowBox.setAttribute('data-wtype', displayType); if(isMobile){ if(displayType === 'img' && no_minimize_visual){ closeImageVisual(iframe, windowBox); }else{ windowBox.removeAttribute('style'); getElement('main-box').removeAttribute('style'); getElement('outer-talk-set-box').removeAttribute('style'); var frameHeight = 85; if(displayType != 'max-min'){ iframe.style.width = '100%'; } else { iframe.style.width = '24.47%'; if (navigator.userAgent.match(/iPad/)) { frameHeight = Math.ceil(152 * window.screen.width / 834);// base on ipad 11 } } if (window.innerWidth != window.screen.width) { frameHeight = frameHeight * window.innerWidth / window.screen.width; } iframe.style.height = frameHeight + 'px'; if (isClosedWindowChat) { iframe.style.bottom = position_close_box; } else { isClosedWindowChat = true; } } }else{ if(displayType === 'img' && no_minimize_visual){ closeImageVisual(iframe, windowBox); }else{ windowBox.removeAttribute('style'); getElement('main-box').removeAttribute('style'); getElement('outer-talk-set-box').removeAttribute('style'); iframe.style.width = windowBox.offsetWidth + 'px'; let heightWindowBoxClose = getElement('outer-box').offsetHeight + (windowBox.style.paddingTop ? windowBox.style.paddingTop.replace('px', '') : 10) * 2 + 20 + 'px'; let heightWindowBoxCloseNew = 'calc(' + heightWindowBoxClose + ' + ' + position_close_box +')'; if (isClosedWindowChat) { iframe.style.height = heightWindowBoxCloseNew; windowBox.style.height = heightWindowBoxClose; positionTimeOut = setTimeout(function () { iframe.style.height = heightWindowBoxClose; iframe.style.bottom = position_close_box; }, 1000); } else { windowBox.style.height = heightWindowBoxClose; iframe.style.height = heightWindowBoxClose; isClosedWindowChat = true; } } } // hide visual-close let closeWindowChat = localStorage.getItem('closeWindowChat'); let visualClose = synalioDocument.getElementById('synalio-visual-close'); if (visualClose && closeWindowChat) { visualClose.style.display = 'none'; } } function closeImageVisual(iframe, windowBox) { let heightWindowBoxClose = closeImageHeight; if (unread_ids.length > 0) { heightWindowBoxClose += closeImageBadgeHeight; } else { let image_box = synalioDocument.getElementById("img-box-image"); image_box.style.paddingTop = "0px"; } iframe.style.width = closeImageWidth + 'px'; iframe.style.height = heightWindowBoxClose + "px"; iframe.style.bottom = position_close_box; windowBox.style.width = closeImageWidth + 'px'; windowBox.style.height = heightWindowBoxClose + "px"; windowBox.style.padding = '0px'; } function toggle(e, event){ // 0: open, 1: close, event: DOM's event synalio.toggle(e, event); } function resizeTextArea(target){ var oldHeight = target.offsetHeight || parseInt(target.style.height.replace('px', '')); // Resize Text Area if(target.scrollHeight >= target.offsetHeight){ if(target.scrollHeight < textAreaHeight + 20 + 8){ if (target.scrollHeight > 0) { target.style.height = target.scrollHeight + "px"; } } else { target.style.height = (textAreaHeight + 20 + 8) + "px"; } }else{ var height; for (var i = 0; i <= 10; i++){ height = Number(target.style.height.split("px")[0]); target.style.height = height - textAreaHeight + "px"; if(target.scrollHeight > target.offsetHeight){ if(target.scrollHeight > textAreaHeight){ target.style.height = target.scrollHeight + "px"; } else { target.style.height = textAreaHeight + "px"; } break; } } } target.rows = 1; var savedHeight = target.style.height; target.style.height = 'auto'; var autoCalcHeight = target.scrollHeight; if (autoCalcHeight < parseInt(savedHeight.replace('px', ''))) { savedHeight = Math.max(autoCalcHeight, textAreaHeight) + "px" ; } target.style.height = savedHeight; if(!initFooterHeight){ initFooterHeight = footer.offsetHeight || parseInt(footer.style.height.replace('px', '')) } footer.style.height = (parseInt(target.style.height.replace('px', '')) + 1) + 'px'; var newHeight = target.offsetHeight || parseInt(target.style.height.replace('px', '')); if(newHeight != oldHeight){ addMultiLine(); } } function fixPlaceholderOnIE() { var chat_text_input = synalioDocument.getElementById("synalio-chat-text-input"); chat_text_input.placeholder = chat_text_input.placeholder; } function resizeFitBrowser(windowObj){ fixPlaceholderOnIE(); /* scale window height fit inside browser for PC only */ if(synalioDocument.getElementsByClassName('window-box')[0].getAttribute('data-wtype') != 'chat'){ return; } if(windowObj.innerHeight < getWindowHeight()){ synalioParentDocument.getElementById('synalio-iframe').style.height = windowObj.innerHeight + 'px'; } else{ synalioParentDocument.getElementById('synalio-iframe').style.height = getWindowHeight() + 'px'; } } function startsWith(str, word){ return str.lastIndexOf(word, 0) === 0; } function isInRtchat(){ return synalioDocument.getElementsByClassName("window-box")[0].getAttribute('data-operation') == 'on'; } var runningOfflineCheck = false; function openWs(){ if(socket && socket.readyState == WebSocket.OPEN){ return; } var host = "https://synalio.com/"; if(startsWith(host, "http")){ socket = new WebSocket("https://synalio.com/chat/enduser/".replace(/http/g, "ws") + appid + "/" + s ); } else { var prtcl = "https:" == synalioParentDocument.location.protocol ? "wss" : "ws"; socket = new WebSocket(prtcl + ":https://synalio.com/chat/enduser/" + appid + "/" + s ); } socket.onmessage = onWsMessage; socket.onopen = onWsOpen; socket.onclose = onWsClose; } function closeWs() { if(socket && socket.readyState == WebSocket.OPEN){ socket.onclose = undefined; socket.close(); socket = undefined; } } // using on rtchat function onWsMessage(e){ var msg = JSON.parse(e.data); if(msg.disconnect){ sendRtchatSurveyFlagRequest(); writeMessage(htmlToElement(chat_msg_common_tmpl.replace(/@1/g, 'オペレータ対応が終了しました'))); toggleRtchatStatus(false); var isCsFormShowed = false; setTimeout(function(){ if (show_rtchat_survey) { synalio.showCSForm(); isCsFormShowed = true; } }, loadingInterval + 400); if(msg.is_finish_rtchat_link == 1){ setTimeout(function(){ sendMessage("finish_rtchat", true, true, true); }, isCsFormShowed ? loadingInterval + 500 : 0); }else{ menu_process({buttons:[{'label':'メニューへ戻る', 'msg':'メニューに戻る'}]}); scroll(1); } } else { is_sent_init = true; var img = msg.sender_image ? msg.sender_image : characterImage; writeMessage(htmlToElement(decorateMessage('l', chat_msg_l_tmpl).replace(/@1/g, msg.text.replace(/\r?\n/g, '
    ')).replace(/@2/g, msg.sender).replace(/@3/g, img))); scroll(1); // Notify that you read the message unread_ids.push(msg.msg_id); if(synalioParentDocument.hasFocus()){ sendReadNotice(); } // Set Badge setBadge(); if(!isInRtchat()){ writeMessage(htmlToElement(chat_msg_common_tmpl.replace(/@1/g, 'オペレータ対応が開始しました'))); } // Toggle Rtchat status toggleRtchatStatus(true, msg.sender_image); } // Cancel reservation message if (idInterval) { clearInterval(idInterval); countInterval = 0; localStorage.removeItem('countInterval') } reservation_autoreplies.forEach(function(timer){ clearTimeout(timer); }); } function onWsOpen(){ isCancelling = false; // If it is retry connection, refresh the conversation data again if(retryCount > 0){ resetAfterGetLogsFunc(); getLogs(s, sessionId); } // If there's unread messages setTimeout(sendReadNotice, 1500); } function onWsClose(){ retryCount++; if(retryCount < 50){ //try to reconnect var waitMilliSeconds = function(retryCount) { if (retryCount <= 10) { // before 10s, reconnect every 2s. return 2000; } else { return (retryCount - 10) * 2000; } } setTimeout(function(){ openWs(); }, waitMilliSeconds(retryCount)); } } function updateCheckboxCustomValidity(form) { var checkbox = null; var checkedCount = 0; for (i = 0; i < form.elements.length; i = i + 1) { if (form.elements[i].name === "") { continue; } if((form.elements[i].nodeName == 'INPUT') && (form.elements[i].getAttribute('type') == 'checkbox')) { // Move to another checkbox group if (checkbox && checkbox.name != form.elements[i].name) { if (checkedCount == 0) { // There was an invalid checkboxes group, so top here break; } else { // Need to reset this before checking new group checkbox = null; checkedCount = 0; } } if (!checkbox && form.elements[i].className.indexOf('required') != -1) { checkbox = form.elements[i]; } if (checkbox && form.elements[i].checked) { checkedCount++; } } } var result = true; errorCheckbox = checkbox; if (errorCheckbox) { if (checkedCount == 0) { errorCheckbox.setCustomValidity(errorCheckboxMessage); result = false; } else { errorCheckbox.setCustomValidity(''); } } return result; } function updateTextCustomValidity(form) { var el = null; for (var i = 0; i < form.elements.length; i = i + 1) { if (form.elements[i].name === "") { continue; } var nodeName = form.elements[i].nodeName; var type = form.elements[i].getAttribute('type'); var required = form.elements[i].required; if (required) { var arrayType = ['text', 'number', 'email']; if ((nodeName === 'INPUT' && arrayType.indexOf(type) !== -1) || nodeName === 'TEXTAREA') { var value = form.elements[i].value; value = value.trim(); if (value.length === 0) { el = form.elements[i]; break; } else { form.elements[i].setCustomValidity(''); form.elements[i].removeEventListener( 'keypress', function() {}, false ); } } } } var result = true; if (el) { el.setCustomValidity(errorCheckboxMessage); el.addEventListener( 'keypress', function() { el.setCustomValidity('') }, false ); result = false; } return result; } function validateFormFields(form) { var result = typeof document.createElement('input').checkValidity == 'function'; if (result) { for (var i = 0; i < form.elements.length; i++) { var element = form.elements[i]; if (!element.checkValidity() && (!element.validationMessage || element.validationMessage === null || element.validationMessage === '')) { return false; } } } return result; } function sendReadNotice(){ if(unread_ids.length == 0) return; if(toggleStatus != 0) return; var msg = {'type':'read', 'msg_ids':unread_ids}; if(socket && socket.readyState == WebSocket.OPEN){ socket.send(JSON.stringify(msg)); unread_ids = []; } } function removeReadBadge(){ if(toggleStatus != 0) return; var badgeClasses = synalioDocument.getElementsByClassName('synalio-chat-window-notice-badge'); for(var i = 0; i < badgeClasses.length; i++){ badgeClasses[i].style.display = 'none'; } } function getCookie( name ) { var result = null; var cookieName = name + '='; var allcookies = synalioParentDocument.cookie; var position = allcookies.indexOf( cookieName ); if( position != -1 ) { var startIndex = position + cookieName.length; var endIndex = allcookies.indexOf( ';', startIndex ); if( endIndex == -1 ) { endIndex = allcookies.length; } result = decodeURIComponent( allcookies.substring( startIndex, endIndex ) ); } return result; } function isIpAddress(str) { let reg = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/ return reg.test(str) } function setCookie(doc, key, val, period, expires) { var cookie; if (expires) { cookie = key + '=' + val + ';expires=' + expires + ';path=/;'; } else { var maxAge = period || 2 * 365 * 24 * 60 * 60; cookie = key + '=' + val + ';max-age=' + maxAge + ';path=/;'; } if (!setCookie.domain) { let domainName = 'domain=.'; if (isIpAddress(location.hostname)) { setCookie.domain = location.hostname; domainName = 'domain=' } else { var components = location.hostname.split('.'); if (components.length > 2) { components.shift(); } setCookie.domain = components.join('.'); } doc.cookie = cookie + domainName + setCookie.domain; var savedVal = getCookie(key); if (savedVal != val) { setCookie.domain = location.hostname; doc.cookie = cookie + domainName + setCookie.domain; } } else { let domainName = 'domain=.'; if (isIpAddress(location.hostname)) { domainName = 'domain=' } doc.cookie = cookie + domainName + setCookie.domain; } } function setBadge(){ if(toggleStatus != 0 && unread_ids.length > 0){ var chatWindow = synalioDocument.getElementsByClassName("window-box")[0]; var badge; if(chatWindow.getAttribute('data-wtype') == 'img'){ badge = synalioDocument.getElementById('synalio-chat-window-notice-badge-img'); // adjust height let iframe = synalioParentDocument.getElementById('synalio-iframe'); let windowBox = synalioDocument.getElementsByClassName('window-box')[0]; let image_box = synalioDocument.getElementById("img-box-image"); iframe.style.height = closeImageHeight + closeImageBadgeHeight + 'px'; windowBox.style.height = closeImageHeight + closeImageBadgeHeight + 'px'; image_box.style.paddingTop = closeImageBadgeHeight + "px"; } else { badge = synalioDocument.getElementById('synalio-chat-window-notice-badge'); } if(badge){ badge.innerHTML = unread_ids.length; badge.parentElement.style.display = 'block'; } } } function toggleRtchatStatus(isRtchat, operatorIcon = undefined) { var chat_window = synalioDocument.getElementsByClassName("window-box")[0]; var homeLink = synalioDocument.getElementById("home-link"); if (isRtchat) { isCancelling = false chat_window.setAttribute("data-operation", "on"); synalioDocument.getElementsByClassName("def-icon")[0].style.display = 'none' var refresh_button = synalioDocument.getElementById("refresh-link"); if (refresh_button) { refresh_button.style.opacity = '1.0' } if (hide_input) { chat_window.setAttribute("data-footer", "on"); updateChatBoxMobile(); } if (homeLink) { homeLink.style.display = 'none'; } if (operatorIcon) { localStorage.setItem("operatorIcon", operatorIcon); } if (localStorage.getItem("operatorIcon")) { synalioDocument.getElementById('operator_icon').src = localStorage.getItem("operatorIcon"); } } else { chat_window.setAttribute("data-operation", ""); synalioDocument.getElementsByClassName("def-icon")[0].style.display = '' if (hide_input) { chat_window.setAttribute("data-footer", ""); } if (homeLink) { homeLink.style.cursor = 'pointer'; homeLink.style.display = ''; } if (sessionStorage.getItem("alwayshide") === 'true') { chat_window.setAttribute("data-footer", ""); } localStorage.removeItem("operatorIcon"); } // // CHANGED // synalio.resize(windowElement.offsetHeight); // } function overrideHideInputSetting(input_show_status, teijin) { var chat_window = synalioDocument.getElementsByClassName("window-box")[0]; var footerContainer = synalioDocument.getElementById('synalio-chat-footer-container'); var footMain = null; for (var i = 0; i < footerContainer.childNodes.length; i++) { if (footerContainer.childNodes[i].className == "foot-main") { footMain = footerContainer.childNodes[i]; footMain.style.display = ''; // Fix for IE11: don't show placeholder of chatbox-text-input on firsttime fixPlaceholderOnIE(); } } if (hide_input) { if (input_show_status === 1){ chat_window.setAttribute("data-footer", "on"); } else { chat_window.setAttribute("data-footer", ""); } } else { if (input_show_status === 2){ // synalio-chat-footer-container if (footMain) { //footMain.style.display = "none"; chat_window.setAttribute("data-footer", ""); sessionStorage.setItem("alwayshide", "true"); } //chat_window.setAttribute("data-footer", ""); } else { if (localStorage.getItem("alwayshide") === 'true') { if (input_show_status === 1) { chat_window.setAttribute("data-footer", "on"); sessionStorage.removeItem("alwayshide"); } } else { chat_window.setAttribute("data-footer", "on"); sessionStorage.removeItem("alwayshide"); } } } if (teijin) { chat_window.setAttribute("data-footer", "on"); } synalio.resize(windowElement.offsetHeight); updateChatBoxMobile(); } function updateChatBoxMobile() { if (isMobile && getCookie('r_window') === 'on') { synalioDocument.getElementsByClassName('main-box')[0].style.height = 'calc(100vh - ' + (getElementHeight('header-box') + getElementHeight('foot-box')) + 'px)'; } } function isRtchat(){ return synalioDocument.getElementsByClassName('window-box')[0].getAttribute('data-operation') == 'on'; } function checkUrl(s) { if (s !== undefined && s != null){ var httpPrefix = 'http://'; var httpsPrefix = 'https:///'; var str = s.replace(/\[.+\]/g, ''); if((str.length > httpPrefix.length && str.substr(0 ,httpPrefix.length) == httpPrefix) || (str.length > httpsPrefix.length && str.substr(0, httpsPrefix.length) == httpsPrefix)){ return true; } } return false; } function checkDemo(){ var demoValue = isDemo; var demoElem = synalioParentDocument.getElementById('synalio-demo'); if(demoElem){ try{ demoValue = parseInt(demoElem.value); }catch(ex){} } return demoValue; } smoothScr = { iterr : 20, // set timeout miliseconds ..decreased with 1ms for each iteration tm : null, //timeout local variable step : null, lastScrollTop: null, stopShow: function() { clearTimeout(this.tm); // stopp the timeout this.iterr = 15; // reset milisec iterator to original value }, anim : function (target, chatBody, chatHeader) // the main func { var step = (target.offsetTop - chatHeader.offsetHeight - chatBody.scrollTop) / 20.0; chatBody.scrollTop += step; if(this.iterr > 1) this.iterr -= 1; else this.itter = 0; if(this.lastScrollTop != chatBody.scrollTop && step > 1 && chatBody.scrollTop < target.offsetTop - chatHeader.offsetHeight){ this.lastScrollTop = chatBody.scrollTop; this.tm = window.setTimeout(function() { smoothScr.anim(target, chatBody, chatHeader); }, this.iterr); } else { this.stopShow(); } } }; toggleChatWindow = { closeType: design_close_type, initDisplayType: display_type, synalio: this, setting: { "chatH":600, "chatW":500, "chatHsp":100, "headerH":76, "footerH":64, "orignImgH":90, "orignImgW":170, }, closeMaxMin: function(e){ var self = this; var iframe = synalioParentDocument.getElementById('synalio-iframe'); var windowBox = synalioDocument.getElementsByClassName('window-box')[0]; //極小からchatサイズに変型 windowBox.setAttribute('data-chatanime', 'max-min_chat'); windowBox.addEventListener(animationEndEvent,(function(){ return function f(e){ if(e.animationName == "ChangeOpacityMaxMin"){ customChatSize(); windowBox.removeEventListener(animationEndEvent, f, false); } } })(1), false); if(logs.length == 0){ initData(); } }, closeMin: function(e){ //小さくなる //極小サイズに変型 var iframe = synalioParentDocument.getElementById('synalio-iframe'); var windowBox = synalioDocument.getElementsByClassName('window-box')[0]; windowBox.setAttribute('data-chatanime', 'min_max-min'); if(!isMobile){ windowBox.addEventListener(transitionEndEvent, function(){ iframe.style.width = windowBox.offsetWidth + 'px'; }); customCloseSize('max-min'); } else { windowBox.addEventListener(animationEndEvent,(function(){ return function f(e){ if(e.animationName == "ChangeOpacityBefoer"){ customCloseSize('max-min'); windowBox.removeEventListener(animationEndEvent, f, false); } } })(1), false); } }, closeTalk: function(e){ //極小サイズに変型 var self = this; var iframe = synalioParentDocument.getElementById('synalio-iframe'); var windowBox = synalioDocument.getElementsByClassName('window-box')[0]; windowBox.setAttribute('data-chatanime', 'talk_max-min'); windowBox.addEventListener(animationEndEvent,(function(){ return function f(e){ if(e.animationName == "setTimerOpacity" || e.animationName == "setTimerOpacity2" || e.animationName == "ChangeOpacityBefoer"){ customCloseSize('max-min'); if(!isMobile){ iframe.style.width = windowBox.offsetWidth + 'px'; } windowBox.removeEventListener(animationEndEvent, f, false); } } })(1), false); }, closeBox: function(e){ //極小サイズに変型 if(e){ e.preventDefault(); e.stopImmediatePropagation(); } var self = this; var iframe = synalioParentDocument.getElementById('synalio-iframe'); var windowBox = synalioDocument.getElementsByClassName('window-box')[0]; getElement('main-box').style.overflow = 'hidden'; windowBox.setAttribute('data-chatanime', 'box_max-min'); windowBox.addEventListener(animationEndEvent,(function(){ return function f(e){ if(e.animationName == "setTimerOpacity" || e.animationName == "ChangeOpacityBefoer"){ windowBox.removeEventListener(animationEndEvent,f,false); customCloseSize('max-min'); //$(".outer-talk-set-box").css({height: $(".over-talk-box").innerHeight(true) + "px"}); } } })(1),false); }, closeChat: function(e){ var self = this; var iframe = synalioParentDocument.getElementById('synalio-iframe'); var windowBox = synalioDocument.getElementsByClassName('window-box')[0]; //chatサイズを閉じる if(isMobile){ if(this.closeType === 'img' && no_minimize_visual){ windowBox.setAttribute('data-chatanime', 'chat_img'); windowBox.addEventListener(animationEndEvent,(function(){ return function f(e){ if(e.animationName == "NoDispOpacity"){ if (isAutoDisplayBanner) { self.toggleCloseChat(iframe, windowBox); } else { customCloseSize('img'); } windowBox.removeEventListener(animationEndEvent,f,false); } } })(1), false); } else { windowBox.setAttribute('data-chatanime', 'chat_max-min'); windowBox.addEventListener(animationEndEvent,(function(){ return function f(e){ if(e.animationName == 'NoDispOpacity'){ if (isAutoDisplayBanner) { self.toggleCloseChat(iframe, windowBox); } else { customCloseSize('max-min'); } windowBox.removeEventListener(animationEndEvent, f, false); } } })(1),false); } } else{ if(this.closeType === 'img' && no_minimize_visual){ windowBox.setAttribute('data-chatanime', 'chat_img'); windowBox.addEventListener(animationEndEvent,(function(){ return function f(e){ if(e.animationName == "setTimerOpacity"){ if (isAutoDisplayBanner) { self.toggleCloseChat(iframe, windowBox); } else { customCloseSize('max-min'); } windowBox.removeEventListener(animationEndEvent, f, false); }else if(e.animationName == "ChangeOpacityBefoer"){ if (isAutoDisplayBanner) { self.toggleCloseChat(iframe, windowBox); } else { customCloseSize('img'); } windowBox.removeEventListener(animationEndEvent, f, false); } } })(1),false); } else{ windowBox.setAttribute('data-chatanime', 'chat_max-min'); windowBox.addEventListener(animationEndEvent,(function(){ return function f(e){ if(e.animationName == "setTimerOpacity"){ if (isAutoDisplayBanner) { self.toggleCloseChat(iframe, windowBox); } else { customCloseSize('max-min'); } windowBox.removeEventListener(animationEndEvent, f, false); }else if(e.animationName == "ChangeOpacityBefoer"){ if (isAutoDisplayBanner) { self.toggleCloseChat(iframe, windowBox); } else { customCloseSize('max-min'); } windowBox.removeEventListener(animationEndEvent, f, false); } } })(1),false); } } synalio.hideChat(); }, toggleCloseChat: function(iframe, windowBox){ windowBox.setAttribute('data-show', ''); if(!isMobile){ windowBox.setAttribute('data-first', ''); } windowBox.setAttribute('data-chatanime', ''); windowBox.removeAttribute('style'); iframe.style.display = 'none'; }, onCloseClick: function(e){ if(e && !(e.target.id.indexOf('close') != -1 || (e.target.parentElement && e.target.parentElement.id.indexOf('close') != -1))){ return false; } if(e){ e.stopPropagation(); } var self = this; var windowBox = synalioDocument.getElementsByClassName('window-box')[0]; var displayType = windowBox.getAttribute('data-wtype'); if(displayType == 'max-min'){ this.closeMaxMin(e); } else if(displayType == 'min'){ this.closeMin(e); } else if(displayType == 'talk'){ this.closeTalk(e); } else if(displayType == 'box'){ this.closeBox(e); } else if(displayType == 'chat'){ this.closeChat(e); } if(displayType != 'max-min') { if(isMobile){ stopBodyScrolling(false); } } else { if(isMobile){ stopBodyScrolling(true); } } return false; }, onOpenClick: function(e){ if(e && (e.target.id.indexOf('close') != -1 || (e.target.parentElement && e.target.parentElement.id.indexOf('close') != -1))){ return false; } // In custom use case: call this function directly without toggle. isOpenedChat = true; toggleStatus = 0; hideCloseButton(); var self = this; var iframe = synalioParentDocument.getElementById('synalio-iframe'); var windowBox = synalioDocument.getElementsByClassName('window-box')[0]; var displayType = windowBox.getAttribute('data-wtype') isClosedWindowChat = true; if(displayType == 'max-min'){ windowBox.setAttribute('data-chatanime', 'max-min_chat'); windowBox.addEventListener(animationEndEvent, customChatSize); } else if(displayType == 'min'){ windowBox.setAttribute('data-chatanime', 'min_chat'); windowBox.addEventListener(animationEndEvent, customChatSize, false); } else if(displayType == 'talk'){ if(isMobile){ windowBox.setAttribute('data-chatanime', 'talk_chat'); windowBox.addEventListener(animationEndEvent, customChatSize); }else{ // getElement('main-box').style.height = getElement('main-box').clientHeight + 'px'; windowBox.setAttribute('data-chatanime', 'talk_chat'); windowBox.addEventListener(animationEndEvent,(function(){ return function f(e){ if(e.animationName == "setTimerOpacity2"){ getElement('main-box').removeAttribute('style'); customChatSize(); windowBox.removeEventListener(animationEndEvent, f, false); } } })(1),false); } } else if(displayType == 'box'){ if(e){ e.preventDefault(); e.stopImmediatePropagation(); } if(isMobile){ windowBox.setAttribute('data-chatanime', 'box_chat'); // windowBox.addEventListener(animationEndEvent, customChatSize); windowBox.addEventListener(animationEndEvent,(function(){ return function f(c){ if(c.animationName == "ChangeOpacityMaxMin"){ /*var mainBox = getElement('main-box'); mainBox.removeAttribute('style');*/ customChatSize(); windowBox.removeEventListener(animationEndEvent, f, false); } } })(1),false); }else{ windowBox.setAttribute('data-chatanime', 'box_chat'); windowBox.addEventListener('animationstart',function(c){ if(c.animationName == 'setTimerOpacity2'){ console.time('anim'); } }); windowBox.addEventListener(animationEndEvent,(function(){ return function f(c){ if(c.animationName == 'setTimerOpacity2'){ console.timeEnd('anim'); getElement('main-box').removeAttribute('style'); customChatSize(); windowBox.removeEventListener(animationEndEvent, f, false); } } })(1),false); //$(".main-box").css({height:$(".main-box").height() + "px"}); } } else if(displayType == 'img'){ windowBox.setAttribute('data-chatanime', 'img_chat'); windowBox.addEventListener(animationEndEvent, customChatSize, false); } }, initEvent: function(eventName, classNames, eventFunc){ for(var i = 0; i < classNames.length; i++){ var element = getElement(classNames[i]); if (!element) continue; if(element.firstElementChild && element.firstElementChild.tagName == 'a'){ element.firstElementChild.addEventListener(eventName, eventFunc, false); } else { element.addEventListener(eventName, eventFunc, false); } } }, initIframe: function(iframe, windowBox, retryCount){ var self = this; if(this.initDisplayType === 'img' && !closeImageLoaded){ if(!retryCount){ retryCount = 0; } else if(retryCount > 5){ return; } setTimeout(function(){ self.initIframe(iframe, windowBox, retryCount + 1); }, 1000) return; } if(isMobile){ if(this.initDisplayType === 'img'){ if (!isOpenedChat) { self.initImageVisualClose(iframe, windowBox); } }else{ if(iframe.style.visibility != 'hidden'){ windowBox.setAttribute('data-show', 'show'); } iframe.style.width = '100%'; iframe.style.height = !isFullScreen ? (windowBox.offsetHeight + 'px') : '100%'; } }else{ if(this.initDisplayType === 'img'){ if (!isOpenedChat) { self.initImageVisualClose(iframe, windowBox); } }else{ var delta = 0; if(this.initDisplayType == 'talk' && getElement('outer-talk-set-box').offsetHeight > 55){ // >= 2 lines of text delta = 20; } iframe.style.width = windowBox.offsetWidth + 'px'; windowBox.style.height = getElement('outer-box').offsetHeight + (windowBox.style.paddingTop ? windowBox.style.paddingTop.replace('px', '') : 10) * 2 + delta + 'px'; iframe.style.height = getElement('outer-box').offsetHeight + (windowBox.style.paddingTop ? windowBox.style.paddingTop.replace('px', '') : 10) * 2 + delta + 'px'; if(iframe.style.visibility != 'hidden'){ windowBox.setAttribute('data-show', 'show'); } } } }, initImageVisualClose: function(iframe, windowBox){ windowBox.style.width = closeImageWidth + 'px'; windowBox.style.padding = '0px'; if(iframe.style.visibility != 'hidden'){ windowBox.setAttribute('data-show', 'show'); } iframe.style.width = closeImageWidth + 'px'; let image_box = synalioDocument.getElementById("img-box-image"); let ajustHeight = 0; if (unread_ids.length > 0) { ajustHeight = closeImageBadgeHeight; } else if (!no_minimize_visual) { ajustHeight = closeImageMinimizeHeight; } if (ajustHeight > 0) { iframe.style.height = closeImageHeight + ajustHeight + 'px'; windowBox.style.height = closeImageHeight + ajustHeight + 'px'; image_box.style.paddingTop = ajustHeight + "px"; } else { iframe.style.height = closeImageHeight + 'px'; windowBox.style.height = closeImageHeight + 'px'; image_box.style.paddingTop = "0px"; } }, initScrollEvents: function(iframe){ var s = { insideIframe: false } iframe.addEventListener('mouseenter', function(e) { s.insideIframe = true; s.scrollX = e.scrollX; s.scrollY = e.scrollY; }); iframe.addEventListener('mouseleave', function() { s.insideIframe = false; }); document.addEventListener('scroll', function(e) { setCurrentScrollPosition(); if (s.insideIframe){ try{ e.scrollTo(s.scrollX, s.scrollY); }catch(ex){} } else{ e.preventDefault(); } }); }, onCloseChatWindow: function() { let closeWindowChat = Date.now(); if (!localStorage.getItem('closeWindowChat')) { localStorage.setItem('closeWindowChat', closeWindowChat) if (naCloseChatOpened && synalioWindow.Nanalytics) { synalioWindow.Nanalytics('send','event', {category: 'chatbot', action: 'close', label: 'close_chatbot'}, {close_chatbot: '1', app_unique_id: appid, scenario_id: scenario_id > 0 ? scenario_id : 0}); } } }, initEvents: function(iframe, windowBox){ let self = this; this.initEvent('click', ['btn-open-close'], function(e){ synalioParentDocument.body.style.position = objectCss.position; synalioParentDocument.body.style.width = objectCss.width; synalioParentDocument.body.style.overflow = objectCss.overflow; if (!synalioParentDocument.body.style.cssText){ synalioParentDocument.body.removeAttribute('style') } firstClick = false; objectCss = {}; hideActionSuggestion(); self.onCloseChatWindow(); toggle(1, e); }); this.initEvent('click', ['header-box', 'main-box', 'inner-box-btn-box', 'outer-talk-set-box', 'outer-box-set-box', 'img-box'], function(e){ toggle(0, e); }); if(isMobile){ this.initScrollEvents(iframe); } synalioDocument.getElementsByClassName("over-talk-box")[0].addEventListener('scroll', onChatBodyScroll); }, init: function(){ var self = this; if (synalio.session_closed) { return; } var iframe = synalioParentDocument.getElementById('synalio-iframe'); var windowBox = synalioDocument.getElementsByClassName('window-box')[0]; if(iframe.style.display == 'none'){ iframe.style.visibility = 'hidden'; iframe.style.display = ''; } this.initIframe(iframe, windowBox); var displayType = windowBox.getAttribute('data-wtype'); windowBox.setAttribute('data-pos', windowPosition); if(!isMobile && displayType != 'img'){ iframe.style.width = getWindowWidth() + 'px'; } var outerBoxSetBox = getElement('outer-box-set-box'); if (outerBoxSetBox) { outerBoxSetBox.style.height = getElementHeight('outer-box-set-box') + 'px'; } if(displayType === 'box'){ var mainBox = getElement('main-box'); mainBox.style.height = getElementHeight('main-box') + 'px'; if(!isMobile){ windowBox.style.height = (getElement('outer-box').offsetHeight + 40) + 'px'; iframe.style.height = (getElement('outer-box').offsetHeight + 40) + 'px'; } } else if(displayType === 'chat'){ windowBox.removeAttribute('style'); if(!isMobile){ iframe.style.height = getWindowHeight() + 'px'; } else { initMobileSize(iframe, windowBox); } } let iframeHeight = iframe.offsetHeight; // If not modal or already closed var cookie_modal_val = getCookie(cookie_modal_key); if (!display_as_modal || (cookie_modal_val === "0" && !isDemo)) { iframe.style.height = 'calc(' + iframe.offsetHeight + 'px + ' + position_close_box + ')'; } if(iframe.style.visibility == 'hidden'){ iframe.style.display = 'none'; iframe.style.visibility = ''; } //一発目のアニメーション判定 windowBox.addEventListener(animationEndEvent,(function(){ return function f(e){ if(e.animationName == "MoveBottomYRe"){ if (!isClosedWindowChat) { if (displayType !== 'img') { iframe.style.height = iframeHeight + 'px'; } else { iframe.style.height = windowBox.offsetHeight + 'px'; } iframe.style.bottom = position_close_box; }; windowBox.removeEventListener(animationEndEvent, f, false); windowBox.setAttribute('data-first', true); scroll(1); if(isFullScreen){ toggle(0); } } } })(1),false); this.initEvents(iframe, windowBox); // modal, allway display as modal if demo-mode if (display_as_modal && (cookie_modal_val !== "0" || isDemo)) { var modalStyle = getFrameStyleRelatedModal(iframe, true); var currentPosition = getFramePosition(iframe); setCookie(synalioParentDocument, cookie_modal_key, currentPosition, 1800); iframe.setAttribute("style", modalStyle); } }, }; function createChatWindowIframe() { var iframe = document.createElement("iframe"); iframe.setAttribute("id", 'synalio-iframe'); iframe.setAttribute("data-test", 'synalio-iframe'); iframe.setAttribute("scrolling", "no"); iframe.setAttribute("style", "border: 0px;background: none;display:none;"); getOrCreateUserId(); var url = "https://synalio.com/api/chatwindow"; var request = new XMLHttpRequest(); var chatwindowData = { 's': s, 'appid': "cd84fffe28904a0fb8c35d2a203d17c4", 'url': refererUrl, 'is_demo': isDemo, 'scenario_id': scenario_id, }; if (nonce) { chatwindowData['nonce'] = nonce; } if (isDemo && demo_scenario_id) { chatwindowData['demo_scenario_id'] = demo_scenario_id; } chatwindowData['nanalytics'] = nanalyticsParams; if (Object.keys(ext).length > 0) { chatwindowData['ext'] = ext; } if(isFullScreen){ chatwindowData['fs'] = 1; } request.open('POST', url); request.setRequestHeader('Content-Type', 'application/json'); request.setRequestHeader('SecCHUAPlatformVersion', secCHUAPlatformVersion); request.send(JSON.stringify(chatwindowData)); request.responseType = "document"; request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) { displayIframeWindow(iframe, request.response); } }; var chat_window = document.createElement("div"); chat_window.appendChild(iframe); synalioParentDocument.body.appendChild(chat_window); } function setIframeContentWindow(iframe, response) { var cookie_modal_val = getCookie(cookie_modal_key); iframe.setAttribute("style", "border: 0px;background: none;" + hiddenStyle); if(window.navigator.userAgent.toLowerCase().indexOf('firefox') != -1){ iframe.contentWindow.document.open('text/html', 'replace'); } else { iframe.contentWindow.document.open(); } var iframeHtml = '' + response.getElementsByTagName('html')[0].innerHTML + ''; iframe.contentWindow.document.write(iframeHtml); iframe.contentWindow.document.close(); if (display_as_modal && (cookie_modal_val !== "0" || isDemo)) { var modalStyle = "position: fixed;left: 0;top: 0;width: 100%;height: 100%;background-color: rgba(0, 0, 0, 0.5);"; modalStyle += "opacity: 1;visibility: visible;transform: scale(1.0); z-index: 999999999;"; modalStyle += "transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;"; iframe.parentNode.setAttribute("style", modalStyle); } if (synalioWindow.Nanalytics) { var visualId = response.getElementById('synalio-chat-visual-id'); visualId = visualId ? visualId.value : ''; var visualCreativeId = response.getElementById('synalio-chat-visual-creative-id'); visualCreativeId = visualCreativeId ? visualCreativeId.value : '' synalioWindow.Nanalytics('send', 'event', { category: 'chatbot', action: 'show', label: 'show_chatbot' }, { show_chatbot: '1', visual_id: visualId, visual_creative_id: visualCreativeId, app_unique_id: appid, scenario_id: scenario_id > 0 ? scenario_id : 0 }); } } function gambitGalleryIsInView(el) { if (el) { var scroll = window.scrollY || window.pageYOffset var boundsTop = el.getBoundingClientRect().top + scroll var viewport = { top: scroll, bottom: scroll + window.innerHeight, }; var bounds = { top: boundsTop, bottom: boundsTop + el.clientHeight, }; return ( bounds.bottom >= viewport.top && bounds.bottom <= viewport.bottom ) || ( bounds.top <= viewport.bottom && bounds.top >= viewport.top ); } else { return false } }; function displayIframeWindow(iframe, response) { if (!response) { return; } var scenarioIdEle = response.getElementById("synalio-chat-window-scenario-id"); if (scenarioIdEle && scenarioIdEle.value) { scenario_id = parseInt(scenarioIdEle.value); } var displayNow = false; let modal_display_flg = response.getElementById('synalio-chat-visual-display_as_modal'); // With chatvisual company => check hide_input flag from chatvisual's settings let chatbox_hide_input = response.getElementById('synalio-chat-visual-chatbox_hide_input'); if (chatbox_hide_input && chatbox_hide_input.value > '') { hide_input = chatbox_hide_input.value === '1'; } let no_minimize_visual_elm = response.getElementById('synalio-chat-visual-no_minimize_visual'); no_minimize_visual = no_minimize_visual_elm && no_minimize_visual_elm.value == '1'; let cookie_modal_val = getCookie(cookie_modal_key); if (modal_display_flg && modal_display_flg.value == '1') { display_as_modal = true; } else { display_as_modal = false; } if (display_as_modal && (cookie_modal_val !== "0" || isDemo)) { displayNow = true; } userState = response.getElementById("synalio-chat-window-scenario").value; var prevState = localStorage.getItem('synalioState'); if (userState && prevState != userState) { setCookie(synalioParentDocument, 'r_window', 'off', 1800); localStorage.setItem('synalioState', userState); resetCloseWindowChat(); } if (displayNow) { setIframeContentWindow(iframe, response); return; } hiddenStyle = "display:none;"; var displaySetting = JSON.parse(response.getElementById("synalio-chat-window-display-setting").value); autoOpenTime = displaySetting.auto_open_time; position_close_box = displaySetting.position_close_box; if (displaySetting.appear_type == 2) { if (getCookie('r_window') === 'on') { setIframeContentWindow(iframe, response); } else { var element = document.querySelector('#'+displaySetting.appear_value); if (element) { hiddenStyle = ""; if (gambitGalleryIsInView(element)) { setIframeContentWindow(iframe, response); } else { window.addEventListener('scroll', function handleWindowScroll() { if (gambitGalleryIsInView(element)) { window.removeEventListener('scroll', handleWindowScroll, true); setIframeContentWindow(iframe, response); } }, true); } } } } else if (displaySetting.appear_type == 3) { isAutoDisplayBanner = true; setIframeContentWindow(iframe, response); } else { if (displaySetting.appear_type == 1) { isAutoDisplayBanner = true; } hiddenStyle = ""; if (getCookie('r_window') === 'on') { setIframeContentWindow(iframe, response); } else { var displayTime = parseInt(displaySetting.appear_value); setTimeout(function () { setIframeContentWindow(iframe, response); }, displayTime * 1000); } } } function createWindowAction() { if (createWindowAction.wasCalled) { return; } createWindowAction.wasCalled = true; isHideChatBox = !(isDemo === 1 || isPublish === 1); if (isHideChatBox) { return; } createChatWindowIframe(); } function resetCloseWindowChat() { localStorage.removeItem('closeWindowChat'); naCloseChatOpened = true; isClosedWindowChat = false; } function getFramePosition(currIframe) { var positionDict = { "top": "undefined", "bottom": "undefined", "left": "undefined", "right": "undefined" } var currTop = currIframe.style.top; if (typeof currTop !== undefined && currTop > "") { currTop = currTop.toString(); positionDict["top"] = currTop; } var currBottom = currIframe.style.bottom; if (typeof currBottom !== undefined && currBottom > "") { currBottom = currBottom.toString(); positionDict["bottom"] = currBottom; } var currLeft = currIframe.style.left; if (typeof currLeft!== undefined && currLeft > "") { currLeft = currLeft.toString(); positionDict["left"] = currLeft; } var currRight = currIframe.style.right; if (typeof currRight!== undefined && currRight > "") { currRight = currRight.toString(); positionDict["right"] = currRight; } return JSON.stringify(positionDict); } function getFrameStyleRelatedModal(currIframe, isModal) { var frameStyle = "z-index:" + chatbox_zindex + ";"; if (isModal) { // has z-index bigger than campaign-modal frameStyle = "z-index: 999999999;top: 50%; left: 50%;transform: translate(-50%, -50%);"; } else { // get from cookie. To do check case expired var cookiePos = getCookie(cookie_modal_key); if (!cookiePos || cookiePos === "0") { cookiePos = getCookie(cookie_modal_key_bk); } if (cookiePos !== null && cookiePos.indexOf("top") > -1) { jsonPos = JSON.parse(cookiePos); frameStyle += jsonPos.top !== "undefined" ? "top: " + jsonPos.top + ";" : ""; frameStyle += jsonPos.bottom !== "undefined" ? "bottom: " + jsonPos.bottom + ";" : ""; frameStyle += jsonPos.left !== "undefined" ? "left: " + jsonPos.left + ";" : ""; frameStyle += jsonPos.right !== "undefined" ? "right: " + jsonPos.right + ";" : ""; } } // get current other style, except top/bottom/left/right var currPosition = currIframe.style.position; if (typeof currPosition !== undefined && currPosition > "") { currPosition = currPosition.toString(); frameStyle += "position: " + currPosition + ";"; } var currBorder = currIframe.style.border; if (typeof currBorder !== undefined && currBorder > "") { currBorder = currBorder.toString(); frameStyle += "border: " + currBorder + ";"; } var currBackground = currIframe.style.background; if (typeof currBackground !== undefined && currBackground > "") { currBackground = currBackground.toString(); frameStyle += "background: " + currBackground + ";"; } var currWidth = currIframe.style.width; if (typeof currWidth !== undefined && currWidth > "") { currWidth = currWidth.toString(); frameStyle += "width: " + currWidth + ";"; } var currHeight = currIframe.style.height; if (typeof currHeight !== undefined && currHeight > "") { currHeight = currHeight.toString(); frameStyle += "height: " + currHeight + ";"; } var currDisplay = currIframe.style.display; if (typeof currDisplay !== undefined && currDisplay > "") { currDisplay = currDisplay.toString(); frameStyle += "display: " + currDisplay + ";"; } var currVisibility = currIframe.style.visibility; if (typeof currVisibility !== undefined && currVisibility > "") { currVisibility = currVisibility.toString(); frameStyle += "visibility: " + currVisibility + ";"; } return frameStyle; } function closeChatWindowModal() { // only process if chat-window setting as modal & already not yet closed let cookie_display_curr_val = getCookie(cookie_modal_key); // for case open link if (!cookie_display_curr_val || cookie_display_curr_val === "0") { cookie_display_curr_val = getCookie(cookie_modal_key_bk); } let modal_not_closed = cookie_display_curr_val !== null && cookie_display_curr_val !== "0"; if (display_as_modal && modal_not_closed) { var iframe = synalioParentDocument.getElementById('synalio-iframe'); iframe.parentNode.style = ""; var frameNewStyle = getFrameStyleRelatedModal(iframe, false); iframe.setAttribute("style", frameNewStyle); setCookie(synalioParentDocument, cookie_modal_key, "0", 1800); } } function loadRichMenu(){ if(!richMenu){ var richMenuToggle = getElement('switch-menu-btn-box'); richMenuToggle.style.display = 'none'; } else { toggleRichMenu(); synalioDocument.querySelectorAll(".rich-disp-btn-box span")[0].addEventListener("click", toggleRichMenu, false); synalioDocument.querySelector(".switch-menu-btn-box").addEventListener("click", toggleRichMenu, false); } } function toggleRichMenu(){ var windowBox = synalioDocument.querySelector('.window-box'); if(!windowBox){ setTimeout(function(){ toggleRichMenu(); }, 500); return; } var richmenu = synalioDocument.querySelector('.rich-menu'); var richmenuin = synalioDocument.querySelector('.rich-menu > div'); var richbtnbox = synalioDocument.querySelector('.sbtn-box'); var mainchatpad = synalioDocument.querySelector('.inner-talk-set[data-talktype="chat"]'); var outerbox = synalioDocument.querySelector('.over-talk-box'); var screenSize = getScreenSize(); if(!isMobile){ var richMenuWidth = getWindowWidth() - 40; }else { var richMenuWidth = mobileInnerWidth * screenSize.width / 100; } if(windowBox.getAttribute('data-richdisp') == 'on'){ richmenu.removeAttribute('style'); outerbox.removeAttribute('style'); mainchatpad.removeAttribute("style"); windowBox.setAttribute('data-richdisp', 'off'); }else { // var rH = Math.round((richdispw.clientWidth / 16) * 9) + 'px'; var rH = Math.round((richMenuWidth / 16) * 9) + 'px'; richbtnbox.style.height = richmenuin.style.height = richmenu.style.height = rH; outerbox.style.height = 'calc(100% - ' + rH + 1 + ')'; mainchatpad.style.paddingBottom = rH; windowBox.setAttribute('data-richdisp', 'on'); //めんどくさいからjqueryで書いちゃった // TODO: to be confirmed with Ishihara-san scrollRichMenu(); // $('.over-talk-box').animate({scrollTop: mainchatpad.clientHeight + 'px'}, 200); } if(!richMenuInit){ richMenuInit = true; var rH = Math.round((richMenuWidth / 16) * 9) + 'px'; richbtnbox.style.height = richmenuin.style.height = richmenu.style.height = rH; outerbox.style.height = 'calc(100% - ' + rH + 1 + ')'; showRichMenu(windowBox); } } function showRichMenu(windowBox){ windowBox.setAttribute('data-richdisp', 'on'); var richMenuImage = getElement('rich-bg-img'); richMenuImage.setAttribute('src', richMenu.image_url); var buttonsContainer = getElement('sbtn-box'); buttonsContainer.setAttribute('data-selectnum', richMenu.display); var decoClass = ''; for(var i = 0; i < richMenu.buttons.length; i++){ var btnVal1 = richMenu.buttons[i].type == 'text' ? richMenu.buttons[i].value.replace(/"/g,'"') : ''; var btnVal2 = richMenu.buttons[i].type == 'url' ? richMenu.buttons[i].value : richMenu.buttons[i].value.replace(/"/g,'"'); var btnVal3 = richMenu.buttons[i].type == 'url' && richMenu.buttons[i].value && richMenu.buttons[i].uri_target ? richMenu.buttons[i].uri_target : ''; var buttonValue = chat_message_rich_menu_button_tmpl.replace(/@1/g, btnVal1).replace(/@2/g, btnVal2).replace(/@3/g, decoClass).replace(/@4/g, btnVal3); buttonsContainer.appendChild(htmlToElement(buttonValue)); } var buttonElems = buttonsContainer.getElementsByClassName("select-btn"); for (var i = 0; i < buttonElems.length; i++) { cspHandleOnClick(buttonElems[i]); } } function scrollRichMenu(){ scroll(1); scrollRichMenuOnTop(); } function scrollRichMenuOnTop(count){ /* ensure scroll to bottom of above rich menu */ if(!count){ count = 0; } else if(count > 20){ return; } var chatBody = synalioDocument.getElementsByClassName("over-talk-box")[0]; setTimeout(function(){ chatBody.scrollTop += 20; scrollRichMenuOnTop(count + 1) }, 15); } /** carousel start **/ synalio_carousel = { data: {}, init: function(id){ this.data[id] = { carlist: null, carnum: null, listw: null, maxlistw: null, carpad: null, zsize: null, optionobj: null, changelate: null, beforemovex: null, startX: 0, scrollX: 0, scrollY: 0, peascrollY: 0, beforeMove: 0, nowMove: 0, moveX: null, rmoveflg: false, lmoveflg: false }; }, show: function(id, imageCarouselSize){ this.init(id); var chatbase = synalioDocument.querySelectorAll('.over-talk-box')[0]; var outerbases = synalioDocument.querySelectorAll('.custom-outer-box'); var outerbase = outerbases[outerbases.length - 1]; var carbases = synalioDocument.querySelectorAll('[data-cbtype="carousel"]'); var carbase = carbases[carbases.length - 1]; var caruls = synalioDocument.getElementsByClassName('swiper-container'); var carul = caruls[caruls.length - 1]; this.data[id].carlist = carul.children; this.data[id].carnum = this.data[id].carlist.length; this.data[id].carpad = !isMobile ? 10 : (isFullScreen ? 40 : 10);;//list between size this.data[id].zsize = !isMobile ? 0.9 : (isFullScreen ? 0.8 : 0.85); this.data[id].changelate = 0.2; carbase.setAttribute('data-index', (this.data[id].carnum - 1)); carbase.setAttribute('data-active', 0); // main-box max width var listbase = synalioDocument.querySelector('.inner-talk-set[data-talktype="chat"]'); var screenSize = getScreenSize(); if(!isMobile){ var listwidth = this.data[id].listw = (getWindowWidth() - 100) * this.data[id].zsize - scrollBarWidth; outerbase.style.width = (getWindowWidth() - 40 - scrollBarWidth) + 'px'; outerbase.style.marginLeft = '-30px'; // from css calc(100% - 60px) var chatbaseWidth = parseInt(outerbase.style.width.replace('px', '')); }else { var chatbaseWidth = mobileInnerWidth * screenSize.width / 100; var listwidth = this.data[id].listw = chatbaseWidth * this.data[id].zsize; outerbase.style.width = chatbaseWidth + 'px'; //cssから切り替え outerbase.style.marginLeft = -0.08/2 * screenSize.width + 'px'; // from css calc(100% - 8vw) } if(this.data[id].carnum > 1){ if('ontouchstart' in document.documentElement){ carul.addEventListener('touchstart', carouselMouseDown, false); }else{ carul.addEventListener('mousedown', carouselMouseDown, false); } var optionobjParent = synalioDocument.getElementById('option-arr-box-' + id); optionobjParent.style.top = imageCarouselSize == '1_1' ? '100px': '40px'; var optionobj = optionobjParent.children; for(var i = 0 ; i < optionobj.length; i++){ optionobj[i].addEventListener("click", carouselChangeArrMove, false); } carbase.setAttribute('data-list-none', 'left'); }else{ carbase.setAttribute('data-list-none', 'all'); } carbase.style.width = this.data[id].maxlistw = (listwidth + this.data[id].carpad) * this.data[id].carnum - (this.data[id].carpad) + ((chatbaseWidth - listwidth) / 2) + 'px'; this.data[id].maxlistw = this.data[id].maxlistw.replace('px', ''); for(var i = 0 ; i < this.data[id].carnum; i++){ this.data[id].carlist[i].style.width = listwidth + 'px'; if(this.data[id].carlist[i].firstElementChild.classList.contains("header-block")){ this.data[id].carlist[i].firstElementChild.style.height = Math.round(listwidth / 16 * 9) + 'px'; if (imageCarouselSize == '1_1') { this.data[id].carlist[i].firstElementChild.style.height = Math.round(listwidth) + 'px'; } this.data[id].carlist[i].lastElementChild.style.height = 'calc(100% - ' + this.data[id].carlist[i].firstElementChild.style.height.replace('px', '') + 'px)'; } } carul.style.marginLeft = (chatbaseWidth - listwidth) / 2 + 'px'; }, deleteButtons: function(){ var options = synalioDocument.getElementsByClassName('option-block'); while(options.length > 0){ if(options[0].parentNode){ options[0].parentNode.removeChild(options[0]); } } } }; function carouselMouseDown(e){ var id = this.getAttribute('data-id'); synalio_carousel.data[id].beforemovex = 0; this.classList.add('drag'); if(e.type === 'mousedown') { var event = e; }else{ var event = e.changedTouches[0]; } var tx = this.style.transform.split(',')[0]; if(tx != ""){ tx = tx.replace('translate3d(','').replace('px', ''); }else{ tx = 0; } synalio_carousel.data[id].startX = event.pageX - tx; synalio_carousel.data[id].startPageX = event.pageX; synalio_carousel.data[id].moveX = event.pageX - tx; synalio_carousel.data[id].scrollX = synalio_carousel.data[id].scrollY = 0; synalio_carousel.data[id].scrollX = event.pageX; synalio_carousel.data[id].scrollY = event.pageY; synalio_carousel.data[id].peascrollY = getElement('over-talk-box').scrollTop; var drag = synalioDocument.getElementById('custom-outer-box-' + id); drag.addEventListener('mouseup', carouselMouseUp, false); drag.addEventListener('mousemove', carouselMouseMove, false); drag.addEventListener('touchmove', carouselMouseMove, false); drag.addEventListener('mouseleave', carouselMouseUp, false); drag.addEventListener('touchleave', carouselMouseUp, false); drag.addEventListener('touchend', carouselMouseUp, false); } function carouselMouseMove(e){ var id = this.getAttribute('data-id'); var drag = synalioDocument.getElementById('swiper-container-' + id); if(e.type === 'mousemove') { var event = e; } else { var event = e.changedTouches[0]; } var tempx = event.pageX; var tempy = event.pageY; var absx = Math.round(Math.abs(tempx - synalio_carousel.data[id].scrollX)); var absy = Math.round(Math.abs(tempy - synalio_carousel.data[id].scrollY)); if(absx > absy){ drag.style.transform = 'translate3d(' + (event.pageX - synalio_carousel.data[id].moveX + 'px') + ',0,0)'; var carbase = synalioDocument.getElementById('custom-box-' + id); } } function carouselMouseUp(e){ var id = this.getAttribute('data-id'); if(e.pageX == undefined){ e.pageX = e.changedTouches[0].pageX; } if(e.type === 'mousemove' || e.type === 'mouseup' || e.type === 'mouseleave') { var event = e; }else { var event = e.changedTouches[0]; } var carbase = synalioDocument.getElementById('custom-box-' + id); changeActiveList(id, carbase, event.pageX - synalio_carousel.data[id].moveX,event.pageX); var drag = synalioDocument.getElementById('custom-outer-box-' + id); drag.removeEventListener('mouseup', carouselMouseUp, false); drag.removeEventListener('touchend', carouselMouseUp, false); drag.removeEventListener('mousemove', carouselMouseMove, false); drag.removeEventListener('touchmove', carouselMouseMove, false); drag.removeEventListener('mouseup', carouselMouseUp, false); drag.removeEventListener('touchend', carouselMouseUp, false); drag.removeEventListener('mouseleave', carouselMouseUp, false); drag.classList.remove('drag'); var carbase = synalioDocument.getElementById('custom-box-' + id); checkMoveMax(carbase); } function carouselChangeArrMove(e){ //e.preventDefault(); var tt = e.currentTarget; var id = this.getAttribute('data-id'); var carbase = synalioDocument.getElementById('custom-box-' + id); var nact = carbase.getAttribute('data-active'); if(tt.getAttribute('data-arr') == 'left'){//左に移動 changeActiveListArr(carbase, parseInt(nact) - 1); }else{//右に移動 changeActiveListArr(carbase, parseInt(nact) + 1); } } function setArrObj(carbase, t){ carbase.setAttribute('data-list-none', t); } function checkMoveMax(carbase){ var id = carbase.getAttribute('data-id'); var active = carbase.getAttribute('data-active'); var carul = synalioDocument.getElementById('swiper-container-' + id); carul.classList.add('caru-transition'); var carnum = synalio_carousel.data[id].carnum; if(active == 0 ){//max left list carul.style.transform = 'translate3d(0px,0,0)'; setArrObj(carbase, 'left'); }else if(parseInt(active) >= carnum - 1 ){//max right list carul.style.transform = 'translate3d(-' + (synalio_carousel.data[id].maxlistw - (synalio_carousel.data[id].listw + parseInt(carul.style.marginLeft.replace('px', '')))) + 'px,0,0)'; setArrObj(carbase, 'right'); }else{//other carul.style.transform = 'translate3d(-' + ((synalio_carousel.data[id].listw + synalio_carousel.data[id].carpad) * carbase.getAttribute('data-active')) + 'px,0,0)'; setArrObj(carbase, ''); } synalio_carousel.data[id].rmoveflg = false; synalio_carousel.data[id].lmoveflg = false; carul.addEventListener('transitionend', removeTransitionClass, false); } function removeTransitionClass(){ this.removeEventListener('transitionend', removeTransitionClass); this.classList.remove('caru-transition'); } function changeActiveListArr(carbase, l){ carbase.setAttribute('data-active', l); checkMoveMax(carbase); } /** * mx : trasnlateXの移動距離。 * **/ function changeActiveList(id, carbase, mx,_nowX){ var aindex; var now_active = parseInt(carbase.getAttribute("data-active")); var _margin = 50; if(synalio_carousel.data[id].startPageX < _nowX){// Left Card if((synalio_carousel.data[id].startPageX + _margin) < _nowX){ now_active += -1; } }else{//Right Crad if((synalio_carousel.data[id].startPageX - _margin) > _nowX){ now_active += 1; } } if(now_active < 0){ now_active = 0; } if(now_active >= synalio_carousel.data[id].carnum){ now_active = synalio_carousel.data[id].carnum - 1; } aindex = now_active; if(aindex !== undefined){ carbase.setAttribute('data-active', aindex); } } /** carousel end **/ function hideActionSuggestion(){ isShowSuggestion = false; var actionSuggestionBox = synalioDocument.getElementById("synalio-chat-suggestion"); actionSuggestionBox.innerHTML = ""; actionSuggestionBox.style.display="none"; suggestionLength = 0; currentSuggestionLine = -1; } function focusSuggestionBox(){ if(currentSuggestionLine > -1){ var actionSuggestionBox = synalioDocument.getElementById("synalio-chat-suggestion"); var focusLine = actionSuggestionBox.querySelector('.focus'); if(focusLine){ focusLine.classList.remove("focus"); } actionSuggestionBox.focus(); var focusLine = actionSuggestionBox.childNodes[currentSuggestionLine]; focusLine.classList.add("focus"); var chat_input = synalioDocument.getElementById("synalio-chat-text-input"); var focusLineValue = focusLine.getAttribute("data-text"); chat_input.value = decodeSystemMarks(focusLineValue); resizeTextArea(chat_input); } } function receiveActionSuggestion(){ switch(xhr_page.readyState) { case 4: if (((200 <= xhr_page.status && xhr_page.status < 300) || (xhr_page.status == 304)) && xhr_page.responseText) { var json = JSON.parse(xhr_page.responseText); var actionSuggestionBox = synalioDocument.getElementById("synalio-chat-suggestion") actionSuggestionBox.innerHTML = ""; suggestionLength = json.result.length; json.result.forEach(function(hit){ var action_text = hit._source.action_text; var query_text = hit.query_text; var escape_query_text = hit.escape_query_text; let highlight_text = hit.process_highlight || null; if(!highlight_text){ var decode_action_text = decodeSystemMarks(action_text); highlight_text = decode_action_text.replace(new RegExp(escape_query_text, 'g'), "" + query_text + ""); } else { highlight_text = decodeSystemMarks(highlight_text); } var feedback_form = htmlToElement(chat_suggestion_line_tmpl.replace(/@1/g, highlight_text) .replace(/@2/g, "'" + action_text + "'") .replace(/@3/g, action_text)); actionSuggestionBox.appendChild(feedback_form); if (nonce) { var lastElem = actionSuggestionBox.lastChild; lastElem.onclick = function () { parent.synalio.onSuggestionLineSelect(action_text); } lastElem.onmouseover = function (event) { parent.synalio.onSuggestionLineHover(event.target); } } }); if(suggestionLength > 0){ actionSuggestionBox.style.display="block"; }else{ hideActionSuggestion(); } } break; } } function receiveRtchatSurveyFlag(){ switch(xhr_page.readyState) { case 4: if (((200 <= xhr_page.status && xhr_page.status < 300) || (xhr_page.status == 304)) && xhr_page.responseText) { var json = JSON.parse(xhr_page.responseText); show_rtchat_survey = json.is_satisfaction_survey_enabled == "1"; } break; } } function getComputedStyle(element, styleName){ return element.currentStyle ? element.currentStyle[styleName] : window.getComputedStyle ? window.getComputedStyle(element, null).getPropertyValue(styleName) : null; } function hideCloseButton() { let visualClose = synalioDocument.getElementById('synalio-visual-close'); if (visualClose) { visualClose.style.display = 'none'; } } return { onFocusInput: function(){ setFocusInput(true); }, onBlurInput: function(){ setFocusInput(false); }, onLoadEvent: function(){ if(window.parent){ // In case script is embeded in iframe synalioParentDocument = window.parent.document; synalioParentWindow = window.parent } else { synalioParentDocument = document; synalioParentWindow = window; } // Cypress handler: parent window is in aut-iframe. if(cypressIframes && cypressIframes.length > 0){ synalioParentWindow = cypressIframes[0].contentWindow; synalioParentDocument = cypressIframes[0].contentDocument; } getOrCreateUserId(); if (synalioWindow.Nanalytics) { synalioWindow.Nanalytics('get',function(params) { updateNanalyticsParams(params); createWindowAction(); }); setTimeout(function () { createWindowAction(); }, 500); } else { createWindowAction(); } }, reloadEvent: function(){ var ele = document.getElementById("synalio-iframe"); if (ele) { ele.remove(); } createWindowAction.wasCalled = false; refererUrl = location.href; scenario_id = 0; toggleStatus = -1; naCloseChatOpened = false; isOpenedChat = false; is_toggled = false; is_sent_init = false; richMenuInit = false; closeWs(); synalio.onLoadEvent(); }, loadChatVisual: function(design) { design_height_mobile = design.height_mobile; design_button_color = design.button_color; design_text_color2 = design.text_color2; design_sub_color = design.sub_color; design_width = design.width; design_height = design.height; design_width_mobile = design.width_mobile; design_close_type = design.close_type; display_type = design.display_type; toggleChatWindow.closeType = design.close_type; toggleChatWindow.initDisplayType = design.display_type; }, changeIframeStyle: function(){ synalioDocument = synalioParentDocument.getElementById('synalio-iframe').contentDocument; windowElement = synalioDocument.getElementsByClassName("window-box")[0]; header = synalioDocument.getElementsByClassName("header-box")[0]; body = synalioDocument.getElementsByClassName("main-box")[0]; bodyInner = synalioDocument.getElementsByClassName("over-talk-box")[0]; bodyOuter = synalioDocument.getElementsByClassName("outer-box")[0]; footer = synalioDocument.getElementsByClassName("foot-box")[0]; synalioParentDocument.getElementById('synalio-iframe').setAttribute("style", iframeStyle + hiddenStyle); scrollBarWidth = getScrollBarWidth(); toggleChatWindow.init(); windowElement.style.visibility = "hidden"; var ta = synalioDocument.getElementById("synalio-chat-text-input"); ta.addEventListener("input", function(e){ resizeTextArea(e.target) } ); ta.innerHTML = ''; synalioParentWindow.addEventListener('resize', function(e){ resizeFitBrowser(e.target); }); }, onAfterIframeLoad: function(){ windowElement = synalioDocument.getElementsByClassName("window-box")[0]; var verticalAlign = getComputedStyle(windowElement, "vertical-align"); if (verticalAlign != "top") { var msg = "Failed to load resource: synalio.css"; console.warn(msg); windowElement.style.visibility = "hidden"; return; } getLogs(s, sessionId); synalio.onCompleteLoad(); synalio.onCheckClosedWindowChat(); }, onKeyPressed: function(e){ var mode = -1; if (e.keyCode == 13 && (e.shiftKey || e.metaKey || e.ctrlKey)){ mode = keyPressMode == 1 ? 1 : 0; e.preventDefault(); } else if (e.keyCode == 13) { mode = keyPressMode == 1 ? 0 : 1; e.preventDefault(); } if (mode == 0){ var chat_input = synalioDocument.getElementById("synalio-chat-text-input"); if (chat_input.value){ var msg = chat_input.value; sendMessage(msg); chat_input.value = ""; deleteReplyOptions(); deleteSubmitForms(); resetMultiLine(); } } else if (mode == 1) { var chat_input = synalioDocument.getElementById("synalio-chat-text-input"); var start = chat_input.selectionStart, end = chat_input.selectionEnd; chat_input.value = chat_input.value.substring(0, start)+ "\n" + chat_input.value.substring(end); chat_input.selectionEnd = chat_input.selectionStart = start+1; resizeTextArea(e.target); } if(isRtchat() == false){ if ((e.keyCode == 38 || e.keyCode == 40)){ var chat_input = synalioDocument.getElementById("synalio-chat-text-input"); if(chat_input.value == lastInputText && isShowSuggestion){ if (e.keyCode == 38) {//arrowUp currentSuggestionLine = suggestionLength - 1; } else if (e.keyCode == 40){//arrowDown currentSuggestionLine = 0; } focusSuggestionBox(); resizeTextArea(e.target); } } else if(e.keyCode == 27){ hideActionSuggestion(); } } }, onPressLink: function(e){ var dataValue = e.getAttribute('data-val'); var dataValueTarget = e.getAttribute('data-val-target'); var isUrl = checkUrl(dataValue); if(richMenu && richMenu.auto_close){ var windowBox = getElement('window-box'); if(windowBox.getAttribute('data-richdisp') == 'on'){ toggleRichMenu(); } } if(isUrl){ // Set before and after openlink because of Chrome issues on cookies if (!display_as_modal) { setCookie(synalioParentDocument, 'r_window', 'off', 1800); } var postData = { 'event_type': 'chat_message_sent', 'event_data': { 'unique_id': appid, 'user_id': s, 'behaviour': 'link_clicked', 'message': '[link]' + e.getAttribute('data-val-label'), 'url': dataValue, 'scenario_id': scenario_id, } }; sendAnalyticsData(postData); openLink(dataValue, dataValueTarget); // clear modal cookie if (display_as_modal) { var cookie_modal_val = getCookie(cookie_modal_key); setCookie(synalioParentDocument, cookie_modal_key_bk, cookie_modal_val, 1800); setCookie(synalioParentDocument, cookie_modal_key, '', null, 'Thu, 01 Jan 1970 00:00:00 UTC'); } return; } sendMessage(dataValue, false, true); deleteReplyOptions(); deleteSubmitForms(); synalio_carousel.deleteButtons(); }, onPressMessageLink: function(e){ var urlRegex = /((http|https|file):\/\/[^\s]+)/g; var htmlContent = e.innerHTML; var index = htmlContent.search(urlRegex); if (index != -1) { setCookie(synalioParentDocument, 'r_window', 'off', 1800); return; } }, onPressCloseRtchat: function(){ if (!isCancelling) { isCancelling = true; var msg = {'type':'close_rtchat'}; if(checkDemo() == 1){ msg['demo'] = 1; } if(socket && socket.readyState == WebSocket.OPEN){ socket.send(JSON.stringify(msg)); } return false; } }, onCloseBrowserOrReload: function(){ if (!isCancelling) { isCancelling = true; var msg = {'type':'close_window'}; if(checkDemo() == 1){ msg['demo'] = 1; } if(socket && socket.readyState == WebSocket.OPEN){ socket.send(JSON.stringify(msg)); } return false; } }, toggle: function(e, event){ if (navigator.userAgent.match(/(iPhone|iPod|iPad)/i)) { setTimeout(function(){ updateChatBoxMobile(); },500) } var windowBox = synalioDocument.getElementsByClassName('window-box')[0]; if(windowBox.getAttribute('data-wtype') != 'max-min'){ if(toggleStatus == e){ return; } toggleStatus = e; } else { toggleStatus = 0; } var r_window = toggleStatus == 1 ? "off" : "on"; setCookie(synalioParentDocument, 'r_window', r_window, 1800); hideCloseButton(); if(e == 1){ if(!event){ toggleChatWindow.closeChat(event); } else { toggleChatWindow.onCloseClick(event); } } else if (!isHideChatBox) { isOpenedChat = true; if(!event){ var iframe = synalioParentDocument.getElementById('synalio-iframe') var windowBox = synalioDocument.getElementsByClassName('window-box')[0]; iframe.style.display = ''; // hide first then re-show after chatwindow opened var imgBoxs = synalioDocument.getElementsByClassName("img-box"); var imgBox = imgBoxs && imgBoxs.length > 0 ? imgBoxs[0] : null; if (imgBox) { imgBox.style.display = "none"; } windowBox.setAttribute('data-show', 'show'); var contentElements = synalioDocument.getElementsByClassName('chat-message-body'); for(var i = 0; i < contentElements.length; i++){ if(!contentElements[i].getAttribute('data-talkshow')){ contentElements[i].setAttribute('data-talkshow', 'talkshow'); } } resizeFitBrowser(synalioParentWindow); toggleChatWindow.onOpenClick(event); if (imgBox) { setTimeout(function() { imgBox.style.display = ''; }, 1000); } } else { toggleChatWindow.onOpenClick(event); naCloseChatOpened = false; if (synalioWindow.Nanalytics) { synalioWindow.Nanalytics('send','event', {category:'chatbot', action:'click', label:'click_chatbot'}, {click_chatbot: '1', app_unique_id: appid, scenario_id: scenario_id > 0 ? scenario_id : 0}); } } initData(); // Scroll // CHANGED if(!is_toggled){ // new design alway need always scroll is_toggled = true; // scroll(1); } } // Send unread ids sendReadNotice(); // Remove unread badge // CHANGED removeReadBadge(); // return original style if (toggleStatus == 1) { closeChatWindowModal(); } synalio.onCompleteToggle(e); }, onPressButton: function(){ var chat_input = synalioDocument.getElementById("synalio-chat-text-input"); if (chat_input.value){ var msg = chat_input.value; sendMessage(msg); deleteSubmitForms(); chat_input.value = ""; var ta = synalioDocument.getElementById("synalio-chat-text-input"); ta.style.height = textAreaHeight + 'px'; deleteReplyOptions(); synalio_carousel.deleteButtons(); // CHANGED // synalio.resize(windowElement.offsetHeight); } sendReadNotice(); }, onPressCheckbox: function(){ var chat_send_type = synalioDocument.getElementById("synalio-chat-send-type-checkbox"); var chat_input = synalioDocument.getElementById("synalio-chat-text-input") if(chat_send_type.checked){ keyPressMode = 1; chat_input.placeholder = chat_input.placeholder.replace("Shift + Enter", "Enter"); } else { keyPressMode = 0; chat_input.placeholder = chat_input.placeholder.replace("Enter", "Shift + Enter"); } }, onPressUpload: function(imagePath, file, mime_type){ var img = ''; writeMessage(htmlToElement(decorateMessage('r', chat_msg_r_tmpl).replace(/@1/g, img))); scroll(1); sendMessage('画像受信', true, false, false, file, mime_type) }, onPressGoHome: function(){ sessionStorage.removeItem("alwayshide") if (!isInRtchat()) { sendMessage(backToHome, true, true, null, null, null, {'home': 1}); deleteReplyOptions(); deleteSubmitForms(); synalio_carousel.deleteButtons(); } }, onCloseImageLoad: function(e){ if (synalio.onCloseImageLoad.wasCalled) { return; } synalio.onCloseImageLoad.wasCalled = true; let closeWindowChat = localStorage.getItem('closeWindowChat'); let windowChatIsClosing = false; if (closeWindowChat) { let now = Date.now(); let diffTime = now - closeWindowChat; windowChatIsClosing = diffTime <= threeHourTimestamp; } let visualImgIsMinimize = design_close_type === 'img' && !sessionIdChanged && windowChatIsClosing && !no_minimize_visual; if(design_close_type != 'img' || visualImgIsMinimize){ closeImageLoaded = true; return 0; } var img = new Image(); img.onload = function() { newWidth = this.width / 2; newHeight = this.height / 2; if (newWidth > window.innerWidth) { scale_ratio = window.innerWidth / newWidth; newWidth = window.innerWidth; newHeight = newHeight * scale_ratio; } iframeStyleWidthClose = "width:" + newWidth + "px;"; iframeStyleHeightClose = "height: " + newHeight + "px;"; iframeStyleHeightImgClose = iframeStyleHeightClose; closeImageWidth = newWidth; closeImageHeight = newHeight; closeImageLoaded = true; } img.src = e.target.src; }, onCompleteWriteMessage: function(responses){ }, onCompleteToggle: function(e){ }, onCompleteLoad: function(){ }, onCheckClosedWindowChat: function() { let windowBox = synalioDocument.getElementsByClassName('window-box')[0]; let displayType = windowBox.getAttribute('data-wtype'); let closeWindowChat = localStorage.getItem('closeWindowChat'); windowBox.style.visibility = "visible"; if (closeWindowChat) { let now = Date.now(); let diffTime = now - closeWindowChat; if ((diffTime > threeHourTimestamp) || sessionIdChanged) { resetCloseWindowChat(); } else { if (displayType !== 'img' || !no_minimize_visual) { isClosedWindowChat = true; customCloseSize('max-min'); } } } else { naCloseChatOpened = true; } }, resize: function(chatWindowHeight){ // body.style.height = (chatWindowHeight - header.offsetHeight - footer.offsetHeight) + "px"; }, onFormChanged: function(form){ if (!form || form.nodeName !== "FORM") { return; } var i, j, q = [], checkboxDict = {}, selectboxDict = {}, radioDict = {}; for (i = form.elements.length - 1; i >= 0; i = i - 1) { if (form.elements[i].name === "") { continue; } if(form.elements[i].nodeName == 'INPUT'){ var input_type = form.elements[i].getAttribute('type'); if(input_type == 'checkbox'){ if(!(form.elements[i].name in checkboxDict)){ checkboxDict[form.elements[i].name] = []; } if (form.elements[i].checked) { checkboxDict[form.elements[i].name].push(encodeURIComponent(form.elements[i].value)); } if (errorCheckbox) { errorCheckbox.setCustomValidity(''); errorCheckbox = null; } } else if(input_type == 'radio'){ if(!(form.elements[i].name in radioDict)){ radioDict[form.elements[i].name] = ''; } if (form.elements[i].checked) { radioDict[form.elements[i].name] = encodeURIComponent(form.elements[i].value); } } else{ form.elements[i].setCustomValidity(''); q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value)); } } else if(form.elements[i].nodeName == 'TEXTAREA'){ form.elements[i].setCustomValidity(''); q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value)); } else if(form.elements[i].nodeName == 'SELECT'){ if (form.elements[i].type == 'select-one') { q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value)); } else if (form.elements[i].type == 'select-multiple'){ if(!(form.elements[i].name in selectboxDict)){ selectboxDict[form.elements[i].name] = []; } for (j = form.elements[i].options.length - 1; j >= 0; j = j - 1) { if (form.elements[i].options[j].selected) { selectboxDict[form.elements[i].name].push(encodeURIComponent(form.elements[i].value)); } } } } else if(form.elements[i].nodeName == 'BUTTON'){ var input_type = form.elements[i].getAttribute('type'); if (input_type == 'button') { q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value)); } } } for(var checkboxName in checkboxDict){ q.push("checkbox_" + checkboxName + "=" + JSON.stringify(checkboxDict[checkboxName])); } for(var selectboxName in selectboxDict){ q.push("selectbox_" + selectboxName + "=" + JSON.stringify(selectboxDict[selectboxName])); } for(var radioName in radioDict){ q.push(radioName + "=" + radioDict[radioName]); } var data = q.join("&"); synalioDocument.getElementById(form.getAttribute('name') + '-form-data').value = data; }, onSubmitForm: function(submitComponent){ var formName = submitComponent.getAttribute("form-name"); var form = synalioDocument.getElementById(formName); if(!form || !updateCheckboxCustomValidity(form) || !form.checkValidity() || !updateTextCustomValidity(form)){ return validateFormFields(form) } var formDataId = submitComponent.getAttribute("form-data-id"); var formData = synalioDocument.getElementById(formDataId).value; if(!formData || formData === ''){ synalio.onFormChanged(form); formData = synalioDocument.getElementById(formDataId).value; } if(formData){ var msg = '##form:' + formName + '##' + formData; sendMessage(msg, true); deleteSubmitForms(); } deleteReplyOptions(); return false; }, onFocusEvent: function(){ sendReadNotice(); var windowBox = synalioDocument.querySelector('.window-box'); if(windowBox.getAttribute('data-richdisp') == 'on'){ toggleRichMenu(); } }, showCSForm: function(){ var ratingElements = synalioDocument.getElementsByClassName("cs-rating"); for(var i = 0; i < ratingElements.length; i++){ if(ratingElements[i].style.display != 'none'){ var removeNode = ratingElements[i].parentNode.parentNode.parentNode; removeNode.parentNode.removeChild(removeNode); } } var formContainer = writeMessage(htmlToElement(chat_cs_form_tmpl), true); if (nonce) { var formElem = formContainer.getElementsByTagName("form")[0]; formElem.onchange = parent.synalio.onFormChanged; var btnSend = formElem.getElementsByClassName("btn-send")[0]; btnSend.onclick = parent.synalio.onSubmitCSForm; } scroll(1); setTimeout(function(){ stopLoading(); scroll(1); }, loadingInterval); }, onSubmitCSForm: function(){ var csForm = synalioDocument.getElementById('cs-form'); var formData = synalioDocument.getElementById('cs-form-form-data').value; var params = {'s': s}; if(formData){ var fields = formData.split('&'); for(var i = 0; i < fields.length; i++){ var nameValue = fields[i].split('='); params[nameValue[0]] = nameValue[1]; } } var ratingElements = synalioDocument.getElementsByClassName("cs-rating"); if(ratingElements.length > 0){ ratingElements[ratingElements.length - 1].style.display = 'none'; } var ratingDoneElements = synalioDocument.getElementsByClassName("cs-rating-done") if(ratingDoneElements.length > 0){ ratingDoneElements[ratingDoneElements.length - 1].style.display = 'block'; } if(checkDemo() == 1){ params['demo'] = 1; } sendSatisfactionSurvey(params); return false; }, onSubmitFeedbackForm: function(value, id){ var action = synalioDocument.getElementById('feedback-form-form-data-action-'+id).value; var state = synalioDocument.getElementById('feedback-form-form-data-state-'+id).value; var params = {'s': s}; params['feedback'] = value; params['action'] = action; params['state'] = state; params['feedback_log_id'] = id; var feedbackElements = synalioDocument.getElementsByClassName("feedback-form-"+id); if(feedbackElements.length > 0){ feedbackElements[feedbackElements.length - 1].style.display = 'none'; } var responseDoneElements = synalioDocument.getElementsByClassName("feedback-done-"+id) if(responseDoneElements.length > 0){ responseDoneElements[responseDoneElements.length - 1].style.display = 'block'; } if(checkDemo() == 1){ params['demo'] = 1; } sendFeedbackResponse(params); return false; }, onBlur:function(){ var chatInput = synalioDocument.getElementById("synalio-chat-text-input"); var actionSuggestionBox = synalioDocument.getElementById("synalio-chat-suggestion"); setTimeout(function(){ if(synalioDocument.activeElement != chatInput && synalioDocument.activeElement != actionSuggestionBox){ hideActionSuggestion(); } }, 100) }, onInput: function(e){ if(isRtchat() == false){ var chat_input = synalioDocument.getElementById("synalio-chat-text-input"); var text = chat_input.value.trim(); if(text != ""){ lastInputText = text; sendActionSuggestionRequest(text); }else{ hideActionSuggestion(); } } }, onSuggestionLineSelect: function(value){ value = decodeSystemMarks(value); var chat_input = synalioDocument.getElementById("synalio-chat-text-input"); chat_input.value = ""; // chat_input.focus(); sendMessage(value); hideActionSuggestion(); }, onSuggestionLineHover: function(event){ var actionSuggestionBox = synalioDocument.getElementById("synalio-chat-suggestion"); var suggestionLines = Array.prototype.slice.call(actionSuggestionBox.children); currentSuggestionLine = suggestionLines.indexOf(event.target); }, onSuggestionLinePressed: function(e){ if (e.keyCode == 38) {//arrowUp if(currentSuggestionLine != 0){ currentSuggestionLine -= 1; }else{ currentSuggestionLine = suggestionLength - 1; } }else if(e.keyCode == 40){//arrowDown if(currentSuggestionLine != suggestionLength - 1){ currentSuggestionLine += 1; }else{ currentSuggestionLine = 0; } }else if(e.keyCode == 13){ //enter key => select text var actionSuggestionBox = synalioDocument.getElementById("synalio-chat-suggestion"); var focusLine = actionSuggestionBox.querySelector('.focus'); focusLine.click(); e.preventDefault(); }else if(e.keyCode == 27){ //escape => hide suggestBox var chat_input = synalioDocument.getElementById("synalio-chat-text-input"); chat_input.focus(); hideActionSuggestion(); e.preventDefault(); } focusSuggestionBox(); }, addExtVal: function(key, val){ ext[key] = val; }, hideChat: function() { }, sendSessionCloseChat: function() { sendMessage("close-session", true, true, null, null, null, {'session_closed': 1}); }, clearCloseChat: function() { if (display_as_modal && isDemo) { resetCloseWindowChat(); } }, reConnect: function() { if (isTabLetOrMobile) { if (socket) { socket = undefined; } setTimeout(() => { retryCount = 1; openWs(); }, 5000) } isOffline = false } }; })(); var synalioWindow = window.parent ? window.parent : window; // Load Chat window if(document.readyState === 'complete'){ synalio.onLoadEvent(); } else { // We need to re-assign synalioWindow variable to correct window inside aut-iframe. if (cypressIframes && cypressIframes.length > 0) { synalioWindow = cypressIframes[0].contentWindow; } synalioWindow.addEventListener('load', synalio.onLoadEvent, true); } var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload'; synalioWindow.addEventListener(terminationEvent, function (e) { synalio.onCloseBrowserOrReload() }); synalioWindow.addEventListener('offline', e => { setTimeout(() => { synalio.isOffline = true; }, 1500) }) synalioWindow.addEventListener('online', e => { if (synalio.isOffline) { synalio.reConnect(); } })