{"version":3,"file":"js/blog.js","sourceRoot":"js/blog-debug.js","sources":["0"],"sourcesContent":["(function ($) {\n 'use strict';\n\n hljs.addPlugin({\n \"after:highlightBlock\": function (context) {\n\n var openTags = [];\n\n var innerValue = context.result.value.replace(/(]+>)|(<\\/span>)|(\\n)/g, function (match) {\n if (match === '\\n') {\n return ''.repeat(openTags.length) + '\\n' + openTags.join('');\n }\n\n if (match === '') {\n openTags.pop();\n } else {\n openTags.push(match);\n }\n\n return match;\n });\n\n context.result.value = '' + innerValue + '';\n }\n });\n\n $(function() {\n\n $('pre code:not(.language-mermaid)').each(function(i, block) {\n hljs.highlightBlock(block);\n });\n\n $('pre code .code-line').each (function (i, block) {\n if (block.innerText.startsWith('+')) {\n $(block).css('background-color', 'rgba(46, 160, 67, 0.30)');\n } else if (block.innerText.startsWith('-')) {\n $(block).css('background-color', 'rgba(248, 81, 73, 0.30)');\n }\n });\n\n $('table pre').hover(function(){return false;});\n\n $('.blog-page .content img').each(function () {\n var img = $(this),\n src = img.attr('src');\n\n if (img.parent('a').length) {\n // Already surrounded in a link\n return;\n }\n\n img.wrap('');\n });\n\n $(window).on('load scroll', function(){\n if ($(this).scrollTop() > 65) {\n $('.blog-aside').addClass('aside-fixed');\n } else {\n $('.blog-aside').removeClass('aside-fixed');\n }\n });\n\n var BlogPromoClick = 'BlogPromoClick';\n\n // Record metrics when promos are clicked\n $('.blog-promo a').on('click contextmenu', function (e) {\n\n if(cookieConsent.analyticsEnabled) {\n\n var link = $(this);\n var href = link.attr('href');\n\n if(window._kmq) {\n _kmq.push(['record', BlogPromoClick]);\n _kmq.push(['record', BlogPromoClick + ': ' + href]);\n }\n\n if(window.ga && window.ga.create) {\n ga('send', 'event', BlogPromoClick, href, {\n transport: 'beacon'\n });\n }\n\n GA4Event.blogPromoClick(href);\n }\n });\n\n $(window).on('load', function() {\n baguetteBox.run('.blog-image');\n });\n });\n}(jQuery));\n\n(function (window, document, $, psw) {\n 'use strict';\n\n // Test if we are on a blog post page\n var blogPage = $('.blog-page');\n if(blogPage.length == 0) {\n return;\n }\n\n if (cookieConsent.analyticsEnabled) {\n _kmq.push([\"record\", \"Viewed Blog Post\", { \"Title\": document.title }]);\n }\n\n var hasBounced = false;\n\n var bounceSubscribe = function () {\n hasBounced = true;\n var info = {\n speed: 250,\n distance: '25px',\n times: 3\n };\n var container = $('#blog-subscription-form');\n for (var i = 0; i < info.times; i++) {\n container.animate({ bottom: '+=' + info.distance }, info.speed)\n .animate({ bottom: '-=' + info.distance }, info.speed);\n }\n };\n\n $(window).bind('scroll', function () {\n if (hasBounced)\n return;\n\n if ($(window).scrollTop() >= blogPage.offset().top + blogPage.outerHeight() - window.innerHeight) {\n bounceSubscribe();\n }\n });\n\n $('.blog-related-posts a').on('click contextmenu', function (e) {\n\n if(cookieConsent.analyticsEnabled) {\n\n var link = $(this);\n var position = link.parents('.blog-related-posts').data('position');\n var href = link.attr('href');\n var index = link.data('index');\n var source = window.location.pathname.toLowerCase();\n\n var sendEvt = function (name, value) {\n ga('send', 'event', 'Blog', name, value, {\n transport: 'beacon'\n });\n };\n\n if(window._kmq) {\n _kmq.push(['record', 'Blog Related Content Click', {\n position: position,\n index: index,\n source: source,\n target: href\n }]);\n }\n\n if(window.ga && window.ga.create) {\n sendEvt('RelatedLinkPosition', position);\n sendEvt('RelatedLinkIndex', index);\n sendEvt('RelatedLinkNav', source + ' => ' + href);\n sendEvt('RelatedLinkSource', source);\n sendEvt('RelatedLinkTarget', href);\n }\n\n GA4Event.blogRelatedLinkClick(index, position, href);\n }\n });\n\n $('.blog-series-posts .toggle').on('click', function (e) {\n e.preventDefault();\n var trigger = $(this);\n var ul = $(this).parents('.blog-series-posts').find('ul');\n ul.toggleClass('hide');\n trigger.text(ul.hasClass('hide') ? 'See more' : 'See less');\n });\n\n $(function () {\n $('#tweet').on('click', function (e) {\n e.preventDefault();\n var tweetText = document.title.replace('• Particular Software', ' @ParticularSW');\n window.open('https://twitter.com/intent/tweet?text=' + encodeURIComponent(tweetText) + ' ' + encodeURIComponent(window.location));\n });\n });\n\n if(cookieConsent.functionalEnabled){\n window.DiscourseEmbed = { discourseUrl: 'https://discuss.particular.net/',\n discourseEmbedUrl: 'https://particular.net' + window.location.pathname };\n\n (function() {\n var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;\n d.src = window.DiscourseEmbed.discourseUrl + 'javascripts/embed.js';\n (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);\n })();\n }\n}(window, document, jQuery, psw));\n\n$(function () {\n 'use strict';\n\n // Test if we are on a blog post page\n if($('.blog-page').length == 0) {\n return;\n }\n\n var $box = $('#blog-subscription-form'),\n $email = $box.find('.email-address'),\n $submit = $box.find('.submit'),\n $close = $box.find('.close-btn'),\n $success = $box.find('.success'),\n emailRegex = /^([a-zA-Z0-9_\\.\\-\\+])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$/;\n\n var isSubscrClosed = false;\n var request = function() {\n var email = $email.val();\n if(email === '' || !emailRegex.test(email)) {\n $email.val('').addClass('input-validation-error').attr('placeholder', 'Invalid email address');\n return;\n } else {\n $email.removeAttr('placeholder');\n }\n\n // TODO: Better site-wide error notification\n var fail = function () {\n alert('Oops! something went wrong and we could not send your request. Sorry for the extra work. Please contact support at https://customers.particular.net instead.');\n };\n\n psw.ajax({\n url: psw.api(\"/pardot/postall\"),\n type: \"POST\",\n data: {\n \"request-email\": email,\n url: 'https://go.pardot.com/l/27442/2018-06-13/8dyfsk',\n hash: 'LgnHLMbCYsha9pXL0gtY7tzQPzHEcHmUZaeL6MsWWWM='\n },\n success: function (result) {\n $box.find('.input-group').hide();\n $success.show();\n $.cookie('subscr',1, { expires: 365 });\n $success.click(function(){\n $box.stop().fadeOut();\n });\n },\n error: fail\n });\n };\n\n $email.keypress(function (e) {\n if (e.which == 13) {\n e.preventDefault();\n request();\n return false;\n }\n });\n var blgSbscrClsdC = $.cookie('blgSbscrClsd');\n if (blgSbscrClsdC) {\n isSubscrClosed = true;\n }\n\n $close.click(function (e) {\n e.preventDefault();\n $box.stop().fadeOut();\n isSubscrClosed = true;\n $.cookie('blgSbscrClsd', 1, { expires: 3333 });\n });\n\n $submit.click(function(e){\n e.preventDefault();\n request();\n });\n\n var timeout30sec = false;\n var sendToGASubscriptionFormShown = true;\n\n setTimeout(function () {\n timeout30sec = true;\n }, 30000);\n\n var lastParagraph = $('.blog-page').find('p').last();\n\n var lastParagraphOnScreen = function() {\n\n var win = $(window);\n\n var viewport = {\n top : win.scrollTop(),\n left : win.scrollLeft()\n };\n viewport.right = viewport.left + win.width();\n viewport.bottom = viewport.top + win.height();\n\n var bounds = lastParagraph.offset();\n bounds.right = bounds.left + lastParagraph.outerWidth();\n bounds.bottom = bounds.top + lastParagraph.outerHeight();\n\n return (!(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom));\n };\n\n $(window).scroll(function() {\n if(lastParagraphOnScreen()){\n if (!isSubscrClosed) {\n $box.animate({'bottom':0});\n if (sendToGASubscriptionFormShown && timeout30sec) {\n var postTitle = $('h1').text();\n if(cookieConsent.analyticsEnabled) ga('send','event','Blog Subscription Slide-up form shown','Blog article read','Read - ' + postTitle);\n GA4Event.blogArticleRead();\n sendToGASubscriptionFormShown = false;\n }\n }\n }\n });\n\n if($.cookie('subscr')){\n $box.hide();\n }\n});"],"names":["$","hljs","addPlugin","after:highlightBlock","context","openTags","innerValue","result","value","replace","match","repeat","length","join","pop","push","each","i","block","highlightBlock","innerText","startsWith","css","hover","img","this","src","attr","parent","wrap","window","on","scrollTop","addClass","removeClass","BlogPromoClick","e","cookieConsent","analyticsEnabled","link","href","_kmq","ga","create","transport","GA4Event","blogPromoClick","baguetteBox","run","jQuery","document","psw","blogPage","Title","title","hasBounced","bounceSubscribe","info","speed","distance","times","container","animate","bottom","bind","offset","top","outerHeight","innerHeight","position","parents","data","index","source","location","pathname","toLowerCase","sendEvt","name","target","blogRelatedLinkClick","preventDefault","trigger","ul","find","toggleClass","text","hasClass","tweetText","open","encodeURIComponent","functionalEnabled","DiscourseEmbed","discourseUrl","discourseEmbedUrl","d","createElement","type","async","getElementsByTagName","appendChild","$box","$email","$submit","$close","$success","emailRegex","isSubscrClosed","request","email","val","test","removeAttr","fail","alert","ajax","url","api","request-email","hash","success","hide","show","cookie","expires","click","stop","fadeOut","error","keypress","which","blgSbscrClsdC","timeout30sec","sendToGASubscriptionFormShown","setTimeout","lastParagraph","last","lastParagraphOnScreen","win","viewport","left","scrollLeft","right","width","height","bounds","outerWidth","scroll","postTitle","blogArticleRead"],"mappings":"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"}