Merged in isqua/chrome_point_plus/iss74 (pull request #35) String option type; Fixes #74

This commit is contained in:
Alexey Skobkin 2015-01-31 14:41:04 +03:00
commit 068c461070

View file

@ -4,7 +4,7 @@
* При создании сохраняет версию, восстанавливает настройки, слушает изменения на инпутах. * При создании сохраняет версию, восстанавливает настройки, слушает изменения на инпутах.
* @constructor * @constructor
*/ */
function Options() { function OptionsPage() {
this.form = document.querySelector('form'); this.form = document.querySelector('form');
this.listenTabs(); this.listenTabs();
@ -25,7 +25,7 @@ function Options() {
* Получает версию настроек. Если она не равна версии приложения, записывает в сторедж плагина настройки из инпутов * Получает версию настроек. Если она не равна версии приложения, записывает в сторедж плагина настройки из инпутов
* и версию приложения. * и версию приложения.
*/ */
Options.prototype.updateOptionsFromFrom = function() { OptionsPage.prototype.updateOptionsFromFrom = function() {
chrome.storage.sync.get('options_version', function(data) { chrome.storage.sync.get('options_version', function(data) {
this.logVersion(data.options_version); this.logVersion(data.options_version);
@ -51,7 +51,7 @@ Options.prototype.updateOptionsFromFrom = function() {
/** /**
* Сохраняет настройки * Сохраняет настройки
*/ */
Options.prototype.save = function() { OptionsPage.prototype.save = function() {
var ppOptions = this.getValues(); var ppOptions = this.getValues();
console.log('Saving options: %O', ppOptions); console.log('Saving options: %O', ppOptions);
@ -62,7 +62,7 @@ Options.prototype.save = function() {
/** /**
* Получает настройки из стореджа плагина, устанавливает соответствующим инпутам соответствующие значения. * Получает настройки из стореджа плагина, устанавливает соответствующим инпутам соответствующие значения.
*/ */
Options.prototype.restore = function() { OptionsPage.prototype.restore = function() {
this.checkOldStyle(); this.checkOldStyle();
chrome.storage.sync.get('options', function(data) { chrome.storage.sync.get('options', function(data) {
@ -80,6 +80,7 @@ Options.prototype.restore = function() {
break; break;
case 'enum': case 'enum':
case 'plain':
input.value = data.value; input.value = data.value;
break; break;
@ -97,19 +98,19 @@ Options.prototype.restore = function() {
/** /**
* @returns {Object} Хеш настроек вида { имяастроки: значениеастройки } * @returns {Object} Хеш настроек вида { имяастроки: значениеастройки }
*/ */
Options.prototype.getValues = function() { OptionsPage.prototype.getValues = function() {
return this._options; return this._options;
}; };
/** /**
* @param {Event} event Событие изменения * @param {Event} event Событие изменения
*/ */
Options.prototype._onChange = function(event) { OptionsPage.prototype._onChange = function(event) {
this.updateOptionFromInput(event.target); this.updateOptionFromInput(event.target);
this.save(); this.save();
}; };
Options.prototype.updateOptionFromInput = function(input) { OptionsPage.prototype.updateOptionFromInput = function(input) {
var key = this.getOptionKey(input.name); var key = this.getOptionKey(input.name);
if (this.isBoolean(input)) { if (this.isBoolean(input)) {
@ -122,6 +123,11 @@ Options.prototype.updateOptionFromInput = function(input) {
type: 'enum', type: 'enum',
value: input.value value: input.value
}; };
} else {
this._options[key] = {
type: 'plain',
value: input.value
}
} }
}; };
@ -129,7 +135,7 @@ Options.prototype.updateOptionFromInput = function(input) {
* @param {HTMLElement} option Элемент опции * @param {HTMLElement} option Элемент опции
* @returns {Boolean} Является ли настройка булевой * @returns {Boolean} Является ли настройка булевой
*/ */
Options.prototype.isBoolean = function(option) { OptionsPage.prototype.isBoolean = function(option) {
return option.getAttribute('type') === 'checkbox'; return option.getAttribute('type') === 'checkbox';
}; };
@ -138,7 +144,7 @@ Options.prototype.isBoolean = function(option) {
* @param {HTMLElement} option Элемент опции * @param {HTMLElement} option Элемент опции
* @returns {Boolean} Является ли настройка енумом * @returns {Boolean} Является ли настройка енумом
*/ */
Options.prototype.isEnum = function(option) { OptionsPage.prototype.isEnum = function(option) {
return option.getAttribute('type') === 'radio'; return option.getAttribute('type') === 'radio';
}; };
@ -146,7 +152,7 @@ Options.prototype.isEnum = function(option) {
* @param {String} name Имя инпута * @param {String} name Имя инпута
* @returns {String} Ключ для хеша настроек * @returns {String} Ключ для хеша настроек
*/ */
Options.prototype.getOptionKey = function(name) { OptionsPage.prototype.getOptionKey = function(name) {
return name.replace(/-/g, '_'); return name.replace(/-/g, '_');
}; };
@ -154,7 +160,7 @@ Options.prototype.getOptionKey = function(name) {
* @param {String} Ключ хеша настроек * @param {String} Ключ хеша настроек
* @returns {String} Имя инпута * @returns {String} Имя инпута
*/ */
Options.prototype.getOptionName = function(key) { OptionsPage.prototype.getOptionName = function(key) {
return key.replace(/_/g, '-'); return key.replace(/_/g, '-');
}; };
@ -162,21 +168,21 @@ Options.prototype.getOptionName = function(key) {
* Выводит в консоль версию настроек и версию плагина * Выводит в консоль версию настроек и версию плагина
* @param {String} optionsVersion * @param {String} optionsVersion
*/ */
Options.prototype.logVersion = function(optionsVersion) { OptionsPage.prototype.logVersion = function(optionsVersion) {
console.info('Point+ %s, local options are for %s', this.version, optionsVersion); console.info('Point+ %s, local options are for %s', this.version, optionsVersion);
}; };
/** /**
* Добавляет номер версии в подвал * Добавляет номер версии в подвал
*/ */
Options.prototype.showVersion = function() { OptionsPage.prototype.showVersion = function() {
document.querySelector('#version').innerHTML = this.version; document.querySelector('#version').innerHTML = this.version;
}; };
/** /**
* Проверяет, не старого ли формата настройки. И если старого, то удаляет их. * Проверяет, не старого ли формата настройки. И если старого, то удаляет их.
*/ */
Options.prototype.checkOldStyle = function() { OptionsPage.prototype.checkOldStyle = function() {
chrome.storage.sync.get('option_fancybox', function(data) { chrome.storage.sync.get('option_fancybox', function(data) {
if ((data.option_fancybox === true) || (data.option_fancybox === false)) { if ((data.option_fancybox === true) || (data.option_fancybox === false)) {
console.log('Found old-style options. Cleaning...'); console.log('Found old-style options. Cleaning...');
@ -198,7 +204,7 @@ Options.prototype.checkOldStyle = function() {
/** /**
* Показывает плашку про то, что настройки сохранились и надо обновить страницу * Показывает плашку про то, что настройки сохранились и надо обновить страницу
*/ */
Options.prototype.updateStatus = function() { OptionsPage.prototype.updateStatus = function() {
this.status = this.status || document.querySelector('.saved'); this.status = this.status || document.querySelector('.saved');
this.status.classList.remove('hidden'); this.status.classList.remove('hidden');
@ -207,7 +213,7 @@ Options.prototype.updateStatus = function() {
/** /**
* Слушает события на табах * Слушает события на табах
*/ */
Options.prototype.listenTabs = function() { OptionsPage.prototype.listenTabs = function() {
var options = this; var options = this;
options._selectedItem = document.querySelector('.tabs-item.selected'); options._selectedItem = document.querySelector('.tabs-item.selected');
@ -229,4 +235,4 @@ Options.prototype.listenTabs = function() {
}); });
}; };
new Options(); new OptionsPage();