1(function(global){"use strict" 2const MessageCenterUtils={getBrowserName(){const userAgent=navigator.userAgent;if(userAgent.includes("Firefox")){return"Mozilla Firefox"}else if(userAgent.includes("SamsungBrowser")){return"Samsung Internet"}else if(userAgent.includes("Opera")||userAgent.includes("OPR")){return"Opera"}else if(userAgent.includes("Trident")){return"Internet Explorer"}else if(userAgent.includes("Edg")){return"Microsoft Edge"}else if(userAgent.includes("Chrome")){return"Google Chrome"}else if(userAgent.includes("Safari")){return"Safari"}else{return"Other Browser"}},getCurrentTimezone(timestamp){const date=new Date(timestamp);const formatter=new Intl.DateTimeFormat("en-US",{year:"numeric",month:"2-digit",day:"2-digit",timeZone:"UTC",});const formattedDate=formatter.format(date);return formattedDate},loadCookies(keys){const cookies={};document.cookie.split(';').forEach(cookie=>{const parts=cookie.split('=');const key=parts[0].trim();const value=parts[1]||'';if(keys.includes(key)){cookies[key]=decodeURIComponent(value.trim())}});return cookies},getSubdomain(domain=document.domain){try{let subdomain="";const key=`mh_${Math.random()}`;const expiredDate=new Date(0);const domainList=domain.split(".");const reg=new RegExp(`(^|;)\\s*${key}=12345`);const ipAddressReg=/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;if(ipAddressReg.test(domain)||domain==="localhost"){return domain} 3const urlItems=[];urlItems.unshift(domainList.pop());while(domainList.length){urlItems.unshift(domainList.pop());subdomain=urlItems.join(".");const cookie=`${key}=12345;domain=.${subdomain}`;document.cookie=cookie;if(reg.test(document.cookie)){document.cookie=`${cookie};expires=${expiredDate}`;break}} 4return subdomain||document.domain}catch(e){return document.domain}}
4,setCookie(name,value,day,path="/",domain=this.getSubdomain()){if(day!==0){day=day||30;path=path||"/";var str=name+"="+value+"; ";if(day) 5str+="expires="+new Date(Date.now()+day*24*3600*1000).toGMTString()+"; ";if(path)str+="path="+path+"; ";if(domain)str+="domain="+domain;document.cookie=str}else{document.cookie=name+"="+escape(value)}},judgeEnvironment(){const originList=[".imyfone.com",".imyfone.net",".unictool.com",".anyrecover.com",".clevguard.com",".wootechy.com",".imyfone.de",".topmediai.com",".irocketvpn.com",".clevguard.org",".clevguard.fr",".clevguard.tw",".clevguard.ru",".clevguard.es",".clevguard.com.co",".locachange.com",".clevguard.tech",".famieyes.com",".imyfone.cn",".monimaster.com",".chatartpro.com",".musicful.ai",".lumeflow.ai",".noviai.ai",".litmedia.ai"];return originList.some((item)=>{return location.origin.indexOf(item)!==-1})},postOneself({url,dataType="json",async=!0,type="post"},callback){const publicPage=this.judgeEnvironment()?"https://public.imyfone.com":"https://public.ifonelab.com";$.ajax({type:type,async:async,url:`${publicPage}${url}`,dataType:dataType,data:{},success:(data)=>{callback(data)},error:(data)=>{callback([])},})},getInterfaceAddress({url="/assets/js/connection_ember_system/interface_address.json",async,dataType,type,},callback){this.postOneself({url,async,dataType,type},callback)},appendParams(url,params){if(!(typeof params==="object"&¶ms!==null))return url;const paramKeys=Object.keys(params);paramKeys.forEach((key,index)=>{if(params[key]){const separator=url.indexOf("?")===-1?"?":"&";url+=`${separator}${encodeURIComponent(key)}=${encodeURIComponent( 6 params[key] 7 )}`}});return url},setCookieForToday(name,value,domain=document.location.hostname){var now=new Date();var endOfDay=new Date(now.getFullYear(),now.getMonth(),now.getDate()+1);var secondsUntilEndOfDay=(endOfDay-now)/1000;this.setCookie(name,value,secondsUntilEndOfDay/60/60/24,"/",domain)},formatCurrentDateTime(){const now=new Date();const year=now.getFullYear();const month=now.getMonth()+1;const day=now.getDate();const hours=now.getHours();const minutes=now.getMinutes();const seconds=now.getSeconds();const formattedDate=[year,month.toString().padStart(2,"0"),day.toString().padStart(2,"0"),].join("-");const formattedTime=[hours.toString().padStart(2,"0"),minutes.toString().padStart(2,"0"),seconds.toString().padStart(2,"0"),].join(":");return `${formattedDate} ${formattedTime}`},getOsInfo(){const userAgent=navigator.userAgent.toLowerCase() 8let name='unknown' 9if(userAgent.indexOf('win')>-1){name='windows'}else if(userAgent.indexOf('iphone')>-1){name='ios'}else if(userAgent.indexOf('mac')>-1){name='mac' 10if(userAgent.indexOf('mobile')>-1){name='ios'}}else if(userAgent.indexOf('x11')>-1||userAgent.indexOf('unix')>-1||userAgent.indexOf('sunname')>-1||userAgent.indexOf('bsd')>-1){name='unix'}else if(userAgent.indexOf('harmony')>-1){name='harmony os'}else if(userAgent.indexOf('blackberry')>-1){name='blackberry'}else if(userAgent.indexOf('android')>-1){name='android'}else if(userAgent.indexOf('linux')>-1){if(userAgent.indexOf('android')>-1){name='android'}else{name='Linux'}}else{name='unknown'} 11return name}};const MessageCenterRequest={config:{},getSign(){return sha1(`${this.config.token}${this.config.timestamp}member_sign`).toUpperCase()},getUrl(api,type="get"){if(type==="get"){let url=this.config.baseUrl+api+"?information_sources="+this.config.information_sources+"&sign="+this.getSign()+"×tamp="+this.config.timestamp+`&lang=${this.config.language}`;if(this.config.token){url+="&token="+this.config.token} 12return url}else{return this.config.baseUrl+api}},setDevice(setPayload){const deviceFlag=this.config.device||"";if(!deviceFlag){FingerprintPlugin.createFingerprint().then((res)=>{MessageCenterUtils.setCookie("device",res);this.getTourist(res,setPayload)})}else{this.getTourist(deviceFlag,setPayload)}},getTourist(device,successCallback=()=>{},errorCallback=()=>{}){const _this=this;_this.config.device=device;var requestUrl=_this.getUrl("/crontab/account/report-web-data");const data={access_time:MessageCenterUtils.formatCurrentDateTime(),software_code:device,browser:MessageCenterUtils.getBrowserName(),operating_system:MessageCenterUtils.getOsInfo(),token:_this.config.token};$.ajax({type:"get",url:requestUrl,dataType:"json",data,headers:{token:_this.config.token,},async:!0,success:function(res){successCallback(res)},error:function(err){errorCallback(err)},})},getData(params,successCallback=()=>{},errorCallback=()=>{}){const _this=this;const memberId=_this.config.memberId;let requestUrl1=_this.getUrl("/crontab/account/message-center");let requestUrl2=_this.getUrl("/crontab/account/message-center-list");if(!_this.config.custom){requestUrl1=MessageCenterUtils.appendParams(requestUrl1,params);requestUrl2=MessageCenterUtils.appendParams(requestUrl2,params)}else{if(memberId){requestUrl1+=`&member_id=${memberId}`;requestUrl2+=`&member_id=${memberId}`} 13requestUrl1+=`&software_code=${_this.config.device}`;requestUrl2+=`&software_code=${_this.config.device}`} 14const req1=$.ajax({type:"get",url:requestUrl1,dataType:"json",headers:{token:_this.config.token,},async:!0,});let promiseMsg=[req1] 15if(this.config.structure.isHistory){const req2=$.ajax({type:"get",url:requestUrl2,dataType:"json",headers:{token:_this.config.token,},async:!0,});promiseMsg=[req1,req2]} 16Promise.all(promiseMsg).then(async(res)=>{successCallback(res)}).catch((err)=>errorCallback(err))},readMessage(data,successCallback=()=>{},errorCallback=()=>{}){const _this=this;let requestUrl=_this.getUrl("/crontab/account/message-center-read-report","post");const normalData={information_sources:_this.config.information_sources,sign:_this.get
16Sign(),lang:_this.config.language,tourists_code:_this.config.touristCode,timestamp:_this.config.timestamp,software_code:_this.config.device,token:_this.config.token,};$.ajax({type:"post",url:requestUrl,dataType:"json",data:Object.assign(normalData,data),headers:{token:this.token,},success:function(res){successCallback(res)},error:function(err){errorCallback(err)},})},getMessageCount(params,successCallback=()=>{},errorCallback=()=>{}){const _this=this;let requestUrl=MessageCenterUtils.appendParams(_this.getUrl("/crontab/account/message-center-unread-count"),params);$.ajax({type:"get",url:requestUrl,dataType:"json",headers:{token:this.token,},async:!1,success:function(res){successCallback(res)},error:function(err){errorCallback(err)},})},};var messageEvents=function(brand,language,custom=!0,structure={}){const config={token:"",memberId:'',custom:!0,device:"",touristCode:"",brand:"",language:"EN",baseUrl:"",tourists_code:"",information_sources:structure.info_source||location.origin,timestamp:new Date().getTime(),structure,initState:!1} 17const requiredCookies=['token','MemberKey','touristCode','device'];const cookieValues=MessageCenterUtils.loadCookies(requiredCookies);config.token=cookieValues.token||'' 18config.memberId=cookieValues.MemberKey||'' 19config.touristCode=cookieValues.touristCode||'' 20config.device=cookieValues.device||'' 21config.custom=custom 22config.brand=brand 23config.language=language 24MessageCenterUtils.getInterfaceAddress({async:!0,type:"get"},(data)=>{config.baseUrl=MessageCenterUtils.judgeEnvironment()?data[config.brand].memberApi.formal:data[config.brand].memberApi.test;Object.assign(MessageCenterRequest.config,config) 25this.init(config)})};messageEvents.prototype={config:{},protoData:{itemData:{},index:0,iconImg:"https://images.imyfone.com/imyfonepublic/assets/img/icon/message-icon.png",},init(config){this.config=config 26let structure=config.structure 27if(!this.config.touristCode){MessageCenterRequest.setDevice((res)=>{const code=res.data.tourists_code;if(res.code===200){this.config.tourists_code=code;code&&MessageCenterUtils.setCookieForToday('touristCode',code) 28$('*[data-visitors-Identifier]').html(code) 29config.custom?MessageCenterRequest.getData({structure},this.handleDataFn.bind(this)):this.initState=!0;String(res.data.is_create)==='1'&&dataLayer?.push({event:'client_id_creat',  30clientId:code }); }else{this.initState=!0 31return res}})}else{$('*[data-visitors-Identifier]').html(this.config.touristCode) 32config.custom?MessageCenterRequest.getData({structure},this.handleDataFn.bind(this)):this.initState=!0}},async handleDataFn(res){const ok=res.every(i=>i.code===200) 33const data=ok?(this.config.structure.isHistory?[...res[0].data,...res[1].data]:[...res[0].data]):[] 34if(this.config.structure.dataOnly){this.config.structure.onData&&this.config.structure.onData(data) 35return} 36this.setData(data)},open(){$("#messageModal").fadeIn();this.editMessage(this.protoData.itemData[0],$('.list-item').eq(0));dataLayer.push({'event':'message_center_icon_click'})},close(){$("#messageModal").fadeOut()},computeTimestamp(timestamp){let date=new Date(timestamp*1000) 37let{timeSort}=this.config.structure 38let symbol="/" 39let sort=!1 40if(timeSort){timeSort.sort&&(sort=timeSort.sort) 41timeSort.symbol&&(symbol=timeSort.symbol)} 42let result=sort?`${date.getDate()}${symbol}${date.getMonth() + 1}${symbol}${date.getFullYear()}`:`${date.getFullYear()}${symbol}${date.getMonth() + 1}${symbol}${date.getDate()}` 43return result},setData(data){if(this.config.structure.isLocalSave){const localMessage=(localStorage.getItem('messageList'))?JSON.parse(localStorage.getItem('messageList')):[] 44if(!this.token){data.forEach(item=>{const index=localMessage.findIndex(lm=>Number(lm.id)===Number(item.id));if(index===-1){item.is_read='2' 45item.create_time=MessageCenterUtils.getCurrentTimezone(+new Date()) 46localMessage.unshift(item)}});localStorage.setItem('messageList',JSON.stringify(localMessage)) 47data=localMessage}else{const dataIds=new Set(data.map(item=>item.id));localMessage=localMessage.filter(item=>dataIds.has(item.id));const mergedArray=[...data,...localMessage];const uniqueArray=Array.from(new Map(mergedArray.map(item=>[item.id,item])).values());data=uniqueArray.sort((a,b)=>new Date(b.create_time)-new Date(a.create_time))}} 48let htmlContent="";if(data.length){let _this=this 49let resortData=data.sort((a,b)=>b.effective_time-a.effective_time) 50resortData.forEach((element,index)=>{htmlContent+=` 51 <li class="list-item ${index === 0 ? "active" : ""}"> 52 <div class="list-item-left"> 53 <picture> 54 <source srcset="${element.thumbnail_url}"> 55 <img src="${element.thumbnail_url || this.protoData.iconImg}" onerror="this.onerror=null; this.src='${this.protoData.iconImg}'" alt="image"> 56 ${element.is_read === '2' ? '<span class="message-badge"></span>' : '' } 57 </picture> 58 </div> 59 <div class="list-item-right"> 60 <div class="list-item-title text-overflow">${ 61 element.title 62 }</div> 63 <div class="list-item-content two-text-overflow">${
64 element.content || "ææ¶æ²¡ææ´å¤æè¿°" 65 }</div> 66 <div class="list-item-time">${_this.computeTimestamp(element.effective_time)}</div> 67 </div> 68 </li> 69 `;if(index===0){htmlContent+=` 70 <div class="list-item mobile-pre-cover"> 71 <img src="${element.image_url}" alt="" data-open-url=${element.open_url} alt="image"> 72 </div> 73 `}})} 74this.protoData.itemData=data;this.createModal(htmlContent,data)},isRead:!1,createModal(htmlContent,data){let bodyContent='' 75let{emptyDom,titleText,isNormalNone,callback}=this.config.structure 76if(data.length){bodyContent=` 77 <ul class="list-wrapper"> 78 ${htmlContent} 79 </ul> 80 <div class="pre-cover"> 81 <a href="${data[0].open_url}" target="_blank"> 82 <img src="${data[0].image_url}" data-open-url="${data[0].open_url}" alt="image"> 83 </a> 84 </div> 85 `} 86const emptyContent=` 87 <div class="modal-body-empty"> 88 ${ 89 emptyDom || `<picture><source srcset="https://images.imyfone.com/imyfonepublic/assets/img/icon/message-empty.webp"><img src="https://images.imyfone.com/imyfonepublic/assets/img/icon/message-empty.png" onerror="this.onerror=null; this.src='https://images.imyfone.com/assets/img/purchase/loadding.webp'" alt="image"></picture>` 90 } 91 </div> 92 ` 93const modalHTML=` 94 <div class="member-message-modal"> 95 <div class="modal-background"></div> 96 <div class="modal"> 97 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="modal-close"> 98 <rect x="4.57568" y="2.45386" width="23.9995" height="2.99994" rx="1.49997" transform="rotate(45 4.57568 2.45386)" fill="#2E2E2E"/> 99 <rect x="2.4541" y="19.4246" width="23.9995" height="2.99994" rx="1.49997" transform="rotate(-45 2.4541 19.4246)" fill="#2E2E2E"/> 100 </svg> 101 <div class="modal-content"> 102 <div class="modal-header"> 103 ${ titleText || "Message Center" } 104 </div> 105 <div class="modal-body"> 106 ${data.length ? bodyContent : emptyContent} 107 </div> 108 </div> 109 </div> 110 </div> 111 ` 112$("#modal-container").html(modalHTML);this.bindEventListener() 113isNormalNone&&$(".btn-message-model").addClass("modal-content-normal") 114if($("#modal-container").find("span").hasClass("message-badge")){$(".btn-message-model").addClass("message-badge") 115callback&&callback()}},editMessage(item,element){let _this=this 116const memberId=this.config.memberId 117function removeAllBadge(){if($(".modal-content .list-wrapper>
117li").length===1||!$("#modal-container").find("span").hasClass("message-badge"))$(".btn-message-model").removeClass("message-badge")} 118function setReadStatus(){_this.protoData.itemData.filter(i=>Number(i.id)===Number(item.id))[0].is_read='1' 119element.find('.message-badge').remove() 120removeAllBadge()} 121function setAjaxStatus(){MessageCenterRequest.readMessage({message_center_id:item.id,member_id:memberId,},(res)=>{const{code}=res;if(code===200)setReadStatus()})} 122if(!_this.config.structure.isLocalSave){if(!item||!item.id)return 123Number(item.is_read)===2&&setAjaxStatus() 124return} 125if(!this.token){const queryData=this.protoData.itemData.filter(i=>Number(i.id)===Number(item.id)) 126if(!queryData.length)return 127setReadStatus() 128localStorage.setItem('messageList',JSON.stringify(this.protoData.itemData))}else{if(!item.id)return 129setAjaxStatus()}},bindEventListener(){$('.btn-message-model').click(function(){$('.modal-background, .modal').fadeIn()});$('.modal-background').click(function(){$('.modal-background, .modal').fadeOut();dataLayer.push({'event':'message_popup_click','event-action':'close'})});$('.modal').click(function(event){event.stopPropagation()});$('.modal-close').click(function(){$('.modal-background, .modal').fadeOut();dataLayer.push({'event':'message_popup_click','event-action':'close'})});const _this=this 130$(".list-wrapper").on("click","li",function(event){const index=$(this).index(".list-wrapper li");$(".list-item").removeClass("active");$(".list-item").next("div.mobile-pre-cover").remove();const imgSrc=_this.protoData.itemData[index].image_url;const openUrl=_this.protoData.itemData[index].open_url;$(this).addClass("active");$(this).after(` 131 <div class="list-item mobile-pre-cover"> 132 <picture> 133 <source srcset="${imgSrc}"> 134 <img src="${imgSrc}" data-open-url="${openUrl}" onerror="this.onerror=null; this.src='https://static-sns.imyfone.cn/sns/img/blog/2024-01-04/6596a312a192c.png'"> 135 </picture> 136 </div> 137 `);$(".pre-cover img").attr("src",imgSrc).attr("data-open-url",openUrl);$(".pre-cover a").attr("href",openUrl);_this.editMessage(_this.protoData.itemData[index],$(this)) 138this.scrollIntoView({behavior:'smooth',block:'nearest',inline:'start'});!$("#modal-container").find("span").hasClass("message-badge")&&$(".btn-message-model").removeClass("message-badge")});$(".list-wrapper .list-item").on("click",function(event){dataLayer.push({'event':'message_popup_click','event-action':'click_message'})}) 139$(".btn-message-model").on('click',function(){_this.open()}) 140$(".mobile-pre-cover img, .pre-cover a").click(function(){dataLayer.push({'event':'message_popup_click','event-action':'click_image'})});this.initState=!0}};if(typeof module!=="undefined"&&module.exports) 141module.exports=messageEvents;if(typeof define==="function") 142define(function(){return messageEvents});global.messageEvents=messageEvents})(this)
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.