コード例 #1
0
ファイル: CoreShapes.cs プロジェクト: seifipour/exams4doctors
        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);
                }
            });
        }
コード例 #2
0
        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));
            }
        }