+ Твиты из твиттера

This commit is contained in:
Nokita Kaze 2015-01-05 19:17:00 +03:00
parent 98367c52c0
commit 993a446a5c
5 changed files with 92 additions and 1 deletions

View file

@ -89,6 +89,9 @@
"option_embedding_coubcom": {
"message": "Coub.com ▼"
},
"option_embedding_twitter_tweets": {
"message": "Embedding tweets from Twitter"
},
"option_nsfw": {
"message": "NSFW content filtering"
},

View file

@ -89,6 +89,9 @@
"option_embedding_coubcom": {
"message": "Coub.com ▼"
},
"option_embedding_twitter_tweets": {
"message": "Встраиваем твиты из Твиттера"
},
"option_nsfw": {
"message": "Фильтрация NSFW-контента"
},

View file

@ -512,6 +512,11 @@ $(document).ready(function() {
set_comments_refresh_tick(options);
}
// Твиты из Твиттера
if (options.option_embedding_twitter_tweets.value == true){
twitter_tweet_embedding_init();
}
$('#point-plus-debug').fadeOut(1000);
});
});
@ -1327,3 +1332,79 @@ function comments_count_refresh_tick(current_options) {
'height': '300px'
}).hide();
}
/**
* Встраиваем твиты из Твиттера
*/
function twitter_tweet_embedding_init() {
// Чёрная магия. Выбираемся из манямирка, прихватив с собой пару сраных функций
// https://developer.chrome.com/extensions/content_scripts Isolated World
var e = document.createElement("script");
e.appendChild(document.createTextNode(twitter_tweet_embedding_wait_for_ready_injected.toString() +
twitter_tweet_embedding_parse_links.toString() + 'twitter_tweet_embedding_wait_for_ready_injected();'));
document.head.appendChild(e);
// Встраиваем скрипт так, как описано в best twitter practice https://dev.twitter.com/web/javascript/loading
window.twttr = (function(d, s, id) {
var t, js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s);
js.id = id;
js.src = "https://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
return window.twttr || (t = {
_e: [], ready: function(f) {
t._e.push(f);
}
});
}(document, "script", "twitter-wjs"));
}
/**
* Проверяем загрузились ли мы. Эта функция запускается из page scope
*/
function twitter_tweet_embedding_wait_for_ready_injected() {
if (typeof(window.twttr) == 'undefined') {
setTimeout(twitter_tweet_embedding_wait_for_ready_injected, 100);
return;
}
if (typeof(window.twttr.widgets) == 'undefined') {
setTimeout(twitter_tweet_embedding_wait_for_ready_injected, 100);
return;
}
twitter_tweet_embedding_parse_links();
}
/**
* Парсим все ссылки. Эта функция запускается из page scope
*/
function twitter_tweet_embedding_parse_links() {
// Обрабатываем все твиты
var twitter_tweet_count = 0;
$('.post-content a').each(function(num, obj) {
if ($(obj).hasClass('booru_pic')) {
return;
}
var href = obj.href;
var n;
if (n = href.match(new RegExp('^https?://(www\\.)?twitter\\.com/[^/]+/status/([0-9]+)', 'i'))) {
var image = document.createElement('div');
$(image).attr({
'id': 'tweet-' + twitter_tweet_count,
'data-tweet-id': n[2]
}).addClass('twitter-tweet-embedded');
obj.parentElement.insertBefore(image, obj);
window.twttr.widgets.createTweet(
n[2],
image,
{
theme: 'dark'
}
);
twitter_tweet_count++;
}
});
}

View file

@ -1,7 +1,7 @@
{
"manifest_version": 2,
"name": "Point+",
"version": "1.18.7",
"version": "1.18.8",
"default_locale": "ru",
"author": "__MSG_ext_author__",
"homepage_url": "https://bitbucket.org/skobkin/chrome_point_plus",

View file

@ -101,6 +101,10 @@
<input type="checkbox" class="option-boolean" id="option-embedding-coubcom-orig-link"><label for="option-embedding-coubcom-orig-link" data-i18n="option_embedding_soundcloud_orig_link"></label>
</div>
</div>
<div class="option-node">
<input type="checkbox" class="option-boolean" id="option-embedding-twitter-tweets"><label for="option-embedding-twitter-tweets" data-i18n="option_embedding_twitter_tweets"></label>
</div>
</div>
<div class="option-node">