diff --git a/src/addons/filter/mathjaxloader/services/handlers/mathjaxloader.ts b/src/addons/filter/mathjaxloader/services/handlers/mathjaxloader.ts index 2f9ae9056..40f83f4ba 100644 --- a/src/addons/filter/mathjaxloader/services/handlers/mathjaxloader.ts +++ b/src/addons/filter/mathjaxloader/services/handlers/mathjaxloader.ts @@ -190,7 +190,7 @@ export class AddonFilterMathJaxLoaderHandlerService extends CoreFilterDefaultHan protected insertSpan(text: string, start: number, end: number): string { return CoreTextUtils.substrReplace( text, - '' + text.substr(start, end - start + 1) + '', + '' + text.substring(start, end - start + 1) + '', start, end - start + 1, ); @@ -265,7 +265,7 @@ export class AddonFilterMathJaxLoaderHandlerService extends CoreFilterDefaultHan */ protected fixUseUrls(node: Element): void { Array.from(node.querySelectorAll('use')).forEach((useElem) => { - useElem.setAttribute('href', useElem.href.baseVal.substr(useElem.href.baseVal.indexOf('#'))); + useElem.setAttribute('href', useElem.href.baseVal.substring(useElem.href.baseVal.indexOf('#'))); }); } diff --git a/src/addons/mod/chat/services/chat-helper.ts b/src/addons/mod/chat/services/chat-helper.ts index fa5764f8a..d6f827fe4 100644 --- a/src/addons/mod/chat/services/chat-helper.ts +++ b/src/addons/mod/chat/services/chat-helper.ts @@ -53,14 +53,14 @@ export class AddonModChatHelperProvider { formattedMessage.message = formattedMessage.message.trim(); formattedMessage.showDate = this.showDate(message, prevMessage); - formattedMessage.beep = (message.message.substr(0, 5) == 'beep ' && message.message.substr(5).trim()) || undefined; + formattedMessage.beep = (message.message.substring(0, 5) == 'beep ' && message.message.substring(5).trim()) || undefined; formattedMessage.special = !!formattedMessage.beep || ( message).issystem || ( message).system; - if (formattedMessage.message.substr(0, 4) == '/me ') { + if (formattedMessage.message.substring(0, 4) == '/me ') { formattedMessage.special = true; - formattedMessage.message = formattedMessage.message.substr(4).trim(); + formattedMessage.message = formattedMessage.message.substring(4).trim(); } if (!formattedMessage.special && formattedMessage.message.match(patternTo)) { diff --git a/src/addons/mod/data/fields/date/services/handler.ts b/src/addons/mod/data/fields/date/services/handler.ts index 454b91d25..221611f66 100644 --- a/src/addons/mod/data/fields/date/services/handler.ts +++ b/src/addons/mod/data/fields/date/services/handler.ts @@ -52,7 +52,7 @@ export class AddonModDataFieldDateHandlerService implements AddonModDataFieldHan const enabledName = 'f_' + field.id + '_z'; if (inputData[enabledName] && typeof inputData[fieldName] == 'string') { - const date = inputData[fieldName].substr(0, 10).split('-'); + const date = inputData[fieldName].substring(0, 10).split('-'); return [ { @@ -87,7 +87,7 @@ export class AddonModDataFieldDateHandlerService implements AddonModDataFieldHan return []; } - const date = inputData[fieldName].substr(0, 10).split('-'); + const date = inputData[fieldName].substring(0, 10).split('-'); return [ { @@ -117,10 +117,10 @@ export class AddonModDataFieldDateHandlerService implements AddonModDataFieldHan originalFieldData: AddonModDataEntryField, ): boolean { const fieldName = 'f_' + field.id; - const input = inputData[fieldName] && inputData[fieldName].substr(0, 10) || ''; + const input = inputData[fieldName] && inputData[fieldName].substring(0, 10) || ''; const content = (originalFieldData && originalFieldData?.content && - CoreTimeUtils.toDatetimeFormat(parseInt(originalFieldData.content, 10) * 1000).substr(0, 10)) || ''; + CoreTimeUtils.toDatetimeFormat(parseInt(originalFieldData.content, 10) * 1000).substring(0, 10)) || ''; return input != content; } diff --git a/src/addons/mod/folder/services/folder-helper.ts b/src/addons/mod/folder/services/folder-helper.ts index 677d48fb5..295a0d46e 100644 --- a/src/addons/mod/folder/services/folder-helper.ts +++ b/src/addons/mod/folder/services/folder-helper.ts @@ -53,10 +53,10 @@ export class AddonModFolderHelperProvider { let completePath = ''; // Remove first and last slash if needed. - if (path.substr(0, 1) === '/') { - path = path.substr(1); + if (path.substring(0, 1) === '/') { + path = path.substring(1); } - if (path.substr(path.length - 1) === '/') { + if (path.substring(path.length - 1) === '/') { path = path.slice(0, -1); } diff --git a/src/addons/mod/glossary/components/index/index.ts b/src/addons/mod/glossary/components/index/index.ts index beb7aad9c..7cf42ded3 100644 --- a/src/addons/mod/glossary/components/index/index.ts +++ b/src/addons/mod/glossary/components/index/index.ts @@ -292,7 +292,7 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity // Try to get the first letter without HTML tags. const noTags = CoreTextUtils.cleanTags(entry.concept); - return (noTags || entry.concept).substr(0, 1).toUpperCase(); + return (noTags || entry.concept).substring(0, 1).toUpperCase(); }; this.getDivider = getDivider; diff --git a/src/addons/mod/imscp/services/imscp.ts b/src/addons/mod/imscp/services/imscp.ts index 88cae637e..121577ea3 100644 --- a/src/addons/mod/imscp/services/imscp.ts +++ b/src/addons/mod/imscp/services/imscp.ts @@ -155,7 +155,7 @@ export class AddonModImscpProvider { } const filePath = CoreTextUtils.concatenatePaths(item.filepath, item.filename); - const filePathAlt = filePath.charAt(0) === '/' ? filePath.substr(1) : '/' + filePath; + const filePathAlt = filePath.charAt(0) === '/' ? filePath.substring(1) : '/' + filePath; // Check if it's main file. return filePath === targetFilePath || filePathAlt === targetFilePath; diff --git a/src/addons/mod/lesson/services/lesson.ts b/src/addons/mod/lesson/services/lesson.ts index 5f78849ec..7d1418032 100644 --- a/src/addons/mod/lesson/services/lesson.ts +++ b/src/addons/mod/lesson/services/lesson.ts @@ -760,8 +760,8 @@ export class AddonModLessonProvider { let ignoreCase = ''; if (useRegExp) { - if (expectedAnswer.substr(-2) == '/i') { - expectedAnswer = expectedAnswer.substr(0, expectedAnswer.length - 2); + if (expectedAnswer.substring(-2) == '/i') { + expectedAnswer = expectedAnswer.substring(0, expectedAnswer.length - 2); ignoreCase = 'i'; } } else { @@ -792,12 +792,12 @@ export class AddonModLessonProvider { isMatch = true; } } else { // We are using regular expressions analysis. - const startCode = expectedAnswer.substr(0, 2); + const startCode = expectedAnswer.substring(0, 2); switch (startCode){ // 1- Check for absence of required string in studentAnswer (coded by initial '--'). case '--': - expectedAnswer = expectedAnswer.substr(2); + expectedAnswer = expectedAnswer.substring(2); if (!studentAnswer.match(new RegExp('^' + expectedAnswer + '$', ignoreCase))) { isMatch = true; } @@ -805,7 +805,7 @@ export class AddonModLessonProvider { // 2- Check for code for marking wrong strings (coded by initial '++'). case '++': { - expectedAnswer = expectedAnswer.substr(2); + expectedAnswer = expectedAnswer.substring(2); // Check for one or several matches. const matches = studentAnswer.match(new RegExp(expectedAnswer, 'g' + ignoreCase)); diff --git a/src/addons/mod/page/services/page-helper.ts b/src/addons/mod/page/services/page-helper.ts index a57f37e6e..c993c1bf9 100644 --- a/src/addons/mod/page/services/page-helper.ts +++ b/src/addons/mod/page/services/page-helper.ts @@ -52,7 +52,7 @@ export class AddonModPageHelperProvider { let key = content.filename; if (content.filepath !== '/') { // Add the folders without the leading slash. - key = content.filepath.substr(1) + key; + key = content.filepath.substring(1) + key; } paths[CoreTextUtils.decodeURIComponent(key)] = url; } diff --git a/src/addons/mod/quiz/services/quiz-offline.ts b/src/addons/mod/quiz/services/quiz-offline.ts index 4b96ba247..70c72eab5 100644 --- a/src/addons/mod/quiz/services/quiz-offline.ts +++ b/src/addons/mod/quiz/services/quiz-offline.ts @@ -54,7 +54,7 @@ export class AddonModQuizOfflineProvider { if (!questionsWithAnswers[slot]) { questionsWithAnswers[slot] = { answers: {}, - prefix: name.substr(0, name.indexOf(nameWithoutPrefix)), + prefix: name.substring(0, name.indexOf(nameWithoutPrefix)), }; } questionsWithAnswers[slot].answers[nameWithoutPrefix] = answers[name]; diff --git a/src/addons/mod/resource/services/resource-helper.ts b/src/addons/mod/resource/services/resource-helper.ts index f0975eacf..943bee509 100644 --- a/src/addons/mod/resource/services/resource-helper.ts +++ b/src/addons/mod/resource/services/resource-helper.ts @@ -70,7 +70,7 @@ export class AddonModResourceHelperProvider { let mainFilePath = mainFile.filename; if (mainFile.filepath !== '/') { - mainFilePath = mainFile.filepath.substr(1) + mainFilePath; + mainFilePath = mainFile.filepath.substring(1) + mainFilePath; } try { diff --git a/src/addons/mod/scorm/classes/data-model-12.ts b/src/addons/mod/scorm/classes/data-model-12.ts index 06d29525a..97889bfdb 100644 --- a/src/addons/mod/scorm/classes/data-model-12.ts +++ b/src/addons/mod/scorm/classes/data-model-12.ts @@ -201,7 +201,7 @@ export class AddonModScormDataModel12 { for (const element in this.currentUserData[this.scoId].userdata) { // Ommit for example the nav. elements and the session time element. - if (element.substr(0, 3) != 'cmi' || element == 'cmi.core.session_time') { + if (element.substring(0, 3) != 'cmi' || element == 'cmi.core.session_time') { continue; } @@ -748,16 +748,16 @@ export class AddonModScormDataModel12 { const childrenStr = '._children'; const countStr = '._count'; - if (elementModel.substr(elementModel.length - childrenStr.length, elementModel.length) == childrenStr) { - const parentModel = elementModel.substr(0, elementModel.length - childrenStr.length); + if (elementModel.substring(elementModel.length - childrenStr.length, elementModel.length) == childrenStr) { + const parentModel = elementModel.substring(0, elementModel.length - childrenStr.length); if (this.dataModel[this.scoId][parentModel] !== undefined) { this.errorCode = '202'; } else { this.errorCode = '201'; } - } else if (elementModel.substr(elementModel.length - countStr.length, elementModel.length) == countStr) { - const parentModel = elementModel.substr(0, elementModel.length - countStr.length); + } else if (elementModel.substring(elementModel.length - countStr.length, elementModel.length) == countStr) { + const parentModel = elementModel.substring(0, elementModel.length - countStr.length); if (this.dataModel[this.scoId][parentModel] !== undefined) { this.errorCode = '203'; diff --git a/src/addons/mod/scorm/services/scorm.ts b/src/addons/mod/scorm/services/scorm.ts index 528e68c6a..be1ac928c 100644 --- a/src/addons/mod/scorm/services/scorm.ts +++ b/src/addons/mod/scorm/services/scorm.ts @@ -947,7 +947,7 @@ export class AddonModScormProvider { if (parameters) { const connector = launchUrl.indexOf('?') > -1 ? '&' : '?'; if (parameters.charAt(0) == '?') { - parameters = parameters.substr(1); + parameters = parameters.substring(1); } launchUrl += connector + parameters; @@ -1315,7 +1315,7 @@ export class AddonModScormProvider { if (link.match(/^https?:\/\//i) && !CoreUrlUtils.isLocalFileUrl(link)) { return true; - } else if (link.substr(0, 4) == 'www.') { + } else if (link.substring(0, 4) == 'www.') { return true; } diff --git a/src/addons/mod/url/services/url.ts b/src/addons/mod/url/services/url.ts index 0ccff66ed..86a2ad5bb 100644 --- a/src/addons/mod/url/services/url.ts +++ b/src/addons/mod/url/services/url.ts @@ -68,7 +68,7 @@ export class AddonModUrlProvider { const download = ['application/zip', 'application/x-tar', 'application/g-zip', 'application/pdf', 'text/html']; let mimetype = CoreMimetypeUtils.getMimeType(extension); - if (url.externalurl.indexOf('.php') != -1 || url.externalurl.substr(-1) === '/' || + if (url.externalurl.indexOf('.php') != -1 || url.externalurl.substring(-1) === '/' || (url.externalurl.indexOf('//') != -1 && url.externalurl.match(/\//g)?.length == 2)) { // Seems to be a web, use HTML mimetype. mimetype = 'text/html'; @@ -158,7 +158,7 @@ export class AddonModUrlProvider { const matches = url.match(/\//g); const extension = CoreMimetypeUtils.getFileExtension(url); - if (!matches || matches.length < 3 || url.substr(-1) === '/' || extension == 'php') { + if (!matches || matches.length < 3 || url.substring(-1) === '/' || extension == 'php') { // Use default icon. return ''; } diff --git a/src/addons/qtype/calculated/services/handlers/calculated.ts b/src/addons/qtype/calculated/services/handlers/calculated.ts index cac9c191d..887a5ff24 100644 --- a/src/addons/qtype/calculated/services/handlers/calculated.ts +++ b/src/addons/qtype/calculated/services/handlers/calculated.ts @@ -226,7 +226,7 @@ export class AddonQtypeCalculatedHandlerService implements CoreQuestionHandler { } const numberString = match[0]; - const unit = unitsLeft ? answer.substr(0, answer.length - match[0].length) : answer.substr(match[0].length); + const unit = unitsLeft ? answer.substring(0, answer.length - match[0].length) : answer.substring(match[0].length); // No need to calculate the multiplier. return { answer: Number(numberString), unit }; diff --git a/src/core/classes/interceptor.ts b/src/core/classes/interceptor.ts index 5ddbe7d11..976b52e3e 100644 --- a/src/core/classes/interceptor.ts +++ b/src/core/classes/interceptor.ts @@ -58,7 +58,7 @@ export class CoreInterceptor implements HttpInterceptor { } } - return query.length ? query.substr(0, query.length - 1) : query; + return query.length ? query.substring(0, query.length - 1) : query; } // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/src/core/classes/sqlitedb.ts b/src/core/classes/sqlitedb.ts index c84c52ccd..0aec0714b 100644 --- a/src/core/classes/sqlitedb.ts +++ b/src/core/classes/sqlitedb.ts @@ -600,7 +600,7 @@ export class SQLiteDB { sql = equal ? '= ?' : '<> ?'; params = Array.isArray(items) ? items : [items]; } else { - sql = (equal ? '' : 'NOT ') + 'IN (' + ',?'.repeat(items.length).substr(1) + ')'; + sql = (equal ? '' : 'NOT ') + 'IN (' + ',?'.repeat(items.length).substring(1) + ')'; params = items; } @@ -801,7 +801,7 @@ export class SQLiteDB { const keys = Object.keys(data); const fields = keys.join(','); - const questionMarks = ',?'.repeat(keys.length).substr(1); + const questionMarks = ',?'.repeat(keys.length).substring(1); return { sql: `INSERT OR REPLACE INTO ${table} (${fields}) VALUES (${questionMarks})`, @@ -1139,7 +1139,7 @@ export class SQLiteDB { if (params.length == 1) { sql = sql + field + ' = ?'; } else { - const questionMarks = ',?'.repeat(params.length).substr(1); + const questionMarks = ',?'.repeat(params.length).substring(1); sql = sql + field + ' IN (' + questionMarks + ')'; } } diff --git a/src/core/directives/fa-icon.ts b/src/core/directives/fa-icon.ts index 0cd0a1e63..8a262dd45 100644 --- a/src/core/directives/fa-icon.ts +++ b/src/core/directives/fa-icon.ts @@ -52,16 +52,16 @@ export class CoreFaIconDirective implements AfterViewInit, OnChanges { switch (parts[0]) { case 'far': library = 'regular'; - iconName = iconName.substr(4); + iconName = iconName.substring(4); break; case 'fa': case 'fas': library = 'solid'; - iconName = iconName.substr(parts[0].length + 1); + iconName = iconName.substring(parts[0].length + 1); break; case 'fab': library = 'brands'; - iconName = iconName.substr(4); + iconName = iconName.substring(4); break; default: break; diff --git a/src/core/directives/link.ts b/src/core/directives/link.ts index 81670c941..e177b4a97 100644 --- a/src/core/directives/link.ts +++ b/src/core/directives/link.ts @@ -140,7 +140,7 @@ export class CoreLinkDirective implements OnInit { if (href.charAt(0) == '#') { // Look for id or name. - href = href.substr(1); + href = href.substring(1); CoreDomUtils.scrollToElementBySelector( this.element.closest('ion-content'), this.content, @@ -170,7 +170,7 @@ export class CoreLinkDirective implements OnInit { * @return Promise resolved when done. */ protected async openLocalFile(path: string): Promise { - const filename = path.substr(path.lastIndexOf('/') + 1); + const filename = path.substring(path.lastIndexOf('/') + 1); if (!CoreFileHelper.isOpenableInApp({ filename })) { try { diff --git a/src/core/features/contentlinks/classes/base-handler.ts b/src/core/features/contentlinks/classes/base-handler.ts index a2809c552..2ac903131 100644 --- a/src/core/features/contentlinks/classes/base-handler.ts +++ b/src/core/features/contentlinks/classes/base-handler.ts @@ -95,7 +95,7 @@ export class CoreContentLinksHandlerBase implements CoreContentLinksHandler { if (this.pattern) { const position = url.search(this.pattern); if (position > -1) { - return url.substr(0, position); + return url.substring(0, position); } } } diff --git a/src/core/features/emulator/services/file-transfer.ts b/src/core/features/emulator/services/file-transfer.ts index 5a6d40e9d..59961318f 100644 --- a/src/core/features/emulator/services/file-transfer.ts +++ b/src/core/features/emulator/services/file-transfer.ts @@ -198,7 +198,7 @@ export class FileTransferObjectMock extends FileTransferObject { const headerString = headers[i]; const separatorPos = headerString.indexOf(':'); if (separatorPos != -1) { - result[headerString.substr(0, separatorPos)] = headerString.substr(separatorPos + 1).trim(); + result[headerString.substring(0, separatorPos)] = headerString.substring(separatorPos + 1).trim(); } } } diff --git a/src/core/features/emulator/services/file.ts b/src/core/features/emulator/services/file.ts index 71eae6136..4ae67a3d5 100644 --- a/src/core/features/emulator/services/file.ts +++ b/src/core/features/emulator/services/file.ts @@ -444,7 +444,7 @@ export class FileMock extends File { return { path: fullPath.substring(0, fullPath.lastIndexOf('/')), - name: fullPath.substr(fullPath.lastIndexOf('/') + 1), + name: fullPath.substring(fullPath.lastIndexOf('/') + 1), }; } diff --git a/src/core/features/emulator/services/zip.ts b/src/core/features/emulator/services/zip.ts index 0f2d24195..47fa54b55 100644 --- a/src/core/features/emulator/services/zip.ts +++ b/src/core/features/emulator/services/zip.ts @@ -65,7 +65,7 @@ export class ZipMock extends Zip { destination = destination.replace(/%20/g, ' '); const sourceDir = source.substring(0, source.lastIndexOf('/')); - const sourceName = source.substr(source.lastIndexOf('/') + 1); + const sourceName = source.substring(source.lastIndexOf('/') + 1); const zip = new JSZip(); try { @@ -82,7 +82,7 @@ export class ZipMock extends Zip { // First of all, create the directory where the files will be unzipped. const destParent = destination.substring(0, destination.lastIndexOf('/')); - const destFolderName = destination.substr(destination.lastIndexOf('/') + 1); + const destFolderName = destination.substring(destination.lastIndexOf('/') + 1); await this.file.createDir(destParent, destFolderName, true); @@ -95,7 +95,7 @@ export class ZipMock extends Zip { if (!file.dir) { // It's a file. const fileDir = name.substring(0, name.lastIndexOf('/')); - const fileName = name.substr(name.lastIndexOf('/') + 1); + const fileName = name.substring(name.lastIndexOf('/') + 1); if (fileDir) { // The file is in a subfolder, create it first. diff --git a/src/core/features/grades/services/grades-helper.ts b/src/core/features/grades/services/grades-helper.ts index b4d26bfa2..cf83ea121 100644 --- a/src/core/features/grades/services/grades-helper.ts +++ b/src/core/features/grades/services/grades-helper.ts @@ -154,7 +154,7 @@ export class CoreGradesHelperProvider { for (const name in item) { const index = name.indexOf('formatted'); if (index > 0) { - item[name.substr(0, index)] = item[name]; + item[name.substring(0, index)] = item[name]; } } @@ -399,7 +399,7 @@ export class CoreGradesHelperProvider { (row) => row.itemname && row.itemname.id && - row.itemname.id.substr(0, 3) == 'row' && + row.itemname.id.substring(0, 3) == 'row' && parseInt(row.itemname.id.split('_')[1], 10) == gradeId, ); diff --git a/src/core/features/h5p/classes/content-validator.ts b/src/core/features/h5p/classes/content-validator.ts index e3e916ba6..f7fc315ba 100644 --- a/src/core/features/h5p/classes/content-validator.ts +++ b/src/core/features/h5p/classes/content-validator.ts @@ -169,7 +169,7 @@ export class CoreH5PContentValidator { // Check if string is within allowed length. if (semantics.maxLength !== undefined) { - text = text.substr(0, semantics.maxLength); + text = text.substring(0, semantics.maxLength); } return text; @@ -357,8 +357,8 @@ export class CoreH5PContentValidator { } // Remove temporary files suffix. - if (file.path.substr(-4, 4) === '#tmp') { - file.path = file.path.substr(0, file.path.length - 4); + if (file.path.substring(-4, 4) === '#tmp') { + file.path = file.path.substring(0, file.path.length - 4); } // Make sure path and mime does not have any special chars @@ -670,7 +670,7 @@ export class CoreH5PContentValidator { const tag = tags[0]; - if (tag.substr(0, 1) != '<') { + if (tag.substring(0, 1) != '<') { // We matched a lone ">" character. return '>'; } else if (tag.length == 1) { @@ -746,7 +746,7 @@ export class CoreH5PContentValidator { matches = attr.match(/^([-a-zA-Z]+)/); if (matches && matches.length > 1) { attrName = matches[1].toLowerCase(); - skip = attrName == 'style' || attrName.substr(0, 2) == 'on' || attrName.substr(0, 1) == '-' || + skip = attrName == 'style' || attrName.substring(0, 2) == 'on' || attrName.substring(0, 1) == '-' || attrName.length > 96; // Ignore long attributes to avoid unnecessary processing overhead. working = mode = 1; attr = attr.replace(/^[-a-zA-Z]+/, ''); @@ -883,7 +883,7 @@ export class CoreH5PContentValidator { if (colonPos > 0) { // We found a colon, possibly a protocol. Verify. - const protocol = uri.substr(0, colonPos); + const protocol = uri.substring(0, colonPos); // If a colon is preceded by a slash, question mark or hash, it cannot possibly be part of the URL scheme. // This must be a relative URL, which inherits the (safe) protocol of the base document. if (protocol.match(/[/?#]/)) { @@ -891,7 +891,7 @@ export class CoreH5PContentValidator { } // Check if this is a disallowed protocol. if (!allowedProtocols[protocol.toLowerCase()]) { - uri = uri.substr(colonPos + 1); + uri = uri.substring(colonPos + 1); } } } while (before != uri); diff --git a/src/core/features/h5p/classes/core.ts b/src/core/features/h5p/classes/core.ts index ac6dddb45..948dabf40 100644 --- a/src/core/features/h5p/classes/core.ts +++ b/src/core/features/h5p/classes/core.ts @@ -216,7 +216,7 @@ export class CoreH5PCore { // Prevent too long slug. if (newInput.length > 91) { - newInput = newInput.substr(0, 92); + newInput = newInput.substring(0, 92); } // Prevent empty slug diff --git a/src/core/features/question/services/question-helper.ts b/src/core/features/question/services/question-helper.ts index b8ab02ad4..27bdfe3d4 100644 --- a/src/core/features/question/services/question-helper.ts +++ b/src/core/features/question/services/question-helper.ts @@ -303,7 +303,7 @@ export class CoreQuestionHelperProvider { // Remove start and end of the match, we only want the object. initMatch = initMatch.replace('M.qtype_' + question.type + '.init_question(', ''); - initMatch = initMatch.substr(0, initMatch.length - 2); + initMatch = initMatch.substring(0, initMatch.length - 2); // Try to convert it to an object and add it to the question. question.initObjects = CoreTextUtils.parseJSON(initMatch, null); diff --git a/src/core/features/settings/pages/deviceinfo/deviceinfo.ts b/src/core/features/settings/pages/deviceinfo/deviceinfo.ts index 2911ec1cd..da72645ff 100644 --- a/src/core/features/settings/pages/deviceinfo/deviceinfo.ts +++ b/src/core/features/settings/pages/deviceinfo/deviceinfo.ts @@ -100,7 +100,7 @@ export class CoreSettingsDeviceInfoPage implements OnDestroy { if (window.location && window.location.href) { const url = window.location.href; - this.deviceInfo.locationHref = url.indexOf('#') > 0 ? url.substr(0, url.indexOf('#')) : url; + this.deviceInfo.locationHref = url.indexOf('#') > 0 ? url.substring(0, url.indexOf('#')) : url; } if (window.screen) { diff --git a/src/core/services/file.ts b/src/core/services/file.ts index 698cdac02..21fdc08bd 100644 --- a/src/core/services/file.ts +++ b/src/core/services/file.ts @@ -232,8 +232,8 @@ export class CoreFileProvider { } else { // The file plugin doesn't allow creating more than 1 level at a time (e.g. tmp/folder). // We need to create them 1 by 1. - const firstDir = path.substr(0, path.indexOf('/')); - const restOfPath = path.substr(path.indexOf('/') + 1); + const firstDir = path.substring(0, path.indexOf('/')); + const restOfPath = path.substring(path.indexOf('/') + 1); this.logger.debug('Create dir ' + firstDir + ' in ' + base); @@ -692,7 +692,7 @@ export class CoreFileProvider { */ async removeExternalFile(fullPath: string): Promise { const directory = fullPath.substring(0, fullPath.lastIndexOf('/')); - const filename = fullPath.substr(fullPath.lastIndexOf('/') + 1); + const filename = fullPath.substring(fullPath.lastIndexOf('/') + 1); await File.removeFile(directory, filename); } @@ -885,7 +885,7 @@ export class CoreFileProvider { }; file.directory = path.substring(0, path.lastIndexOf('/')); - file.name = path.substr(path.lastIndexOf('/') + 1); + file.name = path.substring(path.lastIndexOf('/') + 1); return file; } @@ -1035,7 +1035,7 @@ export class CoreFileProvider { */ removeStartingSlash(path: string): string { if (path[0] == '/') { - return path.substr(1); + return path.substring(1); } return path; @@ -1232,7 +1232,7 @@ export class CoreFileProvider { const position = window.location.href.indexOf(window.location.pathname); if (position != -1) { - return window.location.href.substr(0, position); + return window.location.href.substring(0, position); } return window.location.href; diff --git a/src/core/services/filepool.ts b/src/core/services/filepool.ts index 3674b9fc7..99d5ea855 100644 --- a/src/core/services/filepool.ts +++ b/src/core/services/filepool.ts @@ -777,7 +777,7 @@ export class CoreFilepoolProvider { // Calculate the path to the file. path = file.filename || ''; if (file.filepath && file.filepath !== '/') { - path = file.filepath.substr(1) + path; + path = file.filepath.substring(1) + path; } path = CoreTextUtils.concatenatePaths(dirPath, path); } @@ -871,7 +871,7 @@ export class CoreFilepoolProvider { // Calculate the path to the file. path = file.filename || ''; if (file.filepath && file.filepath !== '/') { - path = file.filepath.substr(1) + path; + path = file.filepath.substring(1) + path; } path = CoreTextUtils.concatenatePaths(dirPath, path); } @@ -1837,7 +1837,7 @@ export class CoreFilepoolProvider { return; } - const relativePath = url.substr(url.indexOf('/pluginfile.php') + 16); + const relativePath = url.substring(url.indexOf('/pluginfile.php') + 16); const args = relativePath.split('/'); if (args.length < 3) { @@ -2084,7 +2084,7 @@ export class CoreFilepoolProvider { // It's a pluginfile URL. Search for the 'file' param to extract the name. const params = CoreUrlUtils.extractUrlParams(fileUrl); if (params.file) { - filename = params.file.substr(params.file.lastIndexOf('/') + 1); + filename = params.file.substring(params.file.lastIndexOf('/') + 1); } else { // 'file' param not found. Extract what's after the last '/' without params. filename = CoreUrlUtils.getLastFileWithoutParams(fileUrl); @@ -2115,7 +2115,7 @@ export class CoreFilepoolProvider { // Remove the URL from the array. hashes.shift(); - filename = filename.substr(0, index); + filename = filename.substring(0, index); } // Remove the extension from the filename. diff --git a/src/core/services/lang.ts b/src/core/services/lang.ts index e8c09518c..d76c6153a 100644 --- a/src/core/services/lang.ts +++ b/src/core/services/lang.ts @@ -256,7 +256,7 @@ export class CoreLangProvider { // Language code defined by locale has a dash, like en-US or es-ES. Check if it's supported. if (CoreConstants.CONFIG.languages && CoreConstants.CONFIG.languages[preferredLanguage] === undefined) { // Code is NOT supported. Fallback to language without dash. E.g. 'en-US' would fallback to 'en'. - preferredLanguage = preferredLanguage.substr(0, preferredLanguage.indexOf('-')); + preferredLanguage = preferredLanguage.substring(0, preferredLanguage.indexOf('-')); } } diff --git a/src/core/services/urlschemes.ts b/src/core/services/urlschemes.ts index 7cbe49670..f1b6aaa36 100644 --- a/src/core/services/urlschemes.ts +++ b/src/core/services/urlschemes.ts @@ -249,7 +249,7 @@ export class CoreCustomURLSchemesProvider { // Remove the params to get the site URL. if (url.indexOf('?') != -1) { - url = url.substr(0, url.indexOf('?')); + url = url.substring(0, url.indexOf('?')); } if (!url.match(/https?:\/\//)) { diff --git a/src/core/services/utils/iframe.ts b/src/core/services/utils/iframe.ts index 99f6e15bf..2e93414c7 100644 --- a/src/core/services/utils/iframe.ts +++ b/src/core/services/utils/iframe.ts @@ -443,7 +443,7 @@ export class CoreIframeUtilsProvider { } } else if (CoreUrlUtils.isLocalFileUrl(url)) { // It's a local file. - const filename = url.substr(url.lastIndexOf('/') + 1); + const filename = url.substring(url.lastIndexOf('/') + 1); if (!CoreFileHelper.isOpenableInApp({ filename })) { try { @@ -522,7 +522,7 @@ export class CoreIframeUtilsProvider { // Opening links with _parent, _top or _blank can break the app. We'll open it in InAppBrowser. event && event.preventDefault(); - const filename = link.href.substr(link.href.lastIndexOf('/') + 1); + const filename = link.href.substring(link.href.lastIndexOf('/') + 1); if (!CoreFileHelper.isOpenableInApp({ filename })) { try { diff --git a/src/core/services/utils/mimetype.ts b/src/core/services/utils/mimetype.ts index 98ab537a6..d1c51fa1c 100644 --- a/src/core/services/utils/mimetype.ts +++ b/src/core/services/utils/mimetype.ts @@ -84,13 +84,13 @@ export class CoreMimetypeUtilsProvider { // If the extension has parameters, remove them. let position = extension.indexOf('?'); if (position > -1) { - extension = extension.substr(0, position); + extension = extension.substring(0, position); } // If the extension has an anchor, remove it. position = extension.indexOf('#'); if (position > -1) { - extension = extension.substr(0, position); + extension = extension.substring(0, position); } // Remove hash in extension if there's any (added by filepool). @@ -98,7 +98,7 @@ export class CoreMimetypeUtilsProvider { // Remove dot from the extension if found. if (extension && extension[0] == '.') { - extension = extension.substr(1); + extension = extension.substring(1); } return extension; @@ -311,12 +311,12 @@ export class CoreMimetypeUtilsProvider { // Remove params if any. position = candidate.indexOf('?'); if (position > -1) { - candidate = candidate.substr(0, position); + candidate = candidate.substring(0, position); } // Remove anchor if any. position = candidate.indexOf('#'); if (position > -1) { - candidate = candidate.substr(0, position); + candidate = candidate.substring(0, position); } if (EXTENSION_REGEX.test(candidate)) { @@ -346,7 +346,7 @@ export class CoreMimetypeUtilsProvider { let ext; if (dot > -1) { - ext = filename.substr(dot + 1).toLowerCase(); + ext = filename.substring(dot + 1).toLowerCase(); ext = this.cleanExtension(ext); // Check extension corresponds to a mimetype to know if it's valid. @@ -589,9 +589,9 @@ export class CoreMimetypeUtilsProvider { if (position > -1) { // Check extension corresponds to a mimetype to know if it's valid. - extension = path.substr(position + 1).toLowerCase(); + extension = path.substring(position + 1).toLowerCase(); if (this.getMimeType(extension) !== undefined) { - return path.substr(0, position); // Remove extension. + return path.substring(0, position); // Remove extension. } } diff --git a/src/core/services/utils/text.ts b/src/core/services/utils/text.ts index c37c3f8a9..c227c1279 100644 --- a/src/core/services/utils/text.ts +++ b/src/core/services/utils/text.ts @@ -279,7 +279,7 @@ export class CoreTextUtilsProvider { const firstCharRight = rightPath.charAt(0); if (lastCharLeft === '/' && firstCharRight === '/') { - return leftPath + rightPath.substr(1); + return leftPath + rightPath.substring(1); } else if (lastCharLeft !== '/' && firstCharRight !== '/') { return leftPath + '/' + rightPath; } else { @@ -539,7 +539,7 @@ export class CoreTextUtilsProvider { const url = CoreFileHelper.getFileUrl(files[0]); // Remove text after last slash (encoded or not). - return url?.substr(0, Math.max(url.lastIndexOf('/'), url.lastIndexOf('%2F'))); + return url?.substring(0, Math.max(url.lastIndexOf('/'), url.lastIndexOf('%2F'))); } return undefined; @@ -778,9 +778,9 @@ export class CoreTextUtilsProvider { } // Get the filename from the URL. - let filename = url.substr(url.lastIndexOf('/') + 1); + let filename = url.substring(url.lastIndexOf('/') + 1); if (filename.indexOf('?') != -1) { - filename = filename.substr(0, filename.indexOf('?')); + filename = filename.substring(0, filename.indexOf('?')); } if (pluginfileMap[filename]) { @@ -904,12 +904,12 @@ export class CoreTextUtilsProvider { */ shortenText(text: string, length: number): string { if (text.length > length) { - text = text.substr(0, length); + text = text.substring(0, length); // Now, truncate at the last word boundary (if exists). const lastWordPos = text.lastIndexOf(' '); if (lastWordPos > 0) { - text = text.substr(0, lastWordPos); + text = text.substring(0, lastWordPos); } text += '…'; } diff --git a/src/core/services/utils/url.ts b/src/core/services/utils/url.ts index 15ed16dfc..06681b696 100644 --- a/src/core/services/utils/url.ts +++ b/src/core/services/utils/url.ts @@ -329,9 +329,9 @@ export class CoreUrlUtilsProvider { * @return Last file without params. */ getLastFileWithoutParams(url: string): string { - let filename = url.substr(url.lastIndexOf('/') + 1); + let filename = url.substring(url.lastIndexOf('/') + 1); if (filename.indexOf('?') != -1) { - filename = filename.substr(0, filename.indexOf('?')); + filename = filename.substring(0, filename.indexOf('?')); } return filename; diff --git a/src/core/services/utils/utils.ts b/src/core/services/utils/utils.ts index e66e673fd..2b72fb6c3 100644 --- a/src/core/services/utils/utils.ts +++ b/src/core/services/utils/utils.ts @@ -1254,7 +1254,7 @@ export class CoreUtilsProvider { const mapped = {}; objects.forEach((item) => { const keyValue = item[keyName] as string; - const key = prefixSubstr > 0 ? keyValue.substr(prefixSubstr) : keyValue; + const key = prefixSubstr > 0 ? keyValue.substring(prefixSubstr) : keyValue; mapped[key] = item[valueName]; }); diff --git a/src/core/singletons/colors.ts b/src/core/singletons/colors.ts index 5a5eeb0c9..368b3e99d 100644 --- a/src/core/singletons/colors.ts +++ b/src/core/singletons/colors.ts @@ -112,7 +112,7 @@ export class CoreColors { */ static hexToRGB(color: string): ColorComponents { if (color.charAt(0) == '#') { - color = color.substr(1); + color = color.substring(1); } if (color.length === 3) { @@ -122,9 +122,9 @@ export class CoreColors { } return { - red: parseInt(color.substr(0, 2), 16), - green: parseInt(color.substr(2, 2), 16), - blue: parseInt(color.substr(4, 2), 16), + red: parseInt(color.substring(0, 2), 16), + green: parseInt(color.substring(2, 2), 16), + blue: parseInt(color.substring(4, 2), 16), }; } diff --git a/src/core/singletons/locutus.ts b/src/core/singletons/locutus.ts index c39484399..ac9b5bc3e 100644 --- a/src/core/singletons/locutus.ts +++ b/src/core/singletons/locutus.ts @@ -123,7 +123,7 @@ function readBytes (str, len, escapedString = false) { const isLowSurrogate = code >= 0xdc00 && code <= 0xdfff if (escapedString && chr === '\\') { - chr = String.fromCharCode(parseInt(str.substr(c + 1, 2), 16)) + chr = String.fromCharCode(parseInt(str.substring(c + 1, 2), 16)) escapedChars++ // each escaped sequence is 3 characters. Go 2 chars ahead. @@ -167,7 +167,7 @@ function expectString (str) { const len = parseInt(byteLenMatch, 10) - str = str.substr(match.length) + str = str.substring(match.length) let [ strMatch, bytes ] = readBytes(str, len) @@ -175,7 +175,7 @@ function expectString (str) { throw SyntaxError(`Expected string of ${len} bytes, but got ${bytes}`) } - str = str.substr((strMatch as string).length) + str = str.substring((strMatch as string).length) // strict parsing, match closing "; chars if (!str.startsWith('";')) { @@ -195,7 +195,7 @@ function expectEscapedString (str) { const len = parseInt(strLenMatch, 10) - str = str.substr(match.length) + str = str.substring(match.length) let [ strMatch, bytes, escapedChars ] = readBytes(str, len, true) @@ -203,7 +203,7 @@ function expectEscapedString (str) { throw SyntaxError(`Expected escaped string of ${len} bytes, but got ${bytes}`) } - str = str.substr((strMatch as string).length + (escapedChars as number) * 2) + str = str.substring((strMatch as string).length + (escapedChars as number) * 2) // strict parsing, match closing "; chars if (!str.startsWith('";')) { @@ -249,15 +249,15 @@ function expectObject (str, cache) { const obj = {} cache([obj]) - str = str.substr(totalOffset) + str = str.substring(totalOffset) for (let i = 0; i < propCount; i++) { const prop = expectKeyOrIndex(str) - str = str.substr(prop[1]) + str = str.substring(prop[1]) totalOffset += prop[1] as number const value = expectType(str, cache) - str = str.substr(value[1]) + str = str.substring(value[1]) totalOffset += value[1] obj[prop[0]] = value[0] @@ -299,7 +299,7 @@ function expectArray (str, cache) { throw SyntaxError('Expected array length annotation') } - str = str.substr(arrayLiteralBeginMatch.length) + str = str.substring(arrayLiteralBeginMatch.length) const array = expectArrayItems(str, parseInt(arrayLengthMatch, 10), cache) @@ -327,14 +327,14 @@ function expectArrayItems (str, expectedItems = 0, cache) { hasStringKeys = (typeof key[0] === 'string') } - str = str.substr(key[1]) + str = str.substring(key[1]) totalOffset += key[1] // references are resolved immediately, so if duplicate key overwrites previous array index // the old value is anyway resolved // fixme: but next time the same reference should point to the new value item = expectType(str, cache) - str = str.substr(item[1]) + str = str.substring(item[1]) totalOffset += item[1] items[key[0]] = item[0] @@ -428,7 +428,7 @@ function substr_replace (str, replace, start, length) { return [ str.slice(0, start), - replace.substr(0, length), + replace.substring(0, length), replace.slice(length), str.slice(start + length) ].join('') diff --git a/src/core/singletons/text.ts b/src/core/singletons/text.ts index c95fa2a5b..9f6c1af11 100644 --- a/src/core/singletons/text.ts +++ b/src/core/singletons/text.ts @@ -34,7 +34,7 @@ export class CoreText { } if (text.slice(-1) == '/') { - return text.substr(0, text.length - 1); + return text.substring(0, text.length - 1); } return text; diff --git a/src/core/singletons/url.ts b/src/core/singletons/url.ts index 097f05155..ebb7aa533 100644 --- a/src/core/singletons/url.ts +++ b/src/core/singletons/url.ts @@ -216,7 +216,7 @@ export class CoreUrl { return; } - return url.substr(firstAnchorIndex); + return url.substring(firstAnchorIndex); } /** diff --git a/src/core/singletons/window.ts b/src/core/singletons/window.ts index 5463c7521..328fbbda6 100644 --- a/src/core/singletons/window.ts +++ b/src/core/singletons/window.ts @@ -82,7 +82,7 @@ export class CoreWindow { */ static async open(url: string, name?: string): Promise { if (CoreUrlUtils.isLocalFileUrl(url)) { - const filename = url.substr(url.lastIndexOf('/') + 1); + const filename = url.substring(url.lastIndexOf('/') + 1); if (!CoreFileHelper.isOpenableInApp({ filename })) { try {