dist/plugin/social.js

File

			(function(global, undefined) { var kafe = global.kafe, $ = kafe.dependencies.jQuery; kafe.bonify({name:'plugin.social', version:'0.2.1', obj:(function(){
			
				var
					getAbsoluteUrl = function(href) {
						if (href) {
							var link = document.createElement('a');
							link.href = href;
							return (link.protocol+'//'+link.host+link.pathname+link.search+link.hash);
						}
						return '';
					},
			
					networks = {
						facebook: {
							url:        'https://www.facebook.com/sharer/sharer.php?u=<%= url %>&lang=<%= lang %>',
							width:      '675',
							height:     '368',
							script:     {
											url:   '//connect.facebook.net/<%= lang %>/sdk.js#xfbml=1&appId=<%= appid %>&version=v2.0',
											inner: ''
										},
							button:     '<div class="fb-share-button" data-href="<%= url %>" data-layout="<%= counter %>"></div>',
							loaded:     false,
							size:       { default: '' },
							counter:    { none: 'button', horizontal: 'button_count', vertical: 'box_count'},
							locale:     { fr: 'fr_FR', en: 'en_US'},
						},
						houzz: {
							url:        'http://www.houzz.com/imageClipperUpload?link=<%= url %>&source=button&hzid=<%= hzid %>&imageUrl=<%= media %>&title=<%= text %>&ref=<%= url %>',
							width:      '675',
							height:     '368',
							script:     {
											url:   '//platform.houzz.com/js/widgets.js',
											inner: ''
										},
							button:     '<a class="houzz-share-button" data-url="<%= url %>" data-hzid="<%= hzid %>" data-img="<%= media %>" data-title="<%= text %>" data-desc="<%= text %>" data-category="" data-showcount="<%= counter %>" href="http://www.houzz.com"></a>',
							loaded:     false,
							size:       { default: '' },
							counter:    { none: '0', horizontal: '1'},
							locale:     { fr: 'fr_FR', en: 'en_US'},
						},
						twitter: {
							url:        'https://twitter.com/intent/tweet?url=<%= url %>&text=<%= text %>&related=<%= related %>&lang=<%= lang %>',
							width:      '550',
							height:     '450',
							script:     {
											url:   'https://platform.twitter.com/widgets.js',
											inner: ''
										},
							button:     '<a href="<%= url %>" class="twitter-share-button" data-related="<%= related %>" data-lang="<%= lang %>" data-size="<%= size %>" data-count="<%= counter %>"></a>',
							loaded:     false,
							size:       { default: '', small: 'medium', large: 'large'},
							counter:    { none: 'none', horizontal: 'horizontal', vertical: 'vertical'},
							locale:     { fr: 'fr', en: 'en'},
						},
						linkedin: {
							url:        'https://www.linkedin.com/shareArticle?url=<%= url %>&summary=<%= text %>&mini=true&lang=<%= lang %>',  // &ro=false &title=lorem &source=example.com
							width:      '600',
							height:     '500',
							script:     {
											url:   '//platform.linkedin.com/in.js',
											inner: 'lang: <%= lang %>'
										},
							button:     '<script type="IN/Share" data-url="<%= url %>" data-counter="<%= counter %>"></script>',
							loaded:     false,
							size:       { default: '' },
							counter:    { none: '', horizontal: 'right', vertical: 'top'},
							locale:     { fr: 'fr_FR', en: 'en_US'},
						},
						googleplus: {
							url:        'https://plus.google.com/share?url=<%= url %>&t=<%= text %>&lang=<%= lang %>',
							width:      '520',
							height:     '520',
							script:     {
											url:   'https://apis.google.com/js/platform.js',
											inner: '{lang: \'<%= lang %>\'}'
										},
							button:     '<div class="g-plus" data-action="share" data-href="<%= url %>" data-annotation="<%= counter %>" data-height="<% if(counter == "vertical-bubble") { %>60<% } else { %><%= size %><% } %>"></div>',
							loaded:     false,
							size:       { default: '', small: '15', large: '24' },
							counter:    { none: 'none', horizontal: 'bubble', vertical: 'vertical-bubble'},
							locale:     { fr: 'fr-CA', en: 'en-US'},
						},
						pinterest: {
							url:        'http://<%= lang %>.pinterest.com/pin/create/button/?url=<%= url %>&description=<%= text %>&media=<%= media %>',
							width:      '750',
							height:     '335',
							script:     {
											url:   '//assets.pinterest.com/js/pinit.js',
											inner: ''
										},
							button:     '<a href="//<%= lang %>.pinterest.com/pin/create/button/?url=<%= url %>&media=<%= media %>&description=<%= text %>" data-pin-do="buttonPin" data-pin-config="<%= counter %>" data-pin-height="<%= size %>"><img src="//assets.pinterest.com/images/pidgets/pinit_fg_en_rect_gray_<%= size %>.png" /></a>',
							loaded:     false,
							size:       { default: '20', small: '20', large: '28' },
							counter:    { none: 'none', horizontal: 'beside', vertical: 'above'},
							locale:     { fr: 'fr', en: 'en'},
						}
					},
			
			
					share_options = {
						lang:    kafe.env.lang,
						url:     document.location,
						text:    document.title,
						related: '', // twitter : https://dev.twitter.com/docs/tweet-button#related
						media:   getAbsoluteUrl( $('head link[rel="image_src"]').attr('href') ) // pinterest media
					},
			
					genuine_options = {
						lang:    kafe.env.lang,
						url:     document.location,
						text:    document.title,
						related: '', // twitter : https://dev.twitter.com/docs/tweet-button#related
						size:    'default',
						counter: 'horizontal',
						media:   getAbsoluteUrl( $('head link[rel="image_src"]').attr('href') ) // pinterest media
					}
				;
			
			
				/**
				* ### Version 0.2.1
				* Social tools
				*
				* @module kafe.plugin
				* @class kafe.plugin.social
				*/
				var social = {};
			
			
				/**
				* Initialize share buttons functionality
				*
				* @method initShareButtons
				* @param {Object} [options] Options
				*	@param {Object} [options.lang] Display popup sharing language. Not fully supported by all social networks. Possible values are `en`, `fr` or by default is `kafe.env.lang`.
				*	@param {Object} [options.url] Specific url sharing. By default is the current url.
				*	@param {Object} [options.text] Specific text sharing. By default is the browser title.
				*	@param {Object} [options.media] Image url for Pinterest sharing. By default is the link to the tag `image_src` in the head of the document.
				*
				* @example
				*	<span data-kafesocial-action="share" data-kafesocial-network="facebook">Facebook</span>
				*	<span data-kafesocial-action="share" data-kafesocial-network="twitter"><Twitter/span>
				*	<span data-kafesocial-action="share" data-kafesocial-network="linkedin">Linkedin</span>
				*	<span data-kafesocial-action="share" data-kafesocial-network="googleplus">Google+</span>
				*	<span data-kafesocial-action="share" data-kafesocial-network="pinterest" data-kafesocial-options='{ "url":"http://www.flickr.com/photos/kentbrew/6851755809/", "media":"http://farm8.staticflickr.com/7027/6851755809_df5b2051c9_z.jpg" }'>Pinterest</span>
				*	<script>
				*		$(function() {
				*			kafe.plugin.social.initShareButtons();
				*		});
				*	</script>
				*
				*/
				social.initShareButtons = function(options) {
					share_options = $.extend({}, share_options, options || {});
			
					$('[data-kafesocial-action="share"]').on('click', function() {
						var $this = $(this);
						var network = $this.data('kafesocial-network');
						var options = $.extend({}, share_options, $this.data('kafesocial-options') || {});
						var data = networks[network];
						//set the good language format
						options.lang = networks[network].locale[options.lang];
						if (data.url) {
							window.open( _.template(data.url)(options) , '_blank', 'width='+data.width+',height='+data.height+',menubar=no,toolbar=no');
						}
					});
				};
			
				/**
				* Initialize genuine buttons functionality
				*
				* @method initGenuineButtons
				* @param {Object} [options] Options
				*	@param {Object} [options.lang] Display button language. Possible values are `en`, `fr` or by default is `kafe.env.lang`.
				*	@param {Object} [options.url] Specific url sharing. By default is the current url.
				*	@param {Object} [options.text] Specific text sharing. By default is the browser title.
				*	@param {Object} [options.size] Display button size. Possible values are `small` and `large`. Only work with Twitter, Google + and Pinterest.
				*	@param {Object} [options.counter] Orientation and visibility of counter. Possible values are `none`, `horizontal` and `vertical`. By default is `horizontal`.
				*	@param {Object} [options.media] Image url for Pinterest sharing. By default is the link to the tag `image_src` in the head of the document.
				*
				* @example
				*	<span data-kafesocial-action="genuine" data-kafesocial-network="facebook" data-kafesocial-options='{ "appid":"1514943792075126" }'></span>
				*	<span data-kafesocial-action="genuine" data-kafesocial-network="houzz" data-kafesocial-options='{ "hzid":"26660", "url":"http://www.flickr.com/photos/kentbrew/6851755809/", "media":"http://farm8.staticflickr.com/7027/6851755809_df5b2051c9_z.jpg" }'></span>
				*	<span data-kafesocial-action="genuine" data-kafesocial-network="twitter"></span>
				*	<span data-kafesocial-action="genuine" data-kafesocial-network="linkedin"></span>
				*	<span data-kafesocial-action="genuine" data-kafesocial-network="googleplus"></span>
				*	<span data-kafesocial-action="genuine" data-kafesocial-network="pinterest" data-kafesocial-options='{ "url":"http://www.flickr.com/photos/kentbrew/6851755809/", "media":"http://farm8.staticflickr.com/7027/6851755809_df5b2051c9_z.jpg" }'></span>
				*	<script>
				*		$(function() {
				*			kafe.plugin.social.initGenuineButtons();
				*		});
				*	</script>
				*
				*/
			
				// Dev Documentation :
				// https://developers.google.com/+/web/share/
				// https://dev.twitter.com/docs/tweet-button
				// https://developers.facebook.com/docs/plugins/like-button
				// http://business.pinterest.com/en/widget-builder#do_pin_it_button
				// https://developer.linkedin.com/plugins/share-plugin-generator
				// http://www.houzz.com/buttonsAndBadges
			
				social.initGenuineButtons = function(options) {
					genuine_options = $.extend({}, genuine_options, options || {});
			
					$('[data-kafesocial-action="genuine"]').each(function() {
			
						var
							$this = $(this),
							insertScript = function(url, inner) {
								var script = document.createElement('script');
								script.type = 'text/javascript';
								script.async = true;
								script.src = url;
								script.innerHTML = inner;
								var all = document.getElementsByTagName('script')[0];
								all.parentNode.insertBefore(script, all);
							},
							network = $this.data('kafesocial-network'),
							options = $.extend({}, genuine_options, $this.data('kafesocial-options') || {}),
							data = networks[network]
						;
						//set the good language format
						options.lang = networks[network].locale[options.lang];
						//button counter layout
						options.counter = networks[network].counter[options.counter];
						//button size
						options.size = ( networks[network].size ? networks[network].size[options.size] : options.size );
			
						if (!data.loaded) {
							networks[network].loaded = true;
							$this.html(_.template(data.button)(options));
							insertScript(_.template(data.script.url)(options), _.template(data.script.inner)(options));
						}
			
					});
				};
			
				return social;
			
			})()}); })(typeof window !== 'undefined' ? window : this);