PageSourceSearch

https://public.imyfone.com/assets/js/connection_ember_system/tourist_message.js

js imyfone.com collected 2026-09-24 09:19:56 UTC 18,512 bytes, 142 lines download raw bytes

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"&&params!==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()+"&timestamp="+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.