123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- // polyfills for IE<9
- (function(fn) {
- if (!fn.map) {
- fn.map = function(f/*, thisArg */) {
- if (this === void 0 || this === null)
- throw new TypeError();
- var t = Object(this);
- var len = t.length >>> 0;
- if (typeof f !== "function")
- throw new TypeError();
- var res = new Array(len);
- var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
- for (var i = 0; i < len; i++) {
- if (i in t)
- res[i] = f.call(thisArg, t[i], i, t);
- }
- return res;
- }
- }
- if (!fn.forEach) {
- fn.forEach = function (f/*, thisArg */) {
- if (this === void 0 || this === null)
- throw new TypeError();
- var t = Object(this);
- var len = t.length >>> 0;
- if (typeof f !== "function")
- throw new TypeError();
- var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
- for (var i = 0; i < len; i++) {
- if (i in t)
- f.call(thisArg, t[i], i, t);
- }
- }
- }
- })(Array.prototype);
- var jssearch = {
- /**
- * the actual words finally used to query (set by last search call)
- */
- queryWords: [],
- search: function(query) {
- var words = jssearch.tokenizeString(query);
- var result = {};
- jssearch.queryWords = words.map(function(i) { return i.t; });
- // do not search when no words given
- if (!words.length) {
- return result;
- }
- // result = jssearch.searchForWords(words);
- // if ($.isEmptyObject(result)) {
- words = jssearch.completeWords(words);
- jssearch.queryWords = words.map(function(i) { return i.t; });
- result = jssearch.searchForWords(words);
- // }
- var res = [];
- for (var i in result) {
- res.push(result[i]);
- }
- res.sort(function(a,b) { return b.weight - a.weight; });
- return res;
- },
- searchForWords: function(words) {
- var result = {};
- words.forEach(function(word) {
- if (jssearch.index[word.t]) {
- jssearch.index[word.t].forEach(function(file) {
- if (result[file.f]) {
- result[file.f].weight *= file.w * word.w;
- } else {
- result[file.f] = {
- file: jssearch.files[file.f],
- weight: file.w * word.w
- };
- }
- });
- }
- });
- return result;
- },
- completeWords: function(words) {
- var result = [];
- words.forEach(function(word) {
- if (!jssearch.index[word.t] && word.t.length > 2) {
- // complete words that are not in the index
- for(var w in jssearch.index) {
- if (w.substr(0, word.t.length) === word.t) {
- result.push({t: w, w: 1});
- }
- }
- } else {
- // keep existing words
- result.push(word);
- }
- });
- return result;
- },
- tokenizeString: function(string)
- {
- if (console) {
- console.log('Error: tokenizeString should have been overwritten by index JS file.')
- }
- return [{t: string, w: 1}];
- }
- };
|