1 /* vim: set expandtab sw=4 ts=4 sts=4: */
3 * @fileoverview JavaScript functions used on tbl_select.php
6 * @requires js/functions.js
10 * Ajax event handlers for this page
12 * Actions ajaxified here:
17 * Unbind all event handlers before tearing down a page
19 AJAX.registerTeardown('tbl_select.js', function () {
20 $('#togglesearchformlink').unbind('click');
21 $("#tbl_search_form.ajax").die('submit');
22 $('select.geom_func').unbind('change');
23 $('span.open_search_gis_editor').die('click');
26 AJAX.registerOnload('tbl_select.js', function () {
28 * Prepare a div containing a link, otherwise it's incorrectly displayed
29 * after a couple of clicks
31 $('<div id="togglesearchformdiv"><a id="togglesearchformlink"></a></div>')
32 .insertAfter('#tbl_search_form')
33 // don't show it until we have results on-screen
36 $('#togglesearchformlink')
37 .html(PMA_messages.strShowSearchCriteria)
38 .bind('click', function () {
40 $('#tbl_search_form').slideToggle();
41 if ($link.text() == PMA_messages.strHideSearchCriteria) {
42 $link.text(PMA_messages.strShowSearchCriteria);
44 $link.text(PMA_messages.strHideSearchCriteria);
46 // avoid default click action
51 * Ajax event handler for Table Search
53 $("#tbl_search_form.ajax").live('submit', function (event) {
54 var unaryFunctions = [
61 // jQuery object to reuse
62 $search_form = $(this);
63 event.preventDefault();
65 // empty previous search results while we are waiting for new results
66 $("#sqlqueryresults").empty();
67 var $msgbox = PMA_ajaxShowMessage(PMA_messages.strSearching, false);
69 PMA_prepareForAjaxRequest($search_form);
72 $search_form.find(':input').each(function () {
74 if ($input.attr('type') == 'checkbox' || $input.attr('type') == 'radio') {
75 if ($input.is(':checked')) {
76 values[this.name] = $input.val();
79 values[this.name] = $input.val();
82 var columnCount = $('select[name="columnsToDisplay[]"] option').length;
83 // Submit values only for the columns that have unary column operator or a search criteria
84 for (var a = 0; a < columnCount; a++) {
85 if ($.inArray(values['criteriaColumnOperators[' + a + ']'], unaryFunctions) >= 0) {
89 if (values['criteriaValues[' + a + ']'] === '' || values['criteriaValues[' + a + ']'] === null) {
90 delete values['criteriaValues[' + a + ']'];
91 delete values['criteriaColumnOperators[' + a + ']'];
92 delete values['criteriaColumnNames[' + a + ']'];
93 delete values['criteriaColumnTypes[' + a + ']'];
94 delete values['criteriaColumnCollations[' + a + ']'];
97 // If all columns are selected, use a single parameter to indicate that
98 if (values['columnsToDisplay[]'] !== null) {
99 if (values['columnsToDisplay[]'].length == columnCount) {
100 delete values['columnsToDisplay[]'];
101 values['displayAllColumns'] = true;
104 values['displayAllColumns'] = true;
107 $.post($search_form.attr('action'), values, function (data) {
108 PMA_ajaxRemoveMessage($msgbox);
109 if (data.success === true) {
110 if (typeof data.sql_query !== 'undefined') { // zero rows
111 $("#sqlqueryresults").html(data.sql_query);
112 } else { // results found
113 $("#sqlqueryresults").html(data.message);
114 $("#sqlqueryresults").trigger('makegrid');
116 $('#tbl_search_form')
117 // workaround for bug #3168569 - Issue on toggling the "Hide search criteria" in chrome.
120 $('#togglesearchformlink')
121 // always start with the Show message
122 .text(PMA_messages.strShowSearchCriteria);
123 $('#togglesearchformdiv')
124 // now it's time to show the div containing the link
126 // needed for the display options slider in the results
129 $("#sqlqueryresults").html(data.error);
131 PMA_highlightSQL($('#sqlqueryresults'));
135 // Following section is related to the 'function based search' for geometry data types.
136 // Initialy hide all the open_gis_editor spans
137 $('span.open_search_gis_editor').hide();
139 $('select.geom_func').bind('change', function () {
140 var $geomFuncSelector = $(this);
142 var binaryFunctions = [
176 var outputGeomFunctions = binaryFunctions.concat(tempArray);
178 // If the chosen function takes two geometry objects as parameters
179 var $operator = $geomFuncSelector.parents('tr').find('td:nth-child(5)').find('select');
180 if ($.inArray($geomFuncSelector.val(), binaryFunctions) >= 0) {
181 $operator.prop('readonly', true);
183 $operator.prop('readonly', false);
186 // if the chosen function's output is a geometry, enable GIS editor
187 var $editorSpan = $geomFuncSelector.parents('tr').find('span.open_search_gis_editor');
188 if ($.inArray($geomFuncSelector.val(), outputGeomFunctions) >= 0) {
196 $('span.open_search_gis_editor').live('click', function (event) {
197 event.preventDefault();
201 var value = $span.parent('td').children("input[type='text']").val();
203 var field = 'Parameter';
205 var geom_func = $span.parents('tr').find('.geom_func').val();
207 if (geom_func == 'Envelope') {
209 } else if (geom_func == 'ExteriorRing') {
214 // Names of input field and null checkbox
215 var input_name = $span.parent('td').children("input[type='text']").attr('name');
217 var token = $("input[name='token']").val();
220 if (!gisEditorLoaded) {
221 loadJSAndGISEditor(value, field, type, input_name, token);
223 loadGISEditor(value, field, type, input_name, token);