KOMPAS.com - Umat Kristiani di seluruh dunia akan merayakan hari Natal 2023 pada Senin (25/12/2023).

Setiap tahun, hari Natal disambut dengan penuh suka cita dan beragam kemeriahan.

Biasanya, momen Natal menjadi kesempatan untuk berkumpul dan bersua dengan keluarga.  Berbagai persiapan pun dilakukan, seperti menghias pohon Natal di sudut rumah atau memasang dekorasi di dinding ruangan.

Tak hanya itu, kehangatan hari Natal juga disambut dengan saling berbagi kata-kata ucapan kepada kerabat jauh dan rekan kerja.

Perayaan Natal juga bisa disemarakkan dengan mengunggah twibbon hari Natal di media sosial.

Baca juga: Wilayah yang Berpotensi Hujan Lebat dan Angin Kencang Saat Natal dan Tahun Baru 2024

40 link Twibbon hari Natal 2023

Untuk merayakan hari raya Natal 2023 dan bertukar pesan dengan kerabat dan rekan jauh, Anda bisa memasang twibbon hari Natal.

Twibbon hari Natal merupakan template berupa bingkai yang dihiasi ornamen khas Natal dan ditambahkan dengan foto pribadi.

Dihimpun dari Twibbonize, berikut 30 pilihan twibbon hari raya Natal yang bisa Anda gunakan:

  1. Link twibbon hari Natal 2023
  2. Link twibbon hari Natal 2023
  3. Link twibbon hari Natal 2023
  4. Link twibbon hari Natal 2023
  5. Link twibbon hari Natal 2023
  6. Link twibbon hari Natal 2023
  7. Link twibbon hari Natal 2023
  8. Link twibbon hari Natal 2023
  9. Link twibbon hari Natal 2023
  10. Link twibbon hari Natal 2023
  11. Link twibbon hari Natal 2023
  12. Link twibbon hari Natal 2023
  13. Link twibbon hari Natal 2023
  14. Link twibbon hari Natal 2023
  15. Link twibbon hari Natal 2023
  16. Link twibbon hari Natal 2023
  17. Link twibbon hari Natal 2023
  18. Link twibbon hari Natal 2023
  19. Link twibbon hari Natal 2023
  20. Link twibbon hari Natal 2023
  21. Link twibbon hari Natal 2023
  22. Link twibbon hari Natal 2023
  23. Link twibbon hari Natal 2023
  24. Link twibbon hari Natal 2023
  25. Link twibbon hari Natal 2023
  26. Link twibbon hari Natal 2023
  27. Link twibbon hari Natal 2023
  28. Link twibbon hari Natal 2023
  29. Link twibbon hari Natal 2023
  30. Link twibbon hari Natal 2023
  31. Link twibbon hari Natal 2023
  32. Link twibbon hari Natal 2023
  33. Link twibbon hari Natal 2023
  34. Link twibbon hari Natal 2023
  35. Link twibbon hari Natal 2023
  36. Link twibbon hari Natal 2023
  37. Link twibbon hari Natal 2023
  38. Link twibbon hari Natal 2023
  39. Link twibbon hari Natal 2023
  40. Link twibbon hari Natal 2023

Baca juga: Jam Operasional BSI Selama Libur Natal 2023 dan Tahun Baru 2024

Cara pakai twibbon hari Natal 2023

Untuk menggunakan template twibbon hari raya Natal, caranya cukup mudah, yaitu sebagai berikut:

  • Buka salah satu tautan twibbon hari raya Natal 2023 dari link di atas melalui browser ponsel atau laptop
  • Klik opsi “Choose a Photo”
  • Pilih foto atau gambar dari galeri yang terdapat di ponsel atau laptop
  • Sesuaikan letak foto tersebut dengan bingkai yang terdapat di Twibbon
  • Klik opsi "Next"
  • Jika foto berhasil disesuaikan dengan bingkai di Twibbon Hari Raya Natal 2023, silakan klik opsi "Download"

Twibbon hari Natal 2023 yang sudah diedit pun bisa diunduh dan digunakan di media sosial Anda.

Baca juga: Pohon Natal Pertama di Dunia, Ada di Mana?

Untuk melengkapi twibbon hari Natal yang diunggah di media sosial, Anda membutuhkan kata-kata selamat hari Natal 2023 sebagai caption.

Dikutip dari Kompas.com (2022), berikut kata-kata ucapan selamat hari Natal dalam berbagai versi:

