function mainPageWidgetsInit () {
twitterShareInit();
gplusShareInit();
facebookShareInit();
}
function twitterShareInit() {
var e = document.createElement('script');
e.type="text/javascript";
e.async = true;
e.src = '//platform.twitter.com/widgets.js';
document.getElementsByTagName('head')[0].appendChild(e); //Twitter tracking
if (!window.jQuery) {
return;
}
jQuery(e).load(function() {
twttr.events.bind('tweet', function (intent_event) {
if (intent_event) {
// console.log('tw');
ga('send', 'event', 'Share', 'Twitter Share', document.location.href);
}
});
twttr.events.bind('click', function (intent_event) {
if (intent_event) {
// console.log('tw cl');
ga('send', 'event', 'Share', 'Twitter Click', document.location.href);
}
});
});
}
var jsonpCallbacks = [];
function twitterCustomShareInit () {
var btns = document.querySelectorAll
? document.querySelectorAll('.tl_twitter_share_btn')
: [document.getElementById('tl_twitter_share_btn')];
if (!btns.length) {
return;
}
var head = document.getElementsByTagName('head')[0], i, script;
for (i = 0; i < btns.length; i++) {
(function (btn) {
var status = btn.getAttribute('data-text'),
url = btn.getAttribute('data-url') || location.toString() || 'https://telegram.org/',
via = btn.getAttribute('data-via');
script = document.createElement('script');
script.type="text/javascript";
script.async = true;
script.src = 'https://cdn.api.twitter.com/1/urls/count.json?url=' + encodeURIComponent(url) + '&callback=jsonpCallbacks[' + jsonpCallbacks.length + ']&rnd=' + Math.random();
head.appendChild(script);
var urlEncoded = encodeURIComponent(url),
popupUrl = 'https://twitter.com/intent/tweet?text=' + encodeURIComponent(status) + '&url=' + urlEncoded + '&via=' + encodeURIComponent(via);
jsonpCallbacks.push(function (data) {
var cnt = btn.getElementsByTagName('span')[0]
if (cnt && data.count) {
cnt.innerHTML = data.count;
cnt.style.display = 'inline';
}
});
btn.setAttribute('href', popupUrl);
btn.href = popupUrl;
btn.addEventListener('click', function (e) {
var popupW = 550,
popupH = 450,
params = [
'width=' + popupW,
'height=' + popupH,
'left=' + Math.round(screen.width / 2 - popupW / 2),
'top=' + Math.round(screen.height / 2 - popupH / 2),
'personalbar=0',
'toolbar=0',
'scrollbars=1',
'resizable=1'
].join(','),
popup = window.open(popupUrl, '_blank', params);
if (popup) {
try {
popup.focus();
} catch (e) {}
}
return cancelEvent(e);
}, false);
})(btns[i]);
}
}
function facebookLikeTooltipFix () {
document.getElementById('fb_widget_wrap').style.height = '192px';
}
function facebookShareInit () {
window.fbAsyncInit = function() {
FB.init({
appId: '254098051407226',
status: true,
cookie: true,
xfbml: true
});
FB.Event.subscribe('edge.create', function(targetUrl) {
facebookLikeTooltipFix();
ga('send', 'event', 'Share', 'Facebook Like', document.location.href);
});
FB.Event.subscribe('edge.remove', function(targetUrl) {
ga('send', 'event', 'Share', 'Facebook Unlike', document.location.href);
});
};
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
}
function gplusShareInit () {
(function() {
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
})();
}
function gplusOnShare (o) {
// console.log('g+', o);
if (o && o.state == 'off') {
ga('send', 'event', 'Share', 'GPlus Share', document.location.href);
} else {
ga('send', 'event', 'Share', 'GPlus Unshare', document.location.href);
}
}
function blogRecentNewsInit () {
if (document.querySelectorAll) {
var sideImages = document.querySelectorAll('.blog_side_image_wrap');
var sideImage, parent, i;
var len = len = sideImages.length;
for (i = 0; i < len; i++) {
sideImage = sideImages[i];
parent = sideImage.parentNode.parentNode;
if (parent) {
parent.insertBefore(sideImage, parent.firstChild);
}
}
}
var moreBtn = document.getElementById('tlb_blog_head_more_link');
if (!moreBtn) {
return false;
}
var activeClassName = 'tlb_blog_head_recent_active';
moreBtn.addEventListener('click', function (event) {
var parent = this.parentNode;
var className = parent.className;
if (className.indexOf(activeClassName) == -1) {
className += ' ' + activeClassName;
} else {
className = className.replace(' ' + activeClassName, '');
}
parent.className = className;
return cancelEvent(event);
});
}
function blogSideImageUpdate(argument) {
var isDesktop = document.documentElement.offsetWidth >= 1000
document.querySelectorAll('.blog_side_image_wrap').forEach(function (imageWrap) {
if (isDesktop) {
var titleHeight = imageWrap.parentNode.previousElementSibling.clientHeight;
imageWrap.firstElementChild.style.marginTop = (-titleHeight - 8) + 'px';
} else {
imageWrap.firstElementChild.style.marginTop = '';
}
})
}
function blogSideImageInit() {
window.addEventListener('resize', blogSideImageUpdate, false);
setTimeout(blogSideImageUpdate, 0);
}
function cancelEvent (event) {
event = event || window.event;
if (event) event = event.originalEvent || event;
if (event.stopPropagation) event.stopPropagation();
if (event.preventDefault) event.preventDefault();
return false;
}
function trackDlClick (element, event) {
var href = element.getAttribute('href'),
track = element.getAttribute('data-track') || false;
if (!track) {
return;
}
var trackData = track.toString().split('/');
ga('send', 'event', trackData[0], trackData[1], href);
if ((element.getAttribute('target') || '').toLowerCase() != '_blank') {
setTimeout(function() { location.href = href; }, 200);
return false;
}
}
var toTopWrapEl,
toTopEl,
pageContentWrapEl,
curVisible,
curShown = false;
function backToTopInit () {
pageContentWrapEl = document.getElementById('dev_page_content_wrap');
if (!pageContentWrapEl) {
return false;
}
var t = document.createElement('div');
t.innerHTML = '
Go up
';
toTopEl = t.firstChild;
t.innerHTML = '';
toTopWrapEl = t.firstChild;
toTopWrapEl.appendChild(toTopEl);
document.body.appendChild(toTopWrapEl);
if (window.addEventListener) {
window.addEventListener('resize', backToTopResize, false);
window.addEventListener('scroll', backToTopScroll, false);
}
backToTopResize();
}
function backToTopGo () {
window.scroll(0, 0);
backToTopScroll();
}
function backToTopResize () {
var left = getXY(pageContentWrapEl)[0],
dwidth = Math.max(window.innerWidth, document.documentElement.clientWidth, 0),
dheight = Math.max(window.innerHeight, document.documentElement.clientHeight);
curVisible = pageContentWrapEl && left > 130 && dwidth > 640;
toTopWrapEl.style.width = left + 'px';
toTopEl.style.height = dheight + 'px';
backToTopScroll();
}
function backToTopScroll () {
var st = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || document.documentElement.scrollTop;
if ((st > 400 && curVisible) != curShown) {
curShown = !curShown;
toTopWrapEl.className = 'back_to_top_wrap' + (curShown ? ' back_to_top_shown' : '');
}
}
function getXY (obj) {
if (!obj) return [0, 0];
var left = 0, top = 0;
if (obj.offsetParent) {
do {
left += obj.offsetLeft;
top += obj.offsetTop;
} while (obj = obj.offsetParent);
}
return [left, top];
}
var onDdBodyClick,
currentDd;
function dropdownClick (element, event) {
var parent = element.parentNode;
var isOpen = (parent.className || '').indexOf('open') > 0;
if (currentDd && currentDd != parent) {
dropdownHide(currentDd);
}
if (!isOpen) {
parent.className = (parent.className || '') + ' open';
if (!onDdBodyClick) {
window.addEventListener('click', dropdownPageClick, false);
}
currentDd = parent;
} else {
dropdownHide(currentDd);
currentDd = false;
}
event.cancelBubble = true;
return false;
}
function dropdownHide (parent) {
parent.className = parent.className.replace(' open', '');
}
function dropdownPageClick (event) {
if (currentDd) {
dropdownHide(currentDd);
currentDd = false;
}
}
function escapeHTML (html) {
html = html || '';
return html.replace(/&/g, '&')
.replace(/>/g, '>')
.replace(/');
var lastLi = false;
var items = 0;
$('a.anchor').each(function (k, anchor) {
var parentTag = anchor.parentNode.tagName;
var matches = parentTag.match(/^h([34])$/i);
var anchorName = anchor.name;
if (!matches || !anchorName) {
return;
}
anchor.id = anchor.name;
var level = parseInt(matches[1]);
var li = $('' + escapeHTML(anchor.nextSibling.textContent) + '');
if (level == 3) {
li.appendTo(menu);
lastLi = li;
} else {
// console.log(lastLi);
if (!lastLi) {
return;
}
var subMenu = $('ul', lastLi)[0] || $('').appendTo(lastLi);
// console.log(subMenu);
li.appendTo(subMenu);
}
items++;
});
// console.log(items, menu);
// console.timeEnd('page nav');
if (items < 2) {
return false;
}
return menu;
}
function showTitleIfOverflows(element) {
if (element &&
element.innerText &&
element.scrollWidth &&
element.offsetWidth &&
element.offsetWidth < element.scrollWidth) {
element.setAttribute('title', element.innerText);
}
else if (element.removeAttribute) {
element.removeAttribute('title');
}
}
function initDevPageNav() {
window.hasDevPageNav = true;
var menu = getDevPageNav();
if (!menu) {
return;
}
var sideNavCont = $('#dev_side_nav_cont');
if (!sideNavCont.length) {
sideNavCont = $('#dev_page_content_wrap');
}
var sideNavWrap = $('').prependTo(sideNavCont);
var sideNav = $('').appendTo(sideNavWrap);
menu.appendTo(sideNav);
$('body').css({position: 'relative'}).scrollspy({ target: '.dev_side_nav' });
$('body').on('activate.bs.scrollspy', function () {
$('.dev_side_nav > ul').affix('checkPosition');
var active_el = $('.dev_side_nav li.active').get(-1);
if (active_el) {
if (active_el.scrollIntoViewIfNeeded) {
active_el.scrollIntoViewIfNeeded();
} else if (active_el.scrollIntoView) {
active_el.scrollIntoView(false);
}
}
});
$('body').trigger('activate.bs.scrollspy');
updateMenuAffix(menu);
}
function updateDevPageNav() {
if (!window.hasDevPageNav) {
return;
}
var menu = getDevPageNav() || $('');
$('.dev_side_nav > ul').replaceWith(menu);
$('body').scrollspy('refresh');
updateMenuAffix(menu);
}
function updateMenuAffix(menu) {
menu.affix({
offset: {
top: function () {
return $('.dev_side_nav_wrap').offset().top;
},
bottom: function () {
return (this.bottom = $('.footer_wrap').outerHeight(true) + 20)
}
}
})
}
function initScrollVideos(desktop) {
var videos = document.querySelectorAll
? document.querySelectorAll('video.tl_blog_vid_autoplay')
: [];
window.pageVideos = Array.prototype.slice.apply(videos);
if (!pageVideos.length) {
return;
}
window.pageVideosPlaying = {};
var index = 1;
for (var i = 0; i < pageVideos.length; i++) {
var videoEl = pageVideos[i];
videoEl.setAttribute('vindex', index++);
videoEl.setAttribute('preload', 'auto');
videoEl.preload = 'auto';
if (desktop) {
videoEl.removeAttribute('controls');
videoEl.autoplay = false;
videoEl.removeAttribute('autoplay');
} else {
videoEl.autoplay = true;
videoEl.playsinline = true;
videoEl.setAttribute('autoplay', 'autoplay');
videoEl.setAttribute('playsinline', 'playsinline');
}
}
if (!desktop) {
return;
}
window.addEventListener('scroll', checkScrollVideos, false);
window.addEventListener('resize', checkScrollVideos, false);
setTimeout(checkScrollVideos, 1000);
}
function checkScrollVideos() {
var w = window,
d = document,
e = d.documentElement,
g = d.getElementsByTagName('body')[0],
winWidth = w.innerWidth || e.clientWidth || g.clientWidth,
winHeight = w.innerHeight|| e.clientHeight|| g.clientHeight,
scrollTop = e.scrollTop || g.scrollTop || w.pageYOffset;
for (var i = 0; i < pageVideos.length; i++) {
var videoEl = pageVideos[i];
var curIndex = videoEl.getAttribute('vindex');
var posY = getFullOffsetY(videoEl);
var height = videoEl.offsetHeight;
// console.log(scrollTop, winHeight, posY, height);
if (isVisibleEnough(posY, height, scrollTop, winHeight, 0.7, 0.9)) {
if (!pageVideosPlaying[curIndex]) {
pageVideosPlaying[curIndex] = true;
console.log('play', videoEl);
videoEl.play();
}
} else {
if (pageVideosPlaying[curIndex]) {
delete pageVideosPlaying[curIndex];
console.log('pause', videoEl);
videoEl.pause();
}
}
}
}
function isVisibleEnough(boxOffset, boxSize, viewOffset, viewSize, boxThreshold, viewThreshold) {
var boxEnd = boxOffset + boxSize;
var viewEnd = viewOffset + viewSize;
var viewBox = Math.min(viewEnd, boxEnd) - Math.max(boxOffset, viewOffset);
if (viewBox < 0) {
return false;
}
if (viewBox / boxSize > boxThreshold) {
return true;
}
if (viewThreshold && viewBox / viewSize > viewThreshold) {
return true;
}
return false
}
function getFullOffsetY(el) {
var offsetTop = el.offsetTop || 0;
if (el.offsetParent) {
offsetTop += getFullOffsetY(el.offsetParent);
}
return offsetTop;
}
function redraw(el) {
el.offsetTop + 1;
}
function initRipple() {
if (!document.querySelectorAll) return;
var rippleTextFields = document.querySelectorAll('.textfield-item input.form-control');
for (var i = 0; i < rippleTextFields.length; i++) {
(function(rippleTextField) {
function onTextRippleStart(e) {
if (document.activeElement === rippleTextField) return;
var rect = rippleTextField.getBoundingClientRect();
if (e.type == 'touchstart') {
var clientX = e.targetTouches[0].clientX;
} else {
var clientX = e.clientX;
}
var ripple = rippleTextField.parentNode.querySelector('.textfield-item-underline');
var rippleX = (clientX - rect.left) / rippleTextField.offsetWidth * 100;
ripple.style.transition = 'none';
redraw(ripple);
ripple.style.left = rippleX + '%';
ripple.style.right = (100 - rippleX) + '%';
redraw(ripple);
ripple.style.left = '';
ripple.style.right = '';
ripple.style.transition = '';
}
rippleTextField.removeEventListener('mousedown', onTextRippleStart);
rippleTextField.removeEventListener('touchstart', onTextRippleStart);
rippleTextField.addEventListener('mousedown', onTextRippleStart);
rippleTextField.addEventListener('touchstart', onTextRippleStart);
})(rippleTextFields[i]);
}
var rippleHandlers = document.querySelectorAll('.ripple-handler');
for (var i = 0; i < rippleHandlers.length; i++) {
(function(rippleHandler) {
function onRippleStart(e) {
var rippleMask = rippleHandler.querySelector('.ripple-mask');
if (!rippleMask) return;
var rect = rippleMask.getBoundingClientRect();
if (e.type == 'touchstart') {
var clientX = e.targetTouches[0].clientX;
var clientY = e.targetTouches[0].clientY;
} else {
var clientX = e.clientX;
var clientY = e.clientY;
}
var rippleX = (clientX - rect.left) - rippleMask.offsetWidth / 2;
var rippleY = (clientY - rect.top) - rippleMask.offsetHeight / 2;
var ripple = rippleHandler.querySelector('.ripple');
ripple.style.transition = 'none';
redraw(ripple);
ripple.style.transform = 'translate3d(' + rippleX + 'px, ' + rippleY + 'px, 0) scale3d(0.2, 0.2, 1)';
ripple.style.opacity = 1;
redraw(ripple);
ripple.style.transform = 'translate3d(' + rippleX + 'px, ' + rippleY + 'px, 0) scale3d(1, 1, 1)';
ripple.style.transition = '';
function onRippleEnd(e) {
ripple.style.transitionDuration = '.2s';
ripple.style.opacity = 0;
document.removeEventListener('mouseup', onRippleEnd);
document.removeEventListener('touchend', onRippleEnd);
document.removeEventListener('touchcancel', onRippleEnd);
}
document.addEventListener('mouseup', onRippleEnd);
document.addEventListener('touchend', onRippleEnd);
document.addEventListener('touchcancel', onRippleEnd);
}
rippleHandler.removeEventListener('mousedown', onRippleStart);
rippleHandler.removeEventListener('touchstart', onRippleStart);
rippleHandler.addEventListener('mousedown', onRippleStart);
rippleHandler.addEventListener('touchstart', onRippleStart);
})(rippleHandlers[i]);
}
}