From ba8cd25b9d031296c53e21e28addf00c80b97b56 Mon Sep 17 00:00:00 2001 From: Dan Vanderkam Date: Sun, 22 Sep 2024 16:05:55 -0400 Subject: [PATCH 1/2] add /:num endpoint --- localturk.ts | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/localturk.ts b/localturk.ts index ee6eef1..dd22797 100644 --- a/localturk.ts +++ b/localturk.ts @@ -80,7 +80,7 @@ const staticDir = options['staticDir'] || path.dirname(templateFile); type Task = {[key: string]: string}; let flash = ''; // this is used to show warnings in the web UI. -async function renderTemplate({task, numCompleted, numTotal}: TaskStats) { +async function renderTemplate({task, numCompleted, rowNumber, numTotal}: TaskStats) { const template = await fs.readFile(templateFile, {encoding: 'utf8'}); const fullDict: Record = {}; for (const k in task) { @@ -92,6 +92,7 @@ async function renderTemplate({task, numCompleted, numTotal}: TaskStats) { for (var [k, v] of Object.entries(options.var)) { fullDict[k] = utils.htmlEntities(v as string); } + fullDict['ROW_NUMBER'] = String(rowNumber); const userHtml = utils.renderTemplate(template, fullDict); const thisFlash = flash; @@ -123,6 +124,7 @@ async function renderTemplate({task, numCompleted, numTotal}: TaskStats) { el.click(); } }); + // This is row number ${rowNumber}; visit /${rowNumber} to come back to it. @@ -156,6 +158,7 @@ async function checkTaskOutput(task: Task) { interface TaskStats { task?: Task; numCompleted: number; + rowNumber: number; numTotal: number; } @@ -173,6 +176,7 @@ async function getNextTask(): Promise { continue; } + task.ROW_NUMBER = String(numTotal - 1); if (sampler) { sampler.pushSome(task); } else { @@ -180,13 +184,44 @@ async function getNextTask(): Promise { } } + const task = sampler ? sampler[0] : nextTask; + let rowNumber = 0; + if (task) { + rowNumber = Number(task.ROW_NUMBER); + delete task.ROW_NUMBER; + } return { - task: sampler ? sampler[0] : nextTask, + task, numCompleted: _.size(completedTasks), + rowNumber, numTotal, } } +async function getTaskNum(n: number): Promise { + const completedTasks = await readCompletedTasks(); // just getting the count. + let i = 0; + let numTotal = 0; + let taskN;; + for await (const task of csv.readRowObjects(tasksFile)) { + task.ROW_NUMBER = String(numTotal + 1); + numTotal++; + if (i === n) { + taskN = task; + } + i++; + } + if (taskN) { + return { + task: taskN, + numCompleted: _.size(completedTasks), + rowNumber: n, + numTotal, + } + } + throw new Error('Task not found'); +} + const app = express(); app.use(errorhandler()); app.use(express.json({limit: "50mb"})); @@ -205,6 +240,12 @@ app.get('/', utils.wrapPromise(async (req, res) => { } })); +app.get('/:num(\\d+)', utils.wrapPromise(async (req, res) => { + const task = await getTaskNum(parseInt(req.params.num)); + const html = await renderTemplate(task); + res.send(html); +})); + app.post('/submit', utils.wrapPromise(async (req, res) => { const task: Task = req.body; await csv.appendRow(outputsFile, task); From 497a833f8ade4a791778c09ae5211714def9f2a4 Mon Sep 17 00:00:00 2001 From: Dan Vanderkam Date: Sun, 22 Sep 2024 16:09:12 -0400 Subject: [PATCH 2/2] keep ROW_NUMBER out of task --- localturk.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/localturk.ts b/localturk.ts index dd22797..3cb7399 100644 --- a/localturk.ts +++ b/localturk.ts @@ -202,9 +202,8 @@ async function getTaskNum(n: number): Promise { const completedTasks = await readCompletedTasks(); // just getting the count. let i = 0; let numTotal = 0; - let taskN;; + let taskN; for await (const task of csv.readRowObjects(tasksFile)) { - task.ROW_NUMBER = String(numTotal + 1); numTotal++; if (i === n) { taskN = task;