-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
106 lines (87 loc) · 3.77 KB
/
script.js
File metadata and controls
106 lines (87 loc) · 3.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// used for editing html page and main operations/display
// either use fingertree as below or in head of index.html
// const FingerTree = require('./fingertree.js');
// var ft = FingerTree.fromArray([]);
// using fingerTree rope
// const Rope = require('./rope.js');
var ftRope = new Rope();
const textarea = document.getElementById('textInput');
const opLogFTrope = document.getElementById('opLogFTrope');
const opLogBTrope = document.getElementById('opLogBTrope');
const ftRope_data = document.getElementById('ftRope_data');
// Prevent mouse events from modifying the textarea
textarea.addEventListener('mousedown', function(event) {
event.preventDefault();
});
// Allow focusing on textarea by clicking
textarea.addEventListener('click', function(event) {
textarea.focus();
});
// Handle keyboard events
textarea.addEventListener('keydown', function(event) {
// Prevent default behavior for Shift + left and Shift + right key combinations
if ((event.shiftKey && event.keyCode === 37) || (event.shiftKey && event.keyCode === 39)) {
event.preventDefault();
}
// Prevent usage up/down arrow keys
if ([38, 40].includes(event.keyCode)) {
event.preventDefault();
}
if (event.keyCode == 8) {
// logOperation2(`removed a character`)
var removedChar = ftRope.deleteCharacter();
if (removedChar !== undefined)
logOperation(`deleted ${removedChar} at index ${ftRope.cursor + 1} in finger tree rope `)
}
// text case for enter
if (event.keyCode == 13) {
ftRope.insertCharacter('\n');
logOperation(`inserted ${'\\n'} at index ${ftRope.cursor} in finger tree rope`)
}
else if (event.keyCode == 32) {
ftRope.insertCharacter(' ');
logOperation(`inserted ${'space'} at index ${ftRope.cursor} in finger tree rope`)
}
// log operation for left/right
else if ([37, 39].includes(event.keyCode) && !event.shiftKey) {
// const direction = event.keyCode === 37 ? 'left' : 'right';
// logOperation(`Cursor decremented and index changed to ${direction}`);
if (event.keyCode === 37) {
ftRope.decrementCursor();
logOperation(`Cursor decremented and index changed to ${ftRope.cursor}`);
}
else {
ftRope.incrementCursor();
logOperation(`Cursor incremented and index changed to ${ftRope.cursor}`);
}
}
// ensure ctrl+y, ctrl+A, ctrl+x, ctrl+V & ctrl+C not usable
else if (event.ctrlKey && [37, 39, 65, 67, 86, 88, 89, 90].includes(event.keyCode))
{
event.preventDefault();
}
// log operation for alphanumeric key press
// else if ( !event.key.match(/^[\x00-\x1F\x7F-\x9F]$/))
// else if ( event.key.length == 1 && /[a-zA-Z0-9]/.test(event.key))
else if ( event.key.length == 1)
{
// logOperation(`You entered ${event.key}`);
ftRope.insertCharacter(event.key);
logOperation(`inserted ${event.key} at index ${ftRope.cursor} in finger tree rope `)
}
});
function logOperation(operation) {
const logEntry = document.createElement('div');
logEntry.textContent = operation;
logEntry.classList.add("m-2", "border", "border-gray-400", "rounded-lg", "py-2", "px-4");
// Insert new log entry at the beginning of the log
opLogFTrope.insertBefore(logEntry, opLogFTrope.firstChild);
ftRope_data.innerText = ftRope.printRope(); // print rope
}
// function logOperation2(operation) {
// const logEntry = document.createElement('div');
// logEntry.textContent = operation;
// logEntry.classList.add("m-2", "border", "border-gray-400", "rounded-lg", "py-2", "px-4");
// // Insert new log entry at the beginning of the log
// opLogBTrope.insertBefore(logEntry, opLogBTrope.firstChild);
// }