public void Discover(ShapeTableBuilder builder) { // the root page shape named 'Layout' is wrapped with 'Document' // and has an automatic zone creating behavior builder.Describe("Layout") .Configure(descriptor => descriptor.Wrappers.Add("Document")) .OnCreating(creating => creating.Behaviors.Add(new ZoneHoldingBehavior(() => creating.New.Zone(), null))) .OnCreated(created => { var layout = created.Shape; layout.Head = created.New.DocumentZone(ZoneName: "Head"); layout.Body = created.New.DocumentZone(ZoneName: "Body"); layout.Tail = created.New.DocumentZone(ZoneName: "Tail"); layout.Body.Add(created.New.PlaceChildContent(Source: layout)); layout.Content = created.New.Zone(); layout.Content.ZoneName = "Content"; layout.Content.Add(created.New.PlaceChildContent(Source: layout)); }); // 'Zone' shapes are built on the Zone base class // They have class="zone zone-{name}" // and the template can be specialized with "Zone-{Name}" base file name builder.Describe("Zone") .OnCreating(creating => creating.BaseType = typeof(Zone)) .OnDisplaying(displaying => { var zone = displaying.Shape; string zoneName = zone.ZoneName; zone.Classes.Add("zone-" + zoneName.HtmlClassify()); zone.Classes.Add("zone"); // Zone__[ZoneName] e.g. Zone-SideBar zone.Metadata.Alternates.Add("Zone__" + zoneName); }); builder.Describe("Menu") .OnDisplaying(displaying => { var menu = displaying.Shape; string menuName = menu.MenuName; menu.Classes.Add("menu-" + menuName.HtmlClassify()); menu.Classes.Add("menu"); menu.Metadata.Alternates.Add("Menu__" + EncodeAlternateElement(menuName)); }); builder.Describe("MenuItem") .OnDisplaying(displaying => { var menuItem = displaying.Shape; var menu = menuItem.Menu; menuItem.Metadata.Alternates.Add("MenuItem__" + EncodeAlternateElement(menu.MenuName)); }); builder.Describe("MenuItemLink") .OnDisplaying(displaying => { var menuItem = displaying.Shape; var menu = menuItem.Menu; menuItem.Metadata.Alternates.Add("MenuItemLink__" + EncodeAlternateElement(menu.MenuName)); string contentType = menuItem.Content.ContentItem.ContentType; if (contentType != null) { menuItem.Metadata.Alternates.Add("MenuItemLink__" + contentType); } }); builder.Describe("LocalMenu") .OnDisplaying(displaying => { var menu = displaying.Shape; string menuName = menu.MenuName; menu.Classes.Add("localmenu-" + menuName.HtmlClassify()); menu.Classes.Add("localmenu"); menu.Metadata.Alternates.Add("LocalMenu__" + EncodeAlternateElement(menuName)); }); builder.Describe("LocalMenuItem") .OnDisplaying(displaying => { var menuItem = displaying.Shape; var menu = menuItem.Menu; menuItem.Metadata.Alternates.Add("LocalMenuItem__" + EncodeAlternateElement(menu.MenuName)); }); #region Pager alternates builder.Describe("Pager") .OnDisplaying(displaying => { var pager = displaying.Shape; string pagerId = pager.PagerId; if (!String.IsNullOrWhiteSpace(pagerId)) { displaying.Shape.Metadata.Alternates.Add("Pager__" + EncodeAlternateElement(pagerId)); } }); builder.Describe("Pager_Gap") .OnDisplaying(displaying => { var pager = displaying.Shape.Pager; string pagerId = pager.PagerId; if (!String.IsNullOrWhiteSpace(pagerId)) { pager.Metadata.Alternates.Add("Pager_Gap__" + EncodeAlternateElement(pagerId)); } }); builder.Describe("Pager_First") .OnDisplaying(displaying => { var pager = displaying.Shape.Pager; string pagerId = pager.PagerId; if (!String.IsNullOrWhiteSpace(pagerId)) { displaying.Shape.Metadata.Alternates.Add("Pager_First__" + EncodeAlternateElement(pagerId)); } }); builder.Describe("Pager_Previous") .OnDisplaying(displaying => { var pager = displaying.Shape.Pager; string pagerId = pager.PagerId; if (!String.IsNullOrWhiteSpace(pagerId)) { displaying.Shape.Metadata.Alternates.Add("Pager_Previous__" + EncodeAlternateElement(pagerId)); } }); builder.Describe("Pager_Next") .OnDisplaying(displaying => { var pager = displaying.Shape.Pager; string pagerId = pager.PagerId; if (!String.IsNullOrWhiteSpace(pagerId)) { displaying.Shape.Metadata.Alternates.Add("Pager_Next__" + EncodeAlternateElement(pagerId)); } }); builder.Describe("Pager_Last") .OnDisplaying(displaying => { var pager = displaying.Shape.Pager; string pagerId = pager.PagerId; if (!String.IsNullOrWhiteSpace(pagerId)) { displaying.Shape.Metadata.Alternates.Add("Pager_Last__" + EncodeAlternateElement(pagerId)); } }); builder.Describe("Pager_CurrentPage") .OnDisplaying(displaying => { var pager = displaying.Shape.Pager; string pagerId = pager.PagerId; if (!String.IsNullOrWhiteSpace(pagerId)) { displaying.Shape.Metadata.Alternates.Add("Pager_CurrentPage__" + EncodeAlternateElement(pagerId)); } }); builder.Describe("Pager_Links") .OnDisplaying(displaying => { var pager = displaying.Shape; string pagerId = pager.PagerId; if (!String.IsNullOrWhiteSpace(pagerId)) { displaying.Shape.Metadata.Alternates.Add("Pager_Links__" + EncodeAlternateElement(pagerId)); } }); #endregion // 'List' shapes start with several empty collections builder.Describe("List") .OnCreated(created => { var list = created.Shape; list.Tag = "ul"; list.ItemClasses = new List <string>(); list.ItemAttributes = new Dictionary <string, string>(); }); builder.Describe("Style") .OnDisplaying(displaying => { var resource = displaying.Shape; string url = resource.Url; string fileName = StylesheetBindingStrategy.GetAlternateShapeNameFromFileName(url); if (!string.IsNullOrEmpty(fileName)) { resource.Metadata.Alternates.Add("Style__" + fileName); } }); builder.Describe("Resource") .OnDisplaying(displaying => { var resource = displaying.Shape; string url = resource.Url; string fileName = StylesheetBindingStrategy.GetAlternateShapeNameFromFileName(url); if (!string.IsNullOrEmpty(fileName)) { resource.Metadata.Alternates.Add("Resource__" + fileName); } }); }
public override IList <ResourceRequiredContext> BuildRequiredResources(string stringResourceType) { // It's necessary to make a copy since making a change to the local variable also changes the private one. var resources = new List <ResourceRequiredContext>(base.BuildRequiredResources(stringResourceType)); var settingsPart = _cacheManager.Get("Piedone.Combinator.CombinatorSettingsPart", ctx => { _combinatorEventMonitor.MonitorConfigurationChanged(ctx); return(_siteService.GetSiteSettings().As <CombinatorSettingsPart>()); }); if (resources.Count == 0 || Orchard.UI.Admin.AdminFilter.IsApplied(_httpContextAccessor.Current().Request.RequestContext) && !settingsPart.EnableForAdmin) { return(resources); } var resourceType = ResourceTypeHelper.StringTypeToEnum(stringResourceType); try { var settings = new CombinatorSettings { CombineCDNResources = settingsPart.CombineCDNResources, EmbedCssImages = settingsPart.EmbedCssImages, EmbeddedImagesMaxSizeKB = settingsPart.EmbeddedImagesMaxSizeKB, MinifyResources = settingsPart.MinifyResources }; if (!String.IsNullOrEmpty(settingsPart.CombinationExcludeRegex)) { settings.CombinationExcludeFilter = new Regex(settingsPart.CombinationExcludeRegex); } if (!String.IsNullOrEmpty(settingsPart.EmbedCssImagesStylesheetExcludeRegex)) { settings.EmbedCssImagesStylesheetExcludeFilter = new Regex(settingsPart.EmbedCssImagesStylesheetExcludeRegex); } if (!String.IsNullOrEmpty(settingsPart.MinificationExcludeRegex)) { settings.MinificationExcludeFilter = new Regex(settingsPart.MinificationExcludeRegex); } if (!String.IsNullOrEmpty(settingsPart.ResourceSetRegexes)) { var setRegexes = new List <Regex>(); foreach (var regex in settingsPart.ResourceSetRegexes.Trim().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) { if (!String.IsNullOrEmpty(regex)) { setRegexes.Add(new Regex(regex)); } } settings.ResourceSetFilters = setRegexes.ToArray(); } if (resourceType == ResourceType.Style) { // Checking for overridden stylesheets var currentTheme = _themeManager.GetRequestTheme(_httpContextAccessor.Current().Request.RequestContext); var shapeTable = _shapeTableLocator.Lookup(currentTheme.Id); foreach (var resource in resources) { var shapeName = StylesheetBindingStrategy.GetAlternateShapeNameFromFileName(resource.Resource.GetFullPath()); // Simply included CDN stylesheets are not in the ShapeTable, so we have to check if (shapeTable.Bindings.ContainsKey("Style__" + shapeName)) { var binding = shapeTable.Bindings["Style__" + shapeName].BindingSource; resource.Resource.SetUrl(binding, null); } } return(_combinatorService.CombineStylesheets(resources, settings)); } else if (resourceType == ResourceType.JavaScript) { return(_combinatorService.CombineScripts(resources, settings)); } return(base.BuildRequiredResources(stringResourceType)); } catch (Exception ex) { if (ex.IsFatal()) { throw; } Logger.Error(ex, "Error when combining " + resourceType + " files"); return(base.BuildRequiredResources(stringResourceType)); } }