window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.1.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.1.0\/svg\/","svgExt":".svg","source":{"wpemoji":"https:\/\/davetheravebangkok.com\/wp-includes\/js\/wp-emoji.js?ver=6.8.1","twemoji":"https:\/\/davetheravebangkok.com\/wp-includes\/js\/twemoji.js?ver=6.8.1"}};
/**
* @output wp-includes/js/wp-emoji-loader.js
*//**
* Emoji Settings as exported in PHP via _print_emoji_detection_script().
* @typedef WPEmojiSettings
* @type {object}
* @property {?object} source
* @property {?string} source.concatemoji
* @property {?string} source.twemoji
* @property {?string} source.wpemoji
* @property {?boolean} DOMReady
* @property {?Function} readyCallback
*//**
* Support tests.
* @typedef SupportTests
* @type {object}
* @property {?boolean} flag
* @property {?boolean} emoji
*//**
* IIFE to detect emoji support and load Twemoji if needed.
*
* @param {Window} window
* @param {Document} document
* @param {WPEmojiSettings} settings
*/
( function wpEmojiLoader( window, document, settings ) {
if ( typeof Promise === 'undefined' ) {
return;
}var sessionStorageKey = 'wpEmojiSettingsSupports';
var tests = [ 'flag', 'emoji' ];/**
* Checks whether the browser supports offloading to a Worker.
*
* @since 6.3.0
*
* @private
*
* @returns {boolean}
*/
function supportsWorkerOffloading() {
return (
typeof Worker !== 'undefined' &&
typeof OffscreenCanvas !== 'undefined' &&
typeof URL !== 'undefined' &&
URL.createObjectURL &&
typeof Blob !== 'undefined'
);
}/**
* @typedef SessionSupportTests
* @type {object}
* @property {number} timestamp
* @property {SupportTests} supportTests
*//**
* Get support tests from session.
*
* @since 6.3.0
*
* @private
*
* @returns {?SupportTests} Support tests, or null if not set or older than 1 week.
*/
function getSessionSupportTests() {
try {
/** @type {SessionSupportTests} */
var item = JSON.parse(
sessionStorage.getItem( sessionStorageKey )
);
if (
typeof item === 'object' &&
typeof item.timestamp === 'number' &&
new Date().valueOf() < item.timestamp + 604800 && // Note: Number is a week in seconds.
typeof item.supportTests === 'object'
) {
return item.supportTests;
}
} catch ( e ) {}
return null;
}/**
* Persist the supports in session storage.
*
* @since 6.3.0
*
* @private
*
* @param {SupportTests} supportTests Support tests.
*/
function setSessionSupportTests( supportTests ) {
try {
/** @type {SessionSupportTests} */
var item = {
supportTests: supportTests,
timestamp: new Date().valueOf()
};sessionStorage.setItem(
sessionStorageKey,
JSON.stringify( item )
);
} catch ( e ) {}
}/**
* Checks if two sets of Emoji characters render the same visually.
*
* This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing
* scope. Everything must be passed by parameters.
*
* @since 4.9.0
*
* @private
*
* @param {CanvasRenderingContext2D} context 2D Context.
* @param {string} set1 Set of Emoji to test.
* @param {string} set2 Set of Emoji to test.
*
* @return {boolean} True if the two sets render the same.
*/
function emojiSetsRenderIdentically( context, set1, set2 ) {
// Cleanup from previous test.
context.clearRect( 0, 0, context.canvas.width, context.canvas.height );
context.fillText( set1, 0, 0 );
var rendered1 = new Uint32Array(
context.getImageData(
0,
0,
context.canvas.width,
context.canvas.height
).data
);// Cleanup from previous test.
context.clearRect( 0, 0, context.canvas.width, context.canvas.height );
context.fillText( set2, 0, 0 );
var rendered2 = new Uint32Array(
context.getImageData(
0,
0,
context.canvas.width,
context.canvas.height
).data
);return rendered1.every( function ( rendered2Data, index ) {
return rendered2Data === rendered2[ index ];
} );
}/**
* Determines if the browser properly renders Emoji that Twemoji can supplement.
*
* This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing
* scope. Everything must be passed by parameters.
*
* @since 4.2.0
*
* @private
*
* @param {CanvasRenderingContext2D} context 2D Context.
* @param {string} type Whether to test for support of "flag" or "emoji".
* @param {Function} emojiSetsRenderIdentically Reference to emojiSetsRenderIdentically function, needed due to minification.
*
* @return {boolean} True if the browser can render emoji, false if it cannot.
*/
function browserSupportsEmoji( context, type, emojiSetsRenderIdentically ) {
var isIdentical;switch ( type ) {
case 'flag':
/*
* Test for Transgender flag compatibility. Added in Unicode 13.
*
* To test for support, we try to render it, and compare the rendering to how it would look if
* the browser doesn't render it correctly (white flag emoji + transgender symbol).
*/
isIdentical = emojiSetsRenderIdentically(
context,
'\uD83C\uDFF3\uFE0F\u200D\u26A7\uFE0F', // as a zero-width joiner sequence
'\uD83C\uDFF3\uFE0F\u200B\u26A7\uFE0F' // separated by a zero-width space
);if ( isIdentical ) {
return false;
}/*
* Test for UN flag compatibility. This is the least supported of the letter locale flags,
* so gives us an easy test for full support.
*
* To test for support, we try to render it, and compare the rendering to how it would look if
* the browser doesn't render it correctly ([U] + [N]).
*/
isIdentical = emojiSetsRenderIdentically(
context,
'\uD83C\uDDFA\uD83C\uDDF3', // as the sequence of two code points
'\uD83C\uDDFA\u200B\uD83C\uDDF3' // as the two code points separated by a zero-width space
);if ( isIdentical ) {
return false;
}/*
* Test for English flag compatibility. England is a country in the United Kingdom, it
* does not have a two letter locale code but rather a five letter sub-division code.
*
* To test for support, we try to render it, and compare the rendering to how it would look if
* the browser doesn't render it correctly (black flag emoji + [G] + [B] + [E] + [N] + [G]).
*/
isIdentical = emojiSetsRenderIdentically(
context,
// as the flag sequence
'\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67\uDB40\uDC7F',
// with each code point separated by a zero-width space
'\uD83C\uDFF4\u200B\uDB40\uDC67\u200B\uDB40\uDC62\u200B\uDB40\uDC65\u200B\uDB40\uDC6E\u200B\uDB40\uDC67\u200B\uDB40\uDC7F'
);return ! isIdentical;
case 'emoji':
/*
* Rise Like a Phoenix.
*
* To test for Emoji 15.1 support, try to render a new emoji: Phoenix.
*
* A phoenix, a mythical immortal bird with flame-like feathers found in the folklore of many global
* cultures. Often used to symbolize renewal or rebirth.
*
* The Phoenix emoji is a ZWJ sequence combining 🐦 Bird, Zero Width Joiner and 🔥 Fire.
* These display as a single emoji on supported platforms.
*
* 0xD83D 0xDC26 (\uD83D\uDC26) == 🐦 Bird
* 0x200D == Zero-Width Joiner (ZWJ) that links the code points for the new emoji or
* 0x200B == Zero-Width Space (ZWS) that is rendered for clients not supporting the new emoji.
* 0xD83D 0xDD25 (\uD83D\uDD25) == 🔥 Fire
*
* When updating this test for future Emoji releases, ensure that individual emoji that make up the
* sequence come from older emoji standards.
*/
isIdentical = emojiSetsRenderIdentically(
context,
'\uD83D\uDC26\u200D\uD83D\uDD25', // as the zero-width joiner sequence
'\uD83D\uDC26\u200B\uD83D\uDD25' // separated by a zero-width space
);return ! isIdentical;
}return false;
}/**
* Checks emoji support tests.
*
* This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing
* scope. Everything must be passed by parameters.
*
* @since 6.3.0
*
* @private
*
* @param {string[]} tests Tests.
* @param {Function} browserSupportsEmoji Reference to browserSupportsEmoji function, needed due to minification.
* @param {Function} emojiSetsRenderIdentically Reference to emojiSetsRenderIdentically function, needed due to minification.
*
* @return {SupportTests} Support tests.
*/
function testEmojiSupports( tests, browserSupportsEmoji, emojiSetsRenderIdentically ) {
var canvas;
if (
typeof WorkerGlobalScope !== 'undefined' &&
self instanceof WorkerGlobalScope
) {
canvas = new OffscreenCanvas( 300, 150 ); // Dimensions are default for HTMLCanvasElement.
} else {
canvas = document.createElement( 'canvas' );
}var context = canvas.getContext( '2d', { willReadFrequently: true } );/*
* Chrome on OS X added native emoji rendering in M41. Unfortunately,
* it doesn't work when the font is bolder than 500 weight. So, we
* check for bold rendering support to avoid invisible emoji in Chrome.
*/
context.textBaseline = 'top';
context.font = '600 32px Arial';var supports = {};
tests.forEach( function ( test ) {
supports[ test ] = browserSupportsEmoji( context, test, emojiSetsRenderIdentically );
} );
return supports;
}/**
* Adds a script to the head of the document.
*
* @ignore
*
* @since 4.2.0
*
* @param {string} src The url where the script is located.
*
* @return {void}
*/
function addScript( src ) {
var script = document.createElement( 'script' );
script.src = src;
script.defer = true;
document.head.appendChild( script );
}settings.supports = {
everything: true,
everythingExceptFlag: true
};// Create a promise for DOMContentLoaded since the worker logic may finish after the event has fired.
var domReadyPromise = new Promise( function ( resolve ) {
document.addEventListener( 'DOMContentLoaded', resolve, {
once: true
} );
} );// Obtain the emoji support from the browser, asynchronously when possible.
new Promise( function ( resolve ) {
var supportTests = getSessionSupportTests();
if ( supportTests ) {
resolve( supportTests );
return;
}if ( supportsWorkerOffloading() ) {
try {
// Note that the functions are being passed as arguments due to minification.
var workerScript =
'postMessage(' +
testEmojiSupports.toString() +
'(' +
[
JSON.stringify( tests ),
browserSupportsEmoji.toString(),
emojiSetsRenderIdentically.toString()
].join( ',' ) +
'));';
var blob = new Blob( [ workerScript ], {
type: 'text/javascript'
} );
var worker = new Worker( URL.createObjectURL( blob ), { name: 'wpTestEmojiSupports' } );
worker.onmessage = function ( event ) {
supportTests = event.data;
setSessionSupportTests( supportTests );
worker.terminate();
resolve( supportTests );
};
return;
} catch ( e ) {}
}supportTests = testEmojiSupports( tests, browserSupportsEmoji, emojiSetsRenderIdentically );
setSessionSupportTests( supportTests );
resolve( supportTests );
} )
// Once the browser emoji support has been obtained from the session, finalize the settings.
.then( function ( supportTests ) {
/*
* Tests the browser support for flag emojis and other emojis, and adjusts the
* support settings accordingly.
*/
for ( var test in supportTests ) {
settings.supports[ test ] = supportTests[ test ];settings.supports.everything =
settings.supports.everything && settings.supports[ test ];if ( 'flag' !== test ) {
settings.supports.everythingExceptFlag =
settings.supports.everythingExceptFlag &&
settings.supports[ test ];
}
}settings.supports.everythingExceptFlag =
settings.supports.everythingExceptFlag &&
! settings.supports.flag;// Sets DOMReady to false and assigns a ready function to settings.
settings.DOMReady = false;
settings.readyCallback = function () {
settings.DOMReady = true;
};
} )
.then( function () {
return domReadyPromise;
} )
.then( function () {
// When the browser can not render everything we need to load a polyfill.
if ( ! settings.supports.everything ) {
settings.readyCallback();var src = settings.source || {};if ( src.concatemoji ) {
addScript( src.concatemoji );
} else if ( src.wpemoji && src.twemoji ) {
addScript( src.twemoji );
addScript( src.wpemoji );
}
}
} );
} )( window, document, window._wpemojiSettings );
var breeze_prefetch = {"local_url":"https:\/\/davetheravebangkok.com","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin","wp-admin","wp-login.php"]};
var e = document.getElementsByTagName('body')[0];
if(e)
{
e.setAttribute('unselectable',"on");
}
var tdBlocksArray = []; //here we store all the items for the current page// td_block class - each ajax block uses a object of this class for requests
function tdBlock() {
this.id = '';
this.block_type = 1; //block type id (1-234 etc)
this.atts = '';
this.td_column_number = '';
this.td_current_page = 1; //
this.post_count = 0; //from wp
this.found_posts = 0; //from wp
this.max_num_pages = 0; //from wp
this.td_filter_value = ''; //current live filter value
this.is_ajax_running = false;
this.td_user_action = ''; // load more or infinite loader (used by the animation)
this.header_color = '';
this.ajax_pagination_infinite_stop = ''; //show load more at page x
}// td_js_generator - mini detector
( function () {
var htmlTag = document.getElementsByTagName("html")[0];if ( navigator.userAgent.indexOf("MSIE 10.0") > -1 ) {
htmlTag.className += ' ie10';
}if ( !!navigator.userAgent.match(/Trident.*rv\:11\./) ) {
htmlTag.className += ' ie11';
}if ( navigator.userAgent.indexOf("Edge") > -1 ) {
htmlTag.className += ' ieEdge';
}if ( /(iPad|iPhone|iPod)/g.test(navigator.userAgent) ) {
htmlTag.className += ' td-md-is-ios';
}var user_agent = navigator.userAgent.toLowerCase();
if ( user_agent.indexOf("android") > -1 ) {
htmlTag.className += ' td-md-is-android';
}if ( -1 !== navigator.userAgent.indexOf('Mac OS X') ) {
htmlTag.className += ' td-md-is-os-x';
}if ( /chrom(e|ium)/.test(navigator.userAgent.toLowerCase()) ) {
htmlTag.className += ' td-md-is-chrome';
}if ( -1 !== navigator.userAgent.indexOf('Firefox') ) {
htmlTag.className += ' td-md-is-firefox';
}if ( -1 !== navigator.userAgent.indexOf('Safari') && -1 === navigator.userAgent.indexOf('Chrome') ) {
htmlTag.className += ' td-md-is-safari';
}if( -1 !== navigator.userAgent.indexOf('IEMobile') ){
htmlTag.className += ' td-md-is-iemobile';
}})();var tdLocalCache = {};( function () {
"use strict";tdLocalCache = {
data: {},
remove: function (resource_id) {
delete tdLocalCache.data[resource_id];
},
exist: function (resource_id) {
return tdLocalCache.data.hasOwnProperty(resource_id) && tdLocalCache.data[resource_id] !== null;
},
get: function (resource_id) {
return tdLocalCache.data[resource_id];
},
set: function (resource_id, cachedData) {
tdLocalCache.remove(resource_id);
tdLocalCache.data[resource_id] = cachedData;
}
};
})();
var td_viewport_interval_list=[{"limitBottom":767,"sidebarWidth":251},{"limitBottom":1023,"sidebarWidth":339}];
var td_animation_stack_effect="type0";
var tds_animation_stack=true;
var td_animation_stack_specific_selectors=".entry-thumb, img, .td-lazy-img";
var td_animation_stack_general_selectors=".td-animation-stack img, .td-animation-stack .entry-thumb, .post img, .td-animation-stack .td-lazy-img";
var tds_general_modal_image="yes";
var tdc_is_installed="yes";
var td_ajax_url="https:\/\/davetheravebangkok.com\/wp-admin\/admin-ajax.php?td_theme_name=Newsmag&v=5.4.3.3";
var td_get_template_directory_uri="https:\/\/davetheravebangkok.com\/wp-content\/plugins\/td-composer\/legacy\/common";
var tds_snap_menu="smart_snap_always";
var tds_logo_on_sticky="show_header_logo";
var tds_header_style="10";
var td_please_wait="Please wait...";
var td_email_user_pass_incorrect="User or password incorrect!";
var td_email_user_incorrect="Email or username incorrect!";
var td_email_incorrect="Email incorrect!";
var td_user_incorrect="Username incorrect!";
var td_email_user_empty="Email or username empty!";
var td_pass_empty="Pass empty!";
var td_pass_pattern_incorrect="Invalid Pass Pattern!";
var td_retype_pass_incorrect="Retyped Pass incorrect!";
var tds_more_articles_on_post_enable="";
var tds_more_articles_on_post_time_to_wait="";
var tds_more_articles_on_post_pages_distance_from_top=0;
var tds_captcha="";
var tds_theme_color_site_wide="#e81202";
var tds_smart_sidebar="enabled";
var tdThemeName="Newsmag";
var tdThemeNameWl="Newsmag";
var td_magnific_popup_translation_tPrev="Previous (Left arrow key)";
var td_magnific_popup_translation_tNext="Next (Right arrow key)";
var td_magnific_popup_translation_tCounter="%curr% of %total%";
var td_magnific_popup_translation_ajax_tError="The content from %url% could not be loaded.";
var td_magnific_popup_translation_image_tError="The image #%curr% could not be loaded.";
var tdBlockNonce="412c191fd2";
var tdMobileMenu="enabled";
var tdMobileSearch="enabled";
var tdDateNamesI18n={"month_names":["January","February","March","April","May","June","July","August","September","October","November","December"],"month_names_short":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"day_names":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"day_names_short":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]};
var td_deploy_mode="deploy";
var td_ad_background_click_link="";
var td_ad_background_click_target="";
// this makes it so the page does not scroll if you reach the end of scroll bar or go back to top
jQuery.fn.isolatedScrollFacebookFTS = function () {
this.bind('mousewheel DOMMouseScroll', function (e) {
var delta = e.wheelDelta || (e.originalEvent && e.originalEvent.wheelDelta) || -e.detail,
bottomOverflow = this.scrollTop + jQuery(this).outerHeight() - this.scrollHeight >= 0,
topOverflow = this.scrollTop <= 0;
if ((delta < 0 && bottomOverflow) || (delta > 0 && topOverflow)) {
e.preventDefault();
}
});
return this;
};
jQuery('.fts-instagram-scrollable').isolatedScrollFacebookFTS();
// This needs to load here below the feed to load properly for
// Elementor page preview, and also some types of tabs that use js to load.
document.addEventListener("DOMContentLoaded", function(event) {
if (typeof slickremixImageResizing === 'function') {
slickremixImageResizing();
}
if (typeof ftsShare === 'function') {
ftsShare();
}
});
var timeout_result;
function show_wpcp_message(smessage)
{
if (smessage !== "")
{
var smessage_text = '<span>Alert: </span>'+smessage;
document.getElementById("wpcp-error-message").innerHTML = smessage_text;
document.getElementById("wpcp-error-message").className = "msgmsg-box-wpcp warning-wpcp showme";
clearTimeout(timeout_result);
timeout_result = setTimeout(hide_message, 3000);
}
}
function hide_message()
{
document.getElementById("wpcp-error-message").className = "msgmsg-box-wpcp warning-wpcp hideme";
}
var impression_object = {"ajax_url":"https:\/\/davetheravebangkok.com\/wp-admin\/admin-ajax.php"};