2023-08-29 14:31:46 +00:00
<! DOCTYPE html >
2023-08-29 18:25:42 +00:00
< html data - theme = " coollabs " lang = " { { str_replace('_', '-', app()->getLocale()) }} " >
2023-11-21 11:07:06 +00:00
2023-08-29 14:31:46 +00:00
< head >
< meta charset = " utf-8 " >
< meta name = " viewport " content = " width=device-width, initial-scale=1 " >
< link rel = " preconnect " href = " https://api.fonts.coollabs.io " crossorigin >
< link href = " https://api.fonts.coollabs.io/css2?family=Inter&display=swap " rel = " stylesheet " >
2023-10-17 11:28:33 +00:00
< meta name = " robots " content = " noindex " >
2023-08-29 14:31:46 +00:00
< title > Coolify </ title >
@ env ( 'local' )
< link rel = " icon " href = " { { asset('favicon-dev.png') }} " type = " image/x-icon " />
@ else
< link rel = " icon " href = " { { asset('coolify-transparent.png') }} " type = " image/x-icon " />
@ endenv
< meta name = " csrf-token " content = " { { csrf_token() }} " >
@ vite ([ 'resources/js/app.js' , 'resources/css/app.css' ])
< style >
[ x - cloak ] {
display : none ! important ;
}
</ style >
2023-09-11 14:41:43 +00:00
@ if ( config ( 'app.name' ) == 'Coolify Cloud' )
< script defer data - domain = " app.coolify.io " src = " https://analytics.coollabs.io/js/plausible.js " ></ script >
@ endif
2023-12-06 09:32:49 +00:00
@ auth
2023-12-06 11:28:05 +00:00
< script src = " https://cdnjs.cloudflare.com/ajax/libs/laravel-echo/1.15.3/echo.iife.min.js "
integrity = " sha512-aPAh2oRUr3ALz2MwVWkd6lmdgBQC0wSr0R++zclNjXZreT/JrwDPZQwA/p6R3wOCTcXKIHgA9pQGEQBWQmdLaA== "
crossorigin = " anonymous " referrerpolicy = " no-referrer " ></ script >
< script src = " https://cdnjs.cloudflare.com/ajax/libs/pusher/8.3.0/pusher.min.js "
integrity = " sha512-tXL5mrkSoP49uQf2jO0LbvzMyFgki//znmq0wYXGq94gVF6TU0QlrSbwGuPpKTeN1mIjReeqKZ4/NJPjHN1d2Q== "
crossorigin = " anonymous " referrerpolicy = " no-referrer " ></ script >
2023-12-06 09:32:49 +00:00
@ endauth
2023-08-29 14:31:46 +00:00
</ head >
@ section ( 'body' )
2023-11-21 11:07:06 +00:00
2023-08-29 14:31:46 +00:00
< body >
2023-12-07 18:06:32 +00:00
@ livewire ( 'wire-elements-modal' )
2023-09-12 13:06:07 +00:00
< dialog id = " help " class = " modal " >
< livewire : help />
< form method = " dialog " class = " modal-backdrop " >
< button > close </ button >
</ form >
</ dialog >
2023-08-31 19:56:53 +00:00
< x - toaster - hub />
< x - version class = " fixed left-2 bottom-1 " />
2023-12-05 12:56:11 +00:00
2023-12-07 18:06:32 +00:00
< script data - navigate - once >
2023-12-06 09:25:23 +00:00
@ auth
2023-12-05 12:56:11 +00:00
window . Pusher = Pusher ;
window . Echo = new Echo ({
broadcaster : 'pusher' ,
cluster : " { { env('PUSHER_HOST') }} " || window . location . hostname ,
2023-12-05 13:18:44 +00:00
key : " { { env('PUSHER_APP_KEY') }} " || 'coolify' ,
2023-12-05 12:56:11 +00:00
wsHost : " { { env('PUSHER_HOST') }} " || window . location . hostname ,
wsPort : " { { env('PUSHER_PORT') }} " || 6001 ,
wssPort : " { { env('PUSHER_PORT') }} " || 6001 ,
forceTLS : false ,
encrypted : true ,
2023-12-06 11:57:50 +00:00
enableStats : false ,
2023-12-05 12:56:11 +00:00
enableLogging : true ,
enabledTransports : [ 'ws' , 'wss' ],
});
2023-12-06 17:10:49 +00:00
if ( " { { auth()->user()->id }} " == 0 ) {
let checkPusherInterval = null ;
let checkNumber = 0 ;
2023-12-07 18:06:32 +00:00
let errorMessage =
" Coolify could not connect to the new realtime service introduced in beta.154.<br>Please check the related <a href='https://coolify.io/docs/cloudflare-tunnels' target='_blank'>documentation</a> or get help on <a href='https://coollabs.io/discord' target='_blank'>Discord</a>. " ;
2023-12-06 17:10:49 +00:00
checkPusherInterval = setInterval (() => {
if ( window . Echo ) {
if ( window . Echo . connector . pusher . connection . state !== 'connected' ) {
checkNumber ++ ;
if ( checkNumber > 5 ) {
clearInterval ( checkPusherInterval );
Livewire . emit ( 'error' , errorMessage );
}
} else {
2023-12-07 18:06:32 +00:00
console . log ( 'Coolify is now connected to the new realtime service introduced in beta.154.' );
2023-12-06 17:10:49 +00:00
clearInterval ( checkPusherInterval );
}
} else {
clearInterval ( checkPusherInterval );
Livewire . emit ( 'error' , errorMessage );
}
}, 2000 );
}
2023-12-06 09:25:23 +00:00
@ endauth
2023-08-31 19:56:53 +00:00
let checkHealthInterval = null ;
let checkIfIamDeadInterval = null ;
2023-08-29 14:31:46 +00:00
2023-08-31 19:56:53 +00:00
function changePasswordFieldType ( event ) {
let element = event . target
for ( let i = 0 ; i < 10 ; i ++ ) {
if ( element . className === " relative " ) {
break ;
2023-08-29 14:31:46 +00:00
}
2023-08-31 19:56:53 +00:00
element = element . parentElement ;
}
element = element . children [ 1 ];
if ( element . nodeName === 'INPUT' ) {
if ( element . type === 'password' ) {
element . type = 'text' ;
} else {
element . type = 'password' ;
2023-08-29 14:31:46 +00:00
}
}
2023-08-31 19:56:53 +00:00
}
2023-08-29 14:31:46 +00:00
2023-09-15 13:50:37 +00:00
function revive () {
if ( checkHealthInterval ) return true ;
console . log ( 'Checking server\'s health...' )
checkHealthInterval = setInterval (() => {
fetch ( '/api/health' )
. then ( response => {
if ( response . ok ) {
Toaster . success ( 'Coolify is back online. Reloading...' )
if ( checkHealthInterval ) clearInterval ( checkHealthInterval );
setTimeout (() => {
window . location . reload ();
}, 5000 )
} else {
console . log ( 'Waiting for server to come back from dead...' );
}
})
}, 2000 );
}
function upgrade () {
if ( checkIfIamDeadInterval ) return true ;
console . log ( 'Update initiated.' )
checkIfIamDeadInterval = setInterval (() => {
fetch ( '/api/health' )
. then ( response => {
if ( response . ok ) {
console . log ( 'It\'s alive. Waiting for server to be dead...' );
} else {
Toaster . success ( 'Update done, restarting Coolify!' )
console . log ( 'It\'s dead. Reviving... Standby... Bzz... Bzz...' )
if ( checkIfIamDeadInterval ) clearInterval ( checkIfIamDeadInterval );
revive ();
}
})
}, 2000 );
}
2023-09-25 07:34:32 +00:00
2023-08-31 19:56:53 +00:00
function copyToClipboard ( text ) {
2023-12-07 18:06:32 +00:00
navigator ? . clipboard ? . writeText ( text ) && window . Livewire . emit ( 'success' , 'Copied to clipboard.' );
2023-08-31 19:56:53 +00:00
}
2023-12-07 18:06:32 +00:00
document . addEventListener ( 'livewire:init' , () => {
window . Livewire . on ( 'reloadWindow' , ( timeout ) => {
if ( timeout ) {
setTimeout (() => {
window . location . reload ();
}, timeout );
return ;
} else {
2023-08-29 14:31:46 +00:00
window . location . reload ();
2023-12-07 18:06:32 +00:00
}
})
window . Livewire . on ( 'info' , ( message ) => {
if ( message ) Toaster . info ( message )
})
window . Livewire . on ( 'error' , ( message ) => {
if ( message ) Toaster . error ( message )
})
window . Livewire . on ( 'warning' , ( message ) => {
if ( message ) Toaster . warning ( message )
})
window . Livewire . on ( 'success' , ( message ) => {
if ( message ) Toaster . success ( message )
})
window . Livewire . on ( 'installDocker' , () => {
installDocker . showModal ();
})
});
2023-08-31 19:56:53 +00:00
</ script >
2023-08-29 14:31:46 +00:00
</ body >
@ show
</ html >