NewsBlur/clients/ios/static/storyDetailView.js

229 lines
7.9 KiB
JavaScript

var loadImages = function() {
$('.NB-story img, .NB-story video').each(function () {
if ($(this).closest('.NB-twitter-rss-author,.NB-twitter-rss-retweet').length) return;
setImage(this);
});
$('.NB-story img, .NB-story video').bind('load', function () {
if ($(this).closest('.NB-twitter-rss-author,.NB-twitter-rss-retweet').length) return;
setImage(this);
});
};
var fitVideos = function() {
$(".NB-story").fitVids({
customSelector: "iframe[src*='youtu.be'],iframe[src*='flickr.com'],iframe[src*='vimeo.com']"
});
};
var linkAt = function(x, y, attribute) {
var el = document.elementFromPoint(x, y);
return el && el[attribute];
};
$('a.NB-show-profile').live('click', function () {
var offset = $('img', this).offset();
console.log(offset);
var url = $(this).attr('href') + "/" + offset.left + "/" + (offset.top - window.pageYOffset) + "/" + offset.width + "/" + offset.height;
window.location = url;
return false;
});
$('.NB-train-button a').live('click', function () {
var offset = $(this).offset();
console.log(offset);
var url = $(this).attr('href') + "/" + offset.left + "/" + (offset.top - window.pageYOffset) + "/" + offset.width + "/" + offset.height;
window.location = url;
return false;
});
$('.NB-user-tag').live('click', function () {
var offset = $(this).offset();
console.log(['Offset', offset]);
var url = $(this).attr('href') + "/" + offset.left + "/" + (offset.top - window.pageYOffset) + "/" + offset.width + "/" + offset.height;
window.location = url;
return false;
});
$('.NB-save-button').live('click', function () {
var offset = $('a', this).offset();
console.log(['Offset', offset]);
var url = $('a', this).attr('href') + "/" + offset.left + "/" + (offset.top - window.pageYOffset) + "/" + offset.width + "/" + offset.height;
window.location = url;
return false;
});
$('.NB-button').live('touchstart', function () {
$(this).addClass('active');
});
$('.NB-button').live('touchend', function (e) {
$(this).removeClass('active');
});
function setImage(img) {
var $img = $(img);
var width = $(img).width();
var height = $(img).height();
// console.log("img load", img.src, width, height);
if ($img.prop('tagName') == 'VIDEO') {
$img.attr('class', 'NB-large-image');
} else if ($img.attr('src').indexOf('feedburner') != - 1) {
$img.attr('class', 'NB-feedburner');
} else if (width >= (320-24) && height >= 50) {
$img.attr('class', 'NB-large-image');
if ($img.parent().attr('href')) {
$img.parent().addClass('NB-contains-image')
}
} else if (width > 30 && height > 30) {
$img.attr('class', 'NB-medium-image');
if ($img.parent().attr('href')) {
$img.parent().addClass('NB-contains-image')
}
} else {
$img.attr('class', 'NB-small-image');
}
}
function slideToComment(commentId, highlight) {
setTimeout(function(){
var commentString = 'NB-user-comment-' + commentId;
var shareString = 'NB-user-share-bar-' + commentId;
//Get comment
var $comment = $('#' + commentString);
if ($comment.length) {
$.scroll($comment.offset().top - 32, 1000, 'ease-in-out');
} else {
var $shareBar = $('#' + shareString);
if ($shareBar.length) {
$.scroll($shareBar.offset().top - 32, 1000, 'ease-in-out');
} else {
var $shareButton =$("#NB-share-button-id");
$.scroll($shareButton.offset().top - 32, 1000, 'ease-in-out');
}
}
if (highlight) {
if ($comment.length) {
setTimeout(function(){
$comment.addClass('NB-highlighted');
setTimeout(function(){
$comment.removeClass('NB-highlighted');
}, 2000);
}, 1000);
} else if ($shareBar.length) {
setTimeout(function(){
$(".NB-story-comments-shares-teaser").addClass('NB-highlighted');
setTimeout(function(){
$(".NB-story-comments-shares-teaser").removeClass('NB-highlighted');
}, 2000);
}, 1000);
}
}
}, 500);
}
function findPos(obj) {
var curtop = 0;
if (obj.offsetParent) {
do {
curtop += obj.offsetTop;
} while (obj = obj.offsetParent);
return [curtop];
}
}
function NoClickDelay(el) {
this.element = typeof el == 'object' ? el : document.getElementById(el);
if( window.Touch ) {
this.element.removeEventListener('touchstart', this.element.notouch, false);
this.element.notouch = this;
this.element.addEventListener('touchstart', this.element.notouch, false);
}
}
NoClickDelay.prototype = {
handleEvent: function(e) {
switch(e.type) {
case 'touchstart': this.onTouchStart(e); break;
case 'touchmove': this.onTouchMove(e); break;
case 'touchend': this.onTouchEnd(e); break;
}
},
onTouchStart: function(e) {
e.preventDefault();
this.moved = false;
this.x = e.targetTouches[0].clientX;
this.y = e.targetTouches[0].clientY;
this.theTarget = document.elementFromPoint(e.targetTouches[0].clientX, e.targetTouches[0].clientY);
this.theTarget = $(this.theTarget).closest('a').get(0);
// if(this.theTarget.nodeType == 3) this.theTarget = theTarget.parentNode;
this.theTarget.className+= ' pressed';
this.element.addEventListener('touchmove', this, false);
this.element.addEventListener('touchend', this, false);
},
onTouchMove: function(e) {
var x = e.targetTouches[0].clientX;
var y = e.targetTouches[0].clientY;
if( Math.sqrt(Math.pow(x-this.x,2)+Math.pow(y-this.y,2))>50){
this.moved = true;
this.theTarget.className = this.theTarget.className.replace(/ ?pressed/gi, '');
this.theTarget.className = this.theTarget.className.replace(/ ?active/gi, '');
} else {
if(this.moved==true){
this.moved=false;
this.theTarget.className+= ' pressed';
}
}
},
onTouchEnd: function(e) {
this.element.removeEventListener('touchmove', this, false);
this.element.removeEventListener('touchend', this, false);
if( !this.moved && this.theTarget ) {
this.theTarget.className = this.theTarget.className.replace(/ ?pressed/gi, '');
this.theTarget.className+= ' active';
var theEvent = document.createEvent('MouseEvents');
theEvent.initEvent('click', true, true);
this.theTarget.dispatchEvent(theEvent);
}
this.theTarget = undefined;
}
};
function attachFastClick() {
var avatars = document.getElementsByClassName("NB-show-profile");
Array.prototype.slice.call(avatars, 0).forEach(function(avatar) {
new NoClickDelay(avatar);
});
var tags = document.getElementsByClassName("NB-story-tag");
Array.prototype.slice.call(tags, 0).forEach(function(tag) {
new NoClickDelay(tag);
});
var userTags = document.getElementsByClassName("NB-user-tag");
Array.prototype.slice.call(userTags, 0).forEach(function(tag) {
new NoClickDelay(tag);
});
var author = document.getElementById("NB-story-author");
if (author) {
new NoClickDelay(author);
}
}
function notifyLoaded() {
var url = "http://ios.newsblur.com/notify-loaded";
window.location = url;
}
loadImages();
fitVideos();
Zepto(function($) {
attachFastClick();
if (!window.sampleText) {
notifyLoaded();
}
});