1let FroomleSDK=(()=>{let d={API_URL:"https://europe-west1.froomle.com/api/nhandan",PAGE_TYPES:{0:"home",1:"article_detail",4:"category"},LIST_NAMES:{"www-desktop":{home:{mostread:"desktop_home_mostread_tp8AdVbjBQ9ajo3n8Z5PyD"},category:{mostread:"desktop_category_mostread_4haid5X3i8zXMT44cjFh2a"},article_detail:{continue_reading:"desktop_article_Ñontinue_reading_4iFmGGcC1FwZGjyQ3jcdhP",mostread:"desktop_article_mostread_nc1fxfrDTKwcDqziZvynNb"}},"www-mobile":{home:{mostread:"mobile_home_mostread_4sBXBoFo9FijzehD45tBmN"},category:{mostread:"mobile_category_mostread_aMzbGR7EGp9AfdNtD69Z1N"},article_detail:{continue_reading:"mobile_article_Ñontinue_reading_fvQeNEoaadWXm4yFPzBtAB"}}}};function _(r,a,o=5e3){return new Promise((e,t)=>{let i=new XMLHttpRequest;i.open("POST",r,!0),i.setRequestHeader("Content-Type","application/json"),i.timeout=o,i.ontimeout=()=>t(new Error("Request timeout")),i.onload=()=>200<=i.status&&i.status<300?e(i.responseText):t(new Error(i.statusText)),i.onerror=()=>t(new Error("Network error")),i.send(JSON.stringify(a))})}async function m(t,e={}){try{var i={events:[{event_type:t,...u,...e}]};[r,a={}]=[t,e],"function"==typeof gtag&>ag("event",{page_visit:"page_view",detail_pageview:"view_item",click_on_recommendation:"click_item"}[r]||r,{event_category:"froomle",event_label:a.action_item||"",list_name:a.list_name||"",request_id:a.request_id||"",user_group:a.user_group||"",page_type:u.page_type,channel:u.channel}),await _(d.API_URL+"/events",i)}catch(e){console.error(`Error sending ${t} event:`,e)}var r,a}function g(e){e=e.match(/post(\d+)\.html/);return e?e[1]:""}async function e(e,o,t){try{var n=window.cmsConfig?.appendRecommendations??!1;let a=e.startsWith('[data-source="recommendation-"')?document.querySelector('[data-source^="recommendation-"]'):document.querySelector(e);if(a){i=o;let r=(d.LIST_NAMES[u.channel]?.[u.page_type])?.[i]||"";if(r){let i=await(async(e,i,r,a)=>{e={...u,lists:Array.isArray(e)?e.map((e,t)=>{e={list_name:e,list_size:i[t],configuration_id:"nhandan_autofill",regions:void 0!==a&&0<a.length?a:["Viá»t Nam"]};return void 0!==r&&0<r.length&&(e.topics=r),e}):[{list_name:e,list_size:i,configuration_id:"nhandan_autofill",regions:void 0!==a&&0<a.length?a:["Viá»t Nam"],...void 0!==r&&0<r.length?{topics:r}:{}}]},"article_detail"===u.page_type&&window.cmsConfig?.objectId&&(e.context_item_type="article",e.context_item=window.cmsConfig.objectId.toString());try{var t=await _(d.API_URL+"/recommendations/requests",e);return JSON.parse(t)}catch(e){return console.error("Error fetching recommendations:",e),{lists:[]}}})([r],[t],window.topicNames,window.regionNames);var s=(i.lists||[]).find(e=>e.list_name===r)?.items||[];if(s.length){let t=n?Array.from(a.querySelectorAll(".story__heading[data-tracking]")).map(e=>e.getAttribute("data-tracking")):[];var c,l=n?s.filter(e=>!t.includes(g(e.uri))).slice(0,"mostread"===o?3:"continue_reading"===o?8:s.length):s;let e="";switch(o){case"mostread":e=l.map(e=>{var t=g(e.uri);return t?` 2 <article class="story froomle"> 3 <h2 class="story__heading" data-tracking="${t}"> 4 <a class="cms-link" href="${e.uri}" 5 title="${e.title}"> 6 ${e.title} 7 </a> 8 </h2> 9 </article> 10 `:""}).join("");break;case"continue_reading":e=l.map(e=>{var t=g(e.uri);return t?` 11 <article class="story froomle"> 12 <figure class="story__thumb"> 13 <a class="cms-link" href="${e.uri}" 14 title="${e.title}"> 15 <img src="${e.images[0]}"> 16 </a> 17 </figure> 18 <h2 class="story__heading" data-tracking="${t}"> 19 <a class="cms-link" href="${e.uri}" 20 title="${e.title}"> 21 ${e.title} 22 </a> 23 </h2> 24 </article> 25 `:""}).join("")}n?((c=document.createElement("div")).innerHTML=e,Array.from(c.children).reverse().forEac
25h(e=>{a.insertBefore(e,a.firstChild)})):a.innerHTML=e,0<l.length&&(a.querySelectorAll(".story.froomle").forEach(e=>{let t=e.querySelector(".story__heading").getAttribute("data-tracking");t&&e.addEventListener("click",()=>{m("click_on_recommendation",{list_name:r,action_item:t,action_item_type:"article",request_id:i.request_id??"",user_group:i.user_group??"froomle"})})}),"undefined"!=typeof CMSTracking)&&CMSTracking.getInstance().initImpressionTracking()}}}}catch(e){console.error("Error displaying recommendations:",e)}var i}let u=(()=>{var{device_id:e,user_uid:t}=(()=>{var e=localStorage.getItem("cms_device_id")||(e=crypto.randomUUID(),localStorage.setItem("cms_device_id",e),e);let t="";try{var i=JSON.parse(localStorage.getItem("cms_user_info")||"null"),r=i?.profile?.user_id;0<r&&(!i.expire||i.expire>Date.now())&&(t=r.toString())}catch(e){}return localStorage.removeItem("cms_user_id"),{device_id:e,user_uid:t}})(),i=/Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),r=window.cmsConfig?.pageType??1e3;return{channel:i?"www-mobile":"www-desktop",page_type:d.PAGE_TYPES[r]||"other",device_id:e,...t?{user_id:t}:{}}})();return{init:async function(){"article_detail"===u.page_type&&window.cmsConfig?.objectId?(await m("detail_pageview",{action_item:window.cmsConfig.objectId.toString(),action_item_type:"article"}),await e('[data-source="recommendation-"]',"continue_reading",18)):await m("page_visit"),await e('[data-source="mostread-news"]',"mostread",6)}}})();(async()=>{await FroomleSDK.init()})();
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.