2015-07-20 00:09:47 -07:00
<!DOCTYPE html>
< html ng-app = "Application" ng-controller = "MainController" >
< head >
< meta charset = "utf-8" / >
< meta name = "viewport" content = "user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height" / >
2016-06-02 13:17:01 -07:00
<!-- this gets changed once we get the config (because angular has not loaded yet, we see template string for a flash) -->
2015-07-20 00:09:47 -07:00
< title > Cloudron < / title >
2016-01-20 17:14:36 +01:00
< link id = "favicon" href = "/api/v1/cloudron/avatar" rel = "icon" type = "image/png" >
2015-07-20 00:09:47 -07:00
2015-09-10 13:32:31 +02:00
<!-- CSS -->
< link rel = "stylesheet" type = "text/css" href = "/3rdparty/slick.css" / >
< link rel = "stylesheet" type = "text/css" href = "/3rdparty/angular-ui-notification.min.css" / >
2015-08-25 21:59:01 -07:00
< link href = "theme.css" rel = "stylesheet" >
2015-07-20 00:09:47 -07:00
<!-- Custom Fonts -->
< link href = "//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel = "stylesheet" type = "text/css" >
<!-- jQuery -->
< script src = "3rdparty/js/jquery.min.js" > < / script >
2015-07-21 15:29:39 +02:00
<!-- toBlob() polyfill -->
< script src = "3rdparty/js/canvas-to-blob.min.js" > < / script >
2015-07-20 00:09:47 -07:00
<!-- Bootstrap Core JavaScript -->
< script src = "3rdparty/js/bootstrap.min.js" > < / script >
<!-- Slick carousel -->
< script type = "text/javascript" src = "3rdparty/js/slick.js" > < / script >
<!-- Angularjs scripts -->
< script src = "3rdparty/js/angular.min.js" > < / script >
< script src = "3rdparty/js/angular-loader.min.js" > < / script >
< script src = "3rdparty/js/angular-route.min.js" > < / script >
< script src = "3rdparty/js/angular-animate.min.js" > < / script >
2016-07-26 13:53:54 +02:00
< script src = "3rdparty/js/angular-base64.min.js" > < / script >
2015-07-20 00:09:47 -07:00
< script src = "3rdparty/js/angular-md5.min.js" > < / script >
< script src = "3rdparty/js/angular-sanitize.min.js" > < / script >
< script src = "3rdparty/js/angular-slick.min.js" > < / script >
< script src = "3rdparty/js/angular-ui-notification.min.js" > < / script >
< script src = "3rdparty/js/autofill-event.js" > < / script >
2016-07-14 12:46:52 +02:00
<!-- Angular directives for bootstrap https://angular - ui.github.io/bootstrap/ -->
< script src = "3rdparty/js/ui-bootstrap-tpls-1.3.3.min.js" > < / script >
2015-07-20 00:09:47 -07:00
< script src = "3rdparty/js/Chart.js" > < / script >
< script src = "3rdparty/js/ansi_up.js" > < / script >
<!-- Showdown (markdown converter) -->
< script src = "3rdparty/js/showdown-1.1.0.min.js" > < / script >
2016-01-13 16:16:40 +01:00
< script src = "3rdparty/js/showdown-target-blank.min.js" > < / script >
2015-07-20 00:09:47 -07:00
2016-02-04 16:44:40 +01:00
<!-- Bootstrap slider -->
< link rel = "stylesheet" type = "text/css" href = "/3rdparty/bootstrap-slider/bootstrap-slider.min.css" / >
< script type = "text/javascript" src = "/3rdparty/bootstrap-slider/bootstrap-slider.min.js" > < / script >
< script type = "text/javascript" src = "/3rdparty/bootstrap-slider/slider.js" > < / script >
2015-07-20 00:09:47 -07:00
<!-- Main Application -->
< script src = "js/index.js" > < / script >
< / head >
< body >
2016-05-06 13:06:12 +02:00
<!-- Welcome logic -->
2016-05-06 14:41:20 +02:00
< div class = "welcome" ng-show = "tutorialSteps[tutorialStep]" >
< div class = "dialog" ng-show = "tutorialSteps[tutorialStep].title === 'intro'" >
2016-05-06 21:32:34 +02:00
< h2 > Welcome {{ user.username }}< / h2 >
2016-05-09 23:58:35 -07:00
< p > This is the administration page of your Cloudron. It shows your installed apps.< / p >
2016-05-06 13:06:12 +02:00
< br / >
2016-05-06 14:38:17 +02:00
< button class = "btn btn-default pull-left" ng-click = "endTutorial();" > Skip< / button >
2016-05-06 14:41:20 +02:00
< button class = "btn btn-success pull-right" ng-click = "nextTutorialStep();" > Next: < b > Cloudron Store< / b > < / button >
2016-05-06 13:06:12 +02:00
< / div >
2016-05-06 14:41:20 +02:00
< div class = "dialog" ng-show = "tutorialSteps[tutorialStep].title === 'appstore'" >
2016-05-06 13:06:12 +02:00
< h2 > Cloudron Store< / h2 >
2016-05-09 18:25:23 -07:00
< p > Install apps easily into any subdomain and control who can access it.< / p >
< p > Your apps stay updated, backed up and secure with no effort on your part.< / p >
2016-05-06 13:06:12 +02:00
< br / >
2016-05-06 14:41:20 +02:00
< button class = "btn btn-default pull-left" ng-click = "prevTutorialStep();" > Back< / button >
2016-05-06 21:32:34 +02:00
< button class = "btn btn-success pull-right" ng-click = "nextTutorialStep();" > Last: < b > Users and Groups< / b > < / button >
2016-05-06 13:06:12 +02:00
< / div >
2016-05-06 14:41:20 +02:00
< div class = "dialog" ng-show = "tutorialSteps[tutorialStep].title === 'users'" >
2016-05-06 13:06:12 +02:00
< h2 > Users and Groups< / h2 >
2016-05-09 18:25:23 -07:00
< p > The Cloudron comes with built-in user and group managment< / p >
< p > Remember, you can use the same credentials to login to all your apps.< / p >
2016-05-06 13:06:12 +02:00
< br / >
2016-05-06 14:41:20 +02:00
< button class = "btn btn-default pull-left" ng-click = "prevTutorialStep();" > Back< / button >
< button class = "btn btn-success pull-right" ng-click = "nextTutorialStep();" > Start using apps and invite users< / button >
2016-05-06 13:06:12 +02:00
< / div >
< / div >
2015-07-20 00:09:47 -07:00
<!-- Modal update -->
< div class = "modal fade" id = "updateModal" tabindex = "-1" role = "dialog" aria-labelledby = "updateModalLabel" aria-hidden = "true" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< button type = "button" class = "close" data-dismiss = "modal" aria-hidden = "true" > × < / button >
< h4 class = "modal-title" id = "updateModalLabel" > Really update the Cloudron?< / h4 >
< / div >
< div class = "modal-body" >
< div ng-hide = "installedApps | readyToUpdate" class = "text-danger" >
< b >
2016-03-23 12:00:30 -07:00
The apps below are blocking the update, because they have pending actions:
2015-07-20 00:09:47 -07:00
< ul >
< li ng-repeat = "app in installedApps | inProgressApps" > {{app.location}}< / li >
< / ul >
2016-03-23 12:00:30 -07:00
Please wait for the app actions to finish.
2015-07-20 00:09:47 -07:00
< / b >
< br / >
< br / >
< / div >
2015-09-10 14:32:56 +02:00
< div ng-show = "installedApps | readyToUpdate" >
< b ng-show = "config.update.box.upgrade" class = "text-danger" >
2015-10-08 16:31:44 -07:00
This update upgrades the base system and will cause some application downtime.< br / >
2015-09-10 14:32:56 +02:00
< / b >
< p > New version: < b > {{config.update.box.version}}< / b > < / p >
< p > Recent Changes:< / p >
< ul >
< li ng-repeat = "change in config.update.box.changelog" > {{change}}< / li >
< / ul >
< br / >
2016-06-20 14:52:50 +02:00
< div ng-hide = "config.provider !== 'caas' && config.update.box.upgrade" >
< fieldset >
< form name = "update_form" role = "form" ng-submit = "doUpdate()" autocomplete = "off" >
< div class = "form-group" ng-class = "{ 'has-error': (update_form.password.$dirty && update_form.password.$invalid) || (!update_form.password.$dirty && update.error.password) }" >
< label class = "control-label" for = "inputUpdatePassword" > Give your password to verify that you are performing that action< / label >
< div class = "control-label" ng-show = "(update_form.password.$dirty && update_form.password.$invalid) || (!update_form.password.$dirty && update.error.password)" >
< small ng-show = " update_form.password.$dirty && update_form.password.$invalid" > Password required< / small >
< small ng-show = "!update_form.password.$dirty && update.error.password" > Wrong password< / small >
< / div >
< input type = "password" class = "form-control" ng-model = "update.password" id = "inputUpdatePassword" name = "password" placeholder = "Password" required autofocus >
2015-09-10 14:32:56 +02:00
< / div >
2016-06-20 14:52:50 +02:00
< input class = "ng-hide" type = "submit" ng-disabled = "update_form.$invalid || update.busy" / >
< / form >
< / fieldset >
< / div >
< div ng-show = "config.provider !== 'caas' && config.update.box.upgrade" >
< b > Please use the Cloudron's cli tool to perform the upgrade.< / b >
< / div >
2015-09-10 14:32:56 +02:00
< / div >
2015-07-20 00:09:47 -07:00
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Close< / button >
2016-06-20 14:52:50 +02:00
< button type = "button" class = "btn btn-danger" ng-click = "doUpdate()" ng-disabled = "update_form.$invalid || update.busy" ng-show = "(installedApps | readyToUpdate) && !(config.provider !== 'caas' && config.update.box.upgrade)" > < i class = "fa fa-spinner fa-pulse" ng-show = "update.busy" > < / i > Update< / button >
2015-07-20 00:09:47 -07:00
< / div >
< / div >
< / div >
< / div >
2016-04-18 17:12:47 +02:00
2015-07-20 00:09:47 -07:00
< div class = "animateMe ng-hide" ng-show = "initialized" >
<!-- Navigation -->
< nav class = "navbar navbar-default navbar-static-top shadow" role = "navigation" style = "margin-bottom: 0" >
< div class = "container-fluid" >
< div class = "navbar-header" >
< button type = "button" class = "navbar-toggle" data-toggle = "collapse" data-target = ".navbar-collapse" >
< span class = "sr-only" > Toggle navigation< / span >
< span class = "icon-bar" > < / span >
< span class = "icon-bar" > < / span >
< span class = "icon-bar" > < / span >
< / button >
2016-01-20 16:55:41 +01:00
< a class = "navbar-brand navbar-brand-icon" href = "#/" > < img ng-src = "{{ client.avatar }}" width = "40" height = "40" / > < / a >
2016-06-02 13:17:01 -07:00
< a class = "navbar-brand" href = "#/" > {{ config.cloudronName || 'Cloudron' }}< / a >
2015-07-20 00:09:47 -07:00
< / div >
<!-- /.navbar - header -->
< div class = "collapse navbar-collapse" >
< ul class = "nav navbar-nav navbar-right" >
< li ng-show = "config.update.box && user.admin" >
< a ng-href = "" ng-click = "showUpdateModal(update_form)" style = "cursor: pointer" >
< span class = "badge badge-success" > Update available< / span >
< / a >
< / li >
< li >
< a ng-class = "{ active: isActive('/apps')}" href = "#/apps" > < i class = "fa fa-cloud-download fa-fw" > < / i > My Apps< / a >
< / li >
< li >
< a ng-class = "{ active: isActive('/appstore')}" href = "#/appstore" > < i class = "fa fa-th-large fa-fw" > < / i > App Store< / a >
< / li >
< li ng-show = "user.admin" >
< a ng-class = "{ active: isActive('/users')}" href = "#/users" > < i class = "fa fa-users fa-fw" > < / i > Users< / a >
< / li >
< li class = "dropdown" >
< a href = "" class = "dropdown-toggle" data-toggle = "dropdown" role = "button" aria-expanded = "false" > < img ng-src = "{{user.gravatar}}" / > {{user.username}} < span class = "caret" > < / span > < / a >
< ul class = "dropdown-menu" role = "menu" >
< li > < a href = "#/account" > < i class = "fa fa-user fa-fw" > < / i > Account< / a > < / li >
2016-04-30 18:57:55 -07:00
< li ng-show = "user.admin" > < a href = "#/activity" > < i class = "fa fa-list-alt fa-fw" > < / i > Activity< / a > < / li >
2016-06-08 09:37:10 -07:00
< li ng-show = "user.admin" > < a href = "#/tokens" > < i class = "fa fa-key fa-fw" > < / i > API Access< / a > < / li >
2016-07-25 21:49:20 -07:00
< li ng-show = "user.admin" > < a href = "#/certs" > < i class = "fa fa-certificate fa-fw" > < / i > Domain & Certs< / a > < / li >
< li ng-show = "user.admin" > < a href = "#/graphs" > < i class = "fa fa-bar-chart fa-fw" > < / i > Graphs< / a > < / li >
2015-07-20 00:09:47 -07:00
< li ng-show = "user.admin" > < a href = "#/settings" > < i class = "fa fa-wrench fa-fw" > < / i > Settings< / a > < / li >
< li class = "divider" > < / li >
2016-07-02 22:22:25 -05:00
< li > < a href = "#/support" > < i class = "fa fa-comment fa-fw" > < / i > Support< / a > < / li >
< li class = "divider" > < / li >
2015-07-20 00:09:47 -07:00
< li > < a href = "" ng-click = "logout($event)" > < i class = "fa fa-sign-out fa-fw" > < / i > Logout< / a > < / li >
< / ul >
< / li >
< / ul >
< / div >
< / div >
< / nav >
< div class = "page-wrapper" >
< div ng-view id = "ng-view" > < / div >
< / div >
< / div >
2016-06-13 16:51:28 +02:00
<!-- <div class="upgrade hide">
2016-04-08 13:57:19 +02:00
< div class = "content" >
< h4 > Your Cloudron trial ends soon< / h4 >
2016-04-08 17:01:07 +02:00
< p > To keep your Cloudron, just < a href = "https://cloudron.io/console.html#/billing" target = "_blank" > setup a payment method at cloudron.io< / a > or < a href = "mailto: support@cloudron.io" > send us an email< / a > .< / p >
2016-04-08 13:57:19 +02:00
< / div >
2016-04-08 17:01:07 +02:00
< div class = "trigger" > Want to keep your Cloudron?< / div >
2016-06-13 16:51:28 +02:00
< / div > -->
2016-04-08 13:57:19 +02:00
2015-07-20 00:09:47 -07:00
<!-- Footer -->
< footer class = "text-center" >
2016-02-04 18:22:53 -08:00
< span class = "text-muted" > Copyright © < a href = "https://cloudron.io" target = "_blank" > Cloudron< / a > 2014-16< / span >
2015-07-20 00:09:47 -07:00
< span class = "text-muted" > {{config.version}}< / span >
< / footer >
< / body >
< / html >