From 741b76fbd4a7845c9c5e06cd6dd7ab6bee2fd1b4 Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Thu, 11 Jan 2018 13:42:45 +0100 Subject: [PATCH] Replace getElementsByTagName by shortcut for querySelectorAll --- adminer/include/functions.inc.php | 2 +- adminer/static/editing.js | 32 ++++++++++++++-------------- adminer/static/functions.js | 35 +++++++++++++++++++------------ plugins/tables-filter.php | 4 ++-- 4 files changed, 41 insertions(+), 32 deletions(-) diff --git a/adminer/include/functions.inc.php b/adminer/include/functions.inc.php index ad71a341..81951fae 100644 --- a/adminer/include/functions.inc.php +++ b/adminer/include/functions.inc.php @@ -1383,7 +1383,7 @@ function edit_form($TABLE, $fields, $row, $update) { } } echo ($update ? "\n" - : ($_POST || !$fields ? "" : "\n") + : ($_POST || !$fields ? "" : "\n") ); if (isset($_GET["select"])) { hidden_fields(array("check" => (array) $_POST["check"], "clone" => $_POST["clone"], "all" => $_POST["all"])); diff --git a/adminer/static/editing.js b/adminer/static/editing.js index a1c1438f..e82dd5f4 100644 --- a/adminer/static/editing.js +++ b/adminer/static/editing.js @@ -23,7 +23,7 @@ function bodyLoad(version) { jush.custom_links = jushLinks; } jush.highlight_tag('code', 0); - var tags = document.getElementsByTagName('textarea'); + var tags = qsa('textarea', document); for (var i = 0; i < tags.length; i++) { if (/(^|\s)jush-/.test(tags[i].className)) { var pre = jush.textarea(tags[i]); @@ -98,14 +98,14 @@ function dbChange(el) { */ function selectFieldChange(form) { var ok = (function () { - var inputs = form.getElementsByTagName('input'); + var inputs = qsa('input', form); for (var i=0; i < inputs.length; i++) { if (inputs[i].value && /^fulltext/.test(inputs[i].name)) { return true; } } var ok = form.limit.value; - var selects = form.getElementsByTagName('select'); + var selects = qsa('select', form); var group = false; var columns = {}; for (var i=0; i < selects.length; i++) { @@ -218,14 +218,14 @@ function editingAddRow(button, focus) { var x = match[0] + (match[2] ? added.substr(match[2].length) : added) + '1'; var row = parentTag(button, 'tr'); var row2 = cloneNode(row); - var tags = row.getElementsByTagName('select'); - var tags2 = row2.getElementsByTagName('select'); + var tags = qsa('select', row); + var tags2 = qsa('select', row2); for (var i=0; i < tags.length; i++) { tags2[i].name = tags[i].name.replace(/[0-9.]+/, x); tags2[i].selectedIndex = tags[i].selectedIndex; } - tags = row.getElementsByTagName('input'); - tags2 = row2.getElementsByTagName('input'); + tags = qsa('input', row); + tags2 = qsa('input', row2); var input = tags2[0]; // IE loose tags2 after insertBefore() for (var i=0; i < tags.length; i++) { if (tags[i].name == 'auto_increment_col') { @@ -364,9 +364,9 @@ function editingLengthBlur(edit) { * @param number */ function columnShow(checked, column) { - var trs = qs('#edit-fields').getElementsByTagName('tr'); + var trs = qsa('tr', qs('#edit-fields')); for (var i=0; i < trs.length; i++) { - alterClass(trs[i].getElementsByTagName('td')[column], 'hidden', !checked); + alterClass(qsa('td', trs[i])[column], 'hidden', !checked); } } @@ -407,7 +407,7 @@ function partitionNameChange(el) { function foreignAddRow(field) { field.onchange = function () { }; var row = cloneNode(parentTag(field, 'tr')); - var selects = row.getElementsByTagName('select'); + var selects = qsa('select', row); for (var i=0; i < selects.length; i++) { selects[i].name = selects[i].name.replace(/\]/, '1$&'); selects[i].selectedIndex = 0; @@ -423,12 +423,12 @@ function foreignAddRow(field) { function indexesAddRow(field) { field.onchange = function () { }; var row = cloneNode(parentTag(field, 'tr')); - var selects = row.getElementsByTagName('select'); + var selects = qsa('select', row); for (var i=0; i < selects.length; i++) { selects[i].name = selects[i].name.replace(/indexes\[\d+/, '$&1'); selects[i].selectedIndex = 0; } - var inputs = row.getElementsByTagName('input'); + var inputs = qsa('input', row); for (var i=0; i < inputs.length; i++) { inputs[i].name = inputs[i].name.replace(/indexes\[\d+/, '$&1'); inputs[i].value = ''; @@ -443,7 +443,7 @@ function indexesAddRow(field) { function indexesChangeColumn(field, prefix) { var names = []; for (var tag in { 'select': 1, 'input': 1 }) { - var columns = parentTag(field, 'td').getElementsByTagName(tag); + var columns = qsa(tag, parentTag(field, 'td')); for (var i=0; i < columns.length; i++) { if (/\[columns\]/.test(columns[i].name)) { var value = selectValue(columns[i]); @@ -472,13 +472,13 @@ function indexesAddColumn(field, prefix) { select.onchange(); } var column = cloneNode(field.parentNode); - var selects = column.getElementsByTagName('select'); + var selects = qsa('select', column); for (var i = 0; i < selects.length; i++) { select = selects[i]; select.name = select.name.replace(/\]\[\d+/, '$&1'); select.selectedIndex = 0; } - var inputs = column.getElementsByTagName('input'); + var inputs = qsa('input', column); for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; input.name = input.name.replace(/\]\[\d+/, '$&1'); @@ -529,7 +529,7 @@ function schemaMousemove(ev) { ev = ev || event; var left = (ev.clientX - x) / em; var top = (ev.clientY - y) / em; - var divs = that.getElementsByTagName('div'); + var divs = qsa('div', that); var lineSet = { }; for (var i=0; i < divs.length; i++) { if (divs[i].className == 'references') { diff --git a/adminer/static/functions.js b/adminer/static/functions.js index e332373e..e503e37d 100644 --- a/adminer/static/functions.js +++ b/adminer/static/functions.js @@ -7,6 +7,15 @@ function qs(selector) { return document.querySelector(selector); } +/** Get all elements by selector +* @param string +* @param HTMLElement +* @return NodeList +*/ +function qsa(selector, context) { + return context.querySelectorAll(selector); +} + /** Add or remove CSS class * @param HTMLElement * @param string @@ -116,7 +125,7 @@ function trCheck(el) { */ function selectCount(id, count) { setHtml(id, (count === '' ? '' : '(' + (count + '').replace(/\B(?=(\d{3})+$)/g, ' ') + ')')); - var inputs = qs('#' + id).parentNode.parentNode.getElementsByTagName('input'); + var inputs = qsa('input', qs('#' + id).parentNode.parentNode); for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; if (input.type == 'submit') { @@ -142,10 +151,10 @@ function formCheck(el, name) { /** Check all rows in */ function tableCheck() { - var tables = document.getElementsByTagName('table'); + var tables = qsa('table', document); for (var i=0; i < tables.length; i++) { if (/(^|\s)checkable(\s|$)/.test(tables[i].className)) { - var trs = tables[i].getElementsByTagName('tr'); + var trs = qsa('tr', tables[i]); for (var j=0; j < trs.length; j++) { trCheck(trs[j].firstChild.firstChild); } @@ -218,7 +227,7 @@ function checkboxClick(event, el) { } if (event.shiftKey && (!lastChecked || lastChecked.name == el.name)) { var checked = (lastChecked ? lastChecked.checked : true); - var inputs = parentTag(el, 'table').getElementsByTagName('input'); + var inputs = qsa('input', parentTag(el, 'table')); var checking = !lastChecked; for (var i=0; i < inputs.length; i++) { var input = inputs[i]; @@ -310,12 +319,12 @@ function selectAddRow(field) { }; field.onchange(); var row = cloneNode(field.parentNode); - var selects = row.getElementsByTagName('select'); + var selects = qsa('select', row); for (var i=0; i < selects.length; i++) { selects[i].name = selects[i].name.replace(/[a-z]\[\d+/, '$&1'); selects[i].selectedIndex = 0; } - var inputs = row.getElementsByTagName('input'); + var inputs = qsa('input', row); for (var i=0; i < inputs.length; i++) { inputs[i].name = inputs[i].name.replace(/[a-z]\[\d+/, '$&1'); inputs[i].className = ''; @@ -355,7 +364,7 @@ function selectSearchSearch(el) { * @param [string] extra class name */ function columnMouse(el, className) { - var spans = el.getElementsByTagName('span'); + var spans = qsa('span', el); for (var i=0; i < spans.length; i++) { if (/column/.test(spans[i].className)) { spans[i].className = 'column' + (className || ''); @@ -371,7 +380,7 @@ function columnMouse(el, className) { function selectSearch(name) { var el = qs('#fieldset-search'); el.className = ''; - var divs = el.getElementsByTagName('div'); + var divs = qsa('div', el); for (var i=0; i < divs.length; i++) { var div = divs[i]; if (isTag(div.firstChild, 'select') && selectValue(div.firstChild) == name) { @@ -501,7 +510,7 @@ function keyupChange() { */ function fieldChange(field) { var row = cloneNode(parentTag(field, 'tr')); - var inputs = row.getElementsByTagName('input'); + var inputs = qsa('input', row); for (var i = 0; i < inputs.length; i++) { inputs[i].value = ''; } @@ -592,7 +601,7 @@ function ajaxForm(form, message, button) { return ajax(url, function (request) { setHtml('ajaxstatus', request.responseText); if (window.jush) { - jush.highlight_tag(qs('#ajaxstatus').getElementsByTagName('code'), 0); + jush.highlight_tag(qsa('code', qs('#ajaxstatus')), 0); } }, data, message); } @@ -635,7 +644,7 @@ function selectClick(td, event, text, warning) { }); input.rows = rows; } - if (value == '\u00A0' || td.getElementsByTagName('i').length) { //   or i - NULL + if (value == '\u00A0' || qsa('i', td).length) { //   or i - NULL value = ''; } if (document.selection) { @@ -719,7 +728,7 @@ function eventStop(event) { */ function setupSubmitHighlight(parent) { for (var key in { input: 1, select: 1, textarea: 1 }) { - var inputs = parent.getElementsByTagName(key); + var inputs = qsa(key, parent); for (var i = 0; i < inputs.length; i++) { setupSubmitHighlightInput(inputs[i]) } @@ -764,7 +773,7 @@ function findDefaultSubmit(el) { if (el.jushTextarea) { el = el.jushTextarea; } - var inputs = el.form.getElementsByTagName('input'); + var inputs = qsa('input', el.form); for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; if (input.type == 'submit' && !input.style.zIndex) { diff --git a/plugins/tables-filter.php b/plugins/tables-filter.php index 0319bbf1..4c14b672 100644 --- a/plugins/tables-filter.php +++ b/plugins/tables-filter.php @@ -40,9 +40,9 @@ function tablesFilter(){ if (sessionStorage) { sessionStorage.setItem('adminer_tables_filter', value); } - var tables = qs('#tables').getElementsByTagName('li'); + var tables = qsa('li', qs('#tables')); for (var i = 0; i < tables.length; i++) { - var a = tables[i].getElementsByTagName('a')[1]; + var a = qsa('a', tables[i])[1]; var text = tables[i].getAttribute('data-table-name'); if (value == '') { tables[i].className = '';