diff --git a/AngularJS/AngularJS.iml b/AngularJS/AngularJS.iml
index 5a0400224b..739dbbb28f 100644
--- a/AngularJS/AngularJS.iml
+++ b/AngularJS/AngularJS.iml
@@ -5,7 +5,7 @@
-
+
diff --git a/AngularJS/resources/META-INF/plugin.xml b/AngularJS/resources/META-INF/plugin.xml
index f198dcad62..bb9aeeaefd 100644
--- a/AngularJS/resources/META-INF/plugin.xml
+++ b/AngularJS/resources/META-INF/plugin.xml
@@ -46,10 +46,7 @@
-
- org.angularjs.intentions.OpenAngularJSDocsIntention
- HTML
-
+
@@ -60,6 +57,7 @@
+
diff --git a/AngularJS/resources/intentionDescriptions/OpenAngularJSDocsIntention/after.java.template b/AngularJS/resources/intentionDescriptions/OpenAngularJSDocsIntention/after.java.template
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/AngularJS/resources/intentionDescriptions/OpenAngularJSDocsIntention/before.java.template b/AngularJS/resources/intentionDescriptions/OpenAngularJSDocsIntention/before.java.template
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/AngularJS/resources/intentionDescriptions/OpenAngularJSDocsIntention/description.html b/AngularJS/resources/intentionDescriptions/OpenAngularJSDocsIntention/description.html
deleted file mode 100644
index 9bd2123634..0000000000
--- a/AngularJS/resources/intentionDescriptions/OpenAngularJSDocsIntention/description.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-This intention opens the docs for an AngularJS directive
-
-
diff --git a/AngularJS/src/org/angularjs/AngularJSDocumentationProvider.java b/AngularJS/src/org/angularjs/AngularJSDocumentationProvider.java
new file mode 100644
index 0000000000..41b2312067
--- /dev/null
+++ b/AngularJS/src/org/angularjs/AngularJSDocumentationProvider.java
@@ -0,0 +1,31 @@
+package org.angularjs;
+
+import com.intellij.lang.documentation.DocumentationProviderEx;
+import com.intellij.lang.javascript.index.AngularDirectivesIndex;
+import com.intellij.lang.javascript.index.JSNamedElementProxy;
+import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.psi.PsiElement;
+import org.angularjs.index.AngularIndexUtil;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author Dennis.Ushakov
+ */
+public class AngularJSDocumentationProvider extends DocumentationProviderEx {
+ @Override
+ public List getUrlFor(PsiElement element, PsiElement originalElement) {
+ if (element instanceof JSNamedElementProxy) {
+ final String name = ((JSNamedElementProxy)element).getName();
+ if (AngularIndexUtil.resolve(element.getProject(), AngularDirectivesIndex.INDEX_ID, name) != null) {
+ final String[] words = name.split("-");
+ for (int i = 1; i < words.length; i++) {
+ words[i] = StringUtil.capitalize(words[i]);
+ }
+ return Collections.singletonList("http://docs.angularjs.org/api/ng.directive:" + StringUtil.join(words));
+ }
+ }
+ return null;
+ }
+}
diff --git a/AngularJS/src/org/angularjs/intentions/OpenAngularJSDocsIntention.java b/AngularJS/src/org/angularjs/intentions/OpenAngularJSDocsIntention.java
deleted file mode 100644
index 9e8db2e815..0000000000
--- a/AngularJS/src/org/angularjs/intentions/OpenAngularJSDocsIntention.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.angularjs.intentions;
-
-import com.intellij.codeInsight.intention.AbstractIntentionAction;
-import com.intellij.codeInsight.intention.LowPriorityAction;
-import com.intellij.ide.BrowserUtil;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
-import com.intellij.psi.impl.source.xml.XmlTokenImpl;
-import com.intellij.psi.util.PsiUtilBase;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * @author Dennis.Ushakov
- */
-public class OpenAngularJSDocsIntention extends AbstractIntentionAction implements LowPriorityAction {
- @NotNull
- @Override
- public String getText() {
- return "Open Angular Docs";
- }
-
- @Override
- public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile psiFile) {
- final PsiElement element = PsiUtilBase.getElementAtCaret(editor);
-
- return element instanceof XmlTokenImpl && element.getText().startsWith("ng");
- }
-
- @Override
- public void invoke(@NotNull Project project, Editor editor, PsiFile psiFile) throws IncorrectOperationException {
- final PsiElement element = PsiUtilBase.getElementAtCaret(editor);
- assert element != null;
- String text = element.getText();
- String[] words = text.split("-");
- StringBuilder name = new StringBuilder("http://docs.angularjs.org/api/ng.directive:");
- for (String word : words) {
- name.append(word.equals(words[0]) ? word : StringUtil.capitalize(word));
- }
- BrowserUtil.open(name.toString());
- }
-
- @Override
- public boolean startInWriteAction() {
- return false;
- }
-}