145 lines
3.9 KiB
JavaScript
145 lines
3.9 KiB
JavaScript
|
var cdb = require('cartodb.js-v3');
|
||
|
var $ = require('jquery-cdb-v3');
|
||
|
|
||
|
/**
|
||
|
* View to interact with the share buttons in the content.
|
||
|
*
|
||
|
* - Twitter code from https://dev.twitter.com/web/intents
|
||
|
*
|
||
|
*/
|
||
|
module.exports = cdb.core.View.extend({
|
||
|
|
||
|
events: {
|
||
|
'click .js-Navmenu-shareLink': '_onClickShareLink',
|
||
|
'click .js-Navmenu-closeLink': '_onClickCloseLink',
|
||
|
'click .js-Navmenu-link--facebook': '_onClickFacebookLink',
|
||
|
'click .js-Navmenu-link--linkedin': '_onClickLinkedinLink'
|
||
|
},
|
||
|
|
||
|
initialize: function() {
|
||
|
this.$shareList = $('.js-Navmenu-shareList');
|
||
|
|
||
|
this.model.on("change:active", this._toggleShare, this);
|
||
|
|
||
|
this._initBindings();
|
||
|
},
|
||
|
|
||
|
_initBindings: function() {
|
||
|
if (window.__twitterIntentHandler) return;
|
||
|
|
||
|
if (document.addEventListener) {
|
||
|
document.addEventListener('click', this._handleIntent, false);
|
||
|
} else if (document.attachEvent) {
|
||
|
document.attachEvent('onclick', this._handleIntent);
|
||
|
}
|
||
|
window.__twitterIntentHandler = true;
|
||
|
},
|
||
|
|
||
|
_onClickLinkedinLink: function(e) {
|
||
|
var href = $(e.target).closest('a').attr('href'),
|
||
|
m, left, top;
|
||
|
|
||
|
var windowOptions = 'scrollbars=yes,resizable=yes,toolbar=no,location=yes',
|
||
|
width = 550,
|
||
|
height = 420,
|
||
|
winHeight = screen.height,
|
||
|
winWidth = screen.width;
|
||
|
|
||
|
left = Math.round((winWidth / 2) - (width / 2));
|
||
|
top = 0;
|
||
|
|
||
|
if (winHeight > height) {
|
||
|
top = Math.round((winHeight / 2) - (height / 2));
|
||
|
console.log(top);
|
||
|
}
|
||
|
|
||
|
window.open(href, 'facebook', windowOptions + ',width=' + width +
|
||
|
',height=' + height + ',left=' + left + ',top=' + top);
|
||
|
|
||
|
e.returnValue = false;
|
||
|
e.preventDefault && e.preventDefault();
|
||
|
},
|
||
|
|
||
|
_onClickFacebookLink: function(e) {
|
||
|
var href = $(e.target).closest('a').attr('href'),
|
||
|
m, left, top;
|
||
|
|
||
|
var windowOptions = 'scrollbars=yes,resizable=yes,toolbar=no,location=yes',
|
||
|
width = 550,
|
||
|
height = 420,
|
||
|
winHeight = screen.height,
|
||
|
winWidth = screen.width;
|
||
|
|
||
|
left = Math.round((winWidth / 2) - (width / 2));
|
||
|
top = 0;
|
||
|
|
||
|
if (winHeight > height) {
|
||
|
top = Math.round((winHeight / 2) - (height / 2));
|
||
|
console.log(top);
|
||
|
}
|
||
|
|
||
|
window.open(href, 'facebook', windowOptions + ',width=' + width +
|
||
|
',height=' + height + ',left=' + left + ',top=' + top);
|
||
|
|
||
|
e.returnValue = false;
|
||
|
e.preventDefault && e.preventDefault();
|
||
|
},
|
||
|
|
||
|
_handleIntent: function(e) {
|
||
|
e = e || window.event;
|
||
|
var target = e.target || e.srcElement,
|
||
|
m, left, top;
|
||
|
|
||
|
while (target && target.nodeName.toLowerCase() !== 'a') {
|
||
|
target = target.parentNode;
|
||
|
}
|
||
|
|
||
|
if (target && target.nodeName.toLowerCase() === 'a' && target.href) {
|
||
|
var intentRegex = /twitter\.com(\:\d{2,4})?\/intent\/(\w+)/,
|
||
|
windowOptions = 'scrollbars=yes,resizable=yes,toolbar=no,location=yes',
|
||
|
width = 550,
|
||
|
height = 420,
|
||
|
winHeight = screen.height,
|
||
|
winWidth = screen.width;
|
||
|
|
||
|
m = target.href.match(intentRegex);
|
||
|
if (m) {
|
||
|
left = Math.round((winWidth / 2) - (width / 2));
|
||
|
top = 0;
|
||
|
|
||
|
if (winHeight > height) {
|
||
|
top = Math.round((winHeight / 2) - (height / 2));
|
||
|
}
|
||
|
|
||
|
window.open(target.href, 'intent', windowOptions + ',width=' + width +
|
||
|
',height=' + height + ',left=' + left + ',top=' + top);
|
||
|
e.returnValue = false;
|
||
|
e.preventDefault && e.preventDefault();
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
close: function() {
|
||
|
this.model.set('active', false);
|
||
|
},
|
||
|
|
||
|
_onClickShareLink: function(e) {
|
||
|
this.killEvent(e);
|
||
|
|
||
|
this.model.set('active', !this.model.get('active'));
|
||
|
},
|
||
|
|
||
|
_onClickCloseLink: function(e) {
|
||
|
this.close();
|
||
|
},
|
||
|
|
||
|
_toggleShare: function() {
|
||
|
if (this.model.get('active')) {
|
||
|
this.$shareList.addClass('is-active');
|
||
|
} else {
|
||
|
this.$shareList.removeClass('is-active');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
});
|