Commit Graph

240 Commits

Author SHA1 Message Date
Javier Calvarro Nelson 700c2203c6 [Fixes #66] Adds linking support to the build
* Switch the tasks used to generate the blazor output to be MSBuild based.
* Package the optimized mono runtime and the BCL inside a nuget package.
* Add opt-in support for linking the application on build.
* Make the whole build process incremental.
2018-03-14 11:23:43 +00:00
Ryan Nowak ffadeecb45 Remove old <c:Foo> syntax 2018-03-14 11:23:42 +00:00
Ryan Nowak d175b4d38a Konvert to KoreBuild 2018-03-14 11:23:42 +00:00
Ryan Nowak 0c162e8c5a Allow non-property attributes to be set
This removes a limitation that prevented callers from passing
attributes to a component that aren't backed by properties.

The majority of the complication here is required to deal with the more
sophisticated way that HTML attributes are represented in the Razor IR.
2018-03-14 11:23:42 +00:00
Ryan Nowak c05657c7f2 Add support general delegate types
This builds upon existing support for UIEventHandler-typed component
properties and applies the same principle to any delegate type.

We try to help by generating the LSH of the lambda `=>` allowing you to
write `OnClick="Foo()"` rather than `OnClick="(e) => Foo()"`. You can of
course use @ as an escape.

The only rough edge here is that if the parameter names aren't memorable
for the delgate type, it's not super helpful.
2018-03-14 11:23:42 +00:00
Steve Sanderson c50f089269 Update BasicTestApp 2018-03-14 11:23:41 +00:00
Ryan Nowak 601e7914f7 Implement components as tag helpers
Implements Component code generation and tooling support end to end
udditionally adds some default `@addTagHelper` directives to make
programming in Blazor a little nicer.

Components are discovered as Tag Helpers using Razor's extensibility
during the build/IDE process. This drives the code generation during
build and lights up a bunch of editor features.

Add
2018-03-14 11:23:41 +00:00
Ryan Nowak 211561a6a6 Implement 2-phase compilation
This is a working (all tests passing) implementation of the two-phase
compilation system we will need for component discovery.

This builds on top of work we've doing in Razor, including the Razor
SDK, MSBuild tasks, and CLI/server.

This currently *does* discovery components during the build process, but
it doesn't use that data for anything yet.

It works like this:
1. Generate class declarations (structure only, no method bodies)
2. Compile a 'temp' assembly using the .cs files and output of 1.
3. Do component discovery using the 'temp' assembly
4. Generate class definitions (including method bodies)
5. Compile the 'real' assembly using the .cs files and output of 4.
2018-03-14 11:23:40 +00:00
Ryan Nowak 6182e8448d Get rid of RazorCompiler
Adds a little more use of Razor extensibility.

Razor is a plugin model, so we can't be the 'first mover' for initiating
compilation in the build tools and IDE.

Reorganizes tests and fills out more reusable test infrastructure for
Razor-driven testing.

Adds tests for declaration-only configuration.
2018-03-14 11:23:40 +00:00
Ryan Nowak daf6a404f9 Implement basic Component discovery
This is the basics of component discovery along with some tests.

The next set of changes will integrate it into the compilation process.
2018-03-14 11:23:40 +00:00
Ryan Nowak a053155ab4 Implement layout and implements with directives
- Remove haxxxx
- Add proper directives with tooling support
2018-03-14 11:23:40 +00:00
Florian Dohrendorf ef1b670b8b fix #216 2018-03-13 01:03:26 +01:00
Steve Sanderson 48ae58196d Add unit test to show JsonUtil handling IList<T> types 2018-03-12 10:52:59 +01:00
Steve Sanderson 0301250c4b In SimpleJson, support enum values serialized as numbers.
Note: still doesn't support nullable enum types.
2018-03-05 02:02:26 +00:00
Steve Sanderson 61e07eb615 Support @bind for enum and DateTime values (with optional format string) 2018-03-05 02:02:26 +00:00
Steve Sanderson 3ef78dcb7b Stop treating RenderFragment as immutable, because its output isn't 2018-03-05 02:02:26 +00:00
Steve Sanderson 649159e31d Use real BCL System.Net.Http.HttpClient. Implements #159 2018-02-28 17:37:42 +00:00
Steve Sanderson 4bd3cd98d6 Simplify apps by moving some commonly used types into Microsoft.AspNetCore.Blazor namespace 2018-02-28 11:29:14 +00:00
Steve Sanderson 3e5381c17e Rename .DevHost project to .Cli, and make it work as a DotNetCliTool 2018-02-27 12:17:35 +00:00
Steve Sanderson 6995b974e9 Support @bind for textboxes and checkboxes 2018-02-26 14:39:56 +00:00
Steve Sanderson 02a0be5c2b Add JsonUtil unit tests plus E2E tests for new StandaloneApp pages 2018-02-26 13:01:11 +00:00
Steve Sanderson c0bf73234c Tweak (to force rebuild, since Travis just tried to build a branch that was already deleted) 2018-02-23 22:42:10 +00:00
Steve Sanderson 8590f6e7a5 Remainder of initial HttpClient features plus E2E tests 2018-02-23 22:31:26 +00:00
Steve Sanderson 88cc2caf45 Infrastructure for E2E tests where the app makes requests to an API server 2018-02-23 13:28:58 +00:00
Steve Sanderson ea6b6bcd19 Add an example API server project that can be used in E2E tests 2018-02-23 13:07:49 +00:00
Steve Sanderson 0bb32ad628 Move BrowserRouter -> Router in Microsoft.AspNetCore.Blazor now it has no browser-specific aspects 2018-02-23 10:49:03 +00:00
Steve Sanderson 82bcf9172a Convert the static UriHelper into a service, IUriHelper, and inject where needed 2018-02-23 10:35:28 +00:00
Steve Sanderson c408045e31 In RazorCompiler, support @inject directive 2018-02-23 09:32:26 +00:00
Steve Sanderson 3f9d358004 Make ComponentFactory throw if you try to use [Inject] with a property that has no setter (otherwise it could be confusing) 2018-02-23 09:32:26 +00:00
Steve Sanderson e524994734 Make ComponentFactory do all the reflection up-front and cache the resulting delegates 2018-02-23 09:32:26 +00:00
Steve Sanderson ceacd489aa Simplistic implementation of property injection 2018-02-23 09:32:26 +00:00
Steve Sanderson ce10e6fa19 In preparation for DI, give every Renderer an IServiceProvider 2018-02-23 09:32:26 +00:00
Steve Sanderson d388cb6510 Add E2E test covering nav menu and NavLink usage in StandaloneApp 2018-02-22 15:03:49 +00:00
Steve Sanderson 58ae5dea9a Additional methods on ParameterCollection to simplify usage 2018-02-22 15:03:49 +00:00
Steve Sanderson 25b76bc6dc Skip rerendering child components if their params are definitely unchanged 2018-02-22 13:23:52 +00:00
Steve Sanderson 08d7b77d38 Avoid component syntax confusion by making it a compile-time error. Fixes #145 2018-02-22 11:07:03 +00:00
Steve Sanderson 1a31634b70 Capture component child content as a RenderFragment parameter. 2018-02-22 11:07:03 +00:00
Steve Sanderson bd455453d6 Report line/column when reporting mismatching tags 2018-02-22 11:07:03 +00:00
Steve Sanderson 0665d30e19 In RazorCompiler, reject malformed documents with mismatching tags 2018-02-22 11:07:03 +00:00
Steve Sanderson 95023c0300 In RazorCompiler, support components with children 2018-02-22 11:07:03 +00:00
Steve Sanderson fc9cb1af65 Add E2E tests for BrowserRouter, plus implement querystring/hash support 2018-02-21 10:22:03 +00:00
Steve Sanderson 8bc7c92683 Support hosting at non-root URL. Prove it by updating BasicTestApp to serve from non-root location. 2018-02-21 10:22:03 +00:00
Steve Sanderson 7073429cd5 Clean up and include routing unit tests 2018-02-21 10:22:03 +00:00
Steve Sanderson 87fc15cc23 Add test to demonstrate current component attribute parsing inconsistencies 2018-02-21 10:22:03 +00:00
Steve Sanderson 78a19c07e9 In RazorCompiler, allow HTML comments 2018-02-21 10:22:03 +00:00
Steve Sanderson 58af3e1638 Allow blazor-boot script to be served from apps not hosted at domain root 2018-02-21 10:22:03 +00:00
Steve Sanderson 608da4c78b Specifying entrypoint: Add tests and other stylistic tweaks 2018-02-19 14:22:03 +00:00
Eugene Bekker 1653e56b98 Adding ability to qualify the entry point of the main assembly 2018-02-19 14:11:25 +00:00
Steve Sanderson 1e0836167d Make temporary "layout" and "implements" syntax work with _ViewImports hierarchies 2018-02-19 12:48:08 +00:00
Steve Sanderson f649de2976 Support _ViewImports.cshtml files hierarchically 2018-02-18 23:57:20 +00:00
Steve Sanderson be1400663b Unit test to show the Razor compiler passes through any C# compilation errors 2018-02-18 23:54:12 +00:00
Steve Sanderson 782ca0137d Support "@inherits ..." directive 2018-02-18 22:03:15 +00:00
Steve Sanderson 6e7c4ec6c0 Tests for LayoutDisplay component 2018-02-16 17:23:12 +00:00
Steve Sanderson df825de86d Reorganise some test helpers in shared locations 2018-02-16 17:23:04 +00:00
Steve Sanderson f6d6714251 Serve static content from wwwroot 2018-02-16 15:56:22 +00:00
Steve Sanderson f54df27c21 Define ILayoutComponent so there's compile-time validation that layouts are defined correctly 2018-02-16 15:04:51 +00:00
Steve Sanderson 7139cb70c5 Support temporary @(Implements<MyInterfaceType>()) syntax 2018-02-16 12:39:38 +00:00
Steve Sanderson 9e333e31c5 Support temporary @(Layout<MyLayoutType>()) syntax 2018-02-16 12:10:44 +00:00
Steve Sanderson f91d1d4803 Better handling of render-after-disposed scenarios 2018-02-16 12:10:44 +00:00
Steve Sanderson 0595251ac2 E2E test showing rendering of RenderFragment 2018-02-16 10:10:14 +00:00
Steve Sanderson ad2c63ca37 Make OpenRegion/CloseRegion not public because they are only to support AddContent(seq, fragment) 2018-02-16 10:10:12 +00:00
Steve Sanderson 41aae0b7e6 Add ability to append RenderFragment into a RenderTreeBuilder 2018-02-16 10:10:11 +00:00
Steve Sanderson 29a6175ac1 Define RenderFragment concept 2018-02-16 10:10:10 +00:00
Steve Sanderson 1ac5ee25c1 Rename RenderTreeBuilder's AddText to AddContent, since it will be used for other types too 2018-02-16 10:10:08 +00:00
Steve Sanderson acc5b9461b Add ability to add component frame using runtime type object instead of generic param 2018-02-16 10:10:07 +00:00
Steve Sanderson 2ebfddc237 Switch client apps to netstandard2.0 to fix type load errors
Do a "git clean -xdf" on your local copy if you get runtime errors after
updating to this.
2018-02-15 10:20:31 +00:00
Steve Sanderson 2da17602ed Support "Region" frames in JS-side code
They only appear in a prepended subtree, because the .NET-side diffing
code resolves them out if they are top-level to any given edit
2018-02-14 23:41:25 +00:00
Steve Sanderson 848f24536a Support "Region" frames in diffing 2018-02-14 23:41:24 +00:00
Steve Sanderson a9822216f1 Add the concept of a "Region" render tree frame 2018-02-14 23:41:24 +00:00
Ryan Nowak 043e623d5b Split Razor extensibility into its own assembly
This functionality will need to cross-compile to desktop framework
(net461) so that we can use it in VS. VS doesn't yet have netstandard2.0
support.
2018-02-14 14:08:14 -08:00
Steve Sanderson 86500ce761 Fix MonoSanityTest instability 2018-02-14 18:23:08 +00:00
Steve Sanderson b7bbacf4ed Skip MonoSanityTest due to instability since Chrome update 2018-02-14 16:27:24 +00:00
Steve Sanderson 5f41779b3e Fix use of Chrome Headless on Travis macOS builds 2018-02-14 16:27:24 +00:00
Steve Sanderson 94261ded25 Fix RazorCompilerTest on Mac/Linux 2018-02-14 13:08:39 +00:00
Steve Sanderson 83b90d1980 Update AppVeyor/Travis configs to run on .NET Core, enable selenium
tests, etc.
2018-02-14 13:08:39 +00:00
Steve Sanderson 0eb0555303 Eliminate IComponent.BuildRenderTree to guarantee that components are only rendered by themselves 2018-02-13 19:47:37 +00:00
Steve Sanderson e061b98f9d In RazorCompilerTest, don't use BuildRenderTree directly (because it will soon be removed) 2018-02-13 17:18:06 +00:00
Steve Sanderson 70a3ee3d98 Remove externally-callable Renderer.RenderInNewBatch() now that rendering is triggered by components themselves 2018-02-13 17:06:00 +00:00
Steve Sanderson 804ab2d89f Add IHandleEvent concept so components can define their own lifecycle around events 2018-02-13 16:42:21 +00:00
Steve Sanderson a889cd3152 Beginning lifecycle methods on BlazorComponent 2018-02-13 15:55:37 +00:00
Steve Sanderson 861154764c Introduce IComponent.SetParameters, moving parameter-setting and rerendering logic into component base class 2018-02-13 15:00:53 +00:00
Steve Sanderson 37217db73a Implement ParameterCollection 2018-02-13 13:14:55 +00:00
Steve Sanderson 695ddc0fd6 Add Init/RenderHandle concepts so components can rerender themselves arbitrarily (e.g., after internal state change) 2018-02-13 11:49:33 +00:00
Steve Sanderson 7bb4bbbe5c In IndexHtmlFileProvider, preserve original source formatting 2018-02-12 23:05:47 +00:00
Eugene Bekker b38718d77f Require <script type="blazor-boot"> to define script injection location 2018-02-12 21:49:27 +00:00
Steve Sanderson e37e22aa27 Further renderer refactoring 2018-02-10 10:55:44 +00:00
Steve Sanderson 5a9c41af0e Make AngleSharp not strong-named. Change assembly name to Microsoft.AspNetCore.Blazor.AngleSharp to ensure no conflicts with other usages. 2018-02-09 17:37:21 +00:00
Steve Sanderson 15ddcd03b0 Major refactor of responsibilities in rendering code. Not quite done
with this yet either.
2018-02-09 14:50:07 +00:00
Steve Sanderson 91314ee8c8 Rename RenderTreeDiffComputer -> RenderTreeDiffBuilder 2018-02-08 15:50:14 +00:00
Steve Sanderson b8ed7bc2c5 Track event handlers via explicit IDs rather than by index into frames
array
2018-02-08 15:31:45 +00:00
Steve Sanderson 83fa72bc7e Have RenderTreeDiff build its own array of referenced frames rather than pointing to the latest render tree
This is in preparation for supporting multiple diffs for the same
component in a single batch (which means we can't rely on there being at
most only new render tree per component)
2018-02-07 10:27:32 +00:00
Steve Sanderson 33932f41fc Replace "DescendantsEndIndex" concept with "SubtreeLength"
In other words, use relative addressing so that frame data is
independent of its position in the array
2018-02-07 10:27:32 +00:00
Steve Sanderson 93f17219ea Rename OpenComponentElement -> OpenComponent for consistency 2018-02-05 00:19:44 +00:00
Steve Sanderson 1fda744770 Make RenderTreeFrame properly readonly to allow more pass-by-ref cases 2018-02-05 00:16:08 +00:00
Steve Sanderson f1332919bc Rename RenderTreeNode -> RenderTreeFrame (and correspondingly, "node" ->
"frame" everywhere)
2018-02-04 22:21:29 +00:00
Steve Sanderson 76dafa819f Mechanism for components running logic when parents change their properties 2018-01-31 16:19:01 +00:00
Steve Sanderson 1c9c74c801 In RazorCompiler, fix bug about attribute nodes having wrong sequence
numbers. Make tests explicit about sequence numbers.
2018-01-31 10:23:56 +00:00
Steve Sanderson 50a5baa872 Dispose components on removal 2018-01-30 10:00:30 +00:00
Steve Sanderson 55592f583b Update RendererTests to be more explicit about batch expectations 2018-01-29 20:28:38 +00:00
Steve Sanderson 080e6395cb Move to batched rendering 2018-01-29 20:16:42 +00:00