Changeset 28805


Ignore:
Timestamp:
06/26/14 22:21:57 (5 years ago)
Author:
rvelices
Message:

rv_autocomplete - better suggestions when combining words and using backspace ...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/rv_autocomplete/res/suggest-core.js

    r28778 r28805  
    6969 
    7070function ac_normalize(str) { 
    71         return str.replace(RVAC.rSpaceLike, ' ').replace(/ {2,}/g, ' ').replace(/(^ | $)/g, ''); 
    72 } 
    73  
    74 function ac_analyze(input, lastFocusStr) { 
     71        return str.replace(RVAC.rSpaceLike, ' ').replace(/ {2,}/g, ' ').trim(); 
     72} 
     73 
     74function ac_analyze(input, previous) { 
    7575        var intent="", quoted=0, brackets=0, is_complex=0, scope="", i=0; 
    7676 
    77         if (lastFocusStr.length) { 
    78                 if (input.indexOf(lastFocusStr) == 0) { 
    79                         i = lastFocusStr.length; 
     77        var lastIgnoreMatchStr = previous.lastIgnoreMatchStr, 
     78                lastFocusStr = previous.lastFocusStr; 
     79        if (previous.lastIgnoreMatchStr.length) { 
     80                if (input.indexOf(previous.input) != 0) 
     81                        lastIgnoreMatchStr = lastFocusStr; // some chars deleted from previous 
     82                if (lastFocusStr.length && input.indexOf(lastIgnoreMatchStr) == 0) { 
     83                        i = lastIgnoreMatchStr.length; 
    8084                        is_complex = 1; 
    8185                } 
    8286                else 
    83                         lastFocusStr = ""; 
     87                        lastIgnoreMatchStr = lastFocusStr = ""; 
    8488        } 
    8589 
     
    152156                scope: scope, 
    153157                lastFocusStr: lastFocusStr, 
     158                lastIgnoreMatchStr: lastIgnoreMatchStr, 
    154159                input: input 
    155160        } 
     
    274279var $input = $("#qsearchInput"); 
    275280$input.autocomplete({ 
    276         rv:{lastFocusStr: ""}, minLength: 1, 
     281        rv:{lastFocusStr: "", lastIgnoreMatchStr: ""}, minLength: 1, 
    277282 
    278283        focus: function(event,ui) { 
     
    306311                        this.setSelectionRange(999, 999); 
    307312 
    308                 expr.lastFocusStr = this.value; 
     313                expr.lastFocusStr = expr.lastIgnoreMatchStr = this.value; 
    309314                return false; 
    310315        }, 
     
    326331                } 
    327332                else { 
    328                         this.value = this.value.replace( / $/, ''); 
     333                        this.value = this.value.trim(); 
    329334                        var form = $(this).parents("form"); 
    330335                        form.append( $("<input type='hidden' name='acs' />").val(ac.term) ); 
     
    336341 
    337342        source: function(request, response) { 
    338                 this.options.rv = ac_analyze(request.term, this.options.rv.lastFocusStr); 
     343                this.options.rv = ac_analyze(request.term, this.options.rv); 
    339344 
    340345                var res = ac_search(this.options.rv); 
     
    347352 
    348353                        while ( (matches = raw_q.match(/^[ &.,;!\?-]*[^ &.,;!\?-]+[ &.,;!\?-]+/)) != null ) { 
    349                                 current.lastFocusStr += raw_q.substr(0, matches[0].length); 
     354                                current.lastIgnoreMatchStr += raw_q.substr(0, matches[0].length); 
    350355                                current.raw_q = raw_q = raw_q.substr(matches[0].length); 
    351356                                current.q = remove_accents( ac_normalize( raw_q.toLowerCase() ) ); 
     
    368373                + "</a></li>"; 
    369374 
    370         return $(s) 
    371                 .appendTo(ul); 
     375        return $(s).appendTo(ul); 
    372376}; 
    373377 
     378if (window.localStorage) { 
     379        RVAC.searchHistory = "pwgAutoComplete" in localStorage ? JSON.parse( localStorage.getItem("pwgAutoComplete") ) : []; 
     380        $input.parents("form").on( "submit", function() { 
     381                var val = $input.val().trim(); 
     382                //TODO - save to storage... 
     383        } ); 
     384} 
    374385}; 
    375386 
Note: See TracChangeset for help on using the changeset viewer.