(function(){ $.fn.share = function(options) { var option = $.extend($.fn.share.defaults,options); var selected_text =""; $.extend($.fn.share,{ init : function(shareable) { var self = this; $.fn.share.defaults.shareable = shareable; $.fn.share.defaults.shareable.on('mouseup',function(){ if ($(this).parents('body.editor_enable').length === 0) { self.popOver(); } }); $.fn.share.defaults.shareable.on('mousedown',function(){ self.destroy(); }); }, getContent : function() { var popover_content = ''; if($('.blog_title, .blog_content').hasClass('js_comment')){ selected_text = this.getSelection('string'); popover_content += ''; } if($('.blog_title, .blog_content').hasClass('js_tweet')){ var tweet = '"%s" - %s'; var baseLength = tweet.replace(/%s/g, '').length; // Shorten the selected text to match the tweet max length // Note: all (non-localhost) urls in a tweet have 23 characters https://support.twitter.com/articles/78124 var selectedText = this.getSelection('string').substring(0, option.maxLength - baseLength - 23); var text = encodeURIComponent(_.str.sprintf(tweet, selectedText, window.location.href)); popover_content += ''; } return popover_content; }, commentEdition : function(){ var positionComment = ($('#comments').position()).top-50; $(".o_portal_chatter_composer_form textarea").val('"' + selected_text + '" ').focus(); $('html, body').stop().animate({ 'scrollTop': positionComment }, 500, 'swing', function () { window.location.hash = 'blog_post_comment_quote'; }); }, getSelection : function(share) { if(window.getSelection){ if (share === 'string') { return String(window.getSelection().getRangeAt(0)).replace(/\s{2,}/g, ' '); } else { return window.getSelection().getRangeAt(0); } } else if(document.selection){ if (share === 'string') { return document.selection.createRange().text.replace(/\s{2,}/g, ' '); } else { return document.selection.createRange(); } } }, popOver : function() { this.destroy(); if(this.getSelection('string').length < option.minLength) return; var data = this.getContent(); var range = this.getSelection(); var newNode = document.createElement("span"); range.insertNode(newNode); newNode.className = option.className; var $pop = $(newNode); $pop.popover({ trigger:'manual', placement: option.placement, html: true, content: function(){ return data; } }).popover('show'); $('.o_share_comment').on('click', this.commentEdition); }, destroy : function(){ var $span = $('span.'+option.className); $span.popover('hide'); $span.remove(); } }); $.fn.share.init(this); }; $.fn.share.defaults = { shareLink : "http://twitter.com/intent/tweet?text=", minLength : 5, maxLength : 140, target : "blank", className : "share", placement : "top", }; }());