diff --git a/README.md b/README.md index 9c7b126..57a07dd 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # BBC Visual Journalism ShareTools module +## This Sharetools component is no longer supported + This module is used to add share tools to VJ content. ## Installation & Setup diff --git a/bin/sharetools.min.js b/bin/sharetools.min.js index 409ffed..dc8f664 100644 --- a/bin/sharetools.min.js +++ b/bin/sharetools.min.js @@ -1 +1 @@ -define("ShareToolsView",["template_engine"],function(e){var t=function(e){this.networks=e.networkNames,this.template=e.config.template,this.label=e.config.label,this.holderEl=e.config.holderEl;if(!this.template)throw new Error("ShareTools: Template markup was not supplied");this.render()};return t.prototype={render:function(){var t={label:this.label,networks:this.networks},n=e(this.template,t);this.holderEl&&(this.holderEl.innerHTML=n)},getHolderElement:function(){return this.holderEl}},t}),define("ShareToolsModel",[],function(){var e=function(){};return e.prototype={setShareUrl:function(e){this.shareUrl=e||"https://www.bbc.co.uk"},getShareUrl:function(){return this.shareUrl},setMessage:function(e){this.validate&&(e=this.validate(e)),this.message=e},getMessage:function(){return this.message}},e}),define("models/Email",["ShareToolsModel"],function(e){var t=function(){};return t.prototype=Object.create(e.prototype),t.prototype.validate=function(e){if(!e||!e.subject||!e.message)throw new Error('ShareTools: Email message requires a "subject" and a "message"');return e},t.prototype.shareEndpoint="mailto:",t.prototype.popup=!1,t.prototype.parameters=function(){return{subject:this.getMessage().subject,body:this.getMessage().message+" "+this.getShareUrl()}},t}),define("models/Facebook",["ShareToolsModel"],function(e){var t=function(){};return t.prototype=Object.create(e.prototype),t.prototype.validate=function(e){if(!e)throw new Error("ShareTools: Facebook message must be set");return e.share_or_feed=e.share_or_feed||"feed",this.shareEndpoint="https://www.facebook.com/dialog/"+e.share_or_feed,e},t.prototype.popup=!0,t.prototype.parameters=function(){return{app_id:"58567469885",redirect_uri:"https://www.bbc.co.uk/news/special/shared/vj_sharetools/fb_red_uri.html?st_cb=facebook#state=feed",display:"popup",locale:"en_GB",link:this.getShareUrl(),quote:this.getMessage().title}},t}),define("models/Twitter",["ShareToolsModel"],function(e){var t=function(){};return t.prototype=Object.create(e.prototype),t.prototype.validate=function(e){if(!e)throw new Error("ShareTools: Twitter message must be set");return e},t.prototype.shareEndpoint="https://twitter.com/intent/tweet",t.prototype.popup=!0,t.prototype.parameters=function(){return{text:this.getMessage()+" "+this.getShareUrl()}},t}),define("models/Messenger",["ShareToolsModel"],function(e){var t=function(){};return t.prototype=Object.create(e.prototype),t.prototype.validate=function(e){return e},t.prototype.shareEndpoint="fb-messenger://share",t.prototype.popup=!1,t.prototype.parameters=function(){return{app_id:"58567469885",redirect_uri:"https://www.bbc.co.uk/news/special/shared/vj_sharetools/fb_red_uri.html?st_cb=facebook#state=feed",display:"popup",locale:"en_GB",link:this.getShareUrl()}},t}),define("models/MessengerDesktop",["ShareToolsModel"],function(e){var t=function(){};return t.prototype=Object.create(e.prototype),t.prototype.validate=function(e){if(!e)throw new Error("ShareTools: MessengerDesktop message must be set");return e},t.prototype.shareEndpoint="https://www.facebook.com/dialog/feed",t.prototype.popup=!0,t.prototype.parameters=function(){return{app_id:"58567469885",redirect_uri:"https://www.bbc.co.uk/news/special/shared/vj_sharetools/fb_red_uri.html?st_cb=facebook#state=feed",display:"popup",locale:"en_GB",link:this.getShareUrl(),text:this.getMessage().title}},t}),define("models/Whatsapp",["ShareToolsModel"],function(e){var t=function(){};return t.prototype=Object.create(e.prototype),t.prototype.validate=function(e){if(!e)throw new Error("ShareTools: Whatsapp message must be set");return e.title=e.title||"",e},t.prototype.shareEndpoint="whatsapp://send",t.prototype.popup=!1,t.prototype.parameters=function(){return{text:this.getMessage().title+" - "+this.getShareUrl()}},t}),define("ShareToolsModelFactory",["ShareToolsModel","models/Email","models/Facebook","models/Twitter","models/Messenger","models/MessengerDesktop","models/Whatsapp"],function(e,t,n,r,i,s,o){function u(){this.knownModels={email:t,facebook:n,twitter:r,messenger:i,messenger_desktop:s,whatsapp:o},this.modelObjects={}}return u.prototype={setMessages:function(e){if(Object.keys(this.modelObjects).length===0)this.initialiseModels(e);else{var t,n;for(n in e)e.hasOwnProperty(n)&&(t=e[n],this.modelObjects[n]||this.initialiseModel(n,t),this.modelObjects[n].setMessage(t))}},setShareUrl:function(e){var t,n;for(t in this.modelObjects)this.modelObjects.hasOwnProperty(t)&&(n=this.modelObjects[t],n.setShareUrl(e))},initialiseModels:function(e){for(var t in e)this.initialiseModel(t,e[t])},initialiseModel:function(e,t){var n,r;this.knownModels[e]||(this.knownModels[e]=this.defineCustomNetwork(e,t)),n=this.knownModels[e],r=new n,r.setMessage(t),this.modelObjects[e]=r},defineCustomNetwork:function(t,n){var r=function(){};r.prototype=Object.create(e.prototype),r.prototype.popup=n.popup===!0,r.prototype.shareEndpoint=n.shareEndpoint;if(!n.shareEndpoint)throw new Error('ShareTools: no shareEndpoint property supplied for custom network "'+t+'"');return r.prototype.parameters=function(){var e={};for(var t in n.properties)n.properties.hasOwnProperty(t)&&(e[t]=n.properties[t]);return e},r},getNetworkConfig:function(e){return this.modelObjects[e]}},u}),define("ShareTools",["ShareToolsView","ShareToolsModelFactory"],function(e,t){var n=function(n){this.options=n,this.factory=new t,this.view=new e({networkNames:this.getNetworkNames(),config:n}),this.shareButtonCallbacks=[],this.setMessages(this.options.messages),this.setShareUrl(this.options.shareUrl),this.setElSelectors(),this.changeUrls(),this.addListeners()};return n.prototype={setMessages:function(e){this.factory.setMessages(e)},setShareUrl:function(e){this.factory.setShareUrl(e)},openShareWindow:function(e){var t=navigator.userAgent.match(/^cucumber$/i),n=this.getShareTargetUrl(e),r=this.factory.getNetworkConfig(e);if(t)window.locations_visited=window.locations_visited||[],window.locations_visited.push(n);else{if(!r.popup)return!0;var i=window.open(n,"_blank","width=626,height=235");i.opener=null,i.location=n}},getShareTargetUrl:function(e){var t=this.factory.getNetworkConfig(e);if(!t)throw new Error("Could not find network config for network "+e);var n=t.parameters(),r=this.buildQueryStringFrom(n);return t.shareEndpoint+r},buildQueryStringFrom:function(e){var t="?";for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];t+=n+"="+encodeURIComponent(r)+"&"}return t.slice(0,-1)},getNetworkNames:function(){var e=[];for(var t in this.options.messages)this.options.messages.hasOwnProperty(t)&&e.push(t);return e},setElSelectors:function(){var e=this.view.getHolderElement();this.shareButton=e.querySelector(".share__button"),this.toggleOverlay=e.querySelector(".share__overlay"),this.closeButton=e.querySelector(".share__overlay-close"),this.networks=e.querySelectorAll(".share__tool--network")},addListeners:function(){var e=this;this.shareButton&&this.toggleOverlay&&(this.shareButton.addEventListener("click",function(t){return t.preventDefault(),e.toggleShareOverlay(),!1}),this.closeButton.addEventListener("click",function(t){return t.preventDefault(),e.toggleShareOverlay(),!1}));if(this.networks)for(var t=0;t