(function() { 'use strict'; function smartAnnotation(field) { // Generates new query when user filters the results function generateNewQuery(link) { var regexp = new XRegExp('(\\s+|^)task#|project#|sample#|experiment#(\\p{L}+)$', 'gi'); var new_query = regexp.exec($(field).val()); debugger; $.getJSON( link, {query: new_query}, function(data) { $(field).atwho('load',':', data).atwho('run'); }); } // Generates suggestion dropdown filter function generateFilter(link) { $('.atwho-view ul').prepend('
  • ' + '' + '' + '' + '
  • '); $('#atwho-filter .btn').on('click', function(event) { event.stopPropagation(); var $button = $(this); switch ($button.attr('data-filter')) { case 'prj': generateNewQuery('/organizations/1/atwho_projects.json'); break; case 'exp': generateNewQuery('/organizations/1/atwho_experiments.json'); break; case 'tsk': generateNewQuery('/organizations/1/atwho_my_modules.json'); break; case 'sam': generateNewQuery('/organizations/1/atwho_samples.json'); break; default: break; } }); } // Generates resources list items function generateTemplate(map) { var res = ''; res += '
  • '; switch(map.type) { case 'tsk': res += '' + map.type + ''; break; case 'prj': res += '' + map.type + ''; break; case 'exp': res += '' + map.type + ''; break; case 'sam': res += ''; break; } res += ' '; res += ''; res += map.name; res += ''; res += ' '; switch (map.type) { case 'tsk': res += '< ' + map.experimentName + ' < ' + map.projectName + ''; break; case 'exp': res += '< ' + map.projectName + ''; break; case 'sam': res += '' + map.description + ''; break; default: break; } res += '
  • '; return res; } function init() { if (_.isUndefined($(field).data('atwho'))) { $(field) .atwho({ at: '#', callbacks: { remoteFilter: function(query, callback) { $.getJSON( '/organizations/1/atwho_samples.json', {query: query}, function(data) { callback(data.res); } ); }, tplEval: function(_tpl, map) { var res; try { res = generateTemplate(map); } catch (_error) { res = ''; } return res; }, beforeReposition: function(offset) { generateFilter('bleble'); } }, displayTpl: '${type}${name}', insertTpl: '[${atwho-at}${name}~${id}]', limit: 5, startWithSpace: true }) .atwho({ at: 'task#', callbacks: { remoteFilter: function(query, callback) { $.getJSON( '/organizations/1/atwho_my_modules.json', {query: query}, function(data) { callback(data.res); } ); }, tplEval: function(_tpl, map) { var res; try { res = generateTemplate(map); } catch (_error) { res = ''; } return res; }, beforeReposition: function(offset) { generateFilter('bleble'); } }, displayTpl: '${type}${name}', insertTpl: '[${atwho-at}${name}~${id}]', limit: 5, startWithSpace: true }) .atwho({ at: 'project#', callbacks: { remoteFilter: function(query, callback) { $.getJSON( '/organizations/1/atwho_projects.json', {query: query}, function(data) { callback(data.res); } ); }, tplEval: function(_tpl, map) { var res; try { res = generateTemplate(map); } catch (_error) { res = ''; } return res; }, beforeReposition: function(offset) { generateFilter('bleble'); } }, displayTpl: '${type}${name}', insertTpl: '[${atwho-at}${name}~${id}]', limit: 5, startWithSpace: true }) .atwho({ at: 'experiment#', callbacks: { remoteFilter: function(query, callback) { $.getJSON( '/organizations/1/atwho_experiments.json', {query: query}, function(data) { callback(data.res); } ); }, tplEval: function(_tpl, map) { var res; try { res = generateTemplate(map); } catch (_error) { res = ''; } return res; }, beforeReposition: function(offset) { generateFilter('bleble'); } }, displayTpl: '${type}${name}', insertTpl: '[${atwho-at}${name}~${id}]', limit: 5, startWithSpace: true }) .atwho({ at: 'sample#', callbacks: { remoteFilter: function(query, callback) { $.getJSON( '/organizations/1/atwho_samples.json', {query: query}, function(data) { callback(data.res); } ); }, tplEval: function(_tpl, map) { var res; try { res = generateTemplate(map); } catch (_error) { res = ''; } return res; }, beforeReposition: function(offset) { generateFilter('bleble'); } }, displayTpl: '' + '${name}', insertTpl: '[${atwho-at}${name}~${id}]', limit: 5, startWithSpace: true }); } } return { init: init }; } var smartA = new smartAnnotation('#comment_message'); $(document).ready(function() { setTimeout(function(){ smartA.init(); }, 1000); }); })();