TiddlyWiki5/core/modules/filters/search.js

59 wiersze
1.3 KiB
JavaScript

/*\
title: $:/core/modules/filters/search.js
type: application/javascript
module-type: filteroperator
Filter operator for searching for the text in the operand tiddler
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Export our filter function
*/
exports.search = function(source,operator,options) {
var invert = operator.prefix === "!";
if(operator.suffixes) {
var hasFlag = function(flag) {
return (operator.suffixes[1] || []).indexOf(flag) !== -1;
},
excludeFields = false,
fieldList = operator.suffixes[0] || [],
firstField = fieldList[0] || "",
firstChar = firstField.charAt(0),
fields;
if(firstChar === "-") {
fields = [firstField.slice(1)].concat(fieldList.slice(1));
excludeFields = true;
} else if(fieldList[0] === "*"){
fields = [];
excludeFields = true;
} else {
fields = fieldList.slice(0);
}
return options.wiki.search(operator.operand,{
source: source,
invert: invert,
field: fields,
excludeField: excludeFields,
caseSensitive: hasFlag("casesensitive"),
literal: hasFlag("literal"),
whitespace: hasFlag("whitespace"),
anchored: hasFlag("anchored"),
regexp: hasFlag("regexp"),
words: hasFlag("words")
});
} else {
return options.wiki.search(operator.operand,{
source: source,
invert: invert
});
}
};
})();