Problem: sr.js is messy

Solution: cleanup sr.js and extract functions
This commit is contained in:
Peter Stuifzand 2022-01-17 21:34:35 +01:00
parent d584fe8bf7
commit 8fa7d4170f

View File

@ -9,6 +9,46 @@ function fillResult($modal, result) {
$modal.find('.block-text').show().val(result.line) $modal.find('.block-text').show().val(result.line)
} }
function replaceBlock(id, oldText) {
return fetch('/api/block/replace', {
method: 'post',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: qs.encode({id, text: oldText}),
});
}
function appendBlock(id, newText) {
return fetch('/api/block/append', {
method: 'post',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: qs.encode({id, text: newText}),
});
}
function resetSRBox(text) {
let newText = text.replace(/#(?:\[\[)?sr\/(\d+)(?:\]\])?/, '#sr/1');
return newText;
}
function processSRBox(review, originalText) {
let oldText = originalText
.replace(/#(?:\[\[)?sr\/(\d+)(?:\]\])?/, function (text, srCount) {
if (review === 'never') return '';
let nextCount = 1;
const count = parseInt(srCount)
if (review === 'again') nextCount = 1
if (review === 'soon') nextCount = count
if (review === 'later') nextCount = count + 1
return '#sr/' + nextCount;
}).trim()
if (review === 'never') return oldText.replace(/#(?:\[\[)?review(?:\]\])?/, '')
return oldText
}
$(function () { $(function () {
let reviewBlocks = []; let reviewBlocks = [];
@ -50,17 +90,13 @@ $(function () {
let text = $modal.find('.block-text').val() let text = $modal.find('.block-text').val()
let id = $modal.data('block-id') let id = $modal.data('block-id')
// let oldText = text
// .replace(/#\[\[review\]\]/, '')
// .replace(/#\[\[sr\/(\d+)\]\]/g, '')
// .trim()
processText(review, text, originalText, id) processText(review, text, originalText, id)
.then(() => { .then(() => {
if (reviewBlocks.length > 0) { if (reviewBlocks.length > 0) {
const first = reviewBlocks.shift() const first = reviewBlocks.shift()
// reload note with id // reload note with id
search.startQuery('id:' + first.id, {internal: false}).then((results) => { search.startQuery('id:' + first.id, {internal: false})
.then((results) => {
fillResult($modal, results[0]) fillResult($modal, results[0])
}) })
} else { } else {
@ -73,59 +109,10 @@ $(function () {
}).catch(e => console.log(e)) }).catch(e => console.log(e))
}); });
function processText(review, text, originalText, id) { async function processText(review, text, originalText, id) {
const changed = text !== originalText if (text !== originalText) {
if (changed) { await appendBlock(id, resetSRBox(text))
let newText = text.replace(/#\[\[sr\/(\d+)\]\]/, '#[[sr/1]]');
return fetch('/api/block/append', {
method: 'post',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: qs.encode({id, text: newText}),
}).then(() => {
let oldText = originalText
.replace(/#\[\[sr\/(\d+)\]\]/, function (text, srCount) {
if (review === 'never') return '';
let nextCount = 1;
const count = parseInt(srCount)
if (review === 'again') nextCount = 1
if (review === 'soon') nextCount = count
if (review === 'later') nextCount = count + 1
return '#[[sr/' + nextCount + ']]';
}).trim()
if (review === 'never') oldText = oldText.replace(/#\[\[review\]\]/, '')
return fetch('/api/block/replace', {
method: 'post',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: qs.encode({id, text: oldText}),
}).then(() => {
return text
})
})
} else {
let oldText = text
.replace(/#\[\[sr\/(\d+)\]\]/, function (text, srCount) {
if (review === 'never') return '';
let nextCount = 1;
const count = parseInt(srCount)
if (review === 'again') nextCount = 1
if (review === 'soon') nextCount = count
if (review === 'later') nextCount = count + 1
return '#[[sr/' + nextCount + ']]';
}).trim()
if (review === 'never') oldText = oldText.replace(/#\[\[review\]\]/, '')
return fetch('/api/block/replace', {
method: 'post',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: qs.encode({id, text: oldText}),
}).then(() => {
return text
})
} }
await replaceBlock(id, processSRBox(review, originalText))
} }
}); });