1. Ucapan selamat Natal dari kutipan tokoh

  • Natal adalah musim tidak hanya untuk bersukacita tetapi juga refleksi (Winston Churchill)
  • Semoga musim ini mengantarkanmu berada di antara orang-orang yang kamu cintai, berbagi dalam kemuliaan dari kemurahan hati dan rasa syukur (Oprah Winfrey)
  • Natal adalah hari penuh makna dan tradisi, hari istimewa yang dihabiskan dalam lingkaran hangat keluarga dan teman (Margaret Thatcher)
  • Bukan berapa banyak yang kita berikan tetapi berapa banyak cinta yang kita tuangkan ke dalam pemberian itu (Bunda Teresa)
  • Natal adalah cinta dalam tindakan. Setiap kali kita mencintai, setiap kali kita memberi, itulah Natal (Dale Evans)

2. Ucapan selamat Natal Inspiratif

  • Apa pun yang indah, apa pun yang bermakna, apa pun yang membuatmu bahagia, semoga itu menjadi milikmu di liburan Natal ini dan sepanjang tahun mendatang
  • Semangat Natal itu cerah dan ajaib. Saat kamu mulai merasakannya, itu akan memikatmu dengan harapan dan keajaiban yang bertahan setelah musim liburan
  • Natal dikelilingi oleh cinta, kegembiraan, dan harapan. Sampaikan pesan ini kepada semua orang untuk menyebarkan cahaya liburan yang indah ini
  • Saya mengirimkan cinta, kekuatan, dan dukungan tak tergoyahkan untukmu pada musim liburan ini
  • Kamu terus-menerus menerangi duniaku. Itulah mengapa rasanya seperti Natal setiap hari bersamamu

Baca juga: 6 Cara Cek Tarif Tol Online Jelang Libur Natal dan Tahun Baru 2024

3. Ucapan selamat Natal untuk orang terkasih

  • Semangat Natal identik dengan berbagi, khususnya berbagi kepada mereka yang kurang beruntung dalam hidup ini. Dengan merayakan Natal, kita sedang bersyukur atas prakarsa Tuhan berbagi hidup dengan umat manusia. Selamat Natal bagi kita semua
  • Kepada saudara-saudariku umat Kristiani, saya ucapkan selamat hari raya Natal. Semoga Yesus tidak hanya datang di antara kita, tetapi juga di dalam diri kita. Membawa pembaharuan dan damai
  • Kiranya kehangatan Natal menghampiri kamu dan seisi rumahmu. Selamat Natal untuk saudara-saudaraku semua
  • Selamat hari Natal, 25 Desember 20234. Kiranya perayaan Natal membawa kehangatan lewat alunan musik-musik yang indah di tengah kita semua
  • Di malam Natal yang penuh kehangatan ini, semoga Tuhan Yesus Kristus memberikan perlindungan dan penjagaan di mana pun kamu berada, Merry Christmas

4. Ucapan selamat Natal dalam bahasa Inggris

  • Merry Christmas to you and your family, and very best wishes for new year (selamat natal untukmu dan keluargamu, juga doa terbaik untuk tahun baru)!
  • From our family to yours, have a wonderful Christmas (dari keluargaku untuk keluargamu, semoga natal menyenangkan)!
  • Merry Christmas! Wishing you all the happiness in the world (selamat natal! Semoga kamu mendapatkan semua kebahagiaan di dunia)
  • May God protect you and your family this Christmas and in the new year ahead (semoga Tuhan melindungimu dan keluargamu di hari natal ini juga di tahun baru yang akan datang)
  • Merry Christmas! May the holiday bring you joy, laughter, and qulity time with friends and family (Selamat hari Natal! Semoga liburan ini memberimu kegembiraan, tawa, dan waktu yang terkualitas bersama teman dan keluarga)

Baca juga: Rekomendasi 5 Film di Bioskop, Cocok untuk Isi Libur Nataru


Simak breaking news dan berita pilihan kami langsung di ponselmu. Pilih saluran andalanmu akses berita Kompas.com WhatsApp Channel : https://www.whatsapp.com/channel/0029VaFPbedBPzjZrk13HO3D. Pastikan kamu sudah install aplikasi WhatsApp ya.






`);
var wSpecStop = createElementFromHTML(`

Konten disembunyikan.
Muat ulang halaman untuk perbarui rekomendasi.

