mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 04:11:33 +08:00
DEV: Extensively use startsWith()
(#17540)
This commit is contained in:
parent
6a4a7b1d88
commit
5f7163b5bb
|
@ -194,7 +194,7 @@ export function buildResolver(baseName) {
|
|||
|
||||
findConnectorTemplate(parsedName) {
|
||||
const full = parsedName.fullNameWithoutType.replace("components/", "");
|
||||
if (full.indexOf("connectors") === 0) {
|
||||
if (full.startsWith("connectors")) {
|
||||
return Ember.TEMPLATES[`javascripts/${full}`];
|
||||
}
|
||||
},
|
||||
|
@ -271,7 +271,7 @@ export function buildResolver(baseName) {
|
|||
// (similar to how discourse lays out templates)
|
||||
findAdminTemplate(parsedName) {
|
||||
let decamelized = decamelize(parsedName.fullNameWithoutType);
|
||||
if (decamelized.indexOf("components") === 0) {
|
||||
if (decamelized.startsWith("components")) {
|
||||
let comPath = `admin/templates/${decamelized}`;
|
||||
const compTemplate =
|
||||
Ember.TEMPLATES[`javascripts/${comPath}`] || Ember.TEMPLATES[comPath];
|
||||
|
@ -285,8 +285,8 @@ export function buildResolver(baseName) {
|
|||
}
|
||||
|
||||
if (
|
||||
decamelized.indexOf("admin") === 0 ||
|
||||
decamelized.indexOf("javascripts/admin") === 0
|
||||
decamelized.startsWith("admin") ||
|
||||
decamelized.startsWith("javascripts/admin")
|
||||
) {
|
||||
decamelized = decamelized.replace(/^admin\_/, "admin/templates/");
|
||||
decamelized = decamelized.replace(/^admin\./, "admin/templates/");
|
||||
|
|
|
@ -25,7 +25,7 @@ export function registerRawHelpers(hbs, handlebarsClass) {
|
|||
let firstContext = options.contexts[0];
|
||||
let val = firstContext[context];
|
||||
|
||||
if (context.toString().indexOf("controller.") === 0) {
|
||||
if (context.toString().startsWith("controller.")) {
|
||||
context = context.slice(context.indexOf(".") + 1);
|
||||
}
|
||||
|
||||
|
|
|
@ -611,10 +611,9 @@ export default Component.extend(TextareaTextManipulation, {
|
|||
}
|
||||
|
||||
const trimmedPre = sel.pre.trim();
|
||||
const number =
|
||||
sel.value.indexOf(hval) === 0
|
||||
? sel.value.slice(hlen)
|
||||
: `${hval}${sel.value}`;
|
||||
const number = sel.value.startsWith(hval)
|
||||
? sel.value.slice(hlen)
|
||||
: `${hval}${sel.value}`;
|
||||
const preLines = trimmedPre.length ? `${trimmedPre}\n\n` : "";
|
||||
|
||||
const trimmedPost = sel.post.trim();
|
||||
|
|
|
@ -38,7 +38,7 @@ export default Component.extend({
|
|||
}
|
||||
|
||||
// Relative urls
|
||||
if (shareUrl.indexOf("/") === 0) {
|
||||
if (shareUrl.startsWith("/")) {
|
||||
const location = window.location;
|
||||
shareUrl = `${location.protocol}//${location.host}${shareUrl}`;
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ export default Controller.extend(ModalFunctionality, GrantBadgeController, {
|
|||
const protocolAndHost =
|
||||
window.location.protocol + "//" + window.location.host;
|
||||
|
||||
return url.indexOf("/") === 0 ? protocolAndHost + url : url;
|
||||
return url.startsWith("/") ? protocolAndHost + url : url;
|
||||
},
|
||||
|
||||
@discourseComputed("saving", "selectedBadgeGrantable")
|
||||
|
|
|
@ -3,7 +3,7 @@ import deprecated from "discourse-common/lib/deprecated";
|
|||
const pluses = /\+/g;
|
||||
|
||||
function parseCookieValue(s) {
|
||||
if (s.indexOf('"') === 0) {
|
||||
if (s.startsWith('"')) {
|
||||
// This is a quoted cookie as according to RFC2068, unescape...
|
||||
s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, "\\");
|
||||
}
|
||||
|
|
|
@ -207,7 +207,7 @@ const DiscourseLocation = EmberObject.extend({
|
|||
if (url !== "") {
|
||||
rootURL = rootURL.replace(/\/$/, "");
|
||||
|
||||
if (rootURL.length > 0 && url.indexOf(rootURL + "/") === 0) {
|
||||
if (rootURL.length > 0 && url.startsWith(rootURL + "/")) {
|
||||
rootURL = "";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ export default function interceptClick(e) {
|
|||
!currentTarget.dataset.userCard &&
|
||||
currentTarget.classList.contains("ember-view")) ||
|
||||
currentTarget.classList.contains("lightbox") ||
|
||||
href.indexOf("mailto:") === 0 ||
|
||||
href.startsWith("mailto:") ||
|
||||
(href.match(/^http[s]?:\/\//i) &&
|
||||
!href.match(new RegExp("^https?:\\/\\/" + window.location.hostname, "i")))
|
||||
) {
|
||||
|
|
|
@ -44,7 +44,7 @@ export function rewritePath(path) {
|
|||
|
||||
let result = params[0];
|
||||
rewrites.forEach((rw) => {
|
||||
if ((rw.opts.exceptions || []).some((ex) => path.indexOf(ex) === 0)) {
|
||||
if ((rw.opts.exceptions || []).some((ex) => path.startsWith(ex))) {
|
||||
return;
|
||||
}
|
||||
result = result.replace(rw.regexp, rw.replacement);
|
||||
|
@ -248,7 +248,7 @@ const DiscourseURL = EmberObject.extend({
|
|||
// Rewrite /my/* urls
|
||||
let myPath = getURL("/my");
|
||||
const fullPath = getURL(path);
|
||||
if (fullPath.indexOf(myPath) === 0) {
|
||||
if (fullPath.startsWith(myPath)) {
|
||||
const currentUser = User.current();
|
||||
if (currentUser) {
|
||||
path = fullPath.replace(
|
||||
|
@ -261,7 +261,7 @@ const DiscourseURL = EmberObject.extend({
|
|||
}
|
||||
|
||||
// handle prefixes
|
||||
if (path.indexOf("/") === 0) {
|
||||
if (path.startsWith("/")) {
|
||||
path = withoutPrefix(path);
|
||||
}
|
||||
|
||||
|
@ -318,22 +318,22 @@ const DiscourseURL = EmberObject.extend({
|
|||
// Determines whether a URL is internal or not
|
||||
isInternal(url) {
|
||||
if (url && url.length) {
|
||||
if (url.indexOf("//") === 0) {
|
||||
if (url.startsWith("//")) {
|
||||
url = "http:" + url;
|
||||
}
|
||||
if (url.indexOf("#") === 0) {
|
||||
if (url.startsWith("#")) {
|
||||
return true;
|
||||
}
|
||||
if (url.indexOf("/") === 0) {
|
||||
if (url.startsWith("/")) {
|
||||
return true;
|
||||
}
|
||||
if (url.indexOf(this.origin()) === 0) {
|
||||
if (url.startsWith(this.origin())) {
|
||||
return true;
|
||||
}
|
||||
if (url.replace(/^http/, "https").indexOf(this.origin()) === 0) {
|
||||
if (url.replace(/^http/, "https").startsWith(this.origin())) {
|
||||
return true;
|
||||
}
|
||||
if (url.replace(/^https/, "http").indexOf(this.origin()) === 0) {
|
||||
if (url.replace(/^https/, "http").startsWith(this.origin())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -490,7 +490,7 @@ export function setURLContainer(container) {
|
|||
}
|
||||
|
||||
export function prefixProtocol(url) {
|
||||
return url.indexOf("://") === -1 && url.indexOf("mailto:") !== 0
|
||||
return url.indexOf("://") === -1 && !url.startsWith("mailto:")
|
||||
? "https://" + url
|
||||
: url;
|
||||
}
|
||||
|
|
|
@ -584,8 +584,8 @@ Category.reopenClass({
|
|||
if (
|
||||
((emptyTerm && !category.get("parent_category_id")) ||
|
||||
(!emptyTerm &&
|
||||
(category.get("name").toLowerCase().indexOf(term) === 0 ||
|
||||
category.get("slug").toLowerCase().indexOf(slugTerm) === 0))) &&
|
||||
(category.get("name").toLowerCase().startsWith(term) ||
|
||||
category.get("slug").toLowerCase().startsWith(slugTerm)))) &&
|
||||
validCategoryParent(category)
|
||||
) {
|
||||
data.push(category);
|
||||
|
|
|
@ -263,7 +263,7 @@ NavItem.reopenClass({
|
|||
|
||||
if (
|
||||
(category || !args.skipCategoriesNavItem) &&
|
||||
i.name.indexOf("categor") === 0
|
||||
i.name.startsWith("categor")
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -209,7 +209,7 @@ export function emojiSearch(term, options) {
|
|||
|
||||
// if term matches from beginning
|
||||
for (const item of toSearch) {
|
||||
if (item.indexOf(term) === 0) {
|
||||
if (item.startsWith(term)) {
|
||||
addResult(item);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -121,7 +121,7 @@ export function sanitize(text, allowLister) {
|
|||
(forAttr &&
|
||||
(forAttr.indexOf("*") !== -1 || forAttr.indexOf(value) !== -1)) ||
|
||||
(name.indexOf("data-html-") === -1 &&
|
||||
name.indexOf("data-") === 0 &&
|
||||
name.startsWith("data-") &&
|
||||
(forTag["data-*"] || testDataAttribute(forTag, name, value))) ||
|
||||
(tag === "a" &&
|
||||
name === "href" &&
|
||||
|
@ -129,7 +129,7 @@ export function sanitize(text, allowLister) {
|
|||
(tag === "iframe" &&
|
||||
name === "src" &&
|
||||
allowedIframes.some((i) => {
|
||||
return value.toLowerCase().indexOf((i || "").toLowerCase()) === 0;
|
||||
return value.toLowerCase().startsWith((i || "").toLowerCase());
|
||||
}))
|
||||
) {
|
||||
return attr(name, value);
|
||||
|
|
|
@ -22,12 +22,12 @@ const rule = {
|
|||
|
||||
let i;
|
||||
for (i = 1; i < split.length; i++) {
|
||||
if (split[i].indexOf("post:") === 0) {
|
||||
if (split[i].startsWith("post:")) {
|
||||
postNumber = parseInt(split[i].slice(5), 10);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (split[i].indexOf("topic:") === 0) {
|
||||
if (split[i].startsWith("topic:")) {
|
||||
topicId = parseInt(split[i].slice(6), 10);
|
||||
continue;
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ const rule = {
|
|||
|
||||
// if we have the additional attribute of username: because we are prioritizing full name
|
||||
// then assign the name to be the displayName
|
||||
if (split[i].indexOf("username:") === 0) {
|
||||
if (split[i].startsWith("username:")) {
|
||||
// return users name by selecting all values from the first index to the post
|
||||
// this protects us from when a user has a `,` in their name
|
||||
displayName = split.slice(0, split.indexOf(`post:${postNumber}`));
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
function resolve(path) {
|
||||
if (path.indexOf("settings") === 0 || path.indexOf("transformed") === 0) {
|
||||
if (path.startsWith("settings") || path.startsWith("transformed")) {
|
||||
return `this.${path}`;
|
||||
}
|
||||
return path;
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
var queryParams = {};
|
||||
|
||||
if (DE.discourseEmbedUrl) {
|
||||
if (DE.discourseEmbedUrl.indexOf("/") === 0) {
|
||||
if (DE.discourseEmbedUrl.startsWith("/")) {
|
||||
console.error(
|
||||
"discourseEmbedUrl must be a full URL, not a relative path"
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue
Block a user