DEV: Replace deprecated String.prototype.substr() (#16233)
String.prototype.substr() is deprecated so we replace it with String.prototype.slice() which works similarily but isn't deprecated. Signed-off-by: Tobias Speicher <rootcommander@gmail.com> Co-authored-by: Jarek Radosz <jradosz@gmail.com>
This commit is contained in:
parent
e30f13d850
commit
86a783b3ad
|
@ -5,7 +5,7 @@ function RGBToHex(rgb) {
|
||||||
// Choose correct separator
|
// Choose correct separator
|
||||||
let sep = rgb.indexOf(",") > -1 ? "," : " ";
|
let sep = rgb.indexOf(",") > -1 ? "," : " ";
|
||||||
// Turn "rgb(r,g,b)" into [r,g,b]
|
// Turn "rgb(r,g,b)" into [r,g,b]
|
||||||
rgb = rgb.substr(4).split(")")[0].split(sep);
|
rgb = rgb.slice(4).split(")")[0].split(sep);
|
||||||
|
|
||||||
let r = (+rgb[0]).toString(16),
|
let r = (+rgb[0]).toString(16),
|
||||||
g = (+rgb[1]).toString(16),
|
g = (+rgb[1]).toString(16),
|
||||||
|
|
|
@ -30,7 +30,7 @@ export default Controller.extend({
|
||||||
}
|
}
|
||||||
|
|
||||||
if (word.startsWith("plugin:")) {
|
if (word.startsWith("plugin:")) {
|
||||||
pluginFilter = word.substr("plugin:".length).trim();
|
pluginFilter = word.slice("plugin:".length).trim();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,17 +76,17 @@ const ColorSchemeColor = EmberObject.extend({
|
||||||
if (hex.length === 6 || hex.length === 3) {
|
if (hex.length === 6 || hex.length === 3) {
|
||||||
if (hex.length === 3) {
|
if (hex.length === 3) {
|
||||||
hex =
|
hex =
|
||||||
hex.substr(0, 1) +
|
hex.slice(0, 1) +
|
||||||
hex.substr(0, 1) +
|
hex.slice(0, 1) +
|
||||||
hex.substr(1, 1) +
|
hex.slice(1, 2) +
|
||||||
hex.substr(1, 1) +
|
hex.slice(1, 2) +
|
||||||
hex.substr(2, 1) +
|
hex.slice(2, 3) +
|
||||||
hex.substr(2, 1);
|
hex.slice(2, 3);
|
||||||
}
|
}
|
||||||
return Math.round(
|
return Math.round(
|
||||||
(parseInt(hex.substr(0, 2), 16) * 299 +
|
(parseInt(hex.slice(0, 2), 16) * 299 +
|
||||||
parseInt(hex.substr(2, 2), 16) * 587 +
|
parseInt(hex.slice(2, 4), 16) * 587 +
|
||||||
parseInt(hex.substr(4, 2), 16) * 114) /
|
parseInt(hex.slice(4, 6), 16) * 114) /
|
||||||
1000
|
1000
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ const VersionCheck = EmberObject.extend({
|
||||||
@discourseComputed("installed_sha")
|
@discourseComputed("installed_sha")
|
||||||
shortSha(installedSHA) {
|
shortSha(installedSHA) {
|
||||||
if (installedSHA) {
|
if (installedSHA) {
|
||||||
return installedSHA.substr(0, 10);
|
return installedSHA.slice(0, 10);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
@ -33,7 +33,7 @@ AttributeHook.prototype.unhook = function (node, prop, next) {
|
||||||
}
|
}
|
||||||
|
|
||||||
let colonPosition = prop.indexOf(":");
|
let colonPosition = prop.indexOf(":");
|
||||||
let localName = colonPosition > -1 ? prop.substr(colonPosition + 1) : prop;
|
let localName = colonPosition > -1 ? prop.slice(colonPosition + 1) : prop;
|
||||||
node.removeAttributeNS(this.namespace, localName);
|
node.removeAttributeNS(this.namespace, localName);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -158,7 +158,7 @@ export default Component.extend({
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO pass the 200 in from somewhere
|
// TODO pass the 200 in from somewhere
|
||||||
const raw = (composer.get("reply") || "").substr(0, 200);
|
const raw = (composer.get("reply") || "").slice(0, 200);
|
||||||
const title = composer.get("title") || "";
|
const title = composer.get("title") || "";
|
||||||
|
|
||||||
// Ensure we have at least a title
|
// Ensure we have at least a title
|
||||||
|
|
|
@ -6,7 +6,7 @@ export default {
|
||||||
|
|
||||||
if (queryStrings.indexOf("user_api_public_key") !== -1) {
|
if (queryStrings.indexOf("user_api_public_key") !== -1) {
|
||||||
let params = queryStrings.startsWith("?")
|
let params = queryStrings.startsWith("?")
|
||||||
? queryStrings.substr(1).split("&")
|
? queryStrings.slice(1).split("&")
|
||||||
: [];
|
: [];
|
||||||
|
|
||||||
params = params.filter((param) => {
|
params = params.filter((param) => {
|
||||||
|
|
|
@ -25,7 +25,7 @@ export function tinyDateYear(date) {
|
||||||
// TODO: locale support ?
|
// TODO: locale support ?
|
||||||
export function toTitleCase(str) {
|
export function toTitleCase(str) {
|
||||||
return str.replace(/\w\S*/g, function (txt) {
|
return str.replace(/\w\S*/g, function (txt) {
|
||||||
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
|
return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,13 +22,13 @@ export function linkSeenHashtags(elem) {
|
||||||
if (hashtags.length === 0) {
|
if (hashtags.length === 0) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
const slugs = [...hashtags.map((hashtag) => hashtag.innerText.substr(1))];
|
const slugs = [...hashtags.map((hashtag) => hashtag.innerText.slice(1))];
|
||||||
|
|
||||||
hashtags.forEach((hashtag, index) => {
|
hashtags.forEach((hashtag, index) => {
|
||||||
let slug = slugs[index];
|
let slug = slugs[index];
|
||||||
const hasTagSuffix = slug.endsWith(TAG_HASHTAG_POSTFIX);
|
const hasTagSuffix = slug.endsWith(TAG_HASHTAG_POSTFIX);
|
||||||
if (hasTagSuffix) {
|
if (hasTagSuffix) {
|
||||||
slug = slug.substr(0, slug.length - TAG_HASHTAG_POSTFIX.length);
|
slug = slug.slice(0, slug.length - TAG_HASHTAG_POSTFIX.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
const lowerSlug = slug.toLowerCase();
|
const lowerSlug = slug.toLowerCase();
|
||||||
|
|
|
@ -81,7 +81,7 @@ export function linkSeenMentions(elem, siteSettings) {
|
||||||
...elem.querySelectorAll("span.mention:not(.mention-tested)"),
|
...elem.querySelectorAll("span.mention:not(.mention-tested)"),
|
||||||
];
|
];
|
||||||
if (mentions.length) {
|
if (mentions.length) {
|
||||||
const usernames = mentions.map((m) => m.innerText.substr(1));
|
const usernames = mentions.map((m) => m.innerText.slice(1));
|
||||||
updateFound(mentions, usernames);
|
updateFound(mentions, usernames);
|
||||||
return usernames
|
return usernames
|
||||||
.uniq()
|
.uniq()
|
||||||
|
|
|
@ -25,7 +25,7 @@ export default function (page) {
|
||||||
|
|
||||||
activate() {
|
activate() {
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
jumpToElement(document.location.hash.substr(1));
|
jumpToElement(document.location.hash.slice(1));
|
||||||
},
|
},
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
|
|
|
@ -142,7 +142,7 @@ export function excerpt(cooked, length) {
|
||||||
|
|
||||||
if (element.nodeType === Node.TEXT_NODE) {
|
if (element.nodeType === Node.TEXT_NODE) {
|
||||||
if (resultLength + element.textContent.length > length) {
|
if (resultLength + element.textContent.length > length) {
|
||||||
const text = element.textContent.substr(0, length - resultLength);
|
const text = element.textContent.slice(0, length - resultLength);
|
||||||
result += encode(text);
|
result += encode(text);
|
||||||
result += "…";
|
result += "…";
|
||||||
resultLength += text.length;
|
resultLength += text.length;
|
||||||
|
|
|
@ -10,7 +10,7 @@ function isGUID(value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function markdownNameFromFileName(fileName) {
|
export function markdownNameFromFileName(fileName) {
|
||||||
let name = fileName.substr(0, fileName.lastIndexOf("."));
|
let name = fileName.slice(0, fileName.lastIndexOf("."));
|
||||||
|
|
||||||
if (isAppleDevice() && isGUID(name)) {
|
if (isAppleDevice() && isGUID(name)) {
|
||||||
name = I18n.t("upload_selector.default_image_alt_text");
|
name = I18n.t("upload_selector.default_image_alt_text");
|
||||||
|
|
|
@ -482,7 +482,7 @@ export function inCodeBlock(text, pos) {
|
||||||
// Character at position `pos` can be in a code block that is unfinished.
|
// Character at position `pos` can be in a code block that is unfinished.
|
||||||
// To check this case, we look for any open code blocks after the last closed
|
// To check this case, we look for any open code blocks after the last closed
|
||||||
// code block.
|
// code block.
|
||||||
const lastOpenBlock = text.substr(end).search(OPEN_CODE_BLOCKS_REGEX);
|
const lastOpenBlock = text.slice(end).search(OPEN_CODE_BLOCKS_REGEX);
|
||||||
return lastOpenBlock !== -1 && pos >= end + lastOpenBlock;
|
return lastOpenBlock !== -1 && pos >= end + lastOpenBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ export default Mixin.create({
|
||||||
|
|
||||||
if (opts && opts.lineVal) {
|
if (opts && opts.lineVal) {
|
||||||
const lineVal = value.split("\n")[
|
const lineVal = value.split("\n")[
|
||||||
value.substr(0, this._textarea.selectionStart).split("\n").length - 1
|
value.slice(0, this._textarea.selectionStart).split("\n").length - 1
|
||||||
];
|
];
|
||||||
return { start, end, value: selVal, pre, post, lineVal };
|
return { start, end, value: selVal, pre, post, lineVal };
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -36,7 +36,7 @@ const Invite = EmberObject.extend({
|
||||||
|
|
||||||
@discourseComputed("invite_key")
|
@discourseComputed("invite_key")
|
||||||
shortKey(key) {
|
shortKey(key) {
|
||||||
return key.substr(0, 4) + "...";
|
return key.slice(0, 4) + "...";
|
||||||
},
|
},
|
||||||
|
|
||||||
@discourseComputed("groups")
|
@discourseComputed("groups")
|
||||||
|
|
|
@ -441,7 +441,7 @@ const TopicTrackingState = EmberObject.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
_generateCallbackId() {
|
_generateCallbackId() {
|
||||||
return Math.random().toString(12).substr(2, 9);
|
return Math.random().toString(12).slice(2, 11);
|
||||||
},
|
},
|
||||||
|
|
||||||
onStateChange(cb) {
|
onStateChange(cb) {
|
||||||
|
|
|
@ -574,7 +574,7 @@ const Topic = RestModel.extend({
|
||||||
|
|
||||||
@discourseComputed("excerpt")
|
@discourseComputed("excerpt")
|
||||||
excerptTruncated(excerpt) {
|
excerptTruncated(excerpt) {
|
||||||
return excerpt && excerpt.substr(excerpt.length - 8, 8) === "…";
|
return excerpt && excerpt.slice(-8) === "…";
|
||||||
},
|
},
|
||||||
|
|
||||||
readLastPost: propertyEqual("last_read_post_number", "highest_post_number"),
|
readLastPost: propertyEqual("last_read_post_number", "highest_post_number"),
|
||||||
|
|
|
@ -92,7 +92,7 @@ export default DiscourseRoute.extend({
|
||||||
|
|
||||||
const opts = {};
|
const opts = {};
|
||||||
if (document.location.hash) {
|
if (document.location.hash) {
|
||||||
opts.anchor = document.location.hash.substr(1);
|
opts.anchor = document.location.hash.slice(1);
|
||||||
} else if (_discourse_anchor) {
|
} else if (_discourse_anchor) {
|
||||||
opts.anchor = _discourse_anchor;
|
opts.anchor = _discourse_anchor;
|
||||||
}
|
}
|
||||||
|
|
|
@ -284,7 +284,7 @@ createWidget("topic-map-link", {
|
||||||
const truncateLength = 85;
|
const truncateLength = 85;
|
||||||
|
|
||||||
if (content.length > truncateLength) {
|
if (content.length > truncateLength) {
|
||||||
content = `${content.substr(0, truncateLength).trim()}...`;
|
content = `${content.slice(0, truncateLength).trim()}...`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return attrs.title ? replaceEmoji(content) : content;
|
return attrs.title ? replaceEmoji(content) : content;
|
||||||
|
|
|
@ -230,7 +230,7 @@ async function handleRequest(proxy, baseURL, req, res) {
|
||||||
let url = `${proxy}${req.path}`;
|
let url = `${proxy}${req.path}`;
|
||||||
const queryLoc = req.url.indexOf("?");
|
const queryLoc = req.url.indexOf("?");
|
||||||
if (queryLoc !== -1) {
|
if (queryLoc !== -1) {
|
||||||
url += req.url.substr(queryLoc);
|
url += req.url.slice(queryLoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req.method === "GET") {
|
if (req.method === "GET") {
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
let len = prefix.length;
|
let len = prefix.length;
|
||||||
Object.keys(requirejs.entries).forEach(function (key) {
|
Object.keys(requirejs.entries).forEach(function (key) {
|
||||||
if (key.indexOf(prefix) === 0) {
|
if (key.indexOf(prefix) === 0) {
|
||||||
Ember.TEMPLATES[key.substr(len)] = require(key).default;
|
Ember.TEMPLATES[key.slice(len)] = require(key).default;
|
||||||
} else if (key.indexOf(adminPrefix) === 0) {
|
} else if (key.indexOf(adminPrefix) === 0) {
|
||||||
Ember.TEMPLATES[key] = require(key).default;
|
Ember.TEMPLATES[key] = require(key).default;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
export default function formatTextWithSelection(text, [start, len]) {
|
export default function formatTextWithSelection(text, [start, len]) {
|
||||||
return [
|
return [
|
||||||
'"',
|
'"',
|
||||||
text.substr(0, start),
|
text.slice(0, start),
|
||||||
"<",
|
"<",
|
||||||
text.substr(start, len),
|
text.slice(start, start + len),
|
||||||
">",
|
">",
|
||||||
text.substr(start + len),
|
text.slice(start + len),
|
||||||
'"',
|
'"',
|
||||||
].join("");
|
].join("");
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,8 +201,9 @@ I18n.toNumber = function(number, options) {
|
||||||
number = parts[0];
|
number = parts[0];
|
||||||
|
|
||||||
while (number.length > 0) {
|
while (number.length > 0) {
|
||||||
buffer.unshift(number.substr(Math.max(0, number.length - 3), 3));
|
var pos = Math.max(0, number.length - 3);
|
||||||
number = number.substr(0, number.length - 3);
|
buffer.unshift(number.slice(pos, pos + 3));
|
||||||
|
number = number.slice(0, -3);
|
||||||
}
|
}
|
||||||
|
|
||||||
formattedNumber = buffer.join(options.delimiter);
|
formattedNumber = buffer.join(options.delimiter);
|
||||||
|
|
|
@ -426,12 +426,12 @@ export function extractDataAttribute(str) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const key = `data-${str.substr(0, sep)}`.toLowerCase();
|
const key = `data-${str.slice(0, sep)}`.toLowerCase();
|
||||||
if (!/^[A-Za-z]+[\w\-\:\.]*$/.test(key)) {
|
if (!/^[A-Za-z]+[\w\-\:\.]*$/.test(key)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const value = str.substr(sep + 1);
|
const value = str.slice(sep + 1);
|
||||||
return [key, value];
|
return [key, value];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@ function getEmojiName(content, pos, state, inlineEmoji) {
|
||||||
|
|
||||||
if (content.charCodeAt(pos + length) === 58) {
|
if (content.charCodeAt(pos + length) === 58) {
|
||||||
// check for t2-t6
|
// check for t2-t6
|
||||||
if (content.substr(pos + length + 1, 3).match(/t[2-6]:/)) {
|
if (content.slice(pos + length + 1, pos + length + 4).match(/t[2-6]:/)) {
|
||||||
length += 3;
|
length += 3;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -105,7 +105,7 @@ function getEmojiName(content, pos, state, inlineEmoji) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
return content.substr(pos, length);
|
return content.slice(pos, pos + length);
|
||||||
}
|
}
|
||||||
|
|
||||||
// straight forward :smile: to emoji image
|
// straight forward :smile: to emoji image
|
||||||
|
|
|
@ -38,13 +38,13 @@ export function textReplace(state, callback, skipAllLinks) {
|
||||||
if (token.type === "link_open" || token.type === "link_close") {
|
if (token.type === "link_open" || token.type === "link_close") {
|
||||||
linkLevel -= token.nesting;
|
linkLevel -= token.nesting;
|
||||||
} else if (token.type === "html_inline") {
|
} else if (token.type === "html_inline") {
|
||||||
const openLink = token.content.substr(0, 2).toLowerCase();
|
const openLink = token.content.slice(0, 2).toLowerCase();
|
||||||
|
|
||||||
if (openLink === "<a") {
|
if (openLink === "<a") {
|
||||||
if (token.content.match(/^<a(\s.*)?>/i)) {
|
if (token.content.match(/^<a(\s.*)?>/i)) {
|
||||||
linkLevel++;
|
linkLevel++;
|
||||||
}
|
}
|
||||||
} else if (token.content.substr(0, 4).toLowerCase() === "</a>") {
|
} else if (token.content.slice(0, 4).toLowerCase() === "</a>") {
|
||||||
linkLevel--;
|
linkLevel--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,12 +23,12 @@ const rule = {
|
||||||
let i;
|
let i;
|
||||||
for (i = 1; i < split.length; i++) {
|
for (i = 1; i < split.length; i++) {
|
||||||
if (split[i].indexOf("post:") === 0) {
|
if (split[i].indexOf("post:") === 0) {
|
||||||
postNumber = parseInt(split[i].substr(5), 10);
|
postNumber = parseInt(split[i].slice(5), 10);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (split[i].indexOf("topic:") === 0) {
|
if (split[i].indexOf("topic:") === 0) {
|
||||||
topicId = parseInt(split[i].substr(6), 10);
|
topicId = parseInt(split[i].slice(6), 10);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -110,7 +110,7 @@ export default SelectKitRowComponent.extend({
|
||||||
|
|
||||||
_formatDescription(description) {
|
_formatDescription(description) {
|
||||||
const limit = 200;
|
const limit = 200;
|
||||||
return `${description.substr(0, limit)}${
|
return `${description.slice(0, limit)}${
|
||||||
description.length > limit ? "…" : ""
|
description.length > limit ? "…" : ""
|
||||||
}`;
|
}`;
|
||||||
},
|
},
|
||||||
|
|
|
@ -314,9 +314,9 @@ export function parseColor(color) {
|
||||||
if (m) {
|
if (m) {
|
||||||
const c = m[1];
|
const c = m[1];
|
||||||
return [
|
return [
|
||||||
parseInt(c.substr(0, 2), 16),
|
parseInt(c.slice(0, 2), 16),
|
||||||
parseInt(c.substr(2, 2), 16),
|
parseInt(c.slice(2, 4), 16),
|
||||||
parseInt(c.substr(4, 2), 16),
|
parseInt(c.slice(4, 6), 16),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -404,9 +404,9 @@ export function lighten(color, percent) {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
"#" +
|
"#" +
|
||||||
(0 | ((1 << 8) + color[0])).toString(16).substr(1) +
|
(0 | ((1 << 8) + color[0])).toString(16).slice(1) +
|
||||||
(0 | ((1 << 8) + color[1])).toString(16).substr(1) +
|
(0 | ((1 << 8) + color[1])).toString(16).slice(1) +
|
||||||
(0 | ((1 << 8) + color[2])).toString(16).substr(1)
|
(0 | ((1 << 8) + color[2])).toString(16).slice(1)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue