{"mappings":"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","sources":["wwwroot/Content/scripts/most-read-widget.js","wwwroot/Content/scripts/custom/article-like.js","wwwroot/Content/scripts/on-change-state.js","wwwroot/Content/scripts/dfp.js","wwwroot/Content/scripts/custom/share.js","wwwroot/Content/scripts/publishing.js","wwwroot/Content/scripts/search.js"],"sourcesContent":["function getButton(e) {\n return $(e.target).siblings('[data-trigger-button]');\n}\n\nexport function setupMostRead() {\n\n $('#mobile-more-m-r').on('show.bs.collapse', function (e) {\n getButton(e).text('Less most read');\n });\n $('#mobile-more-m-r').on('hide.bs.collapse', function (e) {\n getButton(e).text('More most read');\n });\n $('#more-most-read').on('show.bs.collapse', function (e) {\n getButton(e).text('Less most read');\n });\n $('#more-most-read').on('hide.bs.collapse', function (e) {\n getButton(e).text('More most read');\n });\n $('#mobile-more-m-s').on('show.bs.collapse', function (e) {\n getButton(e).text('Less most shared');\n });\n $('#mobile-more-m-s').on('hide.bs.collapse', function (e) {\n getButton(e).text('More most shared');\n });\n $('#more-most-shared').on('show.bs.collapse', function (e) {\n getButton(e).text('Less most shared');\n });\n $('#more-most-shared').on('hide.bs.collapse', function (e) {\n getButton(e).text('More most shared');\n });\n $('#mobile-more-m-c').on('show.bs.collapse', function (e) {\n getButton(e).text('Less most commented');\n });\n $('#mobile-more-m-c').on('hide.bs.collapse', function (e) {\n getButton(e).text('More most commented');\n });\n $('#more-most-commented').on('show.bs.collapse', function (e) {\n getButton(e).text('Less most commented');\n });\n $('#more-most-commented').on('hide.bs.collapse', function (e) {\n getButton(e).text('More most commented');\n });\n}\n","\nfunction like(event) {\n event.preventDefault();\n var articleId = $(this).data(\"article-like\");\n if (articleId !== \"\") {\n $.get('/article-like/handle/',\n { articleId : articleId }\n , function (response) {\n if (response != \"error\") {\n $(\"[data-article-like-text]\").html(response);\n }\n });\n }\n}\nexport function setupArticleLike(){\n $(document).on(\"click\", \"[data-article-like]\", like);\n\n}","function getCurrentState() {\n const history = window.History;\n return history.getState();\n}\n\nfunction sendPageView(event) {\n const state = getCurrentState();\n if (state.data.doNotSendPageView) {\n return;\n }\n window.sendPageView();\n}\n\nfunction reloadAds(event) {\n const shouldReload = $(\"#main-content\").data('should-reload-on-statechange');\n\n if (shouldReload) {\n const adSection = $(\"[data-ad-id]\");\n const page = window.getDFPAdsPage(adSection);\n window.getDFPAds(page);\n }\n}\n\nexport function setupStateChange() {\n\n const history = window.History;\n history.Adapter.bind(window, \"statechange\", sendPageView);\n history.Adapter.bind(window, \"statechange\", reloadAds);\n\n window.sendPageView = function () {\n let url = window.location.pathname + window.location.search;\n if (typeof ga !== \"undefined\") {\n ga(ga.getAll()[0].get(\"name\") + \".send\", \"pageview\", url);\n }\n $(window).trigger('send-page-view', url);\n };\n}\n\n","let shouldReload = true;\n\n\nexport function InitDFP() {\n\n let adSlotTemplate;\n // if handlebars is defined\n if (typeof Handlebars !== 'undefined') {\n // register a helper called json\n // this helper will stringify the context passed to it\n Handlebars.registerHelper('json', function (context) {\n return JSON.stringify(context);\n });\n adSlotTemplate = Handlebars.compile($('#ad-slot-template').html());\n }\n //Polyfills\n Number.isNaN = Number.isNaN || function (value) {\n return value !== value;\n }\n\n\n const pages = {};\n window.dfpAdsPage = null;\n\n\n window.addMovedViewportListener(function (element, initialMove) {\n $(window).trigger('init-scroll-checks');\n if (initialMove) {\n return;\n }\n const id = element.contents.attr(\"id\");\n refreshAdByName(id);\n });\n\n\n window.checkAdsInitialized = function (thisPage) {\n\n if (!thisPage)\n return;\n\n const gpt = window.googletag;\n Object.keys(thisPage.adSlots).forEach(function (name) {\n const slot = thisPage.adSlots[name];\n if (slot.isInitialized) {\n return;\n }\n\n //var scrolledIntoView = isScrolledIntoView(holder);\n //if (scrolledIntoView) {\n slot.isInitialized = true;\n\n gpt.cmd.push(function () {\n slot.dfpSlotName = thisPage.slotName;\n\n let name = thisPage.slotName + '/' + slot.holderId;\n let slotDefinition = slot.outOfPage ? gpt.defineOutOfPageSlot(name, slot.holderId) : gpt.defineSlot(name, slot.defaultSize, slot.holderId);\n slot.googleSlot = slotDefinition\n .setTargeting('position', [slot.holderId])\n .addService(gpt.pubads());\n if (slot.sizeMapping) {\n slot.googleSlot.defineSizeMapping(slot.sizeMapping);\n }\n const qp = getParameterByName(\"adtest\");\n if (qp) {\n gpt.pubads().setTargeting(\"adtest\", [qp]);\n }\n });\n //}\n });\n };\n\n function unstickAd(slot) {\n setTimeout(function () {\n slot.container.removeClass('sticky-dfp-ad');\n // also remove the sticky-dfp-ad class from all the parents\n slot.container.parents().removeClass('sticky-dfp-ad');\n }, 500);\n }\n\n function getFormattedTimestamp() {\n const now = new Date();\n return now.toLocaleString('en-GB', {hour12: false}) + '.' + now.getMilliseconds();\n }\n\n window.getDFPAds = function (thisPage, callback) {\n console.time('getDFPAds')\n const gpt = window.googletag;\n gpt.cmd.push(function () {\n gpt.pubads().clearTargeting();\n gpt.pubads().disableInitialLoad();\n gpt.pubads().collapseEmptyDivs(true, true);\n gpt.pubads().addEventListener('impressionViewable', function (e) {\n const slot = window.dfpAdsPage.adSlots[e.slot.getSlotElementId()];\n if (!slot) {\n return;\n }\n unstickAd(slot);\n });\n gpt.pubads().addEventListener('slotOnload', function (e) {\n const slot = window.dfpAdsPage.adSlots[e.slot.getSlotElementId()];\n if (!slot) {\n return;\n }\n // log the time the ad was loaded to the millisecond to the console\n // console.debug('Ad Loaded: ' + slot.holderId, getFormattedTimestamp());\n console.timeEnd(e.slot.getSlotElementId());\n console.timeLog('getDFPAds', e.slot.getSlotElementId());\n setTimeout(function () {\n unstickAd(slot);\n }, thisPage.maxPinTime);\n });\n });\n console.timeLog('getDFPAds', 'checkAdsInitialized')\n checkAdsInitialized(thisPage);\n\n\n gpt.cmd.push(function () {\n gpt.pubads().enableSingleRequest();\n });\n\n //Enqueueing first Ad\n setupAdMovement(thisPage);\n\n moveMobileReplacementsToBodyCopy(thisPage);\n\n console.timeLog('getDFPAds', 'moveMobileReplacementsToBodyCopy');\n window.reloadCurrentPageAds();\n console.timeLog('getDFPAds', 'reloadCurrentPageAds');\n window.moveElementsToCurrentViewport(true);\n\n gpt.cmd.push(function () {\n setTargeting(gpt, thisPage);\n gpt.enableServices();\n });\n\n if (callback) {\n callback();\n }\n };\n\n function setupInlineArticleAds(thisAdSection, adSlotTemplate) {\n // check if there's any body copy, and if so, add inline adverts\n const bodyCopy = thisAdSection.find('[data-ads-body-copy]');\n if (bodyCopy.length > 0) {\n // check if it's already been done\n if (bodyCopy.data('ads-parsed')) {\n return;\n }\n\n // find the sizes from a hidden called data-article-ad-sizes\n const adSizes = thisAdSection.find('[data-article-ad-sizes]');\n // if we have sizes, then we can add the inline adverts\n if (adSizes.length > 0) {\n // first, get the size mappings\n const sizeMappings = adSizes.data('article-ad-sizes');\n // next, find the current viewport\n const isDesktop = !!window.isViewportGreaterThanOrEqualTo('md');\n\n const wordsPerAd = isDesktop ? 300 : 200;\n\n // now, we want to work our way through the body copy, and add an advert after every 'wordsPerAd' words\n // first, get all the paragraphs\n // Get all paragraphs\n let allParagraphs = bodyCopy.find('p');\n\n // Filter out paragraphs within tables\n const paragraphs = allParagraphs.filter(function () {\n return $(this).closest('table').length === 0;\n });\n let words = 0;\n let paragraphIndex = 0;\n let adSlotNumber = 2;\n let adsAdded = 0;\n\n // loop through the paragraphs\n while (paragraphIndex < paragraphs.length) {\n // get the current paragraph\n const paragraph = paragraphs.eq(paragraphIndex);\n // get the words in the paragraph\n const paragraphWords = paragraph.text().split(' ');\n // if the words in the paragraph, plus the words we've already counted, is greater than the words per ad, then we need to add an ad\n if (paragraphWords.length + words > wordsPerAd) {\n // create the ad slot\n const adSlotData = {\n // format the slot id as inline-xx, ensuring we have 2 numbers, so inline-01, inline-02 etc\n slotId: 'inline-' + (adSlotNumber < 10 ? '0' + adSlotNumber : adSlotNumber),\n sizeMapping: sizeMappings,\n paddingClass: 'pb-3'\n }\n // render the ad slot\n const adSlotHtml = adSlotTemplate(adSlotData);\n // append the ad slot to the paragraph\n paragraph.after(adSlotHtml);\n\n // reset the words\n words = 0;\n // increment the ad slot number\n adSlotNumber++;\n // increment the ads added\n adsAdded++;\n } else {\n // otherwise, add the words in the paragraph to the words\n words += paragraphWords.length;\n // increment the paragraph index\n paragraphIndex++;\n }\n }\n\n // if we've not added any ads, then we need to add one at the end\n if (adsAdded === 0) {\n // create the ad slot\n const adSlotData = {\n slotId: 'inline-' + (adSlotNumber < 10 ? '0' + adSlotNumber : adSlotNumber),\n sizeMapping: sizeMappings,\n paddingClass: 'pb-3'\n }\n // render the ad slot\n const adSlotHtml = adSlotTemplate(adSlotData);\n // append the ad slot to the paragraph\n bodyCopy.append(adSlotHtml);\n }\n\n // mark the body copy as parsed\n bodyCopy.data('ads-parsed', true);\n }\n\n }\n }\n\n function parseKnownAds(thisAdSection, adSlotTemplate) {\n // parse any data-ad-data hidden fields and use the handlebars template to render it\n const adData = thisAdSection.find('[data-ad-data]');\n if (adData.length > 0) {\n\n // foreach adData, parse the json and render the template\n adData.each(function (index, element) {\n const adSlot = $(element);\n let adSlotData = adSlot.data('ad-data');\n const adSlotHtml = adSlotTemplate(adSlotData);\n adSlot.replaceWith(adSlotHtml);\n });\n }\n }\n\n\n//$(function () {\n window.getDFPAdsPage = function (thisAdSection) {\n if (thisAdSection.length === 0) {\n return null;\n }\n parseKnownAds(thisAdSection, adSlotTemplate);\n\n setupInlineArticleAds(thisAdSection, adSlotTemplate);\n\n const adId = thisAdSection.data(\"ad-id\");\n if (!pages[adId]) {\n pages[adId] = createAdsPage(thisAdSection, adId);\n }\n parseSlots(thisAdSection, pages[adId]);\n\n\n const href = window.location.href;\n const querystring = href.split('?')[1];\n if (typeof querystring === \"undefined\" || querystring === \"\") {\n const pageType = $('[data-ad-page-type]').data('ad-page-type');\n pages[adId].pageType = pageType;\n } else {\n const webpageType = $('[data-document-type]').data('document-type');\n pages[adId].pageType = webpageType;\n }\n return pages[adId];\n }\n\n\n window.initAds = function () {\n console.timeEnd('consentData');\n console.time('permutiveReady');\n window.permutive.readyWithTimeout(function () {\n const adSection = $(\"[data-ad-id]\");\n const page = getDFPAdsPage(adSection);\n if (page) {\n window.dfpAdsPage = page;\n if (page.apsId) {\n window.apstag.init({\n pubID: page.apsId,\n adServer: 'googletag'\n });\n }\n getDFPAds(page);\n console.timeEnd('permutiveReady');\n }\n }, \"realtime\", 1500);\n\n };\n\n __tcfapi('addEventListener', 2, function (tcData, success) {\n console.timeEnd('CMP');\n if (success && tcData.eventStatus === 'cmpuishown') {\n console.log('SP: Surfacing CMP interface.');\n }\n\n if (success && tcData.eventStatus === 'useractioncomplete') {\n console.log('SP: User submitted consent choices.');\n consentData(tcData);\n }\n\n if (success && tcData.eventStatus === 'tcloaded') {\n console.log('SP: TC string available.');\n\n window.__tcfapi('removeEventListener', 2, function (success) {\n if (success) {\n console.log('SP: Event listener removed.');\n }\n }, tcData.listenerId);\n\n consentData(tcData);\n }\n\n });\n}\n\n$(window).on('load', function () {\n var checkAd = setTimeout(function () {\n if ($('#inline-01-container').height() === 0) {\n console.log('Ad-blocker detected!');\n $(\"*\").removeClass(\"sticky-dfp-ad\");\n }\n }, 2000); // wait 2 seconds after the 'load' event\n});\n\nfunction setTargeting(gpt, thisPage) {\n gpt.pubads().setTargeting('pagetype', [thisPage.pageType]);\n gpt.pubads().setTargeting('cms_template_name', [thisPage.templateName]);\n gpt.pubads().setTargeting('page', [thisPage.page]);\n gpt.pubads().setTargeting('campaign_name', [thisPage.campaignName]);\n gpt.pubads().setTargeting('url', [thisPage.pageUrl]);\n gpt.pubads().setTargeting('title', [thisPage.pageTitle]);\n if (gpt.pubads().getTargeting('permutive').length === 0) {\n const kvs = localStorage.getItem('_pdfps');\n gpt.pubads().setTargeting('permutive', kvs ? JSON.parse(kvs) : []);\n }\n}\n\nfunction loadSlotsWithGpt(gpt, page, slots) {\n gpt.cmd.push(function () {\n function refreshAds() {\n if (gpt.pubadsReady) {\n setTargeting(gpt, page);\n gpt.pubads().refresh(slots);\n slots.forEach(slot => {\n // console.log(slot.getSlotElementId())\n console.timeLog(slot.getSlotElementId(), 'refresh called');\n })\n } else {\n console.log('awaiting pubadsReady')\n setTimeout(refreshAds, 100);\n }\n }\n\n // refreshing ads enabled for initial loading\n refreshAds();\n });\n}\n\n// function refreshLoadedAds(page, adSlots, slots) {\n// const gpt = window.googletag;\n//\n// // GS - 2023-09-06 - disabling amazon bids as they aren't implemented in the new ad system\n// // if (page.apsId) {\n// // const amazonSlots = $.map(adSlots,\n// // function (e) {\n// // return {\n// // slotID: e.holderId,\n// // slotName: e.dfpSlotName,\n// // sizes: [e.defaultSize]\n// // }\n// // });\n// // window.apstag.fetchBids({\n// // slots: amazonSlots,\n// // timeout: 2e3\n// // },\n// // function (bids) {\n// // gpt.cmd.push(function () {\n// // function refreshAds() {\n// // if (gpt.pubadsReady) {\n// // window.apstag.setDisplayBids();\n// // setTargeting(gpt, page)\n// // gpt.pubads().refresh(slots);\n// // } else {\n// // setTimeout(refreshAds, 200);\n// // }\n// // }\n// //\n// // // refreshing ads enabled for initial loading\n// // refreshAds();\n// // });\n// //\n// // });\n// // } else {\n// // }\n// }\n\nfunction initialLoadAds(gpt, page, slots) {\n gpt.cmd.push(function () {\n\n // slots.forEach(function (slot) {\n // const slotName = slot.holderId;\n // console.time(slotName);\n // });\n\n const eagerSlots = slots.filter(x => x.isEager).map(x => x.slot);\n const lazySlots = slots.filter(x => !x.isEager).map(x => x.slot);\n\n console.log('eager slots', eagerSlots);\n console.log('lazy slots', lazySlots);\n\n // if we have eager slots, then we want to load them first\n\n loadSlotsWithGpt(gpt, page, eagerSlots);\n\n gpt.cmd.push(function () {\n gpt.pubads().enableLazyLoad({\n fetchMarginPercent: 25, // Fetch slots within 1 viewports.\n renderMarginPercent: 5, // Render slots within 0.5 viewports.\n mobileScaling: 2 // Double the above values on mobile.\n });\n });\n\n // then we want to load the lazy slots\n loadSlotsWithGpt(gpt, page, lazySlots);\n\n gpt.pubads().addEventListener('slotRenderEnded', function (event) {\n console.log('Ad slot ' + event.slot.getSlotElementId() + ' rendered.');\n });\n });\n}\n\nfunction reloadAds(page) {\n if (!shouldReload) {\n return;\n }\n shouldReload = false;\n // only allow reload after 5 seconds\n setTimeout(function () {\n shouldReload = true\n }, 5000);\n\n const adSlots = page.adSlots;\n const slots = $.map(adSlots, function (e) {\n console.time(e.googleSlot.getSlotElementId());\n return {\n isEager: e.isEager,\n slot: e.googleSlot,\n }\n });\n const gpt = window.googletag;\n if (page.hadInitialLoad) {\n loadSlotsWithGpt(gpt, page, slots.map(x => x.slot));\n } else {\n initialLoadAds(gpt, page, slots);\n }\n\n};\nwindow.reloadCurrentPageAds = function () {\n if (window.dfpAdsPage) {\n reloadAds(window.dfpAdsPage);\n }\n};\n\nfunction getParameterByName(name, url) {\n if (!url) url = window.location.href;\n name = name.replace(/[\\[\\]]/g, \"\\\\$&\");\n const regex = new RegExp(\"[?&]\" + name + \"(=([^]*)|&|#|$)\"),\n results = regex.exec(url);\n if (!results) return null;\n if (!results[2]) return '';\n return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\n}\n\nfunction isScrolledIntoView(el) {\n const rect = el.getBoundingClientRect();\n if (rect.height === 0 && rect.width === 0) {\n return false;\n }\n const elemTop = rect.top;\n const elemBottom = rect.bottom;\n\n // Only completely visible elements return true:\n const isVisible = (elemTop >= 0) && (elemBottom <= window.innerHeight);\n // Partially visible elements return true:\n //isVisible = elemTop < window.innerHeight && elemBottom >= 0;\n return isVisible;\n}\n\nfunction refreshAdByName(name) {\n const gpt = window.googletag;\n gpt.cmd.push(function () {\n function refreshAd() {\n if (gpt.pubadsReady) {\n const slot = window.dfpAdsPage.adSlots[name];\n if (slot && slot.isInitialized) {\n gpt.pubads().refresh([slot.googleSlot]);\n }\n } else {\n setTimeout(refreshAd, 200);\n }\n }\n\n // refreshing ads enabled for initial loading\n refreshAd();\n });\n\n}\n\nfunction getIndex(adSlot) {\n const slot = adSlot.slot;\n const hiddenColumn = slot.parents('[data-ads-hidden-column]');\n const holder = slot.parent();\n return hiddenColumn.find('[data-ad-slot-name]').index(holder);\n}\n\nfunction shouldAdd(adSlot) {\n // if it's not in a hidden column, we don't need to move it\n const hiddenColumn = adSlot.slot.parents('[data-ads-hidden-column]');\n if (hiddenColumn.length === 0)\n return false;\n\n return true;\n}\n\nfunction setupAdMovement(page) {\n const slotsToAdd = [];\n for (let name in page.adSlots) {\n if (page.adSlots.hasOwnProperty(name)) {\n var slot = page.adSlots[name];\n if (shouldAdd(slot))\n slotsToAdd.push(slot);\n }\n }\n\n if (slotsToAdd.length === 0)\n return;\n\n slotsToAdd.sort(function (a, b) {\n const indexA = getIndex(a);\n const indexB = getIndex(b);\n return indexA > indexB ? 1 : -1;\n });\n\n for (let k = 0; k < slotsToAdd.length; k++) {\n const adSlot = slotsToAdd[k];\n const slotName = adSlot.slotName;\n\n var slot = adSlot.slot;\n const desktopSlot = slot;\n let mobileReplacementSlot = page.mainColumn.find('[data-ad-mobile-replace=\"' + slotName + '\"]');\n if (mobileReplacementSlot.length === 0) {\n mobileReplacementSlot = $('