Spaces:
Sleeping
Sleeping
| let inWords = document | |
| .getElementsByClassName("ct-codes-form")[0] | |
| .getElementsByClassName("ct-code"); | |
| let codes = []; | |
| let numCata = document.getElementsByClassName("ct-num-cata")[0].value; | |
| let sortData; | |
| initIU(); | |
| function submitData(e) { | |
| const submitData = []; | |
| sortData.forEach((order) => { | |
| const simplePosition = {}; | |
| order.forEach((dataPosition) => { | |
| simplePosition[dataPosition["code"]] = dataPosition["position"]; | |
| }); | |
| submitData.push(simplePosition); | |
| }); | |
| const codesInput = document.createElement("input"); | |
| codesInput.type = "hidden"; | |
| codesInput.name = "sort_codes"; | |
| codesInput.value = JSON.stringify(submitData); | |
| this.appendChild(codesInput); | |
| } | |
| function initIU() { | |
| setCodes(); | |
| definePermutations(); | |
| addIUPermutations(); | |
| const formWords = document.getElementsByClassName("ct-codes-form")[0]; | |
| formWords.addEventListener("submit", submitData); | |
| } | |
| function setCodes() { | |
| if (codes) { | |
| codes = []; | |
| } | |
| for (let i = 0; i < inWords.length; i++) { | |
| codes.push(inWords.item(i).value.toUpperCase()); | |
| } | |
| } | |
| function setPermutations() { | |
| definePermutations(); | |
| addIUPermutations(); | |
| } | |
| function definePermutations() { | |
| setCodes(); | |
| const permutations = generatePermutations(codes); | |
| const newPer = shuffle(permutations); | |
| const usePermutations = []; | |
| let index = 0; | |
| while (true) { | |
| if (usePermutations.length == numCata) { | |
| break; | |
| } else if (index < newPer.length) { | |
| usePermutations.push(newPer[index]); | |
| index++; | |
| } else if (index >= newPer.length) { | |
| index = 0; | |
| } | |
| } | |
| const permutationsSort = []; | |
| usePermutations.forEach((permutation) => { | |
| let newValue = []; | |
| let index = 1; | |
| permutation.forEach((cod) => { | |
| newValue.push({ | |
| code: cod, | |
| position: index, | |
| }); | |
| index++; | |
| }); | |
| permutationsSort.push(newValue); | |
| }); | |
| sortData = permutationsSort.slice(); | |
| } | |
| function generatePermutations(objetos) { | |
| var result = []; | |
| var backtrack = (index, objetos) => { | |
| if (index === objetos.length) { | |
| result.push(objetos.slice()); | |
| return; | |
| } | |
| for (let j = index; j < objetos.length; j++) { | |
| [objetos[index], objetos[j]] = [objetos[j], objetos[index]]; | |
| backtrack(index + 1, objetos); | |
| [objetos[index], objetos[j]] = [objetos[j], objetos[index]]; | |
| } | |
| }; | |
| backtrack(0, objetos); | |
| return result; | |
| } | |
| function shuffle(arr) { | |
| const arrSuffle = arr.slice(); | |
| for (let i = arrSuffle.length - 1; i > 0; i--) { | |
| const j = Math.floor(Math.random() * (i + 1)); | |
| [arrSuffle[i], arrSuffle[j]] = [arrSuffle[j], arrSuffle[i]]; | |
| } | |
| return arrSuffle; | |
| } | |
| /** | |
| * Render the UI with permutations | |
| */ | |
| function addIUPermutations() { | |
| const container = document.getElementsByClassName("ct-orden-list")[0]; | |
| const itemsChild = []; | |
| container.replaceChildren(); | |
| let index = 1; | |
| sortData.forEach((permuta) => { | |
| const paragraph = document.createElement("p"); | |
| paragraph.classList.add("px-3", "font-bold", "text-xl", "text-black"); | |
| paragraph.textContent = `orden ${index}`; | |
| const unlist = document.createElement("ul"); | |
| unlist.classList.add( | |
| "flex", | |
| "flex-wrap", | |
| "justify-center", | |
| "items-center", | |
| "gap-3", | |
| "px-3", | |
| "py-1", | |
| "text-white" | |
| ); | |
| permuta.forEach((obj) => { | |
| const itemList = document.createElement("li"); | |
| itemList.classList.add( | |
| "px-2", | |
| "bg-gray-600", | |
| "font-bold", | |
| "tracking-wide" | |
| ); | |
| itemList.textContent = `${obj.position}: ${obj.code}`; | |
| unlist.appendChild(itemList); | |
| }); | |
| const section = document.createElement("section"); | |
| section.classList.add( | |
| "bg-surface-card", | |
| "py-2", | |
| "sm:max-w-80", | |
| "w-full", | |
| "flex", | |
| "flex-col", | |
| "justify-center", | |
| "items-center" | |
| ); | |
| section.appendChild(paragraph); | |
| section.appendChild(unlist); | |
| container.appendChild(section); | |
| index++; | |
| }); | |
| } | |