Games-Sudoku-Html
view release on metacpan or search on metacpan
lib/Games/Sudoku/Html.pm view on Meta::CPAN
<th>Play it</th>
</tr>
<TMPL_LOOP puzzles><tr id="row-<TMPL_VAR __counter__>">
<td><TMPL_VAR __counter__></td>
<td class="gridstring"><TMPL_VAR strPuzzle></td>
<td><TMPL_VAR properties ESCAPE="html"></td>
<td><a href="#" onclick="play(event, 'row-<TMPL_VAR __counter__>')">open here</a>, <a href="https://www.sudokuexchange.com/play/?s=<TMPL_VAR paramBoard>" target="_blank">play online</a></td>
</tr></TMPL_LOOP>
</table>
<div class="popup" id="popup1">
<div id="popup1header" style="text-align:center;"><span id="timer" style="float:left;"></span><span id="puzzleid">Click here to move</span> <a href="#" onclick="continueOnline(event)">continue online</a><a href="#" onclic...
<script type="text/javascript">
/* partially based on Spreadsheet::HTML::Presets::Sudoku, Copyright 2017 Jeff Anderson */
var MATRIX;
var STEPS;
var fillingivens = function(rowid, grid, playable) {
var board = $(rowid).querySelector('.gridstring').textContent;
var cells = grid.getElementsByTagName('td');
if (playable) {
lib/Games/Sudoku/Html.pm view on Meta::CPAN
function puzzlecomplete() {
for (var r = 0; r < 9; r++) {
for (var c = 0; c < 9; c++) {
if (! MATRIX[r][c]) return false;
}
}
return true;
}
// reverse input stepwise if ESC gets pressed
document.getElementById('popup1').addEventListener('keydown', function (event) {
var key = event.key;
if (key == 'Escape' || key == 'Backspace') {
var target = STEPS.pop();
if (! target) return 0;
var targetid = target.id;
var result = targetid.match(/input-(\d)-(\d)/);
target.value = '';
MATRIX[result[1]][result[2]] = '';
}
});
var play = function(e, rowid) {
e = e || window.event;
e.preventDefault();
if (timerVar) clearInterval(timerVar);
fillingivens(rowid, $('sudoku'), true);
$('popup1').style.display ='block';
var inputs = $('sudoku').getElementsByClassName('sudokuinput');
for (var i=0; i<inputs.length; i++) {
var input = inputs[i];
input.addEventListener('keydown', function (event) {
var matches = this.id.match( /(\d+)-(\d+)/ );
var id_r = matches[1];
var id_c = matches[2];
lib/Games/Sudoku/Html.pm view on Meta::CPAN
}
min = '00';
sec = 0;
$('timer').style.color = '';
$('timer').innerHTML = '00:00';
timerVar = setInterval(myTimer, 1000);
}
/* draggable code from w3schools.com */
dragElement(document.getElementById('popup1'));
function dragElement(elmnt) {
var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
if (document.getElementById(elmnt.id + 'header')) {
document.getElementById(elmnt.id + 'header').onmousedown = dragMouseDown;
} else {
elmnt.onmousedown = dragMouseDown;
}
lib/Games/Sudoku/Html.pm view on Meta::CPAN
var row = new Array();
for (var c = 0; c < 9; c++) {
url = url + (MATRIX[r][c] || '0');
}
}
window.open(url);
}
</script>
<style>
.popup {
padding: 10px;
background: #fff;
z-index: 20;
}
#popup1 {
-webkit-box-shadow: 0px 0px 0px 9999px rgba(0, 0, 0, 0.5);
box-shadow: 0px 0px 0px 9999px rgba(0, 0, 0, 0.5);
display: none;
position: fixed;
left: 65%;
top: 10%;
}
#popup1header {
padding: 10px;
cursor: move;
z-index: 10;
background-color: #aaa;
color: #fff;
}
#popup1 table {
border-collapse: collapse;
font-family: arial, sans-serif;
font-weight: bold;
font-size: xx-large;
text-align: center;
}
#popup1 colgroup {
border: solid medium;
}
#popup1 tbody {
border: solid medium;
}
#popup1 td {
border: solid thin;
width: 50px;
height: 50px;
color: #aaa;
}
#popup1 input {
border: 0px;
max-width: 35px;
font-family: arial, sans-serif;
font-weight: bold;
font-size: xx-large;
text-align: center;
}
</style>
<table id="sudoku">
<colgroup><col/><col/><col/></colgroup>
<colgroup><col/><col/><col/></colgroup>
<colgroup><col/><col/><col/></colgroup>
<TMPL_LOOP grid><tbody>
<TMPL_LOOP sudokuBand><tr><TMPL_LOOP sudokuRow><td/></TMPL_LOOP></tr>
</TMPL_LOOP></tbody></TMPL_LOOP>
</table>
</div>
<div class="popup" id="popup2">
<script type="text/javascript">
const puzzlecells = document.querySelectorAll('.gridstring');
puzzlecells.forEach(cell => {
cell.addEventListener('mouseenter', function (e) {showgrid(e, cell.parentElement.id)});
cell.addEventListener('mouseleave', function (e) {$('popup2').style.display = 'none';});
});
function showgrid(e, rowid) {
e = e || window.event;
if (e.target !== e.currentTarget) {
return;
}
e.preventDefault();
fillingivens(rowid, $('grid'), false);
$('popup2').style.display = 'block';
}
</script>
<style>
#popup2 {
padding: 3px;
background: #fff;
/* -webkit-box-shadow: 0px 0px 0px 9999px rgba(0, 0, 0, 0.5);
box-shadow: 0px 0px 0px 9999px rgba(0, 0, 0, 0.5); */
display: none;
position: fixed;
left: 35%;
top: 10%;
z-index: 15;
}
#popup2 table {
border-collapse: collapse;
font-family: arial, sans-serif;
font-weight: bold;
font-size: large;
text-align: center;
}
#popup2 colgroup {
border: solid 2px;
}
#popup2 tbody {
border: solid 2px;
}
#popup2 td {
border: solid thin;
width: 20px;
height: 20px;
color: #aaa;
}
</style>
<table id="grid">
<colgroup><col/><col/><col/></colgroup>
<colgroup><col/><col/><col/></colgroup>
( run in 2.679 seconds using v1.01-cache-2.11-cpan-364913b4093 )