Blame templates/html/extsearch.js

Packit 1c1d7e
/*
Packit 1c1d7e
 @licstart  The following is the entire license notice for the
Packit 1c1d7e
 JavaScript code in this file.
Packit 1c1d7e
Packit 1c1d7e
 Copyright (C) 1997-2017 by Dimitri van Heesch
Packit 1c1d7e
Packit 1c1d7e
 This program is free software; you can redistribute it and/or modify
Packit 1c1d7e
 it under the terms of the GNU General Public License as published by
Packit 1c1d7e
 the Free Software Foundation; either version 2 of the License, or
Packit 1c1d7e
 (at your option) any later version.
Packit 1c1d7e
Packit 1c1d7e
 This program is distributed in the hope that it will be useful,
Packit 1c1d7e
 but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 1c1d7e
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 1c1d7e
 GNU General Public License for more details.
Packit 1c1d7e
Packit 1c1d7e
 You should have received a copy of the GNU General Public License along
Packit 1c1d7e
 with this program; if not, write to the Free Software Foundation, Inc.,
Packit 1c1d7e
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Packit 1c1d7e
Packit 1c1d7e
 @licend  The above is the entire license notice
Packit 1c1d7e
 for the JavaScript code in this file
Packit 1c1d7e
 */
Packit 1c1d7e
function SearchBox(name, resultsPath, inFrame, label)
Packit 1c1d7e
{
Packit 1c1d7e
  this.searchLabel = label;
Packit 1c1d7e
  this.DOMSearchField = function()
Packit 1c1d7e
  {  return document.getElementById("MSearchField");  }
Packit 1c1d7e
  this.DOMSearchBox = function()
Packit 1c1d7e
  {  return document.getElementById("MSearchBox");  }
Packit 1c1d7e
  this.OnSearchFieldFocus = function(isActive)
Packit 1c1d7e
  {
Packit 1c1d7e
    if (isActive)
Packit 1c1d7e
    {
Packit 1c1d7e
      this.DOMSearchBox().className = 'MSearchBoxActive';
Packit 1c1d7e
      var searchField = this.DOMSearchField();
Packit 1c1d7e
      if (searchField.value == this.searchLabel)
Packit 1c1d7e
      {
Packit 1c1d7e
        searchField.value = '';
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
    else
Packit 1c1d7e
    {
Packit 1c1d7e
      this.DOMSearchBox().className = 'MSearchBoxInactive';
Packit 1c1d7e
      this.DOMSearchField().value   = this.searchLabel;
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function trim(s) {
Packit 1c1d7e
  return s?s.replace(/^\s\s*/, '').replace(/\s\s*$/, ''):'';
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function getURLParameter(name) {
Packit 1c1d7e
  return decodeURIComponent((new RegExp('[?|&]'+name+
Packit 1c1d7e
         '='+'([^&;]+?)(&|#|;|$)').exec(location.search)
Packit 1c1d7e
         ||[,""])[1].replace(/\+/g, '%20'))||null;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
var entityMap = {
Packit 1c1d7e
  "&": "&",
Packit 1c1d7e
  "<": "<",
Packit 1c1d7e
  ">": ">",
Packit 1c1d7e
  '"': '"',
Packit 1c1d7e
  "'": ''',
Packit 1c1d7e
  "/": '/'
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
function escapeHtml(s) {
Packit 1c1d7e
  return String(s).replace(/[&<>"'\/]/g, function (s) {
Packit 1c1d7e
    return entityMap[s];
Packit 1c1d7e
  });
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
function searchFor(query,page,count) {
Packit 1c1d7e
  $.getJSON(serverUrl+"?cb=?",
Packit 1c1d7e
  {
Packit 1c1d7e
    n:count,
Packit 1c1d7e
    p:page,
Packit 1c1d7e
    q:query
Packit 1c1d7e
  },
Packit 1c1d7e
  function(data) {
Packit 1c1d7e
    var results = $('#searchresults');
Packit 1c1d7e
    $('#MSearchField').val(query);
Packit 1c1d7e
    if (data.hits>0) {
Packit 1c1d7e
      if (data.hits==1) {
Packit 1c1d7e
        results.html('

'+searchResultsText[1]+'

');
Packit 1c1d7e
      } else {
Packit 1c1d7e
        results.html('

'+searchResultsText[2].replace(/\$num/,data.hits)+'

');
Packit 1c1d7e
      }
Packit 1c1d7e
      var r='';
Packit 1c1d7e
      $.each(data.items, function(i,item){
Packit 1c1d7e
        var prefix = tagMap[item.tag];
Packit 1c1d7e
        if (prefix) prefix+='/'; else prefix='';
Packit 1c1d7e
        r+=''+
Packit 1c1d7e
           ''+(data.first+i+1)+'.'+
Packit 1c1d7e
           ''+escapeHtml(item.type)+' '+
Packit 1c1d7e
                '
Packit 1c1d7e
                '">'+escapeHtml(item.name)+'';
Packit 1c1d7e
        if (item.type=="source") {
Packit 1c1d7e
          var l=item.url.match(/[1-9][0-9]*$/);
Packit 1c1d7e
          if (l) r+=' at line '+parseInt(l[0]);
Packit 1c1d7e
        }
Packit 1c1d7e
        r+='';
Packit 1c1d7e
        for (var i=0;i
Packit 1c1d7e
        {
Packit 1c1d7e
          r+=''+item.fragments[i]+'';
Packit 1c1d7e
        }
Packit 1c1d7e
        r+='';
Packit 1c1d7e
      });
Packit 1c1d7e
      r+='';
Packit 1c1d7e
      if (data.pages>1) // write multi page navigation bar
Packit 1c1d7e
      {
Packit 1c1d7e
        r+='
';
Packit 1c1d7e
        if (data.page>0)
Packit 1c1d7e
        {
Packit 1c1d7e
          r+='« ';
Packit 1c1d7e
        }
Packit 1c1d7e
        var firstPage = data.page-5;
Packit 1c1d7e
        var lastPage  = data.page+5;
Packit 1c1d7e
        if (firstPage<0)
Packit 1c1d7e
        {
Packit 1c1d7e
          lastPage-=firstPage;
Packit 1c1d7e
          firstPage=0;
Packit 1c1d7e
        }
Packit 1c1d7e
        if (lastPage>data.pages)
Packit 1c1d7e
        {
Packit 1c1d7e
          lastPage=data.pages;
Packit 1c1d7e
        }
Packit 1c1d7e
        for(var i=firstPage;i
Packit 1c1d7e
        {
Packit 1c1d7e
          if (i==data.page)
Packit 1c1d7e
          {
Packit 1c1d7e
            r+=''+(i+1).toString()+' ';
Packit 1c1d7e
          }
Packit 1c1d7e
          else
Packit 1c1d7e
          {
Packit 1c1d7e
            r+=''+(i+1).toString()+' ';
Packit 1c1d7e
          }
Packit 1c1d7e
        }
Packit 1c1d7e
        if (data.page+1
Packit 1c1d7e
        {
Packit 1c1d7e
          r+='»';
Packit 1c1d7e
        }
Packit 1c1d7e
        r+='';
Packit 1c1d7e
      }
Packit 1c1d7e
      results.append(r);
Packit 1c1d7e
    } else {
Packit 1c1d7e
      results.html('

'+searchResultsText[0]+'

');
Packit 1c1d7e
    }
Packit 1c1d7e
  });
Packit 1c1d7e
}
Packit 1c1d7e
/* @license-end */