let saveContent = function ($textarea) { $textarea = $textarea || $('textarea'); var content = $textarea.val(); $.ajax('/api/save', { data: content, contentType: 'text/plain', type: 'POST' }).done(function (data) { // show 'saved' indicator $('#saved-indicator').addClass('show').delay(800).queue(function (next) { $(this).removeClass('show'); next(); }); }).fail(function () { alert('Could not connect to server. Check your internet connection and try again.'); }); }; $(function () { // set dark mode if (window.location.hash == '#dark') { $('textarea').addClass('dark'); } var timer = null; let ignoredKeyCodes = [17, 18, 20, 27, 37, 38, 39, 40, 91]; // save after half-second delay after typing $('textarea').keyup(function (e) { clearTimeout(timer); // only set timer if key isn't ignored if (!ignoredKeyCodes.includes(e.keyCode)) { timer = setTimeout(function () { saveContent(); }, 1000); } }); // 20 second interval // setInterval(saveContent, 60000); // 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; } }); });