diff --git a/adminer/include/adminer.inc.php b/adminer/include/adminer.inc.php index 8777d1e2..dd7dea69 100644 --- a/adminer/include/adminer.inc.php +++ b/adminer/include/adminer.inc.php @@ -371,7 +371,10 @@ class Adminer { . optionlist(array(-1 => "") + array_filter(array(lang('Functions') => $functions, lang('Aggregation') => $grouping)), $val["fun"] ?? null) . "" . on_help("getTarget(event).value && getTarget(event).value.replace(/ |\$/, '(') + ')'", 1) . script("qsl('select').onchange = function () { helpClose();" . ($key !== "" ? "" : " qsl('select, input', this.parentNode).onchange();") . " };", "") - . "($column)" : $column) . "\n"; + . "($column)" : $column) + . ' ' + . script('qsl("button").onclick = selectRemoveRow;', "") + . "\n"; $i++; } echo "\n"; @@ -407,6 +410,8 @@ class Adminer { echo html_select("where[$i][op]", $this->operators, $val["op"], $change_next); echo ""; echo script("mixin(qsl('input'), {oninput: function () { $change_next }, onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});", ""); + echo ''; + echo script('qsl("button").onclick = selectRemoveRow;', ""); echo "\n"; } } @@ -425,12 +430,18 @@ class Adminer { foreach ((array) $_GET["order"] as $key => $val) { if ($val != "") { echo "
" . select_input(" name='order[$i]'", $columns, $val, "selectFieldChange"); - echo checkbox("desc[$i]", 1, isset($_GET["desc"][$key]), lang('descending')) . "
\n"; + echo checkbox("desc[$i]", 1, isset($_GET["desc"][$key]), lang('descending')); + echo ' '; + echo script('qsl("button").onclick = selectRemoveRow;', ""); + echo "\n"; $i++; } } echo "
" . select_input(" name='order[$i]'", $columns, "", "selectAddRow"); - echo checkbox("desc[$i]", 1, false, lang('descending')) . "
\n"; + echo checkbox("desc[$i]", 1, false, lang('descending')); + echo ' '; + echo script('qsl("button").onclick = selectRemoveRow;', ""); + echo "\n"; echo "\n"; } diff --git a/adminer/static/default.css b/adminer/static/default.css index 5264c999..65e768ef 100644 --- a/adminer/static/default.css +++ b/adminer/static/default.css @@ -33,6 +33,7 @@ input[type='submit'] { padding-left: 10px; padding-right: 10px; } select { border-radius: 5px; padding: 2px; vertical-align: middle;; } fieldset label input[type='checkbox'] { margin-bottom: 6px; } fieldset a { line-height: 20px; } +#fieldset-select div:last-child > button, #fieldset-search div:last-child > button, #fieldset-sort div:last-child > button { display: none; } span.separator { margin-left: 5px; margin-right: 5px; } .block { display: block; } .version { color: #777; font-size: 50%; } diff --git a/adminer/static/functions.js b/adminer/static/functions.js index 65ab98b3..274a72b7 100644 --- a/adminer/static/functions.js +++ b/adminer/static/functions.js @@ -394,9 +394,28 @@ function selectAddRow() { inputs[i].value = ''; } } + var buttons = qsa('button', row); + for (var i=0; i < buttons.length; i++) { + buttons[i].onclick = selectRemoveRow; + } field.parentNode.parentNode.appendChild(row); } +/** Remove a row in select fieldset +* @this HTMLButtonElement +*/ +function selectRemoveRow() { + var button = this; + var row = button.parentNode; + var nextRow = row; + while (nextRow = nextRow.nextSibling) { + if (nextRow.tagName === row.tagName) { + row.parentNode.removeChild(row); + return; + } + } +} + /** Prevent onsearch handler on Enter * @param KeyboardEvent * @this HTMLInputElement diff --git a/editor/include/adminer.inc.php b/editor/include/adminer.inc.php index fb75e0e6..b35d834e 100644 --- a/editor/include/adminer.inc.php +++ b/editor/include/adminer.inc.php @@ -259,15 +259,20 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5 if (($val["col"] == "" || $columns[$val["col"]]) && "$val[col]$val[val]" != "") { echo "
"; echo html_select("where[$i][op]", array(-1 => "") + $this->operators, $val["op"]); - echo "" . script("mixin(qsl('input'), {onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});", "") . "
\n"; + echo "" . script("mixin(qsl('input'), {onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});", ""); + echo '' . script('qsl("button").onclick = selectRemoveRow;', ""); + echo "\n"; $i++; } } echo "
"; echo script("qsl('select').onchange = selectAddRow;", ""); echo html_select("where[$i][op]", array(-1 => "") + $this->operators); - echo "
"; + echo ""; echo script("mixin(qsl('input'), {onchange: function () { this.parentNode.firstChild.onchange(); }, onsearch: selectSearchSearch});"); + echo ''; + echo script('qsl("button").onclick = selectRemoveRow;', ""); + echo ""; echo "\n"; }