mirror of
https://bitbucket.org/skobkin/chrome_point_plus.git
synced 2024-11-23 18:56:04 +00:00
Post draft saving with option and some optimization.
This commit is contained in:
parent
429c432dc5
commit
684f6c15fe
|
@ -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..."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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": "Сохранение поста..."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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">
|
||||||
|
|
Loading…
Reference in a new issue