(function(fabric, SIZE, GRID, words){ var canvas = new fabric.Canvas('c', { selection: false }); var i; var j; var k; var l; var origin = []; var end = []; var isDragging = false; var drawingLine; var LabeledRect = fabric.util.createClass(fabric.Rect, { type: 'labeledRect', initialize: function(options) { options = options || {}; this.callSuper('initialize', options); this.set('label', options.label || ''); }, toObject: function() { return fabric.util.object.extend(this.callSuper('toObject'), { label: this.get('label') }); }, _render: function(ctx) { this.callSuper('_render', ctx); ctx.font = '20px Helvetica'; ctx.fillStyle = '#333'; ctx.fillText(this.label, -this.width/2 + 5, -this.height/2 + 20); } }); var isCrossedWordAValidWord = function isCrossedWordAValidWord() { var result = -1; var isHorizontal = origin[0] === end[0]; var isVertical = origin[1] === end[1]; var x; var first; var last; var word = ''; if(isHorizontal) { first = Math.min(origin[1], end[1]); last = Math.max(origin[1], end[1]); for( x=first;x<=last; x++ ) { word += GRID[origin[0]][x]; } return Math.max(words.indexOf(word), words.indexOf(word.split('').reverse().join(''))); }else if (isVertical) { first = Math.min(origin[0], end[0]); last = Math.max(origin[0], end[0]); for( x=first;x<=last; x++ ) { word += GRID[x][origin[1]]; } return Math.max(words.indexOf(word), words.indexOf(word.split('').reverse().join(''))); } return result; }; var crossFoundWord = function crossFoundWord(w) { var liWord = document.getElementById('words').getElementsByTagName('li'); var liWordLength = liWord.length; for ( l = 0; l < liWordLength; l++ ) { if( liWord[l].textContent === w ) { liWord[l].className = "validate"; break; } } }; var validateGrid = function validateGrid() { var i = 1; var l = GRID.length; var supposed; if(l !== 0 && GRID[0]) { supposed = GRID[0].length; for(;i