diff --git a/themes/finc/js/advanced_search.js b/themes/finc/js/advanced_search.js new file mode 100644 index 0000000000000000000000000000000000000000..5dad9556167bd8b8b43e983a3b53e7b2f05d26a9 --- /dev/null +++ b/themes/finc/js/advanced_search.js @@ -0,0 +1,141 @@ +/* Copied from bootstrap3 to set focus on new group or field - FIXME: Remove after PR is effective - #17985 - RL */ +/* exported addGroup, addSearch, deleteGroup, deleteSearch */ +var nextGroup = 0; +var groupLength = []; + +function addSearch(group, _fieldValues) { + var fieldValues = _fieldValues || {}; + // Build the new search + var inputID = group + '_' + groupLength[group]; + var $newSearch = $($('#new_search_template').html()); + + $newSearch.attr('id', 'search' + inputID); + $newSearch.find('input.form-control') + .attr('id', 'search_lookfor' + inputID) + .attr('name', 'lookfor' + group + '[]') + .val(''); + $newSearch.find('select.adv-term-type option:first-child').attr('selected', 1); + $newSearch.find('select.adv-term-type') + .attr('id', 'search_type' + inputID) + .attr('name', 'type' + group + '[]'); + $newSearch.find('.adv-term-remove') + .attr('onClick', 'return deleteSearch(' + group + ',' + groupLength[group] + ')'); + // Preset Values + if (typeof fieldValues.term !== "undefined") { + $newSearch.find('input.form-control').val(fieldValues.term); + } + if (typeof fieldValues.field !== "undefined") { + $newSearch.find('select.adv-term-type option[value="' + fieldValues.field + '"]').attr('selected', 1); + } + if (typeof fieldValues.op !== "undefined") { + $newSearch.find('select.adv-term-op option[value="' + fieldValues.op + '"]').attr('selected', 1); + } + // Insert it + $("#group" + group + "Holder").before($newSearch); + // Individual search ops (for searches like EDS) + if (groupLength[group] === 0) { + $newSearch.find('.first-op') + .attr('name', 'op' + group + '[]') + .removeClass('hidden'); + $newSearch.find('select.adv-term-op').remove(); + } else { + $newSearch.find('select.adv-term-op') + .attr('id', 'search_op' + group + '_' + groupLength[group]) + .attr('name', 'op' + group + '[]') + .removeClass('hidden'); + $newSearch.find('.first-op').remove(); + $newSearch.find('label').remove(); + // Show x if we have more than one search inputs + $('#group' + group + ' .adv-term-remove').removeClass('hidden'); + } + groupLength[group]++; + + // #17985 finc barf + $newSearch.find('input.form-control').focus(); + + return false; +} + +function deleteSearch(group, sindex) { + for (var i = sindex; i < groupLength[group] - 1; i++) { + var $search0 = $('#search' + group + '_' + i); + var $search1 = $('#search' + group + '_' + (i + 1)); + $search0.find('input').val($search1.find('input').val()); + var select0 = $search0.find('select')[0]; + var select1 = $search1.find('select')[0]; + select0.selectedIndex = select1.selectedIndex; + } + if (groupLength[group] > 1) { + groupLength[group]--; + $('#search' + group + '_' + groupLength[group]).remove(); + if (groupLength[group] === 1) { + $('#group' + group + ' .adv-term-remove').addClass('hidden'); // Hide x + } + } + return false; +} + +function addGroup(_firstTerm, _firstField, _join) { + var firstTerm = _firstTerm || ''; + var firstField = _firstField || ''; + var join = _join || ''; + + var $newGroup = $($('#new_group_template').html()); + $newGroup.find('.adv-group-label') // update label + .attr('for', 'search_lookfor' + nextGroup + '_0'); + $newGroup.attr('id', 'group' + nextGroup); + $newGroup.find('.search_place_holder') + .attr('id', 'group' + nextGroup + 'Holder') + .removeClass('hidden'); + $newGroup.find('.add_search_link') + .attr('id', 'add_search_link_' + nextGroup) + .attr('onClick', 'return addSearch(' + nextGroup + ')') + .removeClass('hidden'); + $newGroup.find('.adv-group-close') + .attr('onClick', 'return deleteGroup(' + nextGroup + ')'); + $newGroup.find('select.form-control') + .attr('id', 'search_bool' + nextGroup) + .attr('name', 'bool' + nextGroup + '[]'); + $newGroup.find('.search_bool') + .attr('for', 'search_bool' + nextGroup); + if (join.length > 0) { + $newGroup.find('option[value="' + join + '"]').attr('selected', 1); + } + // Insert + $('#groupPlaceHolder').before($newGroup); + // Populate + groupLength[nextGroup] = 0; + addSearch(nextGroup, {term: firstTerm, field: firstField}); + // Show join menu + if (nextGroup > 0) { + $('#groupJoin').removeClass('hidden'); + // Show x + $('.adv-group-close').removeClass('hidden'); + } + + // #17985 finc barf + $newGroup.children('input.form-control').first().focus(); + + return nextGroup++; +} + +function deleteGroup(group) { + // Find the group and remove it + $("#group" + group).remove(); + // If the last group was removed, add an empty group + if ($('.adv-group').length === 0) { + addGroup(); + } else if ($('#advSearchForm .adv-group').length === 1) { + $('#groupJoin').addClass('hidden'); // Hide join menu + $('.adv-group .adv-group-close').addClass('hidden'); // Hide x + } + return false; +} + +$(document).ready(function advSearchReady() { + $('.clear-btn').click(function clearBtnClick() { + $('input[type="text"]').val(''); + $("option:selected").removeAttr("selected"); + $("#illustrated_-1").click(); + }); +});