Notes/wwwroot/js/site.js

91 lines
2.1 KiB
JavaScript
Raw Normal View History

2022-11-29 15:14:15 +00:00
let saveContent = function ($textarea) {
$textarea = $textarea || $('textarea');
var content = $textarea.val();
$.ajax('/api/save', {
data: content,
contentType: 'text/plain',
type: 'POST'
}).done(function (data) {
2022-12-01 02:33:41 +00:00
// show 'saved' indicator
$('#saved-indicator').addClass('show').delay(800).queue(function (next) {
$(this).removeClass('show');
next();
});
2022-11-29 15:14:15 +00:00
}).fail(function () {
alert('Could not connect to server. Check your internet connection and try again.');
});
};
2023-01-09 20:54:20 +00:00
var poller = null;
let pollJob = function () {
poller = setInterval(function () {
$.get('/api/get', function (content) {
$('textarea').val(content);
});
}, 30000);
}
2022-11-29 15:14:15 +00:00
$(function () {
2022-12-03 02:38:05 +00:00
// set dark mode
if (window.location.hash == '#dark') {
$('textarea').addClass('dark');
}
2022-12-01 02:33:41 +00:00
var timer = null;
2023-01-09 20:54:20 +00:00
2022-12-02 20:18:04 +00:00
let ignoredKeyCodes = [17, 18, 20, 27, 37, 38, 39, 40, 91];
2023-01-09 20:54:20 +00:00
// start polling
pollJob();
2022-12-02 20:18:04 +00:00
// save after half-second delay after typing
$('textarea').keyup(function (e) {
2022-12-01 02:33:41 +00:00
clearTimeout(timer);
2023-01-09 20:54:20 +00:00
clearInterval(poller);
2022-12-02 20:18:04 +00:00
// only set timer if key isn't ignored
if (!ignoredKeyCodes.includes(e.keyCode)) {
2023-01-09 20:54:20 +00:00
2022-12-02 20:18:04 +00:00
timer = setTimeout(function () {
saveContent();
}, 1000);
2023-01-09 20:54:20 +00:00
pollJob();
2022-12-02 20:18:04 +00:00
}
2022-11-29 15:14:15 +00:00
});
// 20 second interval
2022-12-01 02:53:54 +00:00
// setInterval(saveContent, 60000);
2022-11-29 15:14:15 +00:00
// support tab key in textarea
$('textarea').keydown(function (e) {
if (e.keyCode === 9) { // tab was pressed
// get caret position/selection
var start = this.selectionStart;
end = this.selectionEnd;
var $this = $(this);
// set textarea value to: text before caret + tab + text after caret
$this.val($this.val().substring(0, start)
+ '\t'
+ $this.val().substring(end));
// put caret at right position again
this.selectionStart = this.selectionEnd = start + 1;
// prevent the focus lose
return false;
}
});
});