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

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": { "option_embedding_coubcom": {
"message": "Coub.com ▼" "message": "Coub.com ▼"
}, },
"option_embedding_twitter_tweets": {
"message": "Embedding tweets from Twitter"
},
"option_nsfw": { "option_nsfw": {
"message": "NSFW content filtering" "message": "NSFW content filtering"
}, },

View file

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

View file

@ -512,6 +512,11 @@ $(document).ready(function() {
set_comments_refresh_tick(options); set_comments_refresh_tick(options);
} }
// Твиты из Твиттера
if (options.option_embedding_twitter_tweets.value == true){
twitter_tweet_embedding_init();
}
$('#point-plus-debug').fadeOut(1000); $('#point-plus-debug').fadeOut(1000);
}); });
}); });
@ -1327,3 +1332,79 @@ function comments_count_refresh_tick(current_options) {
'height': '300px' 'height': '300px'
}).hide(); }).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, "manifest_version": 2,
"name": "Point+", "name": "Point+",
"version": "1.18.7", "version": "1.18.8",
"default_locale": "ru", "default_locale": "ru",
"author": "__MSG_ext_author__", "author": "__MSG_ext_author__",
"homepage_url": "https://bitbucket.org/skobkin/chrome_point_plus", "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> <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> </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>
<div class="option-node"> <div class="option-node">