Пример #1
0
        public virtual SpeedyAssetLinks GenerateSpeedyAssetLinks(IThemesProvider themesProvider)
        {
            AssetsArgs assetsArgs = new AssetsArgs();

            CorePipeline.Run("assetService", assetsArgs);
            string           text       = GenerateCacheKey(assetsArgs.GetHashCode()) + "speedylinks-" + Sitecore.Context.Item.ID;
            SpeedyAssetLinks assetLinks = HttpContext.Current.Cache[text] as SpeedyAssetLinks;

            if (SpeedyGenerationSettings.IsDebugModeEnabled())
            {
                assetLinks = null;
            }

            if (assetLinks == null || _configuration.RequestAssetsOptimizationDisabled)
            {
                assetLinks = new SpeedyAssetLinks();
                if (!assetsArgs.AssetsList.Any())
                {
                    return(assetLinks);
                }
                assetsArgs.AssetsList = (from a in assetsArgs.AssetsList
                                         orderby a.SortOrder
                                         select a).ToList();
                foreach (AssetInclude assets in assetsArgs.AssetsList)
                {
                    if (assets is ThemeInclude)
                    {
                        AddThemeIncludeSpeedy(assets as ThemeInclude, assetLinks, themesProvider);
                    }
                    else if (assets is UrlInclude)
                    {
                        AddUrlIncludeSpeedy(assets as UrlInclude, assetLinks);
                    }
                    else if (assets is PlainInclude)
                    {
                        AddPlainInclude(assets as PlainInclude, assetLinks);
                    }
                }

                CacheLinks(text, assetLinks, GetDependencies(this.DatabaseRepository));
            }
            return(assetLinks);
        }
