mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
WEB-6592 Schemeless (protocol-relative) URLs in HTML documents are not recognized
This commit is contained in:
@@ -37,6 +37,7 @@ import com.intellij.psi.xml.XmlFile;
|
||||
import com.intellij.psi.xml.XmlTag;
|
||||
import com.intellij.util.PairFunction;
|
||||
import com.intellij.util.text.StringTokenizer;
|
||||
import com.intellij.xml.util.HtmlUtil;
|
||||
import gnu.trove.THashMap;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
@@ -56,9 +57,6 @@ public class MicrodataUtil {
|
||||
public static final String ITEM_PROP = "itemprop";
|
||||
public static final String ITEM_ID = "itemid";
|
||||
|
||||
@NonNls private static final String HTTP = "http://";
|
||||
@NonNls private static final String HTTPS = "https://";
|
||||
|
||||
public static boolean hasScopeTag(@Nullable XmlTag tag) {
|
||||
return findScopeTag(tag) != null;
|
||||
}
|
||||
@@ -130,7 +128,7 @@ public class MicrodataUtil {
|
||||
@Nullable
|
||||
@Override
|
||||
public PsiReference fun(String token, Integer offset) {
|
||||
if (isUrl(token)) {
|
||||
if (HtmlUtil.hasHtmlPrefix(token)) {
|
||||
final TextRange range = TextRange.from(offset, token.length());
|
||||
final URLReference urlReference = new URLReference(element, range, true);
|
||||
return new URIReferenceProvider.DependentNSReference(element, range, urlReference) {
|
||||
@@ -167,10 +165,6 @@ public class MicrodataUtil {
|
||||
return result.toArray(new PsiReference[result.size()]);
|
||||
}
|
||||
|
||||
private static boolean isUrl(String url) {
|
||||
return url.startsWith(HTTP) || url.startsWith(HTTPS);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static String getStripedAttributeValue(@Nullable XmlTag tag, @Nls String attributeName) {
|
||||
String value = tag != null ? tag.getAttributeValue(attributeName) : null;
|
||||
|
||||
+2
-2
@@ -34,6 +34,7 @@ import com.intellij.psi.xml.XmlAttribute;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.xml.util.HtmlUtil;
|
||||
import com.intellij.xml.util.XmlUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -62,7 +63,6 @@ public class URIReferenceProvider extends PsiReferenceProvider {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
@NonNls private static final String HTTP = "http://";
|
||||
@NonNls private static final String URN = "urn:";
|
||||
@NonNls private static final String FILE = "file:";
|
||||
@NonNls private static final String CLASSPATH = "classpath:/";
|
||||
@@ -162,7 +162,7 @@ public class URIReferenceProvider extends PsiReferenceProvider {
|
||||
}
|
||||
|
||||
static boolean isUrlText(final String s, Project project) {
|
||||
final boolean surelyUrl = s.startsWith(HTTP) || s.startsWith(URN);
|
||||
final boolean surelyUrl = HtmlUtil.hasHtmlPrefix(s) || s.startsWith(URN);
|
||||
if (surelyUrl) return surelyUrl;
|
||||
int protocolIndex = s.indexOf(":/");
|
||||
if (protocolIndex > 1 && !s.regionMatches(0,"classpath",0,protocolIndex)) return true;
|
||||
|
||||
@@ -597,6 +597,13 @@ public class HtmlUtil {
|
||||
return isHtmlFile(file) || file.getViewProvider() instanceof TemplateLanguageFileViewProvider;
|
||||
}
|
||||
|
||||
public static boolean hasHtmlPrefix(@NotNull String url) {
|
||||
return url.startsWith("http://") ||
|
||||
url.startsWith("https://") ||
|
||||
url.startsWith("//") || //Protocol-relative URL
|
||||
url.startsWith("ftp://");
|
||||
}
|
||||
|
||||
public static boolean isHtmlFile(PsiElement element) {
|
||||
Language language = element.getLanguage();
|
||||
return language == HTMLLanguage.INSTANCE || language == XHTMLLanguage.INSTANCE;
|
||||
|
||||
Reference in New Issue
Block a user