2018-01-22 13:01:38 -08: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" / >
<!-- this gets changed once we get the config (because angular has not loaded yet, we see template string for a flash) -->
2020-03-28 22:34:56 -07:00
< title > ‎ < / title >
2018-01-22 13:01:38 -08:00
2018-04-10 14:49:49 +02:00
< link id = "favicon" type = "image/png" rel = "icon" href = "/api/v1/cloudron/avatar" >
2018-07-30 22:05:20 +02:00
< link rel = "apple-touch-icon" href = "/api/v1/cloudron/avatar" >
< link rel = "icon" href = "/api/v1/cloudron/avatar" >
2018-01-22 13:01:38 -08:00
<!-- CSS -->
2018-04-10 14:49:49 +02:00
< link type = "text/css" rel = "stylesheet" href = "/3rdparty/slick.css?<%= revision %>" / >
2019-01-07 17:23:26 +01:00
< link type = "text/css" rel = "stylesheet" href = "/3rdparty/angular-ui-notification.css?<%= revision %>" / >
2018-04-10 14:49:49 +02:00
< link type = "text/css" rel = "stylesheet" href = "/3rdparty/bootstrap-slider/bootstrap-slider.min.css?<%= revision %>" / >
< link type = "text/css" rel = "stylesheet" href = "/theme.css?<%= revision %>" >
2018-01-22 13:01:38 -08:00
2020-07-31 09:17:54 +02:00
<!-- Fontawesome -->
< link type = "text/css" rel = "stylesheet" href = "/3rdparty/fontawesome/css/all.css?<%= revision %>" / >
2018-01-22 13:01:38 -08:00
<!-- jQuery -->
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/jquery.min.js?<%= revision %>" > < / script >
2018-01-22 13:01:38 -08:00
2020-06-03 22:59:17 +02:00
<!-- async -->
< script type = "text/javascript" src = "/3rdparty/js/async-3.2.0.min.js?<%= revision %>" > < / script >
2018-01-22 13:01:38 -08:00
<!-- toBlob() polyfill -->
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/canvas-to-blob.min.js?<%= revision %>" > < / script >
2018-01-22 13:01:38 -08:00
<!-- Bootstrap Core JavaScript -->
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/bootstrap.min.js?<%= revision %>" > < / script >
2018-01-22 13:01:38 -08:00
<!-- Slick carousel -->
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/slick.js?<%= revision %>" > < / script >
2018-01-22 13:01:38 -08:00
<!-- Angularjs scripts -->
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/angular.min.js?<%= revision %>" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-loader.min.js?<%= revision %>" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-route.min.js?<%= revision %>" > < / script >
2020-10-23 19:10:16 +02:00
< script type = "text/javascript" src = "/3rdparty/js/angular-cookies.min.js?<%= revision %>" > < / script >
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/angular-animate.min.js?<%= revision %>" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-base64.min.js?<%= revision %>" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-md5.min.js?<%= revision %>" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-sanitize.min.js?<%= revision %>" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-slick.min.js?<%= revision %>" > < / script >
2019-01-07 17:23:26 +01:00
< script type = "text/javascript" src = "/3rdparty/js/angular-ui-notification.js?<%= revision %>" > < / script >
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/angular-fittext.min.js?<%= revision %>" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/autofill-event.js?<%= revision %>" > < / script >
2018-01-22 13:01:38 -08:00
<!-- Angular directives for tldjs -->
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/tld.js?<%= revision %>" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-tld.js?<%= revision %>" > < / script >
2018-01-22 13:01:38 -08:00
<!-- Angular directives for bootstrap https://angular - ui.github.io/bootstrap/ -->
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/ui-bootstrap-tpls-1.3.3.min.js?<%= revision %>" > < / script >
2018-01-22 13:01:38 -08:00
2020-10-19 14:37:19 +02:00
<!-- Angular translate https://angular - translate.github.io/ -->
< script type = "text/javascript" src = "/3rdparty/js/angular-translate.min.js?<%= revision %>" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-translate-loader-static-files.min.js?<%= revision %>" > < / script >
2020-10-23 19:10:16 +02:00
< script type = "text/javascript" src = "/3rdparty/js/angular-translate-storage-cookie.min.js?<%= revision %>" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-translate-storage-local.min.js?<%= revision %>" > < / script >
2020-10-19 14:37:19 +02:00
2020-09-02 17:57:01 +02:00
<!-- Chart.js https://www.chartjs.org/ -->
< link type = "text/css" rel = "stylesheet" href = "/3rdparty/Chart/Chart.min.css?<%= revision %>" / >
< script type = "text/javascript" src = "/3rdparty/Chart/Chart.min.js?<%= revision %>" > < / script >
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/ansi_up.js?<%= revision %>" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/clipboard.min.js?<%= revision %>" > < / script >
2018-01-22 13:01:38 -08:00
<!-- Showdown (markdown converter) -->
2020-08-08 21:58:12 -07:00
< script type = "text/javascript" src = "/3rdparty/js/showdown-1.9.1.min.js?<%= revision %>" > < / script >
2018-01-22 13:01:38 -08:00
<!-- Bootstrap slider -->
2018-04-06 00:11:08 +02:00
< script type = "text/javascript" src = "/3rdparty/bootstrap-slider/bootstrap-slider.min.js?<%= revision %>" > < / script >
< script type = "text/javascript" src = "/3rdparty/bootstrap-slider/slider.js?<%= revision %>" > < / script >
2018-01-22 13:01:38 -08:00
2018-04-10 14:49:49 +02:00
<!-- Anugular Multiselect https://github.com/sebastianha/angular - bootstrap - multiselect -->
< script type = "text/javascript" src = "/3rdparty/js/angular-bootstrap-multiselect.js?<%= revision %>" > < / script >
2018-01-22 13:01:38 -08:00
<!-- colors -->
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/colors.js?<%= revision %>" > < / script >
2018-01-22 13:01:38 -08:00
<!-- moment -->
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/moment.min.js?<%= revision %>" > < / script >
2020-01-08 13:01:31 +01:00
<!-- timezone list -->
2020-01-08 17:22:07 +01:00
< script type = "text/javascript" src = "/js/timezones.js?<%= revision %>" > < / script >
2018-01-22 13:01:38 -08:00
<!-- Main Application -->
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/js/index.js?<%= revision %>" > < / script >
2018-01-22 13:01:38 -08:00
< / head >
< body >
< script type = "text/ng-template" id = "notification.html" >
< div class = "ui-notification" >
< h3 ng-show = "title" ng-bind-html = "title" > < / h3 >
< div class = "message" >
< a href = "{{action}}" ng-show = "action" ng-bind-html = "message" > < / a >
< span ng-hide = "action" ng-bind-html = "message" > < / span >
< / div >
< / div >
< / script >
2020-10-28 12:04:51 +01:00
< a class = "offline-banner animateMe" ng-show = "client.offline" ng-cloak href = "https://docs.cloudron.io/troubleshooting/" target = "_blank" > < i class = "fa fa-circle-notch fa-spin" > < / i > {{ 'main.offline' | tr }}< / a >
2018-12-11 18:17:53 +01:00
2020-11-05 16:45:45 +01:00
<!-- Modal reboot server -->
< div class = "modal fade" id = "rebootModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< h4 class = "modal-title" > Really reboot server?< / h4 >
< / div >
< div class = "modal-body" >
< p class = "text-bold" > Rebooting the server will cause temporary downtime for all apps installed on this Cloudron!< / p >
< p > Use this to apply security updates or if you experience unexpected behaviour. All apps and services currently running on this Cloudron will automatically start when the reboot is complete.< / p >
< / 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-click = "reboot.submit()" ng-disabled = "reboot.busy" > < i class = "fa fa-circle-notch fa-spin" ng-show = "reboot.busy" > < / i > Reboot now< / button >
< / div >
< / div >
< / div >
< / div >
2018-01-22 13:01:38 -08:00
< div class = "animateMe ng-hide layout-root" 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 >
< a class = "navbar-brand navbar-brand-icon" href = "#/" > < img ng-src = "{{ client.avatar }}" width = "40" height = "40" / > < / a >
2020-03-06 17:57:25 -08:00
< a class = "navbar-brand" href = "#/" > {{ config.cloudronName || 'Cloudron' }}< / a >
2018-01-22 13:01:38 -08:00
< / div >
<!-- /.navbar - header -->
< div class = "collapse navbar-collapse" >
2020-02-14 14:16:04 +01:00
< ul class = "nav navbar-nav navbar-right" ng-hide = "hideNavBarActions" >
2020-07-30 13:19:03 +02:00
< li ng-show = "user.isAtLeastOwner && (subscription.plan.id === 'free' || subscription.plan.id === 'expired')" >
< a ng-click = "openSubscriptionSetup()" style = "cursor: pointer" >
< span class = "badge badge-success" > {{ subscription.plan.id === 'free' ? 'Setup' : 'Reactivate' }} Subscription< / span >
< / a >
< / li >
< li >
2020-10-28 16:17:14 +01:00
< a ng-class = "{ active: isActive('/apps')}" href = "#/apps" > < i class = "fa fa-th fa-fw" > < / i > {{ 'apps.title' | tr }}< / a >
2020-07-30 13:19:03 +02:00
< / li >
< li ng-show = "user.isAtLeastAdmin" >
2020-10-28 16:17:14 +01:00
< a ng-class = "{ active: isActive('/appstore')}" href = "#/appstore" > < i class = "fa fa-cloud-download-alt fa-fw" > < / i > {{ 'appstore.title' | tr }}< / a >
2020-07-30 13:19:03 +02:00
< / li >
< li ng-show = "user.isAtLeastUserManager" >
2020-10-28 16:17:14 +01:00
< a ng-class = "{ active: isActive('/users')}" href = "#/users" > < i class = "fa fa-users fa-fw" > < / i > {{ 'users.title' | tr }}< / a >
2020-07-30 13:19:03 +02:00
< / li >
< li >
< a href = "#/notifications" >
< i class = "fas fa-bell" ng-show = "notifications.length" > < / i >
2020-07-31 09:25:40 +02:00
< i class = "far fa-bell" ng-hide = "notifications.length" > < / i >
2020-07-30 13:19:03 +02:00
< span class = "badge badge-danger" ng-show = "notifications.length" > {{ notifications.length }}< / span >
< / a >
< / li >
< li class = "dropdown" >
< a href = "" class = "dropdown-toggle" data-toggle = "dropdown" role = "button" aria-expanded = "false" > < img ng-src = "{{user.avatarUrl}}" style = "width: 24px; height: 24px;" / > {{user.username}} < span class = "caret" > < / span > < / a >
< ul class = "dropdown-menu" role = "menu" >
2020-10-28 16:17:14 +01:00
< li > < a href = "#/profile" > < i class = "fa fa-user fa-fw" > < / i > {{ 'profile.title' | tr }}< / a > < / li >
2020-07-30 13:19:03 +02:00
< li ng-show = "user.isAtLeastAdmin" class = "divider" > < / li >
2020-10-28 16:17:14 +01:00
< li ng-show = "user.isAtLeastAdmin" > < a href = "#/backups" > < i class = "fa fa-archive fa-fw" > < / i > {{ 'backups.title' | tr }}< / a > < / li >
< li ng-show = "user.role === 'owner'" > < a href = "#/branding" > < i class = "fa fa-passport fa-fw" > < / i > {{ 'branding.title' | tr }}< / a > < / li >
< li ng-show = "user.isAtLeastAdmin" > < a href = "#/domains" > < i class = "fa fa-globe fa-fw" > < / i > {{ 'domains.title' | tr }}< / a > < / li >
< li ng-show = "user.isAtLeastAdmin" > < a href = "#/email" > < i class = "fa fa-envelope fa-fw" > < / i > {{ 'emails.title' | tr }}< / a > < / li >
< li ng-show = "user.isAtLeastAdmin" > < a href = "#/activity" > < i class = "fa fa-list-alt fa-fw" > < / i > {{ 'eventlog.title' | tr }}< / a > < / li >
< li ng-show = "user.isAtLeastAdmin" > < a href = "#/network" > < i class = "fas fa-network-wired fa-fw" > < / i > {{ 'network.title' | tr }}< / a > < / li >
< li ng-show = "user.isAtLeastAdmin" > < a href = "#/services" > < i class = "fa fa-cogs fa-fw" > < / i > {{ 'services.title' | tr }}< / a > < / li >
< li ng-show = "user.isAtLeastAdmin" > < a href = "#/settings" > < i class = "fa fa-wrench fa-fw" > < / i > {{ 'settings.title' | tr }}< / a > < / li >
2020-10-28 16:14:32 -07:00
< li ng-show = "user.isAtLeastAdmin" > < a href = "#/volumes" > < i class = "fa fa-hdd fa-fw" > < / i > Volumes< / a > < / li >
2020-09-29 15:24:23 +02:00
< li ng-show = "user.isAtLeastAdmin" class = "divider" > < / li >
2020-10-28 16:17:14 +01:00
< li ng-show = "user.isAtLeastAdmin" > < a href = "#/support" > < i class = "fa fa-comment fa-fw" > < / i > {{ 'support.title' | tr }}< / a > < / li >
< li ng-show = "user.isAtLeastAdmin" > < a href = "#/system" > < i class = "fa fa-chart-area fa-fw" > < / i > {{ 'system.title' | tr }}< / a > < / li >
2020-07-30 13:19:03 +02:00
< li class = "divider" > < / li >
2020-10-28 16:17:14 +01:00
< li > < a href = "" ng-click = "logout($event)" > < i class = "fa fa-sign-out-alt fa-fw" > < / i > {{ 'main.logout' | tr }}< / a > < / li >
2020-07-30 13:19:03 +02:00
< / ul >
< / li >
< / ul >
2018-01-22 13:01:38 -08:00
< / div >
< / div >
< / nav >
< div ng-view id = "ng-view" class = "layout-content" > < / div >
< footer class = "text-center ng-cloak" >
2020-03-06 17:57:25 -08:00
< span class = "text-muted" ng-bind-html = "config.footer | markdown2html" > < / span >
2018-01-22 13:01:38 -08:00
< / footer >
< / div >
< / body >
< / html >