/* 9624d93b1241d21c8fa943fa72abafed554253ae/common/scripts/button-facebook.js */ function omnitureTrackShareLinks(shareName, typeName, donotredirect) { var redirect = false; if (!donotredirect) { // we want to redirect redirect = true; } s.linkTrackVars = 'eVar12,events'; s.linkTrackEvents = 'event16'; s.eVar12 = typeName; s.events = 'event16'; s.tl(this, 'o', shareName); if (redirect) { setTimeout('document.location = "' + shareName.href + '"', 500); } } // Look for facebook share buttons and get share count from Facebook GraphAPI jQ(document).ready(function() { var requestCache = {}; jQ('.facebook-share').each(function(){ var node = jQ(this), url = jQ('.facebook-share-btn', node).data('href'); // Setup popup node.find('.facebook-share-btn').click(function(e) { e.preventDefault(); popUpNewWindow(this.href, 580, 400); }); // Check if a previous request to the same url has been done already // this prevents multiple AJAX requests to Facebook if (typeof(requestCache[url]) === 'undefined') { requestCache[url] = 0; var fqlQuery = 'select share_count,like_count from link_stat where url="' + url + '"', queryUrl = 'http://graph.facebook.com/fql?q='+fqlQuery+'&callback=?'; jQ.ajax({ url: queryUrl, dataType: 'json', jsonpCallback: 'fbCallback', success: function(response) { requestCache[url] = response.data[0].share_count + response.data[0].like_count || 0; // Insert counts into all instances of buttons with the same data-href attr var FBshareCounts = '
'; jQ('ul:not(.col-8.b3, .undocked-share) .facebook-share-btn[data-href="'+url+'"]').after(FBshareCounts); if(jQ('.undocked-share').length){ FBshareCounts = ' '; jQ('.undocked-share .facebook-share-btn[data-href="'+url+'"]').before(FBshareCounts); } } }); } }); }); /* 9624d93b1241d21c8fa943fa72abafed554253ae/common/scripts/button-google-plus.js */ window.___gcfg = {lang: 'en-GB'}; (function() { var po = document.createElement('script'); po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })(); function trackGPlus(obj) { try { omnitureTrackShareLinks('comp: r2: Share tools: GooglePlus Share', 'GooglePlus', true); } catch(er) { // ignore } } /* 9624d93b1241d21c8fa943fa72abafed554253ae/common/scripts/button-linkedin.js */ (function() { // Asynchronously load the LinkedIn library jQ.getScript('//platform.linkedin.com/in.js'); })(); function trackLinkedIn() { try { omnitureTrackShareLinks('comp: r2: Share tools: LinkedIn Share', 'LinkedIn', true); } catch(er) { // ignore } } /* 9624d93b1241d21c8fa943fa72abafed554253ae/common/scripts/button-tweet.js */ jQ(function ($) { if ('undefined' === typeof twttr) { window.twttr = (function (d,s,id) { var t, js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js=d.createElement(s); js.id=id; js.src="//platform.twitter.com/widgets.js"; fjs.parentNode.insertBefore(js, fjs); return window.twttr || (t = { _e: [], ready: function(f) { t._e.push(f); } }); } (document, 'script', 'twitter-wjs')); } twttr.ready(function(twttr) { twttr.events.bind('click', function(event) { if ('tweet' === event.region) { rs_logSocialNetwork('Twitter'); try { omnitureTrackShareLinks('comp: r2: Share tools: Twitter Share', 'Twitter', true); } catch(er) { // ignore } } }); }); }); /* 9624d93b1241d21c8fa943fa72abafed554253ae/common/scripts/convertJSONtoAd.js */ convertJSONtoAd = function (imgTarget, linkText, trailText, sponJSON, title, slot) { if (sponJSON && typeof(sponJSON) === 'object') { imgTarget.attr('src', sponJSON.ad.image).attr('alt', sponJSON.ad['alt-image-text']).parent().attr('href', sponJSON.ad.link); linkText.attr('href', sponJSON.ad.link).text(sponJSON.ad.linkText); trailText.text(sponJSON.ad.description); if (sponJSON.ad.title) { title.text(sponJSON.ad.title); } jQ('.json-features.' + slot).show(); } }; /* 9624d93b1241d21c8fa943fa72abafed554253ae/common/scripts/floating-share-tools.js */ var checkViewport = function () { var pullout = jQ('.undocked-share'); var mainCol = jQ('#article-body-blocks'); var wideViewport = jQ(window).width() >= 1130; var mainColTop = mainCol.position().top; var scrollFromTop = jQ(window).scrollTop(); var dynTop = parseInt(mainCol.position().top, 10) +'px'; var dynLeft = mainCol.offset().left - 20; dynLeft = '-' + dynLeft +'px'; //if it's big enough if (wideViewport) { if((scrollFromTop < mainColTop) && wideViewport) { pullout.removeClass('floating').css({'top' : dynTop, 'left' : dynLeft }); } else { pullout.addClass('floating').removeAttr('style'); } if(jQ.waypoints){ jQ.waypoints.settings.scrollThrottle = 4; jQ.waypoints.settings.resizeThrottle = 500; mainCol.waypoint({offset: 8}); mainCol.waypoint(function(event, direction) { if (direction === 'down' && jQ(window).width() >= 1130) { pullout.addClass('floating').removeAttr('style'); //if it's not going down } else { pullout.removeClass('floating').css({'top' : dynTop, 'left' : dynLeft }); } }); } } else { pullout.removeClass('floating').css({'top' : '-1000px', 'left' : '-1000px' }); } }; jQ(window).bind("load resize", checkViewport); /* 9624d93b1241d21c8fa943fa72abafed554253ae/common/scripts/formChecker.js */ // -----------------------formChecker.js starts here ------------------------------ function _formChecker(elem, limit, warning) { var charsLeft = limit - elem.value.length; warning.innerHTML = charsLeft + ' characters left'; warning.className = ""; if (elem.value.length > limit) { elem.value = elem.value.substring(0, limit); warning.innerHTML = "Max 250 characters"; warning.className = "warning"; elem.scrollTop = elem.scrollHeight - elem.clientHeight; } } function formChecker(elem, limit) { _formChecker(elem, limit, document.getElementById('warning')); } function formCheckerSide(elem, limit) { _formChecker(elem, limit, document.getElementById('warning-side')); } /* 9624d93b1241d21c8fa943fa72abafed554253ae/common/scripts/glossaryPopupView.js */ ensurePackage("guardian.r2"); function glossaryPopupView() { function attachLinksToGlossary(identifier, header, footer) { var allGlossaryLinks = guardian.r2.dom.element.getElementsByClassName(identifier); if (!allGlossaryLinks) { return; } for (var i = 0; i < allGlossaryLinks.length; ++i) { // onclick, get href from link var href = allGlossaryLinks[i].getAttribute('href'); href = allGlossaryLinks[i].getAttribute('href', 2); href = href.substring(1); // attach click event addEvent(allGlossaryLinks[i], 'click', toggleGlossaryPopup(href, allGlossaryLinks[i], i, header, footer)); } } function toggleGlossaryPopup(href, ele, num, header, footer) { return function (e) { guardian.r2.event.stop(e); var popUp = document.getElementById(href + '-popup-' + num); if (popUp === null || popUp === 'null') { // get the glossary element the link goes to var glossaryItem = document.getElementById(href); var linkPositionLeft = ele.offsetLeft; // create new element // populate new element with cloned heading and text from glossary popUp = document.createElement('div'); popUpBox = glossaryItem.cloneNode(true); popUpHeading = document.createElement('h3'); if (header !== null) { popUpHeadingText = document.createTextNode(header); popUpHeading.appendChild(popUpHeadingText); } popUpClose = document.createElement('a'); addEvent(popUpClose, 'click', toggleGlossaryPopup(href, ele, num)); popUpClose.setAttribute('class', 'close'); popUpClose.setAttribute('className', 'close'); popUpCloseText = document.createTextNode('Close'); popUpClose.appendChild(popUpCloseText); popUpFooter = document.createElement('p'); if (footer !== null) { popUpFooterText = document.createTextNode(footer); popUpFooter.appendChild(popUpFooterText); } if (header !== null) { popUp.appendChild(popUpHeading); } popUp.appendChild(popUpClose); popUp.appendChild(popUpBox); popUp.appendChild(popUpFooter); // amend ID and class popUp.setAttribute('id', href + '-popup-' + num); popUp.setAttribute('class', 'glossary-popup'); popUp.setAttribute('className', 'glossary-popup'); // append new element beneath link ele.parentNode.insertBefore(popUp, ele); // position popup var popupId = popUp.getAttribute('id'); jQ('#' + popupId).css("position", "absolute"); jQ('#' + popupId).css("left", linkPositionLeft + ele.offsetWidth + "px"); } // toggle display of new element toggleDisplay(popUp); }; } function toggleDisplay(popUp) { popUp.style.display = popUp.style.display === ('block') ? popUp.style.display = 'none' : popUp.style.display = ('block'); } attachLinksToGlossary('gloss-link', 'Glossary', ''); attachLinksToGlossary('gu-gloss-link', null, null); insertStyleSheet('styles/glossary-popup.css'); } addEvent(window, "load", glossaryPopupView); /* 9624d93b1241d21c8fa943fa72abafed554253ae/common/scripts/guardian.geolocation.js */ /* GeoLocation 1.0 */ /** @namespace */ guardian = guardian || {}; (function (jQuery) { var url = "http://guardian-geo-location.appspot.com/geo-location"; function GeoLocation() { } GeoLocation.cached = null; GeoLocation.prototype.getCachedGeoCode = function () { if (window.sessionStorage) { return sessionStorage.getItem("geoLocation_countryCode"); } else { return this.cached; } }; GeoLocation.prototype.setCachedGeoCode = function (countryCode) { if (window.sessionStorage) { sessionStorage.setItem("geoLocation_countryCode", countryCode); } else { this.cached = countryCode; } }; GeoLocation.prototype.getGeoCode = function () { if (this.getCachedGeoCode()) { return jQuery.Deferred() .resolve(this.getCachedGeoCode()) .promise(); } var promise = jQuery.ajax({ url:url, dataType:'jsonp', jsonpCallback: 'geolocation', cache: true }); promise.then(jQuery.proxy(this.setCachedGeoCode, this)); return promise; }; GeoLocation.prototype.init = function () { var dataOnlyInCountry = jQuery("[data-only-in-country]"); if (!dataOnlyInCountry.length) { return; } this.getGeoCode().then(function (actualCountryCode) { dataOnlyInCountry.each(function (i, obj) { var jObj = jQuery(obj), expectedCountryCode = jObj.attr("data-only-in-country"); if (expectedCountryCode.toUpperCase() !== actualCountryCode.toUpperCase()) { jObj.closest(".embed").remove(); } }); }); }; guardian.GeoLocation = GeoLocation; jQuery(function() { new guardian.GeoLocation().init(); }) })(jQuery); /* 9624d93b1241d21c8fa943fa72abafed554253ae/common/scripts/guardian.r2.EmailToAFriend.js */ ensurePackage('guardian.r2'); guardian.r2.EmailToAFriend = (function (node, options, tracking_options) { jQ(function () { var email_forms = jQ(document.forms.emailthis); email_forms.bind('submit', function (e) { e.preventDefault(); var form_elem = jQ(this); var form = this; var form_data = {}; var page_url = jQ('meta[name="content-id"]').attr('content'); var post_url = 'http://email-share.guardianapps.co.uk/share/content' + page_url; var submit_button = form_elem.find('input[type="submit"]'); submit_button.attr('disabled', 'disabled'); form_data.recipient = this.to.value; form_data.from = this.from.value; var errorFunc = function(jsonMessage) { submit_button.removeAttr('disabled'); form_elem.find('.validation-error').remove(); if (typeof(jsonMessage) !== 'string') { jsonMessage = 'There is a problem with this service. Please try again later.'; } form_elem.find('[name="to"]').after('