From ceb4ee6845a16ff898b8e54213e490ca6638982c Mon Sep 17 00:00:00 2001 From: lizhineng Date: Sat, 29 Jun 2013 16:25:38 +0800 Subject: Finished the basic framework --- js/utility.min.js | 1 + js/wordsearch.js | 32 +++++++++++++++++++++++++++++--- js/wordsearch.min.js | 1 + 3 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 js/utility.min.js create mode 100644 js/wordsearch.min.js (limited to 'js') diff --git a/js/utility.min.js b/js/utility.min.js new file mode 100644 index 0000000..5f5a5f6 --- /dev/null +++ b/js/utility.min.js @@ -0,0 +1 @@ +if(typeof Math.rangeInt!="function"){Math.rangeInt=function(b,a){if(a==undefined){a=b;b=0}return Math.floor(Math.random()*(a-b+1))+b}}if(typeof Object.merge!="function"){Object.merge=function(c,b){for(var a in c){b[a]=c[a]}return b}}; \ No newline at end of file diff --git a/js/wordsearch.js b/js/wordsearch.js index ef33eb2..37dfa25 100644 --- a/js/wordsearch.js +++ b/js/wordsearch.js @@ -17,7 +17,7 @@ this.wrapEl = wrapEl; // Add `.ws-area` to wrap element - this.wrapEl.className += ' ws-area'; + this.wrapEl.classList.add('ws-area'); // Default settings var default_settings = { @@ -305,7 +305,31 @@ WordSeach.prototype.clearHighlight = function() { var selectedEls = document.querySelectorAll('.ws-selected'); for (var i = 0; i < selectedEls.length; i++) { - selectedEls[i].className = 'ws-col'; + selectedEls[i].classList.remove('ws-selected'); + } + } + + /** + * Lookup if the wordlist contains the selected + * @param {Array} selected + */ + WordSeach.prototype.lookup = function(selected) { + var words = ['']; + + for (var i = 0; i < selected.length; i++) { + words[0] += selected[i].letter; + } + words.push(words[0].split('').reverse().join('')); + + if (this.settings.words.indexOf(words[0]) > -1 || + this.settings.words.indexOf(words[1]) > -1) { + for (var i = 0; i < selected.length; i++) { + var row = selected[i].row + 1, + col = selected[i].col + 1, + el = document.querySelector('.ws-area .ws-row:nth-child(' + row + ') .ws-col:nth-child(' + col + ')'); + + el.classList.add('ws-found'); + } } } @@ -338,7 +362,7 @@ col = current.col + 1, el = document.querySelector('.ws-area .ws-row:nth-child(' + row + ') .ws-col:nth-child(' + col + ')'); - el.className = 'ws-col ws-selected'; + el.className += ' ws-selected'; } } } @@ -352,6 +376,8 @@ return function() { _this.selectFrom = null; _this.clearHighlight(); + _this.lookup(_this.selected); + _this.selected = []; } } diff --git a/js/wordsearch.min.js b/js/wordsearch.min.js new file mode 100644 index 0000000..76854e3 --- /dev/null +++ b/js/wordsearch.min.js @@ -0,0 +1 @@ +(function(){Element.prototype.wordSeach=function(b){return new a(this,b)};function a(b,d){this.wrapEl=b;this.wrapEl.classList.add("ws-area");var c={"directions":["W","N","WN","EN"],"gridSize":10,"words":["one","two","three","four","five"],"debug":false};this.settings=Object.merge(d,c);if(this.parseWords(this.settings.gridSize)){var e=false;while(e==false){this.initialize();e=this.addWords()}if(!this.settings.debug){this.fillUpFools()}this.drawmatrix()}}a.prototype.parseWords=function(e){var b=true;for(var c=0;ce){alert("The length of word `"+d+"` is overflow the gridSize.");console.error("The length of word `"+d+"` is overflow the gridSize.");b=false}}return b};a.prototype.addWords=function(){var e=true,c=0,f=true;while(e){var d=this.settings.directions[Math.rangeInt(this.settings.directions.length-1)],b=this.addWord(this.settings.words[c],d),f=true;if(b==false){e=false;f=false}c++;if(c>=this.settings.words.length){e=false}}return f};a.prototype.addWord=function(b,j){var d=true,g={"W":[0,1],"N":[1,0],"WN":[1,1],"EN":[1,-1]},m,e;switch(j){case"W":var m=Math.rangeInt(this.settings.gridSize-1),e=Math.rangeInt(this.settings.gridSize-b.length);break;case"N":var m=Math.rangeInt(this.settings.gridSize-b.length),e=Math.rangeInt(this.settings.gridSize-1);break;case"WN":var m=Math.rangeInt(this.settings.gridSize-b.length),e=Math.rangeInt(this.settings.gridSize-b.length);break;case"EN":var m=Math.rangeInt(this.settings.gridSize-b.length),e=Math.rangeInt(b.length-1,this.settings.gridSize-1);break;default:var h="UNKNOWN DIRECTION "+j+"!";alert(h);console.log(h);break}for(var f=0;fe)?1:-1,g=(c===h)?0:(h>c)?1:-1,j=e,b=c;d.push(this.getItem(j,b));do{j+=f;b+=g;d.push(this.getItem(j,b))}while(j!==i||b!==h)}return d};a.prototype.getItem=function(c,b){return(this.matrix[c]?this.matrix[c][b]:undefined)};a.prototype.clearHighlight=function(){var b=document.querySelectorAll(".ws-selected");for(var c=0;c-1||this.settings.words.indexOf(g[1])>-1){for(var c=0;c