Merged skobkin/chrome_point_plus into master

This commit is contained in:
Никита Ветров 2014-11-26 23:33:13 +03:00
commit 6d8368be93
7 changed files with 139 additions and 119 deletions

View file

@ -13,6 +13,9 @@
"options_text_saved": { "options_text_saved": {
"message": "Reload page to apply changes." "message": "Reload page to apply changes."
}, },
"options_text_new_version": {
"message": "Point+ just updated.\nCheck your settings and try some new functions!"
},
"options_tabs_media": { "options_tabs_media": {

View file

@ -13,6 +13,9 @@
"options_text_saved": { "options_text_saved": {
"message": "Для применения изменений перезагрузите страницу." "message": "Для применения изменений перезагрузите страницу."
}, },
"options_text_new_version": {
"message": "Point+ только что обновился.\nПроверьте настройки и оцените новые функции!"
},
"options_tabs_media": { "options_tabs_media": {

View file

@ -213,14 +213,6 @@ div#markItUpText-input {
-webkit-filter: blur(30px); -webkit-filter: blur(30px);
} }
/* point-plus-debug */
.point-plus-debug{
float: right;
display: block;
color: rgba(255,255,255,.75);
padding: 10px 0px;
}
.post-tag-nsfw.hide-nsfw-posts, .post-tag-nsfw.hide-nsfw-posts,
.post-tag-сиськи.hide-nsfw-posts{ .post-tag-сиськи.hide-nsfw-posts{
display: none; display: none;
@ -237,11 +229,10 @@ div#markItUpText-input {
color: green; color: green;
} }
/* point-plus-debug */
#point-plus-debug{
float: right;
display: block;
color: rgba(255,255,255,.75);
padding: 10px 0px;
}

View file

@ -1,3 +1,13 @@
// Maintaining options version
chrome.storage.sync.get('options_version', function(data) {
var pp_version = getVersion();
console.info('Point+ %s. Options are for %s.', pp_version, data.options_version);
if (data.options_version != pp_version) {
chrome.tabs.create({url: 'options.html'});
}
});
// Message listener // Message listener
chrome.extension.onMessage.addListener(function(message, sender) { chrome.extension.onMessage.addListener(function(message, sender) {
console.log('Received message: %O', message); console.log('Received message: %O', message);
@ -70,3 +80,12 @@ chrome.extension.onMessage.addListener(function(message, sender) {
} }
} }
}); });
// Getting version from manifest.json
function getVersion() {
var xhr = new XMLHttpRequest();
xhr.open('GET', chrome.extension.getURL('manifest.json'), false);
xhr.send(null);
var manifest = JSON.parse(xhr.responseText);
return manifest.version;
}

View file

