Word Puzzle Generator <!– http://html2canvas.min.js http://jspdf.umd.min.js –> https://rawgit.com/eKoopmans/html2pdf/master/dist/html2pdf.bundle.js body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #ffffff; } #container { max-width: 800px; margin: 0 auto; background-color: #fff; } #top-section { position: relative; background-color: #153257; color: #fff; padding: 10px; text-align: left; border-radius: 5px 5px 0 0; margin-top: 20px; } #fileInput { margin-right: 10px; } #generateButton, #downloadButton { background-color: #fff; color: #153257; padding: 8px 16px; border: none; border-radius: 5px; cursor: pointer; margin-right: 10px; } #body-section { background-color: #fff; border-radius: 0 0 10px 10px; font-family: ‘Gochi Hand’; } h1 { margin: 0; font-size: 45px; text-shadow: 1px 2px 1px grey; } p { margin-top: 0; font-size: larger; } table { border-collapse: collapse; margin: 10px 0; width: 100%; table-layout: fixed; } td { border: 2px solid #c8cbcc; width: 20%; height: 40px; text-align: center; font-size: 18px; font-weight: bolder; font-family: ‘Acme’; color: #032a33; } .solution-table { margin-top: 10px; width: auto; } .solution-table td { color: #b9b9b9; font-size: 10px; height: 20px; width: 20px } .solution-table .highlight { color: #002227; } .solution-heading { margin-bottom: 20px; text-align: center; } .single-solution-box > h1 { margin: 20px 0 0 0; font-size: 20px; } .solution-span { font-family: ‘Kristi’; font-size: 70px; text-shadow: 1px 1px #0865b7; } .word-list { margin: 20px 0; font-weight: bold; display: flex; flex-wrap: wrap; justify-content: space-between; } .word-list span { width: 18%; box-sizing: border-box; text-align: left; text-transform: uppercase; line-height: 30px; font-family: ‘Acme’; } .puzzle-box, .solution-box { padding: 50px 30px 30px 30px; page-break-after: always; } .solution-box { padding: 20px; } .single-solution-box { margin: 0 10px; } .solution-wrapper { display: grid; grid-template-columns: repeat(2, 1fr); } @media print { #top-section { display:none; } .solution-table td { color: #b9b9b9; } }
Generate Word Puzzles Download PDF
function initGeneration() { var fileInput = document.getElementById(‘fileInput’); var file = fileInput.files[0]; if (file) { var reader = new FileReader(); reader.onload = function (e) { var fileContent = e.target.result; generateWordPuzzles(fileContent); }; reader.readAsText(file); } else { alert(‘Please select a file.’); } } function generateWordPuzzles(fileContent) { var puzzleContainer = document.getElementById(‘puzzle-container’); puzzleContainer.innerHTML = “”; var solutionContainer = document.getElementById(‘solution-container’); solutionContainer.innerHTML = “”; const SOL_PER_PAGE = 4; var currPuzzleNum = 0; var solutionBox; var solutionsWrapper; try { var jsonData = JSON.parse(fileContent); jsonData.puzzles.forEach(puzzle => { var puzzleBox = document.createElement(‘div’); puzzleBox.classList.add(‘puzzle-box’); // Puzzle Title var puzzleTitle = document.createElement(‘h1’); puzzleTitle.textContent = puzzle.title; puzzleBox.appendChild(puzzleTitle); // Puzzle Heading var puzzleHeading = document.createElement(‘p’); puzzleHeading.textContent = puzzle.heading; puzzleBox.appendChild(puzzleHeading); // Puzzle Table var puzzleTable = document.createElement(‘table’); puzzleTable.innerHTML = “”; var grid = createEmptyGrid(jsonData.size); puzzle.words.forEach(word => placeWordRandomly(word.toUpperCase(), grid)); fillEmptyCells(grid); for (var i = 0; i < jsonData.size; i++) { var row = puzzleTable.insertRow(); for (var j = 0; j < jsonData.size; j++) { var cell = row.insertCell(); cell.textContent = grid[i][j].letter; } } puzzleBox.appendChild(puzzleTable); // Word List // Word List var wordListContainer = document.createElement('div'); wordListContainer.classList.add('pagebreak'); var wordList = document.createElement('div'); wordList.classList.add('word-list'); var wordsPerColumn = Math.ceil(puzzle.words.length / 5); for (var i = 0; i < 5; i++) { var wordColumn = puzzle.words.slice(i * wordsPerColumn, (i + 1) * wordsPerColumn); var columnSpan = document.createElement('span'); columnSpan.innerHTML = wordColumn.join('
‘); wordList.appendChild(columnSpan); } wordListContainer.appendChild(wordList); puzzleBox.appendChild(wordListContainer); puzzleContainer.appendChild(puzzleBox); // Solution Table if (currPuzzleNum % SOL_PER_PAGE == 0) { solutionBox = document.createElement(‘div’); solutionBox.classList.add(‘solution-box’); var puzzleSolnTitle = document.createElement(‘div’); puzzleSolnTitle.classList.add(“solution-heading”); var solnTag = document.createElement(‘span’); solnTag.classList.add(“solution-span”); solnTag.innerHTML= “Solution”; puzzleSolnTitle.appendChild(solnTag); solutionBox.appendChild(puzzleSolnTitle); solutionsWrapper = document.createElement(‘div’); solutionsWrapper.classList.add(“solution-wrapper”); solutionBox.appendChild(solutionsWrapper); } var puzzleSolutionBox = document.createElement(‘div’); puzzleSolutionBox.classList.add(‘single-solution-box’); puzzleSolutionBox.appendChild(puzzleTitle.cloneNode(true)); var solutionTable = document.createElement(‘table’); solutionTable.classList.add(‘solution-table’); for (var i = 0; i < jsonData.size; i++) { var row = solutionTable.insertRow(); for (var j = 0; j < jsonData.size; j++) { var cell = row.insertCell(); cell.textContent = grid[i][j].letter; if (grid[i][j].isPartOfWord) { cell.classList.add('highlight'); } } } puzzleSolutionBox.appendChild(solutionTable); solutionsWrapper.appendChild(puzzleSolutionBox); solutionBox.appendChild(solutionsWrapper); // solutionBox.appendChild(wordListContainer.cloneNode(true)); solutionContainer.appendChild(solutionBox); currPuzzleNum++; }); } catch (error) { console.log(error); console.log('Error parsing JSON file. Please make sure the file is in the correct format.'); } } function createEmptyGrid(size) { var grid = []; for (var i = 0; i < size; i++) { grid[i] = []; for (var j = 0; j grid[0].length) { return false; } for (var i = 0; i < word.length; i++) { if (grid[startRow][startCol + i].letter !== '') { return false; } } for (var i = 0; i grid.length) { return false; } for (var i = 0; i < word.length; i++) { if (grid[startRow + i][startCol].letter !== '') { return false; } } for (var i = 0; i grid.length || startCol + word.length > grid[0].length) { return false; } for (var i = 0; i < word.length; i++) { if (grid[startRow + i][startCol + i].letter !== '') { return false; } } for (var i = 0; i < word.length; i++) { grid[startRow + i][startCol + i] = { letter: word.charAt(i), isPartOfWord: true }; } return true; } function fillEmptyCells(grid) { for (var i = 0; i < grid.length; i++) { for (var j = 0; j < grid[i].length; j++) { if (grid[i][j].letter === '') { grid[i][j] = { letter: getRandomLetter(), isPartOfWord: false }; } } } } function getRandomLetter() { var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var randomIndex = Math.floor(Math.random() * alphabet.length); return alphabet.charAt(randomIndex); } function downloadPDF() { var element = document.getElementById('body-section'); html2pdf(element, { margin: 5, filename: 'square_table_example.pdf', image: { type: 'jpeg', quality: 0.98 }, html2canvas: { scale: 2 }, jsPDF: { unit: 'mm', format: 'letter', orientation: 'portrait' } }); }

Start a Blog at WordPress.com.

Up ↑

Design a site like this with WordPress.com
Get started