forked from algorithm-visualizer/algorithm-visualizer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patharray2d.js
More file actions
146 lines (122 loc) · 4.07 KB
/
array2d.js
File metadata and controls
146 lines (122 loc) · 4.07 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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
'use strict';
const modules = require('../module');
const util = require('./util');
const getTracerName = () =>{
return document.getElementById("tracerName-2D").value;
}
const getNumRows = () => {
var row_field = document.getElementById('numRows-2D');
return row_field.value;
}
const getNumColumns = () => {
var column_field = document.getElementById('numColumns-2D');
return column_field.value;
}
const fauxData = (r, c) => {
var D = [];
for (var i = 0; i < r; i++) {
D.push([]);
for (var j = 0; j < c; j++) {
D[i].push(Math.floor(Math.random()* 10 + 1));
}
}
return D;
}
const tableToInputFields = (numRows, numColumns) => {
var table = document.querySelector('.mtbl-table');
for(var i = 0; i < numRows; i++){
for(var j = 0; j < numColumns; j++){
var elem = document.createElement('input');
elem.type = 'Text';
elem.value = Math.floor(Math.random() * 10 + 1);
elem.classList.add('mtbl-col','inputField');
table.childNodes[i].childNodes[j].innerHTML = '';
table.childNodes[i].childNodes[j].appendChild(elem);
}
}
}
const generateJS = (logger, tracer, tracerName) => {
if(!logger) return;
logger.clear();
var table = document.querySelector('.mtbl-table');
var numRows = table.childNodes.length;
var numColumns = table.childNodes[0].childNodes.length;
logger.print('Copy and paste this code in your data.js file!');
logger.print('');
if(numRows > 1) {
logger.print('let myTable = [');
}
var line = 'let myTable = [';
var i;
var j;
var comma = ',';
var currVal;
var nors;
for(i = 0; i < numRows; i++){
if(numRows > 1){
line = '[';
}
for(j = 0; j < numColumns-1; j++){
currVal = table.childNodes[i].childNodes[j].childNodes[0].value;
nors = Number(currVal);
if(isNaN(nors)){
currVal = "'" + currVal + "'";
}
line += currVal + ',';
}
if(i === numRows - 1){comma = '';}
currVal = table.childNodes[i].childNodes[j++].childNodes[0].value;
nors = Number(currVal);
if(isNaN(nors)){
currVal = "'" + currVal + "'";
}
line += currVal + ']' + comma;
logger.print(line);
}
if(numRows > 1){
logger.print(']');
}
logger.print("let myTableTracer = new "+ tracer +" ('"+tracerName+"')");
logger.print('myTableTracer._setData (myTable)');
util.enabledHightlighting();
}
const mousescroll = (e) =>{
var colmElem = document.querySelector('.mtbl-col');
var delta = (e.wheelDelta !== undefined && e.wheelDelta) ||
(e.detail !== undefined && -e.detail);
var inputFields = document.getElementsByClassName("inputField");
for (var i = 0; i < inputFields.length; i++) {
inputFields[i].style.width = (parseFloat(colmElem.style.fontSize) * 2.5) + "px";
}
}
const setup = () => {
var button_2DMatrix = document.getElementById("button-2DMatrix");
var logger;
var arr2DTracer;
button_2DMatrix.addEventListener('click',function(){
util.clearModules();
arr2DTracer = new modules.Array2DTracer();
var arrElem = document.querySelector('.module_wrapper');
arrElem.addEventListener("mousewheel", mousescroll, false);
arrElem.addEventListener("DOMMouseScroll", mousescroll, false);
logger = new modules.LogTracer('Generated Javascript');
var numRows = getNumRows();
var numColumns = getNumColumns();
var data = fauxData(numRows, numColumns);
arr2DTracer.setData(data);
tableToInputFields(numRows, numColumns);
util.positionModules();
arr2DTracer.refresh();
},false);
var button_JS = document.getElementById('button-generateJS-2D');
button_JS.addEventListener('click',function(){
generateJS(logger, 'Array2DTracer', getTracerName());
},false);
}
module.exports = {
setup,
mousescroll,
fauxData,
tableToInputFields,
generateJS
};