using System; using Oqtane.Shared; namespace Oqtane.Models { /// /// Resource Objects describe a JavaScript or CSS file which is needed by the Module to work. /// public class Resource { private string _url; /// /// A so the Interop can properly create `script` or `link` tags /// public ResourceType ResourceType { get; set; } /// /// Path to the resource (note that querytring parameters can be included for cache busting ie. ?v=#) /// public string Url { get => _url; set { _url = (value.Contains("://")) ? value : (!value.StartsWith("/") && !value.StartsWith("~") ? "/" : "") + value; } } /// /// Integrity checks to increase the security of resources accessed. Especially common in CDN resources. /// public string Integrity { get; set; } /// /// Cross-Origin rules for this Resources. Usually `anonymous` /// public string CrossOrigin { get; set; } /// /// For Scripts a Bundle can be used to identify dependencies and ordering in the script loading process /// public string Bundle { get; set; } /// /// For Stylesheets this defines the relative position for cascading purposes /// public ResourceLevel Level { get; set; } /// /// For Scripts this defines if the resource should be included in the Head or Body /// public ResourceLocation Location { get; set; } /// /// For Scripts this allows type="module" registrations - not applicable to Stylesheets /// public bool ES6Module { get; set; } /// /// Allows specification of inline script - not applicable to Stylesheets /// public string Content { get; set; } /// /// For Scripts this defines the render mode (default is all render modes) - not applicable to Stylesheets /// public string RenderMode { get; set; } /// /// Indicates that a script should be reloaded on every page transition - not applicable to Stylesheets /// public bool Reload { get; set; } /// /// The namespace of the component that declared the resource - only used in SiteRouter /// public string Namespace { get; set; } public Resource Clone(ResourceLevel level, string name) { var resource = new Resource(); resource.ResourceType = ResourceType; resource.Url = Url; resource.Integrity = Integrity; resource.CrossOrigin = CrossOrigin; resource.Bundle = Bundle; resource.Location = Location; resource.ES6Module = ES6Module; resource.Content = Content; resource.RenderMode = RenderMode; resource.Reload = Reload; resource.Level = level; resource.Namespace = name; return resource; } [Obsolete("ResourceDeclaration is deprecated", false)] public ResourceDeclaration Declaration { get; set; } } }