How to remove/hide media and email options when creating hyperlink popup in CMS

  • Updated

[EditorDescriptorRegistration(
TargetType = typeof(string),
UIHint = "HyperLink",
EditorDescriptorBehavior = EditorDescriptorBehavior.OverrideDefault)
]
public class CustomLinkEditorDescriptor : EditorDescriptor
{
private LocalizationService _localizationSvc;

public CustomLinkEditorDescriptor() : this(LocalizationService.Current) { }

public CustomLinkEditorDescriptor(LocalizationService localizationSvc)
{
_localizationSvc = localizationSvc;
}

public override void ModifyMetadata(ExtendedMetadata metadata, IEnumerable<Attribute> attributes)
{
base.ModifyMetadata(metadata, attributes);

var repos = ServiceLocator.Current.GetAllInstances<IContentRepositoryDescriptor>();

var obj = (from r in repos
orderby r.SortOrder
where (r.LinkableTypes != null && r.LinkableTypes.Any() && r.Name != "media" && r.Name != "Media")
select new HyperLinkModelS
{
Name = r.CustomSelectTitle ?? r.Name,
Roots = r.Roots,
WidgetType = "epi-cms/contentediting/editors/ContentReferenceEditor",
WidgetSettings = new Dictionary<string, object>
{
{ "hideAllowedTypesList", true }
},
LinkableTypes = r.LinkableTypes,
SearchArea = r.SearchArea
}).ToList();

obj.InsertRange(obj.Count, new[] {

new HyperLinkModelS {
Name = "ExternalLink",
Title = _localizationSvc.GetString("/episerver/cms/widget/editlink/externallinktooltip"),
DisplayName = _localizationSvc.GetString("/episerver/cms/widget/editlink/externallink"),
WidgetType = "epi-cms/form/UrlValidationTextBox"
}

});

metadata.EditorConfiguration["providers"] = obj;
metadata.DisplayName = string.Empty;
metadata.ClientEditingClass = "epi-cms/widget/HyperLinkSelector";
}
}

internal class HyperLinkModelS
{
public string Name { get; set; }

public string DisplayName { get; set; }

public string Title { get; set; }

public IEnumerable<ContentReference> Roots { get; set; }

public string WidgetType { get; set; }

public IDictionary<string, object> WidgetSettings { get; set; }

public IEnumerable<Type> LinkableTypes { get; set; }

public bool Invisible { get; set; }

public string SearchArea { get; set; }
}