1
0
mirror of https://github.com/vrana/adminer.git synced 2025-08-09 08:06:59 +02:00

JS: Use for..of

This commit is contained in:
Jakub Vrana
2025-03-19 21:34:49 +01:00
parent c73bd1233e
commit def9e07831
2 changed files with 76 additions and 114 deletions

View File

@@ -41,10 +41,9 @@ function syntaxHighlighting(version, vendor) {
jush.custom_links = jushLinks; jush.custom_links = jushLinks;
} }
jush.highlight_tag('code', 0); jush.highlight_tag('code', 0);
var tags = qsa('textarea'); for (const tag of qsa('textarea')) {
for (var i = 0; i < tags.length; i++) { if (/(^|\s)jush-/.test(tag.className)) {
if (/(^|\s)jush-/.test(tags[i].className)) { var pre = jush.textarea(tag);
var pre = jush.textarea(tags[i]);
if (pre) { if (pre) {
setupSubmitHighlightInput(pre); setupSubmitHighlightInput(pre);
} }
@@ -81,10 +80,9 @@ function typePassword(el, disable) {
/** Install toggle handler /** Install toggle handler
* @param [HTMLElement] * @param [HTMLElement]
*/ */
function messagesPrint(el) { function messagesPrint(parent) {
var els = qsa('.toggle', el); for (const el of qsa('.toggle', parent)) {
for (var i = 0; i < els.length; i++) { el.onclick = partial(toggle, el.getAttribute('href').substr(1));
els[i].onclick = partial(toggle, els[i].getAttribute('href').substr(1));
} }
} }
@@ -146,18 +144,15 @@ function dbChange() {
function selectFieldChange() { function selectFieldChange() {
var form = this.form; var form = this.form;
var ok = (function () { var ok = (function () {
var inputs = qsa('input', form); for (const input of qsa('input', form)) {
for (var i=0; i < inputs.length; i++) { if (input.value && /^fulltext/.test(input.name)) {
if (inputs[i].value && /^fulltext/.test(inputs[i].name)) {
return true; return true;
} }
} }
var ok = form.limit.value; var ok = form.limit.value;
var selects = qsa('select', form);
var group = false; var group = false;
var columns = {}; var columns = {};
for (var i=0; i < selects.length; i++) { for (const select of qsa('select', form)) {
var select = selects[i];
var col = selectValue(select); var col = selectValue(select);
var match = /^(where.+)col]/.exec(select.name); var match = /^(where.+)col]/.exec(select.name);
if (match) { if (match) {
@@ -224,22 +219,19 @@ function idfEscape(s) {
/** Set up event handlers for edit_fields(). /** Set up event handlers for edit_fields().
*/ */
function editFields() { function editFields() {
var els = qsa('[name$="[field]"]'); for (const el of qsa('[name$="[field]"]')) {
for (var i = 0; i < els.length; i++) { el.oninput = function () {
els[i].oninput = function () {
editingNameChange.call(this); editingNameChange.call(this);
if (!this.defaultValue) { if (!this.defaultValue) {
editingAddRow.call(this); editingAddRow.call(this);
} }
} }
} }
els = qsa('[name$="[length]"]'); for (const el of qsa('[name$="[length]"]')) {
for (var i = 0; i < els.length; i++) { mixin(el, {onfocus: editingLengthFocus, oninput: editingLengthChange});
mixin(els[i], {onfocus: editingLengthFocus, oninput: editingLengthChange});
} }
els = qsa('[name$="[type]"]'); for (const el of qsa('[name$="[type]"]')) {
for (var i = 0; i < els.length; i++) { mixin(el, {
mixin(els[i], {
onfocus: function () { onfocus: function () {
lastType = selectValue(this); lastType = selectValue(this);
}, },
@@ -314,11 +306,9 @@ function editingNameChange() {
} }
break; break;
} }
var table = match[1]; var base = match[1];
var column = match[2]; var column = match[2];
var tables = [ table, table.replace(/s$/, ''), table.replace(/es$/, '') ]; for (const table of [ base, base.replace(/s$/, ''), base.replace(/es$/, '') ]) {
for (var j=0; j < tables.length; j++) {
table = tables[j];
if (val == column || val == table || delimiterEqual(val, table, column) || delimiterEqual(val, column, table)) { if (val == column || val == table || delimiterEqual(val, table, column) || delimiterEqual(val, column, table)) {
if (candidate) { if (candidate) {
return; return;
@@ -415,8 +405,7 @@ function editingTypeChange() {
var type = this; var type = this;
var name = type.name.substr(0, type.name.length - 6); var name = type.name.substr(0, type.name.length - 6);
var text = selectValue(type); var text = selectValue(type);
for (var i=0; i < type.form.elements.length; i++) { for (const el of type.form.elements.length) {
var el = type.form.elements[i];
if (el.name == name + '[length]') { if (el.name == name + '[length]') {
if (!( if (!(
(/(char|binary)$/.test(lastType) && /(char|binary)$/.test(text)) (/(char|binary)$/.test(lastType) && /(char|binary)$/.test(text))
@@ -503,9 +492,8 @@ function editingLengthBlur() {
* @param number * @param number
*/ */
function columnShow(checked, column) { function columnShow(checked, column) {
var trs = qsa('tr', qs('#edit-fields')); for (const tr of qsa('tr', qs('#edit-fields'))) {
for (var i=0; i < trs.length; i++) { alterClass(qsa('td', tr)[column], 'hidden', !checked);
alterClass(qsa('td', trs[i])[column], 'hidden', !checked);
} }
} }
@@ -513,9 +501,8 @@ function columnShow(checked, column) {
* @param boolean * @param boolean
*/ */
function indexOptionsShow(checked) { function indexOptionsShow(checked) {
var options = qsa('.idxopts'); for (const option of qsa('.idxopts')) {
for (var i=0; i < options.length; i++) { alterClass(option, 'hidden', !checked);
alterClass(options[i], 'hidden', !checked);
} }
} }
@@ -578,10 +565,9 @@ function dumpClick(event) {
function foreignAddRow() { function foreignAddRow() {
var row = cloneNode(parentTag(this, 'tr')); var row = cloneNode(parentTag(this, 'tr'));
this.onchange = function () { }; this.onchange = function () { };
var selects = qsa('select', row); for (const select of qsa('select', row)) {
for (var i=0; i < selects.length; i++) { select.name = select.name.replace(/\d+]/, '1$&');
selects[i].name = selects[i].name.replace(/\d+]/, '1$&'); select.selectedIndex = 0;
selects[i].selectedIndex = 0;
} }
parentTag(this, 'table').appendChild(row); parentTag(this, 'table').appendChild(row);
} }
@@ -594,15 +580,13 @@ function foreignAddRow() {
function indexesAddRow() { function indexesAddRow() {
var row = cloneNode(parentTag(this, 'tr')); var row = cloneNode(parentTag(this, 'tr'));
this.onchange = function () { }; this.onchange = function () { };
var selects = qsa('select', row); for (const select of qsa('select', row)) {
for (var i=0; i < selects.length; i++) { select.name = select.name.replace(/indexes\[\d+/, '$&1');
selects[i].name = selects[i].name.replace(/indexes\[\d+/, '$&1'); select.selectedIndex = 0;
selects[i].selectedIndex = 0;
} }
var inputs = qsa('input', row); for (const input of qsa('input', row)) {
for (var i=0; i < inputs.length; i++) { input.name = input.name.replace(/indexes\[\d+/, '$&1');
inputs[i].name = inputs[i].name.replace(/indexes\[\d+/, '$&1'); input.value = '';
inputs[i].value = '';
} }
parentTag(this, 'table').appendChild(row); parentTag(this, 'table').appendChild(row);
} }
@@ -614,10 +598,9 @@ function indexesAddRow() {
function indexesChangeColumn(prefix) { function indexesChangeColumn(prefix) {
var names = []; var names = [];
for (var tag in { 'select': 1, 'input': 1 }) { for (var tag in { 'select': 1, 'input': 1 }) {
var columns = qsa(tag, parentTag(this, 'td')); for (const column of qsa(tag, parentTag(this, 'td'))) {
for (var i=0; i < columns.length; i++) { if (/\[columns]/.test(column.name)) {
if (/\[columns]/.test(columns[i].name)) { var value = selectValue(column);
var value = selectValue(columns[i]);
if (value) { if (value) {
names.push(value); names.push(value);
} }
@@ -641,16 +624,12 @@ function indexesAddColumn(prefix) {
select.onchange(); select.onchange();
} }
var column = cloneNode(field.parentNode); var column = cloneNode(field.parentNode);
var selects = qsa('select', column); for (const select of qsa('select', column)) {
for (var i = 0; i < selects.length; i++) {
select = selects[i];
select.name = select.name.replace(/]\[\d+/, '$&1'); select.name = select.name.replace(/]\[\d+/, '$&1');
select.selectedIndex = 0; select.selectedIndex = 0;
} }
field.onchange = partial(indexesChangeColumn, prefix); field.onchange = partial(indexesChangeColumn, prefix);
var inputs = qsa('input', column); for (const input of qsa('input', column)) {
for (var i = 0; i < inputs.length; i++) {
var input = inputs[i];
input.name = input.name.replace(/]\[\d+/, '$&1'); input.name = input.name.replace(/]\[\d+/, '$&1');
if (input.type != 'checkbox') { if (input.type != 'checkbox') {
input.value = ''; input.value = '';
@@ -715,27 +694,26 @@ function schemaMousemove(event) {
if (that !== undefined) { if (that !== undefined) {
var left = (event.clientX - x) / em; var left = (event.clientX - x) / em;
var top = (event.clientY - y) / em; var top = (event.clientY - y) / em;
var divs = qsa('div', that);
var lineSet = { }; var lineSet = { };
for (var i=0; i < divs.length; i++) { for (const div of qsa('div', that)) {
if (divs[i].className == 'references') { if (div.className == 'references') {
var div2 = qs('[id="' + (/^refs/.test(divs[i].id) ? 'refd' : 'refs') + divs[i].id.substr(4) + '"]'); var div2 = qs('[id="' + (/^refs/.test(div.id) ? 'refd' : 'refs') + div.id.substr(4) + '"]');
var ref = (tablePos[divs[i].title] || [ div2.parentNode.offsetTop / em, 0 ]); var ref = (tablePos[div.title] || [ div2.parentNode.offsetTop / em, 0 ]);
var left1 = -1; var left1 = -1;
var id = divs[i].id.replace(/^ref.(.+)-.+/, '$1'); var id = div.id.replace(/^ref.(.+)-.+/, '$1');
if (divs[i].parentNode != div2.parentNode) { if (div.parentNode != div2.parentNode) {
left1 = Math.min(0, ref[1] - left) - 1; left1 = Math.min(0, ref[1] - left) - 1;
divs[i].style.left = left1 + 'em'; div.style.left = left1 + 'em';
divs[i].querySelector('div').style.width = -left1 + 'em'; div.querySelector('div').style.width = -left1 + 'em';
var left2 = Math.min(0, left - ref[1]) - 1; var left2 = Math.min(0, left - ref[1]) - 1;
div2.style.left = left2 + 'em'; div2.style.left = left2 + 'em';
div2.querySelector('div').style.width = -left2 + 'em'; div2.querySelector('div').style.width = -left2 + 'em';
} }
if (!lineSet[id]) { if (!lineSet[id]) {
var line = qs('[id="' + divs[i].id.replace(/^....(.+)-.+$/, 'refl$1') + '"]'); var line = qs('[id="' + div.id.replace(/^....(.+)-.+$/, 'refl$1') + '"]');
var top1 = top + divs[i].offsetTop / em; var top1 = top + div.offsetTop / em;
var top2 = top + div2.offsetTop / em; var top2 = top + div2.offsetTop / em;
if (divs[i].parentNode != div2.parentNode) { if (div.parentNode != div2.parentNode) {
top2 += ref[0] - top; top2 += ref[0] - top;
line.querySelector('div').style.height = Math.abs(top1 - top2) + 'em'; line.querySelector('div').style.height = Math.abs(top1 - top2) + 'em';
} }

View File

@@ -177,9 +177,7 @@ function selectCount(id, count) {
setHtml(id, (count === '' ? '' : '(' + (count + '').replace(/\B(?=(\d{3})+$)/g, thousandsSeparator) + ')')); setHtml(id, (count === '' ? '' : '(' + (count + '').replace(/\B(?=(\d{3})+$)/g, thousandsSeparator) + ')'));
var el = qs('#' + id); var el = qs('#' + id);
if (el) { if (el) {
var inputs = qsa('input', el.parentNode.parentNode); for (const input of qsa('input', el.parentNode.parentNode)) {
for (var i = 0; i < inputs.length; i++) {
var input = inputs[i];
if (input.type == 'submit') { if (input.type == 'submit') {
input.disabled = (count == '0'); input.disabled = (count == '0');
} }
@@ -192,11 +190,10 @@ function selectCount(id, count) {
* @this HTMLInputElement * @this HTMLInputElement
*/ */
function formCheck(name) { function formCheck(name) {
var elems = this.form.elements; for (const elem of this.form.elements) {
for (var i=0; i < elems.length; i++) { if (name.test(elem.name)) {
if (name.test(elems[i].name)) { elem.checked = this.checked;
elems[i].checked = this.checked; trCheck(elem);
trCheck(elems[i]);
} }
} }
} }
@@ -204,9 +201,8 @@ function formCheck(name) {
/** Check all rows in <table class="checkable"> /** Check all rows in <table class="checkable">
*/ */
function tableCheck() { function tableCheck() {
var inputs = qsa('table.checkable td:first-child input'); for (const input of qsa('table.checkable td:first-child input')) {
for (var i=0; i < inputs.length; i++) { trCheck(input);
trCheck(inputs[i]);
} }
} }
@@ -224,11 +220,10 @@ function formUncheck(id) {
* @param RegExp * @param RegExp
* @return number * @return number
*/ */
function formChecked(el, name) { function formChecked(input, name) {
var checked = 0; var checked = 0;
var elems = el.form.elements; for (const el of input.form.elements) {
for (var i=0; i < elems.length; i++) { if (name.test(el.name) && el.checked) {
if (name.test(elems[i].name) && elems[i].checked) {
checked++; checked++;
} }
} }
@@ -289,10 +284,8 @@ function checkboxClick(event) {
} }
if (event.shiftKey && (!lastChecked || lastChecked.name == this.name)) { if (event.shiftKey && (!lastChecked || lastChecked.name == this.name)) {
var checked = (lastChecked ? lastChecked.checked : true); var checked = (lastChecked ? lastChecked.checked : true);
var inputs = qsa('input', parentTag(this, 'table'));
var checking = !lastChecked; var checking = !lastChecked;
for (var i=0; i < inputs.length; i++) { for (const input of qsa('input', parentTag(this, 'table'))) {
var input = inputs[i];
if (input.name === this.name) { if (input.name === this.name) {
if (checking) { if (checking) {
input.checked = checked; input.checked = checked;
@@ -378,19 +371,17 @@ function selectAddRow() {
var row = cloneNode(field.parentNode); var row = cloneNode(field.parentNode);
field.onchange = selectFieldChange; field.onchange = selectFieldChange;
field.onchange(); field.onchange();
var selects = qsa('select', row); for (const select of qsa('select', row)) {
for (var i=0; i < selects.length; i++) { select.name = select.name.replace(/[a-z]\[\d+/, '$&1');
selects[i].name = selects[i].name.replace(/[a-z]\[\d+/, '$&1'); select.selectedIndex = 0;
selects[i].selectedIndex = 0;
} }
var inputs = qsa('input', row); for (const input of qsa('input', row)) {
for (var i=0; i < inputs.length; i++) { input.name = input.name.replace(/[a-z]\[\d+/, '$&1');
inputs[i].name = inputs[i].name.replace(/[a-z]\[\d+/, '$&1'); input.className = '';
inputs[i].className = ''; if (input.type == 'checkbox') {
if (inputs[i].type == 'checkbox') { input.checked = false;
inputs[i].checked = false;
} else { } else {
inputs[i].value = ''; input.value = '';
} }
} }
field.parentNode.parentNode.appendChild(row); field.parentNode.parentNode.appendChild(row);
@@ -423,10 +414,9 @@ function selectSearchSearch() {
* @this HTMLElement * @this HTMLElement
*/ */
function columnMouse(className) { function columnMouse(className) {
var spans = qsa('span', this); for (const span of qsa('span', this)) {
for (var i=0; i < spans.length; i++) { if (/column/.test(span.className)) {
if (/column/.test(spans[i].className)) { span.className = 'column' + (className || '');
spans[i].className = 'column' + (className || '');
} }
} }
} }
@@ -578,9 +568,8 @@ function skipOriginal(first) {
*/ */
function fieldChange() { function fieldChange() {
var row = cloneNode(parentTag(this, 'tr')); var row = cloneNode(parentTag(this, 'tr'));
var inputs = qsa('input', row); for (const input of qsa('input', row)) {
for (var i = 0; i < inputs.length; i++) { input.value = '';
inputs[i].value = '';
} }
// keep value in <select> (function) // keep value in <select> (function)
parentTag(this, 'table').appendChild(row); parentTag(this, 'table').appendChild(row);
@@ -648,9 +637,7 @@ function ajaxSetHtml(url) {
*/ */
function ajaxForm(form, message, button) { function ajaxForm(form, message, button) {
var data = []; var data = [];
var els = form.elements; for (const el of form.elements) {
for (var i = 0; i < els.length; i++) {
var el = els[i];
if (el.name && !el.disabled) { if (el.name && !el.disabled) {
if (/^file$/i.test(el.type) && el.value) { if (/^file$/i.test(el.type) && el.value) {
return false; return false;
@@ -807,9 +794,8 @@ function eventStop(event) {
*/ */
function setupSubmitHighlight(parent) { function setupSubmitHighlight(parent) {
for (var key in { input: 1, select: 1, textarea: 1 }) { for (var key in { input: 1, select: 1, textarea: 1 }) {
var inputs = qsa(key, parent); for (const input of qsa(key, parent)) {
for (var i = 0; i < inputs.length; i++) { setupSubmitHighlightInput(input);
setupSubmitHighlightInput(inputs[i])
} }
} }
} }
@@ -855,9 +841,7 @@ function findDefaultSubmit(el) {
if (!el.form) { if (!el.form) {
return null; return null;
} }
var inputs = qsa('input', el.form); for (const input of qsa('input', el.form)) {
for (var i = 0; i < inputs.length; i++) {
var input = inputs[i];
if (input.type == 'submit' && !input.style.zIndex) { if (input.type == 'submit' && !input.style.zIndex) {
return input; return input;
} }