From e59b3412822c930588153d453ea5c5f25545c239 Mon Sep 17 00:00:00 2001 From: taoshihan1991 <630892807@qq.com> Date: Thu, 15 Apr 2021 19:03:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=97=A7=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/js/functions.js | 157 ++++++++++++++++++ static/js/gofly-front.js | 333 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 490 insertions(+) create mode 100644 static/js/functions.js create mode 100644 static/js/gofly-front.js diff --git a/static/js/functions.js b/static/js/functions.js new file mode 100644 index 0000000..1ac71f9 --- /dev/null +++ b/static/js/functions.js @@ -0,0 +1,157 @@ +function getBaseUrl() { + var ishttps = 'https:' == document.location.protocol ? true : false; + var url = window.location.host; + if (ishttps) { + url = 'https://' + url; + } else { + url = 'http://' + url; + } + return url; +} +function getWsBaseUrl() { + var ishttps = 'https:' == document.location.protocol ? true : false; + var url = window.location.host; + if (ishttps) { + url = 'wss://' + url; + } else { + url = 'ws://' + url; + } + return url; +} +function notify(title, options, callback) { + // 先检查浏览器是否支持 + if (!window.Notification) { + return; + } + var notification; + // 检查用户曾经是否同意接受通知 + if (Notification.permission === 'granted') { + notification = new Notification(title, options); // 显示通知 + + } else { + var promise = Notification.requestPermission(); + } + + if (notification && callback) { + notification.onclick = function(event) { + callback(notification, event); + } + setTimeout(function () { + notification.close(); + },5000); + } +} +var titleTimer=0; +var titleNum=0; +var originTitle = document.title; +function flashTitle() { + if(titleTimer!=0){ + return; + } + titleTimer = setInterval(function(){ + titleNum++; + if (titleNum == 3) { + titleNum = 1; + } + if (titleNum == 1) { + document.title = '【】' + originTitle; + } + if (titleNum == 2) { + document.title = '【new message】' + originTitle; + } + }, 500); + +} +function clearFlashTitle() { + clearInterval(titleTimer); + document.title = originTitle; +} +var faceTitles = ["[微笑]", "[嘻嘻]", "[哈哈]", "[可爱]", "[可怜]", "[挖鼻]", "[吃惊]", "[害羞]", "[挤眼]", "[闭嘴]", "[鄙视]", "[爱你]", "[泪]", "[偷笑]", "[亲亲]", "[生病]", "[太开心]", "[白眼]", "[右哼哼]", "[左哼哼]", "[嘘]", "[衰]", "[委屈]", "[吐]", "[哈欠]", "[抱抱]", "[怒]", "[疑问]", "[馋嘴]", "[拜拜]", "[思考]", "[汗]", "[困]", "[睡]", "[钱]", "[失望]", "[酷]", "[色]", "[哼]", "[鼓掌]", "[晕]", "[悲伤]", "[抓狂]", "[黑线]", "[阴险]", "[怒骂]", "[互粉]", "[心]", "[伤心]", "[猪头]", "[熊猫]", "[兔子]", "[ok]", "[耶]", "[good]", "[NO]", "[赞]", "[来]", "[弱]", "[草泥马]", "[神马]", "[囧]", "[浮云]", "[给力]", "[围观]", "[威武]", "[奥特曼]", "[礼物]", "[钟]", "[话筒]", "[蜡烛]", "[蛋糕]"]; +function placeFace() { + var faces=[]; + for(var i=0;i/g, '>').replace(/'/g, ''').replace(/"/g, '"') // XSS + .replace(/face\[([^\s\[\]]+?)\]/g, function (face) { // 转义表情 + var alt = face.replace(/^face/g, ''); + return '' + alt + ''; + }) + .replace(/img\[([^\s\[\]]+?)\]/g, function (face) { // 转义图片 + var src = face.replace(/^img\[/g, '').replace(/\]/g, '');; + return ''; + }) + .replace(/file\[([^\s\[\]]+?)\]/g, function (face) { // 转义图片 + var src = face.replace(/^file\[/g, '').replace(/\]/g, '');; + return '
'; + }) + .replace(/\[([^\s\[\]]+?)\]+link\[([^\s\[\]]+?)\]/g, function (face) { // 转义超链接 + var text = face.replace(/link\[.*?\]/g, '').replace(/\[|\]/g, ''); + var src = face.replace(/^\[([^\s\[\]]+?)\]+link\[/g, '').replace(/\]/g, ''); + return '【'+text+'】'; + }) + .replace(html(), '\<$1 $2\>').replace(html('/'), '\') // 转移HTML代码 + .replace(/\n/g, '
') // 转义换行 + + return content; +} +function bigPic(src,isVisitor){ + if (isVisitor) { + window.open(src); + return; + } +} +function filter (obj){ + var imgType = ["image/jpeg","image/png","image/jpg","image/gif"]; + var filetypes = imgType; + var isnext = false; + for (var i = 0; i < filetypes.length; i++) { + if (filetypes[i] == obj.type) { + return true; + } + } + return false; +} +function sleep(time) { + var startTime = new Date().getTime() + parseInt(time, 10); + while(new Date().getTime() < startTime) {} +} +function checkLang(){ + var langs=["cn","en"]; + var lang=getQuery("lang"); + if(lang!=""&&langs.indexOf(lang) > 0 ){ + return lang; + } + return "cn"; +} +function getQuery(key) { + var query = window.location.search.substring(1); + var key_values = query.split("&"); + var params = {}; + key_values.map(function (key_val){ + var key_val_arr = key_val.split("="); + params[key_val_arr[0]] = key_val_arr[1]; + }); + if(typeof params[key]!="undefined"){ + return params[key]; + } + return ""; +} +function utf8ToB64(str) { + return window.btoa(unescape(encodeURIComponent(str))); +} +function b64ToUtf8(str) { + return decodeURIComponent(escape(window.atob(str))); +} +; \ No newline at end of file diff --git a/static/js/gofly-front.js b/static/js/gofly-front.js new file mode 100644 index 0000000..632503d --- /dev/null +++ b/static/js/gofly-front.js @@ -0,0 +1,333 @@ +var GOFLY={ + GOFLY_URL:"https://gofly.sopans.com", + GOFLY_KEFU_ID:"", + GOFLY_BTN_TEXT:"Chat with me", + GOFLY_LANG:"en", + GOFLY_EXTRA: {}, + GOFLY_AUTO_OPEN:true, + GOFLY_AUTO_SHOW:false, + GOFLY_WITHOUT_BTN:false, +}; +GOFLY.launchButtonFlag=false; +GOFLY.titleTimer=0; +GOFLY.titleNum=0; +GOFLY.noticeTimer=null; +GOFLY.originTitle=document.title; +GOFLY.chatPageTitle="GOFLY"; +GOFLY.kefuName=""; +GOFLY.kefuAvator=""; +GOFLY.init=function(config){ + var _this=this; + if(typeof config=="undefined"){ + return; + } + + if (typeof config.GOFLY_URL!="undefined"){ + this.GOFLY_URL=config.GOFLY_URL.replace(/([\w\W]+)\/$/,"$1"); + } + this.dynamicLoadCss(this.GOFLY_URL+"/static/css/gofly-front.css?v=1"); + + if (typeof config.GOFLY_KEFU_ID!="undefined"){ + this.GOFLY_KEFU_ID=config.GOFLY_KEFU_ID; + } + if (typeof config.GOFLY_BTN_TEXT!="undefined"){ + this.GOFLY_BTN_TEXT=config.GOFLY_BTN_TEXT; + } + if (typeof config.GOFLY_EXTRA!="undefined"){ + this.GOFLY_EXTRA=config.GOFLY_EXTRA; + } + if (typeof config.GOFLY_AUTO_OPEN!="undefined"){ + this.GOFLY_AUTO_OPEN=config.GOFLY_AUTO_OPEN; + } + if (typeof config.GOFLY_AUTO_SHOW!="undefined"){ + this.GOFLY_AUTO_SHOW=config.GOFLY_AUTO_SHOW; + } + if (typeof config.GOFLY_WITHOUT_BTN!="undefined"){ + this.GOFLY_WITHOUT_BTN=config.GOFLY_WITHOUT_BTN; + } + var refer=document.referrer?document.referrer:"无"; + this.GOFLY_EXTRA.refer=refer; + this.GOFLY_EXTRA.host=document.location.href; + this.GOFLY_EXTRA=JSON.stringify(_this.GOFLY_EXTRA); + + this.dynamicLoadJs(this.GOFLY_URL+"/assets/js/functions.js?v=1",function(){ + if (typeof config.GOFLY_LANG!="undefined"){ + _this.GOFLY_LANG=config.GOFLY_LANG; + }else{ + _this.GOFLY_LANG=checkLang(); + } + _this.GOFLY_EXTRA=utf8ToB64(_this.GOFLY_EXTRA); + }); + if (typeof $!="function"){ + this.dynamicLoadJs("https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js",function () { + _this.dynamicLoadJs("https://cdn.bootcdn.net/ajax/libs/layer/3.1.1/layer.min.js",function () { + _this.jsCallBack(); + }); + }); + }else{ + this.dynamicLoadJs("https://cdn.bootcdn.net/ajax/libs/layer/3.1.1/layer.min.js",function () { + _this.jsCallBack(); + }); + } + _this.addEventlisten(); +} +GOFLY.jsCallBack=function(){ + this.showKefuBtn(); + this.addClickEvent(); + this.getNotice(); +} +GOFLY.showKefuBtn=function(){ + var _this=this; + if(_this.GOFLY_WITHOUT_BTN){ + return; + } + var html="
" + + '
' + + '
1
' + + '
'+_this.GOFLY_BTN_TEXT+'
' + + '
' + + '
'; + $('body').append(html); +} +GOFLY.addClickEvent=function(){ + var _this=this; + $(".launchButton").on("click",function() { + _this.GOFLY_AUTO_SHOW=true; + _this.showKefu(); + $("#launchIcon").text(0).hide(); + }); + + $("body").on("click","#launchNoticeClose",function() { + $("#launchButtonNotice").hide(); + }); + + $("body").click(function () { + clearTimeout(_this.titleTimer); + document.title = _this.originTitle; + }); +} +GOFLY.addEventlisten=function(){ + var _this=this; + window.addEventListener('message',function(e){ + var msg=e.data; + if(msg.type=="message"){ + clearInterval(_this.noticeTimer); + var width=$(window).width(); + if(width>768){ + _this.flashTitle();//标题闪烁 + } + if (this.launchButtonFlag) return; + var welcomeHtml="
"+_this.kefuName+"" + + "×" + + "
"; + welcomeHtml+="
"+replaceContent(msg.data.content,_this.GOFLY_URL)+"
"; + $("#launchButtonNotice").html(welcomeHtml).show(); + var news=$("#launchIcon").text(); + $("#launchIcon").text(++news).show(); + } + if(msg.type=="focus"){ + clearTimeout(_this.titleTimer); + _this.titleTimer=0; + document.title = _this.originTitle; + } + }); + window.onfocus = function () { + clearTimeout(_this.titleTimer); + _this.titleTimer=0; + document.title = _this.originTitle; + }; +} +GOFLY.dynamicLoadCss=function(url){ + var head = document.getElementsByTagName('head')[0]; + var link = document.createElement('link'); + link.type='text/css'; + link.rel = 'stylesheet'; + link.href = url; + head.appendChild(link); +} +GOFLY.dynamicLoadJs=function(url, callback){ + var head = document.getElementsByTagName('head')[0]; + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.src = url; + if(typeof(callback)=='function'){ + script.onload = script.onreadystatechange = function () { + if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete"){ + callback(); + script.onload = script.onreadystatechange = null; + } + }; + } + head.appendChild(script); +} + +GOFLY.getNotice=function(){ + var _this=this; + $.get(this.GOFLY_URL+"/notice?kefu_id="+this.GOFLY_KEFU_ID,function(res) { + if(res.result.status=='offline'){ + _this.chatPageTitle="
"; + }else{ + _this.chatPageTitle="
"; + setTimeout(function(){ + var userInfo=" "+res.result.username+"" + $('.launchButtonText').html(userInfo); + },3000); + } + _this.kefuAvator=res.result.avatar; + _this.kefuName=res.result.username; + _this.chatPageTitle+=""+res.result.username; + if(_this.GOFLY_AUTO_OPEN&&_this.isIE()<=0){ + _this.showKefu(); + $(".launchButtonBox").show(); + _this.launchButtonFlag=false; + } + if (res.result.welcome != null) { + var msg = res.result.welcome; + var len=msg.length; + var i=0; + if(len>0){ + + _this.noticeTimer=setInterval(function(){ + if(i>=len||typeof msg[i]=="undefined"||msg[i]==null){ + clearInterval(_this.noticeTimer); + return; + } + var content = msg[i]; + if(typeof content.content =="undefined"){ + return; + } + var welcomeHtml="
"+res.result.username+"" + + "×" + + "
"; + welcomeHtml+="
"+replaceContent(content.content,_this.GOFLY_URL)+"
"; + + var obj=$("#launchButtonNotice"); + if(obj[0]){ + obj[0].innerHTML=welcomeHtml; + obj.show(); + } + i++; + $("#launchIcon").text(i).show(); + },4000); + } + + } + }); +} +GOFLY.isIE=function(){ + var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 + var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器 + var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器 + var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1; + if(isIE) { + var reIE = new RegExp("MSIE (\\d+\\.\\d+);"); + reIE.test(userAgent); + var fIEVersion = parseFloat(RegExp["$1"]); + if(fIEVersion == 7) { + return 7; + } else if(fIEVersion == 8) { + return 8; + } else if(fIEVersion == 9) { + return 9; + } else if(fIEVersion == 10) { + return 10; + } else { + return 6;//IE版本<=7 + } + } else if(isEdge) { + return 'edge';//edge + } else if(isIE11) { + return 11; //IE11 + }else{ + return -1;//不是ie浏览器 + } +} +GOFLY.showPanel=function (){ + var width=$(window).width(); + this.GOFLY_AUTO_SHOW=true; + if(this.isIE()>0){ + this.windowOpen(); + return; + } + if(width<768){ + this.layerOpen("100%","100%"); + return; + } + this.layerOpen("400px","530px"); + this.launchButtonFlag=true; +} +GOFLY.showKefu=function (){ + if (this.launchButtonFlag) return; + var width=$(window).width(); + if(this.isIE()>0){ + this.windowOpen(); + return; + } + if(width<768){ + this.layerOpen("100%","100%"); + return; + } + this.layerOpen("400px","530px"); + this.launchButtonFlag=true; + $(".launchButtonBox").hide(); +} +GOFLY.layerOpen=function (width,height){ + if (this.launchButtonFlag) return; + var layBox=$("#layui-layer19911116"); + if(layBox.css("display")=="none"){ + layBox.show(); + return; + } + var _this=this; + layer.index="19911115"; + layer.open({ + type: 2, + title: this.chatPageTitle, + closeBtn: 1, //不显示关闭按钮 + shade: 0, + area: [width, height], + offset: 'rb', //右下角弹出 + anim: 2, + content: [this.GOFLY_URL+'/chatIndex?kefu_id='+this.GOFLY_KEFU_ID+'&lang='+this.GOFLY_LANG+'&refer='+window.document.title+'&extra='+this.GOFLY_EXTRA , 'yes'], //iframe的url,no代表不显示滚动条 + success:function(){ + var layBox=$("#layui-layer19911116"); + if(_this.GOFLY_AUTO_SHOW&&layBox.css("display")=="none"){ + _this.launchButtonFlag=true; + layBox.show(); + } + }, + end: function(){ + _this.launchButtonFlag=false; + $(".launchButtonBox").show(); + }, + cancel: function(index, layero){ + $("#layui-layer19911116").hide(); + _this.launchButtonFlag=false; + $(".launchButtonBox").show(); + return false; + } + }); +} +GOFLY.windowOpen=function (){ + window.open(this.GOFLY_URL+'/chatIndex?kefu_id='+this.GOFLY_KEFU_ID+'&lang='+this.GOFLY_LANG+'&refer='+window.document.title+'&extra='+this.GOFLY_EXTRA); +} +GOFLY.flashTitle=function () { + if(this.titleTimer!=0){ + return; + } + this.titleTimer = setInterval("GOFLY.flashTitleFunc()", 500); +} +GOFLY.flashTitleFunc=function(){ + this.titleNum++; + if (this.titleNum >=3) { + this.titleNum = 1; + } + if (this.titleNum == 1) { + document.title = '【】' + this.originTitle; + } + if (this.titleNum == 2) { + document.title = '【new message】' + this.originTitle; + } +} + +