public string Read(WebAssetGroup group) { var appliesTo = filter.AppliesTo(group.ContentType); var result = new StringBuilder(); foreach (var asset in group.Items) { var path = locator.Locate(asset.Source, group.Version); var text = provider.ReadAllText(path); if (appliesTo) { var basePath = provider.GetDirectory(path); text = filter.Filter(basePath, text); } result.Append(text); result.AppendLine(); } return result.ToString(); }
public string Read(WebAssetGroup group) { var appliesTo = filter.AppliesTo(group.ContentType); var result = new StringBuilder(); foreach (var asset in group.Items) { var path = locator.Locate(asset.Source, group.Version); var text = provider.ReadAllText(path); if (appliesTo) { var basePath = provider.GetDirectory(path); text = filter.Filter(basePath, text); } result.Append(text); result.AppendLine(); } return(result.ToString()); }
public void CreateResolver_returns_CombinedWebAssetItemGroupResolver_if_group_is_combined() { var group = new WebAssetGroup("default", false); group.Combined = true; Assert.IsType<CombinedWebAssetGroupResolver>(factory.Create(group)); }
public override object Deserialize(IDictionary <string, object> dictionary, Type type, JavaScriptSerializer serializer) { var group = new WebAssetGroup("", false); SetIfPresent <bool>(dictionary, CompressKey, compress => group.Compress = compress); SetIfPresent <float>(dictionary, CacheDurationKey, cacheDuration => group.CacheDurationInDays = cacheDuration); SetIfPresent <string>(dictionary, VersionKey, version => group.Version = version); SetIfPresent <string>(dictionary, ContentTypeKey, contentType => group.ContentType = contentType); SetIfPresent <IEnumerable <IDictionary <string, object> > >(dictionary, DirectoriesKey, directories => { var orderedFiles = directories.SelectMany(directory => { var path = serializer.ConvertToType <string>(directory[PathKey]); var files = serializer.ConvertToType <IEnumerable <IDictionary <string, object> > >(directory[FilesKey]); return(files.Select(file => new { Source = "~/" + path + "/" + serializer.ConvertToType <string>(file[NameKey]), Order = serializer.ConvertToType <int>(file[OrderKey]) })); }); orderedFiles.OrderBy(file => file.Order) .Select(file => new WebAsset(file.Source)) .Each(group.Items.Add); }); return(group); }
public void Setting_duplicate_group_should_throw_exception() { _collection.Add(new WebAssetGroup("group1", false) { DefaultPath = WebAssetDefaultSettings.ScriptFilesPath }); _collection.Add(new WebAssetGroup("group2", false) { DefaultPath = WebAssetDefaultSettings.ScriptFilesPath }); Assert.Throws<ArgumentException>(() => _collection[1] = new WebAssetGroup("group1", false) { DefaultPath = WebAssetDefaultSettings.ScriptFilesPath }); }
/// <summary> /// Initializes a new instance of the <see cref="ScriptRegistrar"/> class. /// </summary> /// <param name="scripts">The scripts.</param> /// <param name="scriptableComponents">The scriptable components.</param> /// <param name="viewContext">The view context.</param> /// <param name="assetItemMerger">The asset merger.</param> /// <param name="scriptWrapper">The script wrapper.</param> public ScriptRegistrar(WebAssetCollection scripts, IList<IScriptableComponent> scriptableComponents, ViewContext viewContext, IWebAssetCollectionResolver resolver, ScriptWrapperBase scriptWrapper) { this.resolver = resolver; if (viewContext.HttpContext.Items[Key] != null) { throw new InvalidOperationException(Resources.TextResource.OnlyOneScriptRegistrarIsAllowedInASingleRequest); } viewContext.HttpContext.Items[Key] = this; OutputScriptFiles = true; DefaultGroup = new WebAssetGroup("default", false) { DefaultPath = WebAssetDefaultSettings.ScriptFilesPath }; Scripts = scripts; Scripts.Insert(0, DefaultGroup); this.scriptableComponents = scriptableComponents; ViewContext = viewContext; ScriptWrapper = scriptWrapper; AssetHandlerPath = WebAssetHttpHandler.DefaultPath; OnDocumentReadyActions = new List<Action>(); OnDocumentReadyStatements = new List<string>(); OnWindowUnloadActions = new List<Action>(); OnWindowUnloadStatements = new List<string>(); }
public WebAssetGroupTests() { group = new WebAssetGroup("Dummy", false) { DefaultPath = WebAssetDefaultSettings.ScriptFilesPath }; }
/// <summary> /// Initializes a new instance of the <see cref="ScriptRegistrar"/> class. /// </summary> /// <param name="scripts">The scripts.</param> /// <param name="scriptableComponents">The scriptable components.</param> /// <param name="viewContext">The view context.</param> /// <param name="assetItemMerger">The asset merger.</param> /// <param name="scriptWrapper">The script wrapper.</param> public ScriptRegistrar(WebAssetCollection scripts, IList <IScriptableComponent> scriptableComponents, ViewContext viewContext, IWebAssetCollectionResolver resolver, ScriptWrapperBase scriptWrapper) { this.resolver = resolver; if (viewContext.HttpContext.Items[Key] != null) { throw new InvalidOperationException(Resources.TextResource.OnlyOneScriptRegistrarIsAllowedInASingleRequest); } viewContext.HttpContext.Items[Key] = this; OutputScriptFiles = true; DefaultGroup = new WebAssetGroup("default", false) { DefaultPath = WebAssetDefaultSettings.ScriptFilesPath }; Scripts = scripts; Scripts.Insert(0, DefaultGroup); this.scriptableComponents = scriptableComponents; ViewContext = viewContext; ScriptWrapper = scriptWrapper; AssetHandlerPath = WebAssetHttpHandler.DefaultPath; OnDocumentReadyActions = new List <Action>(); OnDocumentReadyStatements = new List <string>(); OnWindowUnloadActions = new List <Action>(); OnWindowUnloadStatements = new List <string>(); }
public void CreateResolver_returns_CombinedWebAssetItemGroupResolver_if_group_is_combined() { var group = new WebAssetGroup("default", false); group.Combined = true; Assert.IsType <CombinedWebAssetGroupResolver>(factory.Create(group)); }
public CombinedWebAssetGroupResolver(WebAssetGroup group, IWebAssetResolverFactory resolverFactory, IWebAssetChecker checker, IWebAssetGroupSerializer serializer) : base(group, resolverFactory) { this.group = group; this.resolverFactory = resolverFactory; this.checker = checker; this.serializer = serializer; }
public string Serialize(WebAssetGroup group) { var serializer = CreateSerializer(); var json = serializer.Serialize(group); return(Encode(json.Compress())); }
public string Serialize(WebAssetGroup group) { var serializer = CreateSerializer(); var json = serializer.Serialize(group); return Encode(json.Compress()); }
private WebAssetGroup ArrangeGroup(params string[] sources) { var group = new WebAssetGroup("", false); sources.Each(source => group.Items.Add(new WebAsset(source))); return(group); }
public WebAssetGroupBuilderTests() { group = new WebAssetGroup("foo", false) { DefaultPath = WebAssetDefaultSettings.ScriptFilesPath }; builder = new WebAssetGroupBuilder(group); }
private WebAssetGroup ArrangeGroup(params string[] expected) { var group = new WebAssetGroup("default", false); group.Items.AddRange(expected.Select(asset => new WebAsset(asset)) .ToArray()); return(group); }
private IWebAssetResolver CreateAssetGropResolver(WebAssetGroup group) { if (group.Combined) { return new CombinedWebAssetGroupResolver(group, this, checker, serializer); } return new WebAssetGroupResolver(group, this); }
private IWebAssetResolver CreateAssetGropResolver(WebAssetGroup group) { if (group.Combined) { return(new CombinedWebAssetGroupResolver(group, this, checker, serializer)); } return(new WebAssetGroupResolver(group, this)); }
public Editor(ViewContext viewContext, IClientSideObjectWriterFactory clientSideObjectWriterFactory, IWebAssetCollectionResolver resolver, ILocalizationService localizationService, IUrlGenerator urlGenerator) : base(viewContext, clientSideObjectWriterFactory) { this.resolver = resolver; this.urlGenerator = urlGenerator; ScriptFileNames.AddRange(new[] { "telerik.common.js", "telerik.list.js", "telerik.combobox.js", "telerik.draganddrop.js", "telerik.window.js", "telerik.editor.js" }); DefaultToolGroup = new EditorToolGroup(this); ClientEvents = new EditorClientEvents(); StyleSheets = new WebAssetGroup("default", false) { DefaultPath = WebAssetDefaultSettings.StyleSheetFilesPath }; Localization = new EditorLocalization(localizationService, CultureInfo.CurrentUICulture); Template = new HtmlTemplate(); new EditorToolFactory(DefaultToolGroup) .Bold().Italic().Underline().Strikethrough() .Separator() .FontName() .FontSize() .FontColor().BackColor() .Separator() .JustifyLeft().JustifyCenter().JustifyRight().JustifyFull() .Separator() .InsertUnorderedList().InsertOrderedList() .Separator() .Outdent().Indent() .Separator() .FormatBlock() .Separator() .CreateLink().Unlink() .Separator() .InsertImage(); FileBrowserSettings = new EditorFileBrowserSettings(this); DefaultToolGroup.Tools.OfType <EditorComboBox>() .Each(combo => combo.InputHtmlAttributes.Add("title", combo.Identifier)); }
public void Serialize_should_contain_group_compression() { var group = new WebAssetGroup("foo", false); group.Compress = true; var result = converter.Serialize(group, new JavaScriptSerializer()); Assert.Equal(group.Compress, result["c"]); }
public void Serialize_should_return_path_of_folders() { var group = new WebAssetGroup("foo", false); group.Items.Add(new WebAsset("~/Scripts/foo.js")); var directories = converter.Serialize(group, new JavaScriptSerializer())["d"] as IEnumerable <IDictionary <string, object> >; Assert.Equal("Scripts", directories.First()["p"]); }
public void Serialize_should_contain_group_content_type() { var group = new WebAssetGroup("foo", false); group.ContentType = "text/javascript"; var result = converter.Serialize(group, new JavaScriptSerializer()); Assert.Equal(group.ContentType, result["ct"]); }
public void Serialize_should_contain_group_cache_duration() { var group = new WebAssetGroup("foo", false); group.CacheDurationInDays = 1; var result = converter.Serialize(group, new JavaScriptSerializer()); Assert.Equal(group.CacheDurationInDays, result["cd"]); }
public void Serialize_contains_entry_for_web_asset_item_directories() { var group = new WebAssetGroup("foo", false); group.Items.Add(new WebAsset("~/Scripts/foo.js")); var directories = converter.Serialize(group, new JavaScriptSerializer())["d"] as IEnumerable <IDictionary <string, object> >; Assert.True(directories.Any()); }
public void Serialize_should_contain_group_version() { var group = new WebAssetGroup("foo", false); group.Version = "1"; var result = converter.Serialize(group, new JavaScriptSerializer()); Assert.Equal(group.Version, result["v"]); }
public void Should_return_empty_result_if_group_is_empty() { group = new WebAssetGroup("foo", true); resolver = new CombinedWebAssetGroupResolver(group, resolverFactory.Object, checker.Object, serializer.Object); var result = resolver.Resolve(new ResolverContext()); Assert.Empty(result); }
public void Serialize_returns_base64_gzipped_string() { var group = new WebAssetGroup("foo", false); group.Version = "1"; group.ContentType = "text/css"; var result = serializer.Serialize(group); Assert.Equal("{\"d\":[],\"ct\":\"text/css\",\"v\":\"1\",\"cd\":365,\"c\":true}", WebAssetGroupSerializer.Decode(result).Decompress()); }
public void Serialize_contains_entry_for_unique_web_asset_item_directories_and_ignores_case() { var group = new WebAssetGroup("foo", false); group.Items.Add(new WebAsset("~/Scripts/foo.js")); group.Items.Add(new WebAsset("~/scripts/bar.js")); var directories = converter.Serialize(group, new JavaScriptSerializer())["d"] as IEnumerable <IDictionary <string, object> >; Assert.Equal(1, directories.Count()); }
public Editor(ViewContext viewContext, IClientSideObjectWriterFactory clientSideObjectWriterFactory, IWebAssetCollectionResolver resolver, ILocalizationService localizationService, IUrlGenerator urlGenerator) : base(viewContext, clientSideObjectWriterFactory) { this.resolver = resolver; this.urlGenerator = urlGenerator; ScriptFileNames.AddRange(new[] { "telerik.common.js", "telerik.list.js", "telerik.combobox.js", "telerik.draganddrop.js", "telerik.window.js", "telerik.editor.js" }); DefaultToolGroup = new EditorToolGroup(this); ClientEvents = new EditorClientEvents(); StyleSheets = new WebAssetGroup("default", false) { DefaultPath = WebAssetDefaultSettings.StyleSheetFilesPath }; Localization = new EditorLocalization(localizationService, CultureInfo.CurrentUICulture); Template = new HtmlTemplate(); new EditorToolFactory(DefaultToolGroup) .Bold().Italic().Underline().Strikethrough() .Separator() .FontName() .FontSize() .FontColor().BackColor() .Separator() .JustifyLeft().JustifyCenter().JustifyRight().JustifyFull() .Separator() .InsertUnorderedList().InsertOrderedList() .Separator() .Outdent().Indent() .Separator() .FormatBlock() .Separator() .CreateLink().Unlink() .Separator() .InsertImage(); FileBrowserSettings = new EditorFileBrowserSettings(this); DefaultToolGroup.Tools.OfType<EditorComboBox>() .Each(combo => combo.InputHtmlAttributes.Add("title", combo.Identifier)); }
public void Should_set_the_content_type_of_the_group() { group = new WebAssetGroup("foo", true); ResolverContext resolverContext = new ResolverContext { ContentType = "text/javascript" }; resolver = new CombinedWebAssetGroupResolver(group, resolverFactory.Object, checker.Object, serializer.Object); resolver.Resolve(resolverContext); Assert.Equal(group.ContentType, resolverContext.ContentType); }
public void Serialize_should_return_order_of_files() { var group = new WebAssetGroup("foo", false); group.Items.Add(new WebAsset("~/Scripts1/foo.js")); group.Items.Add(new WebAsset("~/Scripts2/foo.js")); var directories = converter.Serialize(group, new JavaScriptSerializer())["d"] as IEnumerable <IDictionary <string, object> >; var firstDirectory = directories.First()["f"] as IEnumerable <IDictionary <string, object> >; var secondDirectory = directories.Last()["f"] as IEnumerable <IDictionary <string, object> >; Assert.Equal(0, firstDirectory.First()["o"]); Assert.Equal(1, secondDirectory.First()["o"]); }
public void Should_not_check_for_native_assets_when_cdn_is_disabled() { var asset = new WebAsset("foo"); group = new WebAssetGroup("foo", false); group.Items.Add(asset); checker.Setup(c => c.IsNative(asset)); resolver = new CombinedWebAssetGroupResolver(group, resolverFactory.Object, checker.Object, serializer.Object); resolver.Resolve(new ResolverContext()); checker.Verify(c => c.IsNative(asset), Times.Never()); }
public void Should_check_for_absolute_assets() { var asset = new WebAsset("foo"); group = new WebAssetGroup("foo", false); group.Items.Add(asset); checker.Setup(c => c.IsAbsolute(asset)); resolver = new CombinedWebAssetGroupResolver(group, resolverFactory.Object, checker.Object, serializer.Object); resolver.Resolve(new ResolverContext()); checker.VerifyAll(); }
public void Should_check_for_native_assets_when_cdn_is_enabled() { var asset = new WebAsset("foo"); group = new WebAssetGroup("foo", false); group.UseTelerikContentDeliveryNetwork = true; group.Items.Add(asset); checker.Setup(c => c.IsNative(asset)); resolver = new CombinedWebAssetGroupResolver(group, resolverFactory.Object, checker.Object, serializer.Object); resolver.Resolve(new ResolverContext()); checker.VerifyAll(); }
public void Should_use_group_name_if_asset_is_shared() { var asset = new WebAsset("foo"); group = new WebAssetGroup("foo", true); group.Items.Add(asset); resolver = new CombinedWebAssetGroupResolver(group, resolverFactory.Object, checker.Object, serializer.Object); var result = resolver.Resolve(new ResolverContext { HttpHandlerPath = "baz.axd" }); Assert.Equal("baz.axd?" + WebAssetHttpHandler.IdParameterName + "=foo", result.First()); }
public void Should_resolve_absolute_assets() { var asset = new WebAsset("foo"); group = new WebAssetGroup("foo", false); group.Items.Add(asset); checker.Setup(c => c.IsAbsolute(asset)).Returns(true); resolverFactory.Setup(f => f.Create(asset)).Returns(new Mock <IWebAssetResolver>().Object); resolver = new CombinedWebAssetGroupResolver(group, resolverFactory.Object, checker.Object, serializer.Object); resolver.Resolve(new ResolverContext()); resolverFactory.VerifyAll(); }
public void Setting_duplicate_group_should_throw_exception() { _collection.Add(new WebAssetGroup("group1", false) { DefaultPath = WebAssetDefaultSettings.ScriptFilesPath }); _collection.Add(new WebAssetGroup("group2", false) { DefaultPath = WebAssetDefaultSettings.ScriptFilesPath }); Assert.Throws <ArgumentException>(() => _collection[1] = new WebAssetGroup("group1", false) { DefaultPath = WebAssetDefaultSettings.ScriptFilesPath }); }
public void Should_append_asset_handler_path() { var asset = new WebAsset("foo"); group = new WebAssetGroup("foo", false); group.Items.Add(asset); serializer.Setup(s => s.Serialize(group)).Returns("bar"); resolver = new CombinedWebAssetGroupResolver(group, resolverFactory.Object, checker.Object, serializer.Object); var result = resolver.Resolve(new ResolverContext { HttpHandlerPath = "baz.axd" }); Assert.Equal("baz.axd?" + WebAssetHttpHandler.IdParameterName + "=bar", result.First()); }
/// <summary> /// Initializes a new instance of the <see cref="StyleSheetRegistrar"/> class. /// </summary> /// <param name="styleSheets">The style sheets.</param> /// <param name="viewContext">The view context.</param> /// <param name="assetItemMerger">The asset merger.</param> public StyleSheetRegistrar(WebAssetCollection styleSheets, ViewContext viewContext, IWebAssetCollectionResolver resolver) { this.resolver = resolver; if (viewContext.HttpContext.Items[Key] != null) { throw new InvalidOperationException(Resources.TextResource.OnlyOneStyleSheetRegistrarIsAllowedInASingleRequest); } viewContext.HttpContext.Items[Key] = this; DefaultGroup = new WebAssetGroup("default", false) { DefaultPath = WebAssetDefaultSettings.StyleSheetFilesPath }; StyleSheets = styleSheets; styleSheets.Insert(0, DefaultGroup); ViewContext = viewContext; AssetHandlerPath = WebAssetHttpHandler.DefaultPath; }
/// <summary> /// Adds the group. /// </summary> /// <param name="name">The name.</param> /// <param name="configureAction">The configure action.</param> /// <returns></returns> public virtual SharedWebAssetGroupBuilder AddGroup(string name, Action<WebAssetGroupBuilder> configureAction) { Guard.IsNotNullOrEmpty(name, "name"); Guard.IsNotNull(configureAction, "configureAction"); WebAssetGroup group; if (assets.TryGetValue(name, out group)) { throw new ArgumentException(TextResource.GroupWithSpecifiedNameAlreadyExistsPleaseSpecifyADifferentName.FormatWith(name)); } group = new WebAssetGroup(name, true) { DefaultPath = defaultPath }; assets.Add(name, group); WebAssetGroupBuilder builder = new WebAssetGroupBuilder(group); configureAction(builder); return this; }
public WebAssetGroupResolver(WebAssetGroup group, IWebAssetResolverFactory resolverFactory) { this.group = group; this.resolverFactory = resolverFactory; }
public void Serialize_should_return_path_of_folders() { var group = new WebAssetGroup("foo", false); group.Items.Add(new WebAsset("~/Scripts/foo.js")); var directories = converter.Serialize(group, new JavaScriptSerializer())["d"] as IEnumerable<IDictionary<string, object>>; Assert.Equal("Scripts", directories.First()["p"]); }
/// <summary> /// Initializes a new instance of the <see cref="WebAssetGroupBuilder"/> class. /// </summary> /// <param name="assetItemGroup">The asset item group.</param> public WebAssetGroupBuilder(WebAssetGroup assetItemGroup) { Guard.IsNotNull(assetItemGroup, "assetItemGroup"); this.assetItemGroup = assetItemGroup; }
public void CreateResolver_returns_WebAssetItemGroupResolver() { var group = new WebAssetGroup("default", false); Assert.IsType<WebAssetGroupResolver>(factory.Create(group)); }
public void Serialize_should_return_order_of_files() { var group = new WebAssetGroup("foo", false); group.Items.Add(new WebAsset("~/Scripts1/foo.js")); group.Items.Add(new WebAsset("~/Scripts2/foo.js")); var directories = converter.Serialize(group, new JavaScriptSerializer())["d"] as IEnumerable<IDictionary<string, object>>; var firstDirectory = directories.First()["f"] as IEnumerable<IDictionary<string, object>>; var secondDirectory = directories.Last()["f"] as IEnumerable<IDictionary<string, object>>; Assert.Equal(0, firstDirectory.First()["o"]); Assert.Equal(1, secondDirectory.First()["o"]); }
private WebAssetGroup ArrangeGroup(params string[] sources) { var group = new WebAssetGroup("", false); sources.Each(source => group.Items.Add(new WebAsset(source))); return group; }
private static void LoadGroups(WebAssetGroupConfigurationElementCollection source, IDictionary<string, WebAssetGroup> destination, string defaultPath, string defaultVersion) { foreach (WebAssetGroupConfigurationElement configurationGroup in source) { WebAssetGroup group = new WebAssetGroup(configurationGroup.Name, true) { DefaultPath = !string.IsNullOrEmpty(configurationGroup.DefaultPath) ? configurationGroup.DefaultPath : defaultPath, ContentDeliveryNetworkUrl = configurationGroup.ContentDeliveryNetworkUrl, Enabled = configurationGroup.Enabled, Version = !string.IsNullOrEmpty(configurationGroup.Version) ? configurationGroup.Version : defaultVersion, Compress = configurationGroup.Compress, CacheDurationInDays = configurationGroup.CacheDurationInDays, Combined = configurationGroup.Combined }; if (configurationGroup.UseTelerikContentDeliveryNetwork.HasValue) { group.UseTelerikContentDeliveryNetwork = configurationGroup.UseTelerikContentDeliveryNetwork.Value; } foreach (WebAssetConfigurationElement configurationItem in configurationGroup.Items) { string itemSource = configurationItem.Source; if (!itemSource.StartsWith("~/", StringComparison.OrdinalIgnoreCase) && !itemSource.Contains("://")) { itemSource = PathHelper.CombinePath(group.DefaultPath, itemSource); } group.Items.Add(new WebAsset(itemSource)); } destination.Add(group.Name, group); } }
public void Serialize_contains_entry_for_web_asset_item_directories() { var group = new WebAssetGroup("foo", false); group.Items.Add(new WebAsset("~/Scripts/foo.js")); var directories = converter.Serialize(group, new JavaScriptSerializer())["d"] as IEnumerable<IDictionary<string, object>>; Assert.True(directories.Any()); }
private WebAssetGroup ArrangeGroup(params string[] expected) { var group = new WebAssetGroup("default", false); group.Items.AddRange(expected.Select(asset => new WebAsset(asset)) .ToArray()); return group; }
public void Serialize_contains_entry_for_unique_web_asset_item_directories_and_ignores_case() { var group = new WebAssetGroup("foo", false); group.Items.Add(new WebAsset("~/Scripts/foo.js")); group.Items.Add(new WebAsset("~/scripts/bar.js")); var directories = converter.Serialize(group, new JavaScriptSerializer())["d"] as IEnumerable<IDictionary<string, object>>; Assert.Equal(1, directories.Count()); }