var SmartAnnotation = (function() { 'use strict'; // utilities var Util = (function() { // helper method that binds show/hidden action function showHideBinding() { $.each(['show', 'hide'], function (i, ev) { var el = $.fn[ev]; $.fn[ev] = function () { this.trigger(ev); return el.apply(this, arguments); }; }); } var publicApi = { showHideBinding: showHideBinding }; return publicApi; })(); function setAtWho(field) { var dataUserUrl, dataTaskUrl, dataProjectUrl, dataExperimentUrl, dataSampleUrl, dataMenuItemsUrl, prevAt, DEFAULT_SEARCH_FILTER; dataUserUrl = $(document.body).attr('data-atwho-users-url'); dataTaskUrl = $(document.body).attr('data-atwho-task-url'); dataProjectUrl = $(document.body).attr('data-atwho-project-url'); dataExperimentUrl = $(document.body).attr('data-atwho-experiment-url'); dataSampleUrl = $(document.body).attr('data-atwho-sample-url'); dataMenuItemsUrl = $(document.body).attr('data-atwho-menu-items'); // Default selected filter when using '#' DEFAULT_SEARCH_FILTER = 'sam'; // helper methods for AtWho callback function _templateEval(_tpl, map) { var res; try { res = generateTemplate(map); } catch (_error) { res = ''; } return res; } function _matchHighlighter(li, query, searchFilter) { var $li, re; function highlight(el, sel, re) { var prevVal, newVal; prevVal = el.find(sel).html(); newVal = prevVal.replace(re, '$&'); el.find(sel).html(newVal); } if (!query) { return li; } $li = $(li); re = new RegExp(query, 'gi'); // search_filter is not passed for the user if(searchFilter) { highlight($li, '[data-val=name]', re); } else { highlight($li, '[data-val=full-name]', re); highlight($li, '[data-val=email]', re); } return $li[0].outerHTML } function _generateInputTag(value, li) { var res = ''; res += '[#' + li.attr('data-name'); res += '~' + li.attr('data-type'); res += '~' + li.attr('data-id') + ']'; return res; } // check if query has some hits and disables the buttons without it function resourcesChecker(query, searchFilter) { var $element; $.getJSON( dataMenuItemsUrl, {query: query}, function(data){ if(data) { _.each($('.atwho-header-res .title .btn'), function(el) { $element = $(el); if(data[$element.data('filter')].length === 0) { $element.prop('disabled', true); $element .removeClass('btn-primary') .addClass('btn-default'); $('[data-filter="' + searchFilter +'"]') .removeClass('btn-default') .addClass('btn-primary'); } else { $element.prop('disabled', false); if($element.data('filter') == searchFilter) { $element .removeClass('btn-default') .addClass('btn-primary'); } else { $element .removeClass('btn-primary') .addClass('btn-default'); } } }); } }); } // initialise dropdown dismiss button function initDismissButton() { $('.atwho-header-res .dismiss').off('click'); $('.atwho-header-res .dismiss').on('click', function() { $(field).atwho('destroy'); init(); }); } // Initialize or update filter buttons function initButtons(query, searchFilter) { initDismissButton(); resourcesChecker(query, searchFilter); $('.atwho-header-res .title button').off(); $('.atwho-header-res .title button').on('click', function(e) { // 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'); // Updates query and dropdown elements; focuses input $(field).click().focus(); }); } // Generates suggestion dropdown filter function generateFilterMenu(active, res_data) { var header = '