diff --git a/.gitignore b/.gitignore
index 576beabdf9..543a67d7ff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -132,4 +132,10 @@ src/umbraco.sln.ide/*
build/UmbracoCms.*/
src/.vs/
src/Umbraco.Web.UI/umbraco/js/install.loader.js
-src/Umbraco.Tests/media
\ No newline at end of file
+src/Umbraco.Tests/media
+tools/docfx/*
+apidocs/_site/*
+apidocs/api/*
+build/docs.zip
+build/ui-docs.zip
+build/csharp-docs.zip
diff --git a/apidocs/docfx.filter.yml b/apidocs/docfx.filter.yml
new file mode 100644
index 0000000000..e96fbaafff
--- /dev/null
+++ b/apidocs/docfx.filter.yml
@@ -0,0 +1,18 @@
+apiRules:
+ - include:
+ uidRegex: ^Umbraco\.Core
+ - exclude:
+ uidRegex: ^umbraco\.Web\.org
+ - include:
+ uidRegex: ^Umbraco\.Web
+ - exclude:
+ hasAttribute:
+ uid: System.ComponentModel.EditorBrowsableAttribute
+ ctorArguments:
+ - System.ComponentModel.EditorBrowsableState.Never
+ - exclude:
+ uidRegex: ^umbraco\.
+ - exclude:
+ uidRegex: ^CookComputing\.
+ - exclude:
+ uidRegex: ^.*$
\ No newline at end of file
diff --git a/apidocs/docfx.json b/apidocs/docfx.json
new file mode 100644
index 0000000000..520622a0e0
--- /dev/null
+++ b/apidocs/docfx.json
@@ -0,0 +1,75 @@
+{
+ "metadata": [
+ {
+ "src": [
+ {
+ "files": [
+ "Umbraco.Core/Umbraco.Core.csproj",
+ "Umbraco.Web/Umbraco.Web.csproj"
+ ],
+ "exclude": [
+ "**/obj/**",
+ "**/bin/**",
+ "_site/**"
+ ],
+ "cwd": "../src"
+ }
+ ],
+ "dest": "../apidocs/api",
+ "filter": "../apidocs/docfx.filter.yml"
+ }
+ ],
+ "build": {
+ "content": [
+ {
+ "files": [
+ "api/**.yml",
+ "api/index.md"
+ ]
+ },
+ {
+ "files": [
+ "articles/**.md",
+ "articles/**/toc.yml",
+ "toc.yml",
+ "*.md"
+ ],
+ "exclude": [
+ "obj/**",
+ "_site/**"
+ ]
+ }
+ ],
+ "resource": [
+ {
+ "files": [
+ "images/**"
+ ],
+ "exclude": [
+ "obj/**",
+ "_site/**"
+ ]
+ }
+ ],
+ "overwrite": [
+ {
+ "files": [
+ "**.md"
+ ],
+ "exclude": [
+ "obj/**",
+ "_site/**"
+ ]
+ }
+ ],
+ "globalMetadata": {
+ "_appTitle": "Umbraco c# Api docs",
+ "_enableSearch": true,
+ "_disableContribution": false
+ },
+ "dest": "_site",
+ "template": [
+ "default", "umbracotemplate"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/apidocs/index.md b/apidocs/index.md
new file mode 100644
index 0000000000..b90b816312
--- /dev/null
+++ b/apidocs/index.md
@@ -0,0 +1,7 @@
+
+# Umbraco c# API reference
+
+## Quick Links:
+
+### [Umbraco.Core](api/Umbraco.Core.html) docs
+### [Umbraco.Web](api/Umbraco.Web.html) docs
diff --git a/apidocs/toc.yml b/apidocs/toc.yml
new file mode 100644
index 0000000000..6817825066
--- /dev/null
+++ b/apidocs/toc.yml
@@ -0,0 +1,5 @@
+
+- name: Umbraco.Core Documentation
+ href: https://our.umbraco.org/apidocs/csharp/api/Umbraco.Core.html
+- name: Umbraco.Web Documentation
+ href: https://our.umbraco.org/apidocs/csharp/api/Umbraco.Web.html
\ No newline at end of file
diff --git a/apidocs/umbracotemplate/partials/class.tmpl.partial b/apidocs/umbracotemplate/partials/class.tmpl.partial
new file mode 100644
index 0000000000..9153a863a4
--- /dev/null
+++ b/apidocs/umbracotemplate/partials/class.tmpl.partial
@@ -0,0 +1,257 @@
+{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}}
+
+{{^_disableContribution}}
+{{#sourceurl}}{{__global.viewSource}} {{/sourceurl}}
+{{/_disableContribution}}
+
{{>partials/title}}
+{{{summary}}}
+{{{conceptual}}}
+{{#inheritance.0}}
+
+
{{__global.inheritance}}
+{{#inheritance}}
+
{{{specName.0.value}}}
+{{/inheritance}}
+
{{item.name.0.value}}
+
+{{/inheritance.0}}
+{{__global.namespace}} :{{namespace}}
+{{__global.assembly}} :{{assemblies.0}}.dll
+{{__global.syntax}}
+
+
{{syntax.content.0.value}}
+
+{{#syntax.parameters.0}}
+{{__global.parameters}}
+
+
+
+ {{__global.type}}
+ {{__global.name}}
+ {{__global.description}}
+
+
+
+{{/syntax.parameters.0}}
+{{#syntax.parameters}}
+
+ {{{type.specName.0.value}}}
+ {{{id}}}
+ {{{description}}}
+
+{{/syntax.parameters}}
+{{#syntax.parameters.0}}
+
+
+{{/syntax.parameters.0}}
+{{#syntax.return}}
+{{__global.returns}}
+
+
+
+ {{__global.type}}
+ {{__global.description}}
+
+
+
+
+ {{{type.specName.0.value}}}
+ {{{description}}}
+
+
+
+{{/syntax.return}}
+{{#syntax.typeParameters.0}}
+{{__global.typeParameters}}
+
+
+
+ {{__global.name}}
+ {{__global.description}}
+
+
+
+{{/syntax.typeParameters.0}}
+{{#syntax.typeParameters}}
+
+ {{{id}}}
+ {{{description}}}
+
+{{/syntax.typeParameters}}
+{{#syntax.typeParameters.0}}
+
+
+{{/syntax.typeParameters.0}}
+{{#remarks}}
+
+
+{{/remarks}}
+{{#example.0}}
+{{__global.examples}}
+{{/example.0}}
+{{#example}}
+{{{.}}}
+{{/example}}
+{{#children}}
+{{>partials/classSubtitle}}
+{{#children}}
+{{^_disableContribution}}
+{{#sourceurl}}
+
+ {{__global.viewSource}}
+ {{/sourceurl}}
+{{/_disableContribution}}
+{{name.0.value}}
+{{{summary}}}
+{{{conceptual}}}
+{{__global.declaration}}
+{{#syntax}}
+
+
{{syntax.content.0.value}}
+
+{{#parameters.0}}
+{{__global.parameters}}
+
+
+
+ {{__global.type}}
+ {{__global.name}}
+ {{__global.description}}
+
+
+
+{{/parameters.0}}
+{{#parameters}}
+
+ {{{type.specName.0.value}}}
+ {{{id}}}
+ {{{description}}}
+
+{{/parameters}}
+{{#parameters.0}}
+
+
+{{/parameters.0}}
+{{#return}}
+{{__global.returns}}
+
+
+
+ {{__global.type}}
+ {{__global.description}}
+
+
+
+
+ {{{type.specName.0.value}}}
+ {{{description}}}
+
+
+
+{{/return}}
+{{#typeParameters.0}}
+{{__global.typeParameters}}
+
+
+
+ {{__global.name}}
+ {{__global.description}}
+
+
+
+{{/typeParameters.0}}
+{{#typeParameters}}
+
+ {{{id}}}
+ {{{description}}}
+
+{{/typeParameters}}
+{{#typeParameters.0}}
+
+
+{{/typeParameters.0}}
+{{#fieldValue}}
+{{__global.fieldValue}}
+
+
+
+ {{__global.type}}
+ {{__global.description}}
+
+
+
+
+ {{{type.specName.0.value}}}
+ {{{description}}}
+
+
+
+{{/fieldValue}}
+{{#propertyValue}}
+{{__global.propertyValue}}
+
+
+
+ {{__global.type}}
+ {{__global.description}}
+
+
+
+
+ {{{type.specName.0.value}}}
+ {{{description}}}
+
+
+
+{{/propertyValue}}
+{{#eventType}}
+{{__global.eventType}}
+
+
+
+ {{__global.type}}
+ {{__global.description}}
+
+
+
+
+ {{{type.specName.0.value}}}
+ {{{description}}}
+
+
+
+{{/eventType}}
+{{/syntax}}
+{{#remarks}}
+
+
+{{/remarks}}
+{{#example.0}}
+{{__global.examples}}
+{{/example.0}}
+{{#example}}
+{{{.}}}
+{{/example}}
+{{#exceptions.0}}
+{{__global.exceptions}}
+
+
+
+ {{__global.type}}
+ {{__global.condition}}
+
+
+
+{{/exceptions.0}}
+{{#exceptions}}
+
+ {{{type.specName.0.value}}}
+ {{{description}}}
+
+{{/exceptions}}
+{{#exceptions.0}}
+
+
+{{/exceptions.0}}
+{{/children}}
+{{/children}}
diff --git a/apidocs/umbracotemplate/partials/footer.tmpl.partial b/apidocs/umbracotemplate/partials/footer.tmpl.partial
new file mode 100644
index 0000000000..69f51a101f
--- /dev/null
+++ b/apidocs/umbracotemplate/partials/footer.tmpl.partial
@@ -0,0 +1,13 @@
+{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}}
+
+
diff --git a/apidocs/umbracotemplate/partials/head.tmpl.partial b/apidocs/umbracotemplate/partials/head.tmpl.partial
new file mode 100644
index 0000000000..591e1c1885
--- /dev/null
+++ b/apidocs/umbracotemplate/partials/head.tmpl.partial
@@ -0,0 +1,18 @@
+{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}}
+
+
+
+
+ {{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}}
+
+
+
+ {{#_description}} {{/_description}}
+
+
+
+
+
+
+ {{#_enableSearch}} {{/_enableSearch}}
+
diff --git a/apidocs/umbracotemplate/partials/namespace.tmpl.partial b/apidocs/umbracotemplate/partials/namespace.tmpl.partial
new file mode 100644
index 0000000000..80ca30799a
--- /dev/null
+++ b/apidocs/umbracotemplate/partials/namespace.tmpl.partial
@@ -0,0 +1,18 @@
+{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}}
+
+{{^_disableContribution}}
+{{#sourceurl}}
+{{__global.viewSource}}
+{{/sourceurl}}
+{{/_disableContribution}}
+{{>partials/title}}
+{{{summary}}}
+{{{conceptual}}}
+
+{{#children}}
+ {{>partials/namespaceSubtitle}}
+ {{#children}}
+ {{{specName.0.value}}}
+
+ {{/children}}
+{{/children}}
diff --git a/apidocs/umbracotemplate/partials/navbar.tmpl.partial b/apidocs/umbracotemplate/partials/navbar.tmpl.partial
new file mode 100644
index 0000000000..e9ee0af1c7
--- /dev/null
+++ b/apidocs/umbracotemplate/partials/navbar.tmpl.partial
@@ -0,0 +1,22 @@
+{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}}
+
+
+
+
diff --git a/apidocs/umbracotemplate/partials/rest.tmpl.partial b/apidocs/umbracotemplate/partials/rest.tmpl.partial
new file mode 100644
index 0000000000..4306bf7db1
--- /dev/null
+++ b/apidocs/umbracotemplate/partials/rest.tmpl.partial
@@ -0,0 +1,101 @@
+{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}}
+
+{{^_disableContribution}}
+{{#sourceurl}}View Source {{/sourceurl}}
+{{/_disableContribution}}
+{{name}}
+{{#summary}}
+{{{summary}}}
+{{/summary}}
+{{#description}}
+{{{description}}}
+{{/description}}
+{{#conceptual}}
+ {{{conceptual}}}
+{{/conceptual}}
+{{#children}}
+{{^_disableContribution}}
+{{#sourceurl}}
+
+ View Source
+ {{/sourceurl}}
+{{/_disableContribution}}
+ {{operationId}}
+{{#summary}}
+{{{summary}}}
+{{/summary}}
+{{#description}}
+{{{description}}}
+{{/description}}
+{{#conceptual}}
+ {{{conceptual}}}
+{{/conceptual}}
+Request
+
+
{{operation}} {{path}}
+
+{{#parameters.0}}
+Parameters
+
+
+
+ Name
+ Type
+ Value
+ Notes
+
+
+
+{{/parameters.0}}
+{{#parameters}}
+
+ {{#required}}*{{/required}}{{name}}
+ {{type}}
+ {{default}}
+ {{{description}}}
+
+ {{/parameters}}
+ {{#parameters.0}}
+
+
+{{/parameters.0}}
+{{#responses.0}}
+
+
Responses
+
+
+
+ Status Code
+ Description
+ Samples
+
+
+
+{{/responses.0}}
+{{#responses}}
+
+ {{statusCode}}
+ {{{description}}}
+
+ {{#examples}}
+
+ Mime type: {{mimeType}}
+
+ {{content}}
+ {{/examples}}
+
+
+ {{/responses}}
+ {{#responses.0}}
+
+
+
+{{/responses.0}}
+{{#footer}}
+
+{{/footer}}
+{{/children}}
+{{#footer}}
+
+{{/footer}}
+
diff --git a/apidocs/umbracotemplate/styles/main.css b/apidocs/umbracotemplate/styles/main.css
new file mode 100644
index 0000000000..7756b2f7d4
--- /dev/null
+++ b/apidocs/umbracotemplate/styles/main.css
@@ -0,0 +1,73 @@
+body {
+ color: rgba(0,0,0,.8);
+}
+.navbar-inverse {
+ background: #a3db78;
+}
+.navbar-inverse .navbar-nav>li>a, .navbar-inverse .navbar-text {
+ color: rgba(0,0,0,.8);
+}
+
+.navbar-inverse {
+ border-color: transparent;
+}
+
+.sidetoc {
+ background-color: #f5fbf1;
+}
+body .toc {
+ background-color: #f5fbf1;
+}
+.sidefilter {
+ background-color: #daf0c9;
+}
+.subnav {
+ background-color: #f5fbf1;
+}
+
+.navbar-inverse .navbar-nav>.active>a {
+ color: rgba(0,0,0,.8);
+ background-color: #daf0c9;
+}
+
+.navbar-inverse .navbar-nav>.active>a:focus, .navbar-inverse .navbar-nav>.active>a:hover {
+ color: rgba(0,0,0,.8);
+ background-color: #daf0c9;
+}
+
+.btn-primary {
+ color: rgba(0,0,0,.8);
+ background-color: #fff;
+ border-color: rgba(0,0,0,.8);
+}
+.btn-primary:hover {
+ background-color: #daf0c9;
+ color: rgba(0,0,0,.8);
+ border-color: rgba(0,0,0,.8);
+}
+
+.toc .nav > li > a {
+ color: rgba(0,0,0,.8);
+}
+
+button, a {
+ color: #f36f21;
+}
+
+button:hover,
+button:focus,
+a:hover,
+a:focus {
+ color: #143653;
+ text-decoration: none;
+}
+
+.navbar-header .navbar-brand {
+ background: url(https://our.umbraco.org/assets/images/logo.svg) left center no-repeat;
+ background-size: 40px auto;
+ width:50px;
+}
+
+.toc .nav > li.active > a {
+ color: #f36f21;
+}
diff --git a/build/ApiDocs/TOC.css b/build/ApiDocs/TOC.css
deleted file mode 100644
index 9c32aba214..0000000000
--- a/build/ApiDocs/TOC.css
+++ /dev/null
@@ -1,170 +0,0 @@
-/* File : TOC.css
-// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 09/07/2007
-//
-// Stylesheet for the table of content
-*/
-
-*
-{
- margin: 0px 0px 0px 0px;
- padding: 0px 0px 0px 0px;
-}
-
-body
-{
- font-family: Segoe UI, Arial, Verdana, Helvetica, sans-serif;
- font-size: 0.9em;
- background-color: white;
- color: White;
- overflow: hidden;
-}
-
-input
-{
- padding:5px;
- margin: 3px 0px 3px 0px
-}
-
-img
-{
- border: 0;
- margin-left: 5px;
- margin-right: 2px;
-}
-
-img.TreeNodeImg
-{
- cursor: pointer;
-}
-
-img.TOCLink
-{
- cursor: pointer;
- margin-left: 0;
- margin-right: 0;
-}
-
-a.SelectedNode, a.UnselectedNode
-{
- color: #333;
- text-decoration: none;
- padding: 1px 3px 1px 3px;
- white-space: nowrap;
-}
-
-a.SelectedNode
-{
- background-color: #ffffff;
- border: solid 1px #999999;
- padding: 0px 2px 0px 2px;
-}
-
-a.UnselectedNode:hover, a.SelectedNode:hover
-{
- background-color: #cccccc;
- border: solid 1px #999999;
- padding: 0px 2px 0px 2px;
-}
-
-.Visible
-{
- display: block;
- margin-left: 2em;
-}
-
-.Hidden
-{
- display: none;
-}
-
-.Tree
-{
- background-color: #fff;
- color: #333;
- width: 300px;
- overflow: auto;
-}
-
-.TreeNode, .TreeItem
-{
- white-space: nowrap;
- margin: 2px 2px 2px 2px;
-}
-
-.TOCDiv
-{
- position: relative;
- float: left;
- width: 300px;
- height: 100%;
-}
-
-.TOCSizer
-{
- clear: none;
- float: left;
- width: 10px;
- height: 100%;
- background-image: url("Splitter.gif");
- background-position:center center;
- background-repeat:no-repeat;
- position: relative;
- cursor: w-resize;
- border-left: solid 1px #CCC;
-}
-
-.TopicContent
-{
- position: relative;
- float: right;
- background-color: white;
- height: 100%;
-}
-
-.SearchOpts
-{
- padding: 5px 5px 10px 5px;
- color: black;
- width: 300px;
- border-bottom: solid lightgrey 1px;
- height: 110px !important;
-}
-
-.NavOpts
-{
- padding: 5px 5px 6px 5px;
- color: black;
- width: 300px;
- border-bottom: solid lightgrey 1px;
-}
-
-.NavOpts img {
- display:inline-block;
- margin: 0px 5px 0px 5px;
-}
-
-.IndexOpts
-{
- padding: 5px 5px 6px 5px;
- color: black;
- width: 300px;
- border-bottom: solid lightgrey 1px;
-}
-
-.IndexItem
-{
- white-space: nowrap;
- margin: 2px 2px 2px 2px;
-}
-
-.IndexSubItem
-{
- white-space: nowrap;
- margin: 2px 2px 2px 12px;
-}
-
-.PaddedText
-{
- margin: 10px 10px 10px 10px;
-}
diff --git a/build/ApiDocs/csharp-api-docs.shfbproj b/build/ApiDocs/csharp-api-docs.shfbproj
deleted file mode 100644
index f635f2e2ee..0000000000
--- a/build/ApiDocs/csharp-api-docs.shfbproj
+++ /dev/null
@@ -1,172 +0,0 @@
-
-
-
-
- Debug
- AnyCPU
- 2.0
- {cb4d85f1-7390-40ee-b41f-a724bb8fddea}
- 1.9.5.0
-
- Documentation
- Documentation
- Documentation
-
- .NET Framework 4.5
- .\Output\
- UmbracoClassLibrary
- en-US
- OnlyErrors
- csharp-api-docs.log
- Website
- True
- False
- False
- False
- True
- CSharp
- Blank
- False
- VS2010
- False
- Guid
- Umbraco .Net Class Library
- AboveNamespaces
- Attributes, InheritedMembers, InheritedFrameworkMembers, Protected, SealedProtected
-
-
-
-
-
-
- None
- None
- False
- True
- Summary, AutoDocumentCtors, AutoDocumentDispose
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/build/BuildDocs.bat b/build/BuildDocs.bat
new file mode 100644
index 0000000000..9d0a04e1cd
--- /dev/null
+++ b/build/BuildDocs.bat
@@ -0,0 +1,20 @@
+@ECHO OFF
+SETLOCAL
+
+SET release=%1
+ECHO Installing Npm NuGet Package
+
+SET nuGetFolder=%CD%\..\src\packages\
+ECHO Configured packages folder: %nuGetFolder%
+ECHO Current folder: %CD%
+
+%CD%\..\src\.nuget\NuGet.exe install Npm.js -OutputDirectory %nuGetFolder% -Verbosity quiet
+
+for /f "delims=" %%A in ('dir %nuGetFolder%node.js.* /b') do set "nodePath=%nuGetFolder%%%A\"
+for /f "delims=" %%A in ('dir %nuGetFolder%npm.js.* /b') do set "npmPath=%nuGetFolder%%%A\tools\"
+
+ECHO Adding Npm and Node to path
+REM SETLOCAL is on, so changes to the path not persist to the actual user's path
+PATH=%npmPath%;%nodePath%;%PATH%
+
+Powershell.exe -ExecutionPolicy Unrestricted -File .\BuildDocs.ps1
\ No newline at end of file
diff --git a/build/BuildDocs.ps1 b/build/BuildDocs.ps1
index 6f46a43fde..dcb3a85cc1 100644
--- a/build/BuildDocs.ps1
+++ b/build/BuildDocs.ps1
@@ -1,27 +1,100 @@
-##We cannot continue if sandcastle is not installed determined by env variable: SHFBROOT
+$PSScriptFilePath = (Get-Item $MyInvocation.MyCommand.Path);
+$RepoRoot = (get-item $PSScriptFilePath).Directory.Parent.FullName;
+$SolutionRoot = Join-Path -Path $RepoRoot "src";
+$ToolsRoot = Join-Path -Path $RepoRoot "tools";
+$DocFx = Join-Path -Path $ToolsRoot "docfx\docfx.exe"
+$DocFxFolder = (Join-Path -Path $ToolsRoot "docfx")
+$DocFxJson = Join-Path -Path $RepoRoot "apidocs\docfx.json"
+$7Zip = Join-Path -Path $ToolsRoot "7zip\7za.exe"
+$DocFxSiteOutput = Join-Path -Path $RepoRoot "apidocs\_site\*.*"
+$NgDocsSiteOutput = Join-Path -Path $RepoRoot "src\Umbraco.Web.UI.Client\docs\api\*.*"
+$ProgFiles86 = [Environment]::GetEnvironmentVariable("ProgramFiles(x86)");
+$MSBuild = "$ProgFiles86\MSBuild\14.0\Bin\MSBuild.exe"
-if (-not (Test-Path Env:\SHFBROOT))
-{
- throw "The docs cannot be build, install Sandcastle help file builder"
+
+################ Do the UI docs
+
+"Changing to Umbraco.Web.UI.Client folder"
+cd ..
+cd src\Umbraco.Web.UI.Client
+Write-Host $(Get-Location)
+
+"Creating build folder so MSBuild doesn't run the whole grunt build"
+if (-Not (Test-Path "build")) {
+ md "build"
}
-$PSScriptFilePath = (Get-Item $MyInvocation.MyCommand.Path).FullName
-$BuildRoot = Split-Path -Path $PSScriptFilePath -Parent
-$OutputPath = Join-Path -Path $BuildRoot -ChildPath "ApiDocs\Output"
-$ProjFile = Join-Path -Path $BuildRoot -ChildPath "ApiDocs\csharp-api-docs.shfbproj"
+"Installing node"
+# Check if Install-Product exists, should only exist on the build server
+if (Get-Command Install-Product -errorAction SilentlyContinue)
+{
+ Install-Product node ''
+}
-"Building docs with project file: $ProjFile"
+"Installing node modules"
+& npm install
-$MSBuild = "$Env:SYSTEMROOT\Microsoft.NET\Framework\v4.0.30319\msbuild.exe"
+"Installing grunt"
+& npm install -g grunt-cli
-# build it!
-& $MSBuild "$ProjFile"
+"Moving back to build folder"
+cd ..
+cd ..
+cd build
+Write-Host $(Get-Location)
-# remove files left over
-Remove-Item $BuildRoot\* -include csharp-api-docs.shfbproj_*
+ & grunt --gruntfile ../src/umbraco.web.ui.client/gruntfile.js docs
-# copy our custom styles in
-Copy-Item $BuildRoot\ApiDocs\TOC.css $OutputPath\TOC.css
+# change baseUrl
+$BaseUrl = "https://our.umbraco.org/apidocs/ui/"
+$IndexPath = "../src/umbraco.web.ui.client/docs/api/index.html"
+(Get-Content $IndexPath).replace('location.href.replace(rUrl, indexFile)', "`'" + $BaseUrl + "`'") | Set-Content $IndexPath
+# zip it
-""
-"Done!"
\ No newline at end of file
+& $7Zip a -tzip ui-docs.zip $NgDocsSiteOutput -r
+
+################ Do the c# docs
+
+# Build the solution in debug mode
+$SolutionPath = Join-Path -Path $SolutionRoot -ChildPath "umbraco.sln"
+& $MSBuild "$SolutionPath" /p:Configuration=Debug /maxcpucount /t:Clean
+if (-not $?)
+{
+ throw "The MSBuild process returned an error code."
+}
+& $MSBuild "$SolutionPath" /p:Configuration=Debug /maxcpucount
+if (-not $?)
+{
+ throw "The MSBuild process returned an error code."
+}
+
+# Go get docfx if we don't hae it
+$FileExists = Test-Path $DocFx
+If ($FileExists -eq $False) {
+
+ If(!(Test-Path $DocFxFolder))
+ {
+ New-Item $DocFxFolder -type directory
+ }
+
+ $DocFxZip = Join-Path -Path $ToolsRoot "docfx\docfx.zip"
+ $DocFxSource = "https://github.com/dotnet/docfx/releases/download/v1.9.4/docfx.zip"
+ Invoke-WebRequest $DocFxSource -OutFile $DocFxZip
+
+ #unzip it
+ & $7Zip e $DocFxZip "-o$DocFxFolder"
+}
+
+#clear site
+If(Test-Path(Join-Path -Path $RepoRoot "apidocs\_site"))
+{
+ Remove-Item $DocFxSiteOutput -recurse
+}
+
+# run it!
+& $DocFx metadata $DocFxJson
+& $DocFx build $DocFxJson
+
+# zip it
+
+& $7Zip a -tzip csharp-docs.zip $DocFxSiteOutput -r
diff --git a/src/Umbraco.Web.UI.Client/docs/src/api/index.ngdoc b/src/Umbraco.Web.UI.Client/docs/src/api/index.ngdoc
index a7cf500744..74cc458b90 100644
--- a/src/Umbraco.Web.UI.Client/docs/src/api/index.ngdoc
+++ b/src/Umbraco.Web.UI.Client/docs/src/api/index.ngdoc
@@ -2,15 +2,9 @@
@name Umbraco 7 JS documentation
@description
-#Belle
+#Umbraco Backoffice UI API documentation
-Umbraco 7 UI, codename "Belle" Built on AngularJS, Lazyload.js and Twitter Bootstrap
-
-##Introduction
-Slides from the initial demonstration of Belle done at the Umbraco DK Fest can be found here:
-
-http://rawgithub.com/umbraco/Belle/master/Presentation/index.html
-
+This documentation relates to the angular, js, css and less APIs for developing back office components
##Running the site with mocked data
@@ -45,7 +39,7 @@ So run the command:
sudo npm install grunt-cli -g
-Now that you have node and grunt installed, you can open `/Umbraco.Belle.Client` in either `cmd.exe` or terminal and run:
+Now that you have node and grunt installed, you can open `/Umbraco.Web.UI.Client` in either `cmd.exe` or terminal and run:
grunt dev
diff --git a/src/Umbraco.Web.UI.Client/docs/umb-docs.css b/src/Umbraco.Web.UI.Client/docs/umb-docs.css
new file mode 100644
index 0000000000..eef0fcee39
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/docs/umb-docs.css
@@ -0,0 +1,78 @@
+
+html {
+ font-family: 'Segoe UI', Tahoma, Helvetica, sans-serif;
+}
+body {
+ font-family: 'Segoe UI', Tahoma, Helvetica, sans-serif;
+
+}
+
+.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 {
+ font-family: inherit;
+ font-weight: 400;
+ line-height: 1.1;
+ color: inherit;
+}
+
+.content code {
+ font-family: inherit;
+}
+
+.navbar .brand {
+ display: block;
+ float: left;
+ padding: 10px 20px 10px;
+ margin-left: -20px;
+ font-size: 20px;
+ font-weight: 200;
+ color: rgba(0,0,0,.8);
+ text-shadow: none;
+}
+
+.navbar-fixed-top .navbar-inner {
+ min-height: 50px;
+ background: #a3db78;
+}
+
+.form-search .well {
+ background-color: #f5fbf1;
+}
+
+.form-search > ul.nav > li.module {
+ background-color: #daf0c9;
+}
+
+.breadcrumb {
+ background-color: #f5fbf1;
+}
+
+a {
+ color: #f36f21;
+}
+a:hover {
+ text-decoration: none;
+ color: rgba(0,0,0,.8);
+}
+.nav-list > .active > a, .nav-list > .active > a:hover, .nav-list > .active > a:focus,
+.form-search > .nav-list > .active > a, .form-search > .nav-list > .active > a:hover, .form-search > .nav-list > .active > a:focus {
+ color: #f36f21;
+ text-shadow: none;
+ background-color: inherit;
+}
+
+.form-search > ul.nav > li > a {
+ color: rgba(0,0,0,.8);
+ text-shadow: none;
+}
+
+.form-search > ul.nav > li > a:hover {
+ text-decoration: none;
+ background-color: inherit;
+ text-shadow: none;
+ color: #000;
+}
+
+.header img {
+ width: 50px;
+ margin-top: 5px;
+}
diff --git a/src/Umbraco.Web.UI.Client/gruntFile.js b/src/Umbraco.Web.UI.Client/gruntFile.js
index 0500e24c31..fcae3e6b62 100644
--- a/src/Umbraco.Web.UI.Client/gruntFile.js
+++ b/src/Umbraco.Web.UI.Client/gruntFile.js
@@ -380,8 +380,12 @@ module.exports = function (grunt) {
options: {
dest: 'docs/api',
startPage: '/api',
- title: "Umbraco 7",
+ title: "Umbraco Backoffice UI API Documentation",
html5Mode: false,
+ styles: [
+ 'docs/umb-docs.css'
+ ],
+ image: "https://our.umbraco.org/assets/images/logo.svg"
},
api: {
src: ['src/common/**/*.js', 'docs/src/api/**/*.ngdoc'],
@@ -390,7 +394,7 @@ module.exports = function (grunt) {
tutorials: {
src: [],
title: ''
- }
+ }
},
eslint:{
diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
index 33d150490b..4bd0be1308 100644
--- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
+++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
@@ -2426,7 +2426,7 @@ xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.1\x86\*.* "$(TargetDir)x86\"
-
+
diff --git a/src/umbraco.sln b/src/umbraco.sln
index d97aebf4f2..f9267c0412 100644
--- a/src/umbraco.sln
+++ b/src/umbraco.sln
@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
-VisualStudioVersion = 14.0.24720.0
+VisualStudioVersion = 14.0.25123.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Web.UI", "Umbraco.Web.UI\Umbraco.Web.UI.csproj", "{4C4C194C-B5E4-4991-8F87-4373E24CC19F}"
EndProject
@@ -9,6 +9,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{2849E9D4
..\build\Build.bat = ..\build\Build.bat
..\build\Build.proj = ..\build\Build.proj
..\build\BuildBelle.bat = ..\build\BuildBelle.bat
+ ..\build\BuildDocs.ps1 = ..\build\BuildDocs.ps1
..\build\RevertToCleanInstall.bat = ..\build\RevertToCleanInstall.bat
..\build\RevertToEmptyInstall.bat = ..\build\RevertToEmptyInstall.bat
SolutionInfo.cs = SolutionInfo.cs
@@ -19,8 +20,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{2849E9D4
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{FD962632-184C-4005-A5F3-E705D92FC645}"
ProjectSection(SolutionItems) = preProject
+ ..\apidocs\docfx.filter.yml = ..\apidocs\docfx.filter.yml
+ ..\apidocs\docfx.json = ..\apidocs\docfx.json
+ ..\apidocs\index.md = ..\apidocs\index.md
..\LICENSE.md = ..\LICENSE.md
..\README.md = ..\README.md
+ ..\apidocs\toc.yml = ..\apidocs\toc.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{B5BD12C1-A454-435E-8A46-FF4A364C0382}"