first commit
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
use CodeIgniter\CLI\CLI;
|
||||
|
||||
CLI::error('ERROR: ' . $code);
|
||||
CLI::write($message);
|
||||
CLI::newLine();
|
||||
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
use CodeIgniter\CLI\CLI;
|
||||
|
||||
// The main Exception
|
||||
CLI::write('[' . $exception::class . ']', 'light_gray', 'red');
|
||||
CLI::write($message);
|
||||
CLI::write('at ' . CLI::color(clean_path($exception->getFile()) . ':' . $exception->getLine(), 'green'));
|
||||
CLI::newLine();
|
||||
|
||||
$last = $exception;
|
||||
|
||||
while ($prevException = $last->getPrevious()) {
|
||||
$last = $prevException;
|
||||
|
||||
CLI::write(' Caused by:');
|
||||
CLI::write(' [' . $prevException::class . ']', 'red');
|
||||
CLI::write(' ' . $prevException->getMessage());
|
||||
CLI::write(' at ' . CLI::color(clean_path($prevException->getFile()) . ':' . $prevException->getLine(), 'green'));
|
||||
CLI::newLine();
|
||||
}
|
||||
|
||||
// The backtrace
|
||||
if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE) {
|
||||
$backtraces = $last->getTrace();
|
||||
|
||||
if ($backtraces) {
|
||||
CLI::write('Backtrace:', 'green');
|
||||
}
|
||||
|
||||
foreach ($backtraces as $i => $error) {
|
||||
$padFile = ' '; // 4 spaces
|
||||
$padClass = ' '; // 7 spaces
|
||||
$c = str_pad($i + 1, 3, ' ', STR_PAD_LEFT);
|
||||
|
||||
if (isset($error['file'])) {
|
||||
$filepath = clean_path($error['file']) . ':' . $error['line'];
|
||||
|
||||
CLI::write($c . $padFile . CLI::color($filepath, 'yellow'));
|
||||
} else {
|
||||
CLI::write($c . $padFile . CLI::color('[internal function]', 'yellow'));
|
||||
}
|
||||
|
||||
$function = '';
|
||||
|
||||
if (isset($error['class'])) {
|
||||
$type = ($error['type'] === '->') ? '()' . $error['type'] : $error['type'];
|
||||
$function .= $padClass . $error['class'] . $type . $error['function'];
|
||||
} elseif (! isset($error['class']) && isset($error['function'])) {
|
||||
$function .= $padClass . $error['function'];
|
||||
}
|
||||
|
||||
$args = implode(', ', array_map(static fn ($value) => match (true) {
|
||||
is_object($value) => 'Object(' . $value::class . ')',
|
||||
is_array($value) => count($value) ? '[...]' : '[]',
|
||||
$value === null => 'null', // return the lowercased version
|
||||
default => var_export($value, true),
|
||||
}, array_values($error['args'] ?? [])));
|
||||
|
||||
$function .= '(' . $args . ')';
|
||||
|
||||
CLI::write($function);
|
||||
CLI::newLine();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
// On the CLI, we still want errors in productions
|
||||
// so just use the exception template.
|
||||
include __DIR__ . '/error_exception.php';
|
||||
@@ -0,0 +1,190 @@
|
||||
:root {
|
||||
--main-bg-color: #fff;
|
||||
--main-text-color: #555;
|
||||
--dark-text-color: #222;
|
||||
--light-text-color: #c7c7c7;
|
||||
--brand-primary-color: #E06E3F;
|
||||
--light-bg-color: #ededee;
|
||||
--dark-bg-color: #404040;
|
||||
}
|
||||
|
||||
body {
|
||||
height: 100%;
|
||||
background: var(--main-bg-color);
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
|
||||
color: var(--main-text-color);
|
||||
font-weight: 300;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
h1 {
|
||||
font-weight: lighter;
|
||||
font-size: 3rem;
|
||||
color: var(--dark-text-color);
|
||||
margin: 0;
|
||||
}
|
||||
h1.headline {
|
||||
margin-top: 20%;
|
||||
font-size: 5rem;
|
||||
}
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
p.lead {
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
.container {
|
||||
max-width: 75rem;
|
||||
margin: 0 auto;
|
||||
padding: 1rem;
|
||||
}
|
||||
.header {
|
||||
background: var(--light-bg-color);
|
||||
color: var(--dark-text-color);
|
||||
}
|
||||
.header .container {
|
||||
padding: 1rem;
|
||||
}
|
||||
.header h1 {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
.header p {
|
||||
font-size: 1.2rem;
|
||||
margin: 0;
|
||||
line-height: 2.5;
|
||||
}
|
||||
.header a {
|
||||
color: var(--brand-primary-color);
|
||||
margin-left: 2rem;
|
||||
display: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
.header:hover a {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.environment {
|
||||
background: var(--dark-bg-color);
|
||||
color: var(--light-text-color);
|
||||
text-align: center;
|
||||
padding: 0.2rem;
|
||||
}
|
||||
|
||||
.source {
|
||||
background: #343434;
|
||||
color: var(--light-text-color);
|
||||
padding: 0.5em 1em;
|
||||
border-radius: 5px;
|
||||
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||
font-size: 0.85rem;
|
||||
margin: 0;
|
||||
overflow-x: scroll;
|
||||
}
|
||||
.source span.line {
|
||||
line-height: 1.4;
|
||||
}
|
||||
.source span.line .number {
|
||||
color: #666;
|
||||
}
|
||||
.source .line .highlight {
|
||||
display: block;
|
||||
background: var(--dark-text-color);
|
||||
color: var(--light-text-color);
|
||||
}
|
||||
.source span.highlight .number {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.tabs {
|
||||
list-style: none;
|
||||
list-style-position: inside;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
margin-bottom: -1px;
|
||||
}
|
||||
.tabs li {
|
||||
display: inline;
|
||||
}
|
||||
.tabs a:link,
|
||||
.tabs a:visited {
|
||||
padding: 0 1rem;
|
||||
line-height: 2.7;
|
||||
text-decoration: none;
|
||||
color: var(--dark-text-color);
|
||||
background: var(--light-bg-color);
|
||||
border: 1px solid rgba(0,0,0,0.15);
|
||||
border-bottom: 0;
|
||||
border-top-left-radius: 5px;
|
||||
border-top-right-radius: 5px;
|
||||
display: inline-block;
|
||||
}
|
||||
.tabs a:hover {
|
||||
background: var(--light-bg-color);
|
||||
border-color: rgba(0,0,0,0.15);
|
||||
}
|
||||
.tabs a.active {
|
||||
background: var(--main-bg-color);
|
||||
color: var(--main-text-color);
|
||||
}
|
||||
.tab-content {
|
||||
background: var(--main-bg-color);
|
||||
border: 1px solid rgba(0,0,0,0.15);
|
||||
}
|
||||
.content {
|
||||
padding: 1rem;
|
||||
}
|
||||
.hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.alert {
|
||||
margin-top: 2rem;
|
||||
display: block;
|
||||
text-align: center;
|
||||
line-height: 3.0;
|
||||
background: #d9edf7;
|
||||
border: 1px solid #bcdff1;
|
||||
border-radius: 5px;
|
||||
color: #31708f;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
th {
|
||||
text-align: left;
|
||||
border-bottom: 1px solid #e7e7e7;
|
||||
padding-bottom: 0.5rem;
|
||||
}
|
||||
td {
|
||||
padding: 0.2rem 0.5rem 0.2rem 0;
|
||||
}
|
||||
tr:hover td {
|
||||
background: #f1f1f1;
|
||||
}
|
||||
td pre {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.trace a {
|
||||
color: inherit;
|
||||
}
|
||||
.trace table {
|
||||
width: auto;
|
||||
}
|
||||
.trace tr td:first-child {
|
||||
min-width: 5em;
|
||||
font-weight: bold;
|
||||
}
|
||||
.trace td {
|
||||
background: var(--light-bg-color);
|
||||
padding: 0 1rem;
|
||||
}
|
||||
.trace td pre {
|
||||
margin: 0;
|
||||
}
|
||||
.args {
|
||||
display: none;
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
var tabLinks = new Array();
|
||||
var contentDivs = new Array();
|
||||
|
||||
function init()
|
||||
{
|
||||
// Grab the tab links and content divs from the page
|
||||
var tabListItems = document.getElementById('tabs').childNodes;
|
||||
console.log(tabListItems);
|
||||
for (var i = 0; i < tabListItems.length; i ++)
|
||||
{
|
||||
if (tabListItems[i].nodeName == "LI")
|
||||
{
|
||||
var tabLink = getFirstChildWithTagName(tabListItems[i], 'A');
|
||||
var id = getHash(tabLink.getAttribute('href'));
|
||||
tabLinks[id] = tabLink;
|
||||
contentDivs[id] = document.getElementById(id);
|
||||
}
|
||||
}
|
||||
|
||||
// Assign onclick events to the tab links, and
|
||||
// highlight the first tab
|
||||
var i = 0;
|
||||
|
||||
for (var id in tabLinks)
|
||||
{
|
||||
tabLinks[id].onclick = showTab;
|
||||
tabLinks[id].onfocus = function () {
|
||||
this.blur()
|
||||
};
|
||||
if (i == 0)
|
||||
{
|
||||
tabLinks[id].className = 'active';
|
||||
}
|
||||
i ++;
|
||||
}
|
||||
|
||||
// Hide all content divs except the first
|
||||
var i = 0;
|
||||
|
||||
for (var id in contentDivs)
|
||||
{
|
||||
if (i != 0)
|
||||
{
|
||||
console.log(contentDivs[id]);
|
||||
contentDivs[id].className = 'content hide';
|
||||
}
|
||||
i ++;
|
||||
}
|
||||
}
|
||||
|
||||
function showTab()
|
||||
{
|
||||
var selectedId = getHash(this.getAttribute('href'));
|
||||
|
||||
// Highlight the selected tab, and dim all others.
|
||||
// Also show the selected content div, and hide all others.
|
||||
for (var id in contentDivs)
|
||||
{
|
||||
if (id == selectedId)
|
||||
{
|
||||
tabLinks[id].className = 'active';
|
||||
contentDivs[id].className = 'content';
|
||||
}
|
||||
else
|
||||
{
|
||||
tabLinks[id].className = '';
|
||||
contentDivs[id].className = 'content hide';
|
||||
}
|
||||
}
|
||||
|
||||
// Stop the browser following the link
|
||||
return false;
|
||||
}
|
||||
|
||||
function getFirstChildWithTagName(element, tagName)
|
||||
{
|
||||
for (var i = 0; i < element.childNodes.length; i ++)
|
||||
{
|
||||
if (element.childNodes[i].nodeName == tagName)
|
||||
{
|
||||
return element.childNodes[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getHash(url)
|
||||
{
|
||||
var hashPos = url.lastIndexOf('#');
|
||||
return url.substring(hashPos + 1);
|
||||
}
|
||||
|
||||
function toggle(elem)
|
||||
{
|
||||
elem = document.getElementById(elem);
|
||||
|
||||
if (elem.style && elem.style['display'])
|
||||
{
|
||||
// Only works with the "style" attr
|
||||
var disp = elem.style['display'];
|
||||
}
|
||||
else if (elem.currentStyle)
|
||||
{
|
||||
// For MSIE, naturally
|
||||
var disp = elem.currentStyle['display'];
|
||||
}
|
||||
else if (window.getComputedStyle)
|
||||
{
|
||||
// For most other browsers
|
||||
var disp = document.defaultView.getComputedStyle(elem, null).getPropertyValue('display');
|
||||
}
|
||||
|
||||
// Toggle the state of the "display" style
|
||||
elem.style.display = disp == 'block' ? 'none' : 'block';
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title><?= lang('Errors.pageNotFound') ?></title>
|
||||
|
||||
<style>
|
||||
div.logo {
|
||||
height: 200px;
|
||||
width: 155px;
|
||||
display: inline-block;
|
||||
opacity: 0.08;
|
||||
position: absolute;
|
||||
top: 2rem;
|
||||
left: 50%;
|
||||
margin-left: -73px;
|
||||
}
|
||||
body {
|
||||
height: 100%;
|
||||
background: #fafafa;
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
color: #777;
|
||||
font-weight: 300;
|
||||
}
|
||||
h1 {
|
||||
font-weight: lighter;
|
||||
letter-spacing: normal;
|
||||
font-size: 3rem;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
color: #222;
|
||||
}
|
||||
.wrap {
|
||||
max-width: 1024px;
|
||||
margin: 5rem auto;
|
||||
padding: 2rem;
|
||||
background: #fff;
|
||||
text-align: center;
|
||||
border: 1px solid #efefef;
|
||||
border-radius: 0.5rem;
|
||||
position: relative;
|
||||
}
|
||||
pre {
|
||||
white-space: normal;
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
code {
|
||||
background: #fafafa;
|
||||
border: 1px solid #efefef;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 5px;
|
||||
display: block;
|
||||
}
|
||||
p {
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
.footer {
|
||||
margin-top: 2rem;
|
||||
border-top: 1px solid #efefef;
|
||||
padding: 1em 2em 0 2em;
|
||||
font-size: 85%;
|
||||
color: #999;
|
||||
}
|
||||
a:active,
|
||||
a:link,
|
||||
a:visited {
|
||||
color: #dd4814;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
<h1>404</h1>
|
||||
|
||||
<p>
|
||||
<?php if (ENVIRONMENT !== 'production') : ?>
|
||||
<?= nl2br(esc($message)) ?>
|
||||
<?php else : ?>
|
||||
<?= lang('Errors.sorryCannotFind') ?>
|
||||
<?php endif; ?>
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,430 @@
|
||||
<?php
|
||||
use CodeIgniter\HTTP\Header;
|
||||
use Config\Services;
|
||||
use CodeIgniter\CodeIgniter;
|
||||
|
||||
$errorId = uniqid('error', true);
|
||||
?>
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="robots" content="noindex">
|
||||
|
||||
<title><?= esc($title) ?></title>
|
||||
<style>
|
||||
<?= preg_replace('#[\r\n\t ]+#', ' ', file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'debug.css')) ?>
|
||||
</style>
|
||||
|
||||
<script>
|
||||
<?= file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'debug.js') ?>
|
||||
</script>
|
||||
</head>
|
||||
<body onload="init()">
|
||||
|
||||
<!-- Header -->
|
||||
<div class="header">
|
||||
<div class="environment">
|
||||
Displayed at <?= esc(date('H:i:sa')) ?> —
|
||||
PHP: <?= esc(PHP_VERSION) ?> —
|
||||
CodeIgniter: <?= esc(CodeIgniter::CI_VERSION) ?> --
|
||||
Environment: <?= ENVIRONMENT ?>
|
||||
</div>
|
||||
<div class="container">
|
||||
<h1><?= esc($title), esc($exception->getCode() ? ' #' . $exception->getCode() : '') ?></h1>
|
||||
<p>
|
||||
<?= nl2br(esc($exception->getMessage())) ?>
|
||||
<a href="https://www.duckduckgo.com/?q=<?= urlencode($title . ' ' . preg_replace('#\'.*\'|".*"#Us', '', $exception->getMessage())) ?>"
|
||||
rel="noreferrer" target="_blank">search →</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Source -->
|
||||
<div class="container">
|
||||
<p><b><?= esc(clean_path($file)) ?></b> at line <b><?= esc($line) ?></b></p>
|
||||
|
||||
<?php if (is_file($file)) : ?>
|
||||
<div class="source">
|
||||
<?= static::highlightFile($file, $line, 15); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<?php
|
||||
$last = $exception;
|
||||
|
||||
while ($prevException = $last->getPrevious()) {
|
||||
$last = $prevException;
|
||||
?>
|
||||
|
||||
<pre>
|
||||
Caused by:
|
||||
<?= esc($prevException::class), esc($prevException->getCode() ? ' #' . $prevException->getCode() : '') ?>
|
||||
|
||||
<?= nl2br(esc($prevException->getMessage())) ?>
|
||||
<a href="https://www.duckduckgo.com/?q=<?= urlencode($prevException::class . ' ' . preg_replace('#\'.*\'|".*"#Us', '', $prevException->getMessage())) ?>"
|
||||
rel="noreferrer" target="_blank">search →</a>
|
||||
<?= esc(clean_path($prevException->getFile()) . ':' . $prevException->getLine()) ?>
|
||||
</pre>
|
||||
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE) : ?>
|
||||
<div class="container">
|
||||
|
||||
<ul class="tabs" id="tabs">
|
||||
<li><a href="#backtrace">Backtrace</a></li>
|
||||
<li><a href="#server">Server</a></li>
|
||||
<li><a href="#request">Request</a></li>
|
||||
<li><a href="#response">Response</a></li>
|
||||
<li><a href="#files">Files</a></li>
|
||||
<li><a href="#memory">Memory</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
|
||||
<!-- Backtrace -->
|
||||
<div class="content" id="backtrace">
|
||||
|
||||
<ol class="trace">
|
||||
<?php foreach ($trace as $index => $row) : ?>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
<!-- Trace info -->
|
||||
<?php if (isset($row['file']) && is_file($row['file'])) : ?>
|
||||
<?php
|
||||
if (isset($row['function']) && in_array($row['function'], ['include', 'include_once', 'require', 'require_once'], true)) {
|
||||
echo esc($row['function'] . ' ' . clean_path($row['file']));
|
||||
} else {
|
||||
echo esc(clean_path($row['file']) . ' : ' . $row['line']);
|
||||
}
|
||||
?>
|
||||
<?php else: ?>
|
||||
{PHP internal code}
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Class/Method -->
|
||||
<?php if (isset($row['class'])) : ?>
|
||||
— <?= esc($row['class'] . $row['type'] . $row['function']) ?>
|
||||
<?php if (! empty($row['args'])) : ?>
|
||||
<?php $argsId = $errorId . 'args' . $index ?>
|
||||
( <a href="#" onclick="return toggle('<?= esc($argsId, 'attr') ?>');">arguments</a> )
|
||||
<div class="args" id="<?= esc($argsId, 'attr') ?>">
|
||||
<table cellspacing="0">
|
||||
|
||||
<?php
|
||||
$params = null;
|
||||
// Reflection by name is not available for closure function
|
||||
if (! str_ends_with($row['function'], '}')) {
|
||||
$mirror = isset($row['class']) ? new ReflectionMethod($row['class'], $row['function']) : new ReflectionFunction($row['function']);
|
||||
$params = $mirror->getParameters();
|
||||
}
|
||||
|
||||
foreach ($row['args'] as $key => $value) : ?>
|
||||
<tr>
|
||||
<td><code><?= esc(isset($params[$key]) ? '$' . $params[$key]->name : "#{$key}") ?></code></td>
|
||||
<td><pre><?= esc(print_r($value, true)) ?></pre></td>
|
||||
</tr>
|
||||
<?php endforeach ?>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
()
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (! isset($row['class']) && isset($row['function'])) : ?>
|
||||
— <?= esc($row['function']) ?>()
|
||||
<?php endif; ?>
|
||||
</p>
|
||||
|
||||
<!-- Source? -->
|
||||
<?php if (isset($row['file']) && is_file($row['file']) && isset($row['class'])) : ?>
|
||||
<div class="source">
|
||||
<?= static::highlightFile($row['file'], $row['line']) ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</li>
|
||||
|
||||
<?php endforeach; ?>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Server -->
|
||||
<div class="content" id="server">
|
||||
<?php foreach (['_SERVER', '_SESSION'] as $var) : ?>
|
||||
<?php
|
||||
if (empty($GLOBALS[$var]) || ! is_array($GLOBALS[$var])) {
|
||||
continue;
|
||||
} ?>
|
||||
|
||||
<h3>$<?= esc($var) ?></h3>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Key</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($GLOBALS[$var] as $key => $value) : ?>
|
||||
<tr>
|
||||
<td><?= esc($key) ?></td>
|
||||
<td>
|
||||
<?php if (is_string($value)) : ?>
|
||||
<?= esc($value) ?>
|
||||
<?php else: ?>
|
||||
<pre><?= esc(print_r($value, true)) ?></pre>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php endforeach ?>
|
||||
|
||||
<!-- Constants -->
|
||||
<?php $constants = get_defined_constants(true); ?>
|
||||
<?php if (! empty($constants['user'])) : ?>
|
||||
<h3>Constants</h3>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Key</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($constants['user'] as $key => $value) : ?>
|
||||
<tr>
|
||||
<td><?= esc($key) ?></td>
|
||||
<td>
|
||||
<?php if (is_string($value)) : ?>
|
||||
<?= esc($value) ?>
|
||||
<?php else: ?>
|
||||
<pre><?= esc(print_r($value, true)) ?></pre>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Request -->
|
||||
<div class="content" id="request">
|
||||
<?php $request = Services::request(); ?>
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width: 10em">Path</td>
|
||||
<td><?= esc($request->getUri()) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>HTTP Method</td>
|
||||
<td><?= esc($request->getMethod()) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>IP Address</td>
|
||||
<td><?= esc($request->getIPAddress()) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 10em">Is AJAX Request?</td>
|
||||
<td><?= $request->isAJAX() ? 'yes' : 'no' ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Is CLI Request?</td>
|
||||
<td><?= $request->isCLI() ? 'yes' : 'no' ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Is Secure Request?</td>
|
||||
<td><?= $request->isSecure() ? 'yes' : 'no' ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>User Agent</td>
|
||||
<td><?= esc($request->getUserAgent()->getAgentString()) ?></td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<?php $empty = true; ?>
|
||||
<?php foreach (['_GET', '_POST', '_COOKIE'] as $var) : ?>
|
||||
<?php
|
||||
if (empty($GLOBALS[$var]) || ! is_array($GLOBALS[$var])) {
|
||||
continue;
|
||||
} ?>
|
||||
|
||||
<?php $empty = false; ?>
|
||||
|
||||
<h3>$<?= esc($var) ?></h3>
|
||||
|
||||
<table style="width: 100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Key</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($GLOBALS[$var] as $key => $value) : ?>
|
||||
<tr>
|
||||
<td><?= esc($key) ?></td>
|
||||
<td>
|
||||
<?php if (is_string($value)) : ?>
|
||||
<?= esc($value) ?>
|
||||
<?php else: ?>
|
||||
<pre><?= esc(print_r($value, true)) ?></pre>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php endforeach ?>
|
||||
|
||||
<?php if ($empty) : ?>
|
||||
|
||||
<div class="alert">
|
||||
No $_GET, $_POST, or $_COOKIE Information to show.
|
||||
</div>
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
<?php $headers = $request->headers(); ?>
|
||||
<?php if (! empty($headers)) : ?>
|
||||
|
||||
<h3>Headers</h3>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Header</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($headers as $name => $value) : ?>
|
||||
<tr>
|
||||
<td><?= esc($name, 'html') ?></td>
|
||||
<td>
|
||||
<?php
|
||||
if ($value instanceof Header) {
|
||||
echo esc($value->getValueLine(), 'html');
|
||||
} else {
|
||||
foreach ($value as $i => $header) {
|
||||
echo ' ('. $i+1 . ') ' . esc($header->getValueLine(), 'html');
|
||||
}
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Response -->
|
||||
<?php
|
||||
$response = Services::response();
|
||||
$response->setStatusCode(http_response_code());
|
||||
?>
|
||||
<div class="content" id="response">
|
||||
<table>
|
||||
<tr>
|
||||
<td style="width: 15em">Response Status</td>
|
||||
<td><?= esc($response->getStatusCode() . ' - ' . $response->getReasonPhrase()) ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<?php $headers = $response->headers(); ?>
|
||||
<?php if (! empty($headers)) : ?>
|
||||
<h3>Headers</h3>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Header</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($headers as $name => $value) : ?>
|
||||
<tr>
|
||||
<td><?= esc($name, 'html') ?></td>
|
||||
<td>
|
||||
<?php
|
||||
if ($value instanceof Header) {
|
||||
echo esc($response->getHeaderLine($name), 'html');
|
||||
} else {
|
||||
foreach ($value as $i => $header) {
|
||||
echo ' ('. $i+1 . ') ' . esc($header->getValueLine(), 'html');
|
||||
}
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Files -->
|
||||
<div class="content" id="files">
|
||||
<?php $files = get_included_files(); ?>
|
||||
|
||||
<ol>
|
||||
<?php foreach ($files as $file) :?>
|
||||
<li><?= esc(clean_path($file)) ?></li>
|
||||
<?php endforeach ?>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<!-- Memory -->
|
||||
<div class="content" id="memory">
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Memory Usage</td>
|
||||
<td><?= esc(static::describeMemory(memory_get_usage(true))) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 12em">Peak Memory Usage:</td>
|
||||
<td><?= esc(static::describeMemory(memory_get_peak_usage(true))) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Memory Limit:</td>
|
||||
<td><?= esc(ini_get('memory_limit')) ?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</div> <!-- /tab-content -->
|
||||
|
||||
</div> <!-- /container -->
|
||||
<?php endif; ?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,25 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="robots" content="noindex">
|
||||
|
||||
<title><?= lang('Errors.whoops') ?></title>
|
||||
|
||||
<style>
|
||||
<?= preg_replace('#[\r\n\t ]+#', ' ', file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'debug.css')) ?>
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="container text-center">
|
||||
|
||||
<h1 class="headline"><?= lang('Errors.whoops') ?></h1>
|
||||
|
||||
<p class="lead"><?= lang('Errors.weHitASnag') ?></p>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,808 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
|
||||
<title>HealthRader - Software and App Landing Pages HTML Template</title>
|
||||
|
||||
<link rel="stylesheet" href="./assets/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="./assets/css/all.min.css">
|
||||
<link rel="stylesheet" href="./assets/css/animate.css">
|
||||
<link rel="stylesheet" href="./assets/css/nice-select.css">
|
||||
<link rel="stylesheet" href="./assets/css/owl.min.css">
|
||||
<link rel="stylesheet" href="./assets/css/jquery-ui.min.css">
|
||||
<link rel="stylesheet" href="./assets/css/magnific-popup.css">
|
||||
<link rel="stylesheet" href="./assets/css/flaticon.css">
|
||||
<link rel="stylesheet" href="./assets/css/main.css">
|
||||
<link rel="shortcut icon" href="assets/images/favicon.png" type="image/x-icon">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--============= ScrollToTop Section Starts Here =============-->
|
||||
<div class="preloader">
|
||||
<div class="preloader-inner">
|
||||
<div class="preloader-icon">
|
||||
<span></span>
|
||||
<span></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#0" class="scrollToTop"><i class="fas fa-angle-up"></i></a>
|
||||
<div class="overlay"></div>
|
||||
<!--============= ScrollToTop Section Ends Here =============-->
|
||||
|
||||
|
||||
<!--============= Header Section Starts Here =============-->
|
||||
<header class="header-section header-cl-black">
|
||||
<div class="container">
|
||||
<div class="header-wrapper">
|
||||
<div class="logo">
|
||||
<a href="index.html">
|
||||
<img src="./assets/images/logo/logo2.png" alt="logo">
|
||||
</a>
|
||||
</div>
|
||||
<ul class="menu">
|
||||
<li>
|
||||
<a href="/">Home</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="/">Blog</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/">Contact</a>
|
||||
</li>
|
||||
<li class="d-sm-none">
|
||||
<a href="#0" class="m-0 header-button">Get HealthRader</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="header-bar d-lg-none">
|
||||
<span></span>
|
||||
<span></span>
|
||||
<span></span>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<select class="select-bar">
|
||||
<option value="en">En</option>
|
||||
<option value="Bn">Bn</option>
|
||||
<option value="pk">Pk</option>
|
||||
<option value="Fr">Fr</option>
|
||||
</select>
|
||||
<a href="#0" class="header-button d-none d-sm-inline-block">Get HealthRader</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<!--============= Header Section Ends Here =============-->
|
||||
|
||||
|
||||
<!--============= Banner Section Starts Here =============-->
|
||||
<section class="banner-20 pos-rel oh bg_img" data-background="./assets/images/extra-2/banner/banner-bg-20.jpg">
|
||||
<div class="container">
|
||||
<div class="row flex-wrap-reverse align-items-center justify-content-lg-between">
|
||||
<div class="col-lg-5">
|
||||
<div class="banner-thumb-20 rtl">
|
||||
<img src="./assets/images/extra-2/banner/banner-20.png" alt="extra-2/banner">
|
||||
<a href="https://www.youtube.com/watch?v=Djz8Nc0Qxwk" class="video-button popup">
|
||||
<i class="flaticon-play"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6 p-lg-0">
|
||||
<div class="banner-content-20">
|
||||
<h1 class="title">The Most
|
||||
Intuitive App
|
||||
For Your Needs</h1>
|
||||
<p>
|
||||
A simple, yet effective way to be more productive
|
||||
</p>
|
||||
<a href="#0" class="button-4">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!--============= Banner Section Ends Here =============-->
|
||||
|
||||
|
||||
<!--============= Logo Slider Section Starts Here =============-->
|
||||
<section class="logo-slider-section section-bg padding-bottom padding-top">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-10 text-center mb-4 mb-lg-5">
|
||||
<h5 class="title">Trusted by the World's Best Team</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="logo-slider owl-theme owl-carousel">
|
||||
<div class="item">
|
||||
<img src="./assets/images/banner/banner16/01.png" alt="banner">
|
||||
</div>
|
||||
<div class="item">
|
||||
<img src="./assets/images/banner/banner16/02.png" alt="banner">
|
||||
</div>
|
||||
<div class="item">
|
||||
<img src="./assets/images/banner/banner16/03.png" alt="banner">
|
||||
</div>
|
||||
<div class="item">
|
||||
<img src="./assets/images/banner/banner16/04.png" alt="banner">
|
||||
</div>
|
||||
<div class="item">
|
||||
<img src="./assets/images/banner/banner16/05.png" alt="banner">
|
||||
</div>
|
||||
<div class="item">
|
||||
<img src="./assets/images/banner/banner16/06.png" alt="banner">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!--============= Logo Slider Section Ends Here =============-->
|
||||
|
||||
|
||||
<!--============= Feature Section Starts Here =============-->
|
||||
<section class="feature-section ovelflow-hidden padding-bottom padding-top">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-xl-9">
|
||||
<div class="section-header mw-100">
|
||||
<h5 class="cate">Features</h5>
|
||||
<h2 class="title">Powerful features to Supercharge your productivity</h2>
|
||||
<p class="mx-auto mw-540px">
|
||||
Numerous features make it possible to customize the system in accordance with all your needs.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="feature-wrapper-20">
|
||||
<div class="feature-wrapper-bg-20 bg_img" data-background="./assets/images/extra-2/feature/feature-bg.png">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-lg-6 d-none d-lg-block">
|
||||
<div class="feature-thumb-20 rtl">
|
||||
<img src="./assets/images/extra-2/feature/phone.png" alt="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="feature-content-20 cl-white">
|
||||
<div class="feature-content-slider-20 owl-theme owl-carousel">
|
||||
<div class="feature-content-item-20">
|
||||
<div class="feature-content-icon-20">
|
||||
<img src="./assets/images/extra-2/feature/01.png" alt="extra-2/feature">
|
||||
</div>
|
||||
<h3 class="title">
|
||||
Seamless team-collaboration & task assignment
|
||||
</h3>
|
||||
<p>
|
||||
Nunc eleifend ligula augue, quis varius diam aliquet id. Mauris rhoncus ex nec ultricies venenatis. Sed semper lacus efficitur metus scelerisque, ac tristique sapien aliquet.
|
||||
</p>
|
||||
</div>
|
||||
<div class="feature-content-item-20">
|
||||
<div class="feature-content-icon-20">
|
||||
<img src="./assets/images/extra-2/feature/01.png" alt="extra-2/feature">
|
||||
</div>
|
||||
<h3 class="title">
|
||||
Seamless team-collaboration & task assignment
|
||||
</h3>
|
||||
<p>
|
||||
Nunc eleifend ligula augue, quis varius diam aliquet id. Mauris rhoncus ex nec ultricies venenatis. Sed semper lacus efficitur metus scelerisque, ac tristique sapien aliquet.
|
||||
</p>
|
||||
</div>
|
||||
<div class="feature-content-item-20">
|
||||
<div class="feature-content-icon-20">
|
||||
<img src="./assets/images/extra-2/feature/01.png" alt="extra-2/feature">
|
||||
</div>
|
||||
<h3 class="title">
|
||||
Seamless team-collaboration & task assignment
|
||||
</h3>
|
||||
<p>
|
||||
Nunc eleifend ligula augue, quis varius diam aliquet id. Mauris rhoncus ex nec ultricies venenatis. Sed semper lacus efficitur metus scelerisque, ac tristique sapien aliquet.
|
||||
</p>
|
||||
</div>
|
||||
<div class="feature-content-item-20">
|
||||
<div class="feature-content-icon-20">
|
||||
<img src="./assets/images/extra-2/feature/01.png" alt="extra-2/feature">
|
||||
</div>
|
||||
<h3 class="title">
|
||||
Seamless team-collaboration & task assignment
|
||||
</h3>
|
||||
<p>
|
||||
Nunc eleifend ligula augue, quis varius diam aliquet id. Mauris rhoncus ex nec ultricies venenatis. Sed semper lacus efficitur metus scelerisque, ac tristique sapien aliquet.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="feat-nav mt-4">
|
||||
<a href="#0" class="feat-prev"><i class="flaticon-left"></i></a>
|
||||
<a href="#0" class="feat-next active"><i class="flaticon-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!--============= Feature Section Ends Here =============-->
|
||||
|
||||
|
||||
<!--============= How Section Starts Here =============-->
|
||||
<section class="how-section-20 ovelflow-hidden">
|
||||
<div class="container">
|
||||
<div class="row align-items-end">
|
||||
<div class="col-lg-4 col-xl-3">
|
||||
<div class="move-top--lg-70">
|
||||
<div class="section-header left-style mb-olpo">
|
||||
<h5 class="cate">How it works</h5>
|
||||
<h2 class="title">Simple
|
||||
Process
|
||||
to Start</h2>
|
||||
<p>It's easier than you think.
|
||||
Follow 3 simple easy steps</p>
|
||||
</div>
|
||||
<div class="how-item-wrapper-20">
|
||||
<div class="how-item-20">
|
||||
<h6 class="title">Create an Account</h6>
|
||||
<div class="how-thumb">
|
||||
<img src="./assets/images/extra-2/how/1.png" alt="how">
|
||||
</div>
|
||||
</div>
|
||||
<div class="how-item-20">
|
||||
<h6 class="title">Configure</h6>
|
||||
<div class="how-thumb">
|
||||
<img src="./assets/images/extra-2/how/2.png" alt="how">
|
||||
</div>
|
||||
</div>
|
||||
<div class="how-item-20">
|
||||
<h6 class="title">Automation</h6>
|
||||
<div class="how-thumb">
|
||||
<img src="./assets/images/extra-2/how/3.png" alt="how">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-8 col-xl-9">
|
||||
<div class="how-slider-wrapper mt-4 mt-lg-0 ml--lg-78 mr--lg-65">
|
||||
<div class="how-slider-20 owl-theme owl-carousel">
|
||||
<div class="thumbs">
|
||||
<img src="./assets/images/extra-2/feature/phone2.png" alt="extra-2/feature">
|
||||
</div>
|
||||
<div class="thumbs">
|
||||
<img src="./assets/images/extra-2/feature/phone3.png" alt="extra-2/feature">
|
||||
</div>
|
||||
<div class="thumbs">
|
||||
<img src="./assets/images/extra-2/feature/phone2.png" alt="extra-2/feature">
|
||||
</div>
|
||||
<div class="thumbs">
|
||||
<img src="./assets/images/extra-2/feature/phone3.png" alt="extra-2/feature">
|
||||
</div>
|
||||
</div>
|
||||
<div class="dots-2"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!--============= How Section Ends Here =============-->
|
||||
|
||||
|
||||
<!--============= Pricing Section Starts Here =============-->
|
||||
<section class="apps-screenshot-section-20 padding-top padding-bottom pb-max-lg-0 overflow-hidden position-relative">
|
||||
<div class="app-screenshot-20 d-none d-lg-flex">
|
||||
<img src="./assets/images/extra-2/screenshot/background.png" alt="extra-2/screenshot">
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row justify-content-lg-between justify-content-center align-items-center flex-wrap-reverse">
|
||||
<div class="col-md-8 col-lg-7 col-xl-8">
|
||||
<div class="app-screenshot-slider-20 owl-theme owl-carousel">
|
||||
<div class="thumbs">
|
||||
<img src="./assets/images/extra-2/screenshot/group1.png" alt="extra-2/screenshot">
|
||||
</div>
|
||||
<div class="thumbs">
|
||||
<img src="./assets/images/extra-2/screenshot/group2.png" alt="extra-2/screenshot">
|
||||
</div>
|
||||
<div class="thumbs">
|
||||
<img src="./assets/images/extra-2/screenshot/group1.png" alt="extra-2/screenshot">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-5 col-xl-4">
|
||||
<div class="mb-3 mb-lg-0">
|
||||
<div class="section-header left-style mb-olpo">
|
||||
<h5 class="cate">A beautiful way to present</h5>
|
||||
<h2 class="title">Your App
|
||||
Screenshots</h2>
|
||||
<p>The only app you’ll need to power your
|
||||
life.App store screenshots are among the
|
||||
main factors that drive app downloads.</p>
|
||||
<div class="feat-nav mt-0">
|
||||
<a href="#0" class="feat-prev"><i class="flaticon-left"></i></a>
|
||||
<a href="#0" class="feat-next active"><i class="flaticon-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<h6 class="title mb-4">Ready to get started?</h6>
|
||||
<ul class="download-options justify-content-start download-option-20">
|
||||
<li>
|
||||
<a href="#0" class="active"><i class="fab fa-apple"></i></a>
|
||||
<span>Android</span>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#0"><i class="fab fa-android"></i></a>
|
||||
<span>ios</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!--============= Pricing Section Starts Here =============-->
|
||||
|
||||
|
||||
<!--============= Pricing Section Starts Here =============-->
|
||||
<section class="pricing-section-20 body--bg position-relative padding-bottom padding-top">
|
||||
<div class="container">
|
||||
<div class="section-header">
|
||||
<h5 class="cate">An Exhaustive list of Amazing Features</h5>
|
||||
<h2 class="title">Simple,Affordable
|
||||
Pricing Plans.</h2>
|
||||
<p>
|
||||
HealthRader has plans, from free to paid, that scale with your needs. Subscribe to a plan that fits the size of your business.
|
||||
</p>
|
||||
</div>
|
||||
<div class="tab">
|
||||
<ul class="tab-menu pricing-menu cl-black">
|
||||
<li class="active">Monthly</li>
|
||||
<li>Yearly</li>
|
||||
</ul>
|
||||
<div class="tab-area">
|
||||
<div class="tab-item active">
|
||||
<div class="row mb-30-none justify-content-center">
|
||||
<div class="col-lg-4 col-md-6 col-sm-10">
|
||||
<div class="pricing-item-20">
|
||||
<div class="pricing-header">
|
||||
<span class="name">BRONXE</span>
|
||||
<h2 class="price"><sup>$</sup>15.99</h2>
|
||||
<span class="info">Per Month</span>
|
||||
</div>
|
||||
<div class="pricing-body">
|
||||
<ul>
|
||||
<li>
|
||||
10 projects
|
||||
</li>
|
||||
<li>
|
||||
Unlimited hosted projects
|
||||
</li>
|
||||
<li>
|
||||
Real-Time Feedback
|
||||
</li>
|
||||
<li>
|
||||
Code export
|
||||
</li>
|
||||
<li>
|
||||
24/7 Chat Support
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="pricing-footer text-center">
|
||||
<a href="#0" class="button-4">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-4 col-md-6 col-sm-10">
|
||||
<div class="pricing-item-20">
|
||||
<div class="pricing-header">
|
||||
<span class="name">SILVER</span>
|
||||
<h2 class="price"><sup>$</sup>35.99</h2>
|
||||
<span class="info">Per Month</span>
|
||||
</div>
|
||||
<div class="pricing-body">
|
||||
<ul>
|
||||
<li>
|
||||
10 projects
|
||||
</li>
|
||||
<li>
|
||||
Unlimited hosted projects
|
||||
</li>
|
||||
<li>
|
||||
Real-Time Feedback
|
||||
</li>
|
||||
<li>
|
||||
Code export
|
||||
</li>
|
||||
<li>
|
||||
24/7 Chat Support
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="pricing-footer text-center">
|
||||
<a href="#0" class="button-4">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-4 col-md-6 col-sm-10">
|
||||
<div class="pricing-item-20">
|
||||
<div class="pricing-header">
|
||||
<span class="name">GOLD</span>
|
||||
<h2 class="price"><sup>$</sup>65.99</h2>
|
||||
<span class="info">Per Month</span>
|
||||
</div>
|
||||
<div class="pricing-body">
|
||||
<ul>
|
||||
<li>
|
||||
10 projects
|
||||
</li>
|
||||
<li>
|
||||
Unlimited hosted projects
|
||||
</li>
|
||||
<li>
|
||||
Real-Time Feedback
|
||||
</li>
|
||||
<li>
|
||||
Code export
|
||||
</li>
|
||||
<li>
|
||||
24/7 Chat Support
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="pricing-footer text-center">
|
||||
<a href="#0" class="button-4">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-item">
|
||||
<div class="row mb-30-none justify-content-center">
|
||||
<div class="col-lg-4 col-md-6 col-sm-10">
|
||||
<div class="pricing-item-20">
|
||||
<div class="pricing-header">
|
||||
<span class="name">BRONXE</span>
|
||||
<h2 class="price"><sup>$</sup>15.99</h2>
|
||||
<span class="info">Per Month</span>
|
||||
</div>
|
||||
<div class="pricing-body">
|
||||
<ul>
|
||||
<li>
|
||||
10 projects
|
||||
</li>
|
||||
<li>
|
||||
Unlimited hosted projects
|
||||
</li>
|
||||
<li>
|
||||
Real-Time Feedback
|
||||
</li>
|
||||
<li>
|
||||
Code export
|
||||
</li>
|
||||
<li>
|
||||
24/7 Chat Support
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="pricing-footer text-center">
|
||||
<a href="#0" class="button-4">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-4 col-md-6 col-sm-10">
|
||||
<div class="pricing-item-20">
|
||||
<div class="pricing-header">
|
||||
<span class="name">SILVER</span>
|
||||
<h2 class="price"><sup>$</sup>35.99</h2>
|
||||
<span class="info">Per Month</span>
|
||||
</div>
|
||||
<div class="pricing-body">
|
||||
<ul>
|
||||
<li>
|
||||
10 projects
|
||||
</li>
|
||||
<li>
|
||||
Unlimited hosted projects
|
||||
</li>
|
||||
<li>
|
||||
Real-Time Feedback
|
||||
</li>
|
||||
<li>
|
||||
Code export
|
||||
</li>
|
||||
<li>
|
||||
24/7 Chat Support
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="pricing-footer text-center">
|
||||
<a href="#0" class="button-4">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-4 col-md-6 col-sm-10">
|
||||
<div class="pricing-item-20">
|
||||
<div class="pricing-header">
|
||||
<span class="name">GOLD</span>
|
||||
<h2 class="price"><sup>$</sup>65.99</h2>
|
||||
<span class="info">Per Month</span>
|
||||
</div>
|
||||
<div class="pricing-body">
|
||||
<ul>
|
||||
<li>
|
||||
10 projects
|
||||
</li>
|
||||
<li>
|
||||
Unlimited hosted projects
|
||||
</li>
|
||||
<li>
|
||||
Real-Time Feedback
|
||||
</li>
|
||||
<li>
|
||||
Code export
|
||||
</li>
|
||||
<li>
|
||||
24/7 Chat Support
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="pricing-footer text-center">
|
||||
<a href="#0" class="button-4">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!--============= Pricing Section Ends Here =============-->
|
||||
|
||||
|
||||
<!--============= Testimonial Section Starts Here =============-->
|
||||
<section class="testimonial-section up--down--overflow section-bg padding-bottom padding-top">
|
||||
<div class="container">
|
||||
<div class="row flex-wrap-reverse align-items-center mb-30-none">
|
||||
<div class="col-lg-6">
|
||||
<div class="row align-items-center mb-30-none">
|
||||
<div class="col-md-6">
|
||||
<div class="review-item-20">
|
||||
<div class="review-item-header">
|
||||
<div class="thumb">
|
||||
<img src="./assets/images/client/client03.png" alt="extra-2/client">
|
||||
</div>
|
||||
<div class="content">
|
||||
<h6 class="title">Rudy Riley</h6>
|
||||
<span class="info">CEO & Founder</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ratings">
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
</div>
|
||||
<blockquote>
|
||||
“Always think outside the box and embrace opportunities that appear, wherever they might be.”
|
||||
</blockquote>
|
||||
<strong>Awesome App!</strong>
|
||||
</div>
|
||||
<div class="review-item-20 active">
|
||||
<div class="review-item-header">
|
||||
<div class="thumb">
|
||||
<img src="./assets/images/client/client02.png" alt="extra-2/client">
|
||||
</div>
|
||||
<div class="content">
|
||||
<h6 class="title">Rudy Riley</h6>
|
||||
<span class="info">CEO & Founder</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ratings">
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
</div>
|
||||
<blockquote>
|
||||
“Always think outside the box and embrace opportunities that appear, wherever they might be.”
|
||||
</blockquote>
|
||||
<strong>Awesome App!</strong>
|
||||
</div>
|
||||
<div class="review-item-20">
|
||||
<div class="review-item-header">
|
||||
<div class="thumb">
|
||||
<img src="./assets/images/client/client01.png" alt="extra-2/client">
|
||||
</div>
|
||||
<div class="content">
|
||||
<h6 class="title">Rudy Riley</h6>
|
||||
<span class="info">CEO & Founder</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ratings">
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
</div>
|
||||
<blockquote>
|
||||
“Always think outside the box and embrace opportunities that appear, wherever they might be.”
|
||||
</blockquote>
|
||||
<strong>Awesome App!</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="review-item-20">
|
||||
<div class="review-item-header">
|
||||
<div class="thumb">
|
||||
<img src="./assets/images/client/client04.png" alt="extra-2/client">
|
||||
</div>
|
||||
<div class="content">
|
||||
<h6 class="title">Rudy Riley</h6>
|
||||
<span class="info">CEO & Founder</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ratings">
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
</div>
|
||||
<blockquote>
|
||||
“Always think outside the box and embrace opportunities that appear, wherever they might be.”
|
||||
</blockquote>
|
||||
<strong>Awesome App!</strong>
|
||||
</div>
|
||||
<div class="review-item-20">
|
||||
<div class="review-item-header">
|
||||
<div class="thumb">
|
||||
<img src="./assets/images/client/client05.png" alt="extra-2/client">
|
||||
</div>
|
||||
<div class="content">
|
||||
<h6 class="title">Rudy Riley</h6>
|
||||
<span class="info">CEO & Founder</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ratings">
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
<span><i class="fas fa-star"></i></span>
|
||||
</div>
|
||||
<blockquote>
|
||||
“Always think outside the box and embrace opportunities that appear, wherever they might be.”
|
||||
</blockquote>
|
||||
<strong>Awesome App!</strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="mb-5 mb-lg-0">
|
||||
<div class="section-header left-style mb-olpo">
|
||||
<h5 class="cate">Testimonials</h5>
|
||||
<h2 class="title">Don’t just take our word for it!</h2>
|
||||
<p>Thousands of professionals and business are already enjoying Apps. Hear what some of they are saying!</p>
|
||||
</div>
|
||||
<a href="#0" class="button-4">get started</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!--============= Testimonial Section Ends Here =============-->
|
||||
|
||||
|
||||
<!--============= Apps Download Section Starts Here =============-->
|
||||
<section class="apps-download-section overflow-hidden padding-top padding-bottom body--bg">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-xl-9">
|
||||
<div class="section-header mw-100">
|
||||
<h5 class="cate">An Exhaustive list of Amazing Features</h5>
|
||||
<h2 class="title">Ready to take your productivity to the next level?</h2>
|
||||
<p class="mx-auto mw-540px">
|
||||
Are you ready to make the leap? Download Apps for iOS or Android today — it's free.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="apps-download-buttons-20">
|
||||
<h6 class="title cl-white text-center mb-4">Ready to get started?</h6>
|
||||
<ul class="download-options">
|
||||
<li>
|
||||
<a href="#0" class="active"><i class="fab fa-apple"></i></a>
|
||||
<span class="cl-white">Android</span>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#0"><i class="fab fa-android"></i></a>
|
||||
<span class="cl-white">ios</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="apps-download-screen-20">
|
||||
<div class="apps-download-bg d-flex justify-content-center align-items-center">
|
||||
<img src="./assets/images/extra-2/screenshot/mocup.png" alt="extra-2/screenshot">
|
||||
</div>
|
||||
<div class="apps-download-thumb">
|
||||
<img src="./assets/images/extra-2/screenshot/mocup-screen.png" alt="extra-2/screenshot">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!--============= Apps Download Section Ends Here =============-->
|
||||
|
||||
|
||||
<!--============= Footer Section Starts Here =============-->
|
||||
<footer class="footer-section" style="background-color: #0c5460;">
|
||||
<!-- <footer class="footer-section bg_img" data-background="./assets/images/extra-2/footer/footer-bg.png">-->
|
||||
<div class="container">
|
||||
<div class="footer-top padding-top padding-bottom">
|
||||
<div class="logo">
|
||||
<a href="#0">
|
||||
<img src="./assets/images/logo/footer-logo.png" alt="logo">
|
||||
</a>
|
||||
</div>
|
||||
<ul class="social-icons light-border-color">
|
||||
<li>
|
||||
<a href="#0"><i class="fab fa-facebook-f"></i></a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#0" class="active"><i class="fab fa-twitter"></i></a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#0"><i class="fab fa-pinterest-p"></i></a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#0"><i class="fab fa-google-plus-g"></i></a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#0"><i class="fab fa-instagram"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer-bottom">
|
||||
<ul class="footer-link light-border-color">
|
||||
<li>
|
||||
<a href="#0">About</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#0">FAQs</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#0">Contact</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#0">Terms of Service</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#0">Privacy</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="copyright light-border">
|
||||
<p>
|
||||
Copyright © <span class="currentYear"></span>.All Rights Reserved By <a href="#0">HealthRader</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<!--============= Footer Section Ends Here =============-->
|
||||
|
||||
<script src="./assets/js/jquery.min.js"></script>
|
||||
<script src="./assets/js/modernizr-3.6.0.min.js"></script>
|
||||
<script src="./assets/js/plugins.js"></script>
|
||||
<script src="./assets/js/bootstrap.min.js"></script>
|
||||
<script src="./assets/js/magnific-popup.min.js"></script>
|
||||
<script src="./assets/js/jquery-ui.min.js"></script>
|
||||
<script src="./assets/js/wow.min.js"></script>
|
||||
<script src="./assets/js/waypoints.js"></script>
|
||||
<script src="./assets/js/nice-select.js"></script>
|
||||
<script src="./assets/js/owl.min.js"></script>
|
||||
<script src="./assets/js/counterup.min.js"></script>
|
||||
<script src="./assets/js/paroller.js"></script>
|
||||
<script src="./assets/js/main.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user