From e183e22d2f2e814d7101cb2231c59d184f5873de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Tue, 18 Apr 2023 20:21:48 -0300 Subject: [PATCH] Fix unknown property errors reported by TypeScript MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: MaurĂ­cio Meneghini Fauth --- js/global.d.ts | 2 ++ js/src/chart.ts | 1 + js/src/database/events.ts | 4 +++ js/src/database/routines.ts | 8 +++++- js/src/database/structure.ts | 16 +++++++----- js/src/database/triggers.ts | 5 ++++ js/src/drag_drop_import.ts | 1 + js/src/error_report.ts | 6 +++-- js/src/export.ts | 10 ++++---- js/src/import.ts | 8 +++--- js/src/makegrid.ts | 38 +++++++++++++++++----------- js/src/modules/console.ts | 33 ++++++++++++++---------- js/src/modules/functions.ts | 19 +++++++++++--- js/src/normalization.ts | 6 +++++ js/src/replication.ts | 4 +-- js/src/server/privileges.ts | 4 +-- js/src/server/status/monitor.ts | 42 +++++++++++++++++++------------ js/src/server/status/processes.ts | 2 +- js/src/server/status/variables.ts | 10 ++++---- js/src/server/user_groups.ts | 4 ++- js/src/sql.ts | 25 +++++++++++++++--- js/src/table/change.ts | 19 ++++++++------ js/src/table/chart.ts | 9 ++++--- js/src/table/operations.ts | 2 +- js/src/table/relation.ts | 14 +++++++---- js/src/table/select.ts | 16 ++++++------ js/src/table/zoom_plot_jqplot.ts | 2 ++ js/src/webauthn.ts | 12 ++++----- webpack.config.cjs | 2 -- 29 files changed, 210 insertions(+), 114 deletions(-) diff --git a/js/global.d.ts b/js/global.d.ts index 54bf9f4a37..393390ead5 100644 --- a/js/global.d.ts +++ b/js/global.d.ts @@ -14,7 +14,9 @@ interface Window { opera: any; zxcvbnts: any; msCrypto: any; + u2f: any; drawOpenLayers: () => any; + variableNames: string[]; } interface JQuery { diff --git a/js/src/chart.ts b/js/src/chart.ts index 8ce6ade3b8..8db9f138f0 100644 --- a/js/src/chart.ts +++ b/js/src/chart.ts @@ -248,6 +248,7 @@ JQPlotChart.prototype.redraw = function (options) { JQPlotChart.prototype.toImageString = function () { if (this.plot !== null) { + // @ts-ignore return $('#' + this.elementId).jqplotToImageStr({}); } }; diff --git a/js/src/database/events.ts b/js/src/database/events.ts index d1d9f9abdd..4e8e195f1c 100644 --- a/js/src/database/events.ts +++ b/js/src/database/events.ts @@ -191,6 +191,7 @@ const DatabaseEvents = { }; // Now define the function that is called when // the user presses the "Go" button + // @ts-ignore buttonOptions[window.Messages.strGo].click = function () { // Move the data from the codemirror editor back to the // textarea, where it can be used in the form submission. @@ -319,6 +320,7 @@ const DatabaseEvents = { } // end "if (that.validate())" }; // end of function that handles the submission of the Editor + // @ts-ignore buttonOptions[window.Messages.strClose].click = function () { $(this).dialog('close'); }; @@ -353,6 +355,7 @@ const DatabaseEvents = { Functions.addDatepicker($(this).css('width', '95%'), 'datetime'); }); + // @ts-ignore $.datepicker.initialized = false; }, close: function () { @@ -587,6 +590,7 @@ AJAX.registerOnload('database/events.js', function () { event.preventDefault(); if ($(this).hasClass('add_anchor')) { + // @ts-ignore $.datepicker.initialized = false; } diff --git a/js/src/database/routines.ts b/js/src/database/routines.ts index 5faab611f2..1f62eb5f4b 100644 --- a/js/src/database/routines.ts +++ b/js/src/database/routines.ts @@ -203,6 +203,7 @@ const DatabaseRoutines = { ajaxRemoveMessage($msg); // Now define the function that is called when // the user presses the "Go" button + // @ts-ignore buttonOptions[window.Messages.strGo].click = function () { // Move the data from the codemirror editor back to the // textarea, where it can be used in the form submission. @@ -335,6 +336,7 @@ const DatabaseRoutines = { }); // end $.post() }; // end of function that handles the submission of the Editor + // @ts-ignore buttonOptions[window.Messages.strClose].click = function () { $(this).dialog('close'); }; @@ -368,6 +370,7 @@ const DatabaseRoutines = { Functions.addDatepicker($(this).css('width', '95%'), 'datetime'); }); + // @ts-ignore $.datepicker.initialized = false; }, close: function () { @@ -686,7 +689,7 @@ const DatabaseRoutines = { var $inputtyp = $(this).find('select[name^=item_param_type]'); var $inputlen = $(this).find('input[name^=item_param_length]'); if ($inputtyp.length && $inputlen.length) { - if (($inputtyp.val() === 'ENUM' || $inputtyp.val() === 'SET' || $inputtyp.val().startsWith('VAR')) && + if (($inputtyp.val() === 'ENUM' || $inputtyp.val() === 'SET' || ($inputtyp.val() as string).startsWith('VAR')) && $inputlen.val() === '' ) { $inputlen.trigger('focus'); @@ -858,6 +861,7 @@ const DatabaseRoutines = { }; // Define the function that is called when // the user presses the "Go" button + // @ts-ignore buttonOptions[window.Messages.strGo].click = function () { /** * @var data Form data to be sent in the AJAX request @@ -879,6 +883,7 @@ const DatabaseRoutines = { }); }; + // @ts-ignore buttonOptions[window.Messages.strClose].click = function () { $(this).dialog('close'); }; @@ -945,6 +950,7 @@ const DatabaseRoutines = { AJAX.registerOnload('database/routines.js', function () { $(document).on('click', 'a.ajax.add_anchor', function (event) { event.preventDefault(); + // @ts-ignore $.datepicker.initialized = false; DatabaseRoutines.editorDialog(true, $(this)); }); diff --git a/js/src/database/structure.ts b/js/src/database/structure.ts index f350fe3339..3ecbfa63d9 100644 --- a/js/src/database/structure.ts +++ b/js/src/database/structure.ts @@ -15,9 +15,6 @@ import { escapeHtml } from '../modules/functions/escape.ts'; * @requires jQueryUI */ -var DatabaseStructure = {}; -window.DatabaseStructure = DatabaseStructure; - /** * AJAX scripts for /database/structure * @@ -45,7 +42,7 @@ AJAX.registerTeardown('database/structure.js', function () { * Adjust number of rows and total size in the summary * when truncating, creating, dropping or inserting into a table */ -DatabaseStructure.adjustTotals = function () { +const adjustTotals = function () { var byteUnits = [ window.Messages.strB, window.Messages.strKiB, @@ -160,7 +157,7 @@ DatabaseStructure.adjustTotals = function () { * Gets the real row count for a table or DB. * @param {object} $target Target for appending the real count value. */ -DatabaseStructure.fetchRealRowCount = function ($target) { +const fetchRealRowCount = function ($target) { var $throbber = $('#pma_navigation').find('.throbber') .first() .clone() @@ -272,7 +269,7 @@ AJAX.registerOnload('database/structure.js', function () { }).done(function (modalBody) { const bulkActionModal = $('#bulkActionModal'); bulkActionModal.on('show.bs.modal', function () { - this.querySelector('.modal-title').innerText = modalTitle; + (this.querySelector('.modal-title') as HTMLHeadingElement).innerText = modalTitle; this.querySelector('.modal-body').innerHTML = modalBody; }); @@ -460,8 +457,15 @@ AJAX.registerOnload('database/structure.js', function () { }); }); +const DatabaseStructure = { + adjustTotals: adjustTotals, + fetchRealRowCount: fetchRealRowCount, +}; + declare global { interface Window { DatabaseStructure: typeof DatabaseStructure; } } + +window.DatabaseStructure = DatabaseStructure; diff --git a/js/src/database/triggers.ts b/js/src/database/triggers.ts index 8238a85e9e..70e5d597a5 100644 --- a/js/src/database/triggers.ts +++ b/js/src/database/triggers.ts @@ -131,6 +131,7 @@ const DatabaseTriggers = { class: 'btn btn-primary', }, }; + // @ts-ignore buttonOptions[window.Messages.strClose].click = function () { $(this).dialog('close').remove(); }; @@ -197,6 +198,7 @@ const DatabaseTriggers = { ajaxRemoveMessage($msg); // Now define the function that is called when // the user presses the "Go" button + // @ts-ignore buttonOptions[window.Messages.strGo].click = function () { // Move the data from the codemirror editor back to the // textarea, where it can be used in the form submission. @@ -327,6 +329,7 @@ const DatabaseTriggers = { }); // end $.post() }; // end of function that handles the submission of the Editor + // @ts-ignore buttonOptions[window.Messages.strClose].click = function () { $(this).dialog('close'); }; @@ -360,6 +363,7 @@ const DatabaseTriggers = { Functions.addDatepicker($(this).css('width', '95%'), 'datetime'); }); + // @ts-ignore $.datepicker.initialized = false; }, close: function () { @@ -561,6 +565,7 @@ AJAX.registerOnload('database/triggers.js', function () { event.preventDefault(); if ($(this).hasClass('add_anchor')) { + // @ts-ignore $.datepicker.initialized = false; } diff --git a/js/src/drag_drop_import.ts b/js/src/drag_drop_import.ts index 8db1bf1375..3c0801294d 100644 --- a/js/src/drag_drop_import.ts +++ b/js/src/drag_drop_import.ts @@ -78,6 +78,7 @@ var DragDropImport = { if (xhrobj.upload) { xhrobj.upload.addEventListener('progress', function (event) { var percent = 0; + // @ts-ignore var position = event.loaded || event.position; var total = event.total; if (event.lengthComputable) { diff --git a/js/src/error_report.ts b/js/src/error_report.ts index 9a428b9c61..856fb752e7 100644 --- a/js/src/error_report.ts +++ b/js/src/error_report.ts @@ -96,7 +96,7 @@ var ErrorReport = { const postData = $.extend(reportData, { 'send_error_report': true, 'description': $('#errorReportDescription').val(), - 'always_send': $('#errorReportAlwaysSendCheckbox')[0].checked + 'always_send': ($('#errorReportAlwaysSendCheckbox') as JQuery)[0].checked }); $.post('index.php?route=/error-report', postData, function (data) { if (data.success === false) { @@ -228,7 +228,7 @@ var ErrorReport = { } } - var reportData = { + var reportData: { exception: any; server: any; ajax_request: boolean; exception_type: string; url: string, scripts?: any[] } = { 'server': CommonParams.get('server'), 'ajax_request': true, 'exception': exception, @@ -262,9 +262,11 @@ var ErrorReport = { } }; + // @ts-ignore newFunc.wrapped = true; // Set guid of wrapped function same as original function, so it can be removed // See bug#4146 (problem with jquery draggable and sortable) + // @ts-ignore newFunc.guid = func.guid = func.guid || newFunc.guid || $.guid++; return newFunc; diff --git a/js/src/export.ts b/js/src/export.ts index 32b2c5074d..2e39333011 100644 --- a/js/src/export.ts +++ b/js/src/export.ts @@ -66,7 +66,7 @@ function getTemplateData () { // include unchecked checkboxes (which are ignored by serializeArray()) with null // to uncheck them when loading the template - $form.find('input[type="checkbox"]:not(:checked)').each(function () { + ($form.find('input[type="checkbox"]:not(:checked)') as JQuery).each(function () { if (obj[this.name] === undefined) { obj[this.name] = null; } @@ -266,7 +266,7 @@ AJAX.registerOnload('export.js', function () { // create a new template $('input[name="createTemplate"]').on('click', function (e) { e.preventDefault(); - var name = $('input[name="templateName"]').val(); + var name = ($('input[name="templateName"]').val() as string); if (name.length) { Export.createTemplate(name); } @@ -275,7 +275,7 @@ AJAX.registerOnload('export.js', function () { // load an existing template $('select[name="template"]').on('change', function (e) { e.preventDefault(); - var id = $(this).val(); + var id = ($(this).val() as string); if (id.length) { Export.loadTemplate(id); } @@ -284,7 +284,7 @@ AJAX.registerOnload('export.js', function () { // update an existing template with new criteria $('input[name="updateTemplate"]').on('click', function (e) { e.preventDefault(); - var id = $('select[name="template"]').val(); + var id = ($('select[name="template"]').val() as string); if (id.length) { Export.updateTemplate(id); } @@ -293,7 +293,7 @@ AJAX.registerOnload('export.js', function () { // delete an existing template $('input[name="deleteTemplate"]').on('click', function (e) { e.preventDefault(); - var id = $('select[name="template"]').val(); + var id = ($('select[name="template"]').val() as string); if (id.length) { Export.deleteTemplate(id); } diff --git a/js/src/import.ts b/js/src/import.ts index 39816bcf71..0a8f74aa9f 100644 --- a/js/src/import.ts +++ b/js/src/import.ts @@ -111,7 +111,7 @@ AJAX.registerOnload('import.js', function () { } if ($('#text_csv_new_tbl_name').length > 0) { - var newTblName = $('#text_csv_new_tbl_name').val(); + var newTblName = ($('#text_csv_new_tbl_name').val() as string); if (newTblName.length > 0 && newTblName.trim().length === 0) { ajaxShowMessage(wrongTblNameMsg, false); @@ -120,7 +120,7 @@ AJAX.registerOnload('import.js', function () { } if ($('#text_csv_new_db_name').length > 0) { - var newDBName = $('#text_csv_new_db_name').val(); + var newDBName = ($('#text_csv_new_db_name').val() as string); if (newDBName.length > 0 && newDBName.trim().length === 0) { ajaxShowMessage(wrongDBNameMsg, false); @@ -165,8 +165,8 @@ AJAX.registerOnload('import.js', function () { * if first character is escape then allow two including escape character. */ $('#text_csv_enclosed').add('#text_csv_escaped').on('keyup', function () { - if ($(this).val().length === 2 && $(this).val().charAt(0) !== '\\') { - $(this).val($(this).val().substring(0, 1)); + if (($(this).val() as string).length === 2 && ($(this).val() as string).charAt(0) !== '\\') { + $(this).val(($(this).val() as string).substring(0, 1)); return false; } diff --git a/js/src/makegrid.ts b/js/src/makegrid.ts index 12151eaaf7..d46722069b 100644 --- a/js/src/makegrid.ts +++ b/js/src/makegrid.ts @@ -22,13 +22,13 @@ import { escapeHtml } from './modules/functions/escape.ts'; * @param enableVisib Optional, if false, show/hide column feature will be disabled * @param enableGridEdit Optional, if false, grid editing feature will be disabled */ -window.makeGrid = function (t, enableResize, enableReorder, enableVisib, enableGridEdit) { +const makeGrid = function (t, enableResize = undefined, enableReorder = undefined, enableVisib = undefined, enableGridEdit = undefined) { var isResizeEnabled = enableResize === undefined ? true : enableResize; var isReorderEnabled = enableReorder === undefined ? true : enableReorder; var isVisibEnabled = enableVisib === undefined ? true : enableVisib; var isGridEditEnabled = enableGridEdit === undefined ? true : enableGridEdit; - var g = { + var g: { [p: string]: any } = { /** ********* * Constant ***********/ @@ -800,8 +800,8 @@ window.makeGrid = function (t, enableResize, enableReorder, enableVisib, enableG // destroy datepicker in edit area, if exist var $dp = $(g.cEdit).find('.hasDatepicker'); if ($dp.length > 0) { - // eslint-disable-next-line no-underscore-dangle - $(document).on('mousedown', $.datepicker._checkExternalClick); + // @ts-ignore + $(document).on('mousedown', $.datepicker._checkExternalClick); // eslint-disable-line no-underscore-dangle $dp.datepicker('refresh'); // change the cursor in edit box back to normal @@ -1058,7 +1058,7 @@ window.makeGrid = function (t, enableResize, enableReorder, enableVisib, enableG $editArea.removeClass('edit_area_loading'); $editArea.append(data.select); - $td.data('original_data', $(data.select).val().join()); + $td.data('original_data', ($(data.select).val() as string[]).join()); $editArea.append('
' + g.cellEditHint + '
'); }); // end $.post() @@ -1122,7 +1122,7 @@ window.makeGrid = function (t, enableResize, enableReorder, enableVisib, enableG var $inputField = $(g.cEdit).find('.edit_box'); // remember current datetime value in $input_field, if it is not null - var datetimeValue = ! isNull ? $inputField.val() : ''; + var datetimeValue = ! isNull ? ($inputField.val() as string) : ''; var showMillisec = false; var showMicrosec = false; @@ -1180,8 +1180,8 @@ window.makeGrid = function (t, enableResize, enableReorder, enableVisib, enableG // unbind the mousedown event to prevent the problem of // datepicker getting closed, needs to be checked for any // change in names when updating - // eslint-disable-next-line no-underscore-dangle - $(document).off('mousedown', $.datepicker._checkExternalClick); + // @ts-ignore + $(document).off('mousedown', $.datepicker._checkExternalClick); // eslint-disable-line no-underscore-dangle // move ui-datepicker-div inside cEdit div var datepickerDiv = $('#ui-datepicker-div'); @@ -1272,7 +1272,7 @@ window.makeGrid = function (t, enableResize, enableReorder, enableVisib, enableG // loop each edited row $(g.t).find('td.to_be_saved').parents('tr').each(function () { var $tr = $(this); - var whereClause = $tr.find('.where_clause').val(); + var whereClause = ($tr.find('.where_clause').val() as string); if (typeof whereClause === 'undefined') { whereClause = ''; } @@ -1462,7 +1462,7 @@ window.makeGrid = function (t, enableResize, enableReorder, enableVisib, enableG $(this).find('input[type=checkbox]').each(function () { var $checkbox = $(this); var checkboxName = $checkbox.attr('name'); - var checkboxValue = $checkbox.val(); + var checkboxValue = ($checkbox.val() as string); $checkbox.attr('name', checkboxName.replace(oldClause, newClause)); $checkbox.val(checkboxValue.replace(decodedOldClause, decodedNewClause)); @@ -1529,7 +1529,7 @@ window.makeGrid = function (t, enableResize, enableReorder, enableVisib, enableG * @var $thisField Object referring to the td that is being edited */ var $thisField = $(g.currentEditCell); - var $testElement = ''; // to test the presence of a element + var $testElement = null; // to test the presence of a element var needToPost = false; @@ -1561,7 +1561,7 @@ window.makeGrid = function (t, enableResize, enableReorder, enableVisib, enableG if ($thisField.is('.bit')) { thisFieldParams[fieldName] = $(g.cEdit).find('.edit_box').val(); } else if ($thisField.is('.set')) { - $testElement = $(g.cEdit).find('select'); + $testElement = ($(g.cEdit).find('select') as JQuery); thisFieldParams[fieldName] = $testElement.map(function () { return $(this).val(); }).get().join(','); @@ -1571,7 +1571,7 @@ window.makeGrid = function (t, enableResize, enableReorder, enableVisib, enableG // selection list will always be updated to the edit box thisFieldParams[fieldName] = $(g.cEdit).find('.edit_box').val(); } else if ($thisField.hasClass('hex')) { - if ($(g.cEdit).find('.edit_box').val().match(/^(0x)?[a-f0-9]*$/i) !== null) { + if (($(g.cEdit).find('.edit_box').val() as string).match(/^(0x)?[a-f0-9]*$/i) !== null) { thisFieldParams[fieldName] = $(g.cEdit).find('.edit_box').val(); } else { var hexError = ''; @@ -1716,7 +1716,7 @@ window.makeGrid = function (t, enableResize, enableReorder, enableVisib, enableG var $colOrder = $(g.o).find('.col_order'); // check if column order is passed from PHP var i; if ($colOrder.length > 0) { - g.colOrder = $colOrder.val().split(','); + g.colOrder = ($colOrder.val() as string).split(','); for (i = 0; i < g.colOrder.length; i++) { g.colOrder[i] = parseInt(g.colOrder[i], 10); } @@ -1805,7 +1805,7 @@ window.makeGrid = function (t, enableResize, enableReorder, enableVisib, enableG // initialize column visibility var $colVisib = $(g.o).find('.col_visib'); // check if column visibility is passed from PHP if ($colVisib.length > 0) { - g.colVisib = $colVisib.val().split(','); + g.colVisib = ($colVisib.val() as string).split(','); for (i = 0; i < g.colVisib.length; i++) { g.colVisib[i] = parseInt(g.colVisib[i], 10); } @@ -2392,6 +2392,14 @@ window.makeGrid = function (t, enableResize, enableReorder, enableVisib, enableG $(g.gDiv).addClass('data'); }; +declare global { + interface Window { + makeGrid: typeof makeGrid; + } +} + +window.makeGrid = makeGrid; + /** * jQuery plugin to cancel selection in HTML code. */ diff --git a/js/src/modules/console.ts b/js/src/modules/console.ts index ee045a90a7..df1764a512 100644 --- a/js/src/modules/console.ts +++ b/js/src/modules/console.ts @@ -103,23 +103,23 @@ var Console = { if (Console.isInitialized === false) { // Load config first if (Config.AlwaysExpand) { - document.getElementById('consoleOptionsAlwaysExpandCheckbox').checked = true; + (document.getElementById('consoleOptionsAlwaysExpandCheckbox') as HTMLInputElement).checked = true; } if (Config.StartHistory) { - document.getElementById('consoleOptionsStartHistoryCheckbox').checked = true; + (document.getElementById('consoleOptionsStartHistoryCheckbox') as HTMLInputElement).checked = true; } if (Config.CurrentQuery) { - document.getElementById('consoleOptionsCurrentQueryCheckbox').checked = true; + (document.getElementById('consoleOptionsCurrentQueryCheckbox') as HTMLInputElement).checked = true; } if (Config.EnterExecutes) { - document.getElementById('consoleOptionsEnterExecutesCheckbox').checked = true; + (document.getElementById('consoleOptionsEnterExecutesCheckbox') as HTMLInputElement).checked = true; } if (Config.DarkTheme) { - document.getElementById('consoleOptionsDarkThemeCheckbox').checked = true; + (document.getElementById('consoleOptionsDarkThemeCheckbox') as HTMLInputElement).checked = true; $('#pma_console').find('>.content').addClass('console_dark_theme'); } @@ -179,11 +179,11 @@ var Console = { }); $('#pma_console_options').find('.button.default').on('click', function () { - document.getElementById('consoleOptionsAlwaysExpandCheckbox').checked = false; - document.getElementById('consoleOptionsStartHistoryCheckbox').checked = false; - document.getElementById('consoleOptionsCurrentQueryCheckbox').checked = true; - document.getElementById('consoleOptionsEnterExecutesCheckbox').checked = false; - document.getElementById('consoleOptionsDarkThemeCheckbox').checked = false; + (document.getElementById('consoleOptionsAlwaysExpandCheckbox') as HTMLInputElement).checked = false; + (document.getElementById('consoleOptionsStartHistoryCheckbox') as HTMLInputElement).checked = false; + (document.getElementById('consoleOptionsCurrentQueryCheckbox') as HTMLInputElement).checked = true; + (document.getElementById('consoleOptionsEnterExecutesCheckbox') as HTMLInputElement).checked = false; + (document.getElementById('consoleOptionsDarkThemeCheckbox') as HTMLInputElement).checked = false; Config.update(); }); @@ -267,6 +267,7 @@ var Console = { } Console.$requestForm.children('[name=console_message_id]') + // @ts-ignore .val(ConsoleMessages.appendQuery({ 'sql_query': queryString }).message_id); Console.$requestForm.trigger('submit'); @@ -280,6 +281,7 @@ var Console = { } else if (data && data.reloadQuerywindow) { if (data.reloadQuerywindow.sql_query.length > 0) { ConsoleMessages.appendQuery(data.reloadQuerywindow, 'successed') + // @ts-ignore .$message.addClass(Config.CurrentQuery ? '' : 'hide'); } } @@ -518,6 +520,7 @@ var ConsoleInput = { hintOptions: { 'completeSingle': false, 'completeOnSingleClick': true }, gutters: ['CodeMirror-lint-markers'], lint: { + // @ts-ignore 'getAnnotations': CodeMirror.sqlLint, 'async': true, } @@ -539,6 +542,7 @@ var ConsoleInput = { hintOptions: { 'completeSingle': false, 'completeOnSingleClick': true }, gutters: ['CodeMirror-lint-markers'], lint: { + // @ts-ignore 'getAnnotations': CodeMirror.sqlLint, 'async': true, } @@ -810,6 +814,7 @@ var ConsoleMessages = { case 'query': $newMessage.append('
'); if (ConsoleInput.codeMirror) { + // @ts-ignore CodeMirror.runMode(msgString, 'text/x-sql', $newMessage.children('.query')[0]); } else { @@ -994,6 +999,7 @@ var ConsoleMessages = { if (ConsoleInput.codeMirror) { $targetMessage.find('.query:not(.highlighted)').each(function (index, elem) { + // @ts-ignore CodeMirror.runMode($(elem).text(), 'text/x-sql', elem); @@ -1026,6 +1032,7 @@ var ConsoleMessages = { } if (ConsoleInput.codeMirror) { + // @ts-ignore CodeMirror.runMode(queryData.sql_query, 'text/x-sql', $targetMessage.children('.query')[0]); } else { $targetMessage.children('.query').text(queryData.sql_query); @@ -1111,7 +1118,7 @@ var ConsoleBookmarks = { }); $('#pma_bookmarks').find('.card.add [name=submit]').on('click', function () { - if ($('#pma_bookmarks').find('.card.add [name=label]').val().length === 0 + if (($('#pma_bookmarks').find('.card.add [name=label]').val() as string).length === 0 || ConsoleInput.getText('bookmark').length === 0) { alert(window.Messages.strFormEmpty); @@ -1418,7 +1425,7 @@ var ConsoleDebug = { $('#debug_console').find('.debugLog').empty(); $('#debug_console').find('.debug>.welcome').empty(); - var debugJson = false; + var debugJson: any = false; var i; if (typeof debugInfo === 'object' && 'queries' in debugInfo) { // Copy it to debugJson, so that it doesn't get changed @@ -1451,7 +1458,7 @@ var ConsoleDebug = { } var allQueries = debugJson.queries; - var uniqueQueries = {}; + var uniqueQueries = []; var totalExec = allQueries.length; diff --git a/js/src/modules/functions.ts b/js/src/modules/functions.ts index b59e7ef1a5..422dc98833 100644 --- a/js/src/modules/functions.ts +++ b/js/src/modules/functions.ts @@ -34,7 +34,7 @@ let sqlAutoCompleteInProgress = false; * Object containing list of columns in each table. * @type {(any[]|boolean)} */ -let sqlAutoComplete = false; +let sqlAutoComplete: boolean | any[] = false; /** * String containing default table to autocomplete columns. @@ -232,10 +232,12 @@ function getSqlEditor ($textarea, options = undefined, resize = undefined, lintO lineWrapping: true }; + // @ts-ignore if (window.CodeMirror.sqlLint) { $.extend(defaults, { gutters: ['CodeMirror-lint-markers'], lint: { + // @ts-ignore 'getAnnotations': window.CodeMirror.sqlLint, 'async': true, 'lintOptions': lintOptions @@ -276,7 +278,9 @@ function getSqlEditor ($textarea, options = undefined, resize = undefined, lintO * Clear text selection */ function clearSelection () { + // @ts-ignore if (document.selection && document.selection.empty) { + // @ts-ignore document.selection.empty(); } else if (window.getSelection) { var sel = window.getSelection(); @@ -456,7 +460,7 @@ function displayPasswordGenerateButton () { pwdCell.append('
'); - var pwdButton = $('') + var pwdButton = ($('') as JQuery) .attr({ type: 'button', id: 'button_generate_password', value: window.Messages.strGenerate }) .addClass('btn btn-secondary button') .on('click', function () { @@ -1092,7 +1096,7 @@ function onloadSqlQueryEditEvents () { } var $form = $(this).prev('form'); - var sqlQuery = $form.find('input[name=\'sql_query\']').val().trim(); + var sqlQuery = ($form.find('input[name=\'sql_query\']').val() as string).trim(); var $innerSql = $(this).parent().prev().find('code.sql'); var newContent = '\n'; @@ -1216,6 +1220,7 @@ function codeMirrorAutoCompleteOnInputRead (instance) { displayText += ' | Unique'; } + // @ts-ignore table.columns.push({ text: column, displayText: column + ' | ' + displayText, @@ -1256,6 +1261,7 @@ function codeMirrorAutoCompleteOnInputRead (instance) { } if (string.length > 0) { + // @ts-ignore window.CodeMirror.commands.autocomplete(instance); } } @@ -1337,6 +1343,7 @@ function updateCode ($base, htmlValue, rawValue) { // Tries to highlight code using CodeMirror. if (typeof window.CodeMirror !== 'undefined') { var $highlighted = $('
'); + // @ts-ignore window.CodeMirror.runMode(rawValue, mode, $highlighted[0]); $notHighlighted.hide(); $code.html('').append($notHighlighted, $highlighted[0]); @@ -1800,15 +1807,18 @@ function sortTable (textSelector) { // get the text of the field that we will sort by $.each(rows, function (index, row) { + // @ts-ignore row.sortKey = $(row).find(textSelector).text().toLowerCase().trim(); }); // get the sorted order rows.sort(function (a, b) { + // @ts-ignore if (a.sortKey < b.sortKey) { return -1; } + // @ts-ignore if (a.sortKey > b.sortKey) { return 1; } @@ -1819,6 +1829,7 @@ function sortTable (textSelector) { // pull out each row from the table and then append it according to it's order $.each(rows, function (index, row) { $(tableBody).append(row); + // @ts-ignore row.sortKey = null; }); }); @@ -2908,7 +2919,7 @@ function showIndexEditDialog ($outer) { * omit this parameter the function searches * in the whole body **/ -function showHints ($div = undefined) { +function showHints ($div: JQuery | undefined = undefined) { var $newDiv = $div; if ($newDiv === undefined || ! ($newDiv instanceof $) || $newDiv.length === 0) { $newDiv = $('body'); diff --git a/js/src/normalization.ts b/js/src/normalization.ts index e506b14513..d856bcbb62 100644 --- a/js/src/normalization.ts +++ b/js/src/normalization.ts @@ -160,6 +160,12 @@ function goToStep4 () { ); } +declare global { + interface Window { + goToStep4: typeof goToStep4; + } +} + window.goToStep4 = goToStep4; function goToStep3 () { diff --git a/js/src/replication.ts b/js/src/replication.ts index 46d75b3d25..d203ff0d95 100644 --- a/js/src/replication.ts +++ b/js/src/replication.ts @@ -107,11 +107,11 @@ AJAX.registerOnload('replication.js', function () { }); }); - $('#button_generate_password').on('click', function () { + ($('#button_generate_password') as JQuery).on('click', function () { Functions.suggestPassword(this.form); }); - $('#nopass_1').on('click', function () { + ($('#nopass_1') as JQuery).on('click', function () { this.form.pma_pw.value = ''; this.form.pma_pw2.value = ''; this.checked = true; diff --git a/js/src/server/privileges.ts b/js/src/server/privileges.ts index db751006c8..668845714a 100644 --- a/js/src/server/privileges.ts +++ b/js/src/server/privileges.ts @@ -256,7 +256,7 @@ const RevokeUser = { // Remove the revoked user from the users list $form.find('input:checkbox:checked').parents('tr').slideUp('medium', function () { - var thisUserInitial = $(this).find('input:checkbox').val().charAt(0).toUpperCase(); + var thisUserInitial = ($(this).find('input:checkbox').val() as string).charAt(0).toUpperCase(); $(this).remove(); // If this is the last user with thisUserInitial, remove the link from #userAccountsPagination @@ -437,7 +437,7 @@ const SelectAllPrivileges = { handleEvent: function (event) { const method = event.target.getAttribute('data-select-target'); var options = $(method).first().children(); - options.each(function (_, obj) { + options.each(function (_, obj: HTMLOptionElement) { obj.selected = true; }); } diff --git a/js/src/server/status/monitor.ts b/js/src/server/status/monitor.ts index 34be468e31..2097960fe1 100644 --- a/js/src/server/status/monitor.ts +++ b/js/src/server/status/monitor.ts @@ -15,7 +15,7 @@ import isStorageSupported from '../../modules/functions/isStorageSupported.ts'; * @requires jQueryUI */ -var runtime = {}; +var runtime: { [k: string]: any } = {}; var serverTimeDiff; var serverOs; var isSuperUser; @@ -236,7 +236,7 @@ AJAX.registerOnload('server/status/monitor.js', function () { var editMode = false; /* List of preconfigured charts that the user may select */ - var presetCharts = { + var presetCharts: { [p: string]: any } = { // Query cache efficiency 'qce': { title: window.Messages.strQueryCacheEfficiency, @@ -433,7 +433,7 @@ AJAX.registerOnload('server/status/monitor.js', function () { } // Default setting for the chart grid - var defaultChartGrid = { + var defaultChartGrid: { [p: string]: any } = { 'c0': { title: window.Messages.strQuestions, series: [{ label: window.Messages.strQuestions }], @@ -512,7 +512,7 @@ AJAX.registerOnload('server/status/monitor.js', function () { }); // global settings - $('div.popupContent select[name="chartColumns"]').on('change', function () { + ($('div.popupContent select[name="chartColumns"]') as JQuery).on('change', function () { monitorSettings.columns = parseInt(this.value, 10); calculateChartSize(); @@ -578,7 +578,7 @@ AJAX.registerOnload('server/status/monitor.js', function () { saveMonitor(); // Save settings }); - $('div.popupContent select[name="gridChartRefresh"]').on('change', function () { + ($('div.popupContent select[name="gridChartRefresh"]') as JQuery).on('change', function () { monitorSettings.gridRefresh = parseInt(this.value, 10) * 1000; clearTimeout(runtime.refreshTimeout); @@ -691,7 +691,9 @@ AJAX.registerOnload('server/status/monitor.js', function () { var blob = new Blob([JSON.stringify(exportData)], { type: 'application/octet-stream' }); var url = null; var fileName = 'monitor-config.json'; + // @ts-ignore if (window.navigator && window.navigator.msSaveOrOpenBlob) { + // @ts-ignore window.navigator.msSaveOrOpenBlob(blob, fileName); } else { url = URL.createObjectURL(blob); @@ -732,8 +734,9 @@ AJAX.registerOnload('server/status/monitor.js', function () { }, }; + // @ts-ignore dlgBtns[window.Messages.strImport].click = function () { - var input = $('#emptyDialog').find('#import_file')[0]; + var input = ($('#emptyDialog').find('#import_file') as JQuery)[0]; var reader = new FileReader(); reader.onerror = function (event) { @@ -788,6 +791,7 @@ AJAX.registerOnload('server/status/monitor.js', function () { } }; + // @ts-ignore dlgBtns[window.Messages.strCancel].click = function () { $(this).dialog('close'); }; @@ -985,7 +989,7 @@ AJAX.registerOnload('server/status/monitor.js', function () { return false; }); - $('input[name="chartType"]').on('change', function () { + ($('input[name="chartType"]') as JQuery).on('change', function () { $('#chartVariableSettings').toggle(this.checked && this.value === 'variable'); var title = $('input[name="chartTitle"]').val(); if (title === window.Messages.strChartTitle || @@ -997,15 +1001,15 @@ AJAX.registerOnload('server/status/monitor.js', function () { } }); - $('input[name="useDivisor"]').on('change', function () { + ($('input[name="useDivisor"]') as JQuery).on('change', function () { $('span.divisorInput').toggle(this.checked); }); - $('input[name="useUnit"]').on('change', function () { + ($('input[name="useUnit"]') as JQuery).on('change', function () { $('span.unitInput').toggle(this.checked); }); - $('select[name="varChartList"]').on('change', function () { + ($('select[name="varChartList"]') as JQuery).on('change', function () { if (this.selectedIndex !== 0) { $('#variableInput').val(this.value); } @@ -1055,7 +1059,7 @@ AJAX.registerOnload('server/status/monitor.js', function () { }; } - var serie = { + var serie: { [p: string]: any } = { dataPoints: [{ type: 'statusvar', name: $('#variableInput').val() }], display: $('input[name="differentialValue"]').prop('checked') ? 'differential' : '' }; @@ -1077,7 +1081,7 @@ AJAX.registerOnload('server/status/monitor.js', function () { str += serie.unit ? (', ' + window.Messages.strUnit + ': ' + serie.unit) : ''; var newSeries = { - label: $('#variableInput').val().replace(/_/g, ' ') + label: ($('#variableInput').val() as string).replace(/_/g, ' ') }; newChart.series.push(newSeries); $('#seriesPreview').append('- ' + escapeHtml(newSeries.label + str) + '
'); @@ -1088,7 +1092,7 @@ AJAX.registerOnload('server/status/monitor.js', function () { $('input[name="useUnit"]').prop('checked', false); $('input[name="useDivisor"]').trigger('change'); $('input[name="useUnit"]').trigger('change'); - $('select[name="varChartList"]').get(0).selectedIndex = 0; + ($('select[name="varChartList"]') as JQuery).get(0).selectedIndex = 0; $('#clearSeriesLink').show(); @@ -1250,7 +1254,7 @@ AJAX.registerOnload('server/status/monitor.js', function () { /* Adds a chart to the chart grid */ function addChart (chartObj, initialize = undefined) { var i; - var settings = { + var settings: { [p: string]: any } = { title: escapeHtml(chartObj.title), grid: { drawBorder: false, @@ -1524,11 +1528,13 @@ AJAX.registerOnload('server/status/monitor.js', function () { }, }; + // @ts-ignore dlgBtns[window.Messages.strFromSlowLog].click = function () { loadLog('slow', min, max); $(this).dialog('close'); }; + // @ts-ignore dlgBtns[window.Messages.strFromGeneralLog].click = function () { loadLog('general', min, max); $(this).dialog('close'); @@ -1829,6 +1835,7 @@ AJAX.registerOnload('server/status/monitor.js', function () { }, }; + // @ts-ignore dlgBtns[window.Messages.strCancelRequest].click = function () { if (logRequest !== null) { logRequest.abort(); @@ -1885,6 +1892,7 @@ AJAX.registerOnload('server/status/monitor.js', function () { $('#emptyDialog').html('

' + window.Messages.strNoDataFound + '

'); + // @ts-ignore dlgBtns[window.Messages.strClose].click = function () { $(this).dialog('close'); }; @@ -1905,7 +1913,7 @@ AJAX.registerOnload('server/status/monitor.js', function () { }); $('#emptyDialog').html('

' + window.Messages.strLogDataLoaded + '

'); - $.each(logData.sum, function (key, value) { + $.each(logData.sum, function (key: string, value) { var newKey = key.charAt(0).toUpperCase() + key.slice(1).toLowerCase(); if (newKey === 'Total') { newKey = '' + newKey + ''; @@ -1965,7 +1973,7 @@ AJAX.registerOnload('server/status/monitor.js', function () { */ function filterQueries (varFilterChange) { var textFilter; - var val = $('#filterQueryText').val(); + var val = ($('#filterQueryText').val() as string); if (val.length === 0) { textFilter = null; @@ -2251,10 +2259,12 @@ AJAX.registerOnload('server/status/monitor.js', function () { }, }; + // @ts-ignore dlgBtns[window.Messages.strAnalyzeQuery].click = function () { profilingChart = loadQueryAnalysis(rowData); }; + // @ts-ignore dlgBtns[window.Messages.strClose].click = function () { $(this).dialog('close'); }; diff --git a/js/src/server/status/processes.ts b/js/src/server/status/processes.ts index 309b7a01ba..31b0a28226 100644 --- a/js/src/server/status/processes.ts +++ b/js/src/server/status/processes.ts @@ -148,7 +148,7 @@ var processList = { * @return {object} urlParams - url parameters with autoRefresh request */ getUrlParams: function () { - var urlParams = { + var urlParams: { [k: string]: any } = { 'server': CommonParams.get('server'), 'ajax_request': true, 'refresh': true, diff --git a/js/src/server/status/variables.ts b/js/src/server/status/variables.ts index eb1efa3386..f542fc75b3 100644 --- a/js/src/server/status/variables.ts +++ b/js/src/server/status/variables.ts @@ -21,21 +21,21 @@ AJAX.registerOnload('server/status/variables.js', function () { // Filters for status variables var textFilter = null; var alertFilter = $('#filterAlert').prop('checked'); - var categoryFilter = $('#filterCategory').find(':selected').val(); + var categoryFilter = ($('#filterCategory').find(':selected').val() as string); var text = ''; // Holds filter text /* 3 Filtering functions */ - $('#filterAlert').on('change', function () { + ($('#filterAlert') as JQuery).on('change', function () { alertFilter = this.checked; filterVariables(); }); $('#filterCategory').on('change', function () { - categoryFilter = $(this).val(); + categoryFilter = ($(this).val() as string); filterVariables(); }); - $('#dontFormat').on('change', function () { + ($('#dontFormat') as JQuery).on('change', function () { // Hiding the table while changing values speeds up the process a lot const serverStatusVariables = $('#serverStatusVariables'); serverStatusVariables.hide(); @@ -45,7 +45,7 @@ AJAX.registerOnload('server/status/variables.js', function () { }).trigger('change'); $('#filterText').on('keyup', function () { - var word = $(this).val().replace(/_/g, ' '); + var word = ($(this).val() as string).replace(/_/g, ' '); if (word.length === 0 || word.length >= 32768) { textFilter = null; } else { diff --git a/js/src/server/user_groups.ts b/js/src/server/user_groups.ts index 050c88d4e7..dbb5a65cba 100644 --- a/js/src/server/user_groups.ts +++ b/js/src/server/user_groups.ts @@ -22,14 +22,16 @@ AJAX.registerTeardown('server/user_groups.js', function () { AJAX.registerOnload('server/user_groups.js', function () { const deleteUserGroupModal = $('#deleteUserGroupModal'); deleteUserGroupModal.on('show.bs.modal', function (event) { + // @ts-ignore const userGroupName = $(event.relatedTarget).data('user-group'); - this.querySelector('.modal-body').innerText = window.sprintf( + (this.querySelector('.modal-body') as HTMLDivElement).innerText = window.sprintf( window.Messages.strDropUserGroupWarning, escapeHtml(userGroupName) ); }); deleteUserGroupModal.on('shown.bs.modal', function (event) { + // @ts-ignore const userGroupName = $(event.relatedTarget).data('user-group'); $('#deleteUserGroupConfirm').on('click', function () { $.post( diff --git a/js/src/sql.ts b/js/src/sql.ts index 8bb27cfee1..c62b37c1e2 100644 --- a/js/src/sql.ts +++ b/js/src/sql.ts @@ -98,7 +98,9 @@ function setShowThisQuery () { if (db === storedDb && table === storedTable) { if (window.codeMirrorEditor) { window.codeMirrorEditor.setValue(storedQuery); + // @ts-ignore } else if (document.sqlform) { + // @ts-ignore document.sqlform.sql_query.value = storedQuery; } } @@ -246,8 +248,11 @@ const setQuery = function (query): void { if (window.codeMirrorEditor) { window.codeMirrorEditor.setValue(query); window.codeMirrorEditor.focus(); + // @ts-ignore } else if (document.sqlform) { + // @ts-ignore document.sqlform.sql_query.value = query; + // @ts-ignore document.sqlform.sql_query.focus(); } }; @@ -317,7 +322,9 @@ const insertQuery = function (queryType) { } var query = ''; + // @ts-ignore var myListBox = document.sqlform.dummy; + // @ts-ignore table = document.sqlform.table.value; if (myListBox.options.length > 0) { @@ -361,7 +368,9 @@ const insertQuery = function (queryType) { * */ const insertValueQuery = function () { + // @ts-ignore var myQuery = document.sqlform.sql_query; + // @ts-ignore var myListBox = document.sqlform.dummy; if (myListBox.options.length > 0) { @@ -384,14 +393,20 @@ const insertValueQuery = function () { window.codeMirrorEditor.replaceSelection(columnsList); window.codeMirrorEditor.focus(); // IE support + // @ts-ignore } else if (document.selection) { myQuery.focus(); + // @ts-ignore var sel = document.selection.createRange(); sel.text = columnsList; // MOZILLA/NETSCAPE support + // @ts-ignore } else if (document.sqlform.sql_query.selectionStart || document.sqlform.sql_query.selectionStart === '0') { + // @ts-ignore var startPos = document.sqlform.sql_query.selectionStart; + // @ts-ignore var endPos = document.sqlform.sql_query.selectionEnd; + // @ts-ignore var SqlString = document.sqlform.sql_query.value; myQuery.value = SqlString.substring(0, startPos) + columnsList + SqlString.substring(endPos, SqlString.length); @@ -461,6 +476,7 @@ AJAX.registerTeardown('sql.js', function () { * @memberOf jQuery */ AJAX.registerOnload('sql.js', function () { + // @ts-ignore if (window.codeMirrorEditor || document.sqlform) { Sql.setShowThisQuery(); } @@ -544,7 +560,7 @@ AJAX.registerOnload('sql.js', function () { $('input#bkm_label').on('input', function () { $('input#id_bkm_all_users, input#id_bkm_replace') .parent() - .toggle($(this).val().length > 0); + .toggle(($(this).val() as string).length > 0); }).trigger('input'); /** @@ -954,7 +970,7 @@ AJAX.registerOnload('sql.js', function () { e.preventDefault(); var $form = $(this).parents('form'); - Sql.submitShowAllForm = function () { + const submitShowAllForm = function () { var argsep = CommonParams.get('arg_separator'); var submitData = $form.serialize() + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true'; ajaxShowMessage(); @@ -963,10 +979,10 @@ AJAX.registerOnload('sql.js', function () { }; if (! $(this).is(':checked')) { // already showing all rows - Sql.submitShowAllForm(); + submitShowAllForm(); } else { $form.confirm(window.Messages.strShowAllRowsWarning, $form.attr('action'), function () { - Sql.submitShowAllForm(); + submitShowAllForm(); }); } }); @@ -1299,6 +1315,7 @@ AJAX.registerOnload('sql.js', function () { /** * Check if there is any saved query */ + // @ts-ignore if (window.codeMirrorEditor || document.sqlform) { Sql.checkSavedQuery(); } diff --git a/js/src/table/change.ts b/js/src/table/change.ts index de98b4eef0..21e066c6da 100644 --- a/js/src/table/change.ts +++ b/js/src/table/change.ts @@ -19,6 +19,7 @@ import { Functions } from '../modules/functions.ts'; * @return {boolean} always true */ function nullify (theType, urlField, md5Field, multiEdit) { + // @ts-ignore var rowForm = document.forms.insertForm; if (typeof (rowForm.elements['funcs' + multiEdit + '[' + md5Field + ']']) !== 'undefined') { @@ -173,7 +174,7 @@ function verifyAfterSearchFieldChange (index, searchFormId) { if ($thisInput.data('type') === 'INT' || $thisInput.data('type') === 'TINYINT') { // Trim spaces if it's an integer - $thisInput.val($thisInput.val().trim()); + $thisInput.val(($thisInput.val() as string).trim()); var hasMultiple = $thisInput.prop('multiple'); @@ -209,7 +210,7 @@ function verifyAfterSearchFieldChange (index, searchFormId) { $thisInput.valid(); } else if ($thisInput.data('type') === 'FLOAT') { // Trim spaces - $thisInput.val($thisInput.val().trim()); + $thisInput.val(($thisInput.val() as string).trim()); $(searchFormId).validate({ // update errors as we write @@ -306,15 +307,15 @@ function validateFloatField (jqueryInput, returnValueIfIsNumber): void { function verificationsAfterFieldChange (urlField, multiEdit, theType) { var evt = window.event || arguments.callee.caller.arguments[0]; var target = evt.target || evt.srcElement; - var $thisInput = $(':input[name^=\'fields[multi_edit][' + multiEdit + '][' + - urlField + ']\']'); + var $thisInput = ($(':input[name^=\'fields[multi_edit][' + multiEdit + '][' + + urlField + ']\']') as JQuery); // the function drop-down that corresponds to this input field - var $thisFunction = $('select[name=\'funcs[multi_edit][' + multiEdit + '][' + - urlField + ']\']'); + var $thisFunction = ($('select[name=\'funcs[multi_edit][' + multiEdit + '][' + + urlField + ']\']') as JQuery); var functionSelected = false; if (typeof $thisFunction.val() !== 'undefined' && $thisFunction.val() !== null && - $thisFunction.val().length > 0 + ($thisFunction.val() as string).length > 0 ) { functionSelected = true; } @@ -549,6 +550,7 @@ AJAX.registerOnload('table/change.js', function () { */ window.extendingValidatorMessages(); + // @ts-ignore $.datepicker.initialized = false; $(document).on('click', 'span.open_gis_editor', function (event) { @@ -899,7 +901,7 @@ function addNewContinueInsertionFields (event) { currRows--; } } else { - document.getElementById('insert_rows').value = currRows; + (document.getElementById('insert_rows') as HTMLInputElement).value = currRows; } } @@ -909,6 +911,7 @@ function addNewContinueInsertionFields (event) { function changeValueFieldType (elem, searchIndex) { var fieldsValue = $('input#fieldID_' + searchIndex); + // @ts-ignore if (0 === fieldsValue.size()) { return; } diff --git a/js/src/table/chart.ts b/js/src/table/chart.ts index e8a4b1f478..8cc1da8025 100644 --- a/js/src/table/chart.ts +++ b/js/src/table/chart.ts @@ -380,9 +380,10 @@ AJAX.registerOnload('table/chart.js', function () { }); // handler for ajax form submission - $('#tblchartform').on('submit', function () { - var $form = $(this); + ($('#tblchartform') as JQuery).on('submit', function () { + var $form = ($(this) as JQuery); if (window.codeMirrorEditor) { + // @ts-ignore $form[0].elements.sql_query.value = window.codeMirrorEditor.getValue(); } @@ -428,12 +429,12 @@ AJAX.registerOnload('table/chart.js', function () { seriesColumn: null }; - var vals = $('input[name="dateTimeCols"]').val().split(' '); + var vals = ($('input[name="dateTimeCols"]').val() as string).split(' '); $.each(vals, function (i, v) { dateTimeCols.push(parseInt(v, 10)); }); - vals = $('input[name="numericCols"]').val().split(' '); + vals = ($('input[name="numericCols"]').val() as string).split(' '); $.each(vals, function (i, v) { numericCols.push(parseInt(v, 10)); }); diff --git a/js/src/table/operations.ts b/js/src/table/operations.ts index a136cd8153..1e24e635b8 100644 --- a/js/src/table/operations.ts +++ b/js/src/table/operations.ts @@ -143,7 +143,7 @@ AJAX.registerOnload('table/operations.js', function () { event.preventDefault(); event.stopPropagation(); var $form = $(this); - var $tblNameField = $form.find('input[name=new_name]'); + var $tblNameField = ($form.find('input[name=new_name]') as JQuery); var $tblCollationField = $form.find('select[name=tbl_collation]'); var collationOrigValue = $('select[name="tbl_collation"] option[selected]').val(); var $changeAllColumnCollationsCheckBox = $('#checkbox_change_all_collations'); diff --git a/js/src/table/relation.ts b/js/src/table/relation.ts index 8f0e75f59b..eb906ce62e 100644 --- a/js/src/table/relation.ts +++ b/js/src/table/relation.ts @@ -10,9 +10,7 @@ import refreshMainContent from '../modules/functions/refreshMainContent.ts'; * for table relation */ -var TableRelation = {}; - -TableRelation.showHideClauses = function ($thisDropdown) { +const showHideClauses = function ($thisDropdown) { if ($thisDropdown.val() === '') { $thisDropdown.parent().nextAll('span').hide(); } else { @@ -28,7 +26,7 @@ TableRelation.showHideClauses = function ($thisDropdown) { * @param values * @param selectedValue */ -TableRelation.setDropdownValues = function ($dropdown, values, selectedValue): void { +const setDropdownValues = function ($dropdown, values, selectedValue = undefined): void { $dropdown.empty(); var optionsAsString = ''; // add an empty string to the beginning for empty selection @@ -45,7 +43,7 @@ TableRelation.setDropdownValues = function ($dropdown, values, selectedValue): v * * @param $dropdown the dropdown whose value got changed */ -TableRelation.getDropdownValues = function ($dropdown): void { +const getDropdownValues = function ($dropdown): void { var foreignDb = null; var foreignTable = null; var $databaseDd; @@ -135,6 +133,12 @@ TableRelation.getDropdownValues = function ($dropdown): void { }); }; +const TableRelation = { + showHideClauses: showHideClauses, + setDropdownValues: setDropdownValues, + getDropdownValues: getDropdownValues, +}; + /** * Unbind all event handlers before tearing down a page */ diff --git a/js/src/table/select.ts b/js/src/table/select.ts index c278a8ce35..3858bc5308 100644 --- a/js/src/table/select.ts +++ b/js/src/table/select.ts @@ -9,8 +9,6 @@ import { ajaxRemoveMessage, ajaxShowMessage } from '../modules/ajax-message.ts'; * @fileoverview JavaScript functions used on /table/search */ -var TableSelect = {}; - /** * Checks if given data-type is numeric or date. * @@ -18,7 +16,7 @@ var TableSelect = {}; * * @return {boolean | string} */ -TableSelect.checkIfDataTypeNumericOrDate = function (dataType) { +const checkIfDataTypeNumericOrDate = function (dataType) { // To test for numeric data-types. var numericRegExp = new RegExp( 'TINYINT|SMALLINT|MEDIUMINT|INT|BIGINT|DECIMAL|FLOAT|DOUBLE|REAL', @@ -43,6 +41,10 @@ TableSelect.checkIfDataTypeNumericOrDate = function (dataType) { return false; }; +const TableSelect = { + checkIfDataTypeNumericOrDate: checkIfDataTypeNumericOrDate, +}; + /** * Unbind all event handlers before tearing down a page */ @@ -115,8 +117,8 @@ AJAX.registerOnload('table/select.js', function () { Functions.prepareForAjaxRequest($searchForm); - var values = {}; - $searchForm.find(':input').each(function () { + var values: { [k: string]: any } = {}; + ($searchForm.find(':input') as JQuery).each(function () { var $input = $(this); if ($input.attr('type') === 'checkbox' || $input.attr('type') === 'radio') { if ($input.is(':checked')) { @@ -340,8 +342,8 @@ AJAX.registerOnload('table/select.js', function () { Functions.addDatepicker($('#min_value'), dataType); Functions.addDatepicker($('#max_value'), dataType); $('#rangeSearchModalGo').on('click', function () { - var minValue = $('#min_value').val(); - var maxValue = $('#max_value').val(); + var minValue = ($('#min_value').val() as string); + var maxValue = ($('#max_value').val() as string); var finalValue = ''; if (minValue.length && maxValue.length) { finalValue = minValue + ', ' + diff --git a/js/src/table/zoom_plot_jqplot.ts b/js/src/table/zoom_plot_jqplot.ts index 0156a0c491..ea1b5c226e 100644 --- a/js/src/table/zoom_plot_jqplot.ts +++ b/js/src/table/zoom_plot_jqplot.ts @@ -76,8 +76,10 @@ function getTimeStamp (val, type) { if (type.toString().search(/datetime/i) !== -1 || type.toString().search(/timestamp/i) !== -1 ) { + // @ts-ignore return $.datepicker.parseDateTime('yy-mm-dd', 'HH:mm:ss', val); } else if (type.toString().search(/time/i) !== -1) { + // @ts-ignore return $.datepicker.parseDateTime('yy-mm-dd', 'HH:mm:ss', '1970-01-01 ' + val); } else if (type.toString().search(/date/i) !== -1) { return $.datepicker.parseDate('yy-mm-dd', val); diff --git a/js/src/webauthn.ts b/js/src/webauthn.ts index 2b1235a546..b33ca4089d 100644 --- a/js/src/webauthn.ts +++ b/js/src/webauthn.ts @@ -52,14 +52,14 @@ const handleCreation = ($input): void => { // eslint-disable-next-line compat/compat navigator.credentials.create({ publicKey: publicKey }) - .then((credential) => { + .then((credential: PublicKeyCredential) => { const credentialJson = JSON.stringify({ id: credential.id, rawId: arrayBufferToBase64(credential.rawId), type: credential.type, response: { clientDataJSON: arrayBufferToBase64(credential.response.clientDataJSON), - attestationObject: arrayBufferToBase64(credential.response.attestationObject), + attestationObject: arrayBufferToBase64((credential.response as AuthenticatorAttestationResponse).attestationObject), } }); $input.val(credentialJson); @@ -93,16 +93,16 @@ const handleRequest = ($input): void => { // eslint-disable-next-line compat/compat navigator.credentials.get({ publicKey: publicKey }) - .then((credential) => { + .then((credential: PublicKeyCredential) => { const credentialJson = JSON.stringify({ id: credential.id, rawId: arrayBufferToBase64(credential.rawId), type: credential.type, response: { - authenticatorData: arrayBufferToBase64(credential.response.authenticatorData), + authenticatorData: arrayBufferToBase64((credential.response as AuthenticatorAssertionResponse).authenticatorData), clientDataJSON: arrayBufferToBase64(credential.response.clientDataJSON), - signature: arrayBufferToBase64(credential.response.signature), - userHandle: arrayBufferToBase64(credential.response.userHandle), + signature: arrayBufferToBase64((credential.response as AuthenticatorAssertionResponse).signature), + userHandle: arrayBufferToBase64((credential.response as AuthenticatorAssertionResponse).userHandle), } }); $input.val(credentialJson); diff --git a/webpack.config.cjs b/webpack.config.cjs index d189595b55..fdabf6a0b6 100644 --- a/webpack.config.cjs +++ b/webpack.config.cjs @@ -11,7 +11,6 @@ const publicPath = path.resolve(__dirname, 'public'); const typeScriptErrorsToIgnore = [ 2322, // TS2322: Type '%s' is not assignable to type '%s'. - 2339, // TS2339: Property '%s' does not exist on type '%s'. 2345, // TS2345: Argument of type '%s' is not assignable to parameter of type '%s'. 2362, // TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. 2363, // TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. @@ -20,7 +19,6 @@ const typeScriptErrorsToIgnore = [ 2405, // TS2405: The left-hand side of a 'for...in' statement must be of type 'string' or 'any'. 2469, // TS2469: The '+' operator cannot be applied to type 'symbol'. 2538, // TS2538: Type '%s' cannot be used as an index type. - 2551, // TS2551: Property '%s' does not exist on type '%s'. Did you mean '%s'? 2769, // TS2769: No overload matches this call. 5096, // TS5096: Option 'allowImportingTsExtensions' can only be used when either 'noEmit' or 'emitDeclarationOnly' is set. ];