Preventing splitting of the words in the lookup query for # smart annotations. Query on the # is now performed on every character input, before it sometimes just filtered out the old (results count limited) query. Some refactoring of samrt annotations JS. [SCI-884, SCI-889]

This commit is contained in:
Matej Zrimšek 2017-01-13 18:51:05 +01:00
parent e6a8f46139
commit 15d7944302
5 changed files with 35 additions and 113 deletions

View file

@ -97,7 +97,8 @@ var SmartAnnotation = (function() {
src_btn = 'exp';
break;
default:
src_btn = 'sam';
var $type = $('.atwho-view[style] .btn-primary').data('filter');
src_btn = _.isUndefined($type) ? 'sam' : $type;
break;
}
@ -133,19 +134,6 @@ var SmartAnnotation = (function() {
});
}
// reset the dropdown
function reinitializeOnListHide() {
Util.showHideBinding();
_.map($('.atwho-view'), function(el) {
$(el).off('hide');
$(el).on('hide', function() {
$(field).atwho('destroy');
init();
});
});
}
// initialise dropdown dismiss button
function initDismissButton() {
$('.atwho-header-res .dismiss').off('click');
@ -155,95 +143,27 @@ var SmartAnnotation = (function() {
});
}
// Initialize filter buttons
// Initialize or update filter buttons
function initButtons(query, search_filter) {
$('.atwho-header-res .title button').off();
$('.atwho-header-res .dismiss').off('click');
initDismissButton();
resourcesChecker(query, search_filter);
$('.atwho-header-res .title button').off();
$('.atwho-header-res .title button').on('click', function(e) {
var $button, $prevButton;
e.stopPropagation();
e.preventDefault();
$button = $(this);
$prevButton = $button.closest('.title').children('.btn-primary');
// Update the selected filter button
var $selectedBtn = $(this);
var $prevBtn = $selectedBtn.closest('.title').children('.btn-primary');
$selectedBtn.removeClass('btn-default').addClass('btn-primary');
$prevBtn.removeClass('btn-primary').addClass('btn-default');
switch ($button.attr('data-filter')) {
case 'prj':
generateNewQuery(dataProjectUrl,
$prevButton,
$button);
break;
case 'exp':
generateNewQuery(dataExperimentUrl,
$prevButton,
$button);
break;
case 'tsk':
generateNewQuery(dataTaskUrl,
$prevButton,
$button);
break;
case 'sam':
generateNewQuery(dataSampleUrl,
$prevButton,
$button);
break;
default:
break;
}
// Updates query and dropdown elements; focuses input
$(field).click().focus();
});
}
// Generates new query when user filters the results
function generateNewQuery(link, prevBtn, selectedBtn) {
var regexp, _a, _y, new_query, query_obj, field_selected;
_a = decodeURI("%C3%80");
_y = decodeURI("%C3%BF");
regexp = new RegExp("(#|task#|project#|sample#|experiment#)([A-Za-z" +
_a + "-" + _y + "0-9_ \'\.\+\-]*)$|" +
"(#|task#|project#|sample#|experiment#)([^\\x00-\\xff]*)$", 'gi');
// filters field if multiple input fields on the page
_.each($(field), function(e) {
if($(e).atwho('isSelecting')){
field_selected = e;
}});
if(field_selected) {
query_obj = regexp.exec($(field_selected).val());
if(query_obj) {
$.getJSON(
link,
{query: query_obj[2]},
function(data) {
if(data.res.length > 0 && field_selected) {
$(field_selected)
.atwho('load', query_obj[0], data.res)
.atwho('run');
prevBtn
.removeClass('btn-primary')
.addClass('btn-default');
selectedBtn
.removeClass('btn-default')
.addClass('btn-primary');
reinitializeOnListHide();
initButtons(query_obj[2],
selectedBtn.html());
} else {
$(field).atwho('destroy');
init();
}
});
}
}
}
// Generates suggestion dropdown filter
function generateFilterMenu(active, res_data) {
var header = '<div class="atwho-header-res">' +
@ -412,8 +332,26 @@ var SmartAnnotation = (function() {
at: '#',
callbacks: {
remoteFilter: function(query, callback) {
var $type = $('.atwho-view[style] .btn-primary').data('filter');
switch($type) {
case 'tsk':
$type = dataTaskUrl;
break;
case 'prj':
$type = dataProjectUrl;
break;
case 'exp':
$type = dataExperimentUrl;
break;
case 'sam':
default:
$type = dataSampleUrl;
break;
}
$.getJSON(
dataSampleUrl,
$type,
{query: query},
function(data) {
callback(data.res);

View file

@ -46,11 +46,7 @@ class Experiment < ActiveRecord::Base
.select('id')
if query
a_query = query.strip
.gsub("_","\\_")
.gsub("%","\\%")
.split(/\s+/)
.map {|t| "%" + t + "%" }
a_query = '%' + query.strip.gsub("_","\\_").gsub("%","\\%") + '%'
else
a_query = query
end

View file

@ -54,11 +54,7 @@ class MyModule < ActiveRecord::Base
.select("id")
if query
a_query = query.strip
.gsub("_","\\_")
.gsub("%","\\%")
.split(/\s+/)
.map {|t| "%" + t + "%" }
a_query = '%' + query.strip.gsub("_","\\_").gsub("%","\\%") + '%'
else
a_query = query
end

View file

@ -35,11 +35,7 @@ class Project < ActiveRecord::Base
)
if query
a_query = query.strip
.gsub("_","\\_")
.gsub("%","\\%")
.split(/\s+/)
.map {|t| "%" + t + "%" }
a_query = '%' + query.strip.gsub("_","\\_").gsub("%","\\%") + '%'
else
a_query = query
end

View file

@ -34,11 +34,7 @@ class Sample < ActiveRecord::Base
.distinct
if query
a_query = query.strip
.gsub("_","\\_")
.gsub("%","\\%")
.split(/\s+/)
.map {|t| "%" + t + "%" }
a_query = '%' + query.strip.gsub("_","\\_").gsub("%","\\%") + '%'
else
a_query = query
end