diff --git a/platform/platform-resources/src/META-INF/XmlActions.xml b/platform/platform-resources/src/META-INF/XmlActions.xml index 5b4e97e19fe2..afb8af84a266 100644 --- a/platform/platform-resources/src/META-INF/XmlActions.xml +++ b/platform/platform-resources/src/META-INF/XmlActions.xml @@ -97,6 +97,19 @@ text="Update tag with Emmet" description="Update existing HTML tag with Emmet abbreviation"> + + + + + + + + + + + diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/actions/EmmetEditPointUtil.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/actions/EmmetEditPointUtil.java index 54da1a872fa5..24fd7faaeee1 100644 --- a/xml/impl/src/com/intellij/codeInsight/template/emmet/actions/EmmetEditPointUtil.java +++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/actions/EmmetEditPointUtil.java @@ -87,6 +87,7 @@ public class EmmetEditPointUtil { } static boolean isApplicableFile(PsiFile file) { + if (file == null) return false; for (Language language : file.getViewProvider().getLanguages()) { if (language.isKindOf(XMLLanguage.INSTANCE)) return true; } diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/actions/GoToEditPointAction.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/actions/GoToEditPointAction.java new file mode 100644 index 000000000000..f6c66a88931f --- /dev/null +++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/actions/GoToEditPointAction.java @@ -0,0 +1,59 @@ +/* + * Copyright 2000-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInsight.template.emmet.actions; + +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.DumbAwareAction; +import com.intellij.psi.PsiFile; +import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil; + +/** + * @author Dennis.Ushakov + */ +public abstract class GoToEditPointAction extends DumbAwareAction { + @Override + public void update(AnActionEvent e) { + final Editor editor = getEditor(e); + final PsiFile file = getFile(e); + final boolean isApplicable = editor != null && EmmetEditPointUtil.isApplicableFile(file); + e.getPresentation().setEnabledAndVisible(isApplicable); + } + + private static PsiFile getFile(AnActionEvent e) { + return CommonDataKeys.PSI_FILE.getData(e.getDataContext()); + } + + private static Editor getEditor(AnActionEvent e) { + final Editor editor = CommonDataKeys.EDITOR.getData(e.getDataContext()); + return editor != null ? InjectedLanguageUtil.getTopLevelEditor(editor) : null; + } + + public static class Forward extends GoToEditPointAction { + @Override + public void actionPerformed(AnActionEvent e) { + EmmetEditPointUtil.moveForward(getEditor(e), getFile(e)); + } + } + + public static class Backward extends GoToEditPointAction { + @Override + public void actionPerformed(AnActionEvent e) { + EmmetEditPointUtil.moveBackward(getEditor(e), getFile(e)); + } + } +}