Commit c2db34e2 authored by Joshua Gould's avatar Joshua Gould

quote terms

parent 7a4eca6e
morpheus.MetadataUtil = function() { morpheus.MetadataUtil = function () {
}; };
morpheus.MetadataUtil.renameFields = function(dataset, options) { morpheus.MetadataUtil.renameFields = function (dataset, options) {
_.each(options.rows, function(item) { _.each(options.rows, function (item) {
if (item.renameTo) { if (item.renameTo) {
var v = dataset.getRowMetadata().getByName(item.field); var v = dataset.getRowMetadata().getByName(item.field);
if (v) { if (v) {
...@@ -10,7 +10,7 @@ morpheus.MetadataUtil.renameFields = function(dataset, options) { ...@@ -10,7 +10,7 @@ morpheus.MetadataUtil.renameFields = function(dataset, options) {
} }
} }
}); });
_.each(options.columns, function(item) { _.each(options.columns, function (item) {
if (item.renameTo) { if (item.renameTo) {
var v = dataset.getColumnMetadata().getByName(item.field); var v = dataset.getColumnMetadata().getByName(item.field);
if (v) { if (v) {
...@@ -29,15 +29,15 @@ morpheus.MetadataUtil.renameFields = function(dataset, options) { ...@@ -29,15 +29,15 @@ morpheus.MetadataUtil.renameFields = function(dataset, options) {
* Whether to search columns * Whether to search columns
* @param options.defaultMatchMode * @param options.defaultMatchMode
* 'exact' or 'contains' * 'exact' or 'contains'
* *
*/ */
morpheus.MetadataUtil.search = function(options) { morpheus.MetadataUtil.search = function (options) {
var model = options.model; var model = options.model;
var text = options.text; var text = options.text;
var isColumns = options.isColumns; var isColumns = options.isColumns;
text = $.trim(text); text = $.trim(text);
if (text === '') { if (text === '') {
return null; return null;
} }
var tokens = morpheus.Util.getAutocompleteTokens(text); var tokens = morpheus.Util.getAutocompleteTokens(text);
if (tokens.length == 0) { if (tokens.length == 0) {
...@@ -47,9 +47,9 @@ morpheus.MetadataUtil.search = function(options) { ...@@ -47,9 +47,9 @@ morpheus.MetadataUtil.search = function(options) {
var fieldNames = morpheus.MetadataUtil.getMetadataNames(model); var fieldNames = morpheus.MetadataUtil.getMetadataNames(model);
fieldNames.push(indexField); fieldNames.push(indexField);
var predicates = morpheus.Util.createSearchPredicates({ var predicates = morpheus.Util.createSearchPredicates({
tokens : tokens, tokens: tokens,
fields : fieldNames, fields: fieldNames,
defaultMatchMode : options.defaultMatchMode defaultMatchMode: options.defaultMatchMode
}); });
var vectors = []; var vectors = [];
var nameToVector = new morpheus.Map(); var nameToVector = new morpheus.Map();
...@@ -57,9 +57,9 @@ morpheus.MetadataUtil.search = function(options) { ...@@ -57,9 +57,9 @@ morpheus.MetadataUtil.search = function(options) {
var v = model.get(j); var v = model.get(j);
var dataType = morpheus.VectorUtil.getDataType(v); var dataType = morpheus.VectorUtil.getDataType(v);
var wrapper = { var wrapper = {
vector : v, vector: v,
dataType : dataType, dataType: dataType,
isArray : dataType.indexOf('[') === 0 isArray: dataType.indexOf('[') === 0
}; };
nameToVector.set(v.getName(), wrapper); nameToVector.set(v.getName(), wrapper);
vectors.push(wrapper); vectors.push(wrapper);
...@@ -135,18 +135,18 @@ morpheus.MetadataUtil.search = function(options) { ...@@ -135,18 +135,18 @@ morpheus.MetadataUtil.search = function(options) {
return indices; return indices;
}; };
morpheus.MetadataUtil.shallowCopy = function(model) { morpheus.MetadataUtil.shallowCopy = function (model) {
var copy = new morpheus.MetadataModel(model.getItemCount()); var copy = new morpheus.MetadataModel(model.getItemCount());
for (var i = 0; i < model.getMetadataCount(); i++) { for (var i = 0; i < model.getMetadataCount(); i++) {
var v = model.get(i); var v = model.get(i);
// copy properties b/c they can be modified via ui // copy properties b/c they can be modified via ui
var newVector = new morpheus.VectorAdapter(v); var newVector = new morpheus.VectorAdapter(v);
newVector.properties = new morpheus.Map(); newVector.properties = new morpheus.Map();
newVector.getProperties = function() { newVector.getProperties = function () {
return this.properties; return this.properties;
}; };
v.getProperties().forEach(function(val, key) { v.getProperties().forEach(function (val, key) {
if (!morpheus.VectorKeys.COPY_IGNORE.has(key)) { if (!morpheus.VectorKeys.COPY_IGNORE.has(key)) {
newVector.properties.set(key, val); newVector.properties.set(key, val);
} }
...@@ -157,14 +157,14 @@ morpheus.MetadataUtil.shallowCopy = function(model) { ...@@ -157,14 +157,14 @@ morpheus.MetadataUtil.shallowCopy = function(model) {
} }
return copy; return copy;
}; };
morpheus.MetadataUtil.autocomplete = function(model) { morpheus.MetadataUtil.autocomplete = function (model) {
return function(tokens, cb) { return function (tokens, cb) {
// check for term:searchText // check for term:searchText
var matches = []; var matches = [];
var regex = null; var regex = null;
var searchModel = model; var searchModel = model;
var token = tokens != null && tokens.length > 0 ? tokens[tokens.selectionStartIndex] var token = tokens != null && tokens.length > 0 ? tokens[tokens.selectionStartIndex]
: ''; : '';
token = $.trim(token); token = $.trim(token);
try { try {
if (token !== '') { if (token !== '') {
...@@ -174,17 +174,17 @@ morpheus.MetadataUtil.autocomplete = function(model) { ...@@ -174,17 +174,17 @@ morpheus.MetadataUtil.autocomplete = function(model) {
if (token.charCodeAt(semi - 1) !== 92) { // \: if (token.charCodeAt(semi - 1) !== 92) { // \:
var possibleField = $.trim(token.substring(0, semi)); var possibleField = $.trim(token.substring(0, semi));
if (possibleField.length > 0 if (possibleField.length > 0
&& possibleField[0] === '"' && possibleField[0] === '"'
&& possibleField[token.length - 1] === '"') { && possibleField[token.length - 1] === '"') {
possibleField = possibleField.substring(1, possibleField = possibleField.substring(1,
possibleField.length - 1); possibleField.length - 1);
} }
var index = morpheus.MetadataUtil.indexOf(searchModel, var index = morpheus.MetadataUtil.indexOf(searchModel,
possibleField); possibleField);
if (index !== -1) { if (index !== -1) {
token = $.trim(token.substring(semi + 1)); token = $.trim(token.substring(semi + 1));
searchModel = new morpheus.MetadataModelColumnView( searchModel = new morpheus.MetadataModelColumnView(
model, [ index ]); model, [index]);
} }
} }
...@@ -219,8 +219,8 @@ morpheus.MetadataUtil.autocomplete = function(model) { ...@@ -219,8 +219,8 @@ morpheus.MetadataUtil.autocomplete = function(model) {
if (val != null) { if (val != null) {
if (isArray[j]) { if (isArray[j]) {
for (var k = 0; k < val.length; k++) { for (var k = 0; k < val.length; k++) {
var id = new morpheus.Identifier([ val[k], var id = new morpheus.Identifier([val[k],
v.getName() ]); v.getName()]);
if (!set.has(id) && regex.test(val[k])) { if (!set.has(id) && regex.test(val[k])) {
set.add(id); set.add(id);
if (set.size() === max) { if (set.size() === max) {
...@@ -229,8 +229,8 @@ morpheus.MetadataUtil.autocomplete = function(model) { ...@@ -229,8 +229,8 @@ morpheus.MetadataUtil.autocomplete = function(model) {
} }
} }
} else { } else {
var id = new morpheus.Identifier([ val, var id = new morpheus.Identifier([val,
v.getName() ]); v.getName()]);
if (!set.has(id) && regex.test(val)) { if (!set.has(id) && regex.test(val)) {
set.add(id); set.add(id);
if (set.size() === max) { if (set.size() === max) {
...@@ -243,16 +243,24 @@ morpheus.MetadataUtil.autocomplete = function(model) { ...@@ -243,16 +243,24 @@ morpheus.MetadataUtil.autocomplete = function(model) {
} }
} }
set.forEach(function(id) { set.forEach(function (id) {
var array = id.getArray(); var array = id.getArray();
var field = array[1]; var field = array[1];
var val = array[0]; var val = array[0];
var quotedField = field;
if (quotedField.indexOf(' ') !== -1) {
quotedField = '"' + quotedField + '"';
}
var quotedValue = val;
if (quotedValue.indexOf(' ') !== -1) {
quotedValue = '"' + quotedValue + '"';
}
matches.push({ matches.push({
value : field + ':' + val, value: quotedField + ':' + quotedValue,
label : '<span style="font-weight:300;">' + field label: '<span style="font-weight:300;">' + field
+ ':</span>' + ':</span>'
+ '<span style="font-weight:900;">' + val + '<span style="font-weight:900;">' + val
+ '</span>' + '</span>'
}); });
}); });
...@@ -269,13 +277,17 @@ morpheus.MetadataUtil.autocomplete = function(model) { ...@@ -269,13 +277,17 @@ morpheus.MetadataUtil.autocomplete = function(model) {
var dataType = morpheus.VectorUtil.getDataType(v); var dataType = morpheus.VectorUtil.getDataType(v);
var field = v.getName(); var field = v.getName();
if (dataType === 'number' || dataType === 'string' if (dataType === 'number' || dataType === 'string'
|| dataType === '[string]') { || dataType === '[string]') {
if (regex.test(field)) { if (regex.test(field)) {
var quotedField = field;
if (quotedField.indexOf(' ') !== -1) {
quotedField = '"' + quotedField + '"';
}
matches.push({ matches.push({
value : field + ':', value: quotedField + ':',
label : '<span style="font-weight:300;">' + field label: '<span style="font-weight:300;">' + field
+ ':</span>', + ':</span>',
show : true show: true
}); });
} }
} }
...@@ -284,31 +296,31 @@ morpheus.MetadataUtil.autocomplete = function(model) { ...@@ -284,31 +296,31 @@ morpheus.MetadataUtil.autocomplete = function(model) {
}; };
}; };
morpheus.MetadataUtil.getMetadataNames = function(metadataModel) { morpheus.MetadataUtil.getMetadataNames = function (metadataModel) {
var names = []; var names = [];
for (var i = 0, count = metadataModel.getMetadataCount(); i < count; i++) { for (var i = 0, count = metadataModel.getMetadataCount(); i < count; i++) {
names.push(metadataModel.get(i).getName(i)); names.push(metadataModel.get(i).getName(i));
} }
names.sort(function(a, b) { names.sort(function (a, b) {
a = a.toLowerCase(); a = a.toLowerCase();
b = b.toLowerCase(); b = b.toLowerCase();
return (a < b ? -1 : (a === b ? 0 : 1)); return (a < b ? -1 : (a === b ? 0 : 1));
}); });
return names; return names;
}; };
morpheus.MetadataUtil.getVectors = function(metadataModel, names) { morpheus.MetadataUtil.getVectors = function (metadataModel, names) {
var vectors = []; var vectors = [];
names.forEach(function(name) { names.forEach(function (name) {
var v = metadataModel.getByName(name); var v = metadataModel.getByName(name);
if (!v) { if (!v) {
throw name + ' not found. Available fields are ' throw name + ' not found. Available fields are '
+ morpheus.MetadataUtil.getMetadataNames(metadataModel); + morpheus.MetadataUtil.getMetadataNames(metadataModel);
} }
vectors.push(v); vectors.push(v);
}); });
return vectors; return vectors;
}; };
morpheus.MetadataUtil.indexOf = function(metadataModel, name) { morpheus.MetadataUtil.indexOf = function (metadataModel, name) {
for (var i = 0, length = metadataModel.getMetadataCount(); i < length; i++) { for (var i = 0, length = metadataModel.getMetadataCount(); i < length; i++) {
if (name === metadataModel.get(i).getName()) { if (name === metadataModel.get(i).getName()) {
return i; return i;
...@@ -317,38 +329,38 @@ morpheus.MetadataUtil.indexOf = function(metadataModel, name) { ...@@ -317,38 +329,38 @@ morpheus.MetadataUtil.indexOf = function(metadataModel, name) {
return -1; return -1;
}; };
morpheus.MetadataUtil.DEFAULT_STRING_ARRAY_FIELDS = [ 'target', 'moa' ]; morpheus.MetadataUtil.DEFAULT_STRING_ARRAY_FIELDS = ['target', 'moa'];
morpheus.MetadataUtil.DEFAULT_HIDDEN_FIELDS = new morpheus.Set(); morpheus.MetadataUtil.DEFAULT_HIDDEN_FIELDS = new morpheus.Set();
[ 'pr_analyte_id', 'pr_gene_title', 'pr_gene_id', 'pr_analyte_num', ['pr_analyte_id', 'pr_gene_title', 'pr_gene_id', 'pr_analyte_num',
'pr_bset_id', 'pr_lua_id', 'pr_pool_id', 'pr_is_bing', 'pr_is_inf', 'pr_bset_id', 'pr_lua_id', 'pr_pool_id', 'pr_is_bing', 'pr_is_inf',
'pr_is_lmark', 'qc_slope', 'qc_f_logp', 'qc_iqr', 'bead_batch', 'pr_is_lmark', 'qc_slope', 'qc_f_logp', 'qc_iqr', 'bead_batch',
'bead_revision', 'bead_set', 'det_mode', 'det_plate', 'det_well', 'bead_revision', 'bead_set', 'det_mode', 'det_plate', 'det_well',
'mfc_plate_dim', 'mfc_plate_id', 'mfc_plate_name', 'mfc_plate_quad', 'mfc_plate_dim', 'mfc_plate_id', 'mfc_plate_name', 'mfc_plate_quad',
'mfc_plate_well', 'pert_dose_unit', 'pert_id_vendor', 'pert_mfc_desc', 'mfc_plate_well', 'pert_dose_unit', 'pert_id_vendor', 'pert_mfc_desc',
'pert_mfc_id', 'pert_time', 'pert_time_unit', 'pert_univ_id', 'pert_mfc_id', 'pert_time', 'pert_time_unit', 'pert_univ_id',
'pert_vehicle', 'pool_id', 'rna_plate', 'rna_well', 'count_mean', 'pert_vehicle', 'pool_id', 'rna_plate', 'rna_well', 'count_mean',
'count_cv', 'provenance_code' ].forEach(function(name) { 'count_cv', 'provenance_code'].forEach(function (name) {
morpheus.MetadataUtil.DEFAULT_HIDDEN_FIELDS.add(name); morpheus.MetadataUtil.DEFAULT_HIDDEN_FIELDS.add(name);
}); });
morpheus.MetadataUtil.maybeConvertStrings = function(metadata, morpheus.MetadataUtil.maybeConvertStrings = function (metadata,
metadataStartIndex) { metadataStartIndex) {
for (var i = metadataStartIndex, count = metadata.getMetadataCount(); i < count; i++) { for (var i = metadataStartIndex, count = metadata.getMetadataCount(); i < count; i++) {
morpheus.VectorUtil.maybeConvertStringToNumber(metadata.get(i)); morpheus.VectorUtil.maybeConvertStringToNumber(metadata.get(i));
} }
morpheus.MetadataUtil.DEFAULT_STRING_ARRAY_FIELDS.forEach(function(field) { morpheus.MetadataUtil.DEFAULT_STRING_ARRAY_FIELDS.forEach(function (field) {
if (metadata.getByName(field)) { if (metadata.getByName(field)) {
morpheus.VectorUtil.maybeConvertToStringArray(metadata morpheus.VectorUtil.maybeConvertToStringArray(metadata
.getByName(field), ','); .getByName(field), ',');
} }
}); });
}; };
morpheus.MetadataUtil.copy = function(src, dest) { morpheus.MetadataUtil.copy = function (src, dest) {
if (src.getItemCount() != dest.getItemCount()) { if (src.getItemCount() != dest.getItemCount()) {
throw 'Item count not equal in source and destination. ' throw 'Item count not equal in source and destination. '
+ src.getItemCount() + ' != ' + dest.getItemCount(); + src.getItemCount() + ' != ' + dest.getItemCount();
} }
var itemCount = src.getItemCount(); var itemCount = src.getItemCount();
var metadataColumns = src.getMetadataCount(); var metadataColumns = src.getMetadataCount();
...@@ -363,21 +375,21 @@ morpheus.MetadataUtil.copy = function(src, dest) { ...@@ -363,21 +375,21 @@ morpheus.MetadataUtil.copy = function(src, dest) {
} }
} }
}; };
morpheus.MetadataUtil.addVectorIfNotExists = function(metadataModel, name) { morpheus.MetadataUtil.addVectorIfNotExists = function (metadataModel, name) {
var v = metadataModel.getByName(name); var v = metadataModel.getByName(name);
if (!v) { if (!v) {
v = metadataModel.add(name); v = metadataModel.add(name);
} }
return v; return v;
}; };
morpheus.MetadataUtil.getMatchingIndices = function(metadataModel, tokens) { morpheus.MetadataUtil.getMatchingIndices = function (metadataModel, tokens) {
var indices = {}; var indices = {};
for (var itemIndex = 0, nitems = metadataModel.getItemCount(); itemIndex < nitems; itemIndex++) { for (var itemIndex = 0, nitems = metadataModel.getItemCount(); itemIndex < nitems; itemIndex++) {
var matches = false; var matches = false;
for (var metadataIndex = 0, metadataCount = metadataModel for (var metadataIndex = 0, metadataCount = metadataModel
.getMetadataCount(); metadataIndex < metadataCount && !matches; metadataIndex++) { .getMetadataCount(); metadataIndex < metadataCount && !matches; metadataIndex++) {
var vector = metadataModel.get(metadataModel var vector = metadataModel.get(metadataModel
.getColumnName(metadataIndex)); .getColumnName(metadataIndex));
var value = vector.getValue(itemIndex); var value = vector.getValue(itemIndex);
for (var i = 0, length = tokens.length; i < length; i++) { for (var i = 0, length = tokens.length; i < length; i++) {
if (tokens[i] == value) { if (tokens[i] == value) {
...@@ -391,4 +403,4 @@ morpheus.MetadataUtil.getMatchingIndices = function(metadataModel, tokens) { ...@@ -391,4 +403,4 @@ morpheus.MetadataUtil.getMatchingIndices = function(metadataModel, tokens) {
} }
} }
return indices; return indices;
}; };
\ No newline at end of file
...@@ -493,12 +493,8 @@ morpheus.Util.autosuggest = function (options) { ...@@ -493,12 +493,8 @@ morpheus.Util.autosuggest = function (options) {
trim: false, trim: false,
selectionStart: options.$el[0].selectionStart selectionStart: options.$el[0].selectionStart
}); });
// quote value if needed
var value = (ui.item.value[0] !== '"'
&& ui.item.value.indexOf(' ') > 0 ? ('"'
+ ui.item.value + '"')
: ui.item.value);
var value = ui.item.value;
var show = ui.item.show; // || (ui.item.space var show = ui.item.show; // || (ui.item.space
// && // &&
// options.suggestWhenEmpty); // options.suggestWhenEmpty);
...@@ -598,6 +594,7 @@ morpheus.Util.getAutocompleteTokens = function (text, options) { ...@@ -598,6 +594,7 @@ morpheus.Util.getAutocompleteTokens = function (text, options) {
if (i === options.selectionStart - 1) { if (i === options.selectionStart - 1) {
currentToken.inSelectionStart = true; currentToken.inSelectionStart = true;
} }
} }
tokens.push({ tokens.push({
...@@ -1054,6 +1051,7 @@ morpheus.Util.createSearchPredicates = function (options) { ...@@ -1054,6 +1051,7 @@ morpheus.Util.createSearchPredicates = function (options) {
possibleToken = '"' + possibleToken; possibleToken = '"' + possibleToken;
} }
if (!validateFieldNames if (!validateFieldNames
|| availableFields.indexOf(possibleField) !== -1) { || availableFields.indexOf(possibleField) !== -1) {
token = possibleToken; token = possibleToken;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment