2015-07-20 00:09:47 -07:00
<!-- Modal change avatar -->
< div class = "modal fade" id = "avatarChangeModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< h4 class = "modal-title" > Change your Cloudron Avatar< / h4 >
< / div >
< div class = "modal-body settings-avatar-selector" >
2016-01-20 16:55:41 +01:00
< img id = "previewAvatar" width = "128" height = "128" ng-src = "{{avatarChange.avatar.data || avatarChange.avatar.url || client.avatar}}" / >
2015-07-20 00:09:47 -07:00
< input type = "file" id = "avatarFileInput" style = "display: none" accept = "image/png" / >
< br / >
< br / >
< div class = "grid" >
< div class = "item" ng-repeat = "avatar in avatarChange.availableAvatars" style = "background-image: url('{{avatar.data || avatar.url}}');" ng-click = "setPreviewAvatar(avatar)" > < / div >
< div class = "item add" ng-click = "showCustomAvatarSelector()" > < / div >
< / div >
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Cancel< / button >
< button type = "button" class = "btn btn-success" ng-click = "doChangeAvatar()" ng-disabled = "avatarChange.busy" > < i class = "fa fa-spinner fa-pulse" ng-show = "avatarChange.busy" > < / i > Change< / button >
< / div >
< / div >
< / div >
< / div >
<!-- Modal backup -->
< div class = "modal fade" id = "createBackupModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< h4 class = "modal-title" > Create a new Backup< / h4 >
< / div >
< div class = "modal-body" >
Do you really want to create a new backup?
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Cancel< / button >
< button type = "button" class = "btn btn-success" ng-click = "doCreateBackup()" ng-disabled = "createBackup.busy" > < i class = "fa fa-spinner fa-pulse" ng-show = "developerModeChange.busy" > < / i > Confirm< / button >
< / div >
< / div >
< / div >
< / div >
2016-06-28 13:45:50 -05:00
<!-- Modal plan change -->
2016-06-28 14:02:45 -05:00
< div class = "modal fade" id = "planChangeModal" tabindex = "-1" role = "dialog" >
2016-06-28 13:45:50 -05:00
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< button type = "button" class = "close" data-dismiss = "modal" > × < / button >
< h4 class = "modal-title" > Cloudron Change Plan< / h4 >
< / div >
< div class = "modal-body" >
2016-06-30 10:27:29 -05:00
This will change your plan from < b > {{ currentPlan.name }}< / b > to < b > {{ planChange.requestedPlan.name }}< / b > .
2016-06-28 13:45:50 -05:00
< br / >
< br / >
Your apps and data will be migrated to the new Cloudron and will take around 15 minutes.
2016-06-28 14:02:45 -05:00
< br / >
2016-06-28 14:36:19 -05:00
< br / >
< br / >
2016-06-28 14:02:45 -05:00
< form name = "planChangeForm" role = "form" novalidate ng-submit = "doChangePlan(planChangeForm)" autocomplete = "off" >
< fieldset >
2016-06-29 21:29:28 +02:00
< input type = "password" style = "display: none;" >
2016-06-28 14:02:45 -05:00
< div class = "form-group" ng-class = "{ 'has-error': (!planChangeForm.password.$dirty && planChange.error.password) || (planChangeForm.password.$dirty && planChangeForm.password.$invalid) }" >
< label class = "control-label" for = "inputDeveloperModeChangePassword" > Give your password to verify that you are performing that action< / label >
< div class = "control-label" ng-show = "(!planChangeForm.password.$dirty && planChange.error.password) || (planChangeForm.password.$dirty && planChangeForm.password.$invalid)" >
< small ng-show = " planChangeForm.password.$dirty && planChangeForm.password.$invalid" > A password is required< / small >
< small ng-show = "!planChangeForm.password.$dirty && planChange.error.password" > Wrong password< / small >
< / div >
2016-06-28 14:36:19 -05:00
< input type = "password" class = "form-control" ng-model = "planChange.password" id = "inputPlanChangePassword" name = "password" required autofocus >
2016-06-28 14:02:45 -05:00
< / div >
< input class = "ng-hide" type = "submit" ng-disabled = "planChangeForm.$invalid" / >
< / fieldset >
< / form >
2016-06-28 13:45:50 -05:00
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Cancel< / button >
2016-06-28 14:36:19 -05:00
< button type = "button" class = "btn btn-success" ng-click = "doChangePlan()" ng-disabled = "planChange.busy" > < i class = "fa fa-spinner fa-pulse" ng-show = "planChange.busy" > < / i > Confirm< / button >
2016-06-28 13:45:50 -05:00
< / div >
< / div >
< / div >
< / div >
2016-07-26 13:39:15 +02:00
<!-- Modal appstore login -->
< div class = "modal fade" id = "appstoreLoginModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< h4 class = "modal-title" > Login to the Cloudron Store< / h4 >
< / div >
< div class = "modal-body" >
2016-07-26 13:54:21 +02:00
< center >
2016-07-26 14:16:48 +02:00
< img ng-src = "{{ config.webServerOrigin }}/img/logo.png" width = "128px" height = "128px" / >
2016-07-26 13:54:21 +02:00
< / center >
2016-07-26 13:39:15 +02:00
< form name = "appstoreLoginForm" role = "form" novalidate ng-submit = "appstoreLogin.submit()" autocomplete = "off" >
< input type = "password" style = "display: none;" >
< div class = "form-group" ng-class = "{ 'has-error': (appstoreLoginForm.email.$dirty && appstoreLoginForm.email.$invalid) }" >
< label class = "control-label" > Email Address< / label >
2016-07-26 13:54:21 +02:00
< input type = "email" class = "form-control" ng-model = "appstoreLogin.email" name = "email" required autofocus >
2016-07-26 13:39:15 +02:00
< div class = "control-label" ng-show = "(!appstoreLoginForm.email.$dirty && appstoreLogin.error.email) || (appstoreLoginForm.email.$dirty && appstoreLoginForm.email.$invalid)" >
< small ng-show = "appstoreLoginForm.email.$error.required" > A valid email address is required< / small >
< small ng-show = "(appstoreLoginForm.email.$dirty && appstoreLoginForm.email.$invalid) && !appstoreLoginForm.email.$error.required" > The Email address is not valid< / small >
< / div >
< / div >
< div class = "form-group" ng-class = "{ 'has-error': (!appstoreLoginForm.password.$dirty && appstoreLogin.error.password) || (appstoreLoginForm.password.$dirty && appstoreLoginForm.password.$invalid) }" >
< label class = "control-label" > Password< / label >
2016-07-26 14:09:11 +02:00
< input type = "password" class = "form-control" ng-model = "appstoreLogin.password" id = "inputAppstoreLoginPassword" name = "password" required autofocus >
2016-07-26 13:39:15 +02:00
< div class = "control-label" ng-show = "(!appstoreLoginForm.password.$dirty && appstoreLogin.error.password) || (appstoreLoginForm.password.$dirty && appstoreLoginForm.password.$invalid)" >
< small ng-show = " appstoreLoginForm.password.$dirty && appstoreLoginForm.password.$invalid" > A password is required< / small >
< small ng-show = "!appstoreLoginForm.password.$dirty && appstoreLogin.error.password" > Wrong password< / small >
< / div >
< / div >
< input class = "ng-hide" type = "submit" ng-disabled = "appstoreLoginForm.$invalid" / >
< / form >
< / div >
< div class = "modal-footer" >
2016-07-26 14:16:48 +02:00
< a class = "btn btn-primary pull-left" href = "{{ config.webServerOrigin }}/console.html#/register" target = "_blank" > Register< / a >
2016-07-26 13:39:15 +02:00
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Cancel< / button >
2016-07-26 14:09:11 +02:00
< button type = "button" class = "btn btn-success" ng-click = "appstoreLogin.submit()" ng-disabled = "appstoreLoginForm.$invalid || appstoreLogin.busy" > < i class = "fa fa-spinner fa-pulse" ng-show = "appstoreLogin.busy" > < / i > Login< / button >
2016-07-26 13:39:15 +02:00
< / div >
< / div >
< / div >
< / div >
2015-08-12 13:48:55 +02:00
< br / >
2016-06-07 10:10:58 +02:00
< div class = "section-header" >
2015-08-12 13:48:55 +02:00
< div class = "text-left" >
< h1 > Settings< / h1 >
< / div >
< / div >
2016-07-26 17:05:54 +02:00
< div class = "section-header" >
2015-11-04 16:41:33 -08:00
< div class = "text-left" >
< h3 > About< / h3 >
< / div >
< / div >
2016-07-26 17:05:54 +02:00
< div class = "card" style = "margin-bottom: 15px;" >
2015-11-04 16:41:33 -08:00
< div class = "row" >
< div class = "col-xs-4" style = "min-width: 150px;" >
2016-01-20 16:55:41 +01:00
< div class = "settings-avatar" ng-click = "showChangeAvatar()" style = "background-image: url('{{ client.avatar }}');" >
2015-11-04 16:41:33 -08:00
< div class = "overlay" > < / div >
< / div >
< / div >
< div class = "col-xs-8" >
< table width = "100%" >
< tr >
< td class = "text-muted" style = "vertical-align: top;" > Model< / td >
< td class = "text-right" style = "vertical-align: top; white-space: nowrap;" > {{ config.size }} - {{ config.region }}< / td >
< / tr >
< tr >
< td class = "text-muted" style = "vertical-align: top;" > Version< / td >
< td class = "text-right" style = "vertical-align: top; white-space: nowrap;" > {{ config.version }}< / td >
< / tr >
< / table >
< / div >
< / div >
< / div >
2016-07-26 17:05:54 +02:00
< div class = "section-header" >
2016-07-20 14:28:42 +02:00
< div class = "text-left" >
< h3 > Appstore Account (< a href = "https://cloudron.io" target = "_blank" > cloudron.io< / a > )< / h3 >
< / div >
< / div >
2016-07-26 17:05:54 +02:00
< div class = "card" style = "margin-bottom: 15px;" >
2016-07-20 14:28:42 +02:00
< div class = "row" >
2016-07-26 15:23:10 +02:00
< div class = "col-xs-12 text-center" ng-show = "!appstoreConfig.userId" >
2016-07-26 13:39:15 +02:00
< button class = "btn btn-success" ng-click = "appstoreLogin.show()" > Login to the Cloudron Store< / button >
2016-07-20 14:28:42 +02:00
< / div >
2016-07-26 15:23:10 +02:00
< div class = "col-xs-12" ng-show = "appstoreConfig.userId" >
2016-07-26 16:56:30 +02:00
This Cloudron is using {{ appstoreConfig.profile.email }}.
2016-07-20 14:28:42 +02:00
< / div >
< / div >
< / div >
2016-07-26 17:05:54 +02:00
< div class = "section-header" ng-show = "config.provider === 'caas'" >
2016-06-28 13:45:50 -05:00
< div class = "text-left" >
< h3 > Plans< / h3 >
< / div >
< / div >
2016-07-26 17:05:54 +02:00
< div class = "card" style = "margin-bottom: 15px;" ng-show = "config.provider === 'caas'" >
2016-06-28 13:45:50 -05:00
< div class = "row" >
2016-06-29 15:27:19 -05:00
< div class = "col-xs-10 plans" style = "margin-left: 20px" >
2016-06-30 12:03:36 -05:00
< div ng-repeat = "plan in availablePlans" >
< label >
< input type = "radio" ng-model = "planChange.requestedPlan" ng-value = "plan" >
2016-06-28 14:36:19 -05:00
{{ plan.name }} ({{ plan.slug | uppercase }}) - {{ plan.price/100 }}{{ currency }}/month
2016-06-30 10:27:29 -05:00
< span ng-show = "currentPlan.name === plan.name" style = "font-weight: bold" > (current plan)
2016-06-28 13:45:50 -05:00
< / span >
< / label >
< / div >
< / div >
< / div >
< div class = "row" >
2016-06-28 14:51:47 -05:00
< div class = "col-xs-12" >
2016-06-30 10:27:29 -05:00
< button class = "btn btn-primary pull-right" ng-disabled = "planChange.requestedPlan.name === currentPlan.name" ng-click = "showChangePlan()" > Change Plan< / button >
2016-06-28 14:51:47 -05:00
< / div >
2016-06-28 13:45:50 -05:00
< / div >
< / div >
2016-07-26 17:05:54 +02:00
< div class = "section-header" >
2015-07-20 00:09:47 -07:00
< div class = "text-left" >
< h3 > Backups< / h3 >
< / div >
< / div >
2016-07-26 17:05:54 +02:00
< div class = "card" style = "margin-bottom: 15px;" >
2015-07-20 00:09:47 -07:00
< div class = "row" >
< div class = "col-xs-6" >
< span class = "text-muted" > Last Backup< / span >
< / div >
< div class = "col-xs-6 text-right" >
< span ng-show = "lastBackup" > {{ lastBackup.creationTime | prettyDate }}< / span >
2016-07-20 14:31:59 +02:00
< span ng-hide = "lastBackup" > No backups have been made yet< / span >
2015-07-20 00:09:47 -07:00
< / div >
< / div >
<!-- If a backup is blocked (not triggered), the UI does not give feedback currently. This button is only available in dev at the moment! -->
< div class = "row" ng-show = "config.isDev" >
< br / >
< div class = "col-xs-9" >
< div ng-show = "createBackup.busy" class = "progress progress-striped active animateMe" >
< div class = "progress-bar progress-bar-success" role = "progressbar" style = "width: {{ createBackup.percent }}%" > Backup in progress< / div >
< / div >
< / div >
< div class = "col-xs-3 text-right" >
2016-07-20 14:31:59 +02:00
< button class = "btn btn-outline btn-xs btn-primary" ng-click = "showCreateBackup()" ng-disabled = "createBackup.busy" > Backup now< / button >
2015-07-20 00:09:47 -07:00
< / div >
< / div >
< / div >
2016-06-07 15:58:53 +02:00
<!-- Offset the footer -->
< br / > < br / >