From 855f93515ad98dd4ba9dbea3efa66401c3b828fd Mon Sep 17 00:00:00 2001
From: Cedric Ziel
Date: Tue, 9 Oct 2018 21:52:30 +0200
Subject: [PATCH 1/5] [T3CMS] Re-add icon line marker provider
---
.../idea/typo3/TYPO3CMSProjectSettings.java | 11 +-
.../cedricziel/idea/typo3/TYPO3Patterns.java | 31 +
.../codeInsight/IconLineMarkerProvider.java | 113 +
.../configuration/TYPO3CMSSettingsForm.form | 32 +-
.../configuration/TYPO3CMSSettingsForm.java | 8 +
.../idea/typo3/icons/IconReference.java | 10 +-
.../cedricziel/idea/typo3/icons/IconStub.java | 44 +-
.../idea/typo3/index/IconIndex.java | 207 +-
.../psi/visitor/CoreFlagParserVisitor.java | 18 +-
.../psi/visitor/CoreIconParserVisitor.java | 19 +-
.../src/main/resources/META-INF/plugin.xml | 2 +
.../IconLineMarkerProviderTest.java | 69 +
.../typo3/codeInsight/icon/IconRegistry7.php | 3082 +++++++++++++++
.../typo3/codeInsight/icon/IconRegistry8.php | 3479 +++++++++++++++++
.../typo3/codeInsight/icon/IconRegistry9.php | 861 ++++
.../general_utility_icon_provider_test.php | 29 +
.../codeInsight/icon/icon_definition_test.php | 55 +
.../codeInsight/icon/icon_provider_test.php | 4 +
18 files changed, 7919 insertions(+), 155 deletions(-)
create mode 100644 typo3-cms/src/main/java/com/cedricziel/idea/typo3/codeInsight/IconLineMarkerProvider.java
create mode 100644 typo3-cms/src/test/java/com/cedricziel/idea/typo3/codeInsight/IconLineMarkerProviderTest.java
create mode 100644 typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/IconRegistry7.php
create mode 100644 typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/IconRegistry8.php
create mode 100644 typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/IconRegistry9.php
create mode 100644 typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/general_utility_icon_provider_test.php
create mode 100644 typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/icon_definition_test.php
create mode 100644 typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/icon_provider_test.php
diff --git a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/TYPO3CMSProjectSettings.java b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/TYPO3CMSProjectSettings.java
index 67750468..2ffa4033 100644
--- a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/TYPO3CMSProjectSettings.java
+++ b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/TYPO3CMSProjectSettings.java
@@ -25,6 +25,8 @@ public class TYPO3CMSProjectSettings implements PersistentStateComponent connectSignalMethodNameString
return PlatformPatterns.psiElement(StringLiteralExpression.class)
.withSuperParent(2, PlatformPatterns.psiElement(MethodReference.class));
}
+
+ public static boolean iconAPIIconRetrieval(@NotNull PsiElement element) {
+ if (!PlatformPatterns
+ .and(
+ stringLeafElementPattern(),
+ PlatformPatterns.psiElement().withSuperParent(
+ 3, PlatformPatterns.psiElement(MethodReference.class)
+ )
+ )
+ .accepts(element)) {
+
+ return false;
+ }
+
+
+ MethodReference methodReference = (MethodReference) PsiTreeUtil.findFirstParent(element, e -> e instanceof MethodReference);
+
+ return methodReference.getName().equals("getIcon");
+ }
+
+ @NotNull
+ private static ElementPattern stringLeafElementPattern() {
+
+ return PlatformPatterns.or(
+ PlatformPatterns.psiElement(PhpTokenTypes.STRING_LITERAL_SINGLE_QUOTE).withParent(StringLiteralExpression.class),
+ PlatformPatterns.psiElement(PhpTokenTypes.STRING_LITERAL).withParent(StringLiteralExpression.class)
+ );
+ }
}
diff --git a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/codeInsight/IconLineMarkerProvider.java b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/codeInsight/IconLineMarkerProvider.java
new file mode 100644
index 00000000..a922d9d5
--- /dev/null
+++ b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/codeInsight/IconLineMarkerProvider.java
@@ -0,0 +1,113 @@
+package com.cedricziel.idea.typo3.codeInsight;
+
+import com.cedricziel.idea.typo3.TYPO3CMSIcons;
+import com.cedricziel.idea.typo3.TYPO3CMSProjectComponent;
+import com.cedricziel.idea.typo3.TYPO3CMSProjectSettings;
+import com.cedricziel.idea.typo3.TYPO3Patterns;
+import com.cedricziel.idea.typo3.icons.IconStub;
+import com.cedricziel.idea.typo3.index.IconIndex;
+import com.cedricziel.idea.typo3.util.IconUtil;
+import com.intellij.codeInsight.daemon.RelatedItemLineMarkerInfo;
+import com.intellij.codeInsight.daemon.RelatedItemLineMarkerProvider;
+import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.impl.source.tree.LeafPsiElement;
+import com.intellij.psi.util.PsiTreeUtil;
+import com.jetbrains.php.lang.psi.elements.PhpClass;
+import com.jetbrains.php.lang.psi.elements.StringLiteralExpression;
+import org.jetbrains.annotations.NotNull;
+
+import javax.swing.*;
+import java.io.IOException;
+import java.util.Collection;
+
+import static com.cedricziel.idea.typo3.util.IconUtil.createIconFromFile;
+
+public class IconLineMarkerProvider extends RelatedItemLineMarkerProvider {
+ @Override
+ protected void collectNavigationMarkers(@NotNull PsiElement element, @NotNull Collection super RelatedItemLineMarkerInfo> result) {
+
+ if (!TYPO3CMSProjectSettings.isEnabled(element)) {
+ return;
+ }
+
+ if (TYPO3CMSProjectSettings.getInstance(element).iconUsageGutterIconsEnabled) {
+ if (TYPO3Patterns.iconAPIIconRetrieval(element)) {
+ renderUsageMarker(element, result);
+ }
+ }
+
+ if (TYPO3CMSProjectSettings.getInstance(element).iconDefinitionGutterIconsEnabled) {
+ renderDefinitionMarker(element, result);
+ }
+ }
+
+ private void renderUsageMarker(PsiElement element, Collection super RelatedItemLineMarkerInfo> result) {
+ StringLiteralExpression literalExpression = (StringLiteralExpression) element.getParent();
+ String value = literalExpression.getContents();
+
+ if (value.isEmpty()) {
+ return;
+ }
+
+ if (!IconIndex.hasIcon(element.getProject(), value)) {
+ return;
+ }
+
+ IconIndex.getIcon(element.getProject(), value).forEach((s) -> markLineForIcon(element, result, s));
+ }
+
+ private void renderDefinitionMarker(PsiElement element, Collection super RelatedItemLineMarkerInfo> result) {
+ PhpClass parentClass = PsiTreeUtil.getParentOfType(element, PhpClass.class);
+ if (parentClass == null) {
+ return;
+ }
+
+ if (!parentClass.getPresentableFQN().equals(IconUtil.ICON_REGISTRY_CLASS)) {
+ return;
+ }
+
+ for (IconStub icon : IconIndex.getAllIcons(element.getProject())) {
+ if (icon.getElement().equals(element)) {
+ if (!(element instanceof LeafPsiElement)) {
+ LeafPsiElement leafChild = PsiTreeUtil.findChildOfType(element, LeafPsiElement.class);
+ if (leafChild != null) {
+ markLineForIcon(leafChild, result, icon);
+ }
+ } else {
+ markLineForIcon(element, result, icon);
+ }
+ }
+ }
+ }
+
+ private void markLineForIcon(PsiElement element, Collection super RelatedItemLineMarkerInfo> result, IconStub iconForLine) {
+ NavigationGutterIconBuilder builder;
+ VirtualFile virtualFile = iconForLine.getElement().getContainingFile().getVirtualFile();
+ if (virtualFile == null) {
+ builder = NavigationGutterIconBuilder
+ .create(TYPO3CMSIcons.ICON_NOT_RESOLVED)
+ .setTarget(iconForLine.getElement())
+ .setTooltipText("Navigate to icon definition");
+ } else {
+ try {
+ Icon icon = createIconFromFile(virtualFile);
+ if (icon == null) {
+ icon = TYPO3CMSIcons.ICON_NOT_RESOLVED;
+ }
+
+ builder = NavigationGutterIconBuilder
+ .create(icon)
+ .setTarget(iconForLine.getElement())
+ .setTooltipTitle("Navigate to icon definition");
+ } catch (IOException e) {
+ // icon could not be loaded
+ TYPO3CMSProjectComponent.getLogger().error("Could not find image.");
+ return;
+ }
+ }
+
+ result.add(builder.createLineMarkerInfo(element));
+ }
+}
diff --git a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/configuration/TYPO3CMSSettingsForm.form b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/configuration/TYPO3CMSSettingsForm.form
index 68d5824e..80403fe4 100644
--- a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/configuration/TYPO3CMSSettingsForm.form
+++ b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/configuration/TYPO3CMSSettingsForm.form
@@ -1,6 +1,6 @@
diff --git a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/configuration/TYPO3CMSSettingsForm.java b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/configuration/TYPO3CMSSettingsForm.java
index 69b1ff30..155f49b8 100644
--- a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/configuration/TYPO3CMSSettingsForm.java
+++ b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/configuration/TYPO3CMSSettingsForm.java
@@ -19,6 +19,8 @@ public class TYPO3CMSSettingsForm implements Configurable {
private JCheckBox routeAnnotatorEnabled;
private JCheckBox translationEnableTextFolding;
private JComboBox translationFavoriteLocale;
+ private JCheckBox iconUsageGutterIconsEnabled;
+ private JCheckBox iconDefinitionGutterIconsEnabled;
public TYPO3CMSSettingsForm(@NotNull Project project) {
this.project = project;
@@ -54,6 +56,8 @@ public boolean isModified() {
|| routeAnnotatorEnabled.isSelected() != getSettings().routeAnnotatorEnabled
|| translationEnableTextFolding.isSelected() != getSettings().translationEnableTextFolding
|| translationFavoriteLocale.getSelectedItem() != getSettings().translationFavoriteLocale
+ || iconUsageGutterIconsEnabled.isSelected() != getSettings().iconUsageGutterIconsEnabled
+ || iconDefinitionGutterIconsEnabled.isSelected() != getSettings().iconDefinitionGutterIconsEnabled
;
}
@@ -62,6 +66,8 @@ public void apply() {
getSettings().pluginEnabled = enablePlugin.isSelected();
getSettings().iconAnnotatorEnabled = iconAnnotatorEnabled.isSelected();
getSettings().routeAnnotatorEnabled = routeAnnotatorEnabled.isSelected();
+ getSettings().iconUsageGutterIconsEnabled = iconUsageGutterIconsEnabled.isSelected();
+ getSettings().iconDefinitionGutterIconsEnabled = iconDefinitionGutterIconsEnabled.isSelected();
getSettings().translationEnableTextFolding = translationEnableTextFolding.isSelected();
getSettings().translationFavoriteLocale = translationFavoriteLocale.getSelectedItem();
@@ -75,6 +81,8 @@ private void updateUIFromSettings() {
enablePlugin.setSelected(getSettings().pluginEnabled);
iconAnnotatorEnabled.setSelected(getSettings().iconAnnotatorEnabled);
routeAnnotatorEnabled.setSelected(getSettings().routeAnnotatorEnabled);
+ iconUsageGutterIconsEnabled.setSelected(getSettings().iconUsageGutterIconsEnabled);
+ iconDefinitionGutterIconsEnabled.setSelected(getSettings().iconDefinitionGutterIconsEnabled);
translationEnableTextFolding.setSelected(getSettings().translationEnableTextFolding);
translationFavoriteLocale.setSelectedItem(getSettings().translationFavoriteLocale);
diff --git a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/IconReference.java b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/IconReference.java
index a2ea2e66..0798f3c6 100644
--- a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/IconReference.java
+++ b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/IconReference.java
@@ -9,19 +9,23 @@
import com.jetbrains.php.lang.psi.elements.StringLiteralExpression;
import org.jetbrains.annotations.NotNull;
+import java.util.stream.Collectors;
+
public class IconReference extends PsiPolyVariantReferenceBase {
- private final String iconName;
+ private final String iconIdentifier;
public IconReference(StringLiteralExpression psiElement) {
super(psiElement);
- iconName = psiElement.getContents();
+ iconIdentifier = psiElement.getContents();
}
@NotNull
@Override
public ResolveResult[] multiResolve(boolean incompleteCode) {
- return PsiElementResolveResult.createResults(IconIndex.getIconDefinitionElements(myElement.getProject(), iconName));
+ return PsiElementResolveResult.createResults(
+ IconIndex.getIcon(myElement.getProject(), iconIdentifier).stream().map(IconStub::getElement).collect(Collectors.toList())
+ );
}
@NotNull
diff --git a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/IconStub.java b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/IconStub.java
index 184bab5e..84749aba 100644
--- a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/IconStub.java
+++ b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/IconStub.java
@@ -1,24 +1,20 @@
package com.cedricziel.idea.typo3.icons;
-import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
+import com.intellij.psi.SmartPointerManager;
+import com.intellij.psi.SmartPsiElementPointer;
-import java.io.Serializable;
-
-public class IconStub implements IconInterface, Serializable {
+public class IconStub implements IconInterface {
+ private final SmartPsiElementPointer element;
private String identifier;
- private String extension;
private String filename;
private String provider;
private String source;
- private TextRange textRange;
-
public IconStub(String identifier, PsiElement element) {
this.identifier = identifier;
-
- this.textRange = new TextRange(element.getTextRange().getStartOffset(), element.getTextRange().getEndOffset());
+ this.element = SmartPointerManager.createPointer(element);
}
public String getIdentifier() {
@@ -41,10 +37,6 @@ public void setSource(String source) {
this.source = source;
}
- public TextRange getTextRange() {
- return textRange;
- }
-
@Override
public String getExtension() {
return null;
@@ -69,29 +61,7 @@ public void setProvider(String provider) {
this.provider = provider;
}
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- IconStub iconStub = (IconStub) o;
-
- if (!identifier.equals(iconStub.identifier)) return false;
- if (extension != null ? !extension.equals(iconStub.extension) : iconStub.extension != null) return false;
- if (filename != null ? !filename.equals(iconStub.filename) : iconStub.filename != null) return false;
- if (provider != null ? !provider.equals(iconStub.provider) : iconStub.provider != null) return false;
- if (source != null ? !source.equals(iconStub.source) : iconStub.source != null) return false;
- return textRange.equals(iconStub.textRange);
- }
-
- @Override
- public int hashCode() {
- int result = identifier.hashCode();
- result = 31 * result + (extension != null ? extension.hashCode() : 0);
- result = 31 * result + (filename != null ? filename.hashCode() : 0);
- result = 31 * result + (provider != null ? provider.hashCode() : 0);
- result = 31 * result + (source != null ? source.hashCode() : 0);
- result = 31 * result + textRange.hashCode();
- return result;
+ public PsiElement getElement() {
+ return element.getElement();
}
}
diff --git a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/index/IconIndex.java b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/index/IconIndex.java
index 589b5dcb..dcad2a17 100644
--- a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/index/IconIndex.java
+++ b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/index/IconIndex.java
@@ -1,38 +1,42 @@
package com.cedricziel.idea.typo3.index;
import com.cedricziel.idea.typo3.icons.IconStub;
-import com.cedricziel.idea.typo3.index.externalizer.ObjectStreamDataExternalizer;
import com.cedricziel.idea.typo3.psi.visitor.CoreFlagParserVisitor;
import com.cedricziel.idea.typo3.psi.visitor.CoreIconParserVisitor;
import com.intellij.openapi.file.exclude.EnforcedPlainTextFileTypeManager;
-import com.intellij.openapi.file.exclude.ProjectPlainTextFileTypeManager;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.patterns.PlatformPatterns;
-import com.intellij.psi.PsiElement;
+import com.intellij.openapi.util.Key;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.search.GlobalSearchScope;
+import com.intellij.psi.util.CachedValue;
+import com.intellij.psi.util.CachedValueProvider;
+import com.intellij.psi.util.CachedValuesManager;
+import com.intellij.psi.util.PsiModificationTracker;
+import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.indexing.*;
-import com.intellij.util.io.DataExternalizer;
import com.intellij.util.io.EnumeratorStringDescriptor;
import com.intellij.util.io.KeyDescriptor;
-import com.jetbrains.php.lang.parser.PhpElementTypes;
import com.jetbrains.php.lang.psi.PhpFile;
import com.jetbrains.php.lang.psi.PhpPsiUtil;
-import com.jetbrains.php.lang.psi.elements.Field;
-import com.jetbrains.php.lang.psi.elements.Method;
import com.jetbrains.php.lang.psi.elements.PhpClass;
import gnu.trove.THashMap;
import org.jetbrains.annotations.NotNull;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
import static com.cedricziel.idea.typo3.util.IconUtil.ICON_REGISTRY_CLASS;
-public class IconIndex extends FileBasedIndexExtension {
+public class IconIndex extends ScalarIndexExtension {
- public static ID KEY = ID.create("com.cedricziel.idea.typo3.index.icon");
+ private static final Key>> TYPO3_CMS_ICON_USAGES = new Key<>("TYPO3_CMS_ICON_USAGES");
+ private static final Key> TYPO3_CMS_PROJECT_ICONS = new Key<>("TYPO3_CMS_PROJECT_ICONS");
+
+ public static ID KEY = ID.create("com.cedricziel.idea.typo3.index.icon");
@NotNull
public static Collection getAllAvailableIcons(@NotNull Project project) {
@@ -40,127 +44,140 @@ public static Collection getAllAvailableIcons(@NotNull Project project)
return FileBasedIndex.getInstance().getAllKeys(KEY, project);
}
- public static Map getIconDefinitionByIdentifier(@NotNull Project project, String iconIdentifier) {
- Set identifiers = new HashSet<>();
- identifiers.add(iconIdentifier);
-
- Map icons = new THashMap<>();
-
- FileBasedIndex.getInstance().getFilesWithKey(KEY, identifiers, virtualFile -> {
- FileBasedIndex.getInstance().processValues(KEY, iconIdentifier, virtualFile, (file, value) -> {
- icons.put(file, value);
-
- return true;
- }, GlobalSearchScope.allScope(project));
+ public static Collection getIcon(@NotNull Project project, @NotNull String iconIdentifier) {
+ List icons = new ArrayList<>();
- return true;
- }, GlobalSearchScope.allScope(project));
+ for (IconStub icon : getAllIcons(project)) {
+ if (icon.getIdentifier().equals(iconIdentifier)) {
+ icons.add(icon);
+ }
+ }
return icons;
}
@NotNull
- public static PsiElement[] getIconDefinitionElements(@NotNull Project project, @NotNull String identifier) {
- Map iconDefinitionByIdentifier = getIconDefinitionByIdentifier(project, identifier);
- if (iconDefinitionByIdentifier.size() > 0) {
- return iconDefinitionByIdentifier
- .keySet()
- .stream()
- .map(virtualFile -> {
- IconStub iconStub = iconDefinitionByIdentifier.get(virtualFile);
- PsiFile file = PsiManager.getInstance(project).findFile(virtualFile);
- return file != null ? file.findElementAt(iconStub.getTextRange().getStartOffset()) : null;
- })
- .filter(Objects::nonNull)
- .toArray(PsiElement[]::new);
+ public static IconStub[] getAllIcons(@NotNull Project project) {
+
+ CachedValue value = project.getUserData(TYPO3_CMS_PROJECT_ICONS);
+ if (value != null && value.hasUpToDateValue()) {
+ return value.getValue();
}
- return new PsiElement[0];
+ CachedValue cachedValue = CachedValuesManager.getManager(project).createCachedValue(() -> {
+ return CachedValueProvider.Result.create(getAllIconsUncached(project), PsiModificationTracker.MODIFICATION_COUNT);
+ }, false);
+
+ project.putUserData(TYPO3_CMS_PROJECT_ICONS, cachedValue);
+
+ return cachedValue.getValue();
}
@NotNull
- public static IconStub[] getAllIcons(@NotNull Project project) {
- List iconStubs = new ArrayList<>();
+ private static IconStub[] getAllIconsUncached(@NotNull Project project) {
+ Map iconStubs = new THashMap<>();
+
FileBasedIndex.getInstance().getAllKeys(IconIndex.KEY, project).forEach(k -> {
- List values = FileBasedIndex.getInstance().getValues(IconIndex.KEY, k, GlobalSearchScope.allScope(project));
- iconStubs.addAll(values);
+ FileBasedIndex.getInstance().getFilesWithKey(IconIndex.KEY, ContainerUtil.set(k), v -> {
+ PsiFile psiFile = PsiManager.getInstance(project).findFile(v);
+ if (psiFile instanceof PhpFile) {
+ visitPhpFile(iconStubs, (PhpFile) psiFile);
+ }
+
+ return true;
+ }, GlobalSearchScope.allScope(project));
});
- return iconStubs.toArray(new IconStub[iconStubs.size()]);
+ return iconStubs.values().toArray(new IconStub[0]);
+ }
+
+ public static boolean hasIcon(@NotNull Project project, @NotNull String iconIdentifier) {
+ AtomicBoolean iconExists = new AtomicBoolean(false);
+
+ FileBasedIndex.getInstance().processAllKeys(IconIndex.KEY, s -> {
+ if (s.equals(iconIdentifier)) {
+ iconExists.set(true);
+
+ return false;
+ }
+
+ return true;
+ }, project);
+
+ return iconExists.get();
}
@NotNull
@Override
- public ID getName() {
+ public ID getName() {
return KEY;
}
@NotNull
@Override
- public DataIndexer getIndexer() {
+ public DataIndexer getIndexer() {
return inputData -> {
- Map map = new THashMap<>();
+ Map iconIdentifiers = new THashMap<>();
// index the icon registry
- if (inputData.getPsiFile() instanceof PhpFile) {
- PhpClass iconRegistry = PhpPsiUtil.findClass((PhpFile) inputData.getPsiFile(), phpClass -> {
- String presentableFQN = phpClass.getPresentableFQN();
- return presentableFQN.equals(ICON_REGISTRY_CLASS);
- });
-
- if (iconRegistry != null) {
- for (PsiElement element : iconRegistry.getChildren()) {
- if (PlatformPatterns.psiElement(PhpElementTypes.CLASS_FIELDS).accepts(element)) {
- for (PsiElement fieldsInner : element.getChildren()) {
- if (PlatformPatterns.psiElement(PhpElementTypes.CLASS_FIELD).accepts(fieldsInner)) {
-
- Field field = (Field) fieldsInner;
-
- // TYPO3 7 through 8 use icons, 9 uses dynamic icons and the "staticIcons" field
- if (field.getName().equals("icons") || field.getName().equals("staticIcons")) {
- CoreIconParserVisitor visitor = new CoreIconParserVisitor();
- visitor.visitElement(field.getDefaultValue());
-
- Map map1 = visitor.getMap();map1.forEach(map::put);
- }
- }
- }
- }
-
- if (PlatformPatterns.psiElement(PhpElementTypes.CLASS_METHOD).accepts(element)) {
- Method method = (Method) element;
- if ("registerFlags".equals(method.getName())) {
- CoreFlagParserVisitor visitor = new CoreFlagParserVisitor();
- method.accept(visitor);
- visitor.visitElement(method);
-
- Map map1 = visitor.getMap();
- map1.forEach(map::put);
- }
- }
- }
- }
+ PsiFile psiFile = inputData.getPsiFile();
+ if (psiFile instanceof PhpFile) {
+ visitPhpFile(iconIdentifiers, (PhpFile) psiFile);
}
- return map;
+ Map result = new THashMap<>();
+ iconIdentifiers.forEach((k, v) -> result.put(k, null));
+
+ return result;
};
}
- @NotNull
- @Override
- public KeyDescriptor getKeyDescriptor() {
- return EnumeratorStringDescriptor.INSTANCE;
+ private static void visitPhpFile(Map iconIdentifiers, PhpFile psiFile) {
+ CachedValue
-->
+
diff --git a/typo3-cms/src/test/java/com/cedricziel/idea/typo3/codeInsight/IconLineMarkerProviderTest.java b/typo3-cms/src/test/java/com/cedricziel/idea/typo3/codeInsight/IconLineMarkerProviderTest.java
new file mode 100644
index 00000000..4ac5b29c
--- /dev/null
+++ b/typo3-cms/src/test/java/com/cedricziel/idea/typo3/codeInsight/IconLineMarkerProviderTest.java
@@ -0,0 +1,69 @@
+package com.cedricziel.idea.typo3.codeInsight;
+
+import com.cedricziel.idea.typo3.AbstractTestCase;
+import com.cedricziel.idea.typo3.TYPO3CMSProjectSettings;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiFile;
+
+public class IconLineMarkerProviderTest extends AbstractTestCase {
+ @Override
+ protected String getTestDataPath() {
+ return super.getTestDataPath() + "/codeInsight/icon";
+ }
+
+ public void testLineMarkerIsNotAddedIfPluginIsNotEnabled() {
+ disablePlugin();
+
+ myFixture.copyFileToProject("IconRegistry7.php");
+
+ PsiFile psiFile = myFixture.configureByFile("icon_provider_test.php");
+
+ PsiElement elementAt = psiFile.findElementAt(myFixture.getCaretOffset());
+ assertLineMarkerIsEmpty(elementAt);
+ }
+
+ public void testLineMarkerIsNotAddedIfPluginIsEnabledButFeatureTurnedOff() {
+ TYPO3CMSProjectSettings.getInstance(getProject()).iconUsageGutterIconsEnabled = false;
+
+ myFixture.copyFileToProject("IconRegistry7.php");
+
+ PsiFile psiFile = myFixture.configureByFile("icon_provider_test.php");
+
+ PsiElement elementAt = psiFile.findElementAt(myFixture.getCaretOffset());
+ assertLineMarkerIsEmpty(elementAt);
+ }
+
+ public void testLineMarkerIsAddedIfPluginIsEnabled() {
+ myFixture.copyFileToProject("IconRegistry7.php");
+
+ PsiFile psiFile = myFixture.configureByFile("icon_provider_test.php");
+
+ PsiElement elementAt = psiFile.findElementAt(myFixture.getCaretOffset());
+ assertLineMarker(elementAt, "Navigate to icon definition");
+ }
+
+ public void testDefinitionLineMarkerIsNotAddedIfPluginIsNotEnabled() {
+ disablePlugin();
+
+ PsiFile psiFile = myFixture.configureByFile("icon_definition_test.php");
+
+ PsiElement elementAt = psiFile.findElementAt(myFixture.getCaretOffset());
+ assertLineMarkerIsEmpty(elementAt);
+ }
+
+ public void testDefinitionLineMarkerIsNotAddedIfPluginIsEnabledButFeatureTurnedOff() {
+ TYPO3CMSProjectSettings.getInstance(getProject()).iconDefinitionGutterIconsEnabled = false;
+
+ PsiFile psiFile = myFixture.configureByFile("icon_definition_test.php");
+
+ PsiElement elementAt = psiFile.findElementAt(myFixture.getCaretOffset());
+ assertLineMarkerIsEmpty(elementAt);
+ }
+
+ public void testDefinitionLineMarkerIsAddedIfPluginIsEnabled() {
+ PsiFile psiFile = myFixture.configureByFile("icon_definition_test.php");
+
+ PsiElement elementAt = psiFile.findElementAt(myFixture.getCaretOffset());
+ assertLineMarker(elementAt, "Navigate to icon definition");
+ }
+}
diff --git a/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/IconRegistry7.php b/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/IconRegistry7.php
new file mode 100644
index 00000000..e0e4d67f
--- /dev/null
+++ b/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/IconRegistry7.php
@@ -0,0 +1,3082 @@
+ [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-add.svg'
+ ]
+ ],
+ 'actions-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-close.svg'
+ ]
+ ],
+ 'actions-database' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-database.svg'
+ ]
+ ],
+ 'actions-database-import' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-database-import.svg'
+ ]
+ ],
+ 'actions-database-reload' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-database-reload.svg'
+ ]
+ ],
+ 'actions-delete' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-delete.svg'
+ ]
+ ],
+ 'actions-document-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-close.svg'
+ ]
+ ],
+ 'actions-document-duplicates-select' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-duplicates-select.svg'
+ ]
+ ],
+ 'actions-document-edit-access' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-edit-access.svg'
+ ]
+ ],
+ 'actions-document-export-csv' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-export-csv.svg'
+ ]
+ ],
+ 'actions-document-export-t3d' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-export-t3d.svg'
+ ]
+ ],
+ 'actions-document-history-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-history-open.svg'
+ ]
+ ],
+ 'actions-document-import-t3d' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-import-t3d.svg'
+ ]
+ ],
+ 'actions-document-info' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-info.svg'
+ ]
+ ],
+ 'actions-document-localize' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-localize.svg'
+ ]
+ ],
+ 'actions-document-move' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-move.svg'
+ ]
+ ],
+ 'actions-document-new' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-new.svg'
+ ]
+ ],
+ 'actions-document-open-read-only' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-open-read-only.svg'
+ ]
+ ],
+ 'actions-document-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-open.svg'
+ ]
+ ],
+ 'actions-document-paste-after' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-paste-after.svg'
+ ]
+ ],
+ 'actions-document-paste-before' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-paste-before.svg'
+ ]
+ ],
+ 'actions-document-paste-into' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-paste-into.svg'
+ ]
+ ],
+ 'actions-document-paste' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-paste.svg'
+ ]
+ ],
+ 'actions-document-save-cleartranslationcache' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-save-cleartranslationcache.svg'
+ ]
+ ],
+ 'actions-document-save-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-save-close.svg'
+ ]
+ ],
+ 'actions-document-save-new' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-save-new.svg'
+ ]
+ ],
+ 'actions-document-save-translation' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-save-translation.svg'
+ ]
+ ],
+ 'actions-document-save-view' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-save-view.svg'
+ ]
+ ],
+ 'actions-document-save' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-save.svg'
+ ]
+ ],
+ 'actions-document-select' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-select.svg'
+ ]
+ ],
+ 'actions-document-synchronize' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-synchronize.svg'
+ ]
+ ],
+ 'actions-document-view' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-view.svg'
+ ]
+ ],
+ 'actions-document' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document.svg'
+ ]
+ ],
+ 'actions-download' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-download.svg'
+ ]
+ ],
+ 'actions-edit-add' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-add.svg'
+ ]
+ ],
+ 'actions-edit-copy-release' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-copy-release.svg'
+ ]
+ ],
+ 'actions-edit-copy' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-copy.svg'
+ ]
+ ],
+ 'actions-edit-cut-release' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-cut-release.svg'
+ ]
+ ],
+ 'actions-edit-cut' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-cut.svg'
+ ]
+ ],
+ 'actions-edit-delete' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-delete.svg'
+ ]
+ ],
+ 'actions-edit-download' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-download.svg'
+ ]
+ ],
+ 'actions-edit-hide' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-hide.svg'
+ ]
+ ],
+ 'actions-edit-insert-default' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-insert-default.svg'
+ ]
+ ],
+ 'actions-edit-localize-status-high' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-localize-status-high.svg'
+ ]
+ ],
+ 'actions-edit-localize-status-low' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-localize-status-low.svg'
+ ]
+ ],
+ 'actions-edit-merge-localization' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-merge-localization.svg'
+ ]
+ ],
+ 'actions-edit-pick-date' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-pick-date.svg'
+ ]
+ ],
+ 'actions-edit-rename' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-rename.svg'
+ ]
+ ],
+ 'actions-edit-replace' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-replace.svg'
+ ]
+ ],
+ 'actions-edit-restore' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-restore.svg'
+ ]
+ ],
+ 'actions-edit-undelete-edit' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-undelete-edit.svg'
+ ]
+ ],
+ 'actions-edit-undo' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-undo.svg'
+ ]
+ ],
+ 'actions-edit-unhide' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-unhide.svg'
+ ]
+ ],
+ 'actions-edit-upload' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-upload.svg'
+ ]
+ ],
+ 'actions-file-csv' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-file-csv.svg'
+ ]
+ ],
+ 'actions-file-html' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-file-html.svg'
+ ]
+ ],
+ 'actions-file-openoffice' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-file-openoffice.svg'
+ ]
+ ],
+ 'actions-file-pdf' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-file-pdf.svg'
+ ]
+ ],
+ 'actions-file' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-file.svg'
+ ]
+ ],
+ 'actions-filter' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-filter.svg'
+ ]
+ ],
+ 'actions-input-clear' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-input-clear.svg'
+ ]
+ ],
+ 'actions-insert-record' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-insert-record.svg'
+ ]
+ ],
+ 'actions-insert-reference' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-insert-reference.svg'
+ ]
+ ],
+ 'actions-localize' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-localize.svg'
+ ]
+ ],
+ 'actions-lock' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-lock.svg'
+ ]
+ ],
+ 'actions-logout' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-logout.svg'
+ ]
+ ],
+ 'actions-markstate' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-markstate.svg'
+ ]
+ ],
+ 'actions-merge' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-merge.svg'
+ ]
+ ],
+ 'actions-message-error-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-message-error-close.svg'
+ ]
+ ],
+ 'actions-message-information-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-message-information-close.svg'
+ ]
+ ],
+ 'actions-message-notice-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-message-notice-close.svg'
+ ]
+ ],
+ 'actions-message-ok-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-message-ok-close.svg'
+ ]
+ ],
+ 'actions-message-warning-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-message-warning-close.svg'
+ ]
+ ],
+ 'actions-move-down' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move-down.svg'
+ ]
+ ],
+ 'actions-move-left' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move-left.svg'
+ ]
+ ],
+ 'actions-move-move' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move-move.svg'
+ ]
+ ],
+ 'actions-move-right' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move-right.svg'
+ ]
+ ],
+ 'actions-move-to-bottom' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move-to-bottom.svg'
+ ]
+ ],
+ 'actions-move-to-top' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move-to-top.svg'
+ ]
+ ],
+ 'actions-move-up' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move-up.svg'
+ ]
+ ],
+ 'actions-move' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move.svg'
+ ]
+ ],
+ 'actions-online-media-add' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-online-media-add.svg'
+ ]
+ ],
+ 'actions-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-open.svg'
+ ]
+ ],
+ 'actions-page-move' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-page-move.svg'
+ ]
+ ],
+ 'actions-page-new' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-page-new.svg'
+ ]
+ ],
+ 'actions-page-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-page-open.svg'
+ ]
+ ],
+ 'actions-pagetree-collapse' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-pagetree-collapse.svg'
+ ]
+ ],
+ 'actions-pagetree-expand' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-pagetree-expand.svg'
+ ]
+ ],
+ 'actions-pagetree-mountroot' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-pagetree-mountroot.svg'
+ ]
+ ],
+ 'actions-preview' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-preview.svg'
+ ]
+ ],
+ 'actions-refresh' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-refresh.svg'
+ ]
+ ],
+ 'actions-remove' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-remove.svg'
+ ]
+ ],
+ 'actions-search' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-search.svg'
+ ]
+ ],
+ 'actions-selection-delete' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-selection-delete.svg'
+ ]
+ ],
+ 'actions-swap' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-swap.svg'
+ ]
+ ],
+ 'actions-synchronize' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-synchronize.svg'
+ ]
+ ],
+ 'actions-system-backend-user-emulate' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-backend-user-emulate.svg'
+ ]
+ ],
+ 'actions-system-backend-user-switch' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-backend-user-switch.svg'
+ ]
+ ],
+ 'actions-system-cache-clear-impact-high' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-cache-clear-impact-high.svg'
+ ]
+ ],
+ 'actions-system-cache-clear-impact-low' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-cache-clear-impact-low.svg'
+ ]
+ ],
+ 'actions-system-cache-clear-impact-medium' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-cache-clear-impact-medium.svg'
+ ]
+ ],
+ 'actions-system-cache-clear-rte' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-cache-clear-rte.svg'
+ ]
+ ],
+ 'actions-system-cache-clear' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-cache-clear.svg'
+ ]
+ ],
+ 'actions-system-extension-configure' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-configure.svg'
+ ]
+ ],
+ 'actions-system-extension-documentation' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-documentation.svg'
+ ]
+ ],
+ 'actions-system-extension-download' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-download.svg'
+ ]
+ ],
+ 'actions-system-extension-import' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-import.svg'
+ ]
+ ],
+ 'actions-system-extension-install' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-install.svg'
+ ]
+ ],
+ 'actions-system-extension-sqldump' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-sqldump.svg'
+ ]
+ ],
+ 'actions-system-extension-uninstall' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-uninstall.svg'
+ ]
+ ],
+ 'actions-system-extension-update-disable' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-update-disable.svg'
+ ]
+ ],
+ 'actions-system-extension-update' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-update.svg'
+ ]
+ ],
+ 'actions-system-help-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-help-open.svg'
+ ]
+ ],
+ 'actions-system-list-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-list-open.svg'
+ ]
+ ],
+ 'actions-system-options-view' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-options-view.svg'
+ ]
+ ],
+ 'actions-system-pagemodule-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-pagemodule-open.svg'
+ ]
+ ],
+ 'actions-system-refresh' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-refresh.svg'
+ ]
+ ],
+ 'actions-system-shortcut-active' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-shortcut-active.svg'
+ ]
+ ],
+ 'actions-system-shortcut-new' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-shortcut-new.svg'
+ ]
+ ],
+ 'actions-system-tree-search-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-tree-search-open.svg'
+ ]
+ ],
+ 'actions-system-typoscript-documentation-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-typoscript-documentation-open.svg'
+ ]
+ ],
+ 'actions-system-typoscript-documentation' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-typoscript-documentation.svg'
+ ]
+ ],
+ 'actions-template-new' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-template-new.svg'
+ ]
+ ],
+ 'actions-unlock' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-unlock.svg'
+ ]
+ ],
+ 'actions-unmarkstate' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-unmarkstate.svg'
+ ]
+ ],
+ 'actions-upload' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-upload.svg'
+ ]
+ ],
+ 'actions-version-document-remove' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-version-document-remove.svg'
+ ]
+ ],
+ 'actions-version-page-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-version-page-open.svg'
+ ]
+ ],
+ 'actions-version-swap-version' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-version-swap-version.svg'
+ ]
+ ],
+ 'actions-version-swap-workspace' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-version-swap-workspace.svg'
+ ]
+ ],
+ 'actions-version-workspace-preview' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-version-workspace-preview.svg'
+ ]
+ ],
+ 'actions-version-workspace-sendtostage' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-version-workspace-sendtostage.svg'
+ ]
+ ],
+ 'actions-view-go-back' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-go-back.svg'
+ ]
+ ],
+ 'actions-view-go-down' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-go-down.svg'
+ ]
+ ],
+ 'actions-view-go-forward' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-go-forward.svg'
+ ]
+ ],
+ 'actions-view-go-up' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-go-up.svg'
+ ]
+ ],
+ 'actions-view-list-collapse' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-list-collapse.svg'
+ ]
+ ],
+ 'actions-view-list-expand' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-list-expand.svg'
+ ]
+ ],
+ 'actions-view-paging-first-disabled' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-first-disabled.svg'
+ ]
+ ],
+ 'actions-view-paging-first' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-first.svg'
+ ]
+ ],
+ 'actions-view-paging-last-disabled' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-last-disabled.svg'
+ ]
+ ],
+ 'actions-view-paging-last' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-last.svg'
+ ]
+ ],
+ 'actions-view-paging-next-disabled' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-next-disabled.svg'
+ ]
+ ],
+ 'actions-view-paging-next' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-next.svg'
+ ]
+ ],
+ 'actions-view-paging-previous-disabled' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-previous-disabled.svg'
+ ]
+ ],
+ 'actions-view-paging-previous' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-previous.svg'
+ ]
+ ],
+ 'actions-view-table-collapse' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-table-collapse.svg'
+ ]
+ ],
+ 'actions-view-table-expand' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-table-expand.svg'
+ ]
+ ],
+ 'actions-view' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view.svg'
+ ]
+ ],
+ 'actions-window-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-window-open.svg'
+ ]
+ ],
+ 'actions-wizard-link' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'link'
+ ]
+ ],
+ 'actions-wizard-rte' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'arrows-alt'
+ ]
+ ],
+ // Apps
+ 'apps-clipboard-images' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-clipboard-images.svg'
+ ]
+ ],
+ 'apps-clipboard-list' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-clipboard-list.svg'
+ ]
+ ],
+ 'apps-filetree-folder-add' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-add.svg'
+ ]
+ ],
+ 'apps-filetree-folder-default' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-default.svg'
+ ]
+ ],
+ 'apps-filetree-folder-list' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-list.svg'
+ ]
+ ],
+ 'apps-filetree-folder-locked' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-locked.svg'
+ ]
+ ],
+ 'apps-filetree-folder-media' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-media.svg'
+ ]
+ ],
+ 'apps-filetree-folder-news' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-news.svg'
+ ]
+ ],
+ 'apps-filetree-folder-opened' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-opened.svg'
+ ]
+ ],
+ 'apps-filetree-folder-recycler' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-recycler.svg'
+ ]
+ ],
+ 'apps-filetree-folder-temp' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-temp.svg'
+ ]
+ ],
+ 'apps-filetree-folder-user' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-user.svg'
+ ]
+ ],
+ 'apps-filetree-folder' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder.svg'
+ ]
+ ],
+ 'apps-filetree-mount' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-mount.svg'
+ ]
+ ],
+ 'apps-filetree-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-root.svg'
+ ]
+ ],
+ 'apps-irre-collapsed' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-irre-collapsed.svg'
+ ]
+ ],
+ 'apps-irre-expanded' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-irre-expanded.svg'
+ ]
+ ],
+ 'apps-pagetree-backend-user-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-backend-user-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-backend-user' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-backend-user.svg'
+ ]
+ ],
+ 'apps-pagetree-collapse' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-collapse.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-copy-above' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-copy-above.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-copy-below' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-copy-below.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-move-above' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-move-above.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-move-below' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-move-below.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-move-between' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-move-between.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-move-into' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-move-into.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-new-between' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-new-between.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-new-inside' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-new-inside.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-place-denied' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-place-denied.svg'
+ ]
+ ],
+ 'apps-pagetree-expand' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-expand.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-contains-approve' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-contains-approve.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-contains-board' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-contains-board.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-contains-fe_users' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-contains-fe_users.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-contains-news' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-contains-news.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-contains-shop' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-contains-shop.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-contains' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-contains.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-default' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-default.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-advanced-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-advanced-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-advanced-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-advanced-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-advanced' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-advanced.svg'
+ ]
+ ],
+ 'apps-pagetree-page-backend-user-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-backend-user-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-backend-user-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-backend-user-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-backend-user' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-backend-user.svg'
+ ]
+ ],
+ 'apps-pagetree-page-backend-users-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-backend-users-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-backend-users-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-backend-users-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-backend-users' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-backend-users.svg'
+ ]
+ ],
+ 'apps-pagetree-page-content-from-page-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-content-from-page-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-content-from-page-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-content-from-page-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-content-from-page' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-content-from-page.svg'
+ ]
+ ],
+ 'apps-pagetree-page-default' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-default.svg'
+ ]
+ ],
+ 'apps-pagetree-page-domain' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-domain.svg'
+ ]
+ ],
+ 'apps-pagetree-page-frontend-user-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-frontend-user-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-frontend-user-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-frontend-user-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-frontend-user' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-frontend-user.svg'
+ ]
+ ],
+ 'apps-pagetree-page-frontend-users-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-frontend-users-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-frontend-users-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-frontend-users-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-frontend-users' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-frontend-users.svg'
+ ]
+ ],
+ 'apps-pagetree-page-mountpoint-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-mountpoint-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-mountpoint-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-mountpoint-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-mountpoint' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-mountpoint.svg'
+ ]
+ ],
+ 'apps-pagetree-page-not-in-menu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-not-in-menu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-recycler-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-recycler-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-recycler' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-recycler.svg'
+ ]
+ ],
+ 'apps-pagetree-page-shortcut-external-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-shortcut-external-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-shortcut-external-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-shortcut-external-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-shortcut-external' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-shortcut-external.svg'
+ ]
+ ],
+ 'apps-pagetree-page-shortcut-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-shortcut-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-shortcut-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-shortcut-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-shortcut' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-shortcut.svg'
+ ]
+ ],
+ 'apps-pagetree-page' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page.svg'
+ ]
+ ],
+ 'apps-pagetree-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-root.svg'
+ ]
+ ],
+ 'apps-pagetree-spacer-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-spacer-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-spacer-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-spacer-root.svg'
+ ]
+ ],
+ 'apps-pagetree-spacer' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-spacer.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-actions' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-actions.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-cache' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-cache.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-help' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-help.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-opendocs' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-opendocs.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-search' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-search.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-shortcut' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-shortcut.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-systeminformation' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-systeminformation.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-workspace' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-workspace.svg'
+ ]
+ ],
+
+ // Avatar
+ 'avatar-default' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/avatar/avatar-default.svg'
+ ]
+ ],
+
+ // Content
+ 'content-accordion' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-accordion.svg'
+ ]
+ ],
+ 'content-audio' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-audio.svg'
+ ]
+ ],
+ 'content-briefcase' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-briefcase.svg'
+ ]
+ ],
+ 'content-beside-text-img-above-center' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-above-center.svg'
+ ]
+ ],
+ 'content-beside-text-img-above-left' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-above-left.svg'
+ ]
+ ],
+ 'content-beside-text-img-above-right' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-above-right.svg'
+ ]
+ ],
+ 'content-beside-text-img-below-center' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-below-center.svg'
+ ]
+ ],
+ 'content-beside-text-img-below-left' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-below-left.svg'
+ ]
+ ],
+ 'content-beside-text-img-below-right' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-below-right.svg'
+ ]
+ ],
+ 'content-beside-text-img-left' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-left.svg'
+ ]
+ ],
+ 'content-beside-text-img-right' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-right.svg'
+ ]
+ ],
+ 'content-bullets' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-bullets.svg'
+ ]
+ ],
+ 'content-carousel-header' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-carousel-header.svg'
+ ]
+ ],
+ 'content-carousel-html' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-carousel-html.svg'
+ ]
+ ],
+ 'content-carousel-image' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-carousel-image.svg'
+ ]
+ ],
+ 'content-carousel' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-carousel.svg'
+ ]
+ ],
+ 'content-coffee' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-coffee.svg'
+ ]
+ ],
+ 'content-elements-login' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-elements-login.svg'
+ ]
+ ],
+ 'content-elements-mailform' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-elements-mailform.svg'
+ ]
+ ],
+ 'content-elements-searchform' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-elements-searchform.svg'
+ ]
+ ],
+ 'content-form' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-form.svg'
+ ]
+ ],
+ 'content-header' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-header.svg'
+ ]
+ ],
+ 'content-idea' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-idea.svg'
+ ]
+ ],
+ 'content-image' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-image.svg'
+ ]
+ ],
+ 'content-info' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-info.svg'
+ ]
+ ],
+ 'content-menu-thumbnail' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-thumbnail.svg'
+ ]
+ ],
+ 'content-news' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-news.svg'
+ ]
+ ],
+ 'content-panel' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-panel.svg'
+ ]
+ ],
+ 'content-plugin' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-plugin.svg'
+ ]
+ ],
+ 'content-quote' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-quote.svg'
+ ]
+ ],
+ 'content-special-div' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-special-div.svg'
+ ]
+ ],
+ 'content-special-html' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-special-html.svg'
+ ]
+ ],
+ 'content-special-indexed_search' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-special-indexed_search.svg'
+ ]
+ ],
+ 'content-special-menu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-special-menu.svg'
+ ]
+ ],
+ 'content-special-shortcut' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-special-shortcut.svg'
+ ]
+ ],
+ 'content-special-uploads' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-special-uploads.svg'
+ ]
+ ],
+ 'content-tab-item' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-tab-item.svg'
+ ]
+ ],
+ 'content-tab' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-tab.svg'
+ ]
+ ],
+ 'content-table' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-table.svg'
+ ]
+ ],
+ 'content-text-columns' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-text-columns.svg'
+ ]
+ ],
+ 'content-text-teaser' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-text-teaser.svg'
+ ]
+ ],
+ 'content-text' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-text.svg'
+ ]
+ ],
+ 'content-textpic' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-textpic.svg'
+ ]
+ ],
+ 'content-special-media' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:frontend/Resources/Public/Icons/ContentElementWizard/multimedia.gif'
+ ]
+ ],
+
+ // Default
+ 'default-not-found' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/default/default-not-found.svg'
+ ]
+ ],
+
+ // Mimetypes
+ 'mimetypes-application' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-application.svg'
+ ]
+ ],
+ 'mimetypes-compressed' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-compressed.svg'
+ ]
+ ],
+ 'mimetypes-excel' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-excel.svg'
+ ]
+ ],
+ 'mimetypes-media-audio' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-media-audio.svg'
+ ]
+ ],
+ 'mimetypes-media-flash' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-media-flash.svg'
+ ]
+ ],
+ 'mimetypes-media-image' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-media-image.svg'
+ ]
+ ],
+ 'mimetypes-media-video-vimeo' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-media-video-vimeo.svg'
+ ]
+ ],
+ 'mimetypes-media-video-youtube' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-media-video-youtube.svg'
+ ]
+ ],
+ 'mimetypes-media-video' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-media-video.svg'
+ ]
+ ],
+ 'mimetypes-open-document-database' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-open-document-database.svg'
+ ]
+ ],
+ 'mimetypes-open-document-drawing' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-open-document-drawing.svg'
+ ]
+ ],
+ 'mimetypes-open-document-formula' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-open-document-formula.svg'
+ ]
+ ],
+ 'mimetypes-open-document-presentation' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-open-document-presentation.svg'
+ ]
+ ],
+ 'mimetypes-open-document-spreadsheet' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-open-document-spreadsheet.svg'
+ ]
+ ],
+ 'mimetypes-open-document-text' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-open-document-text.svg'
+ ]
+ ],
+ 'mimetypes-other-other' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-other-other.svg'
+ ]
+ ],
+ 'mimetypes-pdf' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-pdf.svg'
+ ]
+ ],
+ 'mimetypes-powerpoint' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-powerpoint.svg'
+ ]
+ ],
+ 'mimetypes-text-css' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-text-css.svg'
+ ]
+ ],
+ 'mimetypes-text-csv' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-text-csv.svg'
+ ]
+ ],
+ 'mimetypes-text-html' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-text-html.svg'
+ ]
+ ],
+ 'mimetypes-text-js' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-text-js.svg'
+ ]
+ ],
+ 'mimetypes-text-php' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-text-php.svg'
+ ]
+ ],
+ 'mimetypes-text-text' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-text-text.svg'
+ ]
+ ],
+ 'mimetypes-text-ts' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-text-ts.svg'
+ ]
+ ],
+ 'mimetypes-word' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-word.svg'
+ ]
+ ],
+ 'mimetypes-x-backend_layout' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-backend_layout.svg'
+ ]
+ ],
+ 'mimetypes-x-content-divider' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-divider.svg'
+ ]
+ ],
+ 'mimetypes-x-content-domain' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-domain.svg'
+ ]
+ ],
+ 'mimetypes-x-content-form-search' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-form-search.svg'
+ ]
+ ],
+ 'mimetypes-x-content-form' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-form.svg'
+ ]
+ ],
+ 'mimetypes-x-content-header' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-header.svg'
+ ]
+ ],
+ 'mimetypes-x-content-html' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-html.svg'
+ ]
+ ],
+ 'mimetypes-x-content-image' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-image.svg'
+ ]
+ ],
+ 'mimetypes-x-content-link' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-link.svg'
+ ]
+ ],
+ 'mimetypes-x-content-list-bullets' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-list-bullets.svg'
+ ]
+ ],
+ 'mimetypes-x-content-list-files' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-list-files.svg'
+ ]
+ ],
+ 'mimetypes-x-content-login' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-login.svg'
+ ]
+ ],
+ 'mimetypes-x-content-menu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-menu.svg'
+ ]
+ ],
+ 'mimetypes-x-content-multimedia' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-multimedia.svg'
+ ]
+ ],
+ 'mimetypes-x-content-page-language-overlay' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-page-language-overlay.svg'
+ ]
+ ],
+ 'mimetypes-x-content-plugin' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-plugin.svg'
+ ]
+ ],
+ 'mimetypes-x-content-script' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-script.svg'
+ ]
+ ],
+ 'mimetypes-x-content-table' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-table.svg'
+ ]
+ ],
+ 'mimetypes-x-content-template-extension' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-template-extension.svg'
+ ]
+ ],
+ 'mimetypes-x-content-template-static' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-template-static.svg'
+ ]
+ ],
+ 'mimetypes-x-content-template' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-template.svg'
+ ]
+ ],
+ 'mimetypes-x-content-text-picture' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-text-picture.svg'
+ ]
+ ],
+ 'mimetypes-x-content-text' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-text.svg'
+ ]
+ ],
+ 'mimetypes-x-index_config' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-index_config.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_action' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-sys_action.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_category' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-sys_category.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_filemounts' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-sys_filemounts.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_language' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-sys_language.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_news' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-sys_news.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_note' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-sys_note.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_workspace' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-sys_workspace.svg'
+ ]
+ ],
+ 'mimetypes-x-tx_rtehtmlarea_acronym' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-tx_rtehtmlarea_acronym.svg'
+ ]
+ ],
+ 'mimetypes-x-tx_scheduler_task_group' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-tx_scheduler_task_group.svg'
+ ]
+ ],
+ 'mimetypes-x-content-text-media' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-text-picture.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_file_storage' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:t3skin/icons/gfx/i/_icon_ftp.gif'
+ ]
+ ],
+
+ // Miscellaneous
+ 'miscellaneous-placeholder' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/miscellaneous/miscellaneous-placeholder.svg'
+ ]
+ ],
+
+ // Module
+ 'module-web' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'file-o'
+ ]
+ ],
+ 'module-file' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'image'
+ ]
+ ],
+ 'module-tools' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'rocket'
+ ]
+ ],
+ 'module-system' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'plug'
+ ]
+ ],
+ 'module-help' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'question-circle'
+ ]
+ ],
+
+ // Overlay
+ 'overlay-advanced' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-advanced.svg'
+ ]
+ ],
+ 'overlay-approved' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-approved.svg'
+ ]
+ ],
+ 'overlay-backenduser' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-backenduser.svg'
+ ]
+ ],
+ 'overlay-backendusers' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-backendusers.svg'
+ ]
+ ],
+ 'overlay-deleted' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-deleted.svg'
+ ]
+ ],
+ 'overlay-edit' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-edit.svg'
+ ]
+ ],
+ 'overlay-external-link' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-external-link.svg'
+ ]
+ ],
+ 'overlay-frontenduser' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-frontenduser.svg'
+ ]
+ ],
+ 'overlay-frontendusers' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-frontendusers.svg'
+ ]
+ ],
+ 'overlay-hidden' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-hidden.svg'
+ ]
+ ],
+ 'overlay-includes-subpages' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-includes-subpages.svg'
+ ]
+ ],
+ 'overlay-info' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-info.svg'
+ ]
+ ],
+ 'overlay-list' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-list.svg'
+ ]
+ ],
+ 'overlay-locked' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-locked.svg'
+ ]
+ ],
+ 'overlay-media' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-media.svg'
+ ]
+ ],
+ 'overlay-missing' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-missing.svg'
+ ]
+ ],
+ 'overlay-mountpoint' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-mountpoint.svg'
+ ]
+ ],
+ 'overlay-new' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-new.svg'
+ ]
+ ],
+ 'overlay-news' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-news.svg'
+ ]
+ ],
+ 'overlay-readonly' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-readonly.svg'
+ ]
+ ],
+ 'overlay-restricted' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-restricted.svg'
+ ]
+ ],
+ 'overlay-scheduled' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-scheduled.svg'
+ ]
+ ],
+ 'overlay-shop' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-shop.svg'
+ ]
+ ],
+ 'overlay-shortcut' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-shortcut.svg'
+ ]
+ ],
+ 'overlay-translated' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-translated.svg'
+ ]
+ ],
+ 'overlay-warning' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-warning.svg'
+ ]
+ ],
+
+ // Spinner
+ 'spinner-circle-dark' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/spinner/spinner-circle-dark.svg',
+ 'spinning' => true
+ ]
+ ],
+ 'spinner-circle-light' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/spinner/spinner-circle-light.svg',
+ 'spinning' => true
+ ]
+ ],
+ 'spinner-circle' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/spinner/spinner-circle.svg',
+ 'spinning' => true
+ ]
+ ],
+
+ // Status
+ 'status-user-admin' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/status/status-user-admin.svg'
+ ]
+ ],
+ 'status-user-backend' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/status/status-user-backend.svg'
+ ]
+ ],
+ 'status-user-frontend' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/status/status-user-frontend.svg'
+ ]
+ ],
+ 'status-user-group-backend' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/status/status-user-group-backend.svg'
+ ]
+ ],
+ 'status-user-group-frontend' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/status/status-user-group-frontend.svg'
+ ]
+ ],
+ 'status-dialog-information' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'exclamation-circle'
+ ]
+ ],
+ 'status-dialog-ok' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'check-circle',
+ ]
+ ],
+ 'status-dialog-notification' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'exclamation-circle'
+ ]
+ ],
+ 'status-dialog-warning' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'exclamation-triangle'
+ ]
+ ],
+ 'status-dialog-error' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'exclamation-circle'
+ ]
+ ],
+ 'status-warning-lock' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:t3skin/images/icons/status/warning-lock.png'
+ ]
+ ],
+ 'status-warning-in-use' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:t3skin/images/icons/status/warning-in-use.png'
+ ]
+ ],
+ 'status-status-checked' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'check',
+ ]
+ ],
+ 'status-status-current' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'caret-right',
+ ]
+ ],
+ 'status-status-locked' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'lock',
+ ]
+ ],
+ 'status-status-reference-hard' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:t3skin/images/icons/status/status-reference-hard.png',
+ ]
+ ],
+ 'status-status-sorting-asc' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'caret-up',
+ ]
+ ],
+ 'status-status-sorting-desc' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'caret-down',
+ ]
+ ],
+ 'status-status-sorting-light-asc' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'caret-up',
+ ]
+ ],
+ 'status-status-sorting-light-desc' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'caret-down',
+ ]
+ ],
+ 'status-status-permission-granted' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'check',
+ ]
+ ],
+ 'status-status-permission-denied' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'times',
+ ]
+ ],
+ 'status-status-reference-soft' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:t3skin/images/icons/status/status-reference-soft.png',
+ ]
+ ],
+ 'status-status-edit-read-only' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:t3skin/images/icons/status/status-edit-read-only.png',
+ ]
+ ],
+
+ // Extensions
+ 'extensions-extensionmanager-update-script' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'refresh',
+ ]
+ ],
+ 'extensions-scheduler-run-task' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'play-circle',
+ ]
+ ],
+ 'extensions-workspaces-generatepreviewlink' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:workspaces/Resources/Public/Images/generate-ws-preview-link.png'
+ ]
+ ],
+
+ // Empty
+ 'empty-empty' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'empty-empty',
+ ]
+ ],
+
+ // System Information
+ 'sysinfo-php-version' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'code'
+ ]
+ ],
+ 'sysinfo-database' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'database'
+ ]
+ ],
+ 'sysinfo-application-context' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'tasks'
+ ]
+ ],
+ 'sysinfo-composer-mode' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'music'
+ ]
+ ],
+ 'sysinfo-git' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'git'
+ ]
+ ],
+ 'sysinfo-webserver' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'server'
+ ]
+ ],
+ 'sysinfo-os-linux' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'linux'
+ ]
+ ],
+ 'sysinfo-os-apple' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'apple'
+ ]
+ ],
+ 'sysinfo-os-windows' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'windows'
+ ]
+ ],
+
+ // Sysnote
+ 'sysnote-type-0' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'sticky-note-o'
+ ]
+ ],
+ 'sysnote-type-1' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'cog'
+ ]
+ ],
+ 'sysnote-type-2' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'code'
+ ]
+ ],
+ 'sysnote-type-3' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'thumb-tack'
+ ]
+ ],
+ 'sysnote-type-4' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'check-square'
+ ]
+ ],
+
+ // Flags will be auto-registered after we have the SVG files
+ 'flags-multiple' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/multiple.png'
+ ]
+ ],
+ 'flags-an' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/an.png'
+ ]
+ ],
+ 'flags-catalonia' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/catalonia.png'
+ ]
+ ],
+ 'flags-cs' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/cs.png'
+ ]
+ ],
+ 'flags-en-us-gb' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/en_us-gb.png'
+ ]
+ ],
+ 'flags-fam' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/fam.png'
+ ]
+ ],
+ 'flags-qc' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/qc.png'
+ ]
+ ],
+ 'flags-scotland' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/scotland.png'
+ ]
+ ],
+ 'flags-wales' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/wales.png'
+ ]
+ ],
+ ];
+
+ /**
+ * Mapping of file extensions to mimetypes
+ *
+ * @var string[]
+ */
+ protected $fileExtensionMapping = [
+ 'htm' => 'mimetypes-text-html',
+ 'html' => 'mimetypes-text-html',
+ 'css' => 'mimetypes-text-css',
+ 'js' => 'mimetypes-text-js',
+ 'csv' => 'mimetypes-text-csv',
+ 'php' => 'mimetypes-text-php',
+ 'php6' => 'mimetypes-text-php',
+ 'php5' => 'mimetypes-text-php',
+ 'php4' => 'mimetypes-text-php',
+ 'php3' => 'mimetypes-text-php',
+ 'inc' => 'mimetypes-text-php',
+ 'ts' => 'mimetypes-text-ts',
+ 'txt' => 'mimetypes-text-text',
+ 'class' => 'mimetypes-text-text',
+ 'tmpl' => 'mimetypes-text-text',
+ 'jpg' => 'mimetypes-media-image',
+ 'jpeg' => 'mimetypes-media-image',
+ 'gif' => 'mimetypes-media-image',
+ 'png' => 'mimetypes-media-image',
+ 'bmp' => 'mimetypes-media-image',
+ 'tif' => 'mimetypes-media-image',
+ 'tiff' => 'mimetypes-media-image',
+ 'tga' => 'mimetypes-media-image',
+ 'psd' => 'mimetypes-media-image',
+ 'eps' => 'mimetypes-media-image',
+ 'ai' => 'mimetypes-media-image',
+ 'svg' => 'mimetypes-media-image',
+ 'pcx' => 'mimetypes-media-image',
+ 'avi' => 'mimetypes-media-video',
+ 'mpg' => 'mimetypes-media-video',
+ 'mpeg' => 'mimetypes-media-video',
+ 'mov' => 'mimetypes-media-video',
+ 'vimeo' => 'mimetypes-media-video-vimeo',
+ 'youtube' => 'mimetypes-media-video-youtube',
+ 'wav' => 'mimetypes-media-audio',
+ 'mp3' => 'mimetypes-media-audio',
+ 'mid' => 'mimetypes-media-audio',
+ 'swf' => 'mimetypes-media-flash',
+ 'swa' => 'mimetypes-media-flash',
+ 'exe' => 'mimetypes-application',
+ 'com' => 'mimetypes-application',
+ 't3x' => 'mimetypes-compressed',
+ 't3d' => 'mimetypes-compressed',
+ 'zip' => 'mimetypes-compressed',
+ 'tgz' => 'mimetypes-compressed',
+ 'gz' => 'mimetypes-compressed',
+ 'pdf' => 'mimetypes-pdf',
+ 'doc' => 'mimetypes-word',
+ 'dot' => 'mimetypes-word',
+ 'docm' => 'mimetypes-word',
+ 'docx' => 'mimetypes-word',
+ 'dotm' => 'mimetypes-word',
+ 'dotx' => 'mimetypes-word',
+ 'sxw' => 'mimetypes-word',
+ 'rtf' => 'mimetypes-word',
+ 'xls' => 'mimetypes-excel',
+ 'xlsm' => 'mimetypes-excel',
+ 'xlsx' => 'mimetypes-excel',
+ 'xltm' => 'mimetypes-excel',
+ 'xltx' => 'mimetypes-excel',
+ 'sxc' => 'mimetypes-excel',
+ 'pps' => 'mimetypes-powerpoint',
+ 'ppsx' => 'mimetypes-powerpoint',
+ 'ppt' => 'mimetypes-powerpoint',
+ 'pptm' => 'mimetypes-powerpoint',
+ 'pptx' => 'mimetypes-powerpoint',
+ 'potm' => 'mimetypes-powerpoint',
+ 'potx' => 'mimetypes-powerpoint',
+ 'mount' => 'apps-filetree-mount',
+ 'folder' => 'apps-filetree-folder-default',
+ 'default' => 'mimetypes-other-other',
+ ];
+
+ /**
+ * Mapping of mime types to icons
+ *
+ * @var string[]
+ */
+ protected $mimeTypeMapping = [
+ 'video/*' => 'mimetypes-media-video',
+ 'audio/*' => 'mimetypes-media-audio',
+ 'image/*' => 'mimetypes-media-image',
+ 'text/*' => 'mimetypes-text-text',
+ ];
+
+ /**
+ * Array of deprecated icons, add deprecated icons to this array and remove it from registry
+ * - Index of this array contains the deprecated icon
+ * - Value of each entry must contain the deprecation message and can contain an identifier which replaces the old identifier
+ *
+ * Example:
+ * array(
+ * 'deprecated-icon-identifier' => array(
+ * 'message' => '%s is deprecated since TYPO3 CMS 7, this icon will be removed in TYPO3 CMS 8',
+ * 'replacement' => 'alternative-icon-identifier' // must be registered
+ * )
+ * )
+ *
+ * @var array
+ */
+ protected $deprecatedIcons = [
+ 'actions-system-refresh' => [
+ 'replacement' => 'actions-refresh',
+ 'message' => '%s is deprecated since TYPO3 CMS 7, this icon will be removed in TYPO3 CMS 8'
+ ],
+ 'actions-system-extension-update-disabled' => [
+ 'replacement' => 'actions-system-extension-update',
+ 'message' => '%s is deprecated since TYPO3 CMS 7, this icon will be removed in TYPO3 CMS 8'
+ ]
+ ];
+
+ /**
+ * @var string
+ */
+ protected $defaultIconIdentifier = 'default-not-found';
+
+ /**
+ * The constructor
+ */
+ public function __construct()
+ {
+ $this->initialize();
+ }
+
+ /**
+ * Initialize the registry
+ * This method can be called multiple times, depending on initialization status.
+ * In some cases e.g. TCA is not available, the method must be called multiple times.
+ */
+ protected function initialize()
+ {
+ if (!$this->tcaInitialized && !empty($GLOBALS['TCA'])) {
+ $this->registerTCAIcons();
+ }
+ if (!$this->flagsInitialized) {
+ $this->registerFlags();
+ }
+ if ($this->tcaInitialized && $this->flagsInitialized) {
+ $this->fullInitialized = true;
+ }
+ }
+
+ /**
+ * @param string $identifier
+ * @return bool
+ */
+ public function isRegistered($identifier)
+ {
+ if (!$this->fullInitialized) {
+ $this->initialize();
+ }
+ return isset($this->icons[$identifier]);
+ }
+
+ /**
+ * @param string $identifier
+ * @return bool
+ */
+ public function isDeprecated($identifier)
+ {
+ return isset($this->deprecatedIcons[$identifier]);
+ }
+
+ /**
+ * @return string
+ */
+ public function getDefaultIconIdentifier()
+ {
+ return $this->defaultIconIdentifier;
+ }
+
+ /**
+ * Registers an icon to be available inside the Icon Factory
+ *
+ * @param string $identifier
+ * @param string $iconProviderClassName
+ * @param array $options
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function registerIcon($identifier, $iconProviderClassName, array $options = [])
+ {
+ if (!in_array(IconProviderInterface::class, class_implements($iconProviderClassName), true)) {
+ throw new \InvalidArgumentException('An IconProvider must implement ' . IconProviderInterface::class, 1437425803);
+ }
+ $this->icons[$identifier] = [
+ 'provider' => $iconProviderClassName,
+ 'options' => $options
+ ];
+ }
+
+ /**
+ * Register an icon for a file extension
+ *
+ * @param string $fileExtension
+ * @param string $iconIdentifier
+ */
+ public function registerFileExtension($fileExtension, $iconIdentifier)
+ {
+ $this->fileExtensionMapping[$fileExtension] = $iconIdentifier;
+ }
+
+ /**
+ * Register an icon for a mime-type
+ *
+ * @param string $mimeType
+ * @param string $iconIdentifier
+ */
+ public function registerMimeTypeIcon($mimeType, $iconIdentifier)
+ {
+ $this->mimeTypeMapping[$mimeType] = $iconIdentifier;
+ }
+
+ /**
+ * Fetches the configuration provided by registerIcon()
+ *
+ * @param string $identifier the icon identifier
+ * @return mixed
+ * @throws Exception
+ */
+ public function getIconConfigurationByIdentifier($identifier)
+ {
+ if (!$this->fullInitialized) {
+ $this->initialize();
+ }
+ if (!$this->isRegistered($identifier)) {
+ throw new Exception('Icon with identifier "' . $identifier . '" is not registered"', 1437425804);
+ }
+ if ($this->isDeprecated($identifier)) {
+ $deprecationSettings = $this->getDeprecationSettings($identifier);
+ GeneralUtility::deprecationLog(sprintf($deprecationSettings['message'], $identifier));
+ if (!empty($deprecationSettings['replacement'])) {
+ $identifier = $deprecationSettings['replacement'];
+ }
+ }
+ return $this->icons[$identifier];
+ }
+
+ /**
+ * @param string $identifier
+ *
+ * @return array
+ * @throws Exception
+ */
+ public function getDeprecationSettings($identifier)
+ {
+ if (!$this->isDeprecated($identifier)) {
+ throw new Exception('Icon with identifier "' . $identifier . '" is not deprecated"', 1437425804);
+ }
+ return $this->deprecatedIcons[$identifier];
+ }
+
+ /**
+ * @return array
+ */
+ public function getAllRegisteredIconIdentifiers()
+ {
+ if (!$this->fullInitialized) {
+ $this->initialize();
+ }
+ return array_keys($this->icons);
+ }
+
+ /**
+ * @param string $fileExtension
+ * @return string
+ */
+ public function getIconIdentifierForFileExtension($fileExtension)
+ {
+ // If the file extension is not valid use the default one
+ if (!isset($this->fileExtensionMapping[$fileExtension])) {
+ $fileExtension = 'default';
+ }
+ return $this->fileExtensionMapping[$fileExtension];
+ }
+
+ /**
+ * Get iconIdentifier for given mimeType
+ *
+ * @param string $mimeType
+ * @return string|null Returns null if no icon is registered for the mimeType
+ */
+ public function getIconIdentifierForMimeType($mimeType)
+ {
+ if (!isset($this->mimeTypeMapping[$mimeType])) {
+ return null;
+ }
+ return $this->mimeTypeMapping[$mimeType];
+ }
+
+ /**
+ * Load icons from TCA for each table and add them as "tcarecords-XX" to $this->icons
+ */
+ protected function registerTCAIcons()
+ {
+ $resultArray = [];
+
+ $tcaTables = array_keys($GLOBALS['TCA']);
+ // check every table in the TCA, if an icon is needed
+ foreach ($tcaTables as $tableName) {
+ // This method is only needed for TCA tables where typeicon_classes are not configured
+ if (is_array($GLOBALS['TCA'][$tableName])) {
+ $tcaCtrl = $GLOBALS['TCA'][$tableName]['ctrl'];
+ $icon = null;
+ $iconIdentifier = 'tcarecords-' . $tableName . '-default';
+ if (isset($this->icons[$iconIdentifier])) {
+ continue;
+ }
+ if (isset($tcaCtrl['iconfile'])) {
+ if (StringUtility::beginsWith($tcaCtrl['iconfile'], 'EXT:')) {
+ $icon = $tcaCtrl['iconfile'];
+ } elseif (strpos($tcaCtrl['iconfile'], '/') !== false) {
+ $icon = TYPO3_mainDir . GeneralUtility::resolveBackPath($tcaCtrl['iconfile']);
+ }
+ if ($icon !== null) {
+ $resultArray[$iconIdentifier] = $icon;
+ }
+ }
+ }
+ }
+ if (!empty($GLOBALS['TBE_STYLES']['spritemanager']['singleIcons'])) {
+ foreach ($GLOBALS['TBE_STYLES']['spritemanager']['singleIcons'] as $iconIdentifier => $iconFile) {
+ if (StringUtility::beginsWith($iconFile, '../typo3conf/ext/')) {
+ $iconFile = str_replace('../typo3conf/ext/', 'EXT:', $iconFile);
+ }
+ if (StringUtility::beginsWith($iconFile, 'sysext/')) {
+ $iconFile = str_replace('sysext/', 'EXT:', $iconFile);
+ }
+ $resultArray[$iconIdentifier] = $iconFile;
+ }
+ }
+
+ foreach ($resultArray as $iconIdentifier => $iconFilePath) {
+ if (StringUtility::endsWith(strtolower($iconFilePath), 'svg')) {
+ $iconProviderClass = SvgIconProvider::class;
+ } else {
+ $iconProviderClass = BitmapIconProvider::class;
+ }
+ $this->icons[$iconIdentifier] = [
+ 'provider' => $iconProviderClass,
+ 'options' => [
+ 'source' => $iconFilePath
+ ]
+ ];
+ }
+ $this->tcaInitialized = true;
+ }
+
+ /**
+ * register flags
+ */
+ protected function registerFlags()
+ {
+ $iconFolder = 'EXT:core/Resources/Public/Icons/Flags/SVG/';
+ $files = [
+ 'AC', 'AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ',
+ 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ',
+ 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CP', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ',
+ 'DE', 'DG', 'DJ', 'DK', 'DM', 'DO', 'DZ',
+ 'EA', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'EU',
+ 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR',
+ 'GA', 'GB-ENG', 'GB-NIR', 'GB-SCT', 'GB-WLS', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY',
+ 'HK', 'HM', 'HN', 'HR', 'HT', 'HU',
+ 'IC', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT',
+ 'JE', 'JM', 'JO', 'JP',
+ 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ',
+ 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY',
+ 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ',
+ 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ',
+ 'OM',
+ 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY',
+ 'QA',
+ 'RE', 'RO', 'RS', 'RU', 'RW',
+ 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ',
+ 'TA', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ',
+ 'UA', 'UG', 'UM', 'US-AK', 'US-AL', 'US-AR', 'US-AZ', 'US-CA', 'US-CO', 'US-CT', 'US-DE', 'US-FL', 'US-GA', 'US-HI', 'US-IA', 'US-ID', 'US-IL', 'US-IN', 'US-KS', 'US-KY', 'US-LA', 'US-MA', 'US-MD', 'US-ME', 'US-MI', 'US-MN', 'US-MO', 'US-MS', 'US-MT', 'US-NC', 'US-ND', 'US-NE', 'US-NH', 'US-NJ', 'US-NM', 'US-NV', 'US-NY', 'US-OH', 'US-OK', 'US-OR', 'US-PA', 'US-RI', 'US-SC', 'US-SD', 'US-TN', 'US-TX', 'US-UT', 'US-VA', 'US-VT', 'US-WA', 'US-WI', 'US-WV', 'US-WY', 'US', 'UY', 'UZ',
+ 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU',
+ 'WF', 'WS',
+ 'XK',
+ 'YE', 'YT',
+ 'ZA', 'ZM', 'ZW'
+ ];
+ foreach ($files as $file) {
+ $identifier = strtolower($file);
+ $this->icons['flags-' . $identifier] = [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => $iconFolder . $file . '.svg'
+ ]
+ ];
+ }
+ $this->flagsInitialized = true;
+ }
+
+ /**
+ * Detect the IconProvider of an icon
+ *
+ * @param string $iconReference
+ * @return string
+ */
+ public function detectIconProvider($iconReference)
+ {
+ if (StringUtility::endsWith(strtolower($iconReference), 'svg')) {
+ return SvgIconProvider::class;
+ } else {
+ return BitmapIconProvider::class;
+ }
+ }
+}
diff --git a/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/IconRegistry8.php b/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/IconRegistry8.php
new file mode 100644
index 00000000..aff1f81e
--- /dev/null
+++ b/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/IconRegistry8.php
@@ -0,0 +1,3479 @@
+ [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-add.svg'
+ ]
+ ],
+ 'actions-check' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-check.svg'
+ ]
+ ],
+ 'actions-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-close.svg'
+ ]
+ ],
+ 'actions-cloud' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-cloud.svg'
+ ]
+ ],
+ 'actions-database-export' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-database-export.svg'
+ ]
+ ],
+ 'actions-database-import' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-database-import.svg'
+ ]
+ ],
+ 'actions-database-reload' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-database-reload.svg'
+ ]
+ ],
+ 'actions-database' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-database.svg'
+ ]
+ ],
+ 'actions-delete' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-delete.svg'
+ ]
+ ],
+ 'actions-document-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-close.svg'
+ ]
+ ],
+ 'actions-document-duplicates-select' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-duplicates-select.svg'
+ ]
+ ],
+ 'actions-document-edit-access' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-edit-access.svg'
+ ]
+ ],
+ 'actions-document-export-csv' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-export-csv.svg'
+ ]
+ ],
+ 'actions-document-export-t3d' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-export-t3d.svg'
+ ]
+ ],
+ 'actions-document-history-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-history-open.svg'
+ ]
+ ],
+ 'actions-document-import-t3d' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-import-t3d.svg'
+ ]
+ ],
+ 'actions-document-info' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-info.svg'
+ ]
+ ],
+ 'actions-document-localize' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-localize.svg'
+ ]
+ ],
+ 'actions-document-move' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-move.svg'
+ ]
+ ],
+ 'actions-document-new' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-new.svg'
+ ]
+ ],
+ 'actions-document-open-read-only' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-open-read-only.svg'
+ ]
+ ],
+ 'actions-document-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-open.svg'
+ ]
+ ],
+ 'actions-document-paste-after' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-paste-after.svg'
+ ]
+ ],
+ 'actions-document-paste-before' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-paste-before.svg'
+ ]
+ ],
+ 'actions-document-paste-into' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-paste-into.svg'
+ ]
+ ],
+ 'actions-document-paste' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-paste.svg'
+ ]
+ ],
+ 'actions-document-save-cleartranslationcache' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-save-cleartranslationcache.svg'
+ ]
+ ],
+ 'actions-document-save-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-save-close.svg'
+ ]
+ ],
+ 'actions-document-save-new' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-save-new.svg'
+ ]
+ ],
+ 'actions-document-save-translation' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-save-translation.svg'
+ ]
+ ],
+ 'actions-document-save-view' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-save-view.svg'
+ ]
+ ],
+ 'actions-document-save' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-save.svg'
+ ]
+ ],
+ 'actions-document-select' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-select.svg'
+ ]
+ ],
+ 'actions-document-synchronize' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-synchronize.svg'
+ ]
+ ],
+ 'actions-document-view' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document-view.svg'
+ ]
+ ],
+ 'actions-document' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-document.svg'
+ ]
+ ],
+ 'actions-download' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-download.svg'
+ ]
+ ],
+ 'actions-duplicates' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-duplicates.svg'
+ ]
+ ],
+ 'actions-edit-add' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-add.svg'
+ ]
+ ],
+ 'actions-edit-copy-release' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-copy-release.svg'
+ ]
+ ],
+ 'actions-edit-copy' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-copy.svg'
+ ]
+ ],
+ 'actions-edit-cut-release' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-cut-release.svg'
+ ]
+ ],
+ 'actions-edit-cut' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-cut.svg'
+ ]
+ ],
+ 'actions-edit-delete' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-delete.svg'
+ ]
+ ],
+ 'actions-edit-download' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-download.svg'
+ ]
+ ],
+ 'actions-edit-hide' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-hide.svg'
+ ]
+ ],
+ 'actions-edit-insert-default' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-insert-default.svg'
+ ]
+ ],
+ 'actions-edit-localize-status-high' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-localize-status-high.svg'
+ ]
+ ],
+ 'actions-edit-localize-status-low' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-localize-status-low.svg'
+ ]
+ ],
+ 'actions-edit-merge-localization' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-merge-localization.svg'
+ ]
+ ],
+ 'actions-edit-pick-date' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-pick-date.svg'
+ ]
+ ],
+ 'actions-edit-rename' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-rename.svg'
+ ]
+ ],
+ 'actions-edit-replace' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-replace.svg'
+ ]
+ ],
+ 'actions-edit-restore' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-restore.svg'
+ ]
+ ],
+ 'actions-edit-undelete-edit' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-undelete-edit.svg'
+ ]
+ ],
+ 'actions-edit-undo' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-undo.svg'
+ ]
+ ],
+ 'actions-edit-unhide' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-unhide.svg'
+ ]
+ ],
+ 'actions-edit-upload' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-edit-upload.svg'
+ ]
+ ],
+ 'actions-file-csv' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-file-csv.svg'
+ ]
+ ],
+ 'actions-file-html' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-file-html.svg'
+ ]
+ ],
+ 'actions-file-openoffice' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-file-openoffice.svg'
+ ]
+ ],
+ 'actions-file-pdf' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-file-pdf.svg'
+ ]
+ ],
+ 'actions-file' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-file.svg'
+ ]
+ ],
+ 'actions-filter' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-filter.svg'
+ ]
+ ],
+ 'actions-folder' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-folder.svg'
+ ]
+ ],
+ 'actions-input-clear' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-input-clear.svg'
+ ]
+ ],
+ 'actions-insert-record' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-insert-record.svg'
+ ]
+ ],
+ 'actions-insert-reference' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-insert-reference.svg'
+ ]
+ ],
+ 'actions-localize' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-localize.svg'
+ ]
+ ],
+ 'actions-lock' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-lock.svg'
+ ]
+ ],
+ 'actions-logout' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-logout.svg'
+ ]
+ ],
+ 'actions-markstate' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-markstate.svg'
+ ]
+ ],
+ 'actions-menu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-menu.svg'
+ ]
+ ],
+ 'actions-merge' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-merge.svg'
+ ]
+ ],
+ 'actions-message-error-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-message-error-close.svg'
+ ]
+ ],
+ 'actions-message-information-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-message-information-close.svg'
+ ]
+ ],
+ 'actions-message-notice-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-message-notice-close.svg'
+ ]
+ ],
+ 'actions-message-ok-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-message-ok-close.svg'
+ ]
+ ],
+ 'actions-message-warning-close' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-message-warning-close.svg'
+ ]
+ ],
+ 'actions-move-down' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move-down.svg'
+ ]
+ ],
+ 'actions-move-left' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move-left.svg'
+ ]
+ ],
+ 'actions-move-move' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move-move.svg'
+ ]
+ ],
+ 'actions-move-right' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move-right.svg'
+ ]
+ ],
+ 'actions-move-to-bottom' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move-to-bottom.svg'
+ ]
+ ],
+ 'actions-move-to-top' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move-to-top.svg'
+ ]
+ ],
+ 'actions-move-up' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move-up.svg'
+ ]
+ ],
+ 'actions-move' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-move.svg'
+ ]
+ ],
+ 'actions-online-media-add' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-online-media-add.svg'
+ ]
+ ],
+ 'actions-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-open.svg'
+ ]
+ ],
+ 'actions-page-move' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-page-move.svg'
+ ]
+ ],
+ 'actions-page-new' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-page-new.svg'
+ ]
+ ],
+ 'actions-page-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-page-open.svg'
+ ]
+ ],
+ 'actions-pagetree-collapse' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-pagetree-collapse.svg'
+ ]
+ ],
+ 'actions-pagetree-expand' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-pagetree-expand.svg'
+ ]
+ ],
+ 'actions-pagetree-mountroot' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-pagetree-mountroot.svg'
+ ]
+ ],
+ 'actions-pagetree' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-pagetree.svg'
+ ]
+ ],
+ 'actions-preview' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-preview.svg'
+ ]
+ ],
+ 'actions-refresh' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-refresh.svg'
+ ]
+ ],
+ 'actions-remove' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-remove.svg'
+ ]
+ ],
+ 'actions-rename' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-rename.svg'
+ ]
+ ],
+ 'actions-replace' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-replace.svg'
+ ]
+ ],
+ 'actions-save' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-save.svg'
+ ]
+ ],
+ 'actions-search' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-search.svg'
+ ]
+ ],
+ 'actions-selection-delete' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-selection-delete.svg'
+ ]
+ ],
+ 'actions-swap' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-swap.svg'
+ ]
+ ],
+ 'actions-synchronize' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-synchronize.svg'
+ ]
+ ],
+ 'actions-system-backend-user-emulate' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-backend-user-emulate.svg'
+ ]
+ ],
+ 'actions-system-backend-user-switch' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-backend-user-switch.svg'
+ ]
+ ],
+ 'actions-system-cache-clear-impact-high' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-cache-clear-impact-high.svg'
+ ]
+ ],
+ 'actions-system-cache-clear-impact-low' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-cache-clear-impact-low.svg'
+ ]
+ ],
+ 'actions-system-cache-clear-impact-medium' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-cache-clear-impact-medium.svg'
+ ]
+ ],
+ 'actions-system-cache-clear-rte' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-cache-clear-rte.svg'
+ ]
+ ],
+ 'actions-system-cache-clear' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-cache-clear.svg'
+ ]
+ ],
+ 'actions-system-extension-configure' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-configure.svg'
+ ]
+ ],
+ 'actions-system-extension-documentation' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-documentation.svg'
+ ]
+ ],
+ 'actions-system-extension-download' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-download.svg'
+ ]
+ ],
+ 'actions-system-extension-import' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-import.svg'
+ ]
+ ],
+ 'actions-system-extension-install' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-install.svg'
+ ]
+ ],
+ 'actions-system-extension-sqldump' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-sqldump.svg'
+ ]
+ ],
+ 'actions-system-extension-uninstall' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-uninstall.svg'
+ ]
+ ],
+ 'actions-system-extension-update-disable' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-update-disable.svg'
+ ]
+ ],
+ 'actions-system-extension-update' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-extension-update.svg'
+ ]
+ ],
+ 'actions-system-help-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-help-open.svg'
+ ]
+ ],
+ 'actions-system-list-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-list-open.svg'
+ ]
+ ],
+ 'actions-system-options-view' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-options-view.svg'
+ ]
+ ],
+ 'actions-system-pagemodule-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-pagemodule-open.svg'
+ ]
+ ],
+ 'actions-system-refresh' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-refresh.svg'
+ ]
+ ],
+ 'actions-system-shortcut-active' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-shortcut-active.svg'
+ ]
+ ],
+ 'actions-system-shortcut-new' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-shortcut-new.svg'
+ ]
+ ],
+ 'actions-system-tree-search-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-tree-search-open.svg'
+ ]
+ ],
+ 'actions-system-typoscript-documentation-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-typoscript-documentation-open.svg'
+ ]
+ ],
+ 'actions-system-typoscript-documentation' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-system-typoscript-documentation.svg'
+ ]
+ ],
+ 'actions-template-new' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-template-new.svg'
+ ]
+ ],
+ 'actions-unlock' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-unlock.svg'
+ ]
+ ],
+ 'actions-unmarkstate' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-unmarkstate.svg'
+ ]
+ ],
+ 'actions-upload' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-upload.svg'
+ ]
+ ],
+ 'actions-version-document-remove' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-version-document-remove.svg'
+ ]
+ ],
+ 'actions-version-page-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-version-page-open.svg'
+ ]
+ ],
+ 'actions-version-swap-version' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-version-swap-version.svg'
+ ]
+ ],
+ 'actions-version-swap-workspace' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-version-swap-workspace.svg'
+ ]
+ ],
+ 'actions-version-workspace-preview' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-version-workspace-preview.svg'
+ ]
+ ],
+ 'actions-version-workspace-sendtoprevstage' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-version-workspace-sendtoprevstage.svg'
+ ]
+ ],
+ 'actions-version-workspace-sendtostage' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-version-workspace-sendtostage.svg'
+ ]
+ ],
+ 'actions-version-workspaces-preview-link' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-version-workspaces-preview-link.svg'
+ ]
+ ],
+ 'actions-view-go-back' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-go-back.svg'
+ ]
+ ],
+ 'actions-view-go-down' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-go-down.svg'
+ ]
+ ],
+ 'actions-view-go-forward' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-go-forward.svg'
+ ]
+ ],
+ 'actions-view-go-up' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-go-up.svg'
+ ]
+ ],
+ 'actions-view-list-collapse' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-list-collapse.svg'
+ ]
+ ],
+ 'actions-view-list-expand' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-list-expand.svg'
+ ]
+ ],
+ 'actions-view-paging-first-disabled' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-first-disabled.svg'
+ ]
+ ],
+ 'actions-view-paging-first' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-first.svg'
+ ]
+ ],
+ 'actions-view-paging-last-disabled' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-last-disabled.svg'
+ ]
+ ],
+ 'actions-view-paging-last' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-last.svg'
+ ]
+ ],
+ 'actions-view-paging-next-disabled' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-next-disabled.svg'
+ ]
+ ],
+ 'actions-view-paging-next' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-next.svg'
+ ]
+ ],
+ 'actions-view-paging-previous-disabled' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-previous-disabled.svg'
+ ]
+ ],
+ 'actions-view-paging-previous' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-paging-previous.svg'
+ ]
+ ],
+ 'actions-view-table-collapse' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-table-collapse.svg'
+ ]
+ ],
+ 'actions-view-table-expand' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-table-expand.svg'
+ ]
+ ],
+ 'actions-view' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view.svg'
+ ]
+ ],
+ 'actions-window-open' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-window-open.svg'
+ ]
+ ],
+ 'actions-wizard-link' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'link'
+ ]
+ ],
+ 'actions-wizard-rte' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'arrows-alt'
+ ]
+ ],
+ 'actions-add-placeholder' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-add-placeholder.svg'
+ ]
+ ],
+ 'actions-view-page' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/actions/actions-view-page.svg'
+ ]
+ ],
+ // Apps
+ 'apps-clipboard-images' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-clipboard-images.svg'
+ ]
+ ],
+ 'apps-clipboard-list' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-clipboard-list.svg'
+ ]
+ ],
+ 'apps-filetree-folder-add' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-add.svg'
+ ]
+ ],
+ 'apps-filetree-folder-default' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-default.svg'
+ ]
+ ],
+ 'apps-filetree-folder-list' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-list.svg'
+ ]
+ ],
+ 'apps-filetree-folder-locked' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-locked.svg'
+ ]
+ ],
+ 'apps-filetree-folder-media' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-media.svg'
+ ]
+ ],
+ 'apps-filetree-folder-news' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-news.svg'
+ ]
+ ],
+ 'apps-filetree-folder-opened' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-opened.svg'
+ ]
+ ],
+ 'apps-filetree-folder-recycler' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-recycler.svg'
+ ]
+ ],
+ 'apps-filetree-folder-temp' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-temp.svg'
+ ]
+ ],
+ 'apps-filetree-folder-user' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder-user.svg'
+ ]
+ ],
+ 'apps-filetree-folder' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-folder.svg'
+ ]
+ ],
+ 'apps-filetree-mount' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-mount.svg'
+ ]
+ ],
+ 'apps-filetree-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-filetree-root.svg'
+ ]
+ ],
+ 'apps-irre-collapsed' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-irre-collapsed.svg'
+ ]
+ ],
+ 'apps-irre-expanded' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-irre-expanded.svg'
+ ]
+ ],
+ 'apps-pagetree-backend-user-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-backend-user-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-backend-user' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-backend-user.svg'
+ ]
+ ],
+ 'apps-pagetree-category-collapse-all' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-category-collapse-all.svg'
+ ]
+ ],
+ 'apps-pagetree-category-expand-all' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-category-expand-all.svg'
+ ]
+ ],
+ 'apps-pagetree-collapse' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-collapse.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-copy-above' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-copy-above.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-copy-below' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-copy-below.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-move-above' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-move-above.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-move-below' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-move-below.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-move-between' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-move-between.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-move-into' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-move-into.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-new-between' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-new-between.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-new-inside' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-new-inside.svg'
+ ]
+ ],
+ 'apps-pagetree-drag-place-denied' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-drag-place-denied.svg'
+ ]
+ ],
+ 'apps-pagetree-expand' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-expand.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-contains-approve' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-contains-approve.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-contains-board' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-contains-board.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-contains-fe_users' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-contains-fe_users.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-contains-news' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-contains-news.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-contains-shop' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-contains-shop.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-contains' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-contains.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-default' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-default.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-folder-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-folder-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-advanced-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-advanced-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-advanced-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-advanced-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-advanced' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-advanced.svg'
+ ]
+ ],
+ 'apps-pagetree-page-backend-user-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-backend-user-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-backend-user-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-backend-user-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-backend-user' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-backend-user.svg'
+ ]
+ ],
+ 'apps-pagetree-page-backend-users-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-backend-users-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-backend-users-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-backend-users-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-backend-users' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-backend-users.svg'
+ ]
+ ],
+ 'apps-pagetree-page-content-from-page-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-content-from-page-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-content-from-page-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-content-from-page-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-content-from-page' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-content-from-page.svg'
+ ]
+ ],
+ 'apps-pagetree-page-default' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-default.svg'
+ ]
+ ],
+ 'apps-pagetree-page-domain' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-domain.svg'
+ ]
+ ],
+ 'apps-pagetree-page-frontend-user-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-frontend-user-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-frontend-user-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-frontend-user-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-frontend-user' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-frontend-user.svg'
+ ]
+ ],
+ 'apps-pagetree-page-frontend-users-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-frontend-users-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-frontend-users-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-frontend-users-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-frontend-users' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-frontend-users.svg'
+ ]
+ ],
+ 'apps-pagetree-page-mountpoint-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-mountpoint-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-mountpoint-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-mountpoint-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-mountpoint' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-mountpoint.svg'
+ ]
+ ],
+ 'apps-pagetree-page-not-in-menu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-not-in-menu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-recycler-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-recycler-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-recycler' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-recycler.svg'
+ ]
+ ],
+ 'apps-pagetree-page-shortcut-external-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-shortcut-external-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-shortcut-external-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-shortcut-external-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-shortcut-external' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-shortcut-external.svg'
+ ]
+ ],
+ 'apps-pagetree-page-shortcut-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-shortcut-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-page-shortcut-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-shortcut-root.svg'
+ ]
+ ],
+ 'apps-pagetree-page-shortcut' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page-shortcut.svg'
+ ]
+ ],
+ 'apps-pagetree-page' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-page.svg'
+ ]
+ ],
+ 'apps-pagetree-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-root.svg'
+ ]
+ ],
+ 'apps-pagetree-spacer-hideinmenu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-spacer-hideinmenu.svg'
+ ]
+ ],
+ 'apps-pagetree-spacer-root' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-spacer-root.svg'
+ ]
+ ],
+ 'apps-pagetree-spacer' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-pagetree-spacer.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-actions' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-actions.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-cache' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-cache.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-help' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-help.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-opendocs' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-opendocs.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-search' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-search.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-shortcut' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-shortcut.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-systeminformation' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-systeminformation.svg'
+ ]
+ ],
+ 'apps-toolbar-menu-workspace' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/apps/apps-toolbar-menu-workspace.svg'
+ ]
+ ],
+ 'apps-pagetree-category-toggle-hide-checked' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'check-square'
+ ]
+ ],
+
+ // Avatar
+ 'avatar-default' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/avatar/avatar-default.svg'
+ ]
+ ],
+
+ // Content
+ 'content-accordion' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-accordion.svg'
+ ]
+ ],
+ 'content-audio' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-audio.svg'
+ ]
+ ],
+ 'content-beside-text-img-above-center' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-above-center.svg'
+ ]
+ ],
+ 'content-beside-text-img-above-left' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-above-left.svg'
+ ]
+ ],
+ 'content-beside-text-img-above-right' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-above-right.svg'
+ ]
+ ],
+ 'content-beside-text-img-below-center' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-below-center.svg'
+ ]
+ ],
+ 'content-beside-text-img-below-left' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-below-left.svg'
+ ]
+ ],
+ 'content-beside-text-img-below-right' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-below-right.svg'
+ ]
+ ],
+ 'content-beside-text-img-left' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-left.svg'
+ ]
+ ],
+ 'content-beside-text-img-right' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-beside-text-img-right.svg'
+ ]
+ ],
+ 'content-briefcase' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-briefcase.svg'
+ ]
+ ],
+ 'content-bullets' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-bullets.svg'
+ ]
+ ],
+ 'content-carousel-header' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-carousel-header.svg'
+ ]
+ ],
+ 'content-carousel-html' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-carousel-html.svg'
+ ]
+ ],
+ 'content-carousel-image' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-carousel-image.svg'
+ ]
+ ],
+ 'content-carousel' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-carousel.svg'
+ ]
+ ],
+ 'content-coffee' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-coffee.svg'
+ ]
+ ],
+ 'content-elements-login' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-elements-login.svg'
+ ]
+ ],
+ 'content-elements-mailform' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-elements-mailform.svg'
+ ]
+ ],
+ 'content-elements-searchform' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-elements-searchform.svg'
+ ]
+ ],
+ 'content-form' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-form.svg'
+ ]
+ ],
+ 'content-header' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-header.svg'
+ ]
+ ],
+ 'content-idea' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-idea.svg'
+ ]
+ ],
+ 'content-image' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-image.svg'
+ ]
+ ],
+ 'content-info' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-info.svg'
+ ]
+ ],
+ 'content-inside-text-img-left' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-inside-text-img-left.svg'
+ ]
+ ],
+ 'content-inside-text-img-right' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-inside-text-img-right.svg'
+ ]
+ ],
+ 'content-media' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-media.svg'
+ ]
+ ],
+ 'content-menu-abstract' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-abstract.svg'
+ ]
+ ],
+ 'content-menu-categorized' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-categorized.svg'
+ ]
+ ],
+ 'content-menu-pages' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-pages.svg'
+ ]
+ ],
+ 'content-menu-recently-updated' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-recently-updated.svg'
+ ]
+ ],
+ 'content-menu-related' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-related.svg'
+ ]
+ ],
+ 'content-menu-section' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-section.svg'
+ ]
+ ],
+ 'content-menu-sitemap-pages' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-sitemap-pages.svg'
+ ]
+ ],
+ 'content-menu-sitemap' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-sitemap.svg'
+ ]
+ ],
+ 'content-menu-thumbnail' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-thumbnail.svg'
+ ]
+ ],
+ 'content-news' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-news.svg'
+ ]
+ ],
+ 'content-panel' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-panel.svg'
+ ]
+ ],
+ 'content-plugin' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-plugin.svg'
+ ]
+ ],
+ 'content-quote' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-quote.svg'
+ ]
+ ],
+ 'content-special-div' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-special-div.svg'
+ ]
+ ],
+ 'content-special-html' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-special-html.svg'
+ ]
+ ],
+ 'content-special-indexed_search' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-special-indexed_search.svg'
+ ]
+ ],
+ 'content-special-menu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-special-menu.svg'
+ ]
+ ],
+ 'content-special-shortcut' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-special-shortcut.svg'
+ ]
+ ],
+ 'content-special-uploads' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-special-uploads.svg'
+ ]
+ ],
+ 'content-tab-item' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-tab-item.svg'
+ ]
+ ],
+ 'content-tab' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-tab.svg'
+ ]
+ ],
+ 'content-table' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-table.svg'
+ ]
+ ],
+ 'content-text-columns' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-text-columns.svg'
+ ]
+ ],
+ 'content-text-teaser' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-text-teaser.svg'
+ ]
+ ],
+ 'content-text' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-text.svg'
+ ]
+ ],
+ 'content-textmedia' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-textmedia.svg'
+ ]
+ ],
+ 'content-textpic' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-textpic.svg'
+ ]
+ ],
+
+ // Default
+ 'default-not-found' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/default/default-not-found.svg'
+ ]
+ ],
+
+ // Mimetypes
+ 'mimetypes-application' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-application.svg'
+ ]
+ ],
+ 'mimetypes-compressed' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-compressed.svg'
+ ]
+ ],
+ 'mimetypes-excel' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-excel.svg'
+ ]
+ ],
+ 'mimetypes-media-audio' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-media-audio.svg'
+ ]
+ ],
+ 'mimetypes-media-flash' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-media-flash.svg'
+ ]
+ ],
+ 'mimetypes-media-image' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-media-image.svg'
+ ]
+ ],
+ 'mimetypes-media-video-vimeo' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-media-video-vimeo.svg'
+ ]
+ ],
+ 'mimetypes-media-video-youtube' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-media-video-youtube.svg'
+ ]
+ ],
+ 'mimetypes-media-video' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-media-video.svg'
+ ]
+ ],
+ 'mimetypes-open-document-database' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-open-document-database.svg'
+ ]
+ ],
+ 'mimetypes-open-document-drawing' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-open-document-drawing.svg'
+ ]
+ ],
+ 'mimetypes-open-document-formula' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-open-document-formula.svg'
+ ]
+ ],
+ 'mimetypes-open-document-presentation' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-open-document-presentation.svg'
+ ]
+ ],
+ 'mimetypes-open-document-spreadsheet' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-open-document-spreadsheet.svg'
+ ]
+ ],
+ 'mimetypes-open-document-text' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-open-document-text.svg'
+ ]
+ ],
+ 'mimetypes-other-other' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-other-other.svg'
+ ]
+ ],
+ 'mimetypes-pdf' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-pdf.svg'
+ ]
+ ],
+ 'mimetypes-powerpoint' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-powerpoint.svg'
+ ]
+ ],
+ 'mimetypes-text-css' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-text-css.svg'
+ ]
+ ],
+ 'mimetypes-text-csv' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-text-csv.svg'
+ ]
+ ],
+ 'mimetypes-text-html' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-text-html.svg'
+ ]
+ ],
+ 'mimetypes-text-js' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-text-js.svg'
+ ]
+ ],
+ 'mimetypes-text-php' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-text-php.svg'
+ ]
+ ],
+ 'mimetypes-text-text' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-text-text.svg'
+ ]
+ ],
+ 'mimetypes-text-ts' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-text-ts.svg'
+ ]
+ ],
+ 'mimetypes-text-typoscript' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-text-typoscript.svg'
+ ]
+ ],
+ 'mimetypes-word' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-word.svg'
+ ]
+ ],
+ 'mimetypes-x-backend_layout' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-backend_layout.svg'
+ ]
+ ],
+ 'mimetypes-x-content-divider' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-divider.svg'
+ ]
+ ],
+ 'mimetypes-x-content-domain' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-domain.svg'
+ ]
+ ],
+ 'mimetypes-x-content-form-search' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-form-search.svg'
+ ]
+ ],
+ 'mimetypes-x-content-form' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-form.svg'
+ ]
+ ],
+ 'mimetypes-x-content-header' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-header.svg'
+ ]
+ ],
+ 'mimetypes-x-content-html' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-html.svg'
+ ]
+ ],
+ 'mimetypes-x-content-image' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-image.svg'
+ ]
+ ],
+ 'mimetypes-x-content-link' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-link.svg'
+ ]
+ ],
+ 'mimetypes-x-content-list-bullets' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-list-bullets.svg'
+ ]
+ ],
+ 'mimetypes-x-content-list-files' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-list-files.svg'
+ ]
+ ],
+ 'mimetypes-x-content-login' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-login.svg'
+ ]
+ ],
+ 'mimetypes-x-content-menu' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-menu.svg'
+ ]
+ ],
+ 'mimetypes-x-content-multimedia' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-multimedia.svg'
+ ]
+ ],
+ 'mimetypes-x-content-page-language-overlay' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-page-language-overlay.svg'
+ ]
+ ],
+ 'mimetypes-x-content-plugin' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-plugin.svg'
+ ]
+ ],
+ 'mimetypes-x-content-script' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-script.svg'
+ ]
+ ],
+ 'mimetypes-x-content-table' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-table.svg'
+ ]
+ ],
+ 'mimetypes-x-content-template-extension' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-template-extension.svg'
+ ]
+ ],
+ 'mimetypes-x-content-template-static' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-template-static.svg'
+ ]
+ ],
+ 'mimetypes-x-content-template' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-template.svg'
+ ]
+ ],
+ 'mimetypes-x-content-text-media' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-text-media.svg'
+ ]
+ ],
+ 'mimetypes-x-content-text-picture' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-text-picture.svg'
+ ]
+ ],
+ 'mimetypes-x-content-text' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-content-text.svg'
+ ]
+ ],
+ 'mimetypes-x-index_config' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-index_config.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_action' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-sys_action.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_category' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-sys_category.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_filemounts' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-sys_filemounts.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_file_storage' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-sys_file_storage.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_language' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-sys_language.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_news' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-sys_news.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_note' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-sys_note.svg'
+ ]
+ ],
+ 'mimetypes-x-sys_workspace' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-sys_workspace.svg'
+ ]
+ ],
+ 'mimetypes-x-tx_rtehtmlarea_acronym' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-tx_rtehtmlarea_acronym.svg'
+ ]
+ ],
+ 'mimetypes-x-tx_scheduler_task_group' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/mimetypes/mimetypes-x-tx_scheduler_task_group.svg'
+ ]
+ ],
+
+ // Miscellaneous
+ 'miscellaneous-placeholder' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/miscellaneous/miscellaneous-placeholder.svg'
+ ]
+ ],
+
+ // Module
+ 'module-web' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'file-o'
+ ]
+ ],
+ 'module-file' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'image'
+ ]
+ ],
+ 'module-tools' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'rocket'
+ ]
+ ],
+ 'module-system' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'plug'
+ ]
+ ],
+ 'module-help' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'question-circle'
+ ]
+ ],
+ 'module-about' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-about.svg'
+ ]
+ ],
+ 'module-aboutmodules' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-aboutmodules.svg'
+ ]
+ ],
+ 'module-belog' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-belog.svg'
+ ]
+ ],
+ 'module-beuser' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-beuser.svg'
+ ]
+ ],
+ 'module-config' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-config.svg'
+ ]
+ ],
+ 'module-cshmanual' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-cshmanual.svg'
+ ]
+ ],
+ 'module-dbal' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-dbal.svg'
+ ]
+ ],
+ 'module-dbint' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-dbint.svg'
+ ]
+ ],
+ 'module-documentation' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-documentation.svg'
+ ]
+ ],
+ 'module-extensionmanager' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-extensionmanager.svg'
+ ]
+ ],
+ 'module-filelist' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-filelist.svg'
+ ]
+ ],
+ 'module-form' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-form.svg'
+ ]
+ ],
+ 'module-func' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-func.svg'
+ ]
+ ],
+ 'module-help' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-help.svg'
+ ]
+ ],
+ 'module-indexed_search' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-indexed_search.svg'
+ ]
+ ],
+ 'module-info' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-info.svg'
+ ]
+ ],
+ 'module-install-environment' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-install-environment.svg'
+ ]
+ ],
+ 'module-install-maintenance' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-install-maintenance.svg'
+ ]
+ ],
+ 'module-install-settings' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-install-settings.svg'
+ ]
+ ],
+ 'module-install-upgrade' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-install-upgrade.svg'
+ ]
+ ],
+ 'module-install' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-install.svg'
+ ]
+ ],
+ 'module-lang' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-lang.svg'
+ ]
+ ],
+ 'module-list' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-list.svg'
+ ]
+ ],
+ 'module-page' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-page.svg'
+ ]
+ ],
+ 'module-permission' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-permission.svg'
+ ]
+ ],
+ 'module-recycler' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-recycler.svg'
+ ]
+ ],
+ 'module-reports' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-reports.svg'
+ ]
+ ],
+ 'module-scheduler' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-scheduler.svg'
+ ]
+ ],
+ 'module-setup' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-setup.svg'
+ ]
+ ],
+ 'module-taskcenter' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-taskcenter.svg'
+ ]
+ ],
+ 'module-tstemplate' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-tstemplate.svg'
+ ]
+ ],
+ 'module-version' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-version.svg'
+ ]
+ ],
+ 'module-viewpage' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-viewpage.svg'
+ ]
+ ],
+ 'module-workspaces' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/module/module-workspaces.svg'
+ ]
+ ],
+
+ // Overlay
+ 'overlay-advanced' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-advanced.svg'
+ ]
+ ],
+ 'overlay-approved' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-approved.svg'
+ ]
+ ],
+ 'overlay-backenduser' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-backenduser.svg'
+ ]
+ ],
+ 'overlay-backendusers' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-backendusers.svg'
+ ]
+ ],
+ 'overlay-deleted' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-deleted.svg'
+ ]
+ ],
+ 'overlay-edit' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-edit.svg'
+ ]
+ ],
+ 'overlay-external-link' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-external-link.svg'
+ ]
+ ],
+ 'overlay-frontenduser' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-frontenduser.svg'
+ ]
+ ],
+ 'overlay-frontendusers' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-frontendusers.svg'
+ ]
+ ],
+ 'overlay-hidden' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-hidden.svg'
+ ]
+ ],
+ 'overlay-endtime' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-endtime.svg'
+ ]
+ ],
+ 'overlay-includes-subpages' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-includes-subpages.svg'
+ ]
+ ],
+ 'overlay-info' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-info.svg'
+ ]
+ ],
+ 'overlay-list' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-list.svg'
+ ]
+ ],
+ 'overlay-locked' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-locked.svg'
+ ]
+ ],
+ 'overlay-media' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-media.svg'
+ ]
+ ],
+ 'overlay-missing' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-missing.svg'
+ ]
+ ],
+ 'overlay-mountpoint' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-mountpoint.svg'
+ ]
+ ],
+ 'overlay-new' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-new.svg'
+ ]
+ ],
+ 'overlay-news' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-news.svg'
+ ]
+ ],
+ 'overlay-readonly' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-readonly.svg'
+ ]
+ ],
+ 'overlay-restricted' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-restricted.svg'
+ ]
+ ],
+ 'overlay-scheduled' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-scheduled.svg'
+ ]
+ ],
+ 'overlay-endtime' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-endtime.svg'
+ ]
+ ],
+ 'overlay-shop' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-shop.svg'
+ ]
+ ],
+ 'overlay-shortcut' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-shortcut.svg'
+ ]
+ ],
+ 'overlay-translated' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-translated.svg'
+ ]
+ ],
+ 'overlay-warning' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/overlay/overlay-warning.svg'
+ ]
+ ],
+
+ // Spinner
+ 'spinner-circle-dark' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/spinner/spinner-circle-dark.svg',
+ 'spinning' => true
+ ]
+ ],
+ 'spinner-circle-light' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/spinner/spinner-circle-light.svg',
+ 'spinning' => true
+ ]
+ ],
+ 'spinner-circle' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/spinner/spinner-circle.svg',
+ 'spinning' => true
+ ]
+ ],
+
+ // Status
+ 'status-user-admin' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/status/status-user-admin.svg'
+ ]
+ ],
+ 'status-user-backend' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/status/status-user-backend.svg'
+ ]
+ ],
+ 'status-user-frontend' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/status/status-user-frontend.svg'
+ ]
+ ],
+ 'status-user-group-backend' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/status/status-user-group-backend.svg'
+ ]
+ ],
+ 'status-user-group-frontend' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/status/status-user-group-frontend.svg'
+ ]
+ ],
+ 'status-dialog-information' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'exclamation-circle'
+ ]
+ ],
+ 'status-dialog-ok' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'check-circle',
+ ]
+ ],
+ 'status-dialog-notification' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'exclamation-circle'
+ ]
+ ],
+ 'status-dialog-warning' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'exclamation-triangle'
+ ]
+ ],
+ 'status-dialog-error' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'exclamation-circle'
+ ]
+ ],
+ 'status-warning-lock' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:backend/Resources/Public/Icons/warning-lock.png'
+ ]
+ ],
+ 'status-warning-in-use' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:backend/Resources/Public/Icons/warning-in-use.png'
+ ]
+ ],
+ 'status-status-checked' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'check',
+ ]
+ ],
+ 'status-status-current' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'caret-right',
+ ]
+ ],
+ 'status-status-reference-hard' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:impexp/Resources/Public/Icons/status-reference-hard.png',
+ ]
+ ],
+ 'status-status-sorting-asc' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'caret-up',
+ ]
+ ],
+ 'status-status-sorting-desc' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'caret-down',
+ ]
+ ],
+ 'status-status-sorting-light-asc' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'caret-up',
+ ]
+ ],
+ 'status-status-sorting-light-desc' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'caret-down',
+ ]
+ ],
+ 'status-status-permission-granted' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'check',
+ ]
+ ],
+ 'status-status-permission-denied' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'times',
+ ]
+ ],
+ 'status-status-reference-soft' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:impexp/Resources/Public/Icons/status-reference-soft.png',
+ ]
+ ],
+ 'status-status-edit-read-only' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:backend/Resources/Public/Icons/status-edit-read-only.png',
+ ]
+ ],
+
+ // Extensions
+ 'extensions-extensionmanager-update-script' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'refresh',
+ ]
+ ],
+ 'extensions-scheduler-run-task' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'play-circle',
+ ]
+ ],
+ 'extensions-scheduler-run-task-cron' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'clock-o',
+ ]
+ ],
+ 'extensions-workspaces-generatepreviewlink' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:workspaces/Resources/Public/Images/generate-ws-preview-link.png'
+ ]
+ ],
+
+ // Empty
+ 'empty-empty' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'empty-empty',
+ ]
+ ],
+
+ // System Information
+ 'sysinfo-php-version' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'code'
+ ]
+ ],
+ 'sysinfo-database' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'database'
+ ]
+ ],
+ 'sysinfo-application-context' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'tasks'
+ ]
+ ],
+ 'sysinfo-composer-mode' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'music'
+ ]
+ ],
+ 'sysinfo-git' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'git'
+ ]
+ ],
+ 'sysinfo-webserver' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'server'
+ ]
+ ],
+ 'sysinfo-os-linux' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'linux'
+ ]
+ ],
+ 'sysinfo-os-apple' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'apple'
+ ]
+ ],
+ 'sysinfo-os-windows' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'windows'
+ ]
+ ],
+ 'sysinfo-typo3-version' => [
+ 'provider' => SvgIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/sysinfo/sysinfo-typo3-version.svg'
+ ]
+ ],
+
+ // Sysnote
+ 'sysnote-type-0' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'sticky-note-o'
+ ]
+ ],
+ 'sysnote-type-1' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'cog'
+ ]
+ ],
+ 'sysnote-type-2' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'code'
+ ]
+ ],
+ 'sysnote-type-3' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'thumb-tack'
+ ]
+ ],
+ 'sysnote-type-4' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'check-square'
+ ]
+ ],
+
+ // Flags will be auto-registered after we have the SVG files
+ 'flags-multiple' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/multiple.png'
+ ]
+ ],
+ 'flags-catalonia' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/catalonia.png'
+ ]
+ ],
+ 'flags-en-us-gb' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/en_us-gb.png'
+ ]
+ ],
+ 'flags-scotland' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/scotland.png'
+ ]
+ ],
+ 'flags-wales' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/wales.png'
+ ]
+ ],
+ ];
+
+ /**
+ * Mapping of file extensions to mimetypes
+ *
+ * @var string[]
+ */
+ protected $fileExtensionMapping = [
+ 'htm' => 'mimetypes-text-html',
+ 'html' => 'mimetypes-text-html',
+ 'css' => 'mimetypes-text-css',
+ 'js' => 'mimetypes-text-js',
+ 'csv' => 'mimetypes-text-csv',
+ 'php' => 'mimetypes-text-php',
+ 'php6' => 'mimetypes-text-php',
+ 'php5' => 'mimetypes-text-php',
+ 'php4' => 'mimetypes-text-php',
+ 'php3' => 'mimetypes-text-php',
+ 'inc' => 'mimetypes-text-php',
+ 'ts' => 'mimetypes-text-ts',
+ 'typoscript' => 'mimetypes-text-typoscript',
+ 'txt' => 'mimetypes-text-text',
+ 'class' => 'mimetypes-text-text',
+ 'tmpl' => 'mimetypes-text-text',
+ 'jpg' => 'mimetypes-media-image',
+ 'jpeg' => 'mimetypes-media-image',
+ 'gif' => 'mimetypes-media-image',
+ 'png' => 'mimetypes-media-image',
+ 'bmp' => 'mimetypes-media-image',
+ 'tif' => 'mimetypes-media-image',
+ 'tiff' => 'mimetypes-media-image',
+ 'tga' => 'mimetypes-media-image',
+ 'psd' => 'mimetypes-media-image',
+ 'eps' => 'mimetypes-media-image',
+ 'ai' => 'mimetypes-media-image',
+ 'svg' => 'mimetypes-media-image',
+ 'pcx' => 'mimetypes-media-image',
+ 'avi' => 'mimetypes-media-video',
+ 'mpg' => 'mimetypes-media-video',
+ 'mpeg' => 'mimetypes-media-video',
+ 'mov' => 'mimetypes-media-video',
+ 'vimeo' => 'mimetypes-media-video-vimeo',
+ 'youtube' => 'mimetypes-media-video-youtube',
+ 'wav' => 'mimetypes-media-audio',
+ 'mp3' => 'mimetypes-media-audio',
+ 'ogg' => 'mimetypes-media-audio',
+ 'flac' => 'mimetypes-media-audio',
+ 'opus' => 'mimetypes-media-audio',
+ 'mid' => 'mimetypes-media-audio',
+ 'swf' => 'mimetypes-media-flash',
+ 'swa' => 'mimetypes-media-flash',
+ 'exe' => 'mimetypes-application',
+ 'com' => 'mimetypes-application',
+ 't3x' => 'mimetypes-compressed',
+ 't3d' => 'mimetypes-compressed',
+ 'zip' => 'mimetypes-compressed',
+ 'tgz' => 'mimetypes-compressed',
+ 'gz' => 'mimetypes-compressed',
+ 'pdf' => 'mimetypes-pdf',
+ 'doc' => 'mimetypes-word',
+ 'dot' => 'mimetypes-word',
+ 'docm' => 'mimetypes-word',
+ 'docx' => 'mimetypes-word',
+ 'dotm' => 'mimetypes-word',
+ 'dotx' => 'mimetypes-word',
+ 'sxw' => 'mimetypes-word',
+ 'rtf' => 'mimetypes-word',
+ 'xls' => 'mimetypes-excel',
+ 'xlsm' => 'mimetypes-excel',
+ 'xlsx' => 'mimetypes-excel',
+ 'xltm' => 'mimetypes-excel',
+ 'xltx' => 'mimetypes-excel',
+ 'sxc' => 'mimetypes-excel',
+ 'pps' => 'mimetypes-powerpoint',
+ 'ppsx' => 'mimetypes-powerpoint',
+ 'ppt' => 'mimetypes-powerpoint',
+ 'pptm' => 'mimetypes-powerpoint',
+ 'pptx' => 'mimetypes-powerpoint',
+ 'potm' => 'mimetypes-powerpoint',
+ 'potx' => 'mimetypes-powerpoint',
+ 'mount' => 'apps-filetree-mount',
+ 'folder' => 'apps-filetree-folder-default',
+ 'default' => 'mimetypes-other-other',
+ ];
+
+ /**
+ * Mapping of mime types to icons
+ *
+ * @var string[]
+ */
+ protected $mimeTypeMapping = [
+ 'video/*' => 'mimetypes-media-video',
+ 'audio/*' => 'mimetypes-media-audio',
+ 'image/*' => 'mimetypes-media-image',
+ 'text/*' => 'mimetypes-text-text',
+ ];
+
+ /**
+ * Array of deprecated icons, add deprecated icons to this array and remove it from registry
+ * - Index of this array contains the deprecated icon
+ * - Value of each entry must contain the deprecation message and can contain an identifier
+ * which replaces the old identifier
+ *
+ * Example:
+ * array(
+ * 'deprecated-icon-identifier' => array(
+ * 'message' => '%s is deprecated since TYPO3 CMS 7, this icon will be removed in TYPO3 CMS 8',
+ * 'replacement' => 'alternative-icon-identifier' // must be registered
+ * )
+ * )
+ *
+ * @var array
+ */
+ protected $deprecatedIcons = [
+ 'actions-document-close' => [
+ 'message' => '%s is deprecated since TYPO3 CMS 8, this icon will be removed in TYPO3 CMS 9',
+ 'replacement' => 'actions-close'
+ ],
+ 'actions-edit-add' => [
+ 'message' => '%s is deprecated since TYPO3 CMS 8, this icon will be removed in TYPO3 CMS 9',
+ 'replacement' => 'actions-add'
+ ]
+ ];
+
+ /**
+ * @var string
+ */
+ protected $defaultIconIdentifier = 'default-not-found';
+
+ /**
+ * The constructor
+ */
+ public function __construct()
+ {
+ $this->initialize();
+ }
+
+ /**
+ * Initialize the registry
+ * This method can be called multiple times, depending on initialization status.
+ * In some cases e.g. TCA is not available, the method must be called multiple times.
+ */
+ protected function initialize()
+ {
+ if (!$this->tcaInitialized && !empty($GLOBALS['TCA'])) {
+ $this->registerTCAIcons();
+ }
+ if (!$this->moduleIconsInitialized && !empty($GLOBALS['TBE_MODULES'])) {
+ $this->registerModuleIcons();
+ }
+ if (!$this->flagsInitialized) {
+ $this->registerFlags();
+ }
+ if ($this->tcaInitialized && $this->moduleIconsInitialized && $this->flagsInitialized) {
+ $this->fullInitialized = true;
+ }
+ }
+
+ /**
+ * @param string $identifier
+ * @return bool
+ */
+ public function isRegistered($identifier)
+ {
+ if (!$this->fullInitialized) {
+ $this->initialize();
+ }
+ return isset($this->icons[$identifier]);
+ }
+
+ /**
+ * @param string $identifier
+ * @return bool
+ */
+ public function isDeprecated($identifier)
+ {
+ return isset($this->deprecatedIcons[$identifier]);
+ }
+
+ /**
+ * @return string
+ */
+ public function getDefaultIconIdentifier()
+ {
+ return $this->defaultIconIdentifier;
+ }
+
+ /**
+ * Registers an icon to be available inside the Icon Factory
+ *
+ * @param string $identifier
+ * @param string $iconProviderClassName
+ * @param array $options
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function registerIcon($identifier, $iconProviderClassName, array $options = [])
+ {
+ if (!in_array(IconProviderInterface::class, class_implements($iconProviderClassName), true)) {
+ throw new \InvalidArgumentException('An IconProvider must implement '
+ . IconProviderInterface::class, 1437425803);
+ }
+ $this->icons[$identifier] = [
+ 'provider' => $iconProviderClassName,
+ 'options' => $options
+ ];
+ }
+
+ /**
+ * Register an icon for a file extension
+ *
+ * @param string $fileExtension
+ * @param string $iconIdentifier
+ */
+ public function registerFileExtension($fileExtension, $iconIdentifier)
+ {
+ $this->fileExtensionMapping[$fileExtension] = $iconIdentifier;
+ }
+
+ /**
+ * Register an icon for a mime-type
+ *
+ * @param string $mimeType
+ * @param string $iconIdentifier
+ */
+ public function registerMimeTypeIcon($mimeType, $iconIdentifier)
+ {
+ $this->mimeTypeMapping[$mimeType] = $iconIdentifier;
+ }
+
+ /**
+ * Fetches the configuration provided by registerIcon()
+ *
+ * @param string $identifier the icon identifier
+ * @return mixed
+ * @throws Exception
+ */
+ public function getIconConfigurationByIdentifier($identifier)
+ {
+ if (!$this->fullInitialized) {
+ $this->initialize();
+ }
+ if (!$this->isRegistered($identifier)) {
+ throw new Exception('Icon with identifier "' . $identifier . '" is not registered"', 1437425804);
+ }
+ if ($this->isDeprecated($identifier)) {
+ $deprecationSettings = $this->deprecatedIcons[$identifier];
+ GeneralUtility::deprecationLog(sprintf($deprecationSettings['message'], $identifier));
+ if (!empty($deprecationSettings['replacement'])) {
+ $identifier = $deprecationSettings['replacement'];
+ }
+ }
+ return $this->icons[$identifier];
+ }
+
+ /**
+ * @param string $identifier
+ *
+ * @return array
+ * @throws Exception
+ * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
+ */
+ public function getDeprecationSettings($identifier)
+ {
+ GeneralUtility::logDeprecatedFunction();
+ if (!$this->isDeprecated($identifier)) {
+ throw new Exception('Icon with identifier "' . $identifier . '" is not deprecated"', 1460976527);
+ }
+ return $this->deprecatedIcons[$identifier];
+ }
+
+ /**
+ * @return array
+ */
+ public function getAllRegisteredIconIdentifiers()
+ {
+ if (!$this->fullInitialized) {
+ $this->initialize();
+ }
+ return array_keys($this->icons);
+ }
+
+ /**
+ * @param string $fileExtension
+ * @return string
+ */
+ public function getIconIdentifierForFileExtension($fileExtension)
+ {
+ // If the file extension is not valid use the default one
+ if (!isset($this->fileExtensionMapping[$fileExtension])) {
+ $fileExtension = 'default';
+ }
+ return $this->fileExtensionMapping[$fileExtension];
+ }
+
+ /**
+ * Get iconIdentifier for given mimeType
+ *
+ * @param string $mimeType
+ * @return string|null Returns null if no icon is registered for the mimeType
+ */
+ public function getIconIdentifierForMimeType($mimeType)
+ {
+ if (!isset($this->mimeTypeMapping[$mimeType])) {
+ return null;
+ }
+ return $this->mimeTypeMapping[$mimeType];
+ }
+
+ /**
+ * Load icons from TCA for each table and add them as "tcarecords-XX" to $this->icons
+ */
+ protected function registerTCAIcons()
+ {
+ $resultArray = [];
+
+ $tcaTables = array_keys($GLOBALS['TCA']);
+ // check every table in the TCA, if an icon is needed
+ foreach ($tcaTables as $tableName) {
+ // This method is only needed for TCA tables where typeicon_classes are not configured
+ if (is_array($GLOBALS['TCA'][$tableName])) {
+ $tcaCtrl = $GLOBALS['TCA'][$tableName]['ctrl'];
+ $iconIdentifier = 'tcarecords-' . $tableName . '-default';
+ if (isset($this->icons[$iconIdentifier])) {
+ continue;
+ }
+ if (isset($tcaCtrl['iconfile'])) {
+ $resultArray[$iconIdentifier] = $tcaCtrl['iconfile'];
+ }
+ }
+ }
+
+ foreach ($resultArray as $iconIdentifier => $iconFilePath) {
+ $iconProviderClass = $this->detectIconProvider($iconFilePath);
+ $this->icons[$iconIdentifier] = [
+ 'provider' => $iconProviderClass,
+ 'options' => [
+ 'source' => $iconFilePath
+ ]
+ ];
+ }
+ $this->tcaInitialized = true;
+ }
+
+ /**
+ * Register module icons
+ */
+ protected function registerModuleIcons()
+ {
+ $moduleConfiguration = $GLOBALS['TBE_MODULES']['_configuration'];
+ foreach ($moduleConfiguration as $moduleKey => $singleModuleConfiguration) {
+ $iconIdentifier = !empty($singleModuleConfiguration['iconIdentifier'])
+ ? $singleModuleConfiguration['iconIdentifier']
+ : null;
+
+ if ($iconIdentifier !== null) {
+ // iconIdentifier found, icon is registered, continue
+ continue;
+ }
+
+ $iconPath = !empty($singleModuleConfiguration['icon'])
+ ? $singleModuleConfiguration['icon']
+ : null;
+ $iconProviderClass = $this->detectIconProvider($iconPath);
+ $iconIdentifier = 'module-icon-' . $moduleKey;
+
+ $this->icons[$iconIdentifier] = [
+ 'provider' => $iconProviderClass,
+ 'options' => [
+ 'source' => $iconPath
+ ]
+ ];
+ }
+ $this->moduleIconsInitialized = true;
+ }
+
+ /**
+ * Register flags
+ */
+ protected function registerFlags()
+ {
+ $iconFolder = 'EXT:core/Resources/Public/Icons/Flags/PNG/';
+ $files = [
+ 'AC', 'AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AN', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ',
+ 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ',
+ 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CP', 'CR', 'CS', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ',
+ 'DE', 'DG', 'DJ', 'DK', 'DM', 'DO', 'DZ',
+ 'EA', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'EU',
+ 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR',
+ 'GA', 'GB-ENG', 'GB-NIR', 'GB-SCT', 'GB-WLS', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY',
+ 'HK', 'HM', 'HN', 'HR', 'HT', 'HU',
+ 'IC', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT',
+ 'JE', 'JM', 'JO', 'JP',
+ 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ',
+ 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY',
+ 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ',
+ 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ',
+ 'OM',
+ 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY',
+ 'QA', 'QC',
+ 'RE', 'RO', 'RS', 'RU', 'RW',
+ 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ',
+ 'TA', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ',
+ 'UA', 'UG', 'UM', 'US', 'UY', 'UZ',
+ 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU',
+ 'WF', 'WS',
+ 'XK',
+ 'YE', 'YT',
+ 'ZA', 'ZM', 'ZW'
+ ];
+ foreach ($files as $file) {
+ $identifier = strtolower($file);
+ $this->icons['flags-' . $identifier] = [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => $iconFolder . $file . '.png'
+ ]
+ ];
+ }
+ $this->flagsInitialized = true;
+ }
+
+ /**
+ * Detect the IconProvider of an icon
+ *
+ * @param string $iconReference
+ * @return string
+ */
+ public function detectIconProvider($iconReference)
+ {
+ if (StringUtility::endsWith(strtolower($iconReference), 'svg')) {
+ return SvgIconProvider::class;
+ }
+ return BitmapIconProvider::class;
+ }
+}
diff --git a/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/IconRegistry9.php b/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/IconRegistry9.php
new file mode 100644
index 00000000..de3a582b
--- /dev/null
+++ b/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/IconRegistry9.php
@@ -0,0 +1,861 @@
+ BitmapIconProvider::class,
+ 'svg' => SvgIconProvider::class
+ ];
+
+ /**
+ * manually registered icons
+ * hopefully obsolete one day
+ *
+ * @var array
+ */
+ protected $staticIcons = [
+
+ /**
+ * Important Information:
+ *
+ * Icons are maintained in an external repository, if new icons are needed
+ * please request them at: https://github.com/wmdbsystems/T3.Icons/issues
+ */
+
+ // Actions
+ 'actions-wizard-link' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'link'
+ ]
+ ],
+ 'actions-wizard-rte' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'arrows-alt'
+ ]
+ ],
+
+ // Apps
+ 'apps-pagetree-category-toggle-hide-checked' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'check-square'
+ ]
+ ],
+
+ // Module
+ 'module-web' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'file-o'
+ ]
+ ],
+ 'module-file' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'image'
+ ]
+ ],
+ 'module-tools' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'rocket'
+ ]
+ ],
+ 'module-system' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'plug'
+ ]
+ ],
+ 'module-help' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'question-circle'
+ ]
+ ],
+
+ // Status
+ 'status-dialog-information' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'exclamation-circle'
+ ]
+ ],
+ 'status-dialog-ok' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'check-circle',
+ ]
+ ],
+ 'status-dialog-notification' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'exclamation-circle'
+ ]
+ ],
+ 'status-dialog-warning' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'exclamation-triangle'
+ ]
+ ],
+ 'status-dialog-error' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'exclamation-circle'
+ ]
+ ],
+ 'status-status-checked' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'check',
+ ]
+ ],
+ 'status-status-current' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'caret-right',
+ ]
+ ],
+ 'status-status-sorting-asc' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'caret-up',
+ ]
+ ],
+ 'status-status-sorting-desc' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'caret-down',
+ ]
+ ],
+ 'status-status-sorting-light-asc' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'caret-up',
+ ]
+ ],
+ 'status-status-sorting-light-desc' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'caret-down',
+ ]
+ ],
+ 'status-status-permission-granted' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'check',
+ ]
+ ],
+ 'status-status-permission-denied' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'times',
+ ]
+ ],
+
+ // Extensions
+ 'extensions-extensionmanager-update-script' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'refresh',
+ ]
+ ],
+ 'extensions-scheduler-run-task' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'play-circle',
+ ]
+ ],
+ 'extensions-scheduler-run-task-cron' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'clock-o',
+ ]
+ ],
+ 'generate-ws-preview-link' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:workspaces/Resources/Public/Images/generate-ws-preview-link.png'
+ ]
+ ],
+
+ // Empty
+ 'empty-empty' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'empty-empty',
+ ]
+ ],
+
+ // System Information
+ 'sysinfo-php-version' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'code'
+ ]
+ ],
+ 'sysinfo-database' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'database'
+ ]
+ ],
+ 'sysinfo-application-context' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'tasks'
+ ]
+ ],
+ 'sysinfo-composer-mode' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'music'
+ ]
+ ],
+ 'sysinfo-git' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'git'
+ ]
+ ],
+ 'sysinfo-webserver' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'server'
+ ]
+ ],
+ 'sysinfo-os-linux' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'linux'
+ ]
+ ],
+ 'sysinfo-os-apple' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'apple'
+ ]
+ ],
+ 'sysinfo-os-windows' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'windows'
+ ]
+ ],
+
+ // Sysnote
+ 'sysnote-type-0' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'sticky-note-o'
+ ]
+ ],
+ 'sysnote-type-1' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'cog'
+ ]
+ ],
+ 'sysnote-type-2' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'code'
+ ]
+ ],
+ 'sysnote-type-3' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'thumb-tack'
+ ]
+ ],
+ 'sysnote-type-4' => [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'check-square'
+ ]
+ ],
+
+ // Flags will be auto-registered after we have the SVG files
+ 'flags-multiple' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/multiple.png'
+ ]
+ ],
+ 'flags-catalonia' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/catalonia.png'
+ ]
+ ],
+ 'flags-en-us-gb' => [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => 'EXT:core/Resources/Public/Icons/Flags/en_us-gb.png'
+ ]
+ ],
+ ];
+
+ /**
+ * Mapping of file extensions to mimetypes
+ *
+ * @var string[]
+ */
+ protected $fileExtensionMapping = [
+ 'htm' => 'mimetypes-text-html',
+ 'html' => 'mimetypes-text-html',
+ 'css' => 'mimetypes-text-css',
+ 'js' => 'mimetypes-text-js',
+ 'csv' => 'mimetypes-text-csv',
+ 'php' => 'mimetypes-text-php',
+ 'php6' => 'mimetypes-text-php',
+ 'php5' => 'mimetypes-text-php',
+ 'php4' => 'mimetypes-text-php',
+ 'php3' => 'mimetypes-text-php',
+ 'inc' => 'mimetypes-text-php',
+ 'ts' => 'mimetypes-text-ts',
+ 'typoscript' => 'mimetypes-text-typoscript',
+ 'txt' => 'mimetypes-text-text',
+ 'class' => 'mimetypes-text-text',
+ 'tmpl' => 'mimetypes-text-text',
+ 'jpg' => 'mimetypes-media-image',
+ 'jpeg' => 'mimetypes-media-image',
+ 'gif' => 'mimetypes-media-image',
+ 'png' => 'mimetypes-media-image',
+ 'bmp' => 'mimetypes-media-image',
+ 'tif' => 'mimetypes-media-image',
+ 'tiff' => 'mimetypes-media-image',
+ 'tga' => 'mimetypes-media-image',
+ 'psd' => 'mimetypes-media-image',
+ 'eps' => 'mimetypes-media-image',
+ 'ai' => 'mimetypes-media-image',
+ 'svg' => 'mimetypes-media-image',
+ 'pcx' => 'mimetypes-media-image',
+ 'avi' => 'mimetypes-media-video',
+ 'mpg' => 'mimetypes-media-video',
+ 'mpeg' => 'mimetypes-media-video',
+ 'mov' => 'mimetypes-media-video',
+ 'vimeo' => 'mimetypes-media-video-vimeo',
+ 'youtube' => 'mimetypes-media-video-youtube',
+ 'wav' => 'mimetypes-media-audio',
+ 'mp3' => 'mimetypes-media-audio',
+ 'ogg' => 'mimetypes-media-audio',
+ 'flac' => 'mimetypes-media-audio',
+ 'opus' => 'mimetypes-media-audio',
+ 'mid' => 'mimetypes-media-audio',
+ 'swf' => 'mimetypes-media-flash',
+ 'swa' => 'mimetypes-media-flash',
+ 'exe' => 'mimetypes-application',
+ 'com' => 'mimetypes-application',
+ 't3x' => 'mimetypes-compressed',
+ 't3d' => 'mimetypes-compressed',
+ 'zip' => 'mimetypes-compressed',
+ 'tgz' => 'mimetypes-compressed',
+ 'gz' => 'mimetypes-compressed',
+ 'pdf' => 'mimetypes-pdf',
+ 'doc' => 'mimetypes-word',
+ 'dot' => 'mimetypes-word',
+ 'docm' => 'mimetypes-word',
+ 'docx' => 'mimetypes-word',
+ 'dotm' => 'mimetypes-word',
+ 'dotx' => 'mimetypes-word',
+ 'sxw' => 'mimetypes-word',
+ 'rtf' => 'mimetypes-word',
+ 'xls' => 'mimetypes-excel',
+ 'xlsm' => 'mimetypes-excel',
+ 'xlsx' => 'mimetypes-excel',
+ 'xltm' => 'mimetypes-excel',
+ 'xltx' => 'mimetypes-excel',
+ 'sxc' => 'mimetypes-excel',
+ 'pps' => 'mimetypes-powerpoint',
+ 'ppsx' => 'mimetypes-powerpoint',
+ 'ppt' => 'mimetypes-powerpoint',
+ 'pptm' => 'mimetypes-powerpoint',
+ 'pptx' => 'mimetypes-powerpoint',
+ 'potm' => 'mimetypes-powerpoint',
+ 'potx' => 'mimetypes-powerpoint',
+ 'mount' => 'apps-filetree-mount',
+ 'folder' => 'apps-filetree-folder-default',
+ 'default' => 'mimetypes-other-other',
+ ];
+
+ /**
+ * Mapping of mime types to icons
+ *
+ * @var string[]
+ */
+ protected $mimeTypeMapping = [
+ 'video/*' => 'mimetypes-media-video',
+ 'audio/*' => 'mimetypes-media-audio',
+ 'image/*' => 'mimetypes-media-image',
+ 'text/*' => 'mimetypes-text-text',
+ ];
+
+ /**
+ * Array of deprecated icons, add deprecated icons to this array and remove it from registry
+ * - Index of this array contains the deprecated icon
+ * - Value of each entry may contain a possible new identifier
+ *
+ * Example:
+ * [
+ * 'deprecated-icon-identifier' => 'new-icon-identifier',
+ * 'another-deprecated-identifier' => null,
+ * ]
+ *
+ * @var array
+ */
+ protected $deprecatedIcons = [
+ 'status-warning-lock' => 'warning-lock',
+ 'status-warning-in-use' => 'warning-in-use',
+ 'status-status-reference-hard' => 'status-reference-hard',
+ 'status-status-reference-soft' => 'status-reference-soft',
+ 'status-status-edit-read-only' => 'status-edit-read-only',
+ 'extensions-workspaces-generatepreviewlink' => 'generate-ws-preview-link',
+ ];
+
+ /**
+ * @var string
+ */
+ protected $defaultIconIdentifier = 'default-not-found';
+
+ /**
+ * The constructor
+ */
+ public function __construct()
+ {
+ $this->initialize();
+ }
+
+ /**
+ * Initialize the registry
+ * This method can be called multiple times, depending on initialization status.
+ * In some cases e.g. TCA is not available, the method must be called multiple times.
+ */
+ protected function initialize()
+ {
+ if (!$this->backendIconsInitialized) {
+ $this->getCachedBackendIcons();
+ }
+ if (!$this->tcaInitialized && !empty($GLOBALS['TCA'])) {
+ $this->registerTCAIcons();
+ }
+ if (!$this->moduleIconsInitialized && !empty($GLOBALS['TBE_MODULES'])) {
+ $this->registerModuleIcons();
+ }
+ if (!$this->flagsInitialized) {
+ $this->registerFlags();
+ }
+ if ($this->backendIconsInitialized
+ && $this->tcaInitialized
+ && $this->moduleIconsInitialized
+ && $this->flagsInitialized) {
+ $this->fullInitialized = true;
+ }
+ }
+
+ /**
+ * Retrieve the icons from cache render them when not cached yet
+ */
+ protected function getCachedBackendIcons()
+ {
+ $cacheIdentifier = 'BackendIcons_' . sha1((TYPO3_version . PATH_site . 'BackendIcons'));
+ /** @var \TYPO3\CMS\Core\Cache\Frontend\VariableFrontend $assetsCache */
+ $assetsCache = GeneralUtility::makeInstance(CacheManager::class)->getCache('assets');
+ $cacheEntry = $assetsCache->get($cacheIdentifier);
+
+ if ($cacheEntry !== false) {
+ $this->icons = $cacheEntry;
+ } else {
+ $this->registerBackendIcons();
+ // all found icons should now be present, for historic reasons now merge w/ the statically declared icons
+ $this->icons = array_merge($this->icons, $this->staticIcons);
+ $assetsCache->set($cacheIdentifier, $this->icons);
+ }
+ // if there's now at least one icon registered, consider it successful
+ if (is_array($this->icons) && (count($this->icons) >= count($this->staticIcons))) {
+ $this->backendIconsInitialized = true;
+ }
+ }
+
+ /**
+ * Automatically find and register the core backend icons
+ */
+ protected function registerBackendIcons()
+ {
+ foreach ($this->backendIconPaths as $iconPath) {
+ $absoluteIconFolderPath = GeneralUtility::getFileAbsFileName($iconPath);
+ if ($absoluteIconFolderPath === '' || !is_readable($absoluteIconFolderPath)) {
+ // maybe EXT:path could not be resolved, then ignore
+ continue;
+ }
+
+ $finder = new Finder();
+ $finder
+ ->files()
+ ->in($absoluteIconFolderPath)
+ ->name('/\.(' . implode('|', array_keys($this->backendIconAllowedExtensionsWithProvider)) . ')$/');
+
+ foreach ($finder as $iconFile) {
+ $iconOptions = [
+ 'source' => $iconPath . GeneralUtility::fixWindowsFilePath($iconFile->getRelativePathname())
+ ];
+ // kind of hotfix for now, needs a nicer concept later
+ if (strpos($iconFile->getFilename(), 'spinner') === 0) {
+ $iconOptions['spinning'] = true;
+ }
+
+ $this->registerIcon(
+ $iconFile->getBasename('.' . $iconFile->getExtension()),
+ $this->backendIconAllowedExtensionsWithProvider[$iconFile->getExtension()],
+ $iconOptions
+ );
+ }
+ }
+ }
+
+ /**
+ * @param string $identifier
+ * @return bool
+ */
+ public function isRegistered($identifier)
+ {
+ if (!$this->fullInitialized) {
+ $this->initialize();
+ }
+ return isset($this->icons[$identifier]);
+ }
+
+ /**
+ * @param string $identifier
+ * @return bool
+ */
+ public function isDeprecated($identifier)
+ {
+ return isset($this->deprecatedIcons[$identifier]);
+ }
+
+ /**
+ * @return string
+ */
+ public function getDefaultIconIdentifier()
+ {
+ return $this->defaultIconIdentifier;
+ }
+
+ /**
+ * Registers an icon to be available inside the Icon Factory
+ *
+ * @param string $identifier
+ * @param string $iconProviderClassName
+ * @param array $options
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function registerIcon($identifier, $iconProviderClassName, array $options = [])
+ {
+ if (!in_array(IconProviderInterface::class, class_implements($iconProviderClassName), true)) {
+ throw new \InvalidArgumentException('An IconProvider must implement '
+ . IconProviderInterface::class, 1437425803);
+ }
+ $this->icons[$identifier] = [
+ 'provider' => $iconProviderClassName,
+ 'options' => $options
+ ];
+ }
+
+ /**
+ * Register an icon for a file extension
+ *
+ * @param string $fileExtension
+ * @param string $iconIdentifier
+ */
+ public function registerFileExtension($fileExtension, $iconIdentifier)
+ {
+ $this->fileExtensionMapping[$fileExtension] = $iconIdentifier;
+ }
+
+ /**
+ * Register an icon for a mime-type
+ *
+ * @param string $mimeType
+ * @param string $iconIdentifier
+ */
+ public function registerMimeTypeIcon($mimeType, $iconIdentifier)
+ {
+ $this->mimeTypeMapping[$mimeType] = $iconIdentifier;
+ }
+
+ /**
+ * Fetches the configuration provided by registerIcon()
+ *
+ * @param string $identifier the icon identifier
+ * @return mixed
+ * @throws Exception
+ */
+ public function getIconConfigurationByIdentifier($identifier)
+ {
+ if (!$this->fullInitialized) {
+ $this->initialize();
+ }
+ if (!$this->isRegistered($identifier)) {
+ throw new Exception('Icon with identifier "' . $identifier . '" is not registered"', 1437425804);
+ }
+ if ($this->isDeprecated($identifier)) {
+ $replacement = $this->deprecatedIcons[$identifier];
+ if (!empty($replacement)) {
+ $message = 'The icon "%s" is deprecated since TYPO3 v9 and will be removed in TYPO3 v10. Please use "%s" instead.';
+ $arguments = [$replacement];
+ } else {
+ $message = 'The icon "%s" is deprecated since TYPO3 v9 and will be removed in TYPO3 v10.';
+ $arguments = [];
+ }
+ trigger_error(vsprintf($message, $arguments), E_USER_DEPRECATED);
+ }
+ return $this->icons[$identifier];
+ }
+
+ /**
+ * @return array
+ */
+ public function getAllRegisteredIconIdentifiers()
+ {
+ if (!$this->fullInitialized) {
+ $this->initialize();
+ }
+ return array_keys($this->icons);
+ }
+
+ /**
+ * @param string $fileExtension
+ * @return string
+ */
+ public function getIconIdentifierForFileExtension($fileExtension)
+ {
+ // If the file extension is not valid use the default one
+ if (!isset($this->fileExtensionMapping[$fileExtension])) {
+ $fileExtension = 'default';
+ }
+ return $this->fileExtensionMapping[$fileExtension];
+ }
+
+ /**
+ * Get iconIdentifier for given mimeType
+ *
+ * @param string $mimeType
+ * @return string|null Returns null if no icon is registered for the mimeType
+ */
+ public function getIconIdentifierForMimeType($mimeType)
+ {
+ if (!isset($this->mimeTypeMapping[$mimeType])) {
+ return null;
+ }
+ return $this->mimeTypeMapping[$mimeType];
+ }
+
+ /**
+ * Load icons from TCA for each table and add them as "tcarecords-XX" to $this->icons
+ */
+ protected function registerTCAIcons()
+ {
+ $resultArray = [];
+
+ $tcaTables = array_keys($GLOBALS['TCA']);
+ // check every table in the TCA, if an icon is needed
+ foreach ($tcaTables as $tableName) {
+ // This method is only needed for TCA tables where typeicon_classes are not configured
+ if (is_array($GLOBALS['TCA'][$tableName])) {
+ $tcaCtrl = $GLOBALS['TCA'][$tableName]['ctrl'];
+ $iconIdentifier = 'tcarecords-' . $tableName . '-default';
+ if (isset($this->icons[$iconIdentifier])) {
+ continue;
+ }
+ if (isset($tcaCtrl['iconfile'])) {
+ $resultArray[$iconIdentifier] = $tcaCtrl['iconfile'];
+ }
+ }
+ }
+
+ foreach ($resultArray as $iconIdentifier => $iconFilePath) {
+ $iconProviderClass = $this->detectIconProvider($iconFilePath);
+ $this->icons[$iconIdentifier] = [
+ 'provider' => $iconProviderClass,
+ 'options' => [
+ 'source' => $iconFilePath
+ ]
+ ];
+ }
+ $this->tcaInitialized = true;
+ }
+
+ /**
+ * Register module icons
+ */
+ protected function registerModuleIcons()
+ {
+ $moduleConfiguration = $GLOBALS['TBE_MODULES']['_configuration'];
+ foreach ($moduleConfiguration as $moduleKey => $singleModuleConfiguration) {
+ $iconIdentifier = !empty($singleModuleConfiguration['iconIdentifier'])
+ ? $singleModuleConfiguration['iconIdentifier']
+ : null;
+
+ if ($iconIdentifier !== null) {
+ // iconIdentifier found, icon is registered, continue
+ continue;
+ }
+
+ $iconPath = !empty($singleModuleConfiguration['icon'])
+ ? $singleModuleConfiguration['icon']
+ : null;
+ $iconProviderClass = $this->detectIconProvider($iconPath);
+ $iconIdentifier = 'module-icon-' . $moduleKey;
+
+ $this->icons[$iconIdentifier] = [
+ 'provider' => $iconProviderClass,
+ 'options' => [
+ 'source' => $iconPath
+ ]
+ ];
+ }
+ $this->moduleIconsInitialized = true;
+ }
+
+ /**
+ * Register flags
+ */
+ protected function registerFlags()
+ {
+ $iconFolder = 'EXT:core/Resources/Public/Icons/Flags/PNG/';
+ $files = [
+ 'AC', 'AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AN', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ',
+ 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ',
+ 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CP', 'CR', 'CS', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ',
+ 'DE', 'DG', 'DJ', 'DK', 'DM', 'DO', 'DZ',
+ 'EA', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'EU',
+ 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR',
+ 'GA', 'GB-ENG', 'GB-NIR', 'GB-SCT', 'GB-WLS', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY',
+ 'HK', 'HM', 'HN', 'HR', 'HT', 'HU',
+ 'IC', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT',
+ 'JE', 'JM', 'JO', 'JP',
+ 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ',
+ 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY',
+ 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ',
+ 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ',
+ 'OM',
+ 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY',
+ 'QA', 'QC',
+ 'RE', 'RO', 'RS', 'RU', 'RW',
+ 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ',
+ 'TA', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ',
+ 'UA', 'UG', 'UM', 'US', 'UY', 'UZ',
+ 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU',
+ 'WF', 'WS',
+ 'XK',
+ 'YE', 'YT',
+ 'ZA', 'ZM', 'ZW'
+ ];
+ foreach ($files as $file) {
+ $identifier = strtolower($file);
+ $this->icons['flags-' . $identifier] = [
+ 'provider' => BitmapIconProvider::class,
+ 'options' => [
+ 'source' => $iconFolder . $file . '.png'
+ ]
+ ];
+ }
+ $this->flagsInitialized = true;
+ }
+
+ /**
+ * Detect the IconProvider of an icon
+ *
+ * @param string $iconReference
+ * @return string
+ */
+ public function detectIconProvider($iconReference)
+ {
+ if (StringUtility::endsWith(strtolower($iconReference), 'svg')) {
+ return SvgIconProvider::class;
+ }
+ return BitmapIconProvider::class;
+ }
+}
diff --git a/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/general_utility_icon_provider_test.php b/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/general_utility_icon_provider_test.php
new file mode 100644
index 00000000..aa16a82d
--- /dev/null
+++ b/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/general_utility_icon_provider_test.php
@@ -0,0 +1,29 @@
+getIcon('module-file');
+}
+
+
diff --git a/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/icon_definition_test.php b/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/icon_definition_test.php
new file mode 100644
index 00000000..f9ac50e5
--- /dev/null
+++ b/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/icon_definition_test.php
@@ -0,0 +1,55 @@
+ [
+ 'provider' => FontawesomeIconProvider::class,
+ 'options' => [
+ 'name' => 'link'
+ ]
+ ],
+ ];
+}
diff --git a/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/icon_provider_test.php b/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/icon_provider_test.php
new file mode 100644
index 00000000..100b7b09
--- /dev/null
+++ b/typo3-cms/testData/com/cedricziel/idea/typo3/codeInsight/icon/icon_provider_test.php
@@ -0,0 +1,4 @@
+getIcon('module-file');
From 331cb372356ca355c3b8b945ddcc3e205d38dafb Mon Sep 17 00:00:00 2001
From: Cedric Ziel
Date: Tue, 9 Oct 2018 22:03:48 +0200
Subject: [PATCH 2/5] [T3CMS] Re-order methods in IconIndex
---
.../idea/typo3/index/IconIndex.java | 50 +++++++++----------
1 file changed, 25 insertions(+), 25 deletions(-)
diff --git a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/index/IconIndex.java b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/index/IconIndex.java
index dcad2a17..786d1349 100644
--- a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/index/IconIndex.java
+++ b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/index/IconIndex.java
@@ -107,31 +107,6 @@ public static boolean hasIcon(@NotNull Project project, @NotNull String iconIden
return iconExists.get();
}
- @NotNull
- @Override
- public ID getName() {
- return KEY;
- }
-
- @NotNull
- @Override
- public DataIndexer getIndexer() {
- return inputData -> {
- Map iconIdentifiers = new THashMap<>();
-
- // index the icon registry
- PsiFile psiFile = inputData.getPsiFile();
- if (psiFile instanceof PhpFile) {
- visitPhpFile(iconIdentifiers, (PhpFile) psiFile);
- }
-
- Map result = new THashMap<>();
- iconIdentifiers.forEach((k, v) -> result.put(k, null));
-
- return result;
- };
- }
-
private static void visitPhpFile(Map iconIdentifiers, PhpFile psiFile) {
CachedValue> userData = psiFile.getUserData(TYPO3_CMS_ICON_USAGES);
if (userData != null && userData.hasUpToDateValue()) {
@@ -169,6 +144,31 @@ private static void visitIconRegistry(Map iconIdentifiers, Php
flagVisitor.getMap().forEach(iconIdentifiers::put);
}
+ @NotNull
+ @Override
+ public ID getName() {
+ return KEY;
+ }
+
+ @NotNull
+ @Override
+ public DataIndexer getIndexer() {
+ return inputData -> {
+ Map iconIdentifiers = new THashMap<>();
+
+ // index the icon registry
+ PsiFile psiFile = inputData.getPsiFile();
+ if (psiFile instanceof PhpFile) {
+ visitPhpFile(iconIdentifiers, (PhpFile) psiFile);
+ }
+
+ Map result = new THashMap<>();
+ iconIdentifiers.forEach((k, v) -> result.put(k, null));
+
+ return result;
+ };
+ }
+
@NotNull
@Override
public KeyDescriptor getKeyDescriptor() {
From f2ca1c4b22835614ac5acd1e8cfc584b504b39a7 Mon Sep 17 00:00:00 2001
From: Cedric Ziel
Date: Wed, 10 Oct 2018 19:27:03 +0200
Subject: [PATCH 3/5] [T3CMS] Allow fetching deprecated icons in project with
IconIndex in v9
---
.../DeprecatedIconsFromRegistryVisitor.java | 44 +++++++++++++++++++
.../idea/typo3/index/IconIndex.java | 37 ++++++++++++++--
.../idea/typo3/index/IconIndexTest.java | 19 +++++---
3 files changed, 90 insertions(+), 10 deletions(-)
create mode 100644 typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/DeprecatedIconsFromRegistryVisitor.java
diff --git a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/DeprecatedIconsFromRegistryVisitor.java b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/DeprecatedIconsFromRegistryVisitor.java
new file mode 100644
index 00000000..9ae1ba72
--- /dev/null
+++ b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/DeprecatedIconsFromRegistryVisitor.java
@@ -0,0 +1,44 @@
+package com.cedricziel.idea.typo3.icons;
+
+import com.intellij.patterns.PlatformPatterns;
+import com.intellij.patterns.PsiElementPattern;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.util.PsiTreeUtil;
+import com.jetbrains.php.lang.parser.PhpElementTypes;
+import com.jetbrains.php.lang.psi.elements.Field;
+import com.jetbrains.php.lang.psi.elements.StringLiteralExpression;
+import com.jetbrains.php.lang.psi.visitors.PhpRecursiveElementVisitor;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class DeprecatedIconsFromRegistryVisitor extends PhpRecursiveElementVisitor {
+ public Map result;
+
+ public DeprecatedIconsFromRegistryVisitor() {
+ this.result = new HashMap<>();
+ }
+
+ @Override
+ public void visitElement(PsiElement element) {
+ if (deprecatedIconArrayKeyPattern().accepts(element)) {
+ Field field = (Field) PsiTreeUtil.findFirstParent(element, e -> e instanceof Field);
+ if (field != null && field.getName().equals("deprecatedIcons")) {
+ String iconIdentifier = "";
+ StringLiteralExpression literalExpression = (StringLiteralExpression) element;
+ iconIdentifier = literalExpression.getContents();
+
+
+ result.putIfAbsent(iconIdentifier, "");
+ }
+ }
+
+ super.visitElement(element);
+ }
+
+ private PsiElementPattern.Capture deprecatedIconArrayKeyPattern() {
+ return PlatformPatterns.psiElement(StringLiteralExpression.class).withParent(
+ PlatformPatterns.psiElement(PhpElementTypes.ARRAY_KEY).withSuperParent(3, Field.class)
+ );
+ }
+}
diff --git a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/index/IconIndex.java b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/index/IconIndex.java
index 786d1349..76743104 100644
--- a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/index/IconIndex.java
+++ b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/index/IconIndex.java
@@ -1,5 +1,6 @@
package com.cedricziel.idea.typo3.index;
+import com.cedricziel.idea.typo3.icons.DeprecatedIconsFromRegistryVisitor;
import com.cedricziel.idea.typo3.icons.IconStub;
import com.cedricziel.idea.typo3.psi.visitor.CoreFlagParserVisitor;
import com.cedricziel.idea.typo3.psi.visitor.CoreIconParserVisitor;
@@ -17,16 +18,14 @@
import com.intellij.util.indexing.*;
import com.intellij.util.io.EnumeratorStringDescriptor;
import com.intellij.util.io.KeyDescriptor;
+import com.jetbrains.php.PhpIndex;
import com.jetbrains.php.lang.psi.PhpFile;
import com.jetbrains.php.lang.psi.PhpPsiUtil;
import com.jetbrains.php.lang.psi.elements.PhpClass;
import gnu.trove.THashMap;
import org.jetbrains.annotations.NotNull;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import static com.cedricziel.idea.typo3.util.IconUtil.ICON_REGISTRY_CLASS;
@@ -35,6 +34,7 @@ public class IconIndex extends ScalarIndexExtension {
private static final Key>> TYPO3_CMS_ICON_USAGES = new Key<>("TYPO3_CMS_ICON_USAGES");
private static final Key> TYPO3_CMS_PROJECT_ICONS = new Key<>("TYPO3_CMS_PROJECT_ICONS");
+ private static final Key>> TYPO3_CMS_PROJECT_DEPRECATED_ICONS = new Key<>("TYPO3_CMS_PROJECT_DEPRECATED_ICONS");
public static ID KEY = ID.create("com.cedricziel.idea.typo3.index.icon");
@@ -107,6 +107,35 @@ public static boolean hasIcon(@NotNull Project project, @NotNull String iconIden
return iconExists.get();
}
+ public static Map getDeprecatedIconIdentifiers(@NotNull Project project) {
+ CachedValue> value = project.getUserData(TYPO3_CMS_PROJECT_DEPRECATED_ICONS);
+ if (value != null && value.hasUpToDateValue()) {
+ return value.getValue();
+ }
+
+ CachedValue> cachedValue = CachedValuesManager.getManager(project).createCachedValue(() -> {
+ return CachedValueProvider.Result.create(getDeprecatedIconsUncached(project), PsiModificationTracker.MODIFICATION_COUNT);
+ }, false);
+
+ project.putUserData(TYPO3_CMS_PROJECT_DEPRECATED_ICONS, cachedValue);
+
+ return cachedValue.getValue();
+ }
+
+ @NotNull
+ private static Map getDeprecatedIconsUncached(@NotNull Project project) {
+ Map result = new HashMap<>();
+ for (PhpClass phpClass : PhpIndex.getInstance(project).getClassesByFQN(ICON_REGISTRY_CLASS)) {
+ DeprecatedIconsFromRegistryVisitor visitor = new DeprecatedIconsFromRegistryVisitor();
+
+ phpClass.accept(visitor);
+
+ visitor.result.forEach(result::putIfAbsent);
+ }
+
+ return result;
+ }
+
private static void visitPhpFile(Map iconIdentifiers, PhpFile psiFile) {
CachedValue> userData = psiFile.getUserData(TYPO3_CMS_ICON_USAGES);
if (userData != null && userData.hasUpToDateValue()) {
diff --git a/typo3-cms/src/test/java/com/cedricziel/idea/typo3/index/IconIndexTest.java b/typo3-cms/src/test/java/com/cedricziel/idea/typo3/index/IconIndexTest.java
index 26acb670..a3d51935 100644
--- a/typo3-cms/src/test/java/com/cedricziel/idea/typo3/index/IconIndexTest.java
+++ b/typo3-cms/src/test/java/com/cedricziel/idea/typo3/index/IconIndexTest.java
@@ -12,23 +12,30 @@ public void testIconsAreDetectedForv7() {
myFixture.addFileToProject("foo/ext_emconf.php", "");
myFixture.configureByFile("IconRegistry7.php");
- IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("actions-edit-cut-release");
- IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("flags-pg");
+ assertTrue(IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("actions-edit-cut-release"));
+ assertTrue(IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("flags-pg"));
}
public void testIconsAreDetectedForv8() {
myFixture.addFileToProject("foo/ext_emconf.php", "");
myFixture.configureByFile("IconRegistry8.php");
- IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("actions-edit-cut-release");
- IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("flags-pg");
+ assertTrue(IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("actions-edit-cut-release"));
+ assertTrue(IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("flags-pg"));
}
public void testIconsAreDetectedForv9() {
myFixture.addFileToProject("foo/ext_emconf.php", "");
myFixture.configureByFile("IconRegistry9.php");
- IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("actions-wizard-link");
- IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("flags-pg");
+ assertTrue(IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("actions-wizard-link"));
+ assertTrue(IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("flags-pg"));
+ }
+
+ public void testDeprecatedIconsAreDetectedForv9() {
+ myFixture.addFileToProject("foo/ext_emconf.php", "");
+ myFixture.configureByFile("IconRegistry9.php");
+
+ assertTrue(IconIndex.getDeprecatedIconIdentifiers(myFixture.getProject()).containsKey("status-status-edit-read-only"));
}
}
From 4f15effac244f866e74236bbc61df02f486e6a54 Mon Sep 17 00:00:00 2001
From: Cedric Ziel
Date: Wed, 10 Oct 2018 19:46:20 +0200
Subject: [PATCH 4/5] [T3CMS] Highlight deprecated icons
---
.../idea/typo3/annotation/IconAnnotator.java | 4 ++
.../DeprecatedIconUsageInspection.java | 56 +++++++++++++++++++
.../src/main/resources/META-INF/plugin.xml | 6 ++
.../DeprecatedIconUsageInspection.html | 7 +++
.../DeprecatedIconUsageInspectionTest.java | 34 +++++++++++
.../cedricziel/idea/typo3/icons/classes.php | 8 +++
.../idea/typo3/icons/deprecated_icon.php | 4 ++
.../idea/typo3/icons/deprecated_icon_off.php | 4 ++
8 files changed, 123 insertions(+)
create mode 100644 typo3-cms/src/main/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspection.java
create mode 100644 typo3-cms/src/main/resources/inspectionDescriptions/DeprecatedIconUsageInspection.html
create mode 100644 typo3-cms/src/test/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspectionTest.java
create mode 100644 typo3-cms/testData/com/cedricziel/idea/typo3/icons/classes.php
create mode 100644 typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon.php
create mode 100644 typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon_off.php
diff --git a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/annotation/IconAnnotator.java b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/annotation/IconAnnotator.java
index f85b1275..28d27972 100644
--- a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/annotation/IconAnnotator.java
+++ b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/annotation/IconAnnotator.java
@@ -52,6 +52,10 @@ private void annotateIconUsage(PsiElement psiElement, AnnotationHolder annotatio
return;
}
+ if (IconIndex.getDeprecatedIconIdentifiers(psiElement.getProject()).containsKey(value)) {
+ return;
+ }
+
annotationHolder.createWarningAnnotation(new TextRange(psiElement.getTextRange().getStartOffset() + 1, psiElement.getTextRange().getEndOffset() - 1), "Unresolved icon - this may also occur if the icon is defined in your extension, but not in the global icon registry.");
}
}
diff --git a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspection.java b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspection.java
new file mode 100644
index 00000000..a9089ca0
--- /dev/null
+++ b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspection.java
@@ -0,0 +1,56 @@
+package com.cedricziel.idea.typo3.codeInspection;
+
+import com.cedricziel.idea.typo3.TYPO3CMSProjectSettings;
+import com.cedricziel.idea.typo3.index.IconIndex;
+import com.cedricziel.idea.typo3.psi.PhpElementsUtil;
+import com.intellij.codeInspection.ProblemsHolder;
+import com.intellij.patterns.PlatformPatterns;
+import com.intellij.patterns.PsiElementPattern;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiElementVisitor;
+import com.intellij.psi.util.PsiTreeUtil;
+import com.jetbrains.php.lang.inspections.PhpInspection;
+import com.jetbrains.php.lang.psi.elements.MethodReference;
+import com.jetbrains.php.lang.psi.elements.ParameterList;
+import com.jetbrains.php.lang.psi.elements.StringLiteralExpression;
+import org.jetbrains.annotations.NotNull;
+
+public class DeprecatedIconUsageInspection extends PhpInspection {
+ @NotNull
+ @Override
+ public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder problemsHolder, boolean b) {
+ if (!TYPO3CMSProjectSettings.getInstance(problemsHolder.getProject()).pluginEnabled) {
+ return new PsiElementVisitor() {
+ };
+ }
+
+ return new PsiElementVisitor() {
+ @Override
+ public void visitElement(PsiElement element) {
+ if (!stringParameterInMethodReference().accepts(element)) {
+ return;
+ }
+
+ StringLiteralExpression literalExpression = (StringLiteralExpression) element;
+ String value = literalExpression.getContents();
+
+ if (value.isEmpty()) {
+ return;
+ }
+
+ PsiElement methodReference = PsiTreeUtil.getParentOfType(element, MethodReference.class);
+ if (PhpElementsUtil.isMethodWithFirstStringOrFieldReference(methodReference, "getIcon")) {
+ if (IconIndex.getDeprecatedIconIdentifiers(problemsHolder.getProject()).containsKey(value)) {
+ problemsHolder.registerProblem(element, "Deprecated icon usage");
+ }
+ }
+
+ super.visitElement(element);
+ }
+ };
+ }
+
+ private PsiElementPattern.Capture stringParameterInMethodReference() {
+ return PlatformPatterns.psiElement(StringLiteralExpression.class).withParent(ParameterList.class);
+ }
+}
diff --git a/typo3-cms/src/main/resources/META-INF/plugin.xml b/typo3-cms/src/main/resources/META-INF/plugin.xml
index 40ce8d41..1c2d98f7 100644
--- a/typo3-cms/src/main/resources/META-INF/plugin.xml
+++ b/typo3-cms/src/main/resources/META-INF/plugin.xml
@@ -251,6 +251,12 @@ It is a great inspiration for possible solutions and parts of the code.
enabledByDefault="true" level="WARNING"
implementationClass="com.cedricziel.idea.typo3.codeInspection.LegacyClassesForIDEInspection"/>
+
+
diff --git a/typo3-cms/src/main/resources/inspectionDescriptions/DeprecatedIconUsageInspection.html b/typo3-cms/src/main/resources/inspectionDescriptions/DeprecatedIconUsageInspection.html
new file mode 100644
index 00000000..fbc5907a
--- /dev/null
+++ b/typo3-cms/src/main/resources/inspectionDescriptions/DeprecatedIconUsageInspection.html
@@ -0,0 +1,7 @@
+
+
+Usage of a deprecated icon identifier.
+
+Can detect deprecated icons
+
+
diff --git a/typo3-cms/src/test/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspectionTest.java b/typo3-cms/src/test/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspectionTest.java
new file mode 100644
index 00000000..bcde7c68
--- /dev/null
+++ b/typo3-cms/src/test/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspectionTest.java
@@ -0,0 +1,34 @@
+package com.cedricziel.idea.typo3.codeInspection;
+
+import com.cedricziel.idea.typo3.AbstractTestCase;
+
+public class DeprecatedIconUsageInspectionTest extends AbstractTestCase {
+ @Override
+ protected String getTestDataPath() {
+ return super.getTestDataPath() + "/icons";
+ }
+
+ public void testInspectionIsDisabledWhenPluginIsDisabled() {
+ disablePlugin();
+
+ myFixture.copyFileToProject("classes.php");
+ myFixture.copyFileToProject("IconRegistry9.php");
+
+ myFixture.enableInspections(DeprecatedIconUsageInspection.class);
+
+ myFixture.configureByFile("deprecated_icon_off.php");
+
+ myFixture.testHighlighting();
+ }
+
+ public void testInspectionHighlightsDeprecatedIconUsage() {
+ myFixture.copyFileToProject("classes.php");
+ myFixture.copyFileToProject("IconRegistry9.php");
+
+ myFixture.enableInspections(DeprecatedIconUsageInspection.class);
+
+ myFixture.configureByFile("deprecated_icon.php");
+
+ myFixture.testHighlighting();
+ }
+}
diff --git a/typo3-cms/testData/com/cedricziel/idea/typo3/icons/classes.php b/typo3-cms/testData/com/cedricziel/idea/typo3/icons/classes.php
new file mode 100644
index 00000000..916d7146
--- /dev/null
+++ b/typo3-cms/testData/com/cedricziel/idea/typo3/icons/classes.php
@@ -0,0 +1,8 @@
+getIcon('status-warning-lock');
diff --git a/typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon_off.php b/typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon_off.php
new file mode 100644
index 00000000..b3e99be1
--- /dev/null
+++ b/typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon_off.php
@@ -0,0 +1,4 @@
+getIcon('status-warning-lock');
From daae71239d497e79cda5629d030c89dab4e398c3 Mon Sep 17 00:00:00 2001
From: Cedric Ziel
Date: Wed, 10 Oct 2018 21:51:06 +0200
Subject: [PATCH 5/5] [T3CMS] Allow QuickFix'in deprecated icons
---
.../DeprecatedIconUsageInspection.java | 42 +++++++++++++++++--
.../DeprecatedIconsFromRegistryVisitor.java | 30 ++++++++++---
.../DeprecatedIconUsageInspectionTest.java | 17 ++++++++
.../idea/typo3/index/IconIndexTest.java | 1 +
.../idea/typo3/icons/deprecated_icon.php | 2 +-
.../idea/typo3/icons/deprecated_icon_qf.php | 4 ++
.../typo3/icons/deprecated_icon_qf_after.php | 4 ++
7 files changed, 90 insertions(+), 10 deletions(-)
create mode 100644 typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon_qf.php
create mode 100644 typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon_qf_after.php
diff --git a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspection.java b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspection.java
index a9089ca0..120e1ce4 100644
--- a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspection.java
+++ b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspection.java
@@ -3,16 +3,22 @@
import com.cedricziel.idea.typo3.TYPO3CMSProjectSettings;
import com.cedricziel.idea.typo3.index.IconIndex;
import com.cedricziel.idea.typo3.psi.PhpElementsUtil;
+import com.intellij.codeInspection.LocalQuickFix;
+import com.intellij.codeInspection.ProblemDescriptor;
+import com.intellij.codeInspection.ProblemHighlightType;
import com.intellij.codeInspection.ProblemsHolder;
+import com.intellij.openapi.project.Project;
import com.intellij.patterns.PlatformPatterns;
import com.intellij.patterns.PsiElementPattern;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
import com.jetbrains.php.lang.inspections.PhpInspection;
+import com.jetbrains.php.lang.psi.PhpPsiElementFactory;
import com.jetbrains.php.lang.psi.elements.MethodReference;
import com.jetbrains.php.lang.psi.elements.ParameterList;
import com.jetbrains.php.lang.psi.elements.StringLiteralExpression;
+import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
public class DeprecatedIconUsageInspection extends PhpInspection {
@@ -32,16 +38,21 @@ public void visitElement(PsiElement element) {
}
StringLiteralExpression literalExpression = (StringLiteralExpression) element;
- String value = literalExpression.getContents();
+ String iconIdentifier = literalExpression.getContents();
- if (value.isEmpty()) {
+ if (iconIdentifier.isEmpty()) {
return;
}
PsiElement methodReference = PsiTreeUtil.getParentOfType(element, MethodReference.class);
if (PhpElementsUtil.isMethodWithFirstStringOrFieldReference(methodReference, "getIcon")) {
- if (IconIndex.getDeprecatedIconIdentifiers(problemsHolder.getProject()).containsKey(value)) {
- problemsHolder.registerProblem(element, "Deprecated icon usage");
+ if (IconIndex.getDeprecatedIconIdentifiers(problemsHolder.getProject()).containsKey(iconIdentifier)) {
+ String alternative = IconIndex.getDeprecatedIconIdentifiers(problemsHolder.getProject()).get(iconIdentifier);
+ if (alternative == null || alternative.isEmpty()) {
+ problemsHolder.registerProblem(element, "Deprecated icon usage", ProblemHighlightType.LIKE_DEPRECATED);
+ } else {
+ problemsHolder.registerProblem(element, String.format("Deprecated icon usage - replace with %s", alternative), ProblemHighlightType.LIKE_DEPRECATED, new ReplaceIconIdentifierQuickFix(alternative));
+ }
}
}
@@ -53,4 +64,27 @@ public void visitElement(PsiElement element) {
private PsiElementPattern.Capture stringParameterInMethodReference() {
return PlatformPatterns.psiElement(StringLiteralExpression.class).withParent(ParameterList.class);
}
+
+ private static class ReplaceIconIdentifierQuickFix implements LocalQuickFix {
+ private final String alternative;
+
+ public ReplaceIconIdentifierQuickFix(String alternative) {
+ this.alternative = alternative;
+ }
+
+ @Nls(capitalization = Nls.Capitalization.Sentence)
+ @NotNull
+ @Override
+ public String getFamilyName() {
+ return "Migrate deprecated icon usage";
+ }
+
+ @Override
+ public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
+ PsiElement psiElement = descriptor.getPsiElement();
+ if (psiElement instanceof StringLiteralExpression) {
+ psiElement.replace(PhpPsiElementFactory.createFromText(project, StringLiteralExpression.class, String.format("'%s'", alternative)));
+ }
+ }
+ }
}
diff --git a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/DeprecatedIconsFromRegistryVisitor.java b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/DeprecatedIconsFromRegistryVisitor.java
index 9ae1ba72..57437743 100644
--- a/typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/DeprecatedIconsFromRegistryVisitor.java
+++ b/typo3-cms/src/main/java/com/cedricziel/idea/typo3/icons/DeprecatedIconsFromRegistryVisitor.java
@@ -5,6 +5,8 @@
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.jetbrains.php.lang.parser.PhpElementTypes;
+import com.jetbrains.php.lang.psi.elements.ArrayCreationExpression;
+import com.jetbrains.php.lang.psi.elements.ArrayHashElement;
import com.jetbrains.php.lang.psi.elements.Field;
import com.jetbrains.php.lang.psi.elements.StringLiteralExpression;
import com.jetbrains.php.lang.psi.visitors.PhpRecursiveElementVisitor;
@@ -23,13 +25,31 @@ public DeprecatedIconsFromRegistryVisitor() {
public void visitElement(PsiElement element) {
if (deprecatedIconArrayKeyPattern().accepts(element)) {
Field field = (Field) PsiTreeUtil.findFirstParent(element, e -> e instanceof Field);
- if (field != null && field.getName().equals("deprecatedIcons")) {
- String iconIdentifier = "";
- StringLiteralExpression literalExpression = (StringLiteralExpression) element;
- iconIdentifier = literalExpression.getContents();
+ if (field == null || !field.getName().equals("deprecatedIcons")) {
+ super.visitElement(element);
+ return;
+ }
+ String iconIdentifier = "";
+ String iconReplacement= "";
+ StringLiteralExpression literalExpression = (StringLiteralExpression) element;
+ iconIdentifier = literalExpression.getContents();
- result.putIfAbsent(iconIdentifier, "");
+ // pre-9, the the deprecatedIcons field was a multi-dimensional array
+ ArrayHashElement hashElement = (ArrayHashElement) PsiTreeUtil.findFirstParent(element, e -> e instanceof ArrayHashElement);
+ if (hashElement != null && hashElement.getValue() instanceof ArrayCreationExpression) {
+ Iterable hashElements = ((ArrayCreationExpression) hashElement.getValue()).getHashElements();
+ for (ArrayHashElement arrayHashElement : hashElements) {
+ if (arrayHashElement.getKey() instanceof StringLiteralExpression && ((StringLiteralExpression) arrayHashElement.getKey()).getContents().equals("replacement")) {
+ if (arrayHashElement.getValue() instanceof StringLiteralExpression) {
+ result.putIfAbsent(iconIdentifier, ((StringLiteralExpression) arrayHashElement.getValue()).getContents());
+ }
+ }
+ }
+ } else if (hashElement != null && hashElement.getValue() instanceof StringLiteralExpression) {
+ result.putIfAbsent(iconIdentifier, ((StringLiteralExpression) hashElement.getValue()).getContents());
+ } else {
+ result.putIfAbsent(iconIdentifier, iconReplacement);
}
}
diff --git a/typo3-cms/src/test/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspectionTest.java b/typo3-cms/src/test/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspectionTest.java
index bcde7c68..d2978ed7 100644
--- a/typo3-cms/src/test/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspectionTest.java
+++ b/typo3-cms/src/test/java/com/cedricziel/idea/typo3/codeInspection/DeprecatedIconUsageInspectionTest.java
@@ -1,6 +1,9 @@
package com.cedricziel.idea.typo3.codeInspection;
import com.cedricziel.idea.typo3.AbstractTestCase;
+import com.intellij.codeInsight.intention.IntentionAction;
+
+import java.util.List;
public class DeprecatedIconUsageInspectionTest extends AbstractTestCase {
@Override
@@ -31,4 +34,18 @@ public void testInspectionHighlightsDeprecatedIconUsage() {
myFixture.testHighlighting();
}
+
+ public void testInspectionAllowsQuickFixes() {
+ myFixture.copyFileToProject("classes.php");
+ myFixture.copyFileToProject("IconRegistry9.php");
+
+ myFixture.enableInspections(DeprecatedIconUsageInspection.class);
+
+ List allQuickFixes = myFixture.getAllQuickFixes("deprecated_icon_qf.php");
+ for (IntentionAction fix : allQuickFixes) {
+ myFixture.launchAction(fix);
+ }
+
+ myFixture.checkResultByFile("deprecated_icon_qf_after.php", true);
+ }
}
diff --git a/typo3-cms/src/test/java/com/cedricziel/idea/typo3/index/IconIndexTest.java b/typo3-cms/src/test/java/com/cedricziel/idea/typo3/index/IconIndexTest.java
index a3d51935..bac0368a 100644
--- a/typo3-cms/src/test/java/com/cedricziel/idea/typo3/index/IconIndexTest.java
+++ b/typo3-cms/src/test/java/com/cedricziel/idea/typo3/index/IconIndexTest.java
@@ -37,5 +37,6 @@ public void testDeprecatedIconsAreDetectedForv9() {
myFixture.configureByFile("IconRegistry9.php");
assertTrue(IconIndex.getDeprecatedIconIdentifiers(myFixture.getProject()).containsKey("status-status-edit-read-only"));
+ assertEquals(IconIndex.getDeprecatedIconIdentifiers(myFixture.getProject()).get("status-status-edit-read-only"), "status-edit-read-only");
}
}
diff --git a/typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon.php b/typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon.php
index a14cabc4..d1a60ab5 100644
--- a/typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon.php
+++ b/typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon.php
@@ -1,4 +1,4 @@
getIcon('status-warning-lock');
+$iconFactory->getIcon('status-warning-lock');
diff --git a/typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon_qf.php b/typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon_qf.php
new file mode 100644
index 00000000..b3e99be1
--- /dev/null
+++ b/typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon_qf.php
@@ -0,0 +1,4 @@
+getIcon('status-warning-lock');
diff --git a/typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon_qf_after.php b/typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon_qf_after.php
new file mode 100644
index 00000000..16d051c3
--- /dev/null
+++ b/typo3-cms/testData/com/cedricziel/idea/typo3/icons/deprecated_icon_qf_after.php
@@ -0,0 +1,4 @@
+getIcon('warning-lock');