Clickable notifications (#38)

This commit is contained in:
Alexey Skobkin 2014-11-24 18:57:34 +04:00
parent d749c1e2c5
commit 8f5a6d7185
3 changed files with 44 additions and 9 deletions

View File

@ -10,16 +10,38 @@ chrome.extension.onMessage.addListener(function(message, sender) {
break; break;
case 'showNotification': case 'showNotification':
console.log(chrome.notifications.create( chrome.notifications.create(
message.notificationId, { message.notificationId, {
type: 'basic', type: 'basic',
iconUrl: message.avatarUrl, iconUrl: message.avatarUrl,
title: message.title, title: message.title,
message: message.text, message: message.text,
priority: 0 priority: 0,
isClickable: true
}, },
function() { /* Error checking goes here */} function() { /* Error checking goes here */}
)); );
console.log('Showing notification %s', message.notificationId);
break;
case 'listenNotificationClicks':
// Adding notification click event listener
chrome.notifications.onClicked.addListener(function(notificationId) {
// Detecting notification type
if (notificationId.indexOf('comment_') === 0) {
tab_url = message.protocol + '//' + 'point.im/' + notificationId.replace(/comment_/g, '');
} else if (notificationId.indexOf('post_') === 0) {
tab_url = message.protocol + '//' + 'point.im/' + notificationId.replace(/post_/g, '');
}
console.log('Notification %s clicked! Opening new tab: %s', notificationId, tab_url);
if (tab_url !== undefined) {
chrome.tabs.create({
url: tab_url
});
}
});
break; break;
case 'injectJSFile': case 'injectJSFile':

View File

@ -281,6 +281,13 @@ $(document).ready(function() {
// SSL or plain // SSL or plain
ws = new WebSocket(((location.protocol == 'https:') ? 'wss' : 'ws') + '://point.im/ws'); ws = new WebSocket(((location.protocol == 'https:') ? 'wss' : 'ws') + '://point.im/ws');
console.log('WebSocket created: %O', ws); console.log('WebSocket created: %O', ws);
// @todo: унести в опцию
// Adding event listener for notification click
chrome.extension.sendMessage({
type: 'listenNotificationClicks',
protocol: getProtocol()
});
// Detecting post id if presented // Detecting post id if presented
var postId = $('#top-post').attr('data-id'); var postId = $('#top-post').attr('data-id');
@ -341,6 +348,7 @@ $(document).ready(function() {
'data-to-comment-id': (wsMessage.to_comment_id != null) ? wsMessage.to_comment_id : '' 'data-to-comment-id': (wsMessage.to_comment_id != null) ? wsMessage.to_comment_id : ''
}); });
// @todo: Вынести в отдельную функцию
// Loading HTML template // Loading HTML template
$commentTemplate.load(chrome.extension.getURL('includes/comment.html'), function() { $commentTemplate.load(chrome.extension.getURL('includes/comment.html'), function() {
// Load complete // Load complete
@ -348,7 +356,8 @@ $(document).ready(function() {
// Date and time of comment // Date and time of comment
var date = new Date(); var date = new Date();
// @todo: унести наверх
// Data for template // Data for template
var userLink = '//' + wsMessage.author + '.point.im/'; var userLink = '//' + wsMessage.author + '.point.im/';
var postAuthorLink = $('#top-post .info a').attr('href'); var postAuthorLink = $('#top-post .info a').attr('href');
@ -356,7 +365,7 @@ $(document).ready(function() {
var userAvatar = '//point.im/avatar/' + wsMessage.author; var userAvatar = '//point.im/avatar/' + wsMessage.author;
var commentLink = '//point.im/' + wsMessage.post_id + '#' + wsMessage.comment_id; var commentLink = '//point.im/' + wsMessage.post_id + '#' + wsMessage.comment_id;
var csRfToken = $('.reply-form input[name="csrf_token"').val(); var csRfToken = $('.reply-form input[name="csrf_token"').val();
// Filling template // Filling template
console.info('Changing data in the comment element'); console.info('Changing data in the comment element');
// Date and time // Date and time
@ -433,9 +442,9 @@ $(document).ready(function() {
console.log('Showing desktop notification'); console.log('Showing desktop notification');
chrome.extension.sendMessage({ chrome.extension.sendMessage({
type: 'showNotification', type: 'showNotification',
notificationId: wsMessage.post_id + '_' + wsMessage.comment_id, notificationId: 'comment_' + wsMessage.post_id + '#' + wsMessage.comment_id,
avatarUrl: ((location.protocol == 'http:') ? 'http:' : 'https:') + userAvatar + '/80', avatarUrl: getProtocol() + userAvatar + '/80',
title: '@' + wsMessage.author + ' → #' + wsMessage.post_id + '(/' + wsMessage.comment_id + ')', title: '@' + wsMessage.author + ' #' + wsMessage.post_id + '(/' + wsMessage.comment_id + ')',
text: wsMessage.text text: wsMessage.text
}); });
} }
@ -518,6 +527,10 @@ $(document).ready(function() {
}); });
}); });
function getProtocol() {
return ((location.protocol == 'http:') ? 'http:' : 'https:')
}
function escapeHtml(text) { function escapeHtml(text) {
return text return text
.replace(/&/g, "&") .replace(/&/g, "&")

View File

@ -1,7 +1,7 @@
{ {
"manifest_version": 2, "manifest_version": 2,
"name": "Point+", "name": "Point+",
"version": "1.15.1", "version": "1.17.0",
"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",