diff --git a/src/matrix/metadata_util.js b/src/matrix/metadata_util.js index be75aba6cfd6866b065a1f1a0ac37565bba0de39..285fe729ecc93975409b2b81cd5e438dc286015f 100644 --- a/src/matrix/metadata_util.js +++ b/src/matrix/metadata_util.js @@ -1,8 +1,8 @@ -morpheus.MetadataUtil = function() { +morpheus.MetadataUtil = function () { }; -morpheus.MetadataUtil.renameFields = function(dataset, options) { - _.each(options.rows, function(item) { +morpheus.MetadataUtil.renameFields = function (dataset, options) { + _.each(options.rows, function (item) { if (item.renameTo) { var v = dataset.getRowMetadata().getByName(item.field); if (v) { @@ -10,7 +10,7 @@ morpheus.MetadataUtil.renameFields = function(dataset, options) { } } }); - _.each(options.columns, function(item) { + _.each(options.columns, function (item) { if (item.renameTo) { var v = dataset.getColumnMetadata().getByName(item.field); if (v) { @@ -29,15 +29,15 @@ morpheus.MetadataUtil.renameFields = function(dataset, options) { * Whether to search columns * @param options.defaultMatchMode * 'exact' or 'contains' - * + * */ -morpheus.MetadataUtil.search = function(options) { +morpheus.MetadataUtil.search = function (options) { var model = options.model; var text = options.text; var isColumns = options.isColumns; text = $.trim(text); if (text === '') { - return null; + return null; } var tokens = morpheus.Util.getAutocompleteTokens(text); if (tokens.length == 0) { @@ -47,9 +47,9 @@ morpheus.MetadataUtil.search = function(options) { var fieldNames = morpheus.MetadataUtil.getMetadataNames(model); fieldNames.push(indexField); var predicates = morpheus.Util.createSearchPredicates({ - tokens : tokens, - fields : fieldNames, - defaultMatchMode : options.defaultMatchMode + tokens: tokens, + fields: fieldNames, + defaultMatchMode: options.defaultMatchMode }); var vectors = []; var nameToVector = new morpheus.Map(); @@ -57,9 +57,9 @@ morpheus.MetadataUtil.search = function(options) { var v = model.get(j); var dataType = morpheus.VectorUtil.getDataType(v); var wrapper = { - vector : v, - dataType : dataType, - isArray : dataType.indexOf('[') === 0 + vector: v, + dataType: dataType, + isArray: dataType.indexOf('[') === 0 }; nameToVector.set(v.getName(), wrapper); vectors.push(wrapper); @@ -135,18 +135,18 @@ morpheus.MetadataUtil.search = function(options) { return indices; }; -morpheus.MetadataUtil.shallowCopy = function(model) { +morpheus.MetadataUtil.shallowCopy = function (model) { var copy = new morpheus.MetadataModel(model.getItemCount()); for (var i = 0; i < model.getMetadataCount(); i++) { var v = model.get(i); // copy properties b/c they can be modified via ui var newVector = new morpheus.VectorAdapter(v); newVector.properties = new morpheus.Map(); - newVector.getProperties = function() { + newVector.getProperties = function () { return this.properties; }; - v.getProperties().forEach(function(val, key) { + v.getProperties().forEach(function (val, key) { if (!morpheus.VectorKeys.COPY_IGNORE.has(key)) { newVector.properties.set(key, val); } @@ -157,14 +157,14 @@ morpheus.MetadataUtil.shallowCopy = function(model) { } return copy; }; -morpheus.MetadataUtil.autocomplete = function(model) { - return function(tokens, cb) { +morpheus.MetadataUtil.autocomplete = function (model) { + return function (tokens, cb) { // check for term:searchText var matches = []; var regex = null; var searchModel = model; var token = tokens != null && tokens.length > 0 ? tokens[tokens.selectionStartIndex] - : ''; + : ''; token = $.trim(token); try { if (token !== '') { @@ -174,17 +174,17 @@ morpheus.MetadataUtil.autocomplete = function(model) { if (token.charCodeAt(semi - 1) !== 92) { // \: var possibleField = $.trim(token.substring(0, semi)); if (possibleField.length > 0 - && possibleField[0] === '"' - && possibleField[token.length - 1] === '"') { + && possibleField[0] === '"' + && possibleField[token.length - 1] === '"') { possibleField = possibleField.substring(1, - possibleField.length - 1); + possibleField.length - 1); } var index = morpheus.MetadataUtil.indexOf(searchModel, - possibleField); + possibleField); if (index !== -1) { token = $.trim(token.substring(semi + 1)); searchModel = new morpheus.MetadataModelColumnView( - model, [ index ]); + model, [index]); } } @@ -219,8 +219,8 @@ morpheus.MetadataUtil.autocomplete = function(model) { if (val != null) { if (isArray[j]) { for (var k = 0; k < val.length; k++) { - var id = new morpheus.Identifier([ val[k], - v.getName() ]); + var id = new morpheus.Identifier([val[k], + v.getName()]); if (!set.has(id) && regex.test(val[k])) { set.add(id); if (set.size() === max) { @@ -229,8 +229,8 @@ morpheus.MetadataUtil.autocomplete = function(model) { } } } else { - var id = new morpheus.Identifier([ val, - v.getName() ]); + var id = new morpheus.Identifier([val, + v.getName()]); if (!set.has(id) && regex.test(val)) { set.add(id); if (set.size() === max) { @@ -243,16 +243,24 @@ morpheus.MetadataUtil.autocomplete = function(model) { } } - set.forEach(function(id) { + set.forEach(function (id) { var array = id.getArray(); var field = array[1]; var val = array[0]; + var quotedField = field; + if (quotedField.indexOf(' ') !== -1) { + quotedField = '"' + quotedField + '"'; + } + var quotedValue = val; + if (quotedValue.indexOf(' ') !== -1) { + quotedValue = '"' + quotedValue + '"'; + } matches.push({ - value : field + ':' + val, - label : '' + field - + ':' - + '' + val - + '' + value: quotedField + ':' + quotedValue, + label: '' + field + + ':' + + '' + val + + '' }); }); @@ -269,13 +277,17 @@ morpheus.MetadataUtil.autocomplete = function(model) { var dataType = morpheus.VectorUtil.getDataType(v); var field = v.getName(); if (dataType === 'number' || dataType === 'string' - || dataType === '[string]') { + || dataType === '[string]') { if (regex.test(field)) { + var quotedField = field; + if (quotedField.indexOf(' ') !== -1) { + quotedField = '"' + quotedField + '"'; + } matches.push({ - value : field + ':', - label : '' + field - + ':', - show : true + value: quotedField + ':', + label: '' + field + + ':', + show: true }); } } @@ -284,31 +296,31 @@ morpheus.MetadataUtil.autocomplete = function(model) { }; }; -morpheus.MetadataUtil.getMetadataNames = function(metadataModel) { +morpheus.MetadataUtil.getMetadataNames = function (metadataModel) { var names = []; for (var i = 0, count = metadataModel.getMetadataCount(); i < count; i++) { names.push(metadataModel.get(i).getName(i)); } - names.sort(function(a, b) { + names.sort(function (a, b) { a = a.toLowerCase(); b = b.toLowerCase(); return (a < b ? -1 : (a === b ? 0 : 1)); }); return names; }; -morpheus.MetadataUtil.getVectors = function(metadataModel, names) { +morpheus.MetadataUtil.getVectors = function (metadataModel, names) { var vectors = []; - names.forEach(function(name) { + names.forEach(function (name) { var v = metadataModel.getByName(name); if (!v) { throw name + ' not found. Available fields are ' - + morpheus.MetadataUtil.getMetadataNames(metadataModel); + + morpheus.MetadataUtil.getMetadataNames(metadataModel); } vectors.push(v); }); return vectors; }; -morpheus.MetadataUtil.indexOf = function(metadataModel, name) { +morpheus.MetadataUtil.indexOf = function (metadataModel, name) { for (var i = 0, length = metadataModel.getMetadataCount(); i < length; i++) { if (name === metadataModel.get(i).getName()) { return i; @@ -317,38 +329,38 @@ morpheus.MetadataUtil.indexOf = function(metadataModel, name) { 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(); -[ '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_is_lmark', 'qc_slope', 'qc_f_logp', 'qc_iqr', 'bead_batch', - 'bead_revision', 'bead_set', 'det_mode', 'det_plate', 'det_well', - 'mfc_plate_dim', 'mfc_plate_id', 'mfc_plate_name', 'mfc_plate_quad', - 'mfc_plate_well', 'pert_dose_unit', 'pert_id_vendor', 'pert_mfc_desc', - 'pert_mfc_id', 'pert_time', 'pert_time_unit', 'pert_univ_id', - 'pert_vehicle', 'pool_id', 'rna_plate', 'rna_well', 'count_mean', - 'count_cv', 'provenance_code' ].forEach(function(name) { +['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_is_lmark', 'qc_slope', 'qc_f_logp', 'qc_iqr', 'bead_batch', + 'bead_revision', 'bead_set', 'det_mode', 'det_plate', 'det_well', + 'mfc_plate_dim', 'mfc_plate_id', 'mfc_plate_name', 'mfc_plate_quad', + 'mfc_plate_well', 'pert_dose_unit', 'pert_id_vendor', 'pert_mfc_desc', + 'pert_mfc_id', 'pert_time', 'pert_time_unit', 'pert_univ_id', + 'pert_vehicle', 'pool_id', 'rna_plate', 'rna_well', 'count_mean', + 'count_cv', 'provenance_code'].forEach(function (name) { morpheus.MetadataUtil.DEFAULT_HIDDEN_FIELDS.add(name); }); -morpheus.MetadataUtil.maybeConvertStrings = function(metadata, - metadataStartIndex) { +morpheus.MetadataUtil.maybeConvertStrings = function (metadata, + metadataStartIndex) { for (var i = metadataStartIndex, count = metadata.getMetadataCount(); i < count; 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)) { 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()) { throw 'Item count not equal in source and destination. ' - + src.getItemCount() + ' != ' + dest.getItemCount(); + + src.getItemCount() + ' != ' + dest.getItemCount(); } var itemCount = src.getItemCount(); var metadataColumns = src.getMetadataCount(); @@ -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); if (!v) { v = metadataModel.add(name); } return v; }; -morpheus.MetadataUtil.getMatchingIndices = function(metadataModel, tokens) { +morpheus.MetadataUtil.getMatchingIndices = function (metadataModel, tokens) { var indices = {}; for (var itemIndex = 0, nitems = metadataModel.getItemCount(); itemIndex < nitems; itemIndex++) { var matches = false; for (var metadataIndex = 0, metadataCount = metadataModel - .getMetadataCount(); metadataIndex < metadataCount && !matches; metadataIndex++) { + .getMetadataCount(); metadataIndex < metadataCount && !matches; metadataIndex++) { var vector = metadataModel.get(metadataModel - .getColumnName(metadataIndex)); + .getColumnName(metadataIndex)); var value = vector.getValue(itemIndex); for (var i = 0, length = tokens.length; i < length; i++) { if (tokens[i] == value) { @@ -391,4 +403,4 @@ morpheus.MetadataUtil.getMatchingIndices = function(metadataModel, tokens) { } } return indices; -}; \ No newline at end of file +}; diff --git a/src/util/util.js b/src/util/util.js index 5f5f526f063dced9cbe6d2b18bc081e48c6166d5..5ab25b20f8ce4e328d97e91e96b69bbe7f1a1fae 100644 --- a/src/util/util.js +++ b/src/util/util.js @@ -493,12 +493,8 @@ morpheus.Util.autosuggest = function (options) { trim: false, 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 // && // options.suggestWhenEmpty); @@ -598,6 +594,7 @@ morpheus.Util.getAutocompleteTokens = function (text, options) { if (i === options.selectionStart - 1) { currentToken.inSelectionStart = true; } + } tokens.push({ @@ -1054,6 +1051,7 @@ morpheus.Util.createSearchPredicates = function (options) { possibleToken = '"' + possibleToken; } + if (!validateFieldNames || availableFields.indexOf(possibleField) !== -1) { token = possibleToken;