diff --git a/src/Umbraco.Web.UI.Client/src/assets/img/application/logo_black.png b/src/Umbraco.Web.UI.Client/src/assets/img/application/logo_black.png new file mode 100644 index 0000000000..d3c6dc56c2 Binary files /dev/null and b/src/Umbraco.Web.UI.Client/src/assets/img/application/logo_black.png differ diff --git a/src/Umbraco.Web.UI.Client/src/assets/img/application/logo_white.png b/src/Umbraco.Web.UI.Client/src/assets/img/application/logo_white.png new file mode 100644 index 0000000000..72b2fe470a Binary files /dev/null and b/src/Umbraco.Web.UI.Client/src/assets/img/application/logo_white.png differ diff --git a/src/Umbraco.Web.UI.Client/src/assets/img/installer.jpg b/src/Umbraco.Web.UI.Client/src/assets/img/installer.jpg new file mode 100644 index 0000000000..4a48ed831a Binary files /dev/null and b/src/Umbraco.Web.UI.Client/src/assets/img/installer.jpg differ diff --git a/src/Umbraco.Web.UI.Client/src/install.loader.js b/src/Umbraco.Web.UI.Client/src/install.loader.js new file mode 100644 index 0000000000..bf4a8e787d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/install.loader.js @@ -0,0 +1,21 @@ +yepnope({ + + load: [ + 'lib/jquery/jquery-2.0.3.min.js', + + /* 1.1.5 */ + 'lib/angular/1.1.5/angular.min.js', + 'lib/angular/1.1.5/angular-cookies.min.js', + 'lib/angular/1.1.5/angular-mobile.min.js', + 'lib/angular/1.1.5/angular-mocks.js', + 'lib/angular/1.1.5/angular-sanitize.min.js', + 'lib/underscore/underscore.js', + 'js/umbraco.installer.js' + ], + + complete: function () { + jQuery(document).ready(function () { + angular.bootstrap(document, ['umbraco.install']); + }); + } +}); \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/installer/installer.controller.js b/src/Umbraco.Web.UI.Client/src/installer/installer.controller.js new file mode 100644 index 0000000000..b2e4c4f595 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/installer/installer.controller.js @@ -0,0 +1,19 @@ +angular.module("umbraco.install").controller("Umbraco.InstallerController", + function($scope, installerService){ + + $scope.stepIndex = 0; + installerService.init(); + $scope.installer = installerService.status; + + $scope.forward = function(){ + installerService.forward(); + }; + + $scope.backward = function(){ + installerService.backward(); + }; + + $scope.install = function(){ + installerService.install(); + }; +}); \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/installer/installer.html b/src/Umbraco.Web.UI.Client/src/installer/installer.html new file mode 100644 index 0000000000..601b2e8852 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/installer/installer.html @@ -0,0 +1,37 @@ + + + + + + + + Install Umbraco + + + + + + + + +
+ +
+
+
+ + + + + + + + diff --git a/src/Umbraco.Web.UI.Client/src/installer/installer.service.js b/src/Umbraco.Web.UI.Client/src/installer/installer.service.js new file mode 100644 index 0000000000..12b316904e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/installer/installer.service.js @@ -0,0 +1,101 @@ +angular.module("umbraco.install").factory('installerService', function($q, $timeout){ + + var _status = { + index: 0, + current: undefined, + steps: undefined + }; + + var _installerModel = {}; + var service = { + + status : _status, + getSteps : function(){ + var deferred = $q.defer(); + + var s = [ + { + name: "User", + view: "user", + description: "Configuring your user account", + completed: false + }, + { + name: "Database", + view: "database", + description: "Setting up the system database", + completed: false + }, + { + name: "Packages", + view: "packages", + description: "Installing a staterkit", + completed: false + } + ]; + + deferred.resolve(s); + return deferred.promise; + }, + + init : function(){ + if(!_status.all){ + service.getSteps().then(function(steps){ + service.status.steps = steps; + service.status.index = 0; + service.gotoStep(0); + }); + } + }, + + gotoStep : function(index){ + var step = service.status.steps[index]; + + if(step.view.indexOf(".html") < 0){ + step.view = step.view + ".html"; + } + + if(step.view.indexOf("/") < 0){ + step.view = "views/install/" + step.view; + } + + if(!step.model){ + step.model = {}; + } + + service.status.index = index; + service.status.current = step; + }, + + storeCurrentStep : function(){ + _installerModel[service.status.current.name] = service.status.current.model; + }, + + forward : function(){ + service.storeCurrentStep(); + service.status.index++; + service.gotoStep(service.status.index); + }, + + backwards : function(){ + service.storeCurrentStep(); + service.gotoStep(service.status.index--); + }, + + install : function(){ + service.storeCurrentStep(); + service.status.current = undefined; + + + _.each(service.status.steps, function(step){ + $timeout(function(){ + step.completed = true; + }, 2000); + }); + + //post the installer model to somewhere... + } + }; + + return service; +}); \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/installer/steps/database.controller.js b/src/Umbraco.Web.UI.Client/src/installer/steps/database.controller.js new file mode 100644 index 0000000000..7ee3a29383 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/installer/steps/database.controller.js @@ -0,0 +1,3 @@ +angular.module("umbraco.install").controller("Umbraco.Installer.DataBaseController", function(){ + alert("we are in your database"); +}); \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/installer/steps/database.html b/src/Umbraco.Web.UI.Client/src/installer/steps/database.html new file mode 100644 index 0000000000..4c0b1d98f0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/installer/steps/database.html @@ -0,0 +1,5 @@ +
+ + + +
\ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/installer/steps/packages.html b/src/Umbraco.Web.UI.Client/src/installer/steps/packages.html new file mode 100644 index 0000000000..ed769e7484 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/installer/steps/packages.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/installer/steps/user.controller.js b/src/Umbraco.Web.UI.Client/src/installer/steps/user.controller.js new file mode 100644 index 0000000000..441c3177a8 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/installer/steps/user.controller.js @@ -0,0 +1,12 @@ +angular.module("umbraco.install").controller("Umbraco.Install.UserController", function($scope, installerService){ + + $scope.validateAndInstall = function(){ + installerService.install(); + }; + + + $scope.validateAndForward = function(){ + installerService.forward(); + }; + +}); \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/installer/steps/user.html b/src/Umbraco.Web.UI.Client/src/installer/steps/user.html new file mode 100644 index 0000000000..f88b875911 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/installer/steps/user.html @@ -0,0 +1,48 @@ +
+

Install Umbraco 7

+ +

Enter your name, email and password to install Umbraco 7 with its default settings, alternatively you can customize your installation

+ +
+ +
+
+
+
+ +
+ +
+
+ +
+ +
+ + Your email will be used as your login +
+
+ +
+ +
+ + Atleast 8 characters long +
+
+
+
+ +
+ +
+ Customize +
+ +
+ + +
+ +
\ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/less/installer.less b/src/Umbraco.Web.UI.Client/src/less/installer.less new file mode 100644 index 0000000000..28630898e5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/less/installer.less @@ -0,0 +1,154 @@ +// Core variables and mixins +@import "fonts.less"; // Loading fonts +@import "variables.less"; // Modify this for custom colors, font-sizes, etc +@import "mixins.less"; +@import "buttons.less"; +@import "forms.less"; + +// Grid system and page structure +@import "../../lib/bootstrap/less/scaffolding.less"; +@import "../../lib/bootstrap/less/grid.less"; +@import "../../lib/bootstrap/less/layouts.less"; + + + +html { + background: url('../img/installer.jpg') no-repeat center center fixed; + -webkit-background-size: cover; + -moz-background-size: cover; + -o-background-size: cover; + background-size: cover; +} + +body { + margin: 0; + padding: 0; + height: 100%; + width: 100%; + + font-family: @baseFontFamily; + font-size: @baseFontSize; + line-height: @baseLineHeight; + color: @textColor; + + vertical-align: center; + text-align: center; +} + +#logo{ + position: absolute; + top: 20px; + left: 20px; + opacity: 0.8 +} + +#installer{ + margin: auto; + background: rgba(255, 255, 255, 1); + height: 400px; +} + +input.ng-dirty.ng-invalid{border-color: #b94a48; color: #b94a48;} + +.disabled{ + opacity: 0.6; +} + +.controls{ + text-align: left +} + +.controls small{display: block; color: @gray;} + +.absolute-center { + margin: auto; + position: absolute; + top: 0; left: 0; bottom: 0; right: 0; +} + +.umb-loader{ +background-color: @blue; +margin-top:0; +margin-left:-100%; +-moz-animation-name:bounce_loadingProgressG; +-moz-animation-duration:1s; +-moz-animation-iteration-count:infinite; +-moz-animation-timing-function:linear; +-webkit-animation-name:bounce_loadingProgressG; +-webkit-animation-duration:1s; +-webkit-animation-iteration-count:infinite; +-webkit-animation-timing-function:linear; +-ms-animation-name:bounce_loadingProgressG; +-ms-animation-duration:1s; +-ms-animation-iteration-count:infinite; +-ms-animation-timing-function:linear; +-o-animation-name:bounce_loadingProgressG; +-o-animation-duration:1s; +-o-animation-iteration-count:infinite; +-o-animationtiming-function:linear; +animation-name:bounce_loadingProgressG; +animation-duration:1s; +animation-iteration-count:infinite; +animation-timing-function:linear; +width:100%; +height:1px; +} + + + @-moz-keyframes bounce_loadingProgressG{ + 0%{ + margin-left:-100%; + } + + 100%{ + margin-left:100%; + } + + } + + @-webkit-keyframes bounce_loadingProgressG{ + 0%{ + margin-left:-100%; + } + + 100%{ + margin-left:100%; + } + + } + + @-ms-keyframes bounce_loadingProgressG{ + 0%{ + margin-left:-100%; + } + + 100%{ + margin-left:100%; + } + + } + + @-o-keyframes bounce_loadingProgressG{ + 0%{ + margin-left:-100%; + } + + 100%{ + margin-left:100%; + } + + } + + @keyframes bounce_loadingProgressG{ + 0%{ + margin-left:-100%; + } + 100%{ + margin-left:100%; + } +} + +//loader defaults +.umb-loader{ + height: 10px; margin: 10px 10px 10px 10px; +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/js/install.js b/src/Umbraco.Web.UI/Umbraco/js/install.js new file mode 100644 index 0000000000..41aab12c80 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/js/install.js @@ -0,0 +1,30 @@ +yepnope({ + + load: [ + 'lib/jquery/jquery-2.0.3.min.js', + + /* 1.1.5 */ + 'lib/angular/1.1.5/angular.min.js', + 'lib/angular/1.1.5/angular-cookies.min.js', + 'lib/angular/1.1.5/angular-mobile.min.js', + 'lib/angular/1.1.5/angular-mocks.js', + 'lib/angular/1.1.5/angular-sanitize.min.js', + 'lib/underscore/underscore.js', + 'js/umbraco.servervariables.js', + 'js/app.dev.js' + ], + + complete: function () { + jQuery(document).ready(function () { + + angular.module('umbraco.install', [ + 'umbraco.resources', + 'umbraco.services', + 'umbraco.httpbackend', + 'ngMobile' + ]); + + angular.bootstrap(document, ['umbraco.install']); + }); + } +}); \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/js/install.loader.js b/src/Umbraco.Web.UI/Umbraco/js/install.loader.js new file mode 100644 index 0000000000..bf4a8e787d --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/js/install.loader.js @@ -0,0 +1,21 @@ +yepnope({ + + load: [ + 'lib/jquery/jquery-2.0.3.min.js', + + /* 1.1.5 */ + 'lib/angular/1.1.5/angular.min.js', + 'lib/angular/1.1.5/angular-cookies.min.js', + 'lib/angular/1.1.5/angular-mobile.min.js', + 'lib/angular/1.1.5/angular-mocks.js', + 'lib/angular/1.1.5/angular-sanitize.min.js', + 'lib/underscore/underscore.js', + 'js/umbraco.installer.js' + ], + + complete: function () { + jQuery(document).ready(function () { + angular.bootstrap(document, ['umbraco.install']); + }); + } +}); \ No newline at end of file