59 lines
1.5 KiB
JavaScript
59 lines
1.5 KiB
JavaScript
|
function createCursor(start) {
|
||
|
let cursor = start;
|
||
|
|
||
|
return {
|
||
|
get() {
|
||
|
return cursor;
|
||
|
},
|
||
|
set(newPosition) {
|
||
|
cursor = newPosition;
|
||
|
},
|
||
|
getId(store) {
|
||
|
return store.currentID(cursor)
|
||
|
},
|
||
|
atFirst() {
|
||
|
return cursor === 0;
|
||
|
},
|
||
|
atPosition(other) {
|
||
|
return cursor === other;
|
||
|
},
|
||
|
atEnd(store) {
|
||
|
return cursor === store.length()
|
||
|
},
|
||
|
hasMoved(saved) {
|
||
|
return cursor !== saved.get()
|
||
|
},
|
||
|
getCurrent(store) {
|
||
|
let id = store.currentID(cursor)
|
||
|
return store.value(id)
|
||
|
},
|
||
|
getCurrentElement(elements) {
|
||
|
return elements.slice(cursor, cursor + 1);
|
||
|
},
|
||
|
save() {
|
||
|
return createCursor(cursor);
|
||
|
},
|
||
|
moveUp(store) {
|
||
|
cursor = store.prevCursorPosition(cursor)
|
||
|
},
|
||
|
moveDown(store) {
|
||
|
cursor = store.nextCursorPosition(cursor, true)
|
||
|
},
|
||
|
remove(store) {
|
||
|
store.remove(cursor, 1)
|
||
|
},
|
||
|
insertAbove(store, item) {
|
||
|
store.insertBefore(store.currentID(cursor), item)
|
||
|
},
|
||
|
insertBelow(store, item) {
|
||
|
let id = store.insertAfter(store.currentID(cursor), item)
|
||
|
cursor = store.index(id)
|
||
|
},
|
||
|
forwardToNextVisible(store) {
|
||
|
cursor = store.nextCursorPosition(cursor, false)
|
||
|
},
|
||
|
};
|
||
|
}
|
||
|
|
||
|
export default createCursor;
|