1<!DOCTYPE html> 2 3<html lang="en"> 4 5<head> 6 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 8 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/> 9 10 <title>Multiplication Tables with times tables games</title> 11 <meta name="description" content="Come and learn your multiplication tables. Improve with the 5-step plan, the tempo test, multiplication games, printable worksheets and get the diploma." /> 12 <meta name="apple-mobile-web-app-capable" content="yes" /> 13 14 <meta property="og:description" content="Come and learn your multiplication tables. Improve with the 5-step plan, the tempo test, multiplication games, printable worksheets and get the diploma." /> 15 <meta property="og:image" content="https://cdn-t-1.bvkstatic.com/us/static/images/times-table.png" /> 16 <meta property="og:title" content="Multiplication Tables with times tables games" /> 17 <meta property="og:type" content="website" /> 18 <meta property="og:url" content="https://www.timestables.com/" /> 19 <!-- Favicons --> 20 <link rel="apple-touch-icon" sizes="57x57" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-57x57.png"> 21 <link rel="apple-touch-icon" sizes="114x114" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-114x114.png"> 22 <link rel="apple-touch-icon" sizes="72x72" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-72x72.png"> 23 <link rel="apple-touch-icon" sizes="144x144" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-144x144.png"> 24 <link rel="apple-touch-icon" sizes="60x60" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-60x60.png"> 25 <link rel="apple-touch-icon" sizes="120x120" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-120x120.png"> 26 <link rel="apple-touch-icon" sizes="76x76" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-76x76.png"> 27 <link rel="apple-touch-icon" sizes="152x152" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-152x152.png"> 28 <link rel="apple-touch-icon" sizes="180x180" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-180x180.png"> 29 <link rel="icon" type="image/png" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/favicon-192x192.png" sizes="192x192"> 30 <link rel="icon" type="image/png" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/favicon-160x160.png" sizes="160x160"> 31 <link rel="icon" type="image/png" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/favicon-96x96.png" sizes="96x96"> 32 <link rel="icon" type="image/png" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/favicon-16x16.png" sizes="16x16"> 33 <link rel="icon" type="image/png" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/favicon-32x32.png" sizes="32x32"> 34 <meta name="msapplication-TileColor" content="#ffffff"> 35 <meta name="msapplication-TileImage" content="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/mstile-144x144.png"> 36 <link rel="canonical" href="https://www.timestables.com/" /> 37 <link rel="alternate" hreflang="en" href="https://www.timestables.com/" /> 38� <link rel="alternate" hreflang="es" href="https://www.tablasdemultiplicar.com/" /> 39� <link rel="alternate" hreflang="pl" href="https://www.tabliczkamnożenia.pl/" /> 40� <link rel="alternate" hreflang="fr-FR" href="https://www.tablesdemultiplication.fr/" /> 41� <link rel="alternate" hreflang="it" href="https://www.tabelline.it/" /> 42� <link rel="alternate" hreflang="de-DE" href="https://www.einmaleins.de/" /> 43� <link rel="alternate" hreflang="nl-NL" href="https://www.tafeldiploma.nl/" /> 44� <link rel="alternate" hreflang="pt-BR" href="https://www.tabuadademultiplicar.com.br/" /> 45� <link rel="alternate" hreflang="tr" href="https://www.carpimtablosu.com/" /> 46� <link rel="alternate" hreflang="en-GB" href="https://www.timestables.co.uk/" /> 47� <link rel="alternate" hreflang="de-AT" href="https://www.einmaleins.at/" /> 48� <link rel="alternate" hreflang="de-CH" href="https://www.einmaleinslernen.ch/" /> 49� <link rel="alternate" hreflang="fr-CH" href="https://www.tabledemultiplication.ch/" /> 50� <link rel="alternate" hreflang="nl-BE" href="https://www.demaaltafels.be/" /> 51� <link rel="alternate" hreflang="pt-PT" href="https://www.tabuadas.pt/" /> 52� <link rel="alternate" hreflang="en-NZ" href="https://www.timestables.co.nz/" /> 53� <link rel="alternate" hreflang="no" href="https://www.gangetabellen.net/" /> 54� <link rel="alternate" hreflang="ro" href="https://www.tablainmultirii.ro/" /> 55� <link rel="alternate" hreflang="ms" href="https://www.sifirdarab.com/" /> 56� <link rel="alternate" hreflang="id" href="https://www.tabelperkalian.com/" /> 57� <link rel="alternate" hreflang="da" href="https://www.gangetabeller.dk/" /> 58� <link rel="alternate" hreflang="sv" href="https://www.multiplikationstabellen.se/" /> 59� <link rel="alternate" hreflang="fi" href="https://www.kertotaulut.com/" /> 60 61 <!-- Favicons --> 62 63 <!-- Less (use for development only 64 <link href="static/styles/style.less" rel="stylesheet/less" /> 65
65<script src="static/scripts/less-1.7.0.min.js" ></script>
65 66 /Less --> 67 <link rel="stylesheet" href="/assets/vendor/font-awesome/4.7.0/css/font-awesome.min.css?v=26955053"> 68 <link href="/assets/styles/log.css?v=a22bcb3e" rel="stylesheet" /> 69 <link href="/assets/styles/style.css?v=2cddf085" rel="stylesheet" /> 70<style> 71 72ul.steplist { 73 list-style-type: disc !important; 74 margin-left:23px; 75} 76</style> 77<style type="text/css"> 78.adslot { display:inline-block; width: 336px; height: 280px; } 79@media (min-width:320px) { .adslot { display:none; } #adtxt2{ display:none; } } 80@media (min-width:360px) and (orientation: portrait) { .adslot { display:none; } #adtxt2{ display:none; } } 81@media (min-width:604px) { .adslot { display:none; } #adtxt2{ display:none; } } 82@media (min-width:1025px) { .adslot { display:inline-block; width:336px; height: 280px; } #adtxt2{ display:block; }} 83 84.adslot2 { display:inline-block; width: 1000px; height: 90px; max-height:90px; } 85@media (min-width:320px) { .adslot2 { display:none; } .adtxt{ display:none; } } 86@media (min-width:360px) and (orientation: portrait) { .adslot2 { display:none; } .adtxt{ display:none; } } 87@media (min-width:740px) { .adslot2 { display:inline-block; width: 728px; height: 90px; } .adtxt{ display:block; } } 88@media (min-width:1000px) { .adslot2 { display:inline-block; width: 1000px; height: 90px; } .adtxt{ display:block; } } 89 90 91</style> 92<style type="text/css"> 93.board-wrap 94{ 95 width:25%; 96 padding:3px !important; 97} 98.exeImg 99{ 100 width: 32%; 101} 102 103@media screen and (max-width: 480px) { 104 105 .board-wrap 106 { 107 width:33.33%; 108 padding:3px !important; 109 } 110 .exeImg 111 { 112 width: 300px; 113 } 114 115} 116.prizetable{ 117 position:absolute; 118 bottom:-3px; 119 right:2px; 120 width:100px; 121 opacity:0.8; 122} 123.board:hover .prizetable{ 124 opacity:1; 125} 126 127.spelThumb{ 128color:#fff; 129font-weight:bold; 130position: relative; 131float: left; 132width: 176px; 133height: 137px; 134max-width:44%; 135margin-right: 20px; 136margin-bottom: 0px; 137margin-top:5px; 138font-size: 12px; 139text-align: center; 140transition: all 0.2s ease; 141} 142 143.spelThumb img{ 144 border-radius: 8px; 145 width: 100%; 146 box-shadow: 0 2px 2px 0 rgb(0 0 0 / 20%), 0 2px 6px 0 rgb(0 0 0 / 19%); 147} 148 149.spelThumb:hover .htext { 150 opacity: 1; 151} 152 153.spelThumb:hover .hinnertext{ 154 transition: all 0.3s ease; 155 transform: translateZ(0); 156 opacity:1; 157 158} 159#advak{ 160 float:left; 161 text-align:left; 162 margin-top:20px; 163 height:90px; 164} 165 166.htext { 167 width: 100%; 168 position: absolute; 169 bottom: 5px; 170 border-bottom-right-radius: 7px; 171 border-bottom-left-radius: 7px; 172 font-size: 12px; 173 min-height: 40px; 174 font-weight: bold; 175 left: 0px; 176 color: #fff; 177 background: #000202d4; 178 background: linear-gradient(transparent 25%,rgba(0,0,0,.65)); 179 height: 100%; 180 opacity: 0; 181 transition: all 0.3s ease; 182} 183.hinnertext{ 184 position:absolute; 185 transform: translate3d(0,10px,0); 186 left:0px; 187 width:100%; 188 transition: all 0.3s ease; 189 transition-delay: .1s; 190 bottom:10px; 191 opacity:0; 192} 193div.spelThumb:hover{ 194 transform: scale(1.04) translate3d(0,-4px,0); 195} 196 197.spelThumb a{ 198text-decoration: none; 199 200} 201 202</style>
203<script type="application/ld+json" class="saswp-schema-markup-output">{"@context":"https:\/\/schema.org","@type":"FAQPage","@id":"https:\/\/www.timestables.com\/#FAQ","mainEntity":[[{"@type":"Question","name":"How can I learn my times tables fast?","acceptedAnswer":{"@type":"Answer","text":"Learn them in chunks. Start with the easy times tables like 10, 2, and 5. Use methods like skip counting, adding and exercising daily for 15 minutes for a maximum long-term result. "}},{"@type":"Question","name":"What is the hardest times table in the world?","acceptedAnswer":{"@type":"Answer","text":"The 7 times table is the hardest to learn because 7 is a prime number, and so the last digit does not repeat itself until 10 times 7. The hardest times table question is 6 times 8."}},{"@type":"Question","name":"Which times table is the easiest?","acceptedAnswer":{"@type":"Answer","text":"The 10 times table is one of the easiest to learn. For a start, numbers in the 10 times table always end in a 0. And then the 5 and the 2 multiplication tables are also one of the easiest."}}]]}</script>
203
203<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7769276089683868"></script>
203 204 </head> 205 206<body class="grid"> 207 208 <header class="page-header clear" style="position:relative;"> 209 210 <div class="col-2-3 logo"> 211 212 <div class="col-2-5 module icon"> 213 <a href="https://www.timestables.com/"><img src="https://cdn-t-1.bvkstatic.com/us//static/images/icon-tafels-oefenen.png" title="Times tables Logo" alt="Times tables Logo" width="220" height="128" /></a> 214 </div> 215 216 <div class="col-3-5 module word " style="margin-top:5%;"> 217 <img src="https://cdn-t-1.bvkstatic.com/us//static/images/logo-timestables-com.png" alt="Timestables.com" title="Timestables.com" width="330" height="40" /> 218 <span class="payoff" style="color: #40650f;">Learn the multiplication tables here!</span> 219 </div> 220 221 </div> 222 <link rel="stylesheet" href="/assets/vendor/font-awesome/5.15.4/css/all.min.css?v=ecd507b3"> 223 224 <div id="loginArea"> 225 <a id="adultPortalLink" href="https://www.timestables.com/teacher-parent-portal/" class="adult-link"> 226 Teacher / Parent </a> 227 <div id="usrVak"></div> 228 </div> 229 230 <style> 231 #loginArea { 232 position: absolute; 233 top: 8px; 234 right: 15px; 235 display: flex; 236 gap: 6px; 237 align-items: center; 238 font-size: 13px; 239 z-index: 10000; 240 } 241 .header-btn { 242 display: inline-flex; 243 align-items: center; 244 gap: 5px; 245 padding: 6px 10px; 246 border-radius: 5px; 247 text-decoration: none; 248 font-weight: 600; 249 border: 2px solid; 250 } 251 .header-btn-green { 252 background: #f0f7ef; 253 color: #40650f; 254 border-color: #689662; 255 } 256 .header-btn-green:hover { 257 background: #e0eedc; 258 } 259 .header-btn-blue { 260 background: #e8f4fc; 261 color: #0e3c67; 262 border-color: #37a7e9; 263 } 264 .header-btn-blue:hover { 265 background: #d7edfb; 266 } 267 .header-btn i { 268 font-size: 14px; 269 } 270 #usrVak { 271 display: flex; 272 align-items: center; 273 gap: 6px; 274 } 275 #usrVak .loginLink { 276 display: inline-flex; 277 align-items: center; 278 gap: 5px; 279 padding: 6px 10px; 280 border-radius: 5px; 281 cursor: pointer; 282 font-weight: 600; 283 border: 2px solid; 284 } 285 #usrVak #loglink { 286 background: #e8f4fc; 287 color: #0e3c67; 288 border-color: #37a7e9; 289 } 290 #usrVak #loglink:hover { 291 background: #d7edfb; 292 } 293 #usrVak #reglink { 294 background: #37a7e9; 295 color: white; 296 border-color: #37a7e9; 297 } 298 #usrVak #reglink:hover { 299 background: #2d8bc4; 300 } 301 #usrVak .loginLink i { 302 font-size: 14px; 303 } 304 #usrVak .logged-in-info { 305 display: flex; 306 align-items: center; 307 gap: 8px; 308 padding: 4px 10px; 309 background: #f0f7ef; 310 border: 2px solid #689662; 311 border-radius: 5px; 312 color: #40650f; 313 font-weight: 600; 314 } 315 #usrVak .logged-in-info a { 316 color: #37a7e9; 317 } 318 .adult-link { 319 color: #666; 320 text-decoration: none; 321 font-size: 12px; 322 padding: 4px 8px; 323 border-radius: 3px; 324 transition: color 0.2s, background 0.2s; 325 } 326 .adult-link:hover { 327 color: #40650f; 328 background: #f0f7ef; 329 } 330 @media (max-width:900px) { 331 #loginArea { 332 position: relative; 333 top: auto; 334 right: auto; 335 float: right; 336 margin: 5px 10px; 337 flex-wrap: wrap; 338 justify-content: flex-end; 339 } 340 #usrVak .loginLink span { 341 display: none; 342 } 343 } 344 </style> 345 346 </header> 347 348 349 <div id="topAd" style="text-align:left;clear:both;padding:0 0 4px 0;margin-top:-10px;"> 350 <div class="adtxt" style="font-size:11px;line-height:12px;padding-left:14%;text-align:left;width:200px;">Advertisement</div> 351 <!-- Tafel-home-1[0] --> 352 <ins class="adsbygoogle adslot2" 353 data-ad-client="ca-pub-7769276089683868" 354 data-ad-slot="9814119650"> 355 </ins> 356 357 358 </div> 359 <div class="page-content clear"> 360 361 <div class="col-4-5"> 362 363 <div class="main-content module"> 364 365 <div class="wysiwyg" style="padding:0;"> 366 367 <h1 class="page-heading" style="margin:0 auto 1px;font-size:28px;">Learn your multiplication tables</h1> 368 369 <p>At Timestables.com you can easily practice all of your tables. The arithmetic problems are clear and simple so you can immediately get started on practicing your tables. Select one of the multiplication table you wish to practice from the list below and show what you can do on the speed test or printout great worksheets. </p> 370 371 </div> 372 <h2 style="text-align:left;margin-bottom:10px;">Which multiplication table do you want to learn?</h2> 373 <ul class="boards clear"> 374 375 <li class="board-wrap col-1-3"> 376 <a href="https://www.timestables.com/1-times-table.html" class="boardlink"> 377 <div class="board" style="padding:0;position:relative;"> 378 <div class="content" style="font-size:16px;padding:0;text-align:center;">1 times table</div> 379 <span class="prizetable"> 380 <span style="float:right;width:27px;" id="t1s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span> 381 382 <span style="float:right;width:17px;" id="t1s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 383 <span style="float:right;width:17px;" id="t1s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 384 <span style="float:right;width:17px;" id="t1s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 385 <span style="float:right;width:17px;" id="t1s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 386 </span> 387 </div> 388 </a> 389 </li> 390 <li class="board-wrap col-1-3"> 391 <a href="https://www.timestables.com/2-times-table.html" class="boardlink"> 392 <div class="board" style="padding:0;position:relative;"> 393 <div class="content" style="font-size:16px;padding:0;text-align:center;">2 times table</div> 394 <span class="prizetable"> 395 <span style="float:right;width:27px;" id="t2s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span> 396 397 <span style="float:right;width:17px;" id="t2s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 398 <span style="float:right;width:17px;" id="t2s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 399 <span style="float:right;width:17px;" id="t2s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 400 <span style="float:right;width:17px;" id="t2s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 401 </span> 402 </div> 403 </a> 404 </li> 405 <li class="board-wrap col-1-3"> 406 <a href="https://www.timestables.com/3-times-table.html" class="boardlink"> 407 <div class="board" style="padding:0;position:relative;"> 408 <div class="content" style="font-size:16px;padding:0;text-align:center;">3 times table</div> 409 <span class="prizetable"> 410 <span style="float:right;width:27px;" id="t3s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span> 411 412 <span style="float:right;width:17px;" id="t3s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 413 <span style="float:right;width:17px;" id="t3s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 414 <span style="float:right;width:17px;" id="t3s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 415 <span style="float:right;width:17px;" id="t3s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 416 </span> 417 </div> 418 </a> 419 </li> 420 <li class="board-wrap col-1-3"> 421 <a href="https://www.timestables.com/4-times-table.html" class="boardlink"> 422 <div class="board" style="padding:0;position:relative;"> 423 <div class="content" style="font-size:16px;padding:0;text-align:center;">4 times table</div> 424 <span class="prizetable"> 425 <span style="float:right;width:27px;" id="t4s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span> 426 427 <span style="float:right;width:17px;" id="t4s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 428 <span style="float:right;width:17px;" id="t4s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 429 <span style="float:right;width:17px;" id="t4s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 430 <span style="float:right;width:17px;" id="t4s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 431 </span> 432 </div> 433 </a> 434 </li> 435 <li class="board-wrap col-1-3"> 436 <a href="https://www.timestables.com/5-times-table.html" class="boardlink"> 437 <div class="board" style="padding:0;position:relative;"> 438 <div class="content" style="font-size:16px;padding:0;text-align:center;">5 times table</div> 439 <span class="prizetable"> 440 <span style="float:right;width:27px;" id="t5s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span> 441 442 <span style="float:right;width:17px;" id="t5s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 443 <span style="float:right;width:17px;" id="t5s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 444 <span style="float:right;width:17px;" id="t5s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 445 <span style="float:right;width:17px;" id="t5s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 446 </span> 447 </div> 448 </a> 449 </li> 450 <li class="board-wrap col-1-3"> 451 <a href="https://www.timestables.com/6-times-table.html" class="boardlink"> 452 <div class="board" style="padding:0;position:relative;"> 453 <div class="content" style="font-size:16px;padding:0;text-align:center;">6 times table</div> 454 <span class="prizetable"> 455 <span style="float:right;width:27px;" id="t6s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span> 456 457 <span style="float:right;width:17px;" id="t6s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 458 <span style="float:right;width:17px;" id="t6s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 459 <span style="float:right;width:17px;" id="t6s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 460 <span style="float:right;width:17px;" id="t6s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 461 </span> 462 </div> 463 </a> 464 </li> 465 <li class="board-wrap col-1-3"> 466 <a href="https://www.timestables.com/7-times-table.html" class="boardlink"> 467 <div class="board" style="padding:0;position:relative;"> 468 <div class="content" style="font-size:16px;padding:0;text-align:center;">7 times table</div> 469 <span class="prizetable"> 470 <span style="float:right;width:27px;" id="t7s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span> 471 472 <span style="float:right;width:17px;" id="t7s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 473 <span style="float:right;width:17px;" id="t7s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 474 <span style="float:right;width:17px;" id="t7s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 475 <span style="float:right;width:17px;" id="t7s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 476 </span> 477 </div> 478 </a> 479 </li> 480 <li class="board-wrap col-1-3"> 481 <a href="https://www.timestables.com/8-times-table.html" class="boardlink"> 482 <div class="board" style="padding:0;position:relative;"> 483 <div class="content" style="font-size:16px;padding:0;text-align:center;">8 times table</div> 484 <span class="prizetable"> 485 <span style="float:right;width:27px;" id="t8s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span> 486 487 <span style="float:right;width:17px;" id="t8s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 488 <span style="float:right;width:17px;" id="t8s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 489 <span style="float:right;width:17px;" id="t8s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 490 <span style="float:right;width:17px;" id="t8s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 491 </span> 492 </div> 493 </a> 494 </li> 495 <li class="board-wrap col-1-3"> 496 <a href="https://www.timestables.com/9-times-table.html" class="boardlink"> 497 <div class="board" style="padding:0;position:relative;"> 498 <div class="content" style="font-size:16px;padding:0;text-align:center;">9 times table</div> 499 <span class="prizetable"> 500 <span style="float:right;width:27px;" id="t9s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span> 501 502 <span style="float:right;width:17px;" id="t9s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 503 <span style="float:right;width:17px;" id="t9s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 504 <span style="float:right;width:17px;" id="t9s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 505 <span style="float:right;width:17px;" id="t9s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 506 </span> 507 </div> 508 </a> 509 </li> 510 <li class="board-wrap col-1-3"> 511 <a href="https://www.timestables.com/10-times-table.html" class="boardlink"> 512 <div class="board" style="padding:0;position:relative;"> 513 <div class="content" style="font-size:16px;padding:0;text-align:center;">10 times table</div> 514 <span class="prizetable"> 515 <span style="float:right;width:27px;" id="t10s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span> 516 517 <span style="float:right;width:17px;" id="t10s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 518 <span style="float:right;width:17px;" id="t10s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 519 <span style="float:right;width:17px;" id="t10s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 520 <span style="float:right;width:17px;" id="t10s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 521 </span> 522 </div> 523 </a> 524 </li> 525 <li class="board-wrap col-1-3"> 526 <a href="https://www.timestables.com/11-times-table.html" class="boardlink"> 527 <div class="board" style="padding:0;position:relative;"> 528 <div class="content" style="font-size:16px;padding:0;text-align:center;">11
528 times table</div> 529 <span class="prizetable"> 530 <span style="float:right;width:27px;" id="t11s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span> 531 532 <span style="float:right;width:17px;" id="t11s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 533 <span style="float:right;width:17px;" id="t11s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 534 <span style="float:right;width:17px;" id="t11s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 535 <span style="float:right;width:17px;" id="t11s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 536 </span> 537 </div> 538 </a> 539 </li> 540 <li class="board-wrap col-1-3"> 541 <a href="https://www.timestables.com/12-times-table.html" class="boardlink"> 542 <div class="board" style="padding:0;position:relative;"> 543 <div class="content" style="font-size:16px;padding:0;text-align:center;">12 times table</div> 544 <span class="prizetable"> 545 <span style="float:right;width:27px;" id="t12s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span> 546 547 <span style="float:right;width:17px;" id="t12s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 548 <span style="float:right;width:17px;" id="t12s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 549 <span style="float:right;width:17px;" id="t12s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 550 <span style="float:right;width:17px;" id="t12s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span> 551 </span> 552 </div> 553 </a> 554 </li> 555 556 </ul> 557 558 559 560 561 <h2 style="text-align:left;">Speed test and multiplication tables diploma.</h2> 562 <div class="wysiwyg" style="padding:0;"> 563 564 565 <a href="https://www.timestables.com/speed-test/"> 566 <img class="exeImg" src="https://cdn-t-1.bvkstatic.com/us/speed-test.png" alt="Speed test" /></a> 567 <a href="https://www.timestables.com/diploma/"> 568 <img class="exeImg" src="https://cdn-t-1.bvkstatic.com/us/tables-diploma.png" alt="Tables diploma" /></a> 569 <a href="https://www.timestables.com/100-seconds/"> 570 <img class="exeImg" src="https://cdn-t-1.bvkstatic.com/100-seconds.png" alt="100 seconds" /></a> 571 572 573 574 <br /> 575 </div> 576 577 578 579 580 581 582 <h2 style="text-align:left;">Multiplication games</h2> 583 584<a href="https://www.timestables.com/3x3-obby.html" style="color:#fff;"><div class="spelThumb" style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/obby.png" /><span class="htext"><span class="hinnertext">3x3 Obby</span></span></div></a><a href="https://www.timestables.com/3x3-mini-games.html" style="color:#fff;"><div class="spelThumb" style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/3x3-mini-games-updated.png" /><span class="htext"><span class="hinnertext">3x3 Mini Games</span></span></div></a><a href="https://www.timestables.com/3x3-speed-escape.html" style="color:#fff;"><div class="spelThumb" style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/3x3-escape-thumbnail-1.png" /><span class="htext"><span class="hinnertext">3x3 Speed Escape</span></span></div></a><a href="https://www.timestables.com/3x3-tsunami.html" style="color:#fff;"><div class="spelThumb" style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/tsunami-thumbnail.png" /><span class="htext"><span class="hinnertext">3x3 Tsunami</span></span></div></a><a href="https://www.timestables.com/3x3-dress-up.html" style="color:#fff;"><div class="spelThumb" style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/3x3-dress-up.png" /><span class="htext"><span class="hinnertext">3x3 Dress Up</span></span></div></a><a href="https://www.timestables.com/3x3-garden.html" style="color:#fff;"><div class="spelThumb" style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/3x3-garden.png" /><span class="htext"><span class="hinnertext">3x3 Garden</span></span></div></a><a href="https://www.timestables.com/panda-resort.html" style="color:#fff;"><div class="spelThumb" style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/panda-resort-updated.png" /><span class="htext"><span class="hinnertext">Panda Resort Game</span></span></div></a><a href="https://www.timestables.com/3x3-runner.html" style="color:#fff;"><div class="spelThumb" style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/3x3-runner-2.png" /><span class="htext"><span class="hinnertext">
5843x3 Runner</span></span></div></a><a href="https://www.timestables.com/spoinky.html" style="color:#fff;"><div class="spelThumb" style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/spoinky-thumb.png" /><span class="htext"><span class="hinnertext">Spoinky</span></span></div></a><a href="https://www.timestables.com/3x3-island.html" style="color:#fff;"><div class="spelThumb" style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/3x3-island-thumb.png" /><span class="htext"><span class="hinnertext">3x3 Island</span></span></div></a><a href="https://www.timestables.com/highway-times-tables.html" style="color:#fff;"><div class="spelThumb" style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/highway-thumb-2.png" /><span class="htext"><span class="hinnertext">Highway Times Tables</span></span></div></a><a href="https://www.timestables.com/multiplication-mage.html" style="color:#fff;"><div class="spelThumb" style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/mage-thumb.png" /><span class="htext"><span class="hinnertext">Multiplication Mage</span></span></div></a><a href="https://www.timestables.com/watermelon-times-tables.html" style="color:#fff;"><div class="spelThumb" style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/watermelon.png" /><span class="htext"><span class="hinnertext">Watermelon Times Tables</span></span></div></a><a href="https://www.timestables.com/sticky-tables.html" style="color:#fff;"><div class="spelThumb" style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/sticky-tables-3.png" /><span class="htext"><span class="hinnertext">Sticky Tables</span></span></div></a><a href="https://www.timestables.com/color-sprint.html" style="color:#fff;"><div class="spelThumb" style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/color-sprint.png" /><span class="htext"><span class="hinnertext">Color Sprint</span></span></div></a> 585 586 <br style="clear:both;" /> 587 588 <div style="text-align:left;float:left;margin-right:20px;"> 589 <h3>Play against other players!</h3> 590 <a style="color:#000;" href="https://www.timestables.com/multiplayer-speed-quiz/"> 591 <img class="exeImg" style="width:300px;border: 3px #9db2f1 solid; border-radius: 5px;" src="https://cdn-t-1.bvkstatic.com/us/multiplayer-speed-quiz.png" title="Multiplayer Speed Quiz" alt="Multiplayer Speed Quiz" /><br /> Multiplayer Speed Quiz</a> 592 </div> 593 594 <br style="clear:both;" /> 595 596 597 <br style="clear:both;" /> 598 <div class="wysiwyg"> 599 <p>Choose the table you want to practice from the following. First you can practice the multiplication facts in sequence and once you have got the hang of that you can practice all the sums in random order for each table. If you have forgotten any answers, just go back to the 'all tables in sequence' page and practice them again thoroughly before trying again.</p> 600 <p>Once you have got the hang of a number of tables you can select the speed test and choose the tables you want to practice getting quicker at. If you make a mistake, you came see what the right answer is at the end of the test. This will help you learn all of your tables. The speed test is good practice for getting your tables diploma. On the tables diploma you answer all the questions against one clock, and if you get all of them right you will get your tables diploma. There are two tables diplomas. The little diploma is made up of 30 questions. Your little diploma shows you can do the 1,2,3,4,5 and 10 times tables. For the big tables diploma you are given 40 questions which include all the tables from 1 to 12. </p> 601 <p>Learn the multiplication tables in an interactive way with the free math multiplication learning games for 2nd, 3rd, 4th and 5th grade. The game element in the times tables games make it even more fun learn.</p> </div> 602 603 604 605 606 607 <div class="wysiwyg"> 608 <img src="https://cdn-t-1.bvkstatic.com/us/multiplication-tables.png" alt="Multiplication tables" style="max-width:100%;" /> 609 <h2>Practice your multiplication tables</h2> 610 <img src="https://cdn-t-1.bvkstatic.com/us/static/images/times-table.png" alt="times table cloud" style="float:right;padding:3px;" /> 611 <p>Here you can find additional information about practicing multiplication tables at primary school. The 1 times table, 2 times table, 3 times table, 4 times table, 5 times table and 10 times table are the first times tables to be learned. The 6 times table, 7 times table, 8 times table, 9 times table, 11 times table, 12 times table and of course all the tables in random order are the next step. </p> 612 613<p>Not every child finds it easy to learn all the tables, so it is a good idea to keep on practicing them regularly after you learned them. There are a few tricks which make it easier to learn the tables and continue to master them, such as putting the smallest number first, which makes it easier for many children to answer correctly. For example 4 x 9 is easier to work out than 9 x 4. Switching the multiplication sum around makes it easier to answer. What also often helps is to use the tables you know
613well for answering the sums in the more difficult tables. One example of this is 6 x 7, which is often said to be tricky. If you do 5 x 7 first and then add 1 x 7 it is suddenly easier to answer. You can do this the other way round too. For instance with 4 x 7 you can do 5 x 7 first then subtract 1 x 7. </p> 614 615<p>Why do we put so much effort into learning tables? Well, the multiplication tables keep on coming up in the next primary school years and even when you're at secondary school. You don't see them as tables, but as part of bigger mathematical problems. And it isn't only at school, but in your everyday life it is useful to know your times tables well so you can quickly work things out, for instance when you are buying or selling vegetables on the market. If you have any questions, comments or ideas for Timestables.com, please use our contact form. We'd be glad to hear from you. </p> 616 617<h2>The 5-step plan</h2> 618<p> 619Learn the times tables with the 5-step plan. We developed an innovative five step plan to help pupils learn the times tables in an effective and efficient way. This method has been tested at several schools and is recommended by teachers. 620<br /> 621The steps are: 622<br /> 623</p> 624 625<ul class="steplist"> 626<li>Step 1a: View, read aloud and repeat. To get familiar with the table. </li> 627<li>Step 1b: Fill in your times tables answers in sequence and check if you got them all right. </li> 628<li>Step 2: Drag the correct answers to the questions. </li> 629<li>Step 3: Fill in your answers for the mixed questions and check if you got them all right. </li> 630<li>Step 4: Multiple choice questions will help you to improve by looking at the questions in a different way. </li> 631<li>Step 5: Proof your knowledge and get the diploma. </li> 632</ul> 633 634<p>When you finished the 5 steps you can play the memory game or exercise with the worksheet. Other way to train more are with the tempo test, the 1 minute test or to play the times tables games. </p><p> 635We advise to exercise daily for 15 minutes for maximum result. </p> 636<h2>Information for teachers, tutors and parents</h2> 637 638<p>Our times tables website is trusted by educators, parents, and tutors around the world to help children build strong multiplication skills. With powerful remote learning tools and digital classrooms, it's easy to integrate our platform into any learning setting from schools to home environments.</p> 639 640<p>We use gamification in learning to make math fun and motivating, encouraging students to stay engaged while they build confidence in their times tables. Whether you're part of a classroom or working one-on-one, our resources are designed for flexible, effective learning.</p> 641 642<p>Many tutors rely on our platform to support their math tutoring online and private tutoring services, thanks to its simple interface and adaptive practice features. It's also an excellent fit for families using a homeschooling curriculum, offering structure and variety across all multiplication topics.</p> 643 644<p>Our educational software is compatible with modern e-learning platforms and is often used alongside online courses and math programs for kids to enhance instruction. With easy access and proven results, our site is a valuable tool for anyone supporting a childâs math journey, helping to improve early math skills and achieve lasting math learning success.</p> 645 646<p>This website is optimized not only for desktop and laptop computers, but also for Apple devices (iPhone, iPad) and Android devices, including tablets. On mobile devices, our site functions like an app for a smooth and easy learning experience.</p> 647 648<p>Explore our features and see how weâre helping learners succeed!</p> 649 650 651 652<h2>Frequently Asked Questions</h2> 653<div style='margin-bottom:10px;'><strong>How can I learn my times tables fast?</strong><br />Learn them in chunks. Start with the easy times tables like 10, 2, and 5. Use methods like skip counting, adding and exercising daily for 15 minutes for a maximum long-term result. </div> 654<div style='margin-bottom:10px;'><strong>What is the hardest times table in the world?</strong><br />The 7 times table is the hardest to learn because 7 is a prime number, and so the last digit does not repeat itself until 10 times 7. The hardest times table question is 6 times 8.</div> 655<div style='margin-bottom:10px;'><strong>Which times table is the easiest?</strong><br />The 10 times table is one of the easiest to learn. For a start, numbers in the 10 times table always end in a 0. And then the 5 and the 2 multiplication tables are also one of the easiest.</div> 656<br /> 657 658 659 660 661<h2>Practice your time tables online</h2> 662<p>Multiplication tables are important and there are not many places where you can learn them quickly and easily, so we have come up with Timestables.com! Practicing your tables online is really easy at Timestables.com. The multiplication games are clear and simple so you can get started right away. Click on one of the tables to get started right away. Fill in the answers in the lines and when you've finished, click on 'check'. You will see right away which answers are correct and which are incorrect. You can also practice different times tables in one exercise so you can test whether you know them all.</p> 663<p>You can also practice the tables interactively with the free multiplication games. On the multiplication games page we now have an answer-dragging game and a table balloons game. </p> 664<p>Multiplication tables form the basis for the calculations that you do in the following years, so itâs important that you fully understand them. </p> 665 666<p> 667Do you want to practice more math? Go to <a href="https://www.mathdiploma.com/" style="color:#8c806e;" target="_blank">Mathdiploma.com</a> - Here you can practice addition, subtraction, multiplying, dividing and a lot more! <br /> 668</p> </div> 669 <span style="margin-left:20px;float:right;">
670 <a href='javascript:void((function()%7Bvar%20e=document.createElement('script');e.setAttribute('type','text/javascript');e.setAttribute('charset','UTF-8');e.setAttribute('src','https://assets.pinterest.com/js/pinmarklet.js?r='+Math.random()*99999999);document.body.appendChild(e)%7D)());'><img src="https://cdn-t-1.bvkstatic.com/us/static/images/pinit.png" alt="pin it"/></a> 671 </span> 672 <br style="clear:both;" /> 673 </div> 674 675 </div> 676 677 <aside class="col-1-5 sidebar"> 678 679 <div class="sidebar-trigger"> 680 <div class="fr button" > 681 <div class="icon"> 682 <div class="one"></div><div class="two"></div><div class="three"></div> 683 </div> 684 <div class="text">Menu</div> 685 </div> 686 </div> 687 688 <div class="module widget"> 689 <h3 class="heading">Menu</h3> 690 <ul class="nav"> <li><span class="arrow">âº</span> <a href="https://www.timestables.com/">Home</a></li> 691 <li><span class="arrow">âº</span> <a href="https://www.timestables.com/multiplication-games/">Multiplication games</a></li> 692 <li><span class="arrow">âº</span> <a href="https://www.timestables.com/speed-test/">Speed Test X</a></li> 693 <li><span class="arrow">âº</span> <a href="https://www.timestables.com/diploma/">Diploma</a></li> 694 695 <li><span class="arrow">âº</span> <a href="https://www.timestables.com/times-table-chart/">Multiplication chart</a></li> 696 697 <li><span class="arrow">âº</span> <a href="https://www.timestables.com/worksheets/">Worksheets</a></li> 698 <li><span class="arrow">âº</span> <a href="https://www.timestables.com/trophy-cabinet/">Trophy Cabinet</a></li> 699 <li><span class="arrow">âº</span> <a href="https://www.timestables.com/contact/">Contact</a></li> 700 </ul> 701 </div> 702 703 </aside> 704 705 </div> 706 707 <footer class="page-footer"> 708 <div class="col-1-1 copyright"> 709 <div class="module"> <p>© Copyright 2026 Timestables.com - <a href="https://www.timestables.com/privacy/">Disclaimer and Privacy Statement</a> - <a href="https://www.timestables.com/about-us/">About us</a> - <a href="https://www.timestables.com/cookies/">Cookies</a></p> 710 </div> 711 <div class="footer-lang-menu" style="text-align:center;padding:5px 0;position:relative;"> 712 <span onclick="catClick();" onmouseover="catBoxOver();" onmouseout="catBoxOut();" class="vlagB" style="cursor:pointer;display:inline-block;">- English (US)</span> 713 <div onmouseover="resCatOver();" onmouseout="resCatOut();" id="resultC" class="vlagV" style="display:none;position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background:#fff;border:1px solid #ccc;padding:8px 12px;z-index:999;white-space:nowrap;"> 714 - <a style="margin-right:3px;" href="https://www.timestables.com/">English (US)</a><br /> 715- <a style="margin-right:3px;" href="https://www.tablasdemultiplicar.com/">Español</a><br /> 716- <a style="margin-right:3px;" href="https://www.tabliczkamnożenia.pl/">Polski</a><br /> 717- <a style="margin-right:3px;" href="https://www.tablesdemultiplication.fr/">Français (FR)</a><br /> 718- <a style="margin-right:3px;" href="https://www.tabelline.it/">Italiano</a><br /> 719- <a style="margin-right:3px;" href="https://www.einmaleins.de/">Deutsch (DE)</a><br /> 720- <a style="margin-right:3px;" href="https://www.tafeldiploma.nl/">Nederlands (NL)</a><br /> 721- <a style="margin-right:3px;" href="https://www.tabuadademultiplicar.com.br/">Português (Brasil)</a><br /> 722- <a style="margin-right:3px;" href="https://www.carpimtablosu.com/">Türkçe</a><br /> 723- <a style="margin-right:3px;" href="https://www.timestables.co.uk/">English (UK)</a><br /> 724- <a style="margin-right:3px;" href="https://www.einmaleins.at/">Deutsch (AT)</a><br /> 725- <a style="margin-right:3px;" href="https://www.einmaleinslernen.ch/">Deutsch (CH)</a><br /> 726- <a style="margin-right:3px;" href="https://www.tabledemultiplication.ch/">Français (CH)</a><br /> 727- <a style="margin-right:3px;" href="https://www.demaaltafels.be/">Nederlands (BE)</a><br /> 728- <a style="margin-right:3px;" href="https://www.tabuadas.pt/">Português (PT)</a><br /> 729- <a style="margin-right:3px;" href="https://www.timestables.co.nz/">English (NZ)</a><br /> 730- <a style="margin-right:3px;" href="https://www.gangetabellen.net/">Norsk</a><br /> 731- <a style="margin-right:3px;" href="https://www.tablainmultirii.ro/">RomânÄ</a><br /> 732- <a style="margin-right:3px;" href="https://www.sifirdarab.com/">Bahasa Melayu</a><br /> 733- <a style="margin-right:3px;" href="https://www.tabelperkalian.com/">Bahasa Indonesia</a><br /> 734- <a style="margin-right:3px;" href="https://www.gangetabeller.dk/">Dansk</a><br /> 735- <a style="margin-right:3px;" href="https://www.multiplikationstabellen.se/">Svenska</a><br /> 736- <a style="margin-right:3px;" href="https://www.kertotaulut.com/">Suomi</a><br /> </div> 737 </div> 738 </div> 739 </footer> 740 741
742<script src="/assets/vendor/jquery/3.6.0/jquery.min.js?v=8fb8fee4"></script>
vendor: 1 bytes, line 742
742
743<script> 744var catShow = false; 745var catOver = false; 746var catBoxOverBool = false; 747var timeoutFired = false; 748function catClick(){ 749 if(!catShow){ 750 $('#resultC').show(); 751 catShow = true; 752 } else { 753 $('#resultC').hide(); 754 catShow = false; 755 } 756} 757function resCatOver(){ catOver = true; } 758function resCatOut(){ 759 catOver = false; 760 if(catBoxOverBool == false){ 761 setTimeout(function(){sluitResC()},50); 762 } 763} 764function sluitResC(){ 765 if(catBoxOverBool == false && catOver == false){ 766 $('#resultC').hide(); 767 catShow = false; 768 } 769} 770function openResC(){ 771 if(catBoxOverBool == true && catShow == false){ 772 $('#resultC').show(); 773 catShow = true; 774 } 775} 776function catBoxOver(){ 777 catBoxOverBool = true; 778 if(catShow == false){ 779 timeoutFired = true; 780 setTimeout(function(){openResC()},1000); 781 } 782} 783function catBoxOut(){ 784 catBoxOverBool = false; 785 if(catOver == false){ 786 setTimeout(function(){sluitResC()},50); 787 } 788} 789 790window.dataLayer = window.dataLayer || []; 791function gtag(){dataLayer.push(arguments);} 792 793$(document).ready(function($){ 794 795 796var t=setInterval(mainLoop,100); 797$(window).on("unload", function(e) {clearInterval(t); console.log("Handler for .unload() called."); return ""; }); 798 799function mainLoop(){ 800 // Pages without the login header (e.g. contact) never define loginChecked; 801 // treat those as a guest visit instead of throwing on every tick. 802 if(typeof loginChecked === 'undefined' || loginChecked) 803 { 804 clearInterval(t); 805 var loggedIn = (window.loggedIn === true); 806 console.log("login is checked!"); 807 console.log("checked login is: "+loggedIn); 808 809 (function(){ 810 var s = document.createElement('script'); 811 s.async = true; 812 s.src = 'https://www.googletagmanager.com/gtag/js?id=UA-57797082-7'; 813 document.head.appendChild(s); 814 })(); 815 gtag('js', new Date()); 816 console.log("Analytics:"+loggedIn); 817 gtag('set', 'user_properties', { login: loggedIn ? '1' : '0' }); 818 gtag('config', 'UA-57797082-7', { anonymize_ip: true }); 819 gtag('config', 'UA-57797082-21', { anonymize_ip: true }); 820 } 821 else 822 { 823 //console.log("Loop loop checked"); 824 } 825 826} 827 828function setCookieIpad(name,value,days) { 829 var expires = ""; 830 if (days) { 831 var date = new Date(); 832 date.setTime(date.getTime() + (days*24*60*60*1000)); 833 expires = "; expires=" + date.toUTCString(); 834 } 835 document.cookie = name + "=" + (value || "") + expires + "; path=/"; 836} 837function getCookieIpad(name) { 838 var nameEQ = name + "="; 839 var ca = document.cookie.split(';'); 840 for(var i=0;i < ca.length;i++) { 841 var c = ca[i]; 842 while (c.charAt(0)==' ') c = c.substring(1,c.length); 843 if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 844 } 845 return null; 846} 847function eraseCookieIpad(name) { 848 document.cookie = name+'=; Max-Age=-99999999; path=/'; 849} 850 851if(navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1) 852{ 853 if(!getCookieIpad('isIpad')=='1') 854 { 855 setCookieIpad('isIpad','1',365); 856 } 857} 858else 859{ 860 eraseCookieIpad('isIpad'); 861} 862 863 864}); 865 866</script>
866 867<!-- Student Login Modal --> 868<div id="logVak" class="cd-popup"> 869 <div class="cd-popup-container"> 870 <div class="modal-header"> 871 <h3>Student Login</h3> 872 <p>Log in to save your progress</p> 873 </div> 874 <form id="logForm" action="#" method="post"> 875 <div class="modal-body"> 876 <div class="form-group"> 877 <label for="lUserName">Username:</label> 878 <input type="text" required id="lUserName" autocapitalize="none" name="lUserName" /> 879 </div> 880 <div class="form-group"> 881 <label for="lPassword">Password:</label> 882 <input type="password" required id="lPassword" name="lPassword" autocapitalize="none" autocorrect="off" autocomplete="off" spellcheck="false" /> 883 </div> 884 <span class="error-text" id="errorLogText"></span> 885 </div> 886 <input type="submit" value="sbmt" style="visibility:hidden;position:absolute;" /> 887 <div class="modal-footer"> 888 <button type="button" id="logButton" class="btn-primary">Login</button> 889 </div> 890 </form> 891 <div class="modal-alt"> 892 <p>Teacher or parent?<br /> 893 <a href="#" id="switchToAdultLogin">Click here to log in →</a></p> 894 <p style="margin:8px 0 0;">No account yet?<br /> 895 <a href="#" id="studentSwitchToSignup">Sign up for free</a></p> 896 </div> 897 <a href="#0" class="cd-popup-close img-replace"></a> 898 </div> 899</div> 900 901<!-- Teacher/Parent Login Modal --> 902<div id="adultLogVak" class="cd-popup"> 903 <div class="cd-popup-container"> 904 <div class="modal-header modal-header-green"> 905 <h3>Teacher / Parent Login</h3> 906 <p>Manage your students</p> 907 </div> 908 909 <div class="role-tabs"> 910 <button type="button" class="role-tab active" data-role="teacher">Teacher</button> 911 <button type="button" class="role-tab" data-role="parent">Parent</button> 912 </div> 913 914 <form id="adultLogForm" action="#" method="post"> 915 <input type="hidden" id="adultLoginRole" name="role" value="teacher" /> 916 <div class="modal-body"> 917 <div class="form-group"> 918 <label for="adultEmail">E-mail</label> 919 <input type="email" required id="adultEmail" name="adultEmail" /> 920 </div> 921 <div class="form-group"> 922 <label for="adultPassword">Password:</label> 923 <input type="password" required id="adultPassword" name="adultPassword" /> 924 </div> 925 <span class="error-text" id="errorAdultLogText"></span> 926 <p style="margin:8px 0 0;text-align:right;"><a href="https://www.timestables.com/forgot-password.php?type=teacher" id="adultLostPassLink" style="font-size:13px;color:#7f8c9b;text-decoration:none;">Lost password?</a></p> 927 </div> 928 <input type="submit" value="sbmt" style="visibility:hidden;position:absolute;" /> 929 <div class="modal-footer"> 930 <button type="button" id="adultLogButton" class="btn-primary btn-green">Login</button> 931 </div> 932 </form> 933 934 <div class="modal-alt"> 935 <p>No account yet? <a href="#" id="switchToSignup">Sign up for free</a></p> 936 <a href="#" id="backToStudentLogin">← Back to student login</a> 937 </div> 938 <a href="#0" class="cd-popup-close img-replace"></a> 939 </div> 940</div> 941 942<!-- Sign Up Role Selection Modal --> 943<div id="regVak" class="cd-popup"> 944 <div class="cd-popup-container"> 945 <div class="modal-header"> 946 <h3>Create a Free Account</h3> 947 <p>Choose your role</p> 948 </div> 949 950 <div class="modal-body"> 951 <div class="role-card" id="selectTeacher"> 952 <span class="role-icon">👩‍🏫</span> 953 <div class="role-info"> 954 <strong>I'm a teacher</strong> 955 <span>Create classes and track your students' progress</span> 956 </div> 957 <span class="role-arrow">→</span> 958 </div> 959 <div class="role-card" id="selectParent"> 960 <span class="role-icon">👨‍👩‍👧</span> 961 <div class="role-info"> 962 <strong>I'm a parent</strong> 963 <span>Create accounts for your children</span> 964 </div> 965 <span class="role-arrow">→</span> 966 </div> 967 968 <div class="info-box"> 969 Students: ask your teacher or parent to create an account for you. </div> 970 </div> 971 972 <div class="modal-alt"> 973 <a href="#" id="backToLoginFromReg">← Already have an account? Log in</a> 974 </div> 975 <a href="#0" class="cd-popup-close img-replace"></a> 976 </div> 977</div> 978 979<!-- Registration Form Modal --> 980<div id="regFormVak" class="cd-popup"> 981 <div class="cd-popup-container"> 982 <div class="modal-header" id="regHeader"> 983 <h3 id="regFormTitle">Teacher Registration</h3> 984 <p id="regFormSubtitle">Create your account</p> 985 </div> 986 987 <form id="regForm" action="javascript:void(0);"> 988 <input type="hidden" id="regRole" name="regRole" value="teacher" /> 989 <div class="modal-body"> 990 <div class="form-row"> 991 <div class="form-group"> 992 <label for="regFirstName">First name</label> 993 <input type="text" required id="regFirstName" name="firstName" /> 994 </div> 995 <div class="form-group"> 996 <label for="regSurName">Last name</label> 997 <input type="text" required id="regSurName" name="surName" /> 998 </div> 999 </div> 1000 <div class="form-group"> 1001 <label for="regEmail">E-mail</label> 1002 <input type="email" required id="regEmail" name="email" /> 1003 </div> 1004 <div class="form-group"> 1005 <label for="regPassword">Password:</label> 1006 <input type="password" required id="regPassword" name="password" placeholder="Min. 6 characters" /> 1007 </div> 1008 <div class="form-group"> 1009 <label for="regPassword2">Please re-enter your password:</label> 1010 <input type="password" required id="regPassword2" name="password2" /> 1011 </div> 1012 <span class="error-text" id="errorRegText"></span> 1013 </div> 1014 </form> 1015 1016 <div class="modal-footer modal-footer-split"> 1017 <button type="button" id="regBackButton" class="btn-secondary">← Back</button> 1018 <button type="button" id="regButton" class="btn-primary">Create Account</button> 1019 </div> 1020 <a href="#0" class="cd-popup-close img-replace"></a> 1021 </div> 1022</div> 1023 1024<style> 1025/* Modal Position - higher on screen */ 1026.cd-popup-container { 1027 margin: 2em auto !important; 1028 max-width: 380px; 1029} 1030 1031@media only screen and (min-width: 768px) { 1032 .cd-popup-container { 1033 margin: 3em auto !important; 1034 } 1035} 1036 1037/* log.css pads every .cd-popup-container p (legacy message popups); 1038 the redesigned modals size their own paragraphs */ 1039.cd-popup-container .modal-header p, 1040.cd-popup-container .modal-body p, 1041.cd-popup-container .modal-alt p { 1042 padding: 0; 1043} 1044 1045/* Modal Header */ 1046.modal-header { 1047 background: #37a7e9; 1048 color: white; 1049 padding: 18px 20px; 1050 text-align: center; 1051 border-radius: 0.25em 0.25em 0 0; 1052} 1053 1054.modal-header-green { 1055 background: #689662; 1056} 1057 1058.modal-header h3 { 1059 margin: 0 0 4px; 1060 font-size: 20px; 1061 font-weight: 700; 1062 /* explicit: game.css has a stray global h2,h3 color rule that would 1063 otherwise repaint the heading grey on pages that load it */ 1064 color: #fff; 1065} 1066 1067.modal-header p { 1068 margin: 0; 1069 font-size: 13px; 1070 opacity: 0.9; 1071 color: #fff; 1072} 1073 1074/* Modal Body */ 1075.modal-body { 1076 padding: 20px; 1077 background: #fff; 1078} 1079 1080/* Form Elements */ 1081.form-group { 1082 margin-bottom: 14px; 1083 text-align: left; 1084} 1085 1086.form-group label { 1087 display: block; 1088 font-size: 13px; 1089 font-weight: 600; 1090 color: #333; 1091 margin-bottom: 4px; 1092} 1093 1094.form-group input { 1095 width: 100%; 1096 padding: 10px 12px; 1097 border: 2px solid #ddd; 1098 border-radius: 6px; 1099 font-size: 15px; 1100 box-sizing: border-box; 1101} 1102 1103.form-group input:focus { 1104 border-color: #37a7e9; 1105 outline: none; 1106} 1107 1108.form-row { 1109 display: flex; 1110 gap: 12px; 1111} 1112 1113.form-row .form-group { 1114 flex: 1; 1115} 1116 1117.error-text { 1118 color: #d32f2f; 1119 font-size: 13px; 1120 display: block; 1121} 1122 1123/* Modal Footer */ 1124.modal-footer { 1125 padding: 0 20px 20px; 1126 background: #fff; 1127} 1128 1129.modal-footer-split { 1130 display: flex; 1131 gap: 10px; 1132} 1133 1134/* Buttons */ 1135.btn-primary, .btn-secondary { 1136 width: 100%; 1137 padding: 12px; 1138 border: none; 1139 border-radius: 6px; 1140 font-size: 15px; 1141 font-weight: 600; 1142 cursor: pointer; 1143} 1144 1145.btn-primary { 1146 background: #37a7e9; 1147 color: white; 1148} 1149 1150.btn-primary:hover { 1151 background: #2d8bc4; 1152} 1153 1154.btn-primary.btn-green { 1155 background: #689662; 1156} 1157 1158.btn-primary.btn-green:hover { 1159 background: #567a51; 1160} 1161 1162.btn-secondary { 1163 background: #f5f5f5; 1164 color: #333; 1165 border: 2px solid #ddd; 1166} 1167 1168.btn-secondary:hover { 1169 background: #eee; 1170} 1171 1172/* Modal Alt/Footer Links */ 1173.modal-alt { 1174 padding: 14px 20px; 1175 background: #f5f5f5; 1176 text-align: center; 1177 font-size: 13px; 1178 border-radius: 0 0 0.4em 0.4em; 1179} 1180 1181.modal-alt p { 1182 margin: 0 0 6px; 1183 color: #666; 1184} 1185 1186.modal-alt a { 1187 color: #37a7e9; 1188 text-decoration: none; 1189 font-weight: 600; 1190} 1191 1192.modal-alt a:hover { 1193 text-decoration: underline; 1194} 1195 1196/* Role Tabs */ 1197.role-tabs {
1198 display: flex; 1199 background: #fff; 1200 padding: 15px 20px 0; 1201 gap: 8px; 1202} 1203 1204.role-tab { 1205 flex: 1; 1206 padding: 10px; 1207 border: 2px solid #ddd; 1208 border-radius: 6px; 1209 background: #fff; 1210 font-size: 14px; 1211 font-weight: 600; 1212 cursor: pointer; 1213 color: #666; 1214} 1215 1216.role-tab:hover { 1217 border-color: #689662; 1218} 1219 1220.role-tab.active { 1221 border-color: #689662; 1222 background: #f0f7ef; 1223 color: #40650f; 1224} 1225 1226/* Role Cards */ 1227.role-card { 1228 display: flex; 1229 align-items: center; 1230 padding: 14px; 1231 border: 2px solid #ddd; 1232 border-radius: 8px; 1233 cursor: pointer; 1234 margin-bottom: 10px; 1235 background: #fff; 1236} 1237 1238.role-card:hover { 1239 border-color: #37a7e9; 1240 background: #f5fafd; 1241} 1242 1243.role-card .role-icon { 1244 font-size: 28px; 1245 margin-right: 12px; 1246} 1247 1248.role-card .role-info { 1249 flex: 1; 1250 text-align: left; 1251} 1252 1253.role-card .role-info strong { 1254 display: block; 1255 font-size: 15px; 1256 color: #333; 1257} 1258 1259.role-card .role-info span { 1260 font-size: 12px; 1261 color: #666; 1262} 1263 1264.role-card .role-arrow { 1265 color: #999; 1266 font-size: 18px; 1267} 1268 1269.role-card:hover .role-arrow { 1270 color: #37a7e9; 1271} 1272 1273/* Info Box */ 1274.info-box { 1275 background: #fff8e1; 1276 border: 1px solid #ffe082; 1277 border-radius: 6px; 1278 padding: 10px 12px; 1279 font-size: 12px; 1280 color: #f57c00; 1281 margin-top: 5px; 1282} 1283 1284/* Close Button */ 1285.cd-popup-container .cd-popup-close { 1286 position: absolute; 1287 top: 10px; 1288 right: 10px; 1289 width: 28px; 1290 height: 28px; 1291 background: rgba(0,0,0,0.2); 1292 border-radius: 50%; 1293 cursor: pointer; 1294} 1295 1296.cd-popup-container .cd-popup-close::before, 1297.cd-popup-container .cd-popup-close::after { 1298 content: ''; 1299 position: absolute; 1300 top: 50%; 1301 left: 50%; 1302 width: 14px; 1303 height: 2px; 1304 background: #fff; 1305 margin-left: -7px; 1306 margin-top: -1px; 1307} 1308 1309.cd-popup-container .cd-popup-close::before { 1310 transform: rotate(45deg); 1311} 1312 1313.cd-popup-container .cd-popup-close::after { 1314 transform: rotate(-45deg); 1315} 1316 1317.cd-popup-container .cd-popup-close:hover { 1318 background: rgba(0,0,0,0.4); 1319} 1320 1321/* Responsive */ 1322@media (max-width: 480px) { 1323 .cd-popup-container { 1324 width: 95%; 1325 margin: 1em auto !important; 1326 } 1327 1328 .form-row { 1329 flex-direction: column; 1330 gap: 0; 1331 } 1332} 1333 1334/* User Dropdown Menu */ 1335.user-dropdown { 1336 position: relative; 1337 display: inline-block; 1338} 1339 1340.user-dropdown-toggle { 1341 display: flex; 1342 align-items: center; 1343 gap: 8px; 1344 padding: 6px 12px; 1345 background: #f0f7ef; 1346 border: 2px solid #689662; 1347 border-radius: 6px; 1348 cursor: pointer; 1349 font-size: 13px; 1350 font-weight: 600; 1351 color: #40650f; 1352 font-family: inherit; 1353} 1354 1355.user-dropdown-toggle:hover { 1356 background: #e0eedc; 1357} 1358 1359.user-dropdown.open .user-dropdown-toggle { 1360 border-bottom-left-radius: 0; 1361 border-bottom-right-radius: 0; 1362} 1363 1364.user-dropdown-toggle .user-stats { 1365 display: flex; 1366 gap: 8px; 1367} 1368 1369.user-dropdown-toggle .stat { 1370 display: flex; 1371 align-items: center; 1372 gap: 3px; 1373} 1374 1375.user-dropdown-toggle .stat img { 1376 height: 16px; 1377 vertical-align: middle; 1378} 1379 1380.user-dropdown-toggle .user-name { 1381 max-width: 100px; 1382 overflow: hidden; 1383 text-overflow: ellipsis; 1384 white-space: nowrap; 1385} 1386 1387.user-dropdown-toggle i.fa-chevron-down { 1388 font-size: 10px; 1389 transition: transform 0.2s; 1390} 1391 1392.user-dropdown.open .user-dropdown-toggle i.fa-chevron-down { 1393 transform: rotate(180deg); 1394} 1395 1396.user-dropdown-menu { 1397 display: none; 1398 position: absolute; 1399 top: 100%; 1400 right: 0; 1401 min-width: 100%; 1402 background: #fff; 1403 border: 2px solid #689662; 1404 border-top: none; 1405 border-radius: 0 0 6px 6px; 1406 box-shadow: 0 4px 12px rgba(0,0,0,0.15); 1407 z-index: 1000; 1408} 1409 1410.user-dropdown.open .user-dropdown-menu { 1411 display: block; 1412} 1413 1414.dropdown-item { 1415 display: flex; 1416 align-items: center; 1417 gap: 8px; 1418 padding: 10px 14px; 1419 color: #333; 1420 text-decoration: none; 1421 font-size: 13px; 1422 font-weight: 500; 1423 white-space: nowrap; 1424} 1425 1426.dropdown-item:hover { 1427 background: #f5f5f5; 1428} 1429 1430.dropdown-item i { 1431 width: 16px; 1432 text-align: center; 1433 color: #689662; 1434} 1435 1436.dropdown-item-logout { 1437 border-top: 1px solid #eee; 1438} 1439 1440.dropdown-item-logout i { 1441 color: #d32f2f; 1442} 1443 1444.dropdown-item-logout:hover { 1445 background: #fff5f5; 1446} 1447 1448@media (max-width: 900px) { 1449 .user-dropdown-toggle .user-name { 1450 display: none; 1451 } 1452 .user-dropdown-toggle .user-stats { 1453 gap: 6px; 1454 } 1455} 1456 1457@media (max-width: 500px) { 1458 .user-dropdown-toggle .stat span { 1459 display: none; 1460 } 1461} 1462 1463/* Task Badge (inside dropdown menu) */ 1464.task-badge { 1465 background: #e53935; 1466 color: white; 1467 font-size: 11px; 1468 font-weight: 700; 1469 padding: 2px 6px; 1470 border-radius: 10px; 1471 margin-left: auto; 1472} 1473 1474/* Task notification dot (on header toggle button) */ 1475.header-task-dot { 1476 position: absolute; 1477 top: -4px; 1478 right: -4px; 1479 width: 10px; 1480 height: 10px; 1481 background: #e53935; 1482 border-radius: 50%; 1483 border: 2px solid white; 1484 box-shadow: 0 1px 3px rgba(0,0,0,0.3); 1485 z-index: 1; 1486} 1487 1488/* Shake badge when menu opens with new tasks */ 1489@keyframes badgeShake { 1490 0%, 100% { transform: translateX(0); } 1491 20% { transform: translateX(-3px); } 1492 40% { transform: translateX(3px); } 1493 60% { transform: translateX(-2px); } 1494 80% { transform: translateX(2px); } 1495} 1496#myTasksLink .task-badge.shake { 1497 animation: badgeShake 0.5s ease-in-out; 1498} 1499 1500/* XP Level Badge (in header button) */ 1501.xp-level-badge-header { 1502 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 1503 color: white; 1504 font-size: 11px; 1505 font-weight: 700; 1506 padding: 4px 10px; 1507 border-radius: 12px; 1508 white-space: nowrap; 1509 margin-left: auto; 1510} 1511 1512/* User Name in Dropdown */ 1513.dropdown-user-name { 1514 padding: 10px 14px; 1515 font-weight: 700; 1516 color: #2C3E50; 1517 border-bottom: 1px solid #eee; 1518 font-size: 14px; 1519} 1520.dropdown-user-name i { 1521 color: #7F8C8D; 1522 margin-right: 4px; 1523} 1524 1525/* XP Header in Dropdown */ 1526.dropdown-xp-header { 1527 padding: 12px 14px; 1528 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 1529 border-bottom: 1px solid #eee; 1530} 1531 1532.xp-title-row { 1533 display: flex; 1534 justify-content: space-between; 1535 align-items: center; 1536 margin-bottom: 6px; 1537} 1538 1539.xp-title { 1540 color: white; 1541 font-size: 12px; 1542 font-weight: 700; 1543} 1544 1545.xp-amount { 1546 color: #FFD700; 1547 font-size: 11px; 1548 font-weight: 700; 1549} 1550 1551.xp-bar-dropdown { 1552 height: 8px; 1553 background: rgba(0,0,0,0.2); 1554 border-radius: 4px; 1555 overflow: hidden; 1556 margin-bottom: 4px; 1557} 1558 1559.xp-bar-fill-dropdown { 1560 height: 100%; 1561 background: linear-gradient(90deg, #FFD700 0%, #FFA500 100%); 1562 border-radius: 4px; 1563 transition: width 0.5s ease-out; 1564} 1565 1566.xp-progress-text { 1567 color: rgba(255,255,255,0.8); 1568 font-size: 10px; 1569 text-align: center; 1570} 1571 1572/* Dashboard link highlight */ 1573.dropdown-item-dashboard { 1574 background: #f8f4ff; 1575} 1576 1577.dropdown-item-dashboard i { 1578 color: #667eea; 1579} 1580 1581.dropdown-item-dashboard:hover { 1582 background: #efe8ff; 1583} 1584 1585@media (max-width: 600px) { 1586 .xp-bar-mini { 1587 display: none; 1588 } 1589 .xp-level-badge { 1590 font-size: 9px; 1591 padding: 2px 6px; 1592 } 1593} 1594 1595/* Student Tasks Modal */ 1596.tasks-modal-content { 1597 padding: 10px 0; 1598} 1599 1600.tasks-empty { 1601 text-align: center; 1602 padding: 30px 20px; 1603 color: #689662; 1604} 1605 1606.tasks-empty i { 1607 font-size: 48px; 1608 margin-bottom: 12px; 1609 opacity: 0.7; 1610} 1611 1612.tasks-empty p { 1613 font-size: 15px; 1614 margin: 0; 1615} 1616 1617.tasks-list { 1618 list-style: none; 1619 margin: 0; 1620 padding: 0; 1621} 1622 1623.task-item { 1624 display: flex; 1625 align-items: center; 1626 justify-content: space-between; 1627 padding: 14px 16px; 1628 border-bottom: 1px solid #eee; 1629 gap: 12px; 1630} 1631 1632.task-item:last-child { 1633 border-bottom: none; 1634} 1635 1636.task-info { 1637 flex: 1; 1638 min-width: 0; 1639} 1640 1641.task-info strong { 1642 display: block; 1643 font-size: 14px; 1644 color: #333; 1645 margin-bottom: 4px; 1646} 1647 1648.task-info .task-type { 1649 font-size: 12px; 1650 color: #888; 1651} 1652 1653.task-start-btn {
1654 display: inline-flex; 1655 align-items: center; 1656 gap: 6px; 1657 padding: 8px 16px; 1658 background: #689662; 1659 color: white; 1660 border-radius: 6px; 1661 text-decoration: none; 1662 font-size: 13px; 1663 font-weight: 600; 1664 white-space: nowrap; 1665 transition: background 0.2s; 1666} 1667 1668.task-start-btn:hover { 1669 background: #567d51; 1670 color: white; 1671} 1672 1673.task-start-btn i { 1674 font-size: 11px; 1675} 1676</style> 1677
1677<script> 1678function fixIos() { 1679 var ua = window.navigator.userAgent; 1680 var iOS = !!ua.match(/iP(ad|hone)/i); 1681 var iOS11 = /OS 11_(\d{1,2})/.test(ua); 1682 if (iOS && iOS11) { 1683 $("body").addClass("iosBugFixCaret"); 1684 } 1685} 1686 1687function closeAllPopups() { 1688 $('.cd-popup').removeClass('is-visible'); 1689 $("body").removeClass("iosBugFixCaret"); 1690 // Clear all form fields 1691 $("#lUserName, #lPassword, #adultEmail, #adultPassword").val(""); 1692 $("#regFirstName, #regSurName, #regEmail, #regPassword, #regPassword2").val(""); 1693 $(".error-text").html(""); 1694} 1695 1696function hasFormData(popupId) { 1697 var hasData = false; 1698 $('#' + popupId + ' input[type="text"], #' + popupId + ' input[type="email"], #' + popupId + ' input[type="password"]').each(function() { 1699 if ($(this).val().trim() !== '') { 1700 hasData = true; 1701 return false; 1702 } 1703 }); 1704 return hasData; 1705} 1706 1707// Safely parse JSON - handles case where jQuery already parsed it 1708function safeParseJSON(data) { 1709 if (typeof data === 'object') { 1710 return data; 1711 } 1712 try { 1713 return JSON.parse(data); 1714 } catch (e) { 1715 console.error('JSON parse error:', e); 1716 return null; 1717 } 1718} 1719 1720function initLoginHandlers() { 1721 // Close popup on X click, ESC, or clicking outside 1722 $('.cd-popup').on('click', function(event) { 1723 var $popup = $(this); 1724 var $container = $popup.find('.cd-popup-container'); 1725 var popupId = $popup.attr('id'); 1726 1727 // Close if clicking X button (always close, even with data) 1728 if ($(event.target).is('.cd-popup-close')) { 1729 event.preventDefault(); 1730 closeAllPopups(); 1731 return; 1732 } 1733 1734 // Close if clicking outside the modal container (on the overlay) 1735 // But only if no form data has been entered 1736 if (!$container.is(event.target) && $container.has(event.target).length === 0) { 1737 // A click handler inside the popup may have re-rendered its content 1738 // (speed-test results list -> showResult), detaching the clicked 1739 // element before the event bubbles here. A detached target is an 1740 // inside click, not an overlay click. 1741 if (!$.contains(document.documentElement, event.target)) { 1742 return; 1743 } 1744 if (!hasFormData(popupId)) { 1745 closeAllPopups(); 1746 } 1747 } 1748 }); 1749 1750 $(document).keyup(function(event) { 1751 if (event.which == '27') { 1752 // Check if any visible popup has form data 1753 var hasData = false; 1754 $('.cd-popup.is-visible').each(function() { 1755 if (hasFormData($(this).attr('id'))) { 1756 hasData = true; 1757 return false; 1758 } 1759 }); 1760 // Only close if no data entered 1761 if (!hasData) { 1762 closeAllPopups(); 1763 } 1764 } 1765 }); 1766 1767 // Switch from student login to adult login 1768 $(document).on('click', '#switchToAdultLogin', function(e) { 1769 e.preventDefault(); 1770 $('#logVak').removeClass('is-visible'); 1771 $('#adultLogVak').addClass('is-visible'); 1772 fixIos(); 1773 setTimeout(function() { $('#adultEmail').focus(); }, 100); 1774 }); 1775 1776 // Switch from adult login back to student login 1777 $(document).on('click', '#backToStudentLogin', function(e) { 1778 e.preventDefault(); 1779 $('#adultLogVak').removeClass('is-visible'); 1780 $('#logVak').addClass('is-visible'); 1781 fixIos(); 1782 setTimeout(function() { $('#lUserName').focus(); }, 100); 1783 }); 1784 1785 // Switch from adult login to signup 1786 $(document).on('click', '#switchToSignup', function(e) { 1787 e.preventDefault(); 1788 $('#adultLogVak').removeClass('is-visible'); 1789 $('#regVak').addClass('is-visible'); 1790 fixIos(); 1791 }); 1792 1793 // Switch from student login to signup 1794 $(document).on('click', '#studentSwitchToSignup', function(e) { 1795 e.preventDefault(); 1796 $('#logVak').removeClass('is-visible'); 1797 $('#regVak').addClass('is-visible'); 1798 fixIos(); 1799 }); 1800 1801 // Back to login from registration role selection 1802 $(document).on('click', '#backToLoginFromReg', function(e) { 1803 e.preventDefault(); 1804 $('#regVak').removeClass('is-visible'); 1805 $('#logVak').addClass('is-visible'); 1806 fixIos(); 1807 }); 1808 1809 // Role tabs in adult login 1810 $(document).on('click', '.role-tab', function(e) { 1811 e.preventDefault(); 1812 $('.role-tab').removeClass('active'); 1813 $(this).addClass('active'); 1814 $('#adultLoginRole').val($(this).data('role')); 1815 // Keep the forgot-password link pointing at the selected role's flow 1816 var lp = document.getElementById('adultLostPassLink'); 1817 if (lp) { lp.href = lp.href.replace(/type=(teacher|parent)/, 'type=' + $(this).data('role')); } 1818 }); 1819 1820 // Select Teacher role for registration
1821 $(document).on('click', '#selectTeacher', function(e) { 1822 e.preventDefault(); 1823 $('#regRole').val('teacher'); 1824 $('#regFormTitle').text("Teacher Registration"); 1825 $('#regFormSubtitle').text("Create your account"); 1826 $('#regHeader').removeClass('modal-header-green'); 1827 $('#regVak').removeClass('is-visible'); 1828 $('#regFormVak').addClass('is-visible'); 1829 fixIos(); 1830 setTimeout(function() { $('#regFirstName').focus(); }, 100); 1831 }); 1832 1833 // Select Parent role for registration 1834 $(document).on('click', '#selectParent', function(e) { 1835 e.preventDefault(); 1836 $('#regRole').val('parent'); 1837 $('#regFormTitle').text("Parent Registration"); 1838 $('#regFormSubtitle').text("Create your account"); 1839 $('#regHeader').addClass('modal-header-green'); 1840 $('#regVak').removeClass('is-visible'); 1841 $('#regFormVak').addClass('is-visible'); 1842 fixIos(); 1843 setTimeout(function() { $('#regFirstName').focus(); }, 100); 1844 }); 1845 1846 // Back from registration form to role selection 1847 $(document).on('click', '#regBackButton', function(e) { 1848 e.preventDefault(); 1849 $('#regFormVak').removeClass('is-visible'); 1850 $('#regVak').addClass('is-visible'); 1851 fixIos(); 1852 }); 1853 1854 // Student login form submit. preventDefault: Enter would otherwise ALSO 1855 // natively submit the form (hidden submit input), reloading the page and 1856 // closing the modal before the AJAX result - e.g. a failed login - shows. 1857 $('#logForm input').keydown(function(e) { 1858 if (e.keyCode == 13) { 1859 e.preventDefault(); 1860 loginFunc(); 1861 } 1862 }); 1863 1864 $(document).on('click', '#logButton', function() { 1865 loginFunc(); 1866 }); 1867 1868 // Adult login form submit 1869 $('#adultLogForm input').keydown(function(e) { 1870 if (e.keyCode == 13) { 1871 e.preventDefault(); 1872 adultLoginFunc(); 1873 } 1874 }); 1875 1876 $(document).on('click', '#adultLogButton', function() { 1877 adultLoginFunc(); 1878 }); 1879 1880 // Registration form submit 1881 $(document).on('click', '#regButton', function() { 1882 regFunc(); 1883 }); 1884} 1885 1886// Student login function 1887function loginFunc() { 1888 var uname = $("#lUserName").val(); 1889 var pword = $("#lPassword").val(); 1890 1891 if (uname.length == 0) { 1892 $('#errorLogText').html("Please enter a username."); 1893 $("#lUserName").focus(); 1894 } else if (pword.length == 0) { 1895 $('#errorLogText').html("Please enter a password."); 1896 $("#lPassword").focus(); 1897 } else { 1898 $.post("../login.user.php", { 1899 name: uname, 1900 pw: pword 1901 }, function(data, status) { 1902 var obj = safeParseJSON(data); 1903 if (!obj) { 1904 $('#errorLogText').html("Login failed - please try again"); 1905 return; 1906 } 1907 if (obj.log == true) { 1908 closeAllPopups(); 1909 toastr.info('Welcome back ' + uname + ''); 1910 checkSession(); 1911 } else { 1912 if (obj.message == "nouser") { 1913 $('#errorLogText').html("We do not recognize this username."); 1914 } else if (obj.message == "wrongpass") { 1915 $('#errorLogText').html("Your password is incorrect."); 1916 } 1917 } 1918 }); 1919 } 1920} 1921 1922// Teacher/Parent login function 1923function adultLoginFunc() { 1924 var email = $("#adultEmail").val(); 1925 var pword = $("#adultPassword").val(); 1926 var role = $("#adultLoginRole").val(); 1927 1928 if (email.length == 0) { 1929 $('#errorAdultLogText').html("Enter your email address"); 1930 $("#adultEmail").focus(); 1931 } else if (pword.length == 0) { 1932 $('#errorAdultLogText').html("Please enter a password."); 1933 $("#adultPassword").focus(); 1934 } else { 1935 var loginUrl = role === 'teacher' ? 'https://www.timestables.com/login.teacher.php' : 'https://www.timestables.com/login.parent.php'; 1936 $.post(loginUrl, { 1937 email: email, 1938 pw: pword 1939 }, function(data, status) { 1940 var obj = safeParseJSON(data); 1941 if (!obj) { 1942 $('#errorAdultLogText').html("Login failed - please try again"); 1943 return; 1944 } 1945 if (obj.log == true) { 1946 closeAllPopups(); 1947 // Redirect to dashboard 1948 var dashboardUrl = role === 'teacher' ? 'https://www.timestables.com/teacher-login/' : 'https://www.timestables.com/parent/'; 1949 window.location.href = dashboardUrl; 1950 } else { 1951 if (obj.message == "nouser") { 1952 $('#errorAdultLogText').html("Email address not found"); 1953 } else if (obj.message == "wrongpass") { 1954 $('#errorAdultLogText').html("Your password is incorrect."); 1955 } else if (obj.message == "wrongcredentials") { 1956 $('#errorAdultLogText').html("Your login details are incorrect."); 1957 } else { 1958 $('#errorAdultLogText').html(obj.message || "Login failed - please try again"); 1959 } 1960 } 1961 }); 1962 } 1963} 1964 1965// Teacher/Parent registration function 1966function regFunc() { 1967 var firstName = $("#regFirstName").val(); 1968 var surName = $("#regSurName").val(); 1969 var email = $("#regEmail").val(); 1970 var pword = $("#regPassword").val(); 1971 var pword2 = $("#regPassword2").val(); 1972 var role = $("#regRole").val(); 1973 1974 if (firstName.length == 0) { 1975 $('#errorRegText').html("Enter your first name"); 1976 $("#regFirstName").focus(); 1977 } else if (surName.length == 0) { 1978 $('#errorRegText').html("Enter your last name"); 1979 $("#regSurName").focus(); 1980 } else if (email.length == 0) { 1981 $('#errorRegText').html("Enter your email address"); 1982 $("#regEmail").focus(); 1983 } else if (pword.length == 0) { 1984 $('#errorRegText').html("Please enter a password."); 1985 $("#regPassword").focus(); 1986 } else if (pword.length < 6) { 1987 $('#errorRegText').html("Password must be at least 6 characters"); 1988 $("#regPassword").focus(); 1989 } else if (pword !== pword2) { 1990 $('#errorRegText').html("Passwords do not match."); 1991 $("#regPassword2").focus(); 1992 } else { 1993 var regUrl = role === 'teacher' ? 'https://www.timestables.com/register.teacher.php' : 'https://www.timestables.com/register.parent.php'; 1994 $.post(regUrl, { 1995 firstName: firstName, 1996 surName: surName, 1997 email: email, 1998 pw: pword 1999 }, function(data, status) { 2000 console.log(data); 2001 var obj = safeParseJSON(data); 2002 if (!obj) { 2003 $('#errorRegText').html("Registration failed - please try again"); 2004 return; 2005 } 2006 if (obj.reg == true) { 2007 closeAllPopups(); 2008 toastr.success('You have successfully registered!', ''); 2009 // Redirect to dashboard 2010 var dashboardUrl = role === 'teacher' ? 'https://www.timestables.com/teacher-login/' : 'https://www.timestables.com/parent/'; 2011 window.location.href = dashboardUrl; 2012 } else { 2013 $('#errorRegText').html(obj.message || "Registration failed - please try again"); 2014 } 2015 }); 2016 } 2017} 2018 2019// Setup login UI when session check completes 2020// Canonical header session check: one shared implementation of the medal /
2021// diploma counting (medals = Soort 1 with Diploma 0, diplomas = any Diploma > 0) 2022// so the ~40 page templates stop carrying drifting copies. Templates keep a 2023// local `function checkSession() { checkSessionHeader(); }` wrapper. 2024function checkSessionHeader() { 2025$.post("../check.session.php", {}, function(data, status){ 2026 var obj = safeParseJSON(data); 2027 var medalCount = 0, diplomaCount = 0; 2028 if(obj!==false && obj!==null){ 2029 var medalLength = obj.medals ? obj.medals.length : 0; 2030 for (var i = 0; i < medalLength; i++) { 2031 if(obj.medals[i].Soort==1 && obj.medals[i].Diploma==0) medalCount++; 2032 if(obj.medals[i].Diploma>0) diplomaCount++; 2033 } 2034 } 2035 setupLoginUI(obj, medalCount, diplomaCount); 2036}); 2037} 2038 2039// Instant header for guests: render the login/signup buttons immediately 2040// instead of waiting for the session round-trip. Browsers with the "liu" 2041// hint cookie (set on confirmed login) skip this to avoid a wrong flash; 2042// checkSession still runs afterwards and settles the real state. 2043$(function() { 2044 if (!/(?:^|;\s*)liu=1/.test(document.cookie)) { 2045 setupLoginUI(null, 0, 0); 2046 } 2047}); 2048 2049function setupLoginUI(obj, medalCount, diplomaCount) { 2050 if (obj && obj.ok == true) { 2051 loggedIn = true; 2052 document.cookie = "liu=1; path=/; max-age=2592000"; 2053 console.log("logged in"); 2054 var diamondCount = obj.diamonds || 0; 2055 var dropdownHtml = '<div class="user-dropdown">' + 2056 '<span class="header-task-dot" id="headerTaskDot" style="display:none;"></span>' + 2057 '<button class="user-dropdown-toggle">' + 2058 '<span class="user-stats">' + 2059 '<span class="stat">' + medalCount + ' <img src="https://www.tafeldiploma.nl/medalgoud.png" alt="" /></span>' + 2060 '<span class="stat">' + diplomaCount + ' <img src="https://www.tafeldiploma.nl/diploma-icon.png" alt="" /></span>' + 2061 '<span class="stat">' + diamondCount + ' <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="height:16px;vertical-align:middle;"><polygon points="12,2 22,9 12,22 2,9" fill="#4FC3F7" stroke="#0288D1" stroke-width="1.5"/><polygon points="12,2 7,9 12,22 17,9" fill="#B3E5FC" stroke="#0288D1" stroke-width="0.5" opacity="0.6"/></svg></span>' + 2062 '</span>' + 2063 '<span class="xp-level-badge-header" id="userXpMini" style="display:none;">Level <span id="userLevel">1</span></span>' + 2064 '<i class="fas fa-chevron-down"></i>' + 2065 '</button>' + 2066 '<div class="user-dropdown-menu">' + 2067 '<div class="dropdown-user-name"><i class="fas fa-user"></i> ' + obj.name + '</div>' + 2068 '<div class="dropdown-xp-header" id="dropdownXpHeader" style="display:none;">' + 2069 '<div class="xp-title-row"><span class="xp-title" id="headerXpLevelTitle">Beginner</span><span class="xp-amount" id="xpAmount">0 XP</span></div>' + 2070 '<div class="xp-bar-dropdown"><div class="xp-bar-fill-dropdown" id="xpBarDropdown" style="width:0%"></div></div>' + 2071 '<div class="xp-progress-text" id="xpProgressText">0 / 100 XP</div>' + 2072 '</div>' + 2073 '<a href="https://www.timestables.com/student-dashboard/" class="dropdown-item dropdown-item-dashboard">' + 2074 '<i class="fas fa-home"></i> My page' + 2075 '</a>' + 2076 '<a href="https://www.timestables.com/my-tasks/" class="dropdown-item" id="myTasksLink">' + 2077 '<i class="fas fa-tasks"></i> My tasks' + 2078 '<span class="task-badge" id="taskBadge" style="display:none;"></span>' + 2079 '</a>' + 2080 '<a href="https://www.timestables.com/trophy-cabinet/" class="dropdown-item">' + 2081 '<i class="fas fa-trophy"></i> Trophy Cabinet' + 2082 '</a>' + 2083 '<a href="https://www.timestables.com/logout.php" class="dropdown-item dropdown-item-logout">' + 2084 '<i class="fas fa-sign-out-alt"></i> Log out' + 2085 '</a>' + 2086 '</div>' + 2087 '</div>'; 2088 $('#usrVak').html(dropdownHtml); 2089 2090 // Load pending tasks count and XP progress 2091 loadStudentTaskCount(); 2092 loadStudentXpProgress(); 2093 2094 // Toggle dropdown on click 2095 $(document).off('click', '.user-dropdown-toggle').on('click', '.user-dropdown-toggle', function(e) { 2096 e.stopPropagation(); 2097 var dd = $(this).parent(); 2098 dd.toggleClass('open'); 2099 if (dd.hasClass('open')) { 2100 $('#headerTaskDot').hide(); 2101 if (_hasNewTasks) { 2102 var badge = $('#taskBadge'); 2103 badge.removeClass('shake'); 2104 void badge[0].offsetWidth; 2105 badge.addClass('shake'); 2106 badge.one('animationend', function() { $(this).removeClass('shake'); }); 2107 _hasNewTasks = false;
2108 markTasksSeen(); 2109 } 2110 } 2111 }); 2112 2113 // Close dropdown when clicking outside 2114 $(document).off('click.userdropdown').on('click.userdropdown', function(e) { 2115 if (!$(e.target).closest('.user-dropdown').length) { 2116 $('.user-dropdown').removeClass('open'); 2117 } 2118 }); 2119 2120 if (typeof checkSize === 'function') { 2121 setTimeout(function() { checkSize(); }, 200); 2122 } 2123 } else { 2124 document.cookie = "liu=; path=/; max-age=0"; 2125 // Show login/signup buttons for non-logged in users 2126 $('#usrVak').html('<span id="loglink" class="loginLink"><i class="fas fa-sign-in-alt" aria-hidden="true"></i><span>Login</span></span><span id="reglink" class="loginLink cd-popup-trigger"><i class="fas fa-user-plus" aria-hidden="true"></i><span>Create free account</span></span>'); 2127 console.log("not logged in"); 2128 2129 // Open student login popup 2130 $(document).off('click', '#loglink').on('click', '#loglink', function(event) { 2131 event.preventDefault(); 2132 $('#logVak').addClass('is-visible'); 2133 fixIos(); 2134 setTimeout(function() { $('#lUserName').focus(); }, 100); 2135 }); 2136 2137 // Open registration role selection popup 2138 $(document).off('click', '#reglink').on('click', '#reglink', function(event) { 2139 event.preventDefault(); 2140 $('#regVak').addClass('is-visible'); 2141 fixIos(); 2142 }); 2143 2144 if (typeof checkSize === 'function') { 2145 setTimeout(function() { checkSize(); }, 200); 2146 } 2147 } 2148 2149 loginChecked = true; 2150 $('#usrVak').show(); 2151 } 2152 2153// Student Tasks Functions - Load pending task count for badge 2154var _pendingTasks = []; 2155var _hasNewTasks = false; 2156 2157function loadStudentTaskCount() { 2158 $.post('https://www.timestables.com/get.tasks.student.php', {}, function(data) { 2159 var response = typeof data === 'string' ? safeParseJSON(data) : data; 2160 if (response && response.success && response.tasks) { 2161 _pendingTasks = response.tasks; 2162 var count = _pendingTasks.length; 2163 2164 // Show total count in dropdown menu badge 2165 if (count > 0) { 2166 $('#taskBadge').text(count).show(); 2167 } else { 2168 $('#taskBadge').hide(); 2169 } 2170 2171 // Check for NEW (unseen) tasks 2172 var seenIds = JSON.parse(localStorage.getItem('seenTaskIds') || '[]'); 2173 var currentIds = []; 2174 var hasNew = false; 2175 for (var i = 0; i < _pendingTasks.length; i++) { 2176 currentIds.push(_pendingTasks[i].TaskID); 2177 if (seenIds.indexOf(_pendingTasks[i].TaskID) === -1) hasNew = true; 2178 } 2179 // Prune seen IDs that are no longer pending (completed/removed) 2180 var pruned = seenIds.filter(function(id) { return currentIds.indexOf(id) !== -1; }); 2181 if (pruned.length !== seenIds.length) { 2182 localStorage.setItem('seenTaskIds', JSON.stringify(pruned)); 2183 } 2184 2185 // Red dot on header button when there are new tasks 2186 _hasNewTasks = hasNew; 2187 if (hasNew) { 2188 $('#headerTaskDot').show(); 2189 } else { 2190 $('#headerTaskDot').hide(); 2191 } 2192 } 2193 }); 2194} 2195 2196// Mark all current pending tasks as seen 2197function markTasksSeen() { 2198 if (!_pendingTasks.length) return; 2199 var ids = []; 2200 for (var i = 0; i < _pendingTasks.length; i++) ids.push(_pendingTasks[i].TaskID); 2201 localStorage.setItem('seenTaskIds', JSON.stringify(ids)); 2202 _hasNewTasks = false; 2203 $('#headerTaskDot').hide(); 2204} 2205 2206// Load student XP progress 2207function loadStudentXpProgress() { 2208 $.post('https://www.timestables.com/get.xp.progress.php', {}, function(data) { 2209 var response = typeof data === 'string' ? safeParseJSON(data) : data; 2210 if (response && response.success && response.progress) { 2211 var p = response.progress; 2212 // Update level badge in header 2213 $('#userLevel').text(p.level); 2214 $('#userXpMini').show(); 2215 // Update dropdown XP header (bar only shows in dropdown) 2216 $('#headerXpLevelTitle').text(p.title); 2217 $('#xpAmount').text(p.xp.toLocaleString() + ' XP'); 2218 $('#xpBarDropdown').css('width', p.progressPercent + '%'); 2219 $('#xpProgressText').text(p.xp.toLocaleString() + ' / ' + p.nextLevelXP.toLocaleString() + ' XP'); 2220 $('#dropdownXpHeader').show(); 2221 } 2222 }); 2223} 2224</script>
2224 2225
2226<script src="/assets/scripts/custom.js?v=dc25d92e" ></script>
vendor: 1 bytes, line 2226
2226
2227<script src="/assets/vendor/toastr/2.1.3/toastr.min.js?v=b36f28de"></script>
2227 2228 2229
2230<script> 2231function getCookie(cname) { 2232 var name = cname + "="; 2233 var decodedCookie = decodeURIComponent(document.cookie); 2234 var ca = decodedCookie.split(';'); 2235 for(var i = 0; i <ca.length; i++) { 2236 var c = ca[i]; 2237 while (c.charAt(0) == ' ') { 2238 c = c.substring(1); 2239 } 2240 if (c.indexOf(name) == 0) { 2241 return c.substring(name.length, c.length); 2242 } 2243 } 2244 return ""; 2245} 2246var pA = getCookie("cookieconsent_status"); 2247 2248$(document).ready(function(){ 2249 (adsbygoogle=window.adsbygoogle||[]).requestNonPersonalizedAds=1; 2250(adsbygoogle = window.adsbygoogle || []).push({}); 2251 2252 2253}); 2254 2255 </script>
2255 <style>.none { 2256 display:none!important; 2257}</style> 2258<link rel="stylesheet" type="text/css" href="/assets/vendor/cookieconsent2/3.1.0/cookieconsent.min.css?v=ac9205ab" />
2259<script src="/assets/vendor/cookieconsent2/3.1.0/cookieconsent.min.js?v=a0664de8"></script>
vendor: 2 bytes, line 2259
2259
2260<script> 2261window.addEventListener("load", function(){ 2262 2263window.cookieconsent.initialise({ 2264 "palette": { 2265 "popup": { 2266 "background": "#3c404d", 2267 "text": "#d6d6d6" 2268 }, 2269 "button": { 2270 "background": "#8bed4f" 2271 } 2272 }, 2273 "theme": "classic", 2274 "revokable":false, 2275 "revokeBtn":"<div class='none cc-revoke {{classes}}'>Cookie Policy</div>", 2276 "content": { 2277 "message": "We use cookies to ensure you get the best experience on our website.", 2278 "allow": "Allow cookies", 2279 "dismiss": "Ok", 2280 "deny": "Decline cookies", 2281 "link": "Read more", 2282 "href": "https://www.timestables.com/cookies/" 2283 } 2284 2285})}); 2286</script>
2286 2287
2288<script> 2289var loggedIn = false; 2290var loginChecked = false; 2291 2292$(document).ready(function($) { 2293 checkSession(); 2294 initLoginHandlers(); 2295}); 2296 2297function checkSession() { 2298 $.post("../check.session.t.php", {}, function(data, status) { 2299 console.log("" + data); 2300 var obj = JSON.parse(data); 2301 2302 if (obj !== false) { 2303 // Reset all medal slots to placeholder state 2304 for (var rt = 1; rt <= 12; rt++) { 2305 for (var rs = 1; rs <= 4; rs++) { 2306 $('#t' + rt + 's' + rs).html('<img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" />'); 2307 } 2308 $('#t' + rt + 's5').html('<img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" />'); 2309 } 2310 2311 var tafelMed = []; 2312 clearArray = []; 2313 var highScores = []; 2314 var highscore; 2315 var medalLength = obj.medals.length; 2316 console.log(medalLength); 2317 var medalCount = 0; 2318 var diplomaCount = 0; 2319 var hcount = 0; 2320 2321 for (var k = 0; k < 13; k++) { 2322 tafelMed[k] = []; 2323 for (var s = 0; s <= 5; s++) { 2324 tafelMed[k][s] = 0; 2325 } 2326 } 2327 2328 for (var j = 0; j < medalLength; j++) { 2329 tafelMed[obj.medals[j].Tafel][obj.medals[j].Stap] = tafelMed[obj.medals[j].Tafel][obj.medals[j].Stap] + 1; 2330 } 2331 2332 for (var i = 0; i < medalLength; i++) { 2333 if (obj.medals[i].Stap < 5 && obj.medals[i].Tafel > 0) { 2334 var prize = "https://cdn-t-1.bvkstatic.com/medalgoud.png"; 2335 if (tafelMed[obj.medals[i].Tafel][obj.medals[i].Stap] == 2) { 2336 prize = "/ribbon.png"; 2337 } else if (tafelMed[obj.medals[i].Tafel][obj.medals[i].Stap] >= 3) { 2338 prize = "/trophy3.png"; 2339 } 2340 clearArray.push('#t' + obj.medals[i].Tafel + 's' + obj.medals[i].Stap + ',' + $('#t' + obj.medals[i].Tafel + 's' + obj.medals[i].Stap + '').html()); 2341 $('#t' + obj.medals[i].Tafel + 's' + obj.medals[i].Stap + '').html('<img src="' + prize + '" style="height:20px;" class="medaillePlaatje" />'); 2342 } else if (obj.medals[i].Stap == 5) { 2343 var diploma = "https://cdn-t-1.bvkstatic.com/diploma-icon.png"; 2344 if (tafelMed[obj.medals[i].Tafel][obj.medals[i].Stap] >= 2) { 2345 diploma = "/diploma-gold-holder.png"; 2346 } 2347 clearArray.push('#t' + obj.medals[i].Tafel + 's' + obj.medals[i].Stap + ',' + $('#t' + obj.medals[i].Tafel + 's' + obj.medals[i].Stap + '').html()); 2348 $('#t' + obj.medals[i].Tafel + 's' + obj.medals[i].Stap + '').html('<img src="' + diploma + '" style="height:20px;" class="diplomaPlaatje" />'); 2349 } 2350 2351 if (obj.medals[i].Soort == 3) { 2352 highScores[hcount] = obj.medals[i].Score; 2353 hcount++; 2354 } 2355 2356 if (obj.medals[i].Soort == 1 && obj.medals[i].Diploma == 0) { 2357 medalCount++; 2358 } 2359 if (obj.medals[i].Diploma > 0) { 2360 diplomaCount++; 2361 } 2362 } 2363 } 2364 2365 // Setup login UI using shared function 2366 setupLoginUI(obj, medalCount, diplomaCount); 2367 }); 2368} 2369// 30-09-2026 20:50:02</script>
2369 2370 2371
2371<script> 2372 2373 var ajax = {}; 2374ajax.x = function () { 2375 if (typeof XMLHttpRequest !== 'undefined') { 2376 return new XMLHttpRequest(); 2377 } 2378 var versions = [ 2379 "MSXML2.XmlHttp.6.0", 2380 "MSXML2.XmlHttp.5.0", 2381 "MSXML2.XmlHttp.4.0", 2382 "MSXML2.XmlHttp.3.0", 2383 "MSXML2.XmlHttp.2.0", 2384 "Microsoft.XmlHttp" 2385 ]; 2386 2387 var xhr; 2388 for (var i = 0; i < versions.length; i++) { 2389 try { 2390 xhr = new ActiveXObject(versions[i]); 2391 break; 2392 } catch (e) { 2393 } 2394 } 2395 return xhr; 2396}; 2397 2398ajax.send = function (url, callback, method, data, async) { 2399 if (async === undefined) { 2400 async = true; 2401 } 2402 var x = ajax.x(); 2403 x.open(method, url, async); 2404 x.onreadystatechange = function () { 2405 if (x.readyState == 4) { 2406 callback(x.responseText) 2407 } 2408 }; 2409 if (method == 'POST') { 2410 x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 2411 } 2412 x.send(data) 2413}; 2414 2415ajax.post = function (url, data, callback, async) { 2416 var query = []; 2417 for (var key in data) { 2418 query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key])); 2419 } 2420 ajax.send(url, callback, 'POST', query.join('&'), async) 2421}; 2422 2423 2424/* 2425window.onerror = function(msg, url, line) 2426{ 2427 //console.log("Log"+msg); 2428 //ajax.post('/log.error.t.php', {msg: msg,url: url, line: line}, function() {}); 2429}; 2430 2431*/ 2432 2433</script>
vendor: 1 bytes, line 2433
2433
2434<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"c40f8a7fd99f4720a88f5b58bed72eb2","spa":2}' crossorigin="anonymous"></script>
2434 2435</body> 2436 2437</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.