Post draft saving with option and some optimization.

This commit is contained in:
Alexey Skobkin 2015-01-27 03:55:15 +03:00
parent 429c432dc5
commit 684f6c15fe
4 changed files with 108 additions and 25 deletions

View file

@ -178,10 +178,13 @@
"message": "Your hints about users" "message": "Your hints about users"
}, },
"option_other_comments_count_refresh":{ "option_other_comments_count_refresh":{
"message": "Refresh unread posts and comments count in left menu" "message": "Refresh unread posts and comments count in the sidebar"
}, },
"option_other_comments_count_refresh_title":{ "option_other_comments_count_refresh_title":{
"message": "Show counts in the title of tabs" "message": "Page title"
},
"option_other_post_draft_save":{
"message": "Save post drafts"
}, },
"options_feedback_text": { "options_feedback_text": {
@ -191,5 +194,8 @@
"msg_comment_send_failed":{ "msg_comment_send_failed":{
"message": "Comment send error:" "message": "Comment send error:"
},
"msg_saving_post_draft":{
"message": "Saving the post..."
} }
} }

View file

@ -178,10 +178,13 @@
"message": "Заметки о пользователях на полях" "message": "Заметки о пользователях на полях"
}, },
"option_other_comments_count_refresh":{ "option_other_comments_count_refresh":{
"message": "Обновляем количество непрочитанных комментариев и постов в ленте" "message": "Обновление количества непрочитанных постов и комментариев в сайдбаре"
}, },
"option_other_comments_count_refresh_title":{ "option_other_comments_count_refresh_title":{
"message": "Указываем кол-во комментариев и сообщений в заголовке страницы" "message": "В заголовке страницы"
},
"option_other_post_draft_save":{
"message": "Сохранение черновика поста"
}, },
@ -192,5 +195,8 @@
"msg_comment_send_failed":{ "msg_comment_send_failed":{
"message": "Ошибка отправки комментария:" "message": "Ошибка отправки комментария:"
},
"msg_saving_post_draft":{
"message": "Сохранение поста..."
} }
} }

View file

@ -33,11 +33,6 @@ function PointPlus(ppVersion) {
}).text('Point+ ' + ppVersion + ' loading...') }).text('Point+ ' + ppVersion + ' loading...')
.insertBefore('#user-menu-cb'); .insertBefore('#user-menu-cb');
// Черновики. Ставим хандлер и восстанавливаем предыдущее состояние
draft_set_save_handler();
draft_restore();
// Loading options // Loading options
chrome.storage.sync.get('options', function(sync_data) { chrome.storage.sync.get('options', function(sync_data) {
var options = new OptionsManager(sync_data.options); var options = new OptionsManager(sync_data.options);
@ -617,6 +612,12 @@ function PointPlus(ppVersion) {
twitter_tweet_embedding_init(); twitter_tweet_embedding_init();
} }
// Post drafts
if (options.is('option_other_post_draft_save')) {
draft_set_save_handler();
draft_restore();
}
$('#point-plus-debug').fadeOut(1000); $('#point-plus-debug').fadeOut(1000);
}); });
} }
@ -1104,50 +1105,115 @@ function space_key_event() {
} }
} }
/* Автосохранение черновиков */ /**
var draft_last_text = ''; // Последний зафиксированный текст * Last draft text
// Восстанавливаем черновик * @type {string}
*/
var draft_last_text = '';
/**
* Last draft tags
* @type {string}
*/
var draft_last_tags = '';
/**
* Is extension now saving draft
* @type {boolean}
*/
var draft_save_busy = false;
/**
* Last draft saving time
* @type {Date|null}
*/
var draft_save_last_time = null;
/**
* Is draft now saving or not
* @type {boolean}
*/
var draft_save_busy = false;
/**
* Is there any setTimeout'ed handlers
* @type {boolean}
*/
var draft_waiting = false;
/**
* Restore draft from localStorage
*/
function draft_restore() { function draft_restore() {
chrome.storage.local.get('point_draft_text', function(items) { chrome.storage.local.get(['point_draft_text', 'point_draft_tags'], function(items) {
if ($('#new-post-form #text-input').val() == '') { if ($('#new-post-form #text-input').val() === '') {
$('#new-post-form #text-input').val(items.point_draft_text); $('#new-post-form #text-input').val(items.point_draft_text);
draft_last_text = items.point_draft_text; draft_last_text = items.point_draft_text;
} }
if ($('#new-post-form #tags-input').val() === '') {
$('#new-post-form #tags-input').val(items.point_draft_tags);
draft_last_tags = items.point_draft_tags;
}
}); });
} }
// Установка хандлера /**
* Set draft save handler
*/
function draft_set_save_handler() { function draft_set_save_handler() {
// Господи, прости меня грешного за эту строку. Меня вынудили $('#text-input, #tags-input').on('keyup', function() {
$('#text-input').on('keyup', function(){
draft_save_check(); draft_save_check();
// For last keyup
if (!draft_waiting) {
setTimeout(draft_save_check, 3000);
draft_waiting = true;
}
}); });
// Adding span indicator
$('#new-post-wrap .footnote').append($('<span id="draft-save-status">')); $('#new-post-wrap .footnote').append($('<span id="draft-save-status">'));
} }
var draft_save_busy = false; /**
// Фукнция, дёргающаяся по крону, проверяющая надо ли сохранять черновик * Check if we can save the draft now
*/
function draft_save_check() { function draft_save_check() {
if (draft_save_busy) { if (draft_save_busy) {
return; return;
} }
draft_save_busy = true;
if (draft_save_last_time !== null) {
if ((new Date()).getTime() < draft_save_last_time.getTime() + 3000) {
return;
}
}
var current_text = $('#new-post-form #text-input').val(); var current_text = $('#new-post-form #text-input').val();
if (draft_last_text == current_text) { var current_tags = $('#new-post-form #tags-input').val();
if ((draft_last_text === current_text) && (draft_last_tags === current_tags)) {
draft_save_busy = false; draft_save_busy = false;
return; return;
} }
// @todo i18n
$('#draft-save-status').text('Сохраняем черновик...').show();
// Сохраняем draft_save_busy = true;
draft_save_last_time = new Date();
// @todo i18n
$('#draft-save-status').text(chrome.i18n.getMessage('msg_saving_post_draft')).show();
// Saving current data
draft_last_text = current_text; draft_last_text = current_text;
draft_last_tags = current_tags;
// Save it using the Chrome extension storage API. // Save it using the Chrome extension storage API.
chrome.storage.local.set({'point_draft_text': draft_last_text}, function() { chrome.storage.local.set({
point_draft_text: draft_last_text,
point_draft_tags: draft_last_tags
}, function() {
// Notify that we saved. // Notify that we saved.
draft_save_busy = false; draft_save_busy = false;
$('#draft-save-status').text('Черновик сохранён...'); draft_waiting = false;
setTimeout(function() { setTimeout(function() {
$('#draft-save-status').fadeOut(1000); $('#draft-save-status').fadeOut(1000);
}, 1000); }, 1000);

View file

@ -256,6 +256,11 @@
<input type="checkbox" name="option-other-comments-user-system"> <input type="checkbox" name="option-other-comments-user-system">
<span data-i18n="option_other_comments_user_system"></span> <span data-i18n="option_other_comments_user_system"></span>
</label> </label>
<label class="option-node">
<input type="checkbox" name="option-other-post-draft-save">
<span data-i18n="option_other_post_draft_save"></span>
</label>
</section> </section>
<section class="tabs-content-item" id="websocket"> <section class="tabs-content-item" id="websocket">