`);
reactionPopup.querySelector('.buttonShare').setAttribute('data-title', item.title);
reactionPopup.querySelector('.buttonShare').setAttribute('data-url', itemUrl);
reactionPopup.querySelector('.buttonShare').setAttribute('data-campaign', 'AIML_Widget_Desktop');

let userFeedback = new UserFeedback(resultObj.engine['tracker_algsrc'], itemUrl + tracker_params, jxRecHelper, index);

reactionPopup.querySelector('.buttonBookmark').addEventListener('click', function() {
do_bookmark(itemUrl, index, userFeedback);
});

reactionPopup.querySelector('.buttonShare').addEventListener('click', function() {
userFeedback.event('share');
});

reactionPopup.querySelector('.buttonNotInterest').addEventListener('click', function() {
if (getCookie('kmps_usrid')) {
hideThisArt(this);
userFeedback.event('not-interested');
} else {
const parentAction = this.parentElement.parentElement.parentElement
if (!!parentAction) {
let indexElement = parentAction.getAttribute('data-index')
if (indexElement != 'undefined') {
localStorage.setItem('reaction_not_interest_temp', JSON.stringify({
urlpage: items[indexElement].url
}))
}
}
window.location.href = "https://account.kompas.com/login/a29tcGFz/" + btoa(window.location.href);
}
});

/**
* trigger action "userFeedback" that user not interest item before, when not interest without login
*/
if (getCookie('kmps_usrid') && localStorage.getItem('reaction_not_interest_temp')) {
const tempUrlNotInterest = JSON.parse(localStorage.getItem('reaction_not_interest_temp'))
if (itemUrl == tempUrlNotInterest.urlpage) {
userFeedback.event('not-interested');
localStorage.removeItem('reaction_not_interest_temp');
}
}

wSpecStop.querySelector('.wSpec-stop-undo').addEventListener('click', function() {
showThisArt(this);
userFeedback.event('un-not-interested');
});

recItem.appendChild(buttonOption);
recItem.appendChild(reactionPopup);
recItem.appendChild(wSpecStop);
}

var recItemWrapperA = createElement('a', null, null, null);
recItemWrapperA.setAttribute('href', itemUrl + tracker_params);

var titleDiv = createElement('h4', null, null, [cssClasses.title]);
var titleTextNode = document.createTextNode(item.title);
if (item.itemType == 'video') {
var iconVideo = createElement('div', null, null, ['icoInline', 'icoVideo']);
iconVideo.style.marginRight = '5px';
titleDiv.appendChild(iconVideo);
}
titleDiv.appendChild(titleTextNode);

var sourceDiv = null;
if (item.hasOwnProperty('method')) {
sourceDiv = createElement('div', null, null, [cssClasses.source], resultObj.engine['type'] + ' . ' + item.method.toUpperCase());
} else {
var sourceDiv = createElement('div', null, null, [cssClasses.source], resultObj.engine['type']);
}

var textWrapper = createElement('div', null, null, [cssClasses.text_wrapper]);
textWrapper.appendChild(categoryDiv);
textWrapper.appendChild(titleDiv);
textWrapper.appendChild(sourceDiv);

recItemWrapper.appendChild(imgWrapper);
recItemWrapper.appendChild(textWrapper);

recItemWrapperA.appendChild(recItemWrapper);

recItem.appendChild(recItemWrapperA);

widgetWrapper.appendChild(recItem);
// hook up the click handler for this item
// recItem.onclick = handleClick.bind(null, jxRecHelper, itemUrl + tracker_params, index);
recItemWrapperA.onclick = handleClick.bind(null, jxRecHelper, itemUrl + tracker_params, index);
});
} // end while
var endDate = new Date();
var loadtime = (endDate.getTime() - startDate.getTime());
trackEventGa('AIML Article Recommendation', 'Content Loaded', 'algsrc='+algsrc+',site=TREN,device=desktop,loadtime=' + loadtime)

let domain = window.location.hostname;
if(domain=='www.kompas.com'){
var url=window.location.href.split("/");
domain=url[2]+'/'+url[3]
}
let user_subs_type = "Gues";
let subs_type = "";
let is_lgn = 0;
let engine = algsrc;
if(getCookie('kmps_usrid')){is_lgn=1};
let time_load = loadtime;

resolve();

/***
* JXRECSDK NOTES 3 of 5 -
* pass all the info about the items to the rec helper
* each one is an object: ALL MANDATORY
* div
* id
* pos
*/
jxRecHelper.items(widgetItemArr);
/***
* JXRECSDK NOTES 4 of 5 -
* Call the ready() of the helper object when the recommendation
* results have been populated to the widget
* (This will register the action=ready event)
*/
if (resultObj.engine['type'] == 'api-1') {
jxRecHelper.ready(resultObj.options.algo + ":" + resultObj.options.version);
} else {
jxRecHelper.ready(resultObj.engine['type']);
}
} else {
jxRecHelper.error(204);
console.error("Error: no recommendation items");
return;
}
} catch (err) {
jxRecHelper.error(901);
console.log(err.stack);
let domain = window.location.hostname;
if(domain=='www.kompas.com'){
var url=window.location.href.split("/");
domain=url[2]+'/'+url[3]
}
let user_subs_type = "Gues";
let subs_type = ""
let is_lgn = 0;
let engine = algsrc;
if(getCookie('kmps_usrid')){is_lgn=1};
let endDate = new Date();
let time_load = (endDate.getTime() - startDate.getTime());
}
});
}

const _jxRecSdkURL = 'https://scripts.jixie.media/jxrecsdk.1.0.min.js';
var startDate = new Date();
class OneWidget {
constructor() {
//this is also the one we will pass to the JX rec helper object when
//we instantiate it:
//In this implementation most of these come from the options obj
//on the publisher page.
this._options = {
accountid: '9262bf2590d558736cac4fff7978fcb1',
pageurl: 'https://www.kompas.com/tren/read/2023/12/24/094500765/40-link-twibbon-dan-kata-kata-selamat-natal-2023-bisa-diunggah-di-media',
widget_id: '1000183-6xWeiWZFIM',
type: 'pages',
container: 'rekomendasi-konten-pilihan-untukmu-aiml',
keywords: content_tags,
title: title,
customid: "65",
count: 14,
};
this._containerId = this._options.container;
this._container = document.getElementById(this._containerId);
this._engines = [{"url":"https://recommendation.jixie.media/v1/recommendation","method":"GET","pageurl":"https://www.kompas.com/tren/read/2023/12/24/094500765/40-link-twibbon-dan-kata-kata-selamat-natal-2023-bisa-diunggah-di-media","system":"jx","type":"api-1","tracker_params":"?source=widgetML","tracker_algsrc":"V","count":14,"page_status":"read","excludeitemids":"20231224094500765"}];
}
kickOff() {
startDate = new Date();
const rand = Math.floor(Math.random() * 1000);
/*const randSystem = Math.floor(Math.random() * 3);
this._engine = this._engines[randSystem]
if (location.hostname.indexOf('lestari') != -1) {
this._engine = this._engines[1]
}*/
this._engine = this._engines[0];
this._options.system = this._engine['system']
trackEventGa('AIML Article Recommendation', 'Widget load', 'algsrc=' + this._engine['tracker_algsrc'] + ',site=TREN,device=desktop')
let promJXSDK = fetchJSFileP(_jxRecSdkURL);
let thisObj = this;

// first we wait on the JX REC SDK to be loaded and initialized
let recHelperObj = null;
let recResults = null;
promJXSDK
.then(function() {
/***
* JXRECSDK NOTES 1 of 5 - INSTANTIATION OF A JX REC HELPER OBJECT
* Call this AFTER JX REC SDK is loaded but BEFORE you call your REC
* backend.
*
* param: MANDATORY options object
* options object must at a minimal have
* accountid: get from jixie
* widgetid: get from jixie
* container: DIV ID of the destination div to house the widget
* (for jixie widget this is just the options object passed from the page)
*
* (This will also register the action=load event)
*/
recHelperObj = jxRecMgr.createJxRecHelper(thisObj._options);

let basicInfo = thisObj._options;
basicInfo.engine = thisObj._engine

if (basicInfo.engine.type == 'api-1') {
var options = {
count: basicInfo['count'],
adpositions: "",
keywords: basicInfo['keywords'],
title: basicInfo['title'],
date_published: "2023-12-24",
pagecategory: "TREN",
algo: "mixed"
};

if(getCookie('kmps_usrid')){

var kg = {
pagetype:basicInfo.engine.page_status,
uid:getCookie('kmps_usrid'),
ukid:getCookie('kmp_uid')
}

if(basicInfo.engine.page_status=='read'){
kg['excludeitemids'] = basicInfo.engine.excludeitemids;
kg['multiFormat'] = true;
}

options['additional'] = {
kg:kg
};
}
return recHelperObj.getJxRecommendations(options);
} else {
return fetchRecommendationsP(basicInfo, recHelperObj.getJxUserInfo());
}
})
.then(function(resp) {
if (thisObj._engine.type == 'api-3') {
recResults = new Object
recResults.items = resp.docs.result;
} else {
recResults = resp;
}
recResults.engine = thisObj._engine;
if (!resp || !recResults.items || recResults.items.length == 0) {
/***
* JXRECSDK NOTES 2 of 5 -
* Call the error() function on the recHelper when either an error
* has occured in the fetching or there are no recommended items
*
* (This will register the action=error event)
*/
recHelperObj.error(204);
throw "no recommendation results";
}
})
.then(function() {
// everything is ready (recommendation results, css):
document.getElementById("rekomendasi-konten-pilihan-untukmu-aiml").classList.remove("-loading");
document.querySelector('.wSpec-list').remove();
createDisplay(rand, thisObj._container, recResults, recHelperObj)
.then(function() {
toggleDropdown();

//observe lozad
lozad('.lozad', {
load: function(el) {
el.src = el.dataset.src;
el.onload = function() {
el.classList.add('fade')
}
}
}).observe()
})
})
.catch(function(error) {
console.log(`Unable to create recommendations widget ${error.stack} ${error.message}`);
});
}
}

var limit_gtm_ready = 1;

function check_gtm_ready() {
if ('ga' in window) {
// create a new instance of our widget based on the options
const newW = new OneWidget();
newW.kickOff();
} else {
const timeout_gtm_ready = setTimeout(check_gtm_ready, 500)
limit_gtm_ready += 1;
if (limit_gtm_ready > 10) {
clearTimeout(timeout_gtm_ready);
const newW = new OneWidget();
newW.kickOff();
}
}
}

check_gtm_ready()

document.querySelector('.wSpec-secret').addEventListener('click', function(e) {
e.preventDefault();
let wSl = document.querySelectorAll('.wSpec-source');
if (wSl.length > 0) {
for (let i = 0; i < wSl.length; i++) {
wSl[i].classList.toggle('show')
}
}
})

function trackEventGa(category, action, label) {
if ("ga" in window) {
ga(function() {
tracker = ga.getAll()[0];
if (tracker) {
tracker.send("event", category, action, label);
console.log('track event ', category, action, label)
}
})
}
}

function formBody(obj) {
let formBody = [];
for (var property in obj) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(obj[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
return formBody.join("&");
}

function getCookie(name) {
var name = name + '=';
var cookies = decodeURIComponent(document.cookie).split(';');
for (var i = 0; i < cookies.length; i++) {
var c = cookies[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
}

function get_guid(url) {
const videoPath = url.match(//watch/(d+)/);
if (videoPath) {
return `video.${videoPath[1]}`;
}

let arrayUrl = url.split('/');
let readPath = arrayUrl.indexOf('read');
if (arrayUrl[readPath + 1] == 'xml') {
readPath += 1;
}
let year = arrayUrl[readPath + 1];
let month = arrayUrl[readPath + 2];
let date = arrayUrl[readPath + 3];
let id = arrayUrl[readPath + 4];
let guid = `.xml.${year}.${month}.${date}.${id}`;
return guid;
}

function toggleDropdown() {
let tdd = document.querySelectorAll('[data-dropdown]')
if (!!tdd) {
tdd.forEach((el) => {
el.addEventListener('click', function() {
el.parentElement.classList.toggle('-active')
let saved = el.parentElement.getAttribute('data-saved')
let kmps_usrid = getCookie('kmps_usrid');

if (kmps_usrid && !saved && el.parentElement.classList.contains('-active')) {
let url = el.parentElement.getAttribute('data-url');
let guid = get_guid(url);
check_bookmark(
kmps_usrid,
guid
).then(function(resp) {
if (resp.hasOwnProperty('total_data')) {
if (resp.total_data > 0) {
el.parentElement.querySelector('.buttonBookmark').classList.add('-active');
el.parentElement.querySelector('.buttonBookmark').innerHTML = 'Hapus dari tersimpan';
el.parentElement.setAttribute('data-saved', 'true');
} else {
el.parentElement.setAttribute('data-saved', 'false');
}
}
})
}
})
document.addEventListener("click", function(e) {
// console.log(e.target)
if (el.contains(e.target)) {
// console.log(tdd)
} else {
el.parentElement.classList.remove('-active')
}
});
});
}
}

function check_bookmark(kmps_usrid, guid) {
let url = `https://api.kompas.com/2021/reaction/bookmark/list?kmps_usrid=${kmps_usrid}&guid=${guid}`;
return new Promise(function(resolve, reject) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
resolve(JSON.parse(this.responseText))
}
};
xmlhttp.open("GET", url, true);
xmlhttp.send();
});
}

