-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathwordsearch.min.js
1 lines (1 loc) · 13.1 KB
/
wordsearch.min.js
1
function removeDiacritics(e){for(var t=0;t<defaultDiacriticsRemovalMap.length;t++)e=e.replace(defaultDiacriticsRemovalMap[t].letters,defaultDiacriticsRemovalMap[t].base);return e}function searchLanguage(e){codefirstLetter=e.charCodeAt();var t=[65,90];return codefirstLetter>=65&&codefirstLetter<=90?t=[65,90]:codefirstLetter>=1488&&codefirstLetter<=1514?t=[1488,1514]:codefirstLetter>=913&&codefirstLetter<=937?t=[913,929]:codefirstLetter>=1040&&codefirstLetter<=1071?t=[1040,1071]:codefirstLetter>=1569&&codefirstLetter<=1610?t=[1569,1594]:codefirstLetter>=19969&&codefirstLetter<=40891?t=[19969,40891]:codefirstLetter>=12354&&codefirstLetter<=12436?t=[12388,12418]:(console.log("Letter not detected : "+e+":"+codefirstLetter),t)}!function(){"use strict";function e(e,t){this.wrapEl=e,this.wrapEl.classList.add("ws-area"),this.solved=0;var u={directions:["W","N","WN","EN"],gridSize:10,words:["one","two","three","four","five"],wordsList:[],debug:!1};if(this.settings=Object.merge(t,u),this.parseWords(this.settings.gridSize)){for(var s=!1;0==s;)this.initialize(),s=this.addWords();this.settings.debug||this.fillUpFools(),this.drawmatrix()}}Element.prototype.wordSearch=function(t){return new e(this,t)},e.prototype.parseWords=function(e){for(var t=!0,u=0;u<this.settings.words.length;u++){this.settings.wordsList[u]=this.settings.words[u].trim(),this.settings.words[u]=removeDiacritics(this.settings.wordsList[u].trim().toUpperCase());var s=this.settings.words[u];s.length>e&&(alert("The length of word `"+s+"` is overflow the gridSize."),console.error("The length of word `"+s+"` is overflow the gridSize."),t=!1)}return t},e.prototype.addWords=function(){for(var e=!0,t=0,u=!0;e;){var s=this.settings.directions[Math.rangeInt(this.settings.directions.length-1)],r=this.addWord(this.settings.words[t],s),u=!0;0==r&&(e=!1,u=!1),t++,t>=this.settings.words.length&&(e=!1)}return u},e.prototype.addWord=function(e,t){var u,s,r=!0,i={W:[0,1],N:[1,0],WN:[1,1],EN:[1,-1]};switch(t){case"W":var u=Math.rangeInt(this.settings.gridSize-1),s=Math.rangeInt(this.settings.gridSize-e.length);break;case"N":var u=Math.rangeInt(this.settings.gridSize-e.length),s=Math.rangeInt(this.settings.gridSize-1);break;case"WN":var u=Math.rangeInt(this.settings.gridSize-e.length),s=Math.rangeInt(this.settings.gridSize-e.length);break;case"EN":var u=Math.rangeInt(this.settings.gridSize-e.length),s=Math.rangeInt(e.length-1,this.settings.gridSize-1);break;default:var o="UNKNOWN DIRECTION "+t+"!";alert(o),console.log(o)}for(var a=0;a<e.length;a++){var n=u+a*i[t][0],E=s+a*i[t][1],l=this.matrix[n][E].letter;"."==l||l==e[a]?this.matrix[n][E].letter=e[a]:r=!1}return r},e.prototype.initialize=function(){this.matrix=[],this.selectFrom=null,this.selected=[],this.initmatrix(this.settings.gridSize)},e.prototype.initmatrix=function(e){for(var t=0;e>t;t++)for(var u=0;e>u;u++){var s={letter:".",row:t,col:u};this.matrix[t]||(this.matrix[t]=[]),this.matrix[t][u]=s}},e.prototype.drawmatrix=function(){for(var e=0;e<this.settings.gridSize;e++){var t=document.createElement("div");t.setAttribute("class","ws-row"),this.wrapEl.appendChild(t);for(var u=0;u<this.settings.gridSize;u++){var s=document.createElement("canvas");s.setAttribute("class","ws-col"),s.setAttribute("width",40),s.setAttribute("height",40);var r=s.width/2,i=s.height/2,o=s.getContext("2d");o.font="400 28px Calibri",o.textAlign="center",o.textBaseline="middle",o.fillStyle="#333",o.fillText(this.matrix[e][u].letter,r,i),s.addEventListener("mousedown",this.onMousedown(this.matrix[e][u])),s.addEventListener("mouseover",this.onMouseover(this.matrix[e][u])),s.addEventListener("mouseup",this.onMouseup()),t.appendChild(s)}}},e.prototype.fillUpFools=function(){for(var e=searchLanguage(this.settings.words[0].split("")[0]),t=0;t<this.settings.gridSize;t++)for(var u=0;u<this.settings.gridSize;u++)"."==this.matrix[t][u].letter&&(this.matrix[t][u].letter=String.fromCharCode(Math.rangeInt(e[0],e[1])))},e.prototype.getItems=function(e,t,u,s){var r=[];if(e===u||t===s||Math.abs(u-e)==Math.abs(s-t)){var i=e===u?0:u>e?1:-1,o=t===s?0:s>t?1:-1,a=e,n=t;r.push(this.getItem(a,n));do a+=i,n+=o,r.push(this.getItem(a,n));while(a!==u||n!==s)}return r},e.prototype.getItem=function(e,t){return this.matrix[e]?this.matrix[e][t]:void 0},e.prototype.clearHighlight=function(){for(var e=document.querySelectorAll(".ws-selected"),t=0;t<e.length;t++)e[t].classList.remove("ws-selected")},e.prototype.lookup=function(e){for(var t=[""],u=0;u<e.length;u++)t[0]+=e[u].letter;if(t.push(t[0].split("").reverse().join("")),this.settings.words.indexOf(t[0])>-1||this.settings.words.indexOf(t[1])>-1){for(var u=0;u<e.length;u++){var s=e[u].row+1,r=e[u].col+1,i=document.querySelector(".ws-area .ws-row:nth-child("+s+") .ws-col:nth-child("+r+")");i.classList.add("ws-found")}for(var o=document.querySelector(".ws-words"),a=o.getElementsByTagName("li"),u=0;u<a.length;u++)t[0]==removeDiacritics(a[u].innerHTML.toUpperCase())&&a[u].innerHTML!="<del>"+a[u].innerHTML+"</del>"&&(a[u].innerHTML="<del>"+a[u].innerHTML+"</del>",this.solved++);this.solved==this.settings.words.length&&this.gameOver()}},e.prototype.gameOver=function(){var e=document.createElement("div");e.setAttribute("id","ws-game-over-outer"),e.setAttribute("class","ws-game-over-outer"),this.wrapEl.parentNode.appendChild(e);var e=document.getElementById("ws-game-over-outer");e.innerHTML="<div class='ws-game-over-inner' id='ws-game-over-inner'><div class='ws-game-over' id='ws-game-over'><h2>Congratulations!</h2><p>You've found all of the words!</p></div></div>"},e.prototype.onMousedown=function(e){var t=this;return function(){t.selectFrom=e}},e.prototype.onMouseover=function(e){var t=this;return function(){if(t.selectFrom){t.selected=t.getItems(t.selectFrom.row,t.selectFrom.col,e.row,e.col),t.clearHighlight();for(var u=0;u<t.selected.length;u++){var s=t.selected[u],r=s.row+1,i=s.col+1,o=document.querySelector(".ws-area .ws-row:nth-child("+r+") .ws-col:nth-child("+i+")");o.className+=" ws-selected"}}}},e.prototype.onMouseup=function(){var e=this;return function(){e.selectFrom=null,e.clearHighlight(),e.lookup(e.selected),e.selected=[]}}}();var defaultDiacriticsRemovalMap=[{base:"A",letters:/(A|Ⓐ|A|À|Á|Â|Ầ|Ấ|Ẫ|Ẩ|Ã|Ā|Ă|Ằ|Ắ|Ẵ|Ẳ|Ȧ|Ǡ|Ä|Ǟ|Ả|Å|Ǻ|Ǎ|Ȁ|Ȃ|Ạ|Ậ|Ặ|Ḁ|Ą|Ⱥ|Ɐ|[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F])/g},{base:"AA",letters:/(Ꜳ|[\uA732])/g},{base:"AE",letters:/(Æ|Ǽ|Ǣ|[\u00C6\u01FC\u01E2])/g},{base:"AO",letters:/(Ꜵ|[\uA734])/g},{base:"AU",letters:/(Ꜷ|[\uA736])/g},{base:"AV",letters:/(Ꜹ|Ꜻ|[\uA738\uA73A])/g},{base:"AY",letters:/(Ꜽ|[\uA73C])/g},{base:"B",letters:/(B|Ⓑ|B|Ḃ|Ḅ|Ḇ|Ƀ|Ƃ|Ɓ|[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181])/g},{base:"C",letters:/(C|Ⓒ|C|Ć|Ĉ|Ċ|Č|Ç|Ḉ|Ƈ|Ȼ|Ꜿ|[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E])/g},{base:"D",letters:/(D|Ⓓ|D|Ḋ|Ď|Ḍ|Ḑ|Ḓ|Ḏ|Đ|Ƌ|Ɗ|Ɖ|Ꝺ|Ð|[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779\u00D0])/g},{base:"DZ",letters:/(DZ|DŽ|[\u01F1\u01C4])/g},{base:"Dz",letters:/(Dz|Dž|[\u01F2\u01C5])/g},{base:"E",letters:/(E|Ⓔ|E|È|É|Ê|Ề|Ế|Ễ|Ể|Ẽ|Ē|Ḕ|Ḗ|Ĕ|Ė|Ë|Ẻ|Ě|Ȅ|Ȇ|Ẹ|Ệ|Ȩ|Ḝ|Ę|Ḙ|Ḛ|Ɛ|Ǝ|[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E])/g},{base:"F",letters:/(F|Ⓕ|F|Ḟ|Ƒ|Ꝼ|[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B])/g},{base:"G",letters:/(G|Ⓖ|G|Ǵ|Ĝ|Ḡ|Ğ|Ġ|Ǧ|Ģ|Ǥ|Ɠ|Ꞡ|Ᵹ|Ꝿ|[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E])/g},{base:"H",letters:/(H|Ⓗ|H|Ĥ|Ḣ|Ḧ|Ȟ|Ḥ|Ḩ|Ḫ|Ħ|Ⱨ|Ⱶ|Ɥ|[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D])/g},{base:"I",letters:/(I|Ⓘ|I|Ì|Í|Î|Ĩ|Ī|Ĭ|İ|Ï|Ḯ|Ỉ|Ǐ|Ȉ|Ȋ|Ị|Į|Ḭ|Ɨ|[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197])/g},{base:"J",letters:/(J|Ⓙ|J|Ĵ|Ɉ|[\u004A\u24BF\uFF2A\u0134\u0248])/g},{base:"K",letters:/(K|Ⓚ|K|Ḱ|Ǩ|Ḳ|Ķ|Ḵ|Ƙ|Ⱪ|Ꝁ|Ꝃ|Ꝅ|Ꞣ|[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2])/g},{base:"L",letters:/(L|Ⓛ|L|Ŀ|Ĺ|Ľ|Ḷ|Ḹ|Ļ|Ḽ|Ḻ|Ł|Ƚ|Ɫ|Ⱡ|Ꝉ|Ꝇ|Ꞁ|[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780])/g},{base:"LJ",letters:/(LJ|[\u01C7])/g},{base:"Lj",letters:/(Lj|[\u01C8])/g},{base:"M",letters:/(M|Ⓜ|M|Ḿ|Ṁ|Ṃ|Ɱ|Ɯ|[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C])/g},{base:"N",letters:/(N|Ⓝ|N|Ǹ|Ń|Ñ|Ṅ|Ň|Ṇ|Ņ|Ṋ|Ṉ|Ƞ|Ɲ|Ꞑ|Ꞥ|Ŋ|[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4\u014A])/g},{base:"NJ",letters:/(NJ|[\u01CA])/g},{base:"Nj",letters:/(Nj|[\u01CB])/g},{base:"O",letters:/(O|Ⓞ|O|Ò|Ó|Ô|Ồ|Ố|Ỗ|Ổ|Õ|Ṍ|Ȭ|Ṏ|Ō|Ṑ|Ṓ|Ŏ|Ȯ|Ȱ|Ö|Ȫ|Ỏ|Ő|Ǒ|Ȍ|Ȏ|Ơ|Ờ|Ớ|Ỡ|Ở|Ợ|Ọ|Ộ|Ǫ|Ǭ|Ø|Ǿ|Ɔ|Ɵ|Ꝋ|Ꝍ|[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C])/g},{base:"OE",letters:/(Œ|[\u0152])/g},{base:"OI",letters:/(Ƣ|[\u01A2])/g},{base:"OO",letters:/(Ꝏ|[\uA74E])/g},{base:"OU",letters:/(Ȣ|[\u0222])/g},{base:"P",letters:/(P|Ⓟ|P|Ṕ|Ṗ|Ƥ|Ᵽ|Ꝑ|Ꝓ|Ꝕ|[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754])/g},{base:"Q",letters:/(Q|Ⓠ|Q|Ꝗ|Ꝙ|Ɋ|[\u0051\u24C6\uFF31\uA756\uA758\u024A])/g},{base:"R",letters:/(R|Ⓡ|R|Ŕ|Ṙ|Ř|Ȑ|Ȓ|Ṛ|Ṝ|Ŗ|Ṟ|Ɍ|Ɽ|Ꝛ|Ꞧ|Ꞃ|[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782])/g},{base:"S",letters:/(S|Ⓢ|S|ẞ|Ś|Ṥ|Ŝ|Ṡ|Š|Ṧ|Ṣ|Ṩ|Ș|Ş|Ȿ|Ꞩ|Ꞅ|[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784])/g},{base:"T",letters:/(T|Ⓣ|T|Ṫ|Ť|Ṭ|Ț|Ţ|Ṱ|Ṯ|Ŧ|Ƭ|Ʈ|Ⱦ|Ꞇ|[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786])/g},{base:"TH",letters:/(Þ|[\u00DE])/g},{base:"TZ",letters:/(Ꜩ|[\uA728])/g},{base:"U",letters:/(U|Ⓤ|U|Ù|Ú|Û|Ũ|Ṹ|Ū|Ṻ|Ŭ|Ü|Ǜ|Ǘ|Ǖ|Ǚ|Ủ|Ů|Ű|Ǔ|Ȕ|Ȗ|Ư|Ừ|Ứ|Ữ|Ử|Ự|Ụ|Ṳ|Ų|Ṷ|Ṵ|Ʉ|[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244])/g},{base:"V",letters:/(V|Ⓥ|V|Ṽ|Ṿ|Ʋ|Ꝟ|Ʌ|[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245])/g},{base:"VY",letters:/(Ꝡ|[\uA760])/g},{base:"W",letters:/(W|Ⓦ|W|Ẁ|Ẃ|Ŵ|Ẇ|Ẅ|Ẉ|Ⱳ|[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72])/g},{base:"X",letters:/(X|Ⓧ|X|Ẋ|Ẍ|[\u0058\u24CD\uFF38\u1E8A\u1E8C])/g},{base:"Y",letters:/(Y|Ⓨ|Y|Ỳ|Ý|Ŷ|Ỹ|Ȳ|Ẏ|Ÿ|Ỷ|Ỵ|Ƴ|Ɏ|Ỿ|[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE])/g},{base:"Z",letters:/(Z|Ⓩ|Z|Ź|Ẑ|Ż|Ž|Ẓ|Ẕ|Ƶ|Ȥ|Ɀ|Ⱬ|Ꝣ|[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762])/g},{base:"",letters:/[\u0591-\u05C7]/g}];