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; }
}
}