245 lines
7.0 KiB
JavaScript
245 lines
7.0 KiB
JavaScript
'use strict';
|
|
|
|
// TODO is there a better way?
|
|
const symbolScanner = {
|
|
// Our list of Moto scanners that we can look up
|
|
manufacturer: 'Symbol / Motorola',
|
|
models: [
|
|
// 'MC3190',
|
|
// 'MC32N0',
|
|
'MC9000',
|
|
'MC9060',
|
|
'MC9090',
|
|
// 'MC9190',
|
|
// 'MC92N0',
|
|
],
|
|
};
|
|
|
|
const psionScanner = {
|
|
// TODO Implement Psion WAP configurations
|
|
manufacturer: 'Psion Techlogix',
|
|
models: ['WAP4'],
|
|
};
|
|
|
|
const mc9000 = {
|
|
// This should handle 9000/9060/9090 series
|
|
config: 'MC',
|
|
productFamily: '90',
|
|
radio: ['0', '6', '9'],
|
|
wan: ['0', '2', '3', '4', '7'],
|
|
formFactor: ['G', 'K', 'S'],
|
|
scanEngine: ['F', 'H', 'J', 'K', 'U', 'W'],
|
|
carrier: ['0', 'A', 'B', 'E', 'F'],
|
|
display: ['H', 'J'],
|
|
memory: ['A', 'B', 'C', 'J', '9'],
|
|
keyboard: ['A', 'E', 'F', 'G', 'H', 'J', 'L'],
|
|
operatingSystem: ['B', 'E', 'F', 'G', 'H', 'Q'],
|
|
features: ['00', 'A2', 'A4', 'A6', 'A7', 'B5', 'B6', 'C2', 'C6'],
|
|
region: ['00', '50', 'US', 'FB', 'WW', 'WR'],
|
|
// NOTE These won't work for multiple devices...
|
|
productPage: 'http://insert.the.url',
|
|
productManual: 'manual.pdf',
|
|
// Maybe we can use a multi-dimensional array..
|
|
productInfo: [
|
|
['MC9000', 'http://url', 'manual.pdf'],
|
|
['MC9060', 'http://url', 'manual.pdf'],
|
|
['MC9090', 'http://url', 'manual.pdf'],
|
|
],
|
|
|
|
// TODO Parse function in each object?
|
|
|
|
// TODO Reference each config variable to a description
|
|
|
|
// TODO Error Checking (make sure an entered value exists in our table above)
|
|
};
|
|
|
|
// SELECTORS
|
|
const devices = document.querySelector('.devices');
|
|
const btnSubmit = document.querySelector('.btnSubmit');
|
|
const btnSubmitStr = document.querySelector('.btnSubmitStr');
|
|
const btnReset = document.querySelector('.btnReset');
|
|
const btnClear = document.querySelector('.btnClear');
|
|
const strConfig = document.getElementById('configuration-string');
|
|
const results = document.querySelector('.results');
|
|
|
|
// Initialize defaults
|
|
const init = function () {
|
|
// TODO Load last selected device and input fields from localStorage in case of browser crash...
|
|
let bSelected = false;
|
|
let arr = symbolScanner.models.sort();
|
|
|
|
for (let i = 0; i < symbolScanner.models.length; i++) {
|
|
let opt = arr[i];
|
|
var el = document.createElement('option');
|
|
el.textContent = opt; // The text that shows up in the dropdown
|
|
el.value = opt; // We can set the value here, if we want to change it...
|
|
|
|
if (opt === 'MC9090') el.setAttribute('selected', bSelected); // Set the default option to 9090
|
|
|
|
devices.appendChild(el);
|
|
}
|
|
};
|
|
|
|
window.onload = init; // Initialize on page load...
|
|
|
|
// FIXME Here's the heart of the application. We'll parse the given string, check for errors, and use this to lookup specific values. Multiple returns aren't great here
|
|
const parseConfiguration = function (model, config) {
|
|
const [c1, c2, fam1, fam2, radio, wan] = model.split('');
|
|
const [
|
|
formFactor,
|
|
scanEngine,
|
|
carrier,
|
|
display,
|
|
memory,
|
|
keyboard,
|
|
operatingSystem,
|
|
f1,
|
|
f2,
|
|
r1,
|
|
r2,
|
|
] = config.toUpperCase().split(''); // Make sure everything is uppercase
|
|
|
|
// Combine multi-digit values
|
|
const config_ = c1 + c2;
|
|
const family = fam1 + fam2;
|
|
const features = f1 + f2;
|
|
const region = r1 + r2;
|
|
|
|
// Debugging text, so I can view the config string
|
|
console.log(`${model}-${config.toUpperCase()}`);
|
|
console.log(
|
|
config_,
|
|
family,
|
|
radio,
|
|
wan,
|
|
scanEngine,
|
|
display,
|
|
memory,
|
|
keyboard,
|
|
operatingSystem,
|
|
features,
|
|
region
|
|
);
|
|
|
|
return [
|
|
config_,
|
|
family,
|
|
radio,
|
|
wan,
|
|
formFactor,
|
|
scanEngine,
|
|
carrier,
|
|
display,
|
|
memory,
|
|
keyboard,
|
|
operatingSystem,
|
|
features,
|
|
region,
|
|
];
|
|
};
|
|
// parseConfiguration('MC9090', 'GJ0HJHGA6WR'); // IT WORKS!
|
|
|
|
btnSubmit.addEventListener('click', function () {
|
|
// Submit button
|
|
console.log('Submit button');
|
|
});
|
|
|
|
btnSubmitStr.addEventListener('click', function () {
|
|
// Submit button (config string)
|
|
// NOTE This was for testing the parser. Might move to individual functions inside the scanner objects
|
|
|
|
// Check to make sure our string is the correct length
|
|
// TODO Each device will have a different check
|
|
if (strConfig.value.length !== 11) {
|
|
alert('Please enter a valid configuration string!');
|
|
return;
|
|
}
|
|
|
|
const result = parseConfiguration(devices.value, strConfig.value);
|
|
console.log(result);
|
|
|
|
if (
|
|
devices.value === 'MC9000' ||
|
|
devices.value === 'MC9060' ||
|
|
devices.value === 'MC9090'
|
|
) {
|
|
// use mc9000 object
|
|
console.log('Is an MC9000 Series device');
|
|
for (let i = 0; i < result.length; i++) {
|
|
// for (let j = 0; j < mc9000.display.length; j++) {
|
|
// if (result[7] === mc9000.display[j]) {
|
|
// // FIXME It's finding the result, but it's finding it with EACH iteration of the result loop
|
|
// console.log(i, j, 'Found it!');
|
|
// }
|
|
// }
|
|
if (mc9000.display.includes(result[i]))
|
|
console.log('Found', mc9000.display, result[i], i);
|
|
}
|
|
}
|
|
|
|
results.classList.remove('hidden'); // show the results table
|
|
});
|
|
|
|
btnReset.addEventListener('click', function () {
|
|
// Reset select boxes
|
|
console.log('Reset Button');
|
|
});
|
|
|
|
btnClear.addEventListener('click', function () {
|
|
// Clear input string
|
|
console.log('Clear button');
|
|
strConfig.value = ''; // Clear the input field
|
|
results.classList.add('hidden'); // Hide the results table
|
|
});
|
|
|
|
devices.addEventListener('change', function () {
|
|
// Check image exists or display default image
|
|
fetch(`images/${devices.value}.png`, { method: 'HEAD' })
|
|
.then(res => {
|
|
if (res.ok) {
|
|
document.getElementById(
|
|
'device-image'
|
|
).src = `images/${devices.value}.png`;
|
|
document.getElementById(
|
|
'device-image'
|
|
).alt = `Image of ${devices.value} scanner`;
|
|
} else {
|
|
document.getElementById('device-image').src = 'images/blank.png';
|
|
document.getElementById('device-image').alt = 'No Image';
|
|
}
|
|
})
|
|
.catch(err => console.error('Error:', err));
|
|
|
|
// TODO also populate the individual selectors :D
|
|
|
|
// TODO Insert links to product page and user manual
|
|
});
|
|
|
|
// Testing
|
|
// function generateTableHead(table, data) {
|
|
// let thead = table.createTHead();
|
|
// let row = thead.insertRow();
|
|
|
|
// for (let key of data) {
|
|
// let th = document.createElement('th');
|
|
// let text = document.createTextNode(key);
|
|
// th.appendChild(text);
|
|
// row.appendChild(th);
|
|
// }
|
|
// }
|
|
|
|
// function generateTable(table, data) {
|
|
// for (let element of data) {
|
|
// let row = table.insertRow();
|
|
// for (key in element) {
|
|
// let cell = row.insertCell();
|
|
// let text = document.createTextNode(element[key]);
|
|
// cell.appendChild(text);
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// let table = document.querySelector('table');
|
|
// generateTableHead(table, ['Parameter', 'Code', 'Result']);
|
|
// generateTable(table, ['Scan Engine', 'J', 'Lorax Scan Engine']);
|