oficina / slides Public

Clone
git clone https://amadan.net/oficina/slides

Plain git — no account needed to clone.

Download

Download this file

1// strip-reorder.mjs's drop rule: where a dragged slide lands, as the
2// `after` a move_slide wants, and when a drop changes nothing.
3import test from 'node:test'
4import assert from 'node:assert/strict'
5import { dropTarget, dropOp } from './strip-reorder.mjs'
6
7const ids = ['a', 'b', 'c', 'd']
8
9test('dropTarget: before puts it ahead of the item, after behind it, null means first', () => {
10 assert.equal(dropTarget(ids, 'c', 'a', 'before'), null)
11 assert.equal(dropTarget(ids, 'c', 'a', 'after'), 'a')
12 assert.equal(dropTarget(ids, 'a', 'd', 'after'), 'd')
13 assert.equal(dropTarget(ids, 'a', 'd', 'before'), 'c')
14 assert.equal(dropTarget(ids, 'd', 'b', 'before'), 'a')
15})
16
17test('a drop that leaves the order as it is is no move', () => {
18 assert.equal(dropTarget(ids, 'a', 'a', 'before'), undefined)
19 assert.equal(dropTarget(ids, 'b', 'a', 'after'), undefined)
20 assert.equal(dropTarget(ids, 'b', 'c', 'before'), undefined)
21 assert.equal(dropTarget(ids, 'a', 'b', 'before'), undefined)
22 assert.equal(dropTarget(ids, 'a', 'zz', 'before'), undefined)
23 assert.equal(dropOp(ids, 'b', 'a', 'after'), null)
24})
25
26test('dropOp is the move_slide', () => {
27 assert.deepEqual(dropOp(ids, 'c', 'a', 'before'), { op: 'move_slide', id: 'c' })
28 assert.deepEqual(dropOp(ids, 'a', 'c', 'after'), { op: 'move_slide', id: 'a', after: 'c' })
29})
30