Пример #2
0
        public virtual SpeedyAssetLinks GenerateSpeedyAssetLinks(IThemesProvider themesProvider)
        {
            AssetsArgs assetsArgs = new AssetsArgs();

            CorePipeline.Run("assetService", assetsArgs);
            string           text       = GenerateCacheKey(assetsArgs.GetHashCode()) + "speedylinks";
            SpeedyAssetLinks assetLinks = HttpContext.Current.Cache[text] as SpeedyAssetLinks;

            if (assetLinks == null || _configuration.RequestAssetsOptimizationDisabled)
            {
                assetLinks = new SpeedyAssetLinks();
                if (!assetsArgs.AssetsList.Any())
                {
                    return(assetLinks);
                }
                assetsArgs.AssetsList = (from a in assetsArgs.AssetsList
                                         orderby a.SortOrder
                                         select a).ToList();
                foreach (AssetInclude assets in assetsArgs.AssetsList)
                {
                    if (assets is ThemeInclude)
                    {
                        AddThemeIncludeSpeedy(assets as ThemeInclude, assetLinks, themesProvider);
                    }
                    else if (assets is UrlInclude)
                    {
                        AddUrlIncludeSpeedy(assets as UrlInclude, assetLinks);
                    }
                    else if (assets is PlainInclude)
                    {
                        AddPlainInclude(assets as PlainInclude, assetLinks);
                    }
                }

                CacheLinks(text, assetLinks, (DatabaseRepository.GetContentDatabase().Name.ToLower() == GlobalSettings.Database.Master) ? AssetContentRefresher.MasterCacheDependencyKeys : AssetContentRefresher.WebCacheDependencyKeys);
            }
            return(assetLinks);
        }
        public override void Process(AssetsArgs args)
        {
            if (!IsSxaPage())
            {
                return;
            }
            var assetConfiguration = AssetConfigurationReader.Read();

            var contextItem = Context.Item;

            if (contextItem == null)
            {
                return;
            }

            var siteItem = ServiceLocator.Current.Resolve <IMultisiteContext>().GetSiteItem(contextItem);

            var settingsItem = siteItem?.Children["Settings"];

            if (settingsItem == null)
            {
                return;
            }

            var assetIds      = new string[0];
            var siteAssetsIds = settingsItem[Templates.Page.Fields.AssociatedAssets]?.Split('|');
            var pageAssetsIds = contextItem[Templates.Page.Fields.AssociatedAssets]?.Split('|');

            if (siteAssetsIds != null && siteAssetsIds.Any())
            {
                assetIds = assetIds.Union(siteAssetsIds).ToArray();
            }

            if (pageAssetsIds != null && pageAssetsIds.Any())
            {
                assetIds = assetIds.Union(pageAssetsIds).ToArray();
            }

            if (!assetIds.Any())
            {
                return;
            }

            var       assetsList = new List <AssetInclude>();
            const int num        = 0;

            var plainIncludeItems = contextItem.Axes.SelectItems($"/sitecore/media library//*[@@templateid='{Templates.PlainInclude.Id}']");

            if (!plainIncludeItems.Any())
            {
                return;
            }

            foreach (var assetId in assetIds)
            {
                if (assetId.IsNullOrEmpty() || !ID.IsID(assetId))
                {
                    continue;
                }
                var plainIncludeItem = plainIncludeItems.FirstOrDefault(pii => pii.ID.ToString() == assetId);
                if (plainIncludeItem == null)
                {
                    continue;
                }

                var mode = GetEnumFieldValue(plainIncludeItem.Fields[Templates.PlainInclude.Fields.Mode]);
                if (string.IsNullOrEmpty(mode) || mode.Equals("Disabled", StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                var assetTypeEx = (AssetTypeEx)Enum.Parse(typeof(AssetTypeEx), mode);
                var assetType   = assetTypeEx == AssetTypeEx.Style ? AssetType.Style : AssetType.Script;

                var attributes = new Dictionary <string, string>();

                if (!plainIncludeItem[Templates.PlainInclude.Fields.SriHash].IsNullOrEmpty())
                {
                    attributes.Add("integrity", plainIncludeItem[Templates.PlainInclude.Fields.SriHash]);
                }

                if (!plainIncludeItem[Templates.PlainInclude.Fields.Cors].IsNullOrEmpty())
                {
                    attributes.Add("crossorigin", GetEnumFieldValue(plainIncludeItem.Fields[Templates.PlainInclude.Fields.Cors]));
                }

                switch (assetTypeEx)
                {
                case AssetTypeEx.ScriptAsync:
                    attributes.Add("async", "");
                    break;

                case AssetTypeEx.ScriptDefer:
                    attributes.Add("defer", "");
                    break;
                }

                var url = plainIncludeItem[Templates.PlainInclude.Fields.AssetUrl];
                var joinedAttributes = string.Join(" ",
                                                   attributes.Where(a => !a.Value.IsNullOrEmpty()).Select(a => $"{a.Key}=\"{a.Value}\""));
                joinedAttributes += string.Join(" ",
                                                attributes.Where(a => a.Value.IsNullOrEmpty()).Select(a => $"{a.Key}"));

                var urlContent = GetUrlContent(assetType, url, joinedAttributes);

                if (string.IsNullOrEmpty(urlContent))
                {
                    continue;
                }

                var urlInclude = new PlainInclude
                {
                    SortOrder = num,
                    Name      = plainIncludeItem.Name,
                    Type      = assetType,
                    Content   = urlContent
                };
                assetsList.Add(urlInclude);

                var isFallbackEnabled = MainUtil.GetBool(plainIncludeItem[Templates.PlainInclude.Fields.IsFallbackEnabled], false);
                var fallbackTest      = plainIncludeItem[Templates.PlainInclude.Fields.FallbackTest];
                if (isFallbackEnabled && !string.IsNullOrEmpty(fallbackTest))
                {
                    var tagBuilder = new StringBuilder();
                    foreach (var script in ProcessAssets(plainIncludeItem, AssetType.Script,
                                                         assetConfiguration.ScriptsMode))
                    {
                        tagBuilder.Append(script);
                    }

                    foreach (var link in ProcessAssets(plainIncludeItem, AssetType.Style,
                                                       assetConfiguration.StylesMode))
                    {
                        tagBuilder.Append(link);
                    }

                    if (tagBuilder.Length > 0)
                    {
                        var fallbackInclude = new PlainInclude
                        {
                            SortOrder = num,
                            Name      = plainIncludeItem.Name + "-fallback",
                            Type      = AssetType.Script,
                            Content   = "<script>{0} || document.write('{1}')</script>".FormatWith(fallbackTest,
                                                                                                   tagBuilder.ToString())
                        };
                        assetsList.Add(fallbackInclude);
                    }
                }

                var rawContent = GetRawContent(assetType, plainIncludeItem[Templates.PlainInclude.Fields.RawContent]);
                if (string.IsNullOrEmpty(rawContent))
                {
                    continue;
                }

                var rawInclude = new PlainInclude
                {
                    SortOrder = num,
                    Name      = plainIncludeItem.Name,
                    Type      = assetType,
                    Content   = rawContent
                };
                assetsList.Add(rawInclude);
            }

            if (assetsList.Any())
            {
                args.AssetsList.InsertRange(0, assetsList.ToArray());
            }
        }
Пример #4
0
        public override void Process(AssetsArgs args)
        {
            if (!IsSxaPage())
            {
                return;
            }
            var assetConfiguration = AssetConfigurationReader.Read();

            var contextItem = Context.Item;

            if (contextItem == null)
            {
                return;
            }
            IMultisiteContext multiSiteContext = Sitecore.DependencyInjection.ServiceLocator.ServiceProvider.GetService(typeof(IMultisiteContext)) as IMultisiteContext;
            var siteItem = multiSiteContext.GetSiteItem(contextItem);
            //var siteItem = ServiceLocator.Current.Resolve<IMultisiteContext>().GetSiteItem(contextItem);

            var settingsItem = siteItem?.Children["Settings"];

            if (settingsItem == null)
            {
                return;
            }

            var scriptUrls     = new List <string>();
            var styleUrls      = new List <string>();
            var siteScriptUrls = settingsItem[Templates.AssetLink.Fields.ScriptUrls]?.Split('|');
            var pageScriptUrls = contextItem[Templates.AssetLink.Fields.ScriptUrls]?.Split('|');
            var siteStyleUrls  = settingsItem[Templates.AssetLink.Fields.StyleUrls]?.Split('|');
            var pageStyleUrls  = contextItem[Templates.AssetLink.Fields.StyleUrls]?.Split('|');

            scriptUrls = scriptUrls.Where(x => !string.IsNullOrEmpty(x)).Union(siteScriptUrls).ToList();
            scriptUrls = scriptUrls.Where(x => !string.IsNullOrEmpty(x)).Union(pageScriptUrls).ToList();
            styleUrls  = styleUrls.Union(siteStyleUrls).ToList();
            styleUrls  = styleUrls.Union(pageStyleUrls).ToList();
            scriptUrls = scriptUrls.Where(x => !string.IsNullOrEmpty(x)).ToList();
            styleUrls  = styleUrls.Where(x => !string.IsNullOrEmpty(x)).ToList();
            if ((scriptUrls == null || !scriptUrls.Any()) && (styleUrls == null || !styleUrls.Any()))
            {
                return;
            }

            List <AssetInclude> assetsList = args.AssetsList;

            foreach (var styleUrl in styleUrls)
            {
                assetsList.Add(new UrlInclude()
                {
                    Url  = styleUrl,
                    Type = AssetType.Style
                });
            }

            foreach (var scriptUrl in scriptUrls)
            {
                assetsList.Add(new UrlInclude()
                {
                    Url  = scriptUrl,
                    Type = AssetType.Script
                });
            }
        }
        public override void Process(AssetsArgs args)
        {
            if (!IsSxaPage())
            {
                return;
            }

            var contextItem = Context.Item;

            if (contextItem == null)
            {
                return;
            }

            var siteItem = ServiceLocator.ServiceProvider.GetService <IMultisiteContext>().GetSiteItem(contextItem);

            var settingsItem = siteItem?.Children["Settings"];

            if (settingsItem == null)
            {
                return;
            }

            var assetIds      = new string[0];
            var siteAssetsIds = settingsItem[Templates.Page.Fields.AssociatedAssets]?.Split('|');
            var pageAssetsIds = contextItem[Templates.Page.Fields.AssociatedAssets]?.Split('|');

            if (siteAssetsIds != null && siteAssetsIds.Any())
            {
                assetIds = assetIds.Union(siteAssetsIds).ToArray();
            }

            if (pageAssetsIds != null && pageAssetsIds.Any())
            {
                assetIds = assetIds.Union(pageAssetsIds).ToArray();
            }

            if (!assetIds.Any())
            {
                return;
            }

            var       assetsList = new List <AssetInclude>();
            const int num        = 0;

            var plainIncludeItems =
                contextItem.Axes.SelectItems($"/sitecore/media library//*[@@templateid='{Templates.PlainInclude.Id}']");

            if (plainIncludeItems == null || !plainIncludeItems.Any())
            {
                return;
            }

            foreach (var assetId in assetIds)
            {
                if (assetId.IsNullOrEmpty() || !ID.IsID(assetId))
                {
                    continue;
                }
                var plainIncludeItem = plainIncludeItems.FirstOrDefault(pii => pii.ID.ToString() == assetId);
                if (plainIncludeItem == null)
                {
                    continue;
                }

                var mode = GetEnumFieldValue(plainIncludeItem.Fields[Templates.PlainInclude.Fields.Mode]);
                if (string.IsNullOrEmpty(mode) || mode.Equals("Disabled", StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                var assetTypeEx = (AssetTypeEx)Enum.Parse(typeof(AssetTypeEx), mode);
                var assetType   = assetTypeEx == AssetTypeEx.Style ? AssetType.Style : AssetType.Script;

                AddExternalReference(assetsList, plainIncludeItem, assetTypeEx, assetType, num);
                AddFallbackContent(assetsList, plainIncludeItem, num);
                AddRawContent(assetsList, plainIncludeItem, assetType, num);
            }

            if (assetsList.Any())
            {
                args.AssetsList.InsertRange(0, assetsList.ToArray());
            }
        }