Last active
October 20, 2020 03:39
-
-
Save xumx/e9ad829d7ff9bdf5a68789431972152b to your computer and use it in GitHub Desktop.
KeyReply Chat Widget
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (function () { | |
| // Load Stylesheet | |
| var root = 'https://files.keyreply.com' | |
| var head = document.getElementsByTagName('head')[0], | |
| stylesheet = document.createElement('link') | |
| stylesheet.type = 'text/css' | |
| stylesheet.rel = 'stylesheet' | |
| stylesheet.href = root + '/files/boutir.css?13' | |
| head.appendChild(stylesheet) | |
| function init() { | |
| var $ = window.jQuery | |
| var settings = {}, | |
| script = $('#keyreply-script'), | |
| site = window.location.host, | |
| cipher = script.data('apps'), | |
| align = script.data('align'), | |
| whitelabel = script.data('whitelabel'), | |
| colors = { | |
| livechat: '#334433', | |
| skype: '#00AFF0', | |
| whatsapp: '#30BE2D', | |
| email: '#2D70E7', | |
| sms: '#0AD02C', | |
| phone: '#0AD02C', | |
| facetime: '#0DD12F', | |
| telegram: '#2DA5E1', | |
| facebook: '#0084FF', | |
| kakao: '#FBDE24', | |
| line: '#3ACE01', | |
| snapchat: '#FFFC00', | |
| wechat: '#1ECE29', | |
| reddit: '#017AD4', | |
| twitter: '#2DAAE1', | |
| hipchat: '#274970', | |
| slack: '#423843', | |
| handouts: '#70AD46', | |
| boutir: '#1CB78D' | |
| } | |
| settings.apps = JSON.parse(decodeURI(atob(cipher))) | |
| settings.message = atob(script.data('message') || '') | |
| settings.color = script.data('color') | |
| var numberOfApps = Object.keys(settings.apps).length | |
| if (!Mobile) { | |
| if (settings.apps.sms) numberOfApps-- | |
| if (settings.apps.kakao) numberOfApps-- | |
| } | |
| var maxIconCount = Math.floor((window.innerHeight - 130) / 52) | |
| var anchor = $('<div>') | |
| .attr('id', 'keyreply-container') | |
| .appendTo($('body')) | |
| if (align == 'left') { | |
| anchor.addClass('left') | |
| } | |
| var launcher = $('<div>') | |
| .addClass('keyreply-launcher') | |
| .addClass('keyreply-effect') | |
| .css('background-image', 'url("data:image/svg+xml;charset=utf8,%3Csvg width=\'26\' height=\'26\' viewBox=\'0 0 26 26\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cg fill=\'none\' fill-rule=\'evenodd\'%3E%3Cellipse fill=\'' + escape(settings.color) + '\' cx=\'13\' cy=\'13\' rx=\'12\' ry=\'12\'/%3E%3Cpath d=\'M6.798 15.503l1.453-.92c.617.215 1.29.334 2 .334 2.898 0 5.247-1.996 5.247-4.46 0-2.46-2.35-4.457-5.248-4.457C7.35 6 5 7.996 5 10.458c0 1.446.81 2.73 2.065 3.545l-.503 1.273c-.038.03-.062.076-.062.127 0 .09.074.162.166.162.054 0 .1-.024.132-.062z\' stroke=\'' + escape(settings.color) + '\' stroke-width=\'.2\' fill=\'%23FFF\'/%3E%3Cpath d=\'M20.297 18.97l.04-.065-.578-1.155c1.066-.814 1.737-1.993 1.737-3.305 0-2.455-2.35-4.445-5.248-4.445-2.9 0-5.25 1.99-5.25 4.445s2.35 4.445 5.25 4.445c.838 0 1.63-.167 2.334-.463l1.39.756c.035.05.095.085.163.085.107 0 .194-.085.194-.19 0-.04-.012-.076-.033-.107z\' stroke=\'' + escape(settings.color) + '\' stroke-width=\'.2\' fill=\'%23FFF\'/%3E%3C/g%3E%3C/svg%3E")') | |
| .css('background-color', settings.color) | |
| .appendTo(anchor) | |
| .click(function () { | |
| launcher.addClass('keyreply-show-effect') | |
| setTimeout(function () { | |
| launcher.removeClass('keyreply-show-effect') | |
| }, 700) | |
| }) | |
| if (!whitelabel) { | |
| var brand = $('<a target="_blank" href="https://keyreply.com/chat/?ref=getwidget">get widget</a>') | |
| .addClass('keyreply-brand') | |
| .appendTo(launcher) | |
| .click(function (event) { | |
| event.stopPropagation() | |
| }) | |
| } | |
| var ua = navigator.userAgent | |
| var iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i) | |
| var Android = !!ua.match(/Android/i) | |
| var Mobile = !!ua.match(/Mobi/i) | |
| var Mac = !!ua.match(/Macintosh/i) | |
| $.each(settings.apps, function (key, value) { | |
| if (Mobile || (key != 'sms' && key != 'kakao')) { | |
| $('<div>') | |
| .addClass('keyreply-chat-icon') | |
| .attr('data-type', key) | |
| .css('background-color', colors[key]) | |
| .append( | |
| $('<img>') | |
| .attr('src', root + '/files/images/app/' + key + '.svg') | |
| .attr('alt', key) | |
| ) | |
| .append($('<div class="keyreply-label">').text(key.charAt(0).toUpperCase() + key.slice(1))) | |
| .hide() | |
| .appendTo(anchor) | |
| } | |
| }) | |
| // Add a more icon | |
| var more = $('<div>') | |
| .css('background-color', '#888888') | |
| .addClass('keyreply-chat-icon') | |
| .attr('data-type', 'more') | |
| .append( | |
| $('<img>') | |
| .attr('src', root + '/chat/images/apps/' + 'more' + '.svg') | |
| .attr('alt', 'more') | |
| ) | |
| .append($('<div class="keyreply-label">').text('More').css('color', 'white')) | |
| .hide() | |
| .click(function () { | |
| anchor.find('.keyreply-chat-icon').each(function (index, img) { | |
| img = $(img) | |
| if (index <= numberOfApps - maxIconCount) { | |
| if (img.is(':visible')) { | |
| img.animate({ | |
| 'bottom': '', | |
| 'right': '', | |
| 'opacity': 0 | |
| }, 'fast', function () { | |
| img.hide() | |
| }) | |
| } else { | |
| // Setting | |
| var option = { | |
| 'opacity': 1, | |
| 'bottom': 72 + index % maxIconCount * 52 | |
| } | |
| option[(align == 'left' ? 'left' : 'right')] = 52 + 16 + Math.floor(index / maxIconCount) * 52 | |
| option[(align == 'left' ? 'right' : 'left')] = 'auto' | |
| img.show().animate(option, 'fast') | |
| } | |
| } | |
| }) | |
| }) | |
| if (numberOfApps > maxIconCount) { | |
| more.appendTo(anchor) | |
| } | |
| $(window).resize(function () { | |
| maxIconCount = Math.floor((window.innerHeight - 130) / 52) | |
| if (numberOfApps > maxIconCount) { | |
| more.appendTo(anchor) | |
| } else { | |
| more.detach() | |
| } | |
| }) | |
| launcher.click(function () { | |
| $('#keyreply-container > .keyreply-chat-icon').each(function (index, img) { | |
| img = $(img) | |
| if (launcher.is('.keyreply-launcher-active')) { | |
| img.animate({ | |
| 'bottom': 20, | |
| 'right': 16, | |
| 'opacity': 0 | |
| }, 'fast', function () { | |
| img.css('right', '') | |
| .css('bottom', '') | |
| .hide() | |
| }) | |
| } else { | |
| if (numberOfApps > maxIconCount) { | |
| if (index > numberOfApps - maxIconCount) { | |
| img.show().animate({ | |
| 'opacity': 1, | |
| 'bottom': 72 + (maxIconCount - ((numberOfApps - index) % maxIconCount) - 1) * 52 | |
| }, 'fast') | |
| } | |
| } else { | |
| img.show().animate({ | |
| 'opacity': 1, | |
| 'bottom': 72 + index * 52 | |
| }, 'fast') | |
| } | |
| } | |
| }) | |
| launcher.toggleClass('keyreply-launcher-active') | |
| }) | |
| $('.keyreply-chat-icon').each(function (index, icon) { | |
| var link, qr, app = $(icon) | |
| var container = $('<div>').addClass('keyreply-qr') | |
| switch (app.data('type')) { | |
| case 'email': | |
| link = 'mailto:' + settings.apps.email | |
| break | |
| case 'sms': | |
| link = 'sms:' + settings.apps.sms | |
| break | |
| case 'phone': | |
| if (Mobile) { | |
| link = 'tel:' + settings.apps.phone | |
| } else { | |
| container.css('color', 'white').css('padding', '8px').css('padding-top', '32px') | |
| $('<a target="_blank" class="keyreply-button">').attr('href', 'tel://' + settings.apps.phone).text(settings.apps.phone).appendTo(container) | |
| qr = true | |
| break | |
| } | |
| break | |
| case 'facetime': | |
| link = 'facetime-audio:' + settings.apps.facetime | |
| break | |
| case 'telegram': | |
| link = 'tg://resolve?domain=' + settings.apps.telegram.replace('@', '') | |
| break | |
| case 'skype': | |
| link = 'skype:' + (iOS ? '//' : '') + settings.apps.skype + '?chat' | |
| break | |
| case 'facebook': | |
| link = 'https://m.me/' + settings.apps.facebook | |
| break | |
| case 'kakao': | |
| app.find('.keyreply-label').css('color', '#1F1F1F') | |
| link = 'http://goto.kakao.com/' + settings.apps.kakao | |
| break | |
| case 'reddit': | |
| // Deeplink not possible | |
| link = 'https://www.reddit.com/message/compose/?to=' + settings.apps.reddit | |
| break | |
| case 'twitter': | |
| if (Mobile) { | |
| link = 'twitter://user?screen_name=' + settings.apps.twitter.replace('@', '') | |
| } else { | |
| link = 'https://twitter.com/' + settings.apps.twitter.replace('@', '') | |
| } | |
| break | |
| case 'whatsapp': | |
| if (window.__getMessage && typeof window.__getMessage === 'function') { | |
| var message = window.__getMessage() | |
| if (message) { | |
| settings.message = message | |
| } | |
| } | |
| if (Mobile) { | |
| link = 'whatsapp://send/?phone=' + encodeURIComponent(settings.apps.whatsapp) + '&text=' + encodeURIComponent(settings.message) | |
| } else { | |
| link = 'https://web.whatsapp.com/send?phone=' + encodeURIComponent(settings.apps.whatsapp) + '&text=' + encodeURIComponent(settings.message) | |
| } | |
| break | |
| case 'wechat': | |
| if (settings.apps.wechat.length > 100 || /^(http)/.test(settings.apps.wechat)) { | |
| $('<img>') | |
| .attr('src', settings.apps.wechat) | |
| .height('100%') | |
| .width('100%') | |
| .appendTo(container) | |
| $('<br><a class="keyreply-button" href="weixin://">Open Wechat</a>').appendTo(container) | |
| } else { | |
| $('<div style="color:white;">WeChat ID (微信号): ' + settings.apps.wechat + '</div>').appendTo(container) | |
| } | |
| qr = true | |
| break | |
| case 'line': | |
| if (/^http.+ti\/p\/.+/.test(settings.apps.line)) { | |
| link = settings.apps.line | |
| } else { | |
| if (settings.apps.line.length > 100 || /^(http)/.test(settings.apps.line)) { | |
| $('<img>') | |
| .attr('src', settings.apps.line) | |
| .height('100%') | |
| .width('100%') | |
| .appendTo(container) | |
| $('<br><a class="keyreply-button" href="line://ti/p/">Open Line</a>').appendTo(container) | |
| } else { | |
| container.css('color', 'white').css('padding-top', '32px').text('Line ID: ' + settings.apps.line) | |
| $('<br><a class="keyreply-button" href="line://ti/p/%40' + settings.apps.line + '">Open Line</a>').appendTo(container) | |
| } | |
| qr = true | |
| } | |
| break | |
| case 'snapchat': | |
| app.find('.keyreply-label').css('color', '#1F1F1F') | |
| container.css('background-image', 'url("' + settings.apps.snapchat + '")') | |
| qr = true | |
| break | |
| case 'boutir': | |
| if (window.__boutirCallback) { | |
| link = 'javascript:__boutirCallback();' | |
| } | |
| break | |
| default: | |
| break | |
| } | |
| if (qr) { | |
| app.append(container) | |
| } | |
| app.click(function (event) { | |
| event.stopPropagation() | |
| if (qr) { | |
| if (app.is('.keyreply-panel')) { | |
| app.removeClass('keyreply-panel') | |
| app.find('.keyreply-qr').removeClass('active') | |
| } else { | |
| app.siblings().removeClass('keyreply-panel') | |
| app.addClass('keyreply-panel') | |
| app.find('.keyreply-qr').addClass('active') | |
| } | |
| } | |
| if (link) { | |
| app.siblings().removeClass('keyreply-panel') | |
| if (app.data('type') === 'whatsapp') { | |
| if (Mobile) { | |
| link = 'whatsapp://send/?phone=' + encodeURIComponent(settings.apps.whatsapp) + '&text=' + encodeURIComponent(settings.message) | |
| } else { | |
| link = 'https://web.whatsapp.com/send?phone=' + encodeURIComponent(settings.apps.whatsapp) + '&text=' + encodeURIComponent(settings.message) | |
| } | |
| } | |
| if (Mobile) { | |
| window.location = link | |
| } else { | |
| var a = $('<a>').attr('target', '_blank').attr('href', link) | |
| a.appendTo(anchor)[0].click() | |
| a.detach() | |
| } | |
| } | |
| }) | |
| window.keyreply = { | |
| open: function(app, message) { | |
| if (message) { | |
| settings.message = message | |
| } | |
| $('.keyreply-chat-icon[data-type="' + app + '"]').click() | |
| } | |
| } | |
| }) | |
| return true | |
| } | |
| function loadScript(url, callback) { | |
| var script = document.createElement('script') | |
| script.type = 'text/javascript' | |
| if (script.readyState) { // IE | |
| script.onreadystatechange = function () { | |
| if (script.readyState == 'loaded' || script.readyState == 'complete') { | |
| script.onreadystatechange = null | |
| callback() | |
| } | |
| } | |
| } else { // Others | |
| script.onload = function () { | |
| callback() | |
| } | |
| } | |
| script.src = url | |
| document.getElementsByTagName('head')[0].appendChild(script) | |
| } | |
| window.initializeKeyreply = init | |
| })() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment