Ignore:
Timestamp:
Jun 26, 2014, 10:21:57 PM (10 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.