236 lines
12 KiB
HTML
236 lines
12 KiB
HTML
<!-- Modal developer mode -->
|
|
<div class="modal fade" id="developerModeChangeModal" tabindex="-1" role="dialog">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h4 class="modal-title" ng-hide="config.developerMode">Enable CLI</h4>
|
|
<h4 class="modal-title" ng-show="config.developerMode">Disable CLI</h4>
|
|
</div>
|
|
<div class="modal-body">
|
|
<form name="developerModeChangeForm" role="form" novalidate ng-submit="doChangeDeveloperMode(developerModeChangeForm)" autocomplete="off">
|
|
<fieldset>
|
|
<div class="form-group" ng-class="{ 'has-error': (!developerModeChangeForm.password.$dirty && developerModeChange.error.password) || (developerModeChangeForm.password.$dirty && developerModeChangeForm.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="(!developerModeChangeForm.password.$dirty && developerModeChange.error.password) || (developerModeChangeForm.password.$dirty && developerModeChangeForm.password.$invalid)">
|
|
<small ng-show=" developerModeChangeForm.password.$dirty && developerModeChangeForm.password.$invalid">A password is required</small>
|
|
<small ng-show="!developerModeChangeForm.password.$dirty && developerModeChange.error.password">Wrong password</small>
|
|
</div>
|
|
<input type="password" class="form-control" ng-model="developerModeChange.password" id="inputDeveloperModeChangePassword" name="password" required autofocus>
|
|
</div>
|
|
<input class="ng-hide" type="submit" ng-disabled="developerModeChangeForm.$invalid"/>
|
|
</fieldset>
|
|
</form>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
|
<button type="button" class="btn btn-danger" ng-hide="config.developerMode" ng-click="doChangeDeveloperMode(developerModeChangeForm)" ng-disabled="developerModeChangeForm.$invalid || developerModeChange.busy"><i class="fa fa-spinner fa-pulse" ng-show="developerModeChange.busy"></i> Enable</button>
|
|
<button type="button" class="btn btn-success" ng-show="config.developerMode" ng-click="doChangeDeveloperMode(developerModeChangeForm)" ng-disabled="developerModeChangeForm.$invalid || developerModeChange.busy"><i class="fa fa-spinner fa-pulse" ng-show="developerModeChange.busy"></i> Disable</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 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">
|
|
<img id="previewAvatar" width="128" height="128" ng-src="{{avatarChange.avatar.data || avatarChange.avatar.url || client.avatar}}"/>
|
|
<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>
|
|
|
|
<!-- Modal plan change -->
|
|
<div class="modal fade" id="planChangeModal" tabindex="-1" role="dialog">
|
|
<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">
|
|
This will change your plan from <b>{{ currentPlan.name }}</b> to <b>{{ requestedPlan.name }}</b>.
|
|
<br/>
|
|
<br/>
|
|
Your apps and data will be migrated to the new Cloudron and will take around 15 minutes.
|
|
<br/>
|
|
<br/>
|
|
<br/>
|
|
<form name="planChangeForm" role="form" novalidate ng-submit="doChangePlan(planChangeForm)" autocomplete="off">
|
|
<fieldset>
|
|
<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>
|
|
<input type="password" class="form-control" ng-model="planChange.password" id="inputPlanChangePassword" name="password" required autofocus>
|
|
</div>
|
|
<input class="ng-hide" type="submit" ng-disabled="planChangeForm.$invalid"/>
|
|
</fieldset>
|
|
</form>
|
|
</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="doChangePlan()" ng-disabled="planChange.busy"><i class="fa fa-spinner fa-pulse" ng-show="planChange.busy"></i> Confirm</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<br/>
|
|
|
|
<div class="section-header">
|
|
<div class="text-left">
|
|
<h1>Settings</h1>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="section-header" ng-show="user.admin">
|
|
<div class="text-left">
|
|
<h3>About</h3>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card" style="margin-bottom: 15px;" ng-show="user.admin">
|
|
<div class="row">
|
|
<div class="col-xs-4" style="min-width: 150px;">
|
|
<div class="settings-avatar" ng-click="showChangeAvatar()" style="background-image: url('{{ client.avatar }}');">
|
|
<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>
|
|
|
|
<div class="section-header" ng-show="user.admin">
|
|
<div class="text-left">
|
|
<h3>Plans</h3>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card" style="margin-bottom: 15px;" ng-show="user.admin">
|
|
<div class="row">
|
|
<div class="col-xs-12">
|
|
<div class="btn-group" data-toggle="buttons">
|
|
<label class="radio" ng-repeat="plan in availablePlans">
|
|
<input type="radio" name="options" autocomplete="off" checked ng-click="setRequestedPlan(plan)">
|
|
{{ plan.name }} ({{ plan.slug | uppercase }}) - {{ plan.price/100 }}{{ currency }}/month
|
|
<span ng-show="currentPlan.slug === plan.slug"> (current plan)
|
|
</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<button class="btn btn-primary pull-right" ng-disabled="requestedPlan.name === currentPlan.name" ng-click="showChangePlan()">Change Plan</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="section-header" ng-show="user.admin">
|
|
<div class="text-left">
|
|
<h3>Backups</h3>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card" style="margin-bottom: 15px;" ng-show="user.admin">
|
|
<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>
|
|
<span ng-hide="lastBackup">No backups have been created yet</span>
|
|
</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">
|
|
<button class="btn btn-outline btn-xs btn-primary" ng-click="showCreateBackup()" ng-disabled="createBackup.busy">Create Backup</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="section-header" ng-show="user.admin">
|
|
<div class="text-left">
|
|
<h3>API</h3>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card" style="margin-bottom: 15px;" ng-show="user.admin">
|
|
<div class="row">
|
|
<div class="col-xs-12">
|
|
The Cloudron <a href="https://cloudron.io/references/api.html" target="_blank">REST API</a> can be used to manage all aspects of the Cloudron like adding users and installing apps.
|
|
<br/>
|
|
<br/>
|
|
You can develop apps for the Cloudron using the <a href="https://cloudron.io/references/cli.html" target="_blank">CLI tool</a>. See the <a href="{{ config.webServerOrigin }}/documentation.html" target="_blank">docs</a> for more information.
|
|
</div>
|
|
</div>
|
|
<br/>
|
|
<div class="row">
|
|
<div class="col-xs-6">
|
|
Status
|
|
</div>
|
|
<div class="col-xs-6 text-right">
|
|
<a href="" class="text-danger" ng-show="config.developerMode" ng-click="showChangeDeveloperMode()">Enabled</a>
|
|
<a href="" ng-hide="config.developerMode" ng-click="showChangeDeveloperMode()">Disabled</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Offset the footer -->
|
|
<br/><br/>
|