Search code examples
javascriptcrossword

When I pressing polish letter such as: ó, ł, ą, ż Script moves 3 spaces, when should move only 1 space


When I pressing polish letter such as: ó, ł, ą, ż Script moves 3 spaces, when should move only 1 space. At this page you can try this script: http://daniel.jajuwa.pl/krzyzowka/index.html I found the code on the internet, that's why I'm writing here because here is the best chance for a reply;) Thanks for help :D

(function($){
    $.fn.crossword = function(entryData) {
        
            var puzz = {}; 
            puzz.data = entryData;
            

            this.after('<div id="puzzle-clues"><h2>Poziomo</h2><ol id="across"></ol><h2>Pionowo</h2><ol id="down"></ol></div>');
            
            // initialize some variables
            var tbl = ['<table id="puzzle">'],
                count = 12,
                counter = 0,
                puzzEl = this,
                clues = $('#puzzle-clues'),
                clueLiEls,
                coords,
                entryCount = puzz.data.length,
                entries = [], 
                rows = [],
                cols = [],
                solved = [],
                tabindex,
                $actives,
                activePosition = 0,
                activeClueIndex = 0,
                currOri,
                targetInput,
                mode = 'interacting',
                solvedToggle = false,
                z = 0;

            var puzInit = {
                
                init: function() {
                    currOri = 'across';
                    
                    puzz.data.sort(function(a,b) {
                        return a.position - b.position;
                    });

                    puzzEl.delegate('input', 'keyup', function(e){
                        mode = 'interacting';
                        
                        switch(e.which) {
                            case 39:
                            case 37:
                                currOri = 'across';
                                break;
                            case 38:
                            case 40:
                                currOri = 'down';
                                break;
                            default:
                                break;
                        }
                        
                        if ( e.keyCode === 9) {
                            return false;
                        } else if (
                            e.keyCode === 37 ||
                            e.keyCode === 38 ||
                            e.keyCode === 39 ||
                            e.keyCode === 40 ||
                            e.keyCode === 8 ||
                            e.keyCode === 46 ) {            
                                                

                            
                            if (e.keyCode === 8 || e.keyCode === 46) {
                                currOri === 'across' ? nav.nextPrevNav(e, 37) : nav.nextPrevNav(e, 38); 
                            } else {
                                nav.nextPrevNav(e);
                            }
                            
                            e.preventDefault();
                            return false;
                        } else {
                            
                            console.log('input keyup: '+solvedToggle);
                            
                            puzInit.checkAnswer(e);

                        }

                        e.preventDefault();
                        return false;                   
                    });
            
                    // tab navigation handler setup
                    puzzEl.delegate('input', 'keydown', function(e) {

                        if ( e.keyCode === 9) {
                            
                            mode = "setting ui";
                            if (solvedToggle) solvedToggle = false;

                            //puzInit.checkAnswer(e)
                            nav.updateByEntry(e);
                            
                        } else {
                            return true;
                        }
                                                
                        e.preventDefault();
                                    
                    });
                    
                    // tab navigation handler setup
                    puzzEl.delegate('input', 'click', function(e) {
                        mode = "setting ui";
                        if (solvedToggle) solvedToggle = false;

                        console.log('input click: '+solvedToggle);
                    
                        nav.updateByEntry(e);
                        e.preventDefault();
                                    
                    });
                    
                    
                    // click/tab clues 'navigation' handler setup
                    clues.delegate('li', 'click', function(e) {
                        mode = 'setting ui';
                        
                        if (!e.keyCode) {
                            nav.updateByNav(e);
                        } 
                        e.preventDefault(); 
                    });
                    
                    
                    // highlight the letter in selected 'light' - better ux than making user highlight letter with second action
                    puzzEl.delegate('#puzzle', 'click', function(e) {
                        $(e.target).focus();
                        $(e.target).select();
                    });
                    
                    // DELETE FOR BG
                    puzInit.calcCoords();
                    
                    // Puzzle clues added to DOM in calcCoords(), so now immediately put mouse focus on first clue
                    clueLiEls = $('#puzzle-clues li');
                    //$('#' + currOri + ' li' ).eq(0).addClass('clues-active').focus();
                    //REMOVED TO STOP FIRST CLUE FROM LOADING ^^^^^
                
                    // DELETE FOR BG
                    puzInit.buildTable();
                    puzInit.buildEntries();
                                        
                },


            }; // end puzInit object
            

            var nav = {
                
                nextPrevNav: function(e, override) {

                    var len = $actives.length,
                        struck = override ? override : e.which,
                        el = $(e.target),
                        p = el.parent(),
                        ps = el.parents(),
                        selector;
                
                    util.getActivePositionFromClassGroup(el);
                    util.highlightEntry();
                    util.highlightClue();
                    
                    $('.current').removeClass('current');
                    
                    selector = '.position-' + activePosition + ' input';
                    
                    //console.log('nextPrevNav activePosition & struck: '+ activePosition + ' '+struck);
                        
                    // move input focus/select to 'next' input
                    switch(struck) {
                        case 39:
                            p
                                .next()
                                .find('input')
                                .addClass('current')
                                .select();

                            break;
                        
                        case 37:
                            p
                                .prev()
                                .find('input')
                                .addClass('current')
                                .select();

                            break;

                        case 40:
                            ps
                                .next('tr')
                                .find(selector)
                                .addClass('current')
                                .select();

                            break;

                        case 38:
                            ps
                                .prev('tr')
                                .find(selector)
                                .addClass('current')
                                .select();

                            break;

                        default:
                        break;
                    }
                                                            
                },
    
                updateByNav: function(e) {
                    var target;
                    
                    $('.clues-active').removeClass('clues-active');
                    $('.active').removeClass('active');
                    $('.current').removeClass('current');
                    currIndex = 0;

                    target = e.target;
                    activePosition = $(e.target).data('position');
                    
                    util.highlightEntry();
                    util.highlightClue();
                                        
                    $('.active').eq(0).focus();
                    $('.active').eq(0).select();
                    $('.active').eq(0).addClass('current');
                    
                    // store orientation for 'smart' auto-selecting next input
                    currOri = $('.clues-active').parent('ol').prop('id');
                                        
                    activeClueIndex = $(clueLiEls).index(e.target);
                    //console.log('updateByNav() activeClueIndex: '+activeClueIndex);
                    
                },
            
                // Sets activePosition var and adds active class to current entry
                updateByEntry: function(e, next) {
                    var classes, next, clue, e1Ori, e2Ori, e1Cell, e2Cell;
                    
                    if(e.keyCode === 9 || next){
                        // handle tabbing through problems, which keys off clues and requires different handling        
                        activeClueIndex = activeClueIndex === clueLiEls.length-1 ? 0 : ++activeClueIndex;
                    
                        $('.clues-active').removeClass('.clues-active');
                                                
                        next = $(clueLiEls[activeClueIndex]);
                        currOri = next.parent().prop('id');
                        activePosition = $(next).data('position');
                                                
                        // skips over already-solved problems
                        util.getSkips(activeClueIndex);
                        activePosition = $(clueLiEls[activeClueIndex]).data('position');
                        
                                                                                                
                    } else {
                        activeClueIndex = activeClueIndex === clueLiEls.length-1 ? 0 : ++activeClueIndex;
                    
                        util.getActivePositionFromClassGroup(e.target);
                        
                        clue = $(clueLiEls + '[data-position=' + activePosition + ']');
                        activeClueIndex = $(clueLiEls).index(clue);
                        
                        currOri = clue.parent().prop('id');
                        
                    }
                        
                        util.highlightEntry();
                        util.highlightClue();
                        
                        //$actives.eq(0).addClass('current');   
                        //console.log('nav.updateByEntry() reports activePosition as: '+activePosition);    
                }
                
            }; // end nav object

            
            var util = {
                highlightEntry: function() {
                    // this routine needs to be smarter because it doesn't need to fire every time, only
                    // when activePosition changes
                    $actives = $('.active');
                    $actives.removeClass('active');
                    $actives = $('.position-' + activePosition + ' input').addClass('active');
                    $actives.eq(0).focus();
                    $actives.eq(0).select();
                },
                
                highlightClue: function() {
                    var clue;               
                    $('.clues-active').removeClass('clues-active');
                    $(clueLiEls + '[data-position=' + activePosition + ']').addClass('clues-active');
                    
                    if (mode === 'interacting') {
                        clue = $(clueLiEls + '[data-position=' + activePosition + ']');
                        activeClueIndex = $(clueLiEls).index(clue);
                    };
                },
                

                getActivePositionFromClassGroup: function(el){

                        classes = util.getClasses($(el).parent(), 'position');

                        if(classes.length > 1){
                            // get orientation for each reported position
                            e1Ori = $(clueLiEls + '[data-position=' + classes[0].split('-')[1] + ']').parent().prop('id');
                            e2Ori = $(clueLiEls + '[data-position=' + classes[1].split('-')[1] + ']').parent().prop('id');

                            // test if clicked input is first in series. If so, and it intersects with
                            // entry of opposite orientation, switch to select this one instead
                            e1Cell = $('.position-' + classes[0].split('-')[1] + ' input').index(el);
                            e2Cell = $('.position-' + classes[1].split('-')[1] + ' input').index(el);

                            if(mode === "setting ui"){
                                currOri = e1Cell === 0 ? e1Ori : e2Ori; // change orientation if cell clicked was first in a entry of opposite direction
                            }

                            if(e1Ori === currOri){
                                activePosition = classes[0].split('-')[1];      
                            } else if(e2Ori === currOri){
                                activePosition = classes[1].split('-')[1];
                            }
                        } else {
                            activePosition = classes[0].split('-')[1];                      
                        }
                        
                        console.log('getActivePositionFromClassGroup activePosition: '+activePosition);
                        
                },
                
                checkSolved: function(valToCheck) {
                    for (var i=0, s=solved.length; i < s; i++) {
                        if(valToCheck === solved[i]){
                            return true;
                        }

                    }
                },
                
                getSkips: function(position) {
                    if ($(clueLiEls[position]).hasClass('clue-done')){
                        activeClueIndex = position === clueLiEls.length-1 ? 0 : ++activeClueIndex;
                        util.getSkips(activeClueIndex);                     
                    } else {
                        return false;
                    }
                }
                
            }; // end util object

                
            puzInit.init();
    
                            
    }
    
})(jQuery);

Solution

  • the answer is simple don't use it