From b4e22b83d74531fb1285677884d29c1ea1fe581b Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Wed, 2 Nov 2022 22:16:41 +0000 Subject: Fix import/export escaping Signed-off-by: Kamil Tekiela --- .../classes/Controllers/Import/ImportController.php | 5 ++--- libraries/classes/Plugins/Export/ExportSql.php | 17 +++++++---------- phpstan-baseline.neon | 5 +++++ psalm-baseline.xml | 4 ++-- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/libraries/classes/Controllers/Import/ImportController.php b/libraries/classes/Controllers/Import/ImportController.php index e581172ba4..23b8547f1e 100644 --- a/libraries/classes/Controllers/Import/ImportController.php +++ b/libraries/classes/Controllers/Import/ImportController.php @@ -150,10 +150,9 @@ final class ImportController extends AbstractController // apply values for parameters if (! empty($_POST['parameterized']) && ! empty($_POST['parameters']) && is_array($_POST['parameters'])) { $parameters = $_POST['parameters']; - foreach ($parameters as $parameter => $replacement) { - $replacementValue = $this->dbi->escapeString($replacement); + foreach ($parameters as $parameter => $replacementValue) { if (! is_numeric($replacementValue)) { - $replacementValue = '\'' . $replacementValue . '\''; + $replacementValue = '\'' . $this->dbi->escapeString($replacementValue) . '\''; } $quoted = preg_quote($parameter, '/'); diff --git a/libraries/classes/Plugins/Export/ExportSql.php b/libraries/classes/Plugins/Export/ExportSql.php index 14546e49bc..fa3be1ff62 100644 --- a/libraries/classes/Plugins/Export/ExportSql.php +++ b/libraries/classes/Plugins/Export/ExportSql.php @@ -2403,23 +2403,20 @@ class ExportSql extends ExportPlugin } } elseif ($fieldsMeta[$j]->isMappedTypeBit) { // detection of 'bit' works only on mysqli extension - $values[] = "b'" . $dbi->escapeString( - Util::printableBitValue( - (int) $row[$j], - (int) $fieldsMeta[$j]->length - ) - ) - . "'"; + $values[] = "b'" . Util::printableBitValue( + (int) $row[$j], + (int) $fieldsMeta[$j]->length + ) . "'"; } elseif ($fieldsMeta[$j]->isMappedTypeGeometry) { // export GIS types as hex $values[] = '0x' . bin2hex($row[$j]); } elseif (! empty($GLOBALS['exporting_metadata']) && $row[$j] === '@LAST_PAGE') { $values[] = '@LAST_PAGE'; + } elseif ($row[$j] === '') { + $values[] = "''"; } else { // something else -> treat as a string - $values[] = '\'' - . $dbi->escapeString($row[$j]) - . '\''; + $values[] = '\'' . $dbi->escapeString($row[$j]) . '\''; } } diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 9d17c4205a..00e940af5d 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -1320,6 +1320,11 @@ parameters: count: 1 path: libraries/classes/Controllers/Import/ImportController.php + - + message: "#^Parameter \\#2 \\$replace of function preg_replace expects array\\|string, float\\|int\\|string\\|string given\\.$#" + count: 1 + path: libraries/classes/Controllers/Import/ImportController.php + - message: "#^Parameter \\#2 \\$size of method PhpMyAdmin\\\\Import\\:\\:getNextChunk\\(\\) expects int, float\\|int given\\.$#" count: 1 diff --git a/psalm-baseline.xml b/psalm-baseline.xml index a32d986483..67911733ee 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -2206,7 +2206,7 @@ $import_type $local_import_file $parameter - $replacement + $replacementValue $skip < $read_limit ? $skip : $read_limit @@ -2216,7 +2216,7 @@ $_POST['sql_query'] $format $local_import_file - $replacement + $replacementValue $charset_of_file -- cgit v1.2.3 From f6158aac5d9ed968af71b64b2dd753d36d933595 Mon Sep 17 00:00:00 2001 From: William Desportes Date: Fri, 4 Nov 2022 11:57:55 +0100 Subject: Bump codemirror 5.65.3 to 5.65.9 Signed-off-by: William Desportes --- js/vendor/codemirror/addon/hint/show-hint.css | 1 + js/vendor/codemirror/addon/hint/show-hint.js | 24 ++-- js/vendor/codemirror/addon/hint/sql-hint.js | 2 +- js/vendor/codemirror/addon/lint/lint.js | 2 +- js/vendor/codemirror/addon/runmode/runmode.js | 4 +- js/vendor/codemirror/lib/codemirror.js | 151 ++++++++++++--------- js/vendor/codemirror/mode/javascript/javascript.js | 2 +- js/vendor/codemirror/mode/sql/sql.js | 58 +++++--- js/vendor/codemirror/mode/xml/xml.js | 2 +- package.json | 2 +- yarn.lock | 8 +- 11 files changed, 149 insertions(+), 107 deletions(-) diff --git a/js/vendor/codemirror/addon/hint/show-hint.css b/js/vendor/codemirror/addon/hint/show-hint.css index 5617ccca2b..d41031cdb8 100644 --- a/js/vendor/codemirror/addon/hint/show-hint.css +++ b/js/vendor/codemirror/addon/hint/show-hint.css @@ -19,6 +19,7 @@ max-height: 20em; overflow-y: auto; + box-sizing: border-box; } .CodeMirror-hint { diff --git a/js/vendor/codemirror/addon/hint/show-hint.js b/js/vendor/codemirror/addon/hint/show-hint.js index 2be2c716e0..aaf1f643f4 100644 --- a/js/vendor/codemirror/addon/hint/show-hint.js +++ b/js/vendor/codemirror/addon/hint/show-hint.js @@ -1,5 +1,5 @@ // CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE +// Distributed under an MIT license: https://codemirror.net/5/LICENSE // declare global: DOMRect @@ -286,20 +286,14 @@ setTimeout(function() { startScroll = cm.getScrollInfo(); }); var overlapY = box.bottom - winH; - if (overlapY > 0) { - var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top); - if (curTop - height > 0) { // Fits above cursor - hints.style.top = (top = pos.top - height - offsetTop) + "px"; + if (overlapY > 0) { // Does not fit below + var height = box.bottom - box.top, spaceAbove = box.top - (pos.bottom - pos.top) - 2 + if (winH - box.top < spaceAbove) { // More room at the top + if (height > spaceAbove) hints.style.height = (height = spaceAbove) + "px"; + hints.style.top = ((top = pos.top - height) + offsetTop) + "px"; below = false; - } else if (height > winH) { - hints.style.height = (winH - 5) + "px"; - hints.style.top = (top = pos.bottom - box.top - offsetTop) + "px"; - var cursor = cm.getCursor(); - if (data.from.ch != cursor.ch) { - pos = cm.cursorCoords(cursor); - hints.style.left = (left = pos.left - offsetLeft) + "px"; - box = hints.getBoundingClientRect(); - } + } else { + hints.style.height = (winH - box.top - 2) + "px"; } } var overlapX = box.right - winW; @@ -309,7 +303,7 @@ hints.style.width = (winW - 5) + "px"; overlapX -= (box.right - box.left) - winW; } - hints.style.left = (left = pos.left - overlapX - offsetLeft) + "px"; + hints.style.left = (left = Math.max(pos.left - overlapX - offsetLeft, 0)) + "px"; } if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling) node.style.paddingRight = cm.display.nativeBarWidth + "px" diff --git a/js/vendor/codemirror/addon/hint/sql-hint.js b/js/vendor/codemirror/addon/hint/sql-hint.js index efdce813cf..57c3b64f26 100644 --- a/js/vendor/codemirror/addon/hint/sql-hint.js +++ b/js/vendor/codemirror/addon/hint/sql-hint.js @@ -1,5 +1,5 @@ // CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE +// Distributed under an MIT license: https://codemirror.net/5/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS diff --git a/js/vendor/codemirror/addon/lint/lint.js b/js/vendor/codemirror/addon/lint/lint.js index 1613deb9dd..7b40e10e91 100644 --- a/js/vendor/codemirror/addon/lint/lint.js +++ b/js/vendor/codemirror/addon/lint/lint.js @@ -1,5 +1,5 @@ // CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE +// Distributed under an MIT license: https://codemirror.net/5/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS diff --git a/js/vendor/codemirror/addon/runmode/runmode.js b/js/vendor/codemirror/addon/runmode/runmode.js index f5d58e2428..e1525b66f6 100644 --- a/js/vendor/codemirror/addon/runmode/runmode.js +++ b/js/vendor/codemirror/addon/runmode/runmode.js @@ -1,5 +1,5 @@ // CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE +// Distributed under an MIT license: https://codemirror.net/5/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS @@ -20,7 +20,7 @@ CodeMirror.runMode = function(string, modespec, callback, options) { var ie = /MSIE \d/.test(navigator.userAgent); var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9); var node = callback, col = 0; - node.innerHTML = ""; + node.textContent = ""; callback = function(text, style) { if (text == "\n") { // Emitting LF or CRLF on IE8 or earlier results in an incorrect display. diff --git a/js/vendor/codemirror/lib/codemirror.js b/js/vendor/codemirror/lib/codemirror.js index e142f1dbd0..5ca96da451 100644 --- a/js/vendor/codemirror/lib/codemirror.js +++ b/js/vendor/codemirror/lib/codemirror.js @@ -1,7 +1,7 @@ // CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE +// Distributed under an MIT license: https://codemirror.net/5/LICENSE -// This is CodeMirror (https://codemirror.net), a code editor +// This is CodeMirror (https://codemirror.net/5), a code editor // implemented in JavaScript on top of the browser's DOM. // // You can find some technical background for some of the code below @@ -26,7 +26,8 @@ var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]); var webkit = !edge && /WebKit\//.test(userAgent); var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); - var chrome = !edge && /Chrome\//.test(userAgent); + var chrome = !edge && /Chrome\/(\d+)/.exec(userAgent); + var chrome_version = chrome && +chrome[1]; var presto = /Opera\//.test(userAgent); var safari = /Apple Computer/.test(navigator.vendor); var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); @@ -111,15 +112,15 @@ } while (child = child.parentNode) } - function activeElt() { + function activeElt(doc) { // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement. // IE < 10 will throw when accessed while the page is loading or in an iframe. // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable. var activeElement; try { - activeElement = document.activeElement; + activeElement = doc.activeElement; } catch(e) { - activeElement = document.body || null; + activeElement = doc.body || null; } while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) { activeElement = activeElement.shadowRoot.activeElement; } @@ -143,6 +144,10 @@ else if (ie) // Suppress mysterious IE10 errors { selectInput = function(node) { try { node.select(); } catch(_e) {} }; } + function doc(cm) { return cm.display.wrapper.ownerDocument } + + function win(cm) { return doc(cm).defaultView } + function bind(f) { var args = Array.prototype.slice.call(arguments, 1); return function(){return f.apply(null, args)} @@ -2572,16 +2577,16 @@ cm.display.lineNumChars = null; } - function pageScrollX() { + function pageScrollX(doc) { // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206 // which causes page_Offset and bounding client rects to use // different reference viewports and invalidate our calculations. - if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) } - return window.pageXOffset || (document.documentElement || document.body).scrollLeft + if (chrome && android) { return -(doc.body.getBoundingClientRect().left - parseInt(getComputedStyle(doc.body).marginLeft)) } + return doc.defaultView.pageXOffset || (doc.documentElement || doc.body).scrollLeft } - function pageScrollY() { - if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) } - return window.pageYOffset || (document.documentElement || document.body).scrollTop + function pageScrollY(doc) { + if (chrome && android) { return -(doc.body.getBoundingClientRect().top - parseInt(getComputedStyle(doc.body).marginTop)) } + return doc.defaultView.pageYOffset || (doc.documentElement || doc.body).scrollTop } function widgetTopHeight(lineObj) { @@ -2609,8 +2614,8 @@ else { yOff -= cm.display.viewOffset; } if (context == "page" || context == "window") { var lOff = cm.display.lineSpace.getBoundingClientRect(); - yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); - var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); + yOff += lOff.top + (context == "window" ? 0 : pageScrollY(doc(cm))); + var xOff = lOff.left + (context == "window" ? 0 : pageScrollX(doc(cm))); rect.left += xOff; rect.right += xOff; } rect.top += yOff; rect.bottom += yOff; @@ -2624,8 +2629,8 @@ var left = coords.left, top = coords.top; // First move into "page" coordinate system if (context == "page") { - left -= pageScrollX(); - top -= pageScrollY(); + left -= pageScrollX(doc(cm)); + top -= pageScrollY(doc(cm)); } else if (context == "local" || !context) { var localBox = cm.display.sizer.getBoundingClientRect(); left += localBox.left; @@ -3441,8 +3446,9 @@ if (signalDOMEvent(cm, "scrollCursorIntoView")) { return } var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; + var doc = display.wrapper.ownerDocument; if (rect.top + box.top < 0) { doScroll = true; } - else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; } + else if (rect.bottom + box.top > (doc.defaultView.innerHeight || doc.documentElement.clientHeight)) { doScroll = false; } if (doScroll != null && !phantom) { var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;")); cm.display.lineSpace.appendChild(scrollNode); @@ -3696,13 +3702,13 @@ NativeScrollbars.prototype.zeroWidthHack = function () { var w = mac && !mac_geMountainLion ? "12px" : "18px"; this.horiz.style.height = this.vert.style.width = w; - this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; + this.horiz.style.visibility = this.vert.style.visibility = "hidden"; this.disableHoriz = new Delayed; this.disableVert = new Delayed; }; NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { - bar.style.pointerEvents = "auto"; + bar.style.visibility = ""; function maybeDisable() { // To find out whether the scrollbar is still visible, we // check whether the element under the pixel in the bottom @@ -3713,7 +3719,7 @@ var box = bar.getBoundingClientRect(); var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1); - if (elt != bar) { bar.style.pointerEvents = "none"; } + if (elt != bar) { bar.style.visibility = "hidden"; } else { delay.set(1000, maybeDisable); } } delay.set(1000, maybeDisable); @@ -3894,7 +3900,7 @@ cm.display.maxLineChanged = false; } - var takeFocus = op.focus && op.focus == activeElt(); + var takeFocus = op.focus && op.focus == activeElt(doc(cm)); if (op.preparedSelection) { cm.display.input.showSelection(op.preparedSelection, takeFocus); } if (op.updatedDisplay || op.startHeight != cm.doc.height) @@ -4071,11 +4077,11 @@ function selectionSnapshot(cm) { if (cm.hasFocus()) { return null } - var active = activeElt(); + var active = activeElt(doc(cm)); if (!active || !contains(cm.display.lineDiv, active)) { return null } var result = {activeElt: active}; if (window.getSelection) { - var sel = window.getSelection(); + var sel = win(cm).getSelection(); if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) { result.anchorNode = sel.anchorNode; result.anchorOffset = sel.anchorOffset; @@ -4087,11 +4093,12 @@ } function restoreSelection(snapshot) { - if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return } + if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt(snapshot.activeElt.ownerDocument)) { return } snapshot.activeElt.focus(); if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) && snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) { - var sel = window.getSelection(), range = document.createRange(); + var doc = snapshot.activeElt.ownerDocument; + var sel = doc.defaultView.getSelection(), range = doc.createRange(); range.setEnd(snapshot.anchorNode, snapshot.anchorOffset); range.collapse(false); sel.removeAllRanges(); @@ -4408,6 +4415,8 @@ d.scroller.setAttribute("tabIndex", "-1"); // The element in which the editor lives. d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); + // See #6982. FIXME remove when this has been fixed for a while in Chrome + if (chrome && chrome_version >= 105) { d.wrapper.style.clipPath = "inset(0px)"; } // This attribute is respected by automatic translation systems such as Google Translate, // and may also be respected by tools used by human translators. @@ -4509,6 +4518,17 @@ } function onScrollWheel(cm, e) { + // On Chrome 102, viewport updates somehow stop wheel-based + // scrolling. Turning off pointer events during the scroll seems + // to avoid the issue. + if (chrome && chrome_version == 102) { + if (cm.display.chromeScrollHack == null) { cm.display.sizer.style.pointerEvents = "none"; } + else { clearTimeout(cm.display.chromeScrollHack); } + cm.display.chromeScrollHack = setTimeout(function () { + cm.display.chromeScrollHack = null; + cm.display.sizer.style.pointerEvents = ""; + }, 100); + } var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; var pixelsPerUnit = wheelPixelsPerUnit; if (e.deltaMode === 0) { @@ -5192,7 +5212,7 @@ var range = sel.ranges[i]; var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]; var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear); - var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear); + var newHead = range.head == range.anchor ? newAnchor : skipAtomic(doc, range.head, old && old.head, bias, mayClear); if (out || newAnchor != range.anchor || newHead != range.head) { if (!out) { out = sel.ranges.slice(0, i); } out[i] = new Range(newAnchor, newHead); @@ -7244,7 +7264,7 @@ function onKeyDown(e) { var cm = this; if (e.target && e.target != cm.display.input.getField()) { return } - cm.curOp.focus = activeElt(); + cm.curOp.focus = activeElt(doc(cm)); if (signalDOMEvent(cm, e)) { return } // IE does strange things with escape. if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; } @@ -7351,7 +7371,7 @@ } if (clickInGutter(cm, e)) { return } var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single"; - window.focus(); + win(cm).focus(); // #3261: make sure, that we're not starting a second selection if (button == 1 && cm.state.selectingText) @@ -7406,7 +7426,7 @@ function leftButtonDown(cm, pos, repeat, event) { if (ie) { setTimeout(bind(ensureFocus, cm), 0); } - else { cm.curOp.focus = activeElt(); } + else { cm.curOp.focus = activeElt(doc(cm)); } var behavior = configureMouse(cm, repeat, event); @@ -7476,19 +7496,19 @@ // Normal selection, as opposed to text dragging. function leftButtonSelect(cm, event, start, behavior) { if (ie) { delayBlurEvent(cm); } - var display = cm.display, doc = cm.doc; + var display = cm.display, doc$1 = cm.doc; e_preventDefault(event); - var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; + var ourRange, ourIndex, startSel = doc$1.sel, ranges = startSel.ranges; if (behavior.addNew && !behavior.extend) { - ourIndex = doc.sel.contains(start); + ourIndex = doc$1.sel.contains(start); if (ourIndex > -1) { ourRange = ranges[ourIndex]; } else { ourRange = new Range(start, start); } } else { - ourRange = doc.sel.primary(); - ourIndex = doc.sel.primIndex; + ourRange = doc$1.sel.primary(); + ourIndex = doc$1.sel.primIndex; } if (behavior.unit == "rectangle") { @@ -7505,18 +7525,18 @@ if (!behavior.addNew) { ourIndex = 0; - setSelection(doc, new Selection([ourRange], 0), sel_mouse); - startSel = doc.sel; + setSelection(doc$1, new Selection([ourRange], 0), sel_mouse); + startSel = doc$1.sel; } else if (ourIndex == -1) { ourIndex = ranges.length; - setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), + setSelection(doc$1, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), {scroll: false, origin: "*mouse"}); } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) { - setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), + setSelection(doc$1, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), {scroll: false, origin: "*mouse"}); - startSel = doc.sel; + startSel = doc$1.sel; } else { - replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); + replaceOneSelection(doc$1, ourIndex, ourRange, sel_mouse); } var lastPos = start; @@ -7526,19 +7546,19 @@ if (behavior.unit == "rectangle") { var ranges = [], tabSize = cm.options.tabSize; - var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); - var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); + var startCol = countColumn(getLine(doc$1, start.line).text, start.ch, tabSize); + var posCol = countColumn(getLine(doc$1, pos.line).text, pos.ch, tabSize); var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); line <= end; line++) { - var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); + var text = getLine(doc$1, line).text, leftPos = findColumn(text, left, tabSize); if (left == right) { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); } else if (text.length > leftPos) { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); } } if (!ranges.length) { ranges.push(new Range(start, start)); } - setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), + setSelection(doc$1, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), {origin: "*mouse", scroll: false}); cm.scrollIntoView(pos); } else { @@ -7553,8 +7573,8 @@ anchor = maxPos(oldRange.to(), range.head); } var ranges$1 = startSel.ranges.slice(0); - ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head)); - setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse); + ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc$1, anchor), head)); + setSelection(doc$1, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse); } } @@ -7570,9 +7590,9 @@ var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle"); if (!cur) { return } if (cmp(cur, lastPos) != 0) { - cm.curOp.focus = activeElt(); + cm.curOp.focus = activeElt(doc(cm)); extendTo(cur); - var visible = visibleLines(display, doc); + var visible = visibleLines(display, doc$1); if (cur.line >= visible.to || cur.line < visible.from) { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); } } else { @@ -7597,7 +7617,7 @@ } off(display.wrapper.ownerDocument, "mousemove", move); off(display.wrapper.ownerDocument, "mouseup", up); - doc.history.lastSelOrigin = null; + doc$1.history.lastSelOrigin = null; } var move = operation(cm, function (e) { @@ -7754,7 +7774,7 @@ for (var i = newBreaks.length - 1; i >= 0; i--) { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); } }); - option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (cm, val, old) { + option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g, function (cm, val, old) { cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); if (old != Init) { cm.refresh(); } }); @@ -8197,7 +8217,7 @@ var pasted = e.clipboardData && e.clipboardData.getData("Text"); if (pasted) { e.preventDefault(); - if (!cm.isReadOnly() && !cm.options.disableInput) + if (!cm.isReadOnly() && !cm.options.disableInput && cm.hasFocus()) { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }); } return true } @@ -8274,7 +8294,7 @@ CodeMirror.prototype = { constructor: CodeMirror, - focus: function(){window.focus(); this.display.input.focus();}, + focus: function(){win(this).focus(); this.display.input.focus();}, setOption: function(option, value) { var options = this.options, old = options[option]; @@ -8598,7 +8618,7 @@ signal(this, "overwriteToggle", this, this.state.overwrite); }, - hasFocus: function() { return this.display.input.getField() == activeElt() }, + hasFocus: function() { return this.display.input.getField() == activeElt(doc(this)) }, isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) }, scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }), @@ -8779,7 +8799,7 @@ function findPosV(cm, pos, dir, unit) { var doc = cm.doc, x = pos.left, y; if (unit == "page") { - var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); + var pageSize = Math.min(cm.display.wrapper.clientHeight, win(cm).innerHeight || doc(cm).documentElement.clientHeight); var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3); y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount; @@ -8879,7 +8899,7 @@ var kludge = hiddenTextarea(), te = kludge.firstChild; cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); te.value = lastCopied.text.join("\n"); - var hadFocus = activeElt(); + var hadFocus = activeElt(div.ownerDocument); selectInput(te); setTimeout(function () { cm.display.lineSpace.removeChild(kludge); @@ -8902,7 +8922,7 @@ ContentEditableInput.prototype.prepareSelection = function () { var result = prepareSelection(this.cm, false); - result.focus = activeElt() == this.div; + result.focus = activeElt(this.div.ownerDocument) == this.div; return result }; @@ -8998,7 +9018,7 @@ ContentEditableInput.prototype.focus = function () { if (this.cm.options.readOnly != "nocursor") { - if (!this.selectionInEditor() || activeElt() != this.div) + if (!this.selectionInEditor() || activeElt(this.div.ownerDocument) != this.div) { this.showSelection(this.prepareSelection(), true); } this.div.focus(); } @@ -9350,6 +9370,7 @@ // Used to work around IE issue with selection being forgotten when focus moves away from textarea this.hasSelection = false; this.composing = null; + this.resetting = false; }; TextareaInput.prototype.init = function (display) { @@ -9482,8 +9503,9 @@ // Reset the input to correspond to the selection (or to be empty, // when not typing and nothing is selected) TextareaInput.prototype.reset = function (typing) { - if (this.contextMenuPending || this.composing) { return } + if (this.contextMenuPending || this.composing && typing) { return } var cm = this.cm; + this.resetting = true; if (cm.somethingSelected()) { this.prevInput = ""; var content = cm.getSelection(); @@ -9494,6 +9516,7 @@ this.prevInput = this.textarea.value = ""; if (ie && ie_version >= 9) { this.hasSelection = null; } } + this.resetting = false; }; TextareaInput.prototype.getField = function () { return this.textarea }; @@ -9501,7 +9524,7 @@ TextareaInput.prototype.supportsTouch = function () { return false }; TextareaInput.prototype.focus = function () { - if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { + if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt(this.textarea.ownerDocument) != this.textarea)) { try { this.textarea.focus(); } catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM } @@ -9555,7 +9578,7 @@ // possible when it is clear that nothing happened. hasSelection // will be the case when there is a lot of text in the textarea, // in which case reading its value would be expensive. - if (this.contextMenuPending || !cm.state.focused || + if (this.contextMenuPending || this.resetting || !cm.state.focused || (hasSelection(input) && !prevInput && !this.composing) || cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) { return false } @@ -9624,9 +9647,9 @@ input.wrapper.style.cssText = "position: static"; te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; var oldScrollY; - if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712) + if (webkit) { oldScrollY = te.ownerDocument.defaultView.scrollY; } // Work around Chrome issue (#2712) display.input.focus(); - if (webkit) { window.scrollTo(null, oldScrollY); } + if (webkit) { te.ownerDocument.defaultView.scrollTo(null, oldScrollY); } display.input.reset(); // Adds "Select all" to context menu in FF if (!cm.somethingSelected()) { te.value = input.prevInput = " "; } @@ -9708,7 +9731,7 @@ // Set autofocus to true if this textarea is focused, or if it has // autofocus and no other element is focused. if (options.autofocus == null) { - var hasFocus = activeElt(); + var hasFocus = activeElt(textarea.ownerDocument); options.autofocus = hasFocus == textarea || textarea.getAttribute("autofocus") != null && hasFocus == document.body; } @@ -9842,7 +9865,7 @@ addLegacyProps(CodeMirror); - CodeMirror.version = "5.65.3"; + CodeMirror.version = "5.65.9"; return CodeMirror; diff --git a/js/vendor/codemirror/mode/javascript/javascript.js b/js/vendor/codemirror/mode/javascript/javascript.js index 7cfee313a3..48a46d65d0 100644 --- a/js/vendor/codemirror/mode/javascript/javascript.js +++ b/js/vendor/codemirror/mode/javascript/javascript.js @@ -1,5 +1,5 @@ // CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE +// Distributed under an MIT license: https://codemirror.net/5/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS diff --git a/js/vendor/codemirror/mode/sql/sql.js b/js/vendor/codemirror/mode/sql/sql.js index cd8b757bb6..105b22ffb9 100644 --- a/js/vendor/codemirror/mode/sql/sql.js +++ b/js/vendor/codemirror/mode/sql/sql.js @@ -1,5 +1,5 @@ // CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE +// Distributed under an MIT license: https://codemirror.net/5/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS @@ -35,19 +35,19 @@ CodeMirror.defineMode("sql", function(config, parserConfig) { if (support.hexNumber && ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) - || (ch == "x" || ch == "X") && stream.match(/^'[0-9a-fA-F]+'/))) { + || (ch == "x" || ch == "X") && stream.match(/^'[0-9a-fA-F]*'/))) { // hex - // ref: http://dev.mysql.com/doc/refman/5.5/en/hexadecimal-literals.html + // ref: https://dev.mysql.com/doc/refman/8.0/en/hexadecimal-literals.html return "number"; } else if (support.binaryNumber && - (((ch == "b" || ch == "B") && stream.match(/^'[01]+'/)) + (((ch == "b" || ch == "B") && stream.match(/^'[01]*'/)) || (ch == "0" && stream.match(/^b[01]+/)))) { // bitstring - // ref: http://dev.mysql.com/doc/refman/5.5/en/bit-field-literals.html + // ref: https://dev.mysql.com/doc/refman/8.0/en/bit-value-literals.html return "number"; } else if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) { // numbers - // ref: http://dev.mysql.com/doc/refman/5.5/en/number-literals.html + // ref: https://dev.mysql.com/doc/refman/8.0/en/number-literals.html stream.match(/^[0-9]*(\.[0-9]+)?([eE][-+]?[0-9]+)?/); support.decimallessFloat && stream.match(/^\.(?!\.)/); return "number"; @@ -56,14 +56,14 @@ CodeMirror.defineMode("sql", function(config, parserConfig) { return "variable-3"; } else if (ch == "'" || (ch == '"' && support.doubleQuote)) { // strings - // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html + // ref: https://dev.mysql.com/doc/refman/8.0/en/string-literals.html state.tokenize = tokenLiteral(ch); return state.tokenize(stream, state); } else if ((((support.nCharCast && (ch == "n" || ch == "N")) || (support.charsetCast && ch == "_" && stream.match(/[a-z][a-z0-9]*/i))) && (stream.peek() == "'" || stream.peek() == '"'))) { // charset casting: _utf8'str', N'str', n'str' - // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html + // ref: https://dev.mysql.com/doc/refman/8.0/en/string-literals.html return "keyword"; } else if (support.escapeConstant && (ch == "e" || ch == "E") && (stream.peek() == "'" || (stream.peek() == '"' && support.doubleQuote))) { @@ -95,7 +95,7 @@ CodeMirror.defineMode("sql", function(config, parserConfig) { if (stream.match(/^\.+/)) return null // .table_name (ODBC) - // // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html + // // ref: https://dev.mysql.com/doc/refman/8.0/en/identifier-qualifiers.html if (support.ODBCdotTable && stream.match(/^[\w\d_$#]+/)) return "variable-2"; } else if (operatorChars.test(ch)) { @@ -112,13 +112,13 @@ CodeMirror.defineMode("sql", function(config, parserConfig) { } else if (ch == '{' && (stream.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/) || stream.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/))) { // dates (weird ODBC syntax) - // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html + // ref: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html return "number"; } else { stream.eatWhile(/^[_\w\d]/); var word = stream.current().toLowerCase(); // dates (standard SQL syntax) - // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html + // ref: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+"[^"]*"/))) return "number"; if (atoms.hasOwnProperty(word)) return "atom"; @@ -214,7 +214,7 @@ CodeMirror.defineMode("sql", function(config, parserConfig) { // `identifier` function hookIdentifier(stream) { // MySQL/MariaDB identifiers - // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html + // ref: https://dev.mysql.com/doc/refman/8.0/en/identifier-qualifiers.html var ch; while ((ch = stream.next()) != null) { if (ch == "`" && !stream.eat("`")) return "variable-2"; @@ -241,7 +241,7 @@ CodeMirror.defineMode("sql", function(config, parserConfig) { // variables // @@prefix.varName @varName // varName can be quoted with ` or ' or " - // ref: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html + // ref: https://dev.mysql.com/doc/refman/8.0/en/user-variables.html if (stream.eat("@")) { stream.match('session.'); stream.match('local.'); @@ -266,12 +266,12 @@ CodeMirror.defineMode("sql", function(config, parserConfig) { // short client keyword token function hookClient(stream) { // \N means NULL - // ref: http://dev.mysql.com/doc/refman/5.5/en/null-values.html + // ref: https://dev.mysql.com/doc/refman/8.0/en/null-values.html if (stream.eat("N")) { return "atom"; } // \g, etc - // ref: http://dev.mysql.com/doc/refman/5.5/en/mysql-commands.html + // ref: https://dev.mysql.com/doc/refman/8.0/en/mysql-commands.html return stream.match(/^[a-zA-Z.#!?]/) ? "variable-2" : null; } @@ -287,7 +287,7 @@ CodeMirror.defineMode("sql", function(config, parserConfig) { var defaultBuiltin = "bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric" - // A generic SQL Mode. It's not a standard, it just try to support what is generally supported + // A generic SQL Mode. It's not a standard, it just tries to support what is generally supported CodeMirror.defineMIME("text/x-sql", { name: "sql", keywords: set(sqlKeywords + "begin"), @@ -471,6 +471,26 @@ CodeMirror.defineMode("sql", function(config, parserConfig) { dateSQL: set("time"), support: set("decimallessFloat zerolessFloat binaryNumber hexNumber") }); + + // Trino (formerly known as Presto) + CodeMirror.defineMIME("text/x-trino", { + name: "sql", + // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L859-L1129 + // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/docs/src/main/sphinx/functions/list.rst + keywords: set("abs absent acos add admin after all all_match alter analyze and any any_match approx_distinct approx_most_frequent approx_percentile approx_set arbitrary array_agg array_distinct array_except array_intersect array_join array_max array_min array_position array_remove array_sort array_union arrays_overlap as asc asin at at_timezone atan atan2 authorization avg bar bernoulli beta_cdf between bing_tile bing_tile_at bing_tile_coordinates bing_tile_polygon bing_tile_quadkey bing_tile_zoom_level bing_tiles_around bit_count bitwise_and bitwise_and_agg bitwise_left_shift bitwise_not bitwise_or bitwise_or_agg bitwise_right_shift bitwise_right_shift_arithmetic bitwise_xor bool_and bool_or both by call cardinality cascade case cast catalogs cbrt ceil ceiling char2hexint checksum chr classify coalesce codepoint column columns combinations comment commit committed concat concat_ws conditional constraint contains contains_sequence convex_hull_agg copartition corr cos cosh cosine_similarity count count_if covar_pop covar_samp crc32 create cross cube cume_dist current current_catalog current_date current_groups current_path current_role current_schema current_time current_timestamp current_timezone current_user data date_add date_diff date_format date_parse date_trunc day day_of_month day_of_week day_of_year deallocate default define definer degrees delete dense_rank deny desc describe descriptor distinct distributed dow doy drop e element_at else empty empty_approx_set encoding end error escape evaluate_classifier_predictions every except excluding execute exists exp explain extract false features fetch filter final first first_value flatten floor following for format format_datetime format_number from from_base from_base32 from_base64 from_base64url from_big_endian_32 from_big_endian_64 from_encoded_polyline from_geojson_geometry from_hex from_ieee754_32 from_ieee754_64 from_iso8601_date from_iso8601_timestamp from_iso8601_timestamp_nanos from_unixtime from_unixtime_nanos from_utf8 full functions geometric_mean geometry_from_hadoop_shape geometry_invalid_reason geometry_nearest_points geometry_to_bing_tiles geometry_union geometry_union_agg grant granted grants graphviz great_circle_distance greatest group grouping groups hamming_distance hash_counts having histogram hmac_md5 hmac_sha1 hmac_sha256 hmac_sha512 hour human_readable_seconds if ignore in including index infinity initial inner input insert intersect intersection_cardinality into inverse_beta_cdf inverse_normal_cdf invoker io is is_finite is_infinite is_json_scalar is_nan isolation jaccard_index join json_array json_array_contains json_array_get json_array_length json_exists json_extract json_extract_scalar json_format json_object json_parse json_query json_size json_value keep key keys kurtosis lag last last_day_of_month last_value lateral lead leading learn_classifier learn_libsvm_classifier learn_libsvm_regressor learn_regressor least left length level levenshtein_distance like limit line_interpolate_point line_interpolate_points line_locate_point listagg ln local localtime localtimestamp log log10 log2 logical lower lpad ltrim luhn_check make_set_digest map_agg map_concat map_entries map_filter map_from_entries map_keys map_union map_values map_zip_with match match_recognize matched matches materialized max max_by md5 measures merge merge_set_digest millisecond min min_by minute mod month multimap_agg multimap_from_entries murmur3 nan natural next nfc nfd nfkc nfkd ngrams no none none_match normal_cdf normalize not now nth_value ntile null nullif nulls numeric_histogram object objectid_timestamp of offset omit on one only option or order ordinality outer output over overflow parse_data_size parse_datetime parse_duration partition partitions passing past path pattern per percent_rank permute pi position pow power preceding prepare privileges properties prune qdigest_agg quarter quotes radians rand random range rank read recursive reduce reduce_agg refresh regexp_count regexp_extract regexp_extract_all regexp_like regexp_position regexp_replace regexp_split regr_intercept regr_slope regress rename render repeat repeatable replace reset respect restrict returning reverse revoke rgb right role roles rollback rollup round row_number rows rpad rtrim running scalar schema schemas second security seek select sequence serializable session set sets sha1 sha256 sha512 show shuffle sign simplify_geometry sin skewness skip slice some soundex spatial_partitioning spatial_partitions split split_part split_to_map split_to_multimap spooky_hash_v2_32 spooky_hash_v2_64 sqrt st_area st_asbinary st_astext st_boundary st_buffer st_centroid st_contains st_convexhull st_coorddim st_crosses st_difference st_dimension st_disjoint st_distance st_endpoint st_envelope st_envelopeaspts st_equals st_exteriorring st_geometries st_geometryfromtext st_geometryn st_geometrytype st_geomfrombinary st_interiorringn st_interiorrings st_intersection st_intersects st_isclosed st_isempty st_isring st_issimple st_isvalid st_length st_linefromtext st_linestring st_multipoint st_numgeometries st_numinteriorring st_numpoints st_overlaps st_point st_pointn st_points st_polygon st_relate st_startpoint st_symdifference st_touches st_union st_within st_x st_xmax st_xmin st_y st_ymax st_ymin start starts_with stats stddev stddev_pop stddev_samp string strpos subset substr substring sum system table tables tablesample tan tanh tdigest_agg text then ties timestamp_objectid timezone_hour timezone_minute to to_base to_base32 to_base64 to_base64url to_big_endian_32 to_big_endian_64 to_char to_date to_encoded_polyline to_geojson_geometry to_geometry to_hex to_ieee754_32 to_ieee754_64 to_iso8601 to_milliseconds to_spherical_geography to_timestamp to_unixtime to_utf8 trailing transaction transform transform_keys transform_values translate trim trim_array true truncate try try_cast type typeof uescape unbounded uncommitted unconditional union unique unknown unmatched unnest update upper url_decode url_encode url_extract_fragment url_extract_host url_extract_parameter url_extract_path url_extract_port url_extract_protocol url_extract_query use user using utf16 utf32 utf8 validate value value_at_quantile values values_at_quantiles var_pop var_samp variance verbose version view week week_of_year when where width_bucket wilson_interval_lower wilson_interval_upper window with with_timezone within without word_stem work wrapper write xxhash64 year year_of_week yow zip zip_with"), + // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/core/trino-main/src/main/java/io/trino/metadata/TypeRegistry.java#L131-L168 + // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/plugin/trino-ml/src/main/java/io/trino/plugin/ml/MLPlugin.java#L35 + // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoPlugin.java#L32 + // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/GeoPlugin.java#L37 + builtin: set("array bigint bingtile boolean char codepoints color date decimal double function geometry hyperloglog int integer interval ipaddress joniregexp json json2016 jsonpath kdbtree likepattern map model objectid p4hyperloglog precision qdigest re2jregexp real regressor row setdigest smallint sphericalgeography tdigest time timestamp tinyint uuid varbinary varchar zone"), + atoms: set("false true null unknown"), + // https://trino.io/docs/current/functions/list.html#id1 + operatorChars: /^[[\]|<>=!\-+*/%]/, + dateSQL: set("date time timestamp zone"), + // hexNumber is necessary for VARBINARY literals, e.g. X'65683F' + // but it also enables 0xFF hex numbers, which Trino doesn't support. + support: set("ODBCdotTable decimallessFloat zerolessFloat hexNumber") + }); }); /* @@ -489,7 +509,11 @@ CodeMirror.defineMode("sql", function(config, parserConfig) { A list of supported syntaxes which are not common, but are supported by more than 1 DBMS. * ODBCdotTable: .tableName * zerolessFloat: .1 - * doubleQuote + * decimallessFloat: 1. + * hexNumber: X'01AF' X'01af' x'01AF' x'01af' 0x01AF 0x01af + * binaryNumber: b'01' B'01' 0b01 + * doubleQuote: "string" + * escapeConstant: E'' * nCharCast: N'string' * charsetCast: _utf8'string' * commentHash: use # char for comments diff --git a/js/vendor/codemirror/mode/xml/xml.js b/js/vendor/codemirror/mode/xml/xml.js index 4e36106b49..701e151ab2 100644 --- a/js/vendor/codemirror/mode/xml/xml.js +++ b/js/vendor/codemirror/mode/xml/xml.js @@ -1,5 +1,5 @@ // CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE +// Distributed under an MIT license: https://codemirror.net/5/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS diff --git a/package.json b/package.json index 0c5e456772..897eed3d5c 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@zxcvbn-ts/core": "^2.0.1", "autoprefixer": "^10.4.7", "bootstrap": "5.2.0", - "codemirror": "5.65.3", + "codemirror": "5.65.9", "jquery": "3.6.0", "jquery-debounce-throttle": "^1.0.6-rc.0", "jquery-migrate": "3.4.0", diff --git a/yarn.lock b/yarn.lock index 86f06a6251..221cd5d3cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1870,10 +1870,10 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== -codemirror@5.65.3: - version "5.65.3" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.3.tgz#2d029930d5a293bc5fb96ceea64654803c0d4ac7" - integrity sha512-kCC0iwGZOVZXHEKW3NDTObvM7pTIyowjty4BUqeREROc/3I6bWbgZDA3fGDwlA+rbgRjvnRnfqs9SfXynel1AQ== +codemirror@5.65.9: + version "5.65.9" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.9.tgz#ec70c92aa206ee4c9853d5f1e7c4ed356cdab68c" + integrity sha512-19Jox5sAKpusTDgqgKB5dawPpQcY+ipQK7xoEI+MVucEF9qqFaXpeqY1KaoyGBso/wHQoDa4HMMxMjdsS3Zzzw== collect-v8-coverage@^1.0.0: version "1.0.1" -- cgit v1.2.3 From 35852a05d30a0a5cc2d7b0c77ef429f1f57666c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Sat, 5 Nov 2022 13:41:14 -0300 Subject: Update PHPStan baseline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- phpstan-baseline.neon | 100 -------------------------------------------------- 1 file changed, 100 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 00e940af5d..0417e32b97 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -35,11 +35,6 @@ parameters: count: 1 path: libraries/classes/Advisor.php - - - message: "#^Parameter \\#3 \\$subject of function preg_replace_callback expects array\\|string, array\\\\|string\\|null given\\.$#" - count: 1 - path: libraries/classes/Advisor.php - - message: "#^Property PhpMyAdmin\\\\Advisor\\:\\:\\$globals type has no value type specified in iterable type array\\.$#" count: 1 @@ -125,11 +120,6 @@ parameters: count: 1 path: libraries/classes/CheckUserPrivileges.php - - - message: "#^Parameter \\#3 \\$subject of function preg_replace expects array\\|string, array\\\\|string\\|null given\\.$#" - count: 1 - path: libraries/classes/CheckUserPrivileges.php - - message: "#^Cannot call method getExtension\\(\\) on mixed\\.$#" count: 1 @@ -1330,11 +1320,6 @@ parameters: count: 1 path: libraries/classes/Controllers/Import/ImportController.php - - - message: "#^Parameter \\#3 \\$subject of function preg_replace expects array\\|string, array\\\\|string\\|null given\\.$#" - count: 1 - path: libraries/classes/Controllers/Import/ImportController.php - - message: "#^Parameter \\#1 \\$dependencies of method PhpMyAdmin\\\\Normalization\\:\\:getHtmlForNewTables3NF\\(\\) expects object, mixed given\\.$#" count: 1 @@ -1595,21 +1580,6 @@ parameters: count: 1 path: libraries/classes/Controllers/Table/SearchController.php - - - message: "#^Parameter \\#1 \\$str of function strtoupper expects string, array\\\\|string\\|null given\\.$#" - count: 1 - path: libraries/classes/Controllers/Table/SearchController.php - - - - message: "#^Parameter \\#1 \\$type of method PhpMyAdmin\\\\Types\\:\\:getIntegerRange\\(\\) expects string, array\\\\|string\\|null given\\.$#" - count: 1 - path: libraries/classes/Controllers/Table/SearchController.php - - - - message: "#^Parameter \\#1 \\$type of method PhpMyAdmin\\\\Types\\:\\:getTypeOperatorsHtml\\(\\) expects string, array\\\\|string\\|null given\\.$#" - count: 1 - path: libraries/classes/Controllers/Table/SearchController.php - - message: "#^Property PhpMyAdmin\\\\Controllers\\\\Table\\\\SearchController\\:\\:\\$columnCollations type has no value type specified in iterable type array\\.$#" count: 1 @@ -1780,21 +1750,6 @@ parameters: count: 1 path: libraries/classes/Controllers/Table/ZoomSearchController.php - - - message: "#^Parameter \\#1 \\$str of function strtoupper expects string, array\\\\|string\\|null given\\.$#" - count: 1 - path: libraries/classes/Controllers/Table/ZoomSearchController.php - - - - message: "#^Parameter \\#1 \\$type of method PhpMyAdmin\\\\Types\\:\\:getIntegerRange\\(\\) expects string, array\\\\|string\\|null given\\.$#" - count: 1 - path: libraries/classes/Controllers/Table/ZoomSearchController.php - - - - message: "#^Parameter \\#1 \\$type of method PhpMyAdmin\\\\Types\\:\\:getTypeOperatorsHtml\\(\\) expects string, array\\\\|string\\|null given\\.$#" - count: 1 - path: libraries/classes/Controllers/Table/ZoomSearchController.php - - message: "#^Parameter \\#2 \\$column_index of method PhpMyAdmin\\\\Controllers\\\\Table\\\\ZoomSearchController\\:\\:getColumnProperties\\(\\) expects int, int\\|string\\|false given\\.$#" count: 1 @@ -4380,11 +4335,6 @@ parameters: count: 1 path: libraries/classes/Header.php - - - message: "#^Cannot cast array\\\\|string\\|null to string\\.$#" - count: 1 - path: libraries/classes/Html/Generator.php - - message: "#^Method PhpMyAdmin\\\\Html\\\\Generator\\:\\:getDefaultFunctionForField\\(\\) has parameter \\$field with no value type specified in iterable type array\\.$#" count: 1 @@ -4585,16 +4535,6 @@ parameters: count: 2 path: libraries/classes/Import.php - - - message: "#^Parameter \\#1 \\$sql of method PhpMyAdmin\\\\Import\\:\\:runQuery\\(\\) expects string, array\\\\|string\\|null given\\.$#" - count: 1 - path: libraries/classes/Import.php - - - - message: "#^Parameter \\#2 \\$full of method PhpMyAdmin\\\\Import\\:\\:runQuery\\(\\) expects string, array\\\\|string\\|null given\\.$#" - count: 1 - path: libraries/classes/Import.php - - message: "#^Method PhpMyAdmin\\\\Import\\\\Ajax\\:\\:uploadProgressSetup\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 @@ -5815,11 +5755,6 @@ parameters: count: 1 path: libraries/classes/Plugins/Auth/AuthenticationCookie.php - - - message: "#^Binary operation \"\\.\" between 'WWW\\-Authenticate\\:…' and array\\\\|string\\|null results in an error\\.$#" - count: 1 - path: libraries/classes/Plugins/Auth/AuthenticationHttp.php - - message: "#^Property PhpMyAdmin\\\\Plugins\\\\AuthenticationPlugin\\:\\:\\$user \\(string\\) in isset\\(\\) is not nullable\\.$#" count: 1 @@ -5970,21 +5905,11 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportPdf.php - - - message: "#^Binary operation \"\\.\" between '_' and array\\\\|string\\|null results in an error\\.$#" - count: 1 - path: libraries/classes/Plugins/Export/ExportPhparray.php - - message: "#^Method PhpMyAdmin\\\\Plugins\\\\Export\\\\ExportPhparray\\:\\:exportData\\(\\) has parameter \\$aliases with no value type specified in iterable type array\\.$#" count: 1 path: libraries/classes/Plugins/Export/ExportPhparray.php - - - message: "#^Parameter \\#2 \\$subject of function preg_match expects string, array\\\\|string\\|null given\\.$#" - count: 1 - path: libraries/classes/Plugins/Export/ExportPhparray.php - - message: "#^Binary operation \"\\.\" between 'FOREIGN KEY ' and array\\|string results in an error\\.$#" count: 1 @@ -6060,11 +5985,6 @@ parameters: count: 5 path: libraries/classes/Plugins/Export/ExportSql.php - - - message: "#^Parameter \\#1 \\$list of class PhpMyAdmin\\\\SqlParser\\\\Parser constructor expects PhpMyAdmin\\\\SqlParser\\\\TokensList\\|PhpMyAdmin\\\\SqlParser\\\\UtfString\\|string\\|null, array\\\\|string\\|null given\\.$#" - count: 1 - path: libraries/classes/Plugins/Export/ExportSql.php - - message: "#^Parameter \\#1 \\$str of function strtoupper expects string, mixed given\\.$#" count: 1 @@ -7290,11 +7210,6 @@ parameters: count: 1 path: libraries/classes/Server/Plugins.php - - - message: "#^Binary operation \"\\.\" between 'PASSWORD\\(\\\\'' and array\\\\|string\\|null results in an error\\.$#" - count: 2 - path: libraries/classes/Server/Privileges.php - - message: "#^Method PhpMyAdmin\\\\Server\\\\Privileges\\:\\:addUser\\(\\) has parameter \\$dbname with no value type specified in iterable type array\\.$#" count: 1 @@ -8470,11 +8385,6 @@ parameters: count: 1 path: libraries/classes/Table/ColumnsDefinition.php - - - message: "#^Parameter \\#1 \\$str of function rtrim expects string, array\\\\|string\\|null given\\.$#" - count: 1 - path: libraries/classes/Table/ColumnsDefinition.php - - message: "#^Parameter \\#1 \\$str of function trim expects string, mixed given\\.$#" count: 1 @@ -8560,11 +8470,6 @@ parameters: count: 2 path: libraries/classes/ThemeManager.php - - - message: "#^Binary operation \"\\.\" between non\\-falsy\\-string and array\\\\|string\\|null results in an error\\.$#" - count: 1 - path: libraries/classes/Tracker.php - - message: "#^Cannot access property \\$table on PhpMyAdmin\\\\SqlParser\\\\Components\\\\Expression\\|string\\.$#" count: 1 @@ -8865,11 +8770,6 @@ parameters: count: 1 path: libraries/classes/Tracking.php - - - message: "#^Parameter \\#1 \\$string of function htmlspecialchars expects string, array\\\\|string\\|null given\\.$#" - count: 1 - path: libraries/classes/Tracking.php - - message: "#^Parameter \\#1 \\$var of function count expects array\\|Countable, mixed given\\.$#" count: 1 -- cgit v1.2.3 From df9e55c46b0e9a95b84e22431d5125303af9ad7d Mon Sep 17 00:00:00 2001 From: William Desportes Date: Sun, 6 Nov 2022 09:11:05 +0000 Subject: Translated using Weblate (French) Currently translated at 100.0% (3418 of 3418 strings) [ci skip] Translation: phpMyAdmin/5.2 Translate-URL: https://hosted.weblate.org/projects/phpmyadmin/5-2/fr/ Signed-off-by: William Desportes --- po/fr.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/fr.po b/po/fr.po index 2be87ba948..84dce69543 100644 --- a/po/fr.po +++ b/po/fr.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: phpMyAdmin-docs 4.0.0-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2022-09-29 00:17-0300\n" -"PO-Revision-Date: 2022-10-29 18:19+0000\n" +"PO-Revision-Date: 2022-11-07 12:05+0000\n" "Last-Translator: William Desportes \n" "Language-Team: French \n" @@ -13,7 +13,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.14.2-dev\n" +"X-Generator: Weblate 4.14.2\n" #: libraries/advisory_rules_generic.php:9 msgid "Uptime below one day" @@ -15986,7 +15986,7 @@ msgstr "Avertissement" #: templates/home/index.twig:282 msgid "Notice" -msgstr "Notice" +msgstr "Information" #: templates/home/index.twig:295 msgid "phpMyAdmin Themes" -- cgit v1.2.3 From 2555097d24b95877538920c4ae4e0853adccf328 Mon Sep 17 00:00:00 2001 From: Kristijan Fremen Velkovski Date: Sat, 5 Nov 2022 04:37:11 +0000 Subject: Translated using Weblate (Macedonian) Currently translated at 19.1% (656 of 3418 strings) [ci skip] Translation: phpMyAdmin/5.2 Translate-URL: https://hosted.weblate.org/projects/phpmyadmin/5-2/mk/ Signed-off-by: Kristijan Fremen Velkovski --- po/mk.po | 77 +++++++++++++++++++++++++--------------------------------------- 1 file changed, 30 insertions(+), 47 deletions(-) diff --git a/po/mk.po b/po/mk.po index 78c88c6bf4..7c82bd1e84 100644 --- a/po/mk.po +++ b/po/mk.po @@ -4,8 +4,8 @@ msgstr "" "Project-Id-Version: phpMyAdmin 5.2.1-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2022-09-29 00:17-0300\n" -"PO-Revision-Date: 2022-10-31 18:40+0000\n" -"Last-Translator: William Desportes \n" +"PO-Revision-Date: 2022-11-07 12:05+0000\n" +"Last-Translator: Kristijan Fremen Velkovski \n" "Language-Team: Macedonian \n" "Language: mk\n" @@ -13,7 +13,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n==1 || n%10==1 ? 0 : 1;\n" -"X-Generator: Weblate 4.14.2-dev\n" +"X-Generator: Weblate 4.14.2\n" #: libraries/advisory_rules_generic.php:9 msgid "Uptime below one day" @@ -624,10 +624,9 @@ msgstr "" "саат" #: libraries/advisory_rules_generic.php:459 -#, fuzzy, no-php-format -#| msgid "Create table on database %s" +#, no-php-format msgid "Immediate table locks %" -msgstr "Креирај нова табела во базата на податоци %s" +msgstr "Непосредни заклучувања на табели %" #: libraries/advisory_rules_generic.php:463 #: libraries/advisory_rules_generic.php:473 @@ -640,20 +639,21 @@ msgid "Optimize queries and/or use InnoDB to reduce lock wait." msgstr "" #: libraries/advisory_rules_generic.php:465 -#, fuzzy, php-format -#| msgid "Sort buffer size" +#, php-format msgid "Immediate table locks: %s%%, this value should be above 95%%" -msgstr "Големина на меѓупросторот за подредување" +msgstr "" +"Непосредни заклучувања на табели: %s%%, оваа вредност треба да биде над 95%%" #: libraries/advisory_rules_generic.php:470 msgid "Table lock wait rate" msgstr "" #: libraries/advisory_rules_generic.php:475 -#, fuzzy, php-format -#| msgid "Sort buffer size" +#, php-format msgid "Table lock wait rate: %s, this value should be less than 1 per hour" -msgstr "Големина на меѓупросторот за подредување" +msgstr "" +"Рата на чекање за заклучување на табели: %s, оваа вредност треба да бида " +"помала од 1 на саат" #: libraries/advisory_rules_generic.php:480 #, fuzzy @@ -681,20 +681,17 @@ msgid "Thread cache hit rate %" msgstr "Вид на упит" #: libraries/advisory_rules_generic.php:494 -#, fuzzy -#| msgid "The server is not responding" msgid "Thread cache is not efficient." -msgstr "Серверот не одговара" +msgstr "Тред кешот не е ефикасен." #: libraries/advisory_rules_generic.php:495 msgid "Increase {thread_cache_size}." msgstr "" #: libraries/advisory_rules_generic.php:496 -#, fuzzy, php-format -#| msgid "Sort buffer size" +#, php-format msgid "Thread cache hitrate: %s%%, this value should be above 80%%" -msgstr "Големина на меѓупросторот за подредување" +msgstr "Тред кеш рата на употреба %s%%, оваа вредност треба да биде над 80%%" #: libraries/advisory_rules_generic.php:501 msgid "Threads that are slow to launch" @@ -767,10 +764,8 @@ msgstr "Конекции" #: libraries/advisory_rules_generic.php:545 #: libraries/advisory_rules_generic.php:559 -#, fuzzy -#| msgid "Allows creating temporary tables." msgid "Too many connections are aborted." -msgstr "Дозволува креирање на привремени табели…" +msgstr "Премногу конекции се абортирани." #: libraries/advisory_rules_generic.php:547 #: libraries/advisory_rules_generic.php:561 @@ -805,10 +800,8 @@ msgstr "Содржина" #: libraries/advisory_rules_generic.php:573 #: libraries/advisory_rules_generic.php:587 -#, fuzzy -#| msgid "Allows creating temporary tables." msgid "Too many clients are aborted." -msgstr "Дозволува креирање на привремени табели…" +msgstr "Премногу клиенти се абортирани." #: libraries/advisory_rules_generic.php:575 #: libraries/advisory_rules_generic.php:589 @@ -924,10 +917,8 @@ msgid "InnoDB buffer pool size" msgstr "Големина на баферот" #: libraries/advisory_rules_generic.php:685 -#, fuzzy -#| msgid "Buffer pool size" msgid "Your InnoDB buffer pool is fairly small." -msgstr "Големина на баферот" +msgstr "InnoDB баферот пулот е премногу мал." #: libraries/advisory_rules_generic.php:687 #, no-php-format @@ -978,10 +969,8 @@ msgid "Query cache disabled" msgstr "Вид на упит" #: libraries/advisory_rules_mysql_before80003.php:12 -#, fuzzy -#| msgid "The server is not responding" msgid "The query cache is not enabled." -msgstr "Серверот не одговара" +msgstr "Кешот за барање не е вклучен." #: libraries/advisory_rules_mysql_before80003.php:14 msgid "" @@ -9606,11 +9595,10 @@ msgid "File could not be read!" msgstr "Датотеката не е можно да се прочита!" #: libraries/classes/File.php:465 -#, fuzzy msgid "Error moving the uploaded file, see [doc@faq1-11]FAQ 1.11[/doc]." msgstr "" -"Бројот на записи може да биде приближен. За подетални информации види FAQ " -"3.11" +"Грешка при пренесување на уплоадираниот фајл, види [doc@faq1-11]FAQ 1." +"11[/doc]." #: libraries/classes/File.php:485 msgid "Error while moving uploaded file." @@ -15314,20 +15302,17 @@ msgid "Inside column:" msgstr "во табела(и):" #: templates/database/search/results.twig:12 -#, fuzzy, php-format -#| msgid "%s match(es) inside table %s" +#, php-format msgid "%1$s match in %2$s" msgid_plural "%1$s matches in %2$s" -msgstr[0] "%s погодоци во табелата %s" -msgstr[1] "%s погодоци во табелата %s" +msgstr[0] "%1$s погодок во %2$s" +msgstr[1] "%1$s погодоци во %2$s" #: templates/database/search/results.twig:56 -#, fuzzy -#| msgid "Total: %s match(es)" msgid "Total: %count% match" msgid_plural "Total: %count% matches" -msgstr[0] "вкупно: %s погодоци" -msgstr[1] "вкупно: %s погодоци" +msgstr[0] "Вкупно: %count% погодок" +msgstr[1] "Вкупно: %count% погодоци" #: templates/database/structure/add_prefix.twig:7 #: templates/database/structure/add_prefix.twig:9 @@ -15859,10 +15844,9 @@ msgid "Output:" msgstr "" #: templates/export.twig:175 templates/export.twig:370 -#, fuzzy, php-format -#| msgid "Save on server in %s directory" +#, php-format msgid "Save on server in the directory %s" -msgstr "Сочувај на серверот во директориумот %s" +msgstr "Сочувај на серверот во директориумот %s" #: templates/export.twig:193 templates/export.twig:337 msgid "Rename exported databases/tables/columns" @@ -16373,10 +16357,9 @@ msgid "You may also drag and drop a file on any page." msgstr "" #: templates/import.twig:62 templates/import.twig:88 -#, fuzzy, php-format -#| msgid "web server upload directory" +#, php-format msgid "Select from the web server upload directory [strong]%s[/strong]:" -msgstr "директориум за праќање на веб серверот " +msgstr "Избери од веб серверот уплоад директориум [strong]%s[/strong]:" #: templates/import.twig:69 templates/import.twig:96 #, fuzzy -- cgit v1.2.3 From 8ed8f581c60e1c86d97cdd7794ff0a2bdbc83e97 Mon Sep 17 00:00:00 2001 From: AefghThreenine Date: Sat, 5 Nov 2022 16:08:52 +0000 Subject: Translated using Weblate (Thai) Currently translated at 39.1% (1337 of 3418 strings) [ci skip] Translation: phpMyAdmin/5.2 Translate-URL: https://hosted.weblate.org/projects/phpmyadmin/5-2/th/ Signed-off-by: AefghThreenine --- po/th.po | 215 +++++++++++++++++++++------------------------------------------ 1 file changed, 72 insertions(+), 143 deletions(-) diff --git a/po/th.po b/po/th.po index b12a466e3a..c8546a22b7 100644 --- a/po/th.po +++ b/po/th.po @@ -4,16 +4,16 @@ msgstr "" "Project-Id-Version: phpMyAdmin 5.2.1-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2022-09-29 00:17-0300\n" -"PO-Revision-Date: 2022-02-17 10:35+0000\n" -"Last-Translator: Maurício Meneghini Fauth \n" -"Language-Team: Thai \n" +"PO-Revision-Date: 2022-11-07 12:05+0000\n" +"Last-Translator: AefghThreenine \n" +"Language-Team: Thai " +"\n" "Language: th\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.11-dev\n" +"X-Generator: Weblate 4.14.2\n" #: libraries/advisory_rules_generic.php:9 msgid "Uptime below one day" @@ -173,6 +173,8 @@ msgid "" "You should upgrade, as MySQL 5.1 has improved performance, and MySQL 5.5 " "even more so." msgstr "" +"คุณควรอัพเกรดเนื่องจาก MySQL 5.1 ได้ปรับปรุงเรื่องประสิทธิภาพ และใน MySQL " +"5.5 ก็ได้ปรับปรุงให้ดีกว่านี้" #: libraries/advisory_rules_generic.php:113 #: libraries/advisory_rules_generic.php:127 @@ -188,13 +190,15 @@ msgstr "รุ่นย่อย" #: libraries/advisory_rules_generic.php:122 msgid "Version less than 5.1.30 (the first GA release of 5.1)." -msgstr "" +msgstr "รุ่นต่ำกว่า 5.1.30 (GA รุ่นแรกของ 5.1)" #: libraries/advisory_rules_generic.php:124 msgid "" "You should upgrade, as recent versions of MySQL 5.1 have improved " "performance and MySQL 5.5 even more so." msgstr "" +"คุณควรอัพเกรดเนื่องจากรุ่นล่าสุดของ MySQL 5.1 ได้ปรับปรุงเรื่องประสิทธิภาพ " +"และใน MySQL 5.5 ก็ได้ปรับปรุงให้ดีกว่านี้" #: libraries/advisory_rules_generic.php:136 msgid "Version less than 5.5.8 (the first GA release of 5.5)." @@ -4491,7 +4495,7 @@ msgstr "อื่นๆ" #: libraries/classes/Config/Descriptions.php:987 msgid "Server connection collation" -msgstr "ตรวจทานการเชื่อมต่อเซิร์ฟเวอร์" +msgstr "การเรียงลำดับสำหรับการเชื่อมต่อเซิร์ฟเวอร์" #: libraries/classes/Config/FormDisplay.php:605 #, php-format @@ -4501,10 +4505,8 @@ msgstr "ข้อมูลที่หายไปสำหรับ %s" #: libraries/classes/Config/FormDisplay.php:646 #: libraries/classes/Config/Validator.php:590 #: templates/config/form_display/display.twig:67 -#, fuzzy -#| msgid "Incorrect value" msgid "Incorrect value!" -msgstr "ค่าไม่ถูกต้อง" +msgstr "ค่าไม่ถูกต้อง!" #: libraries/classes/Config/FormDisplay.php:797 #: libraries/classes/Config/FormDisplay.php:806 @@ -4520,12 +4522,12 @@ msgstr "\"%s\" ต้องใช้ส่วนขยาย %s" #: libraries/classes/Config/FormDisplay.php:839 #, php-format msgid "Compressed import will not work due to missing function %s." -msgstr "" +msgstr "ไม่สามารถใช้การนำเข้าแบบบีบอัดได้เนื่องจากขาดฟังก์ชัน %s" #: libraries/classes/Config/FormDisplay.php:848 #, php-format msgid "Compressed export will not work due to missing function %s." -msgstr "" +msgstr "ไม่สามารถใช้การส่งออกแบบบีบอัดได้เนื่องจากขาดฟังก์ชัน %s" #: libraries/classes/Config/FormDisplay.php:867 #, php-format @@ -4546,7 +4548,7 @@ msgstr "การรับรองความถูกต้องของก #: libraries/classes/Config/Forms/User/ExportForm.php:25 msgid "Quick" -msgstr "" +msgstr "รวดเร็ว" #: libraries/classes/Config/Forms/User/ExportForm.php:29 msgid "Custom" @@ -9038,21 +9040,19 @@ msgid "May be approximate. See [doc@faq3-11]FAQ 3.11[/doc]." msgstr "มีข้อผิดพลาดระหว่างการอัพโหลด กรุณาดู [doc@faq1-11]FAQ 1.11[/doc]" #: libraries/classes/Display/Results.php:3991 -#, fuzzy, php-format -#| msgid "Showing rows" +#, php-format msgid "Showing rows %1s - %2s" -msgstr "แสดงแถว" +msgstr "กำลังแสดงแถวที่ %1s - %2s" #: libraries/classes/Display/Results.php:4005 #, php-format msgid "%1$d total, %2$d in query" -msgstr "" +msgstr "ทั้งหมด %1$d, %2$d ในคำค้น" #: libraries/classes/Display/Results.php:4010 -#, fuzzy, php-format -#| msgid "total" +#, php-format msgid "%d total" -msgstr "ทั้งหมด" +msgstr "ทั้งหมด %d" #: libraries/classes/Display/Results.php:4023 libraries/classes/Sql.php:973 #, fuzzy, php-format @@ -9554,11 +9554,9 @@ msgid "Profiling" msgstr "การทำแฟ้มประวัติ" #: libraries/classes/Html/Generator.php:746 -#, fuzzy -#| msgid "Add new field" msgctxt "Inline edit query" msgid "Edit inline" -msgstr "เพิ่มฟิลด์ใหม่" +msgstr "แก้ไขแบบอินไลน์" #: libraries/classes/Html/Generator.php:870 #, fuzzy @@ -9988,7 +9986,7 @@ msgstr "คอลัมน์" #: libraries/classes/Navigation/Nodes/NodeColumnContainer.php:33 msgctxt "Create new column" msgid "New" -msgstr "" +msgstr "ใหม่" #: libraries/classes/Navigation/Nodes/NodeColumn.php:32 #: libraries/classes/Plugins/Export/ExportHtmlword.php:272 @@ -10026,23 +10024,20 @@ msgstr "คอลัมน์" #: libraries/classes/Navigation/Nodes/NodeDatabaseContainer.php:38 msgctxt "Create new database" msgid "New" -msgstr "" +msgstr "ใหม่" #: libraries/classes/Navigation/Nodes/NodeDatabase.php:42 -#, fuzzy msgid "Database operations" -msgstr "สถิติฐานข้อมูล" +msgstr "การดำเนินการกับฐานข้อมูล" #: libraries/classes/Navigation/Nodes/NodeDatabase.php:664 -#, fuzzy -#| msgid "Show hint" msgid "Show hidden items" -msgstr "แสดงคำแนะนำ" +msgstr "แสดงรายการที่ถูกซ่อนไว้" #: libraries/classes/Navigation/Nodes/NodeEventContainer.php:33 msgctxt "Create new event" msgid "New" -msgstr "" +msgstr "ใหม่" #: libraries/classes/Navigation/Nodes/NodeEvent.php:28 #: libraries/classes/Plugins/Export/ExportHtmlword.php:475 @@ -10058,23 +10053,22 @@ msgstr "เหตุการณ์" #: libraries/classes/Navigation/Nodes/NodeFunctionContainer.php:26 #: libraries/classes/Plugins/Export/ExportSql.php:634 #: libraries/classes/Plugins/Export/ExportXml.php:105 -#, fuzzy msgid "Functions" -msgstr "ฟังก์ชั่น" +msgstr "ฟังก์ชัน" #: libraries/classes/Navigation/Nodes/NodeFunctionContainer.php:33 msgctxt "Create new function" msgid "New" -msgstr "" +msgstr "ใหม่" #: libraries/classes/Navigation/Nodes/NodeIndexContainer.php:33 msgctxt "Create new index" msgid "New" -msgstr "" +msgstr "ใหม่" #: libraries/classes/Navigation/Nodes/Node.php:630 msgid "Expand/Collapse" -msgstr "" +msgstr "ขยาย/ยุบ" #: libraries/classes/Navigation/Nodes/NodeProcedureContainer.php:25 #: libraries/classes/Navigation/Nodes/NodeProcedureContainer.php:26 @@ -10657,7 +10651,6 @@ msgstr "" #: libraries/config.values.php:254 libraries/config.values.php:318 #: libraries/config.values.php:334 libraries/config.values.php:342 #: libraries/config.values.php:347 -#, fuzzy msgid "structure" msgstr "โครงสร้าง" @@ -10684,10 +10677,8 @@ msgstr "ข้อมูล" #: libraries/config.values.php:256 libraries/config.values.php:320 #: libraries/config.values.php:336 libraries/config.values.php:344 #: libraries/config.values.php:349 -#, fuzzy -#| msgid "Structure and data" msgid "structure and data" -msgstr "ทั้งโครงสร้างและข้อมูล" +msgstr "โครงสร้างและข้อมูล" #: libraries/classes/Plugins/Export/ExportHtmlword.php:74 #: libraries/classes/Plugins/Export/ExportLatex.php:158 @@ -10897,18 +10888,14 @@ msgstr "ใส่ชื่อฟิลด์ที่แถวแรก" #: libraries/classes/Plugins/Export/ExportXml.php:232 #: templates/server/replication/change_primary.twig:22 #: templates/server/replication/primary_add_replica_user.twig:29 -#, fuzzy -#| msgid "Host" msgid "Host:" -msgstr "โฮสต์" +msgstr "โฮสต์:" #: libraries/classes/Plugins/Export/ExportLatex.php:216 #: libraries/classes/Plugins/Export/ExportSql.php:761 #: libraries/classes/Plugins/Export/ExportXml.php:238 -#, fuzzy -#| msgid "Generation Time" msgid "Generation Time:" -msgstr "เวลาในการสร้าง" +msgstr "เวลาที่สร้าง:" #: libraries/classes/Plugins/Export/ExportLatex.php:218 #: libraries/classes/Plugins/Export/ExportSql.php:765 @@ -10920,10 +10907,8 @@ msgstr "เวอร์ชันของเซิร์ฟเวอร์:" #: libraries/classes/Plugins/Export/ExportLatex.php:219 #: libraries/classes/Plugins/Export/ExportSql.php:767 #: libraries/classes/Plugins/Export/ExportXml.php:241 -#, fuzzy -#| msgid "PHP Version" msgid "PHP Version:" -msgstr "รุ่นของ PHP" +msgstr "เวอร์ชันของ PHP:" #: libraries/classes/Plugins/Export/ExportLatex.php:246 #: libraries/classes/Plugins/Export/ExportSql.php:947 @@ -10931,29 +10916,21 @@ msgstr "รุ่นของ PHP" #: libraries/classes/Plugins/Export/Helpers/Pdf.php:201 #: templates/database/structure/copy_form.twig:5 #: templates/menu/breadcrumbs.twig:16 -#, fuzzy -#| msgid "Database" msgid "Database:" -msgstr "ฐานข้อมูล" +msgstr "ฐานข้อมูล:" #: libraries/classes/Plugins/Export/ExportLatex.php:312 #: libraries/classes/Plugins/Export/ExportSql.php:2226 -#, fuzzy -#| msgid "Data" msgid "Data:" -msgstr "ข้อมูล" +msgstr "ข้อมูล:" #: libraries/classes/Plugins/Export/ExportLatex.php:513 -#, fuzzy -#| msgid "Structure" msgid "Structure:" -msgstr "โครงสร้าง" +msgstr "โครงสร้าง:" #: libraries/classes/Plugins/Export/ExportMediawiki.php:77 -#, fuzzy -#| msgid "Export" msgid "Export table names" -msgstr "ส่งออก" +msgstr "ส่งออกชื่อตาราง" #: libraries/classes/Plugins/Export/ExportMediawiki.php:84 #, fuzzy @@ -11797,35 +11774,27 @@ msgstr "" #: libraries/classes/Query/Utilities.php:118 msgid "Details…" -msgstr "" +msgstr "รายละเอียด…" #: libraries/classes/RecentFavoriteTable.php:159 -#, fuzzy -#| msgid "Could not save recent table" msgid "Could not save recent table!" -msgstr "ไม่สามารถบันทึกตารางล่าสุด" +msgstr "ไม่สามารถบันทึกตารางล่าสุดได้!" #: libraries/classes/RecentFavoriteTable.php:163 -#, fuzzy -#| msgid "Could not save recent table" msgid "Could not save favorite table!" -msgstr "ไม่สามารถบันทึกตารางล่าสุด" +msgstr "ไม่สามารถบันทึกตารางโปรดได้!" #: libraries/classes/RecentFavoriteTable.php:247 msgid "Recent tables" msgstr "ตารางล่าสุด" #: libraries/classes/RecentFavoriteTable.php:249 -#, fuzzy -#| msgid "Reset" msgid "Recent" -msgstr "ตั้งค่าใหม่" +msgstr "ล่าสุด" #: libraries/classes/RecentFavoriteTable.php:253 -#, fuzzy -#| msgid "Variables" msgid "Favorites" -msgstr "ตัวแปร" +msgstr "รายการโปรด" #: libraries/classes/ReplicationGui.php:438 msgid "" @@ -11944,10 +11913,8 @@ msgid "Missing information to load the search." msgstr "" #: libraries/classes/SavedSearches.php:385 -#, fuzzy -#| msgid "Error while moving uploaded file." msgid "Error while loading the search." -msgstr "ข้อผิดพลาดขณะเคลื่อนย้ายไฟล์อัพโหลด" +msgstr "ข้อผิดพลาดขณะโหลดการค้นหา" #: libraries/classes/Server/Plugins.php:68 #: libraries/classes/Server/Privileges.php:788 @@ -12403,9 +12370,8 @@ msgstr "" #: libraries/classes/Server/Status/Data.php:161 #: templates/server/binlog/index.twig:27 -#, fuzzy msgid "Files" -msgstr "จำนวนฟิลด์" +msgstr "ไฟล์" #: libraries/classes/Server/Status/Data.php:180 msgid "Flush (close) all tables" @@ -12456,7 +12422,7 @@ msgstr "คำสั่ง" #: libraries/classes/Server/Status/Processes.php:141 msgid "Progress" -msgstr "" +msgstr "ความคืบหน้า" #: libraries/classes/Setup/Index.php:130 msgid "" @@ -13358,22 +13324,16 @@ msgid "Never send error reports" msgstr "" #: libraries/config.values.php:205 -#, fuzzy -#| msgid "Export defaults" msgid "Server default" -msgstr "ส่งออกค่าเริ่มต้น" +msgstr "ค่าเริ่มต้นเซิร์ฟเวอร์" #: libraries/config.values.php:206 -#, fuzzy -#| msgid "Enabled" msgid "Enable" -msgstr "เปิดใช้อยู่" +msgstr "เปิดใช้" #: libraries/config.values.php:207 -#, fuzzy -#| msgid "Disabled" msgid "Disable" -msgstr "ระงับการใช้อยู่" +msgstr "ปิดใช้" #: libraries/config.values.php:259 msgid "Quick - display only the minimal options to configure" @@ -13388,16 +13348,12 @@ msgid "Custom - like above, but without the quick/custom choice" msgstr "กำหนดเอง - เหมือนข้างต้น แต่ไม่มีทางเลือกที่รวดเร็ว/กำหนดเอง" #: libraries/config.values.php:328 -#, fuzzy -#| msgid "Complete inserts" msgid "complete inserts" -msgstr "คำสั่ง INSERT เต็มรูปแบบ" +msgstr "คำสั่ง INSERT แบบสมบูรณ์" #: libraries/config.values.php:329 -#, fuzzy -#| msgid "Extended inserts" msgid "extended inserts" -msgstr "แทรกหลายระเบียนในคราวเดียว" +msgstr "คำสั่ง INSERT แบบขยาย" #: libraries/config.values.php:330 msgid "both of the above" @@ -13412,10 +13368,8 @@ msgid "Configuration already exists, setup is disabled!" msgstr "" #: setup/validate.php:31 -#, fuzzy -#| msgid "No databases" msgid "Wrong data" -msgstr "ไม่มีฐานข้อมูล" +msgstr "ข้อมูลไม่ถูกต้อง" #: setup/validate.php:38 #, php-format @@ -13442,15 +13396,14 @@ msgstr "ไม่มี" #: templates/database/central_columns/main.twig:77 #: templates/database/central_columns/main.twig:312 msgid "As defined:" -msgstr "" +msgstr "ตามที่กำหนด:" #: templates/columns_definitions/column_attributes.twig:97 -#, fuzzy -#| msgid "You don't have sufficient privileges to be here right now!" msgid "" "You don't have sufficient privileges to perform this operation; Please refer " "to the documentation for more details" -msgstr "คุณไม่มีสิทธิที่จะเข้ามาตรงนี้!" +msgstr "" +"คุณไม่มีสิทธิที่จะดำเนินการนี้ กรุณาดูที่เอกสารประกอบสำหรับข้อมูลเพิ่มเติม" #: templates/columns_definitions/column_attributes.twig:111 #: templates/database/data_dictionary/index.twig:75 templates/indexes.twig:18 @@ -13489,8 +13442,7 @@ msgstr "ครั้งแรก" #: templates/columns_definitions/column_attributes.twig:182 #: templates/table/structure/display_structure.twig:433 -#, fuzzy, php-format -#| msgid "After %s" +#, php-format msgid "after %s" msgstr "หลัง %s" @@ -13504,10 +13456,8 @@ msgstr "ชื่อตาราง" #: templates/console/display.twig:99 #: templates/database/central_columns/main.twig:196 templates/export.twig:285 #: templates/export.twig:301 templates/export.twig:317 -#, fuzzy -#| msgid "And" msgid "Add" -msgstr "และ" +msgstr "เพิ่ม" #: templates/columns_definitions/column_definitions_form.twig:40 #, fuzzy @@ -13516,10 +13466,8 @@ msgid "column(s)" msgstr "คอลัมน์" #: templates/columns_definitions/column_definitions_form.twig:74 -#, fuzzy -#| msgid "Collation" msgid "Collation:" -msgstr "การเรียงลำดับ" +msgstr "การเรียงลำดับ:" #: templates/columns_definitions/column_definitions_form.twig:77 msgid "Storage Engine:" @@ -14061,10 +14009,8 @@ msgstr "ตัวกรอง" #: templates/database/central_columns/main.twig:167 #: templates/display/results/table.twig:64 -#, fuzzy -#| msgid "Search in database" msgid "Search this table" -msgstr "ค้นหาในฐานข้อมูล" +msgstr "ค้นหาในตารางนี้" #: templates/database/central_columns/main.twig:178 #: templates/table/structure/display_structure.twig:418 @@ -14313,9 +14259,8 @@ msgid "Pin text" msgstr "ข้อความบางส่วน" #: templates/database/designer/main.twig:202 -#, fuzzy msgid "Hide/Show all" -msgstr "แสดงทั้งหมด" +msgstr "ซ่อน/แสดงทั้งหมด" #: templates/database/designer/main.twig:212 #, fuzzy @@ -14324,10 +14269,8 @@ msgid "Hide/Show tables with no relationship" msgstr "เสนอโครงสร้างตาราง" #: templates/database/designer/main.twig:223 -#, fuzzy -#| msgid "Number of rows per page" msgid "Number of tables:" -msgstr "ระเบียนต่อหน้า" +msgstr "จำนวนตาราง:" #: templates/database/designer/main.twig:381 #, fuzzy @@ -14519,8 +14462,6 @@ msgstr "" #: templates/server/user_groups/edit_user_groups.twig:11 #: templates/table/privileges/index.twig:117 #: templates/table/privileges/index.twig:118 -#, fuzzy -#| msgid "Check All" msgid "Check all" msgstr "เลือกทั้งหมด" @@ -15373,8 +15314,6 @@ msgid "Trigger name" msgstr "ชื่อผู้ใช้" #: templates/database/triggers/editor_form.twig:37 -#, fuzzy -#| msgid "Time" msgctxt "Trigger action time" msgid "Time" msgstr "เวลา" @@ -15403,10 +15342,8 @@ msgstr "เพิ่ม/ลบ คอลัมน์ (ฟิลด์)" #: templates/display/results/table.twig:49 templates/export.twig:149 #: templates/table/start_and_number_of_rows_fieldset.twig:9 -#, fuzzy -#| msgid "Number of rows per page" msgid "Number of rows:" -msgstr "ระเบียนต่อหน้า" +msgstr "จำนวนแถว:" #: templates/display/results/table.twig:52 msgid "All" @@ -17824,7 +17761,7 @@ msgstr "" #: templates/server/replication/replica_configuration.twig:74 msgid "Error management:" -msgstr "" +msgstr "การจัดการข้อผิดพลาด:" #: templates/server/replication/replica_configuration.twig:77 msgid "Skipping errors might lead into unsynchronized primary and replica!" @@ -17832,12 +17769,12 @@ msgstr "" #: templates/server/replication/replica_configuration.twig:81 msgid "Skip current error" -msgstr "" +msgstr "ข้ามข้อผิดพลาดปัจจุบัน" #: templates/server/replication/replica_configuration.twig:87 #, php-format msgid "Skip next %s errors." -msgstr "" +msgstr "ข้าม %s ข้อผิดพลาดถัดไป" #: templates/server/replication/replica_configuration.twig:107 #, fuzzy, php-format @@ -17870,24 +17807,21 @@ msgid "Variable" msgstr "ตัวแปร" #: templates/server/select/index.twig:7 templates/server/select/index.twig:19 -#, fuzzy -#| msgid "Server" msgid "Current server:" -msgstr "เซิร์ฟเวอร์" +msgstr "เซิร์ฟเวอร์ปัจจุบัน:" #: templates/server/status/advisor/index.twig:6 #: templates/server/status/advisor/index.twig:19 msgid "Advisor system" -msgstr "แนะนำระบบ" +msgstr "ระบบที่ปรึกษา" #: templates/server/status/advisor/index.twig:9 msgid "Not enough privilege to view the advisor." msgstr "" #: templates/server/status/advisor/index.twig:12 -#, fuzzy msgid "Instructions" -msgstr "ฟังก์ชั่น" +msgstr "คำแนะนำ" #: templates/server/status/advisor/index.twig:24 msgid "" @@ -18972,10 +18906,8 @@ msgid "Table %s has been flushed." msgstr "ล้างตาราง %s เรียบร้อยแล้ว" #: templates/table/operations/index.twig:376 -#, fuzzy -#| msgid "Flush the table (\"FLUSH\")" msgid "Flush the table (FLUSH)" -msgstr "ล้างตาราง (flush)" +msgstr "ล้างตาราง (FLUSH)" #: templates/table/operations/index.twig:413 msgid "Empty the table (TRUNCATE)" @@ -18988,9 +18920,8 @@ msgid "Empty the table (DELETE FROM)" msgstr "ลบข้อมูลตาราง (TRUNCATE)" #: templates/table/operations/index.twig:452 -#, fuzzy msgid "Delete the table (DROP)" -msgstr "ไม่มีฐานข้อมูล" +msgstr "ลบตาราง (DROP)" #: templates/table/operations/index.twig:474 #, fuzzy @@ -19009,14 +18940,12 @@ msgid "Check referential integrity" msgstr "ตรวจสอบความสมบูรณ์ของการอ้างถึง:" #: templates/table/operations/view.twig:12 -#, fuzzy msgid "Rename view to" -msgstr "เปลี่ยนชื่อตารางเป็น" +msgstr "เปลี่ยนชื่อวิวเป็น" #: templates/table/operations/view.twig:37 -#, fuzzy msgid "Delete the view (DROP)" -msgstr "ไม่มีฐานข้อมูล" +msgstr "ลบวิว (DROP)" #: templates/table/page_with_secondary_tabs.twig:11 #, fuzzy -- cgit v1.2.3 From 4f9999d706234356cd38dd14ade684817bdabed2 Mon Sep 17 00:00:00 2001 From: Kristijan Fremen Velkovski Date: Mon, 7 Nov 2022 23:57:10 +0000 Subject: Translated using Weblate (Macedonian) Currently translated at 19.5% (669 of 3418 strings) [ci skip] Translation: phpMyAdmin/5.2 Translate-URL: https://hosted.weblate.org/projects/phpmyadmin/5-2/mk/ Signed-off-by: Kristijan Fremen Velkovski --- po/mk.po | 50 ++++++++++++++------------------------------------ 1 file changed, 14 insertions(+), 36 deletions(-) diff --git a/po/mk.po b/po/mk.po index 7c82bd1e84..b749ee0a09 100644 --- a/po/mk.po +++ b/po/mk.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: phpMyAdmin 5.2.1-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2022-09-29 00:17-0300\n" -"PO-Revision-Date: 2022-11-07 12:05+0000\n" +"PO-Revision-Date: 2022-11-09 01:10+0000\n" "Last-Translator: Kristijan Fremen Velkovski \n" "Language-Team: Macedonian \n" @@ -1032,10 +1032,8 @@ msgid "Query cache fragmentation" msgstr "Вид на упит" #: libraries/advisory_rules_mysql_before80003.php:56 -#, fuzzy -#| msgid "The server is not responding" msgid "The query cache is considerably fragmented." -msgstr "Серверот не одговара" +msgstr "Кешот за барања е значително фрагментиран." #: libraries/advisory_rules_mysql_before80003.php:58 msgid "" @@ -5461,10 +5459,8 @@ msgid "Do you really want to remove partitioning?" msgstr "Дали навистина сакате да ги отстраните партициите?" #: libraries/classes/Controllers/JavaScriptMessagesController.php:73 -#, fuzzy -#| msgid "Do you really want to " msgid "Do you really want to reset the replica (RESET REPLICA)?" -msgstr "Дали навистина сакате да " +msgstr "Дали навистина сакате да ја ресетирате репликата (RESET REPLICA)?" #: libraries/classes/Controllers/JavaScriptMessagesController.php:75 msgid "" @@ -5552,9 +5548,8 @@ msgstr "Ажурирање на следниот запис" #. l10n: Rename a table Index #: libraries/classes/Controllers/JavaScriptMessagesController.php:109 -#, fuzzy msgid "Rename index" -msgstr "Промени го името на табелата во " +msgstr "Преименувај го индексот" #: libraries/classes/Controllers/JavaScriptMessagesController.php:110 #: templates/table/index_form.twig:237 @@ -6684,10 +6679,8 @@ msgstr "Примарниот клуч %s е додаден." #: libraries/classes/Controllers/JavaScriptMessagesController.php:411 #: libraries/classes/Normalization.php:282 -#, fuzzy -#| msgid "Change" msgid "Taking you to next step…" -msgstr "Промени" +msgstr "Кон следниот чекор…" #: libraries/classes/Controllers/JavaScriptMessagesController.php:412 #, php-format @@ -7359,10 +7352,8 @@ msgid "Execute this query again?" msgstr "Прикажи го повторно овој упит" #: libraries/classes/Controllers/JavaScriptMessagesController.php:654 -#, fuzzy -#| msgid "Do you really want to " msgid "Do you really want to delete this bookmark?" -msgstr "Дали навистина сакате да " +msgstr "Дали навистина сакате да ја избришете ознаката?" #: libraries/classes/Controllers/JavaScriptMessagesController.php:655 msgid "Some error occurred while getting SQL debug info." @@ -7515,10 +7506,8 @@ msgstr "" #: libraries/classes/Controllers/NormalizationController.php:40 #: libraries/classes/Normalization.php:245 -#, fuzzy -#| msgid "Add/Delete Field Columns" msgid "Select one…" -msgstr "Додади/избриши колона" +msgstr "Изберете еден…" #: libraries/classes/Controllers/NormalizationController.php:41 #: libraries/classes/Normalization.php:246 @@ -11467,10 +11456,8 @@ msgid "" msgstr "" #: libraries/classes/Plugins/Import/ImportLdi.php:62 -#, fuzzy -#| msgid "Column names" msgid "Column names: " -msgstr "Имиња на колони" +msgstr "Имиња на колони: " #: libraries/classes/Plugins/Import/ImportLdi.php:106 msgid "This plugin does not support compressed imports!" @@ -14612,9 +14599,8 @@ msgstr "во упитот" #: templates/database/designer/main.twig:495 #: templates/database/designer/main.twig:711 -#, fuzzy msgid "Rename to" -msgstr "Промени го името на табелата во " +msgstr "Преименувајте во" #: templates/database/designer/main.twig:501 #: templates/database/designer/main.twig:719 @@ -15471,10 +15457,8 @@ msgstr "Додади AUTO_INCREMENT вредност" #: templates/table/delete/confirm.twig:12 #: templates/table/structure/drop_confirm.twig:6 #: templates/table/structure/primary.twig:6 -#, fuzzy -#| msgid "Do you really want to " msgid "Do you really want to execute the following query?" -msgstr "Дали навистина сакате да " +msgstr "Дали навистина сакате да егзекутурате следното барање?" #: templates/database/structure/favorite_anchor.twig:4 #: templates/recent_favorite_table_favorite.twig:6 @@ -16406,9 +16390,8 @@ msgstr "Операции" #: templates/indexes.twig:39 #: templates/table/structure/display_structure.twig:489 -#, fuzzy msgid "Rename" -msgstr "Промени го името на табелата во " +msgstr "Преименувај" #: templates/indexes.twig:45 #: templates/table/structure/display_structure.twig:495 @@ -17052,10 +17035,8 @@ msgid "phpMyAdmin configuration storage" msgstr "phpMyAdmin документација" #: templates/relation/check_relations.twig:9 -#, fuzzy -#| msgid "Modifications have been saved" msgid "Configuration of pmadb…" -msgstr "Измените се сочувани" +msgstr "Конфигурација на pmadb…" #: templates/relation/check_relations.twig:10 #: templates/relation/check_relations.twig:56 @@ -17248,10 +17229,8 @@ msgid "Managing central list of columns:" msgstr "" #: templates/relation/check_relations.twig:483 -#, fuzzy -#| msgid "Rename table to" msgid "Remembering designer settings:" -msgstr "Промени го името на табелата во " +msgstr "Запомни подесувања за дизајн:" #: templates/relation/check_relations.twig:508 #, fuzzy @@ -19285,9 +19264,8 @@ msgid "Check referential integrity" msgstr "Провери го референцијалниот интегритет:" #: templates/table/operations/view.twig:12 -#, fuzzy msgid "Rename view to" -msgstr "Промени го името на табелата во " +msgstr "Преименувај го погледот во" #: templates/table/operations/view.twig:37 #, fuzzy -- cgit v1.2.3 From 970dbd6d446eb80a875e585d5ce31f971f6cd74c Mon Sep 17 00:00:00 2001 From: William Desportes Date: Mon, 7 Nov 2022 10:30:45 +0100 Subject: Fix Original theme login form label width Signed-off-by: William Desportes --- themes/original/scss/_common.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/themes/original/scss/_common.scss b/themes/original/scss/_common.scss index 7b1339fb0d..14591e7f35 100644 --- a/themes/original/scss/_common.scss +++ b/themes/original/scss/_common.scss @@ -423,7 +423,6 @@ div#modalOverlay { } #login_form label { - width: 10em; font-weight: bolder; } -- cgit v1.2.3 From ed00df955f79b3047cf1a906161b0de55f799903 Mon Sep 17 00:00:00 2001 From: William Desportes Date: Sat, 12 Nov 2022 14:02:59 +0100 Subject: Fix #17705 - remove hiding the scroll bars because large and long SQL queries can not be scrolled Ref: bff74dc588895c58a409af222e9d8911f4620fd7 Signed-off-by: William Desportes --- themes/bootstrap/scss/_codemirror.scss | 4 +++- themes/metro/scss/_codemirror.scss | 4 +++- themes/pmahomme/scss/_codemirror.scss | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/themes/bootstrap/scss/_codemirror.scss b/themes/bootstrap/scss/_codemirror.scss index aca7b8b6f0..b5a25f3352 100644 --- a/themes/bootstrap/scss/_codemirror.scss +++ b/themes/bootstrap/scss/_codemirror.scss @@ -7,12 +7,14 @@ $textarea-rows: 15; border: $card-border-width solid $card-border-color; @include border-radius($card-border-radius); +} +// Code mirror default style (do not affect the console style) +.CodeMirror.cm-s-default { // @see: issue #17705 div.CodeMirror-scroll { margin-right: 0; padding-bottom: 0; - overflow: hidden !important; } } diff --git a/themes/metro/scss/_codemirror.scss b/themes/metro/scss/_codemirror.scss index bf2968629d..b2f6af9c1b 100644 --- a/themes/metro/scss/_codemirror.scss +++ b/themes/metro/scss/_codemirror.scss @@ -8,12 +8,14 @@ $textarea-rows: 15 !default; height: 20rem; border: 1px solid #ccc; direction: ltr; +} +// Code mirror default style (do not affect the console style) +.CodeMirror.cm-s-default { // @see: issue #17705 div.CodeMirror-scroll { margin-right: 0; padding-bottom: 0; - overflow: hidden !important; } } diff --git a/themes/pmahomme/scss/_codemirror.scss b/themes/pmahomme/scss/_codemirror.scss index 20da936870..0caa7da603 100644 --- a/themes/pmahomme/scss/_codemirror.scss +++ b/themes/pmahomme/scss/_codemirror.scss @@ -4,12 +4,14 @@ $textarea-rows: 15; .CodeMirror { height: 20rem; direction: ltr; +} +// Code mirror default style (do not affect the console style) +.CodeMirror.cm-s-default { // @see: issue #17705 div.CodeMirror-scroll { margin-right: 0; padding-bottom: 0; - overflow: hidden !important; } } -- cgit v1.2.3 From e04744632331b1da6f4eefb7020b3269e8c96244 Mon Sep 17 00:00:00 2001 From: William Desportes Date: Sat, 12 Nov 2022 14:16:12 +0100 Subject: Add a comment to help code search about cm-s-pma Signed-off-by: William Desportes --- js/src/console.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/js/src/console.js b/js/src/console.js index 1b1acd4e48..f410328547 100644 --- a/js/src/console.js +++ b/js/src/console.js @@ -544,6 +544,7 @@ var ConsoleInput = { if (ConsoleInput.codeMirror) { // eslint-disable-next-line new-cap ConsoleInput.inputs.console = CodeMirror($('#pma_console').find('.console_query_input')[0], { + // style: cm-s-pma theme: 'pma', mode: 'text/x-sql', lineWrapping: true, @@ -562,6 +563,7 @@ var ConsoleInput = { if ($('#pma_bookmarks').length !== 0) { // eslint-disable-next-line new-cap ConsoleInput.inputs.bookmark = CodeMirror($('#pma_console').find('.bookmark_add_input')[0], { + // style: cm-s-pma theme: 'pma', mode: 'text/x-sql', lineWrapping: true, -- cgit v1.2.3 From 551509f345aef2fa7eb3209b822239113bd7df80 Mon Sep 17 00:00:00 2001 From: William Desportes Date: Sat, 12 Nov 2022 13:53:14 +0100 Subject: Fix Original theme buttons Signed-off-by: William Desportes --- themes/original/scss/_common.scss | 25 ++++++++++++++++++++++++- themes/original/scss/_variables.scss | 5 +++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/themes/original/scss/_common.scss b/themes/original/scss/_common.scss index 14591e7f35..da40b9ad20 100644 --- a/themes/original/scss/_common.scss +++ b/themes/original/scss/_common.scss @@ -1774,9 +1774,32 @@ input#auto_increment_opt { } } -input.btn { +input.btn, +button.btn { + border-color: $btn-border-color; color: #333; background-color: #d0dce0; + + &:hover, + &:focus, + &:active { + background-color: #8b9aa0; + border-color: $btn-border-color; + } +} + +button.jsPrintButton { + background-color: unset; + border-color: unset; + border: unset; + + &:hover, + &:focus, + &:active { + background-color: unset; + border-color: unset; + border: unset; + } } body .ui-widget { diff --git a/themes/original/scss/_variables.scss b/themes/original/scss/_variables.scss index 95770053d5..d0fda46140 100644 --- a/themes/original/scss/_variables.scss +++ b/themes/original/scss/_variables.scss @@ -55,6 +55,7 @@ $bg-two: #d5d5d5; $body-bg: #f5f5f5; $body-color: $main-color; +$primary: $navi-pointer-background; // Links @@ -63,6 +64,10 @@ $link-decoration: none; $link-hover-color: #f00; $link-hover-decoration: underline; +// Buttons + +$btn-border-color: black; + // Components $border-radius: 0; -- cgit v1.2.3 From 663e7a0e678a1330c9c406ccc8c26269aee6b01a Mon Sep 17 00:00:00 2001 From: William Desportes Date: Sat, 12 Nov 2022 14:19:23 +0100 Subject: Add ChangeLog entries for 970dbd6d44 and 551509f345 Ref: 970dbd6d446eb80a875e585d5ce31f971f6cd74c Ref: 551509f345aef2fa7eb3209b822239113bd7df80 Signed-off-by: William Desportes --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index f893156af6..f177984b5f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -57,6 +57,7 @@ phpMyAdmin - ChangeLog - issue #16042 Exported gzip file of database has first ~73 kB uncompressed and rest is gzip compressed in Firefox - issue #17705 Fix inline SQL query edit FK checkbox preventing submit buttons from working - issue #17777 Fix Uncaught TypeError: Cannot read properties of null (reading 'inline') on datepickers when re-opened +- issue Fix Original theme buttons style and login form width 5.2.0 (2022-05-10) - issue #16521 Upgrade Bootstrap to version 5 -- cgit v1.2.3