@ -1,37 +1,62 @@
var ppOptions = {}; var ppOptions = {};
// Initializing full options structure // Binding event listeners
// Saves options to localStorage. $(function() {
function pp_init_options() { pp_restore_options();
$('.option-node').find('input').each(function(idx, $input) {
console.log($(this));
// Using option types // Delegating events
if ($(this).hasClass('option-boolean')) { $('#tabs-content').on('click', 'input', function() {
ppOptions[$(this).prop('id').replace(/-/g, '_')] = { pp_save_options();
'type': 'boolean',
'value': $(this).prop('checked')
};
} else if ($(this).hasClass('option-enum')) {
if ($(this).prop('checked')) {
ppOptions[$(this).prop('name').replace(/-/g, '_')] = {
'type': 'enum',
'value': $(this).val()
}
}
}
}); });
});
console.log('Saving options: %O', ppOptions); // Initializing full options structure
function pp_init_options() {
var pp_version = getVersion();
// Saving parameters chrome.storage.sync.get('options_version', function(data) {
chrome.storage.sync.set({'options': ppOptions}, function() { console.info('Point+ %s, local options are for %s', pp_version, data.options_version);
console.log('Default options initialized');
// Checking last options version
if (data.options_version != getVersion()) {
console.log('Initializing options...');
$('.option-node').find('input').each(function(idx, $input) {
console.debug($(this));
// Using option types
if ($(this).hasClass('option-boolean')) {
ppOptions[$(this).prop('id').replace(/-/g, '_')] = {
type: 'boolean',
value: $(this).prop('checked')
};
} else if ($(this).hasClass('option-enum')) {
if ($(this).prop('checked')) {
ppOptions[$(this).prop('name').replace(/-/g, '_')] = {
type: 'enum',
value: $(this).val()
};
}
}
});
// Updating options
chrome.storage.sync.set({
options: ppOptions,
options_version: getVersion()
}, function() {
console.log('Default options initialized. Version upgraded to %s.', pp_version);
if (!confirm(chrome.i18n.getMessage('options_text_new_version'))) {
window.close();
}
});
}
}); });
} }
// Saves options to localStorage. // Saves options to sync storage.
// @todo: optimize it! // @todo: optimize it! (merge)
function pp_save_options() { function pp_save_options() {
$('.option-node').find('input').each(function(idx, $input) { $('.option-node').find('input').each(function(idx, $input) {
console.log($(this)); console.log($(this));
@ -39,15 +64,15 @@ function pp_save_options() {
// Using option types // Using option types
if ($(this).hasClass('option-boolean')) { if ($(this).hasClass('option-boolean')) {
ppOptions[$(this).prop('id').replace(/-/g, '_')] = { ppOptions[$(this).prop('id').replace(/-/g, '_')] = {
'type': 'boolean', type: 'boolean',
'value': $(this).prop('checked') value: $(this).prop('checked')
}; };
} else if ($(this).hasClass('option-enum')) { } else if ($(this).hasClass('option-enum')) {
if ($(this).prop('checked')) { if ($(this).prop('checked')) {
ppOptions[$(this).prop('name').replace(/-/g, '_')] = { ppOptions[$(this).prop('name').replace(/-/g, '_')] = {
'type': 'enum', type: 'enum',
'value': $(this).val() value: $(this).val()
} };
} }
} }
}); });
@ -55,7 +80,7 @@ function pp_save_options() {
console.log('Saving options: %O', ppOptions); console.log('Saving options: %O', ppOptions);
// Saving parameters // Saving parameters
chrome.storage.sync.set({'options': ppOptions}, function() { chrome.storage.sync.set({options: ppOptions}, function() {
// Update status to let user know options were saved. // Update status to let user know options were saved.
$('#status').html(chrome.i18n.getMessage('options_text_saved')); $('#status').html(chrome.i18n.getMessage('options_text_saved'));
}); });
@ -65,12 +90,12 @@ function pp_save_options() {
function pp_restore_options() { function pp_restore_options() {
// Cleaning old style options // Cleaning old style options
// Delete after some time // Delete after some time
chrome.storage.sync.get('option_fancybox', function(value) { chrome.storage.sync.get('option_fancybox', function(data) {
if (value === true || value === false) { if ((data.option_fancybox === true) || (data.option_fancybox === false)) {
console.log('Found old-style options. Cleaning...'); console.log('Found old-style options. Cleaning...');
chrome.storage.sync.get(null, function(old_options) { chrome.storage.sync.get(null, function(data) {
console.log('Old data: %O', old_options); console.log('Old data: %O', data);
for (option in old_options) { for (option in data) {
chrome.storage.sync.remove(option); chrome.storage.sync.remove(option);
} }
console.log('All old data removed'); console.log('All old data removed');
@ -78,56 +103,43 @@ function pp_restore_options() {
} }
}); });
// Loading options // Loading options
chrome.storage.sync.get('options', function(options) { chrome.storage.sync.get('options', function(options) {
// Initializing clean options
// @todo: rewrite for all options
if (options.option_embedding === undefined) {
console.warn('Clean options detected. Initializing...');
pp_init_options();
}
// Setting options in DOM try {
$.each(options.options, function(key, data) { // Setting options in DOM
switch (data.type) { $.each(options.options, function(key, data) {
case 'boolean': switch (data.type) {
if (data.value) { case 'boolean':
$('#' + key.replace(/_/g, '-')).prop('checked', true); if (data.value) {
$('#' + key.replace(/_/g, '-')).prop('checked', true);
}
break;
case 'enum':
$('.option-node .option-enum[name="' + key.replace(/_/g, '-') + '"][value="' + data.value + '"]').prop('checked', true);
break;
default:
console.warn('Invalid option "%s" type: %O', key, data);
break;
} }
break; });
} catch (ex) {
case 'enum': console.error('Error while loading extension options: %O', ex);
$('.option-node .option-enum[name="' + key.replace(/_/g, '-') + '"][value="' + data.value + '"]').prop('checked', true);
break;
default:
console.warn('Invalid option "%s" type: %O', key, data);
break;
} }
});
// Showing version // Showing version
$('#pp-version').html('Point+ ' + getVersion() $('#pp-version').html('Point+ ' + getVersion()
+ ' by <a href="https://skobkin-ru.point.im/" target="_blank">@skobkin-ru</a><br>\n\ + ' by <a href="https://skobkin-ru.point.im/" target="_blank">@skobkin-ru</a><br>\n\
& <a href="https://nokitakaze.point.im/" target="_blank">@NokitaKaze</a>' & <a href="https://nokitakaze.point.im/" target="_blank">@NokitaKaze</a>'
); );
// Initializing new options
pp_init_options();
}); });
} }
document.addEventListener('DOMContentLoaded', pp_restore_options);
var point_plus_options_save_button = document.querySelector('#save');
if (point_plus_options_save_button !== null) {
point_plus_options_save_button.addEventListener('click', pp_save_options);
}
// Binding event listeners
$(function() {
// Delegating events
$('#tabs-content').on('click', 'input', function() {
pp_save_options();
});
});
// Getting version from manifest.json // Getting version from manifest.json
function getVersion() { function getVersion() {

View file

@ -1,34 +1,31 @@
// Showing page action
chrome.extension.sendMessage({
type: 'showPageAction'
});
$(document).ready(function() { $(document).ready(function() {
// Grouping console log // Grouping console log
console.group('point-plus'); console.group('point-plus');
console.info('Point+ %s', getVersion()); console.info('Point+ %s', getVersion());
// Проверяем, загрузились ли мы // Проверяем, загрузились ли мы
// @todo: Убрать это говно и нормально пилить расширение не принося пользователям костыли var point_plus_debug = $('#point-plus-debug');
// Хочешь детект? Делай невидимый элемент где-нибудь в подвале. И айдишник, а не класс. Их искать быстрее. if (point_plus_debug.length > 0) {
// Хочешь показать пользователю обработку - делай индикатор и встраивай в интерфейс сайта. console.error('Point+ %s already loaded.', point_plus_debug.data('point-plus-version'));
var point_plus_debug = $('.point-plus-debug');
if (point_plus_debug.length > 0){
console.info('Point+ already loaded, version: %s', point_plus_debug.attr('data-point-plus-version'));
return; return;
} }
point_plus_debug = null; $('<div id="point-plus-debug">').attr({
var new_div = document.createElement('div');
$(new_div).attr({
'data-point-plus-version': getVersion() 'data-point-plus-version': getVersion()
}).addClass('point-plus-debug').text('Point+ v' + getVersion() + ' loading...'); }).text('Point+ ' + getVersion() + ' loading...')
var obj = $('#user-menu-cb')[0]; .insertBefore('#user-menu-cb');
obj.parentElement.insertBefore(new_div, obj);
new_div = null;
obj = null;
// Черновики. Ставим хандлер и восстанавливаем предыдущее состояние // Черновики. Ставим хандлер и восстанавливаем предыдущее состояние
draft_set_save_handler(); draft_set_save_handler();
draft_restore(); draft_restore();
// Loading options // Loading options
chrome.storage.sync.get('options', function(options_data) { chrome.storage.sync.get('options', function(sync_data) {
var options = options_data.options; var options = sync_data.options;
// Options debug // Options debug
console.debug('Options loaded: %O', options); console.debug('Options loaded: %O', options);
@ -524,12 +521,7 @@ $(document).ready(function() {
set_space_key_skip_handler(); set_space_key_skip_handler();
} }
$('.point-plus-debug').fadeOut(500); $('#point-plus-debug').fadeOut(1000);
});
// Showing page action
chrome.extension.sendMessage({
type: 'showPageAction'
}); });
}); });

View file

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