function do_bookmark(pageurl, pos, userFeedback) {
const wSpecItem = document.querySelector(`.wSpec-item[data-index="${pos}"]`);
const btnBookmark = wSpecItem.querySelector('.buttonBookmark');
const kmps_usrid = getCookie('kmps_usrid');
const guid = get_guid(pageurl);
const type = pageurl.match(//watch/(d+)/) ? 'video' : 'article';

if (kmps_usrid) {
if (btnBookmark.classList.contains('-active')) {
set_unbookmark({
guid: guid,
kmps_usrid: kmps_usrid,
type: type
}).then(function(resp) {
btnBookmark.classList.remove('-active');
btnBookmark.innerHTML = 'Simpan artikel';
reactionToast('Artikel berhasil dihapus dari list yang disimpan');
userFeedback.event('un-save');

}).catch(function(resp) {
// message: "Data doesn't exists"
if (resp.hasOwnProperty('message') && resp.message.includes('exist')) {
btnBookmark.classList.remove('-active');
btnBookmark.innerHTML = 'Simpan artikel';
reactionToast('Artikel berhasil dihapus dari list yang disimpan');
}
})
} else {
const user_bookmark_url = "https://activity.kompas.com/saved?order=desc";
set_bookmark({
guid: guid,
kmps_usrid: kmps_usrid,
type: type,
publisher: 'kompas',
platform: 'desktop'
}).then(function(resp) {
btnBookmark.classList.add('-active');
btnBookmark.innerHTML = 'Hapus dari tersimpan';
reactionToast('Artikel berhasil disimpan', user_bookmark_url);
userFeedback.event('save');
}).catch(function(resp) {
// message: "Data already exist"
if (resp.hasOwnProperty('message') && resp.message.includes('exist')) {
btnBookmark.classList.add('-active');
btnBookmark.innerHTML = 'Hapus dari tersimpan';
reactionToast('Artikel berhasil disimpan', user_bookmark_url);
}
})
}
} else {
const login_url = "https://account.kompas.com/login/a29tcGFz/" + btoa(window.location.href);
window.location.href = login_url;
}
}

function set_bookmark(data) {
const url = "https://api.kompas.com/2021/reaction/bookmark/add";
return new Promise(function(resolve, reject) {
const xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 201) {
resolve(JSON.parse(this.responseText));
} else if (this.readyState == 4 && this.status == 400) {
reject(JSON.parse(this.responseText));
}
};
xmlhttp.open("POST", url, true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.send(formBody(data));
});
}

function set_unbookmark(data) {
const url = "https://api.kompas.com/2021/reaction/bookmark/delete";
return new Promise(function(resolve, reject) {
const xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
resolve(JSON.parse(this.responseText));
} else if (this.readyState == 4 && this.status == 400) {
reject(JSON.parse(this.responseText));
}
};
xmlhttp.open("POST", url, true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.send(formBody(data));
});
}

class UserFeedback {

constructor(engine, pageurl, jxRecHelper, pos) {
this.engine = engine;
this.pageurl = pageurl;
this.jxRecHelper = jxRecHelper;
this.pos = pos;
}

event(feedback) {
if (this.engine == 'C') {
const xmlhttp = new XMLHttpRequest();
let params = {
domain: 'kompas.com',
ce_userid: getCookie('kmps_usrid'),
ce_sessionid: getCookie('ukid'),
ce_pageurl: this.pageurl,
engine: 'C',
ce_feedback: feedback
}
xmlhttp.open("GET", 'https://apis.kgdata.dev/v1/aiml/feedback-widgetml' + formatParams(params));
xmlhttp.send();
} else if (this.engine == 'V') {
if (feedback == 'share') {
this.jxRecHelper.shared(this.pos);
} else if (feedback == 'save') {
this.jxRecHelper.bookmarked(this.pos);
} else if (feedback == 'not-interested') {
this.jxRecHelper.hidden(this.pos);
} else if (feedback == 'un-not-interested') {
this.jxRecHelper.unhidden(this.pos);
}
}
}
}

function formatParams(params) {
return "?" + Object
.keys(params)
.map(function(key) {
return key + "=" + encodeURIComponent(params[key])
})
.join("&")
}

document.addEventListener("click", function(e){
let dx = document.querySelectorAll('[data-dropdown]')
if(dx) {
dx.forEach(function(el){
if(el.contains(e.target)) {
el.parentElement.classList.toggle('-active')
} else {
el.parentElement.classList.remove('-active')
}
})
}
})