[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; }
}
Article is closed for comments.