Merge pull request #3 from M17-Project/bootstrap45

Bootstrap45
pull/4/head v1.1.0-beta
Steve Miller 2020-10-23 14:22:34 -04:00 committed by GitHub
commit e534dd216c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 258 additions and 285 deletions

View File

@ -16,4 +16,18 @@ cd /var/www/html/include
sudo cp config.inc.php.dist config.inc.php
```
- **include/config.inc.php** - At a minimum set your email address, IPv4, IPv6, country and comment. **Do not** enable the calling home feature. This feature is not appropriate for mrefd.
### Customizations
- Homepage link
- edit config.ini.php to change the logo to link to your homepage. Defaults to the M17 website.
- Logo file
- place your logo in /images (SVG preferred) and edit config.ini.php to change the logo image. Defaults to the M17 logo.
### Files to edit
- **include/config.inc.php**
- ContactEmail - set this to the sysop's email address
- IPV4 - set this to the IPv4 address of the reflector
- IPV6 - set this to the IPv6 address of the reflector, if not used, enter NONE
- Homepage - set this to your homepage, defaults to m17project
- Logo - set this to the filename of your logo, defaults to M17 logo
**Do not** enable the calling home feature. This feature is not appropriate for mrefd.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,15 +0,0 @@
/*!
* IE10 viewport hack for Surface/desktop Windows 8 bug
* Copyright 2014-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
/*
* See the Getting Started docs for more information:
* http://getbootstrap.com/getting-started/#support-ie10-width
*/
@-webkit-viewport { width: device-width; }
@-moz-viewport { width: device-width; }
@-ms-viewport { width: device-width; }
@-o-viewport { width: device-width; }
@viewport { width: device-width; }

View File

@ -0,0 +1,22 @@
/* Show it is fixed to the top */
body {
min-height: 75rem;
padding-top: 4.5rem;
}
main > .container {
padding: 60px 15px 0;
}
.footer {
background-color: #f5f5f5;
}
.footer > .container {
padding-right: 15px;
padding-left: 15px;
}
code {
font-size: 80%;
}

View File

@ -17,8 +17,10 @@ $PageOptions = array();
$PageOptions['ContactEmail'] = 'your_email'; // Support E-Mail address
$PageOptions['IPV4'] = 'refl_ipv4_address'; // Reflector IPV4 Address
$PageOptions['IPV6'] = 'refl_ipv6_address'; // Reflector IPV6 Address - if none use NONE
$PageOptions['Homepage'] = 'https://m17project.org'; // Link to homepage for logo
$PageOptions['Logo'] = 'm17_logo.svg'; // Logo image - SVG preferred - place in /images/
$PageOptions['DashboardVersion'] = '1.0.1'; // Dashboard Version
$PageOptions['DashboardVersion'] = '1.1.0'; // Dashboard Version
$PageOptions['PageRefreshActive'] = true; // Activate automatic refresh
$PageOptions['PageRefreshDelay'] = '10000'; // Page refresh time in miliseconds
@ -46,7 +48,7 @@ $PageOptions['ModuleNames']['D'] = '';
$PageOptions['MetaDescription'] = 'MREFD is an M17 Reflector System for Ham Radio Operators.'; // Meta Tag Values, useful for Search Engines
$PageOptions['MetaKeywords'] = 'Ham Radio, M17, XReflector, '; // Meta Tag Values, useful for Search Engines
$PageOptions['MetaAuthor'] = 'N7TAE'; // Meta Tag Values, useful for Search Engines
$PageOptions['MetaAuthor'] = 'N7TAE, KC1AWV'; // Meta Tag Values, useful for Search Engines
$PageOptions['MetaRevisit'] = 'After 30 Days'; // Meta Tag Values, useful for Search Engines
$PageOptions['MetaRobots'] = 'index,follow'; // Meta Tag Values, useful for Search Engines
@ -55,6 +57,7 @@ $PageOptions['UserPage']['ShowFilter'] = true;
$Service['PIDFile'] = '/var/run/mrefd.pid';
$Service['XMLFile'] = '/var/log/mrefd.xml';
/* Do we really want to keep this? Let's disable it for now.
$CallingHome['Active'] = false; // xlx phone home, true or false
$CallingHome['MyDashBoardURL'] = 'http://your_dashboard'; // dashboard url
$CallingHome['ServerURL'] = 'http://xlxapi.rlx.lu/api.php'; // database server, do not change !!!!
@ -64,7 +67,7 @@ $CallingHome['Comment'] = "your_comment";
$CallingHome['HashFile'] = "/tmp/callinghome.php"; // Make sure the apache user has read and write permissions in this folder.
$CallingHome['OverrideIPAddress'] = ""; // Insert your IP address here. Leave blank for autodetection. No need to enter a fake address.
$CallingHome['InterlinkFile'] = "/usr/local/etc/mrefd.linklist"; // Path to interlink file
*/
/*
include an extra config file for people who dont like to mess with shipped config.inc.php

View File

@ -1,17 +1,17 @@
<table class="table table-striped table-hover">
<table class="table table-sm table-striped table-hover">
<tr class="table-center">
<th class="col-md-1">#</th>
<th class="col-md-1">Flag</th>
<th class="col-md-2">DV Station</th>
<th class="col-md-1">Band</th>
<th class="col-md-2">Last Heard</th>
<th class="col-md-2">Linked for</th>
<th class="col-md-1">Protocol</th>
<th class="col-md-1">Module</th><?php
<th>#</th>
<th>Flag</th>
<th>DV Station</th>
<th>Band</th>
<th>Last Heard</th>
<th>Linked for</th>
<th>Protocol</th>
<th>Module</th><?php
if ($PageOptions['RepeatersPage']['IPModus'] != 'HideIP') {
echo '
<th class="col-md-1">IP</th>';
<th>IP</th>';
}
?>
@ -25,8 +25,8 @@ for ($i=0;$i<$Reflector->NodeCount();$i++) {
<td>'.($i+1).'</td>
<td>';
list ($Flag, $Name) = $Reflector->GetFlag($Reflector->Nodes[$i]->GetCallSign());
if (file_exists("./images/flags/".$Flag.".png")) {
echo '<a href="#" class="tip"><img src="./images/flags/'.$Flag.'.png" class="table-flag" alt="'.$Name.'"><span>'.$Name.'</span></a>';
if (file_exists("./images/flags/".$Flag.".svg")) {
echo '<a href="#" class="tip"><img src="./images/flags/'.$Flag.'.svg" class="table-flag" alt="'.$Name.'"><span>'.$Name.'</span></a>';
}
echo '</td>
<td><a href="http://www.aprs.fi/'.$Reflector->Nodes[$i]->GetCallSign();

View File

@ -47,162 +47,142 @@ if (isset($_GET['do'])) {
?>
<div class="row">
<div class="col-md-9">
<table class="table table-striped table-hover">
<?php
if ($PageOptions['UserPage']['ShowFilter']) {
echo '
<tr>
<th colspan="8">
<table width="100%" border="0">
<tr>
<td align="left">
<form name="frmFilterCallSign" method="post" action="./index.php">
<input type="hidden" name="do" value="SetFilter" />
<input type="text" class="FilterField" value="'.$_SESSION['FilterCallSign'].'" name="txtSetCallsignFilter" placeholder="Callsign" onfocus="SuspendPageRefresh();" onblur="setTimeout(ReloadPage, '.$PageOptions['PageRefreshDelay'].');" />
<input type="submit" value="Apply" class="FilterSubmit" />
</form>
</td>';
if (($_SESSION['FilterModule'] != null) || ($_SESSION['FilterCallSign'] != null)) {
echo '
<td><a href="./index.php?do=resetfilter" class="smalllink">Disable filters</a></td>';
}
echo '
<td align="right" style="padding-right:3px;">
<form name="frmFilterModule" method="post" action="./index.php">
<input type="hidden" name="do" value="SetFilter" />
<input type="text" class="FilterField" value="'.$_SESSION['FilterModule'].'" name="txtSetModuleFilter" placeholder="Module" onfocus="SuspendPageRefresh();" onblur="setTimeout(ReloadPage, '.$PageOptions['PageRefreshDelay'].');" />
<input type="submit" value="Apply" class="FilterSubmit" />
</form>
</td>
</table>
</th>
</tr>';
}
?>
<div class="col-md-9">
<table class="table table-sm table-striped table-hover">
<?php
if ($PageOptions['UserPage']['ShowFilter']) {
echo '
<tr>
<th colspan="8">
<table width="100%" border="0">
<tr>
<td align="left">
<form name="frmFilterCallSign" method="post" action="./index.php">
<input type="hidden" name="do" value="SetFilter" />
<input type="text" class="FilterField" value="'.$_SESSION['FilterCallSign'].'" name="txtSetCallsignFilter" placeholder="Callsign" onfocus="SuspendPageRefresh();" onblur="setTimeout(ReloadPage, '.$PageOptions['PageRefreshDelay'].');" />
<input type="submit" value="Apply" class="FilterSubmit" />
</form>
</td>';
if (($_SESSION['FilterModule'] != null) || ($_SESSION['FilterCallSign'] != null)) {
echo '
<td><a href="./index.php?do=resetfilter" class="smalllink">Disable filters</a></td>';
}
echo '
<td align="right" style="padding-right:3px;">
<form name="frmFilterModule" method="post" action="./index.php">
<input type="hidden" name="do" value="SetFilter" />
<input type="text" class="FilterField" value="'.$_SESSION['FilterModule'].'" name="txtSetModuleFilter" placeholder="Module" onfocus="SuspendPageRefresh();" onblur="setTimeout(ReloadPage, '.$PageOptions['PageRefreshDelay'].');" />
<input type="submit" value="Apply" class="FilterSubmit" />
</form>
</td>
</table>
</th>
</tr>';
}
?>
<tr class="table-center">
<th class="col-md-1">#</th>
<th class="col-md-1">Flag</th>
<th class="col-md-2">Callsign</th>
<th class="col-md-2">Suffix</th>
<th class="col-md-1">DPRS</th>
<th class="col-md-2">Via / Peer</th>
<th class="col-md-2">Last heard</th>
<th class="col-md-1"><img src="./images/ear.png" alt="Listening on" /></th>
<th>#</th>
<th>Flag</th>
<th>Callsign</th>
<th>Suffix</th>
<th>DPRS</th>
<th>Via / Peer</th>
<th>Last heard (UTC)</th>
<th><img src="./images/ear.png" alt="Listening on" /></th>
</tr>
<?php
$Reflector->LoadFlags();
for ($i=0;$i<$Reflector->StationCount();$i++) {
$ShowThisStation = true;
if ($PageOptions['UserPage']['ShowFilter']) {
$CS = true;
if ($_SESSION['FilterCallSign'] != null) {
if (!fnmatch($_SESSION['FilterCallSign'], $Reflector->Stations[$i]->GetCallSign(), FNM_CASEFOLD)) {
$CS = false;
<?php
$Reflector->LoadFlags();
for ($i=0;$i<$Reflector->StationCount();$i++) {
$ShowThisStation = true;
if ($PageOptions['UserPage']['ShowFilter']) {
$CS = true;
if ($_SESSION['FilterCallSign'] != null) {
if (!fnmatch($_SESSION['FilterCallSign'], $Reflector->Stations[$i]->GetCallSign(), FNM_CASEFOLD)) {
$CS = false;
}
}
$MO = true;
if ($_SESSION['FilterModule'] != null) {
if (trim(strtolower($_SESSION['FilterModule'])) != strtolower($Reflector->Stations[$i]->GetModule())) {
$MO = false;
}
}
$ShowThisStation = ($CS && $MO);
}
if ($ShowThisStation) {
echo '
<tr class="table-center">
<td>';
if ($i == 0 && $Reflector->Stations[$i]->GetLastHeardTime() > (time() - 60)) {
echo '<img src="./images/tx.gif" style="margin-top:3px;" height="20"/>';
} else {
echo($i + 1);
}
echo '</td>
<td>';
list ($Flag, $Name) = $Reflector->GetFlag($Reflector->Stations[$i]->GetCallSign());
if (file_exists("./images/flags/" . $Flag . ".svg")) {
echo '<a href="#" class="tip"><img src="./images/flags/' . $Flag . '.svg" class="table-flag" alt="' . $Name . '"><span>' . $Name . '</span></a>';
}
echo '</td>
<td><a href="https://www.qrz.com/db/' . $Reflector->Stations[$i]->GetCallsignOnly() . '" class="pl" target="_blank">' . $Reflector->Stations[$i]->GetCallsignOnly() . '</a></td>
<td>' . $Reflector->Stations[$i]->GetSuffix() . '</td>
<td><a href="http://www.aprs.fi/' . $Reflector->Stations[$i]->GetCallsignOnly() . '" class="pl" target="_blank"><img src="./images/sat.png" alt=""></a></td>
<td>' . $Reflector->Stations[$i]->GetVia();
if ($Reflector->Stations[$i]->GetPeer() != $Reflector->GetReflectorName()) {
echo ' / ' . $Reflector->Stations[$i]->GetPeer();
}
echo '</td>
<td>' . @date("d.m.Y H:i", $Reflector->Stations[$i]->GetLastHeardTime()) . '</td>
<td>' . $Reflector->Stations[$i]->GetModule() . '</td>
</tr>';
}
if ($i == $PageOptions['LastHeardPage']['LimitTo']) {
$i = $Reflector->StationCount() + 1;
}
}
}
$MO = true;
if ($_SESSION['FilterModule'] != null) {
if (trim(strtolower($_SESSION['FilterModule'])) != strtolower($Reflector->Stations[$i]->GetModule())) {
$MO = false;
?>
</table>
</div>
<div class="col-md-3">
<?php echo '<a href="' . $PageOptions['Homepage'] . '"><img class="mx-auto d-none d-md-block" src="./images/' . $PageOptions['Logo'] . '" width="50%"></a>'; ?>
<!-- <a href="https://m17project.org"><img class="mx-auto d-none d-md-block" src="./images/m17_logo.svg" width="50%"></a> -->
<table class="table table-sm table-striped table-hover">
<?php
$Modules = $Reflector->GetModules();
sort($Modules, SORT_STRING);
echo '<tr>';
for ($i=0;$i<count($Modules);$i++) {
if (isset($PageOptions['ModuleNames'][$Modules[$i]])) {
echo '<th>'.$PageOptions['ModuleNames'][$Modules[$i]];
if (trim($PageOptions['ModuleNames'][$Modules[$i]]) != "") {
echo '<br />';
}
echo $Modules[$i].'</th>';
} else {
echo '
<th>'.$Modules[$i].'</th>';
}
}
}
$ShowThisStation = ($CS && $MO);
}
if ($ShowThisStation) {
echo '
<tr class="table-center">
<td>';
if ($i == 0 && $Reflector->Stations[$i]->GetLastHeardTime() > (time() - 60)) {
echo '<img src="./images/tx.gif" style="margin-top:3px;" height="20"/>';
} else {
echo($i + 1);
}
echo '</td>
<td>';
list ($Flag, $Name) = $Reflector->GetFlag($Reflector->Stations[$i]->GetCallSign());
if (file_exists("./images/flags/" . $Flag . ".svg")) {
echo '<a href="#" class="tip"><img src="./images/flags/' . $Flag . '.svg" class="table-flag" alt="' . $Name . '"><span>' . $Name . '</span></a>';
}
echo '</td>
<td><a href="https://www.qrz.com/db/' . $Reflector->Stations[$i]->GetCallsignOnly() . '" class="pl" target="_blank">' . $Reflector->Stations[$i]->GetCallsignOnly() . '</a></td>
<td>' . $Reflector->Stations[$i]->GetSuffix() . '</td>
<td><a href="http://www.aprs.fi/' . $Reflector->Stations[$i]->GetCallsignOnly() . '" class="pl" target="_blank"><img src="./images/sat.png" alt=""></a></td>
<td>' . $Reflector->Stations[$i]->GetVia();
if ($Reflector->Stations[$i]->GetPeer() != $Reflector->GetReflectorName()) {
echo ' / ' . $Reflector->Stations[$i]->GetPeer();
}
echo '</td>
<td>' . @date("d.m.Y H:i", $Reflector->Stations[$i]->GetLastHeardTime()) . '</td>
<td>' . $Reflector->Stations[$i]->GetModule() . '</td>
</tr>';
}
if ($i == $PageOptions['LastHeardPage']['LimitTo']) {
$i = $Reflector->StationCount() + 1;
}
}
?>
</table>
</div>
<div class="col-md-3">
<a href="https://m17project.org"><img class="hidden-xs hidden-sm" src="./images/m17_logo.svg" width="100%"></a>
<table class="table table-striped table-hover">
<?php
$Modules = $Reflector->GetModules();
sort($Modules, SORT_STRING);
echo '<tr>';
for ($i=0;$i<count($Modules);$i++) {
if (isset($PageOptions['ModuleNames'][$Modules[$i]])) {
echo '<th>'.$PageOptions['ModuleNames'][$Modules[$i]];
if (trim($PageOptions['ModuleNames'][$Modules[$i]]) != "") {
echo '<br />';
}
echo $Modules[$i].'</th>';
}
else {
echo '
<th>'.$Modules[$i].'</th>';
}
}
echo '</tr><tr>';
$GlobalPositions = array();
for ($i=0;$i<count($Modules);$i++) {
$Users = $Reflector->GetNodesInModulesByID($Modules[$i]);
echo '<td><table class="table table-hover">';
$UserCheckedArray = array();
for ($j=0;$j<count($Users);$j++) {
$Displayname = $Reflector->GetCallsignAndSuffixByID($Users[$j]);
echo '
<tr>
<td><a href="http://www.aprs.fi/'.$Displayname.'" class="pl" target="_blank">'.$Displayname.'</a> </td>
</tr>';
$UserCheckedArray[] = $Users[$j];
}
echo '</table></td>';
}
echo '</tr>';
?>
</table>
</div>
echo '</tr><tr>';
$GlobalPositions = array();
for ($i=0;$i<count($Modules);$i++) {
$Users = $Reflector->GetNodesInModulesByID($Modules[$i]);
echo '<td><table class="table table-hover">';
$UserCheckedArray = array();
for ($j=0;$j<count($Users);$j++) {
$Displayname = $Reflector->GetCallsignAndSuffixByID($Users[$j]);
echo '
<tr>
<td><a href="http://www.aprs.fi/'.$Displayname.'" class="pl" target="_blank">'.$Displayname.'</a> </td>
</tr>';
$UserCheckedArray[] = $Users[$j];
}
echo '</table></td>';
}
echo '</tr>';
?>
</table>
</div>
</div>

120
index.php
View File

@ -6,6 +6,8 @@
* The dashboard is based of the Bootstrap dashboard template.
*
* This code is further edited by KC1AWV for the M17 Reflector M17-M17
*
* version 1.1.0 - Bootstrap 4.5
*/
if (file_exists("./include/functions.php")) {
@ -96,11 +98,13 @@ if ($CallingHome['Active']) {
<!-- Bootstrap core CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug
<link href="css/ie10-viewport-bug-workaround.css" rel="stylesheet">
-->
<!-- Custom styles for this template -->
<link href="css/dashboard.css" rel="stylesheet">
<link href="css/navbar-top-fixed.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
@ -147,82 +151,68 @@ if ($CallingHome['Active']) {
<?php if (file_exists("./tracking.php")) {
include_once("tracking.php");
} ?>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar"
aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<span class="navbar-brand"><?php echo $Reflector->GetReflectorName(); ?> Reflector | IPv4: <?php echo $PageOptions['IPV4']; ?> | IPv6: <?php echo $PageOptions['IPV6']; ?></span>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li class="navbar-info">mrefd v<?php echo $Reflector->GetVersion(); ?> - Dashboard
v<?php echo $PageOptions['DashboardVersion']; ?></li>
<li class="navbar-info">Service
uptime: <?php echo FormatSeconds($Reflector->GetServiceUptime()); ?></li>
</ul>
</div>
<nav class="navbar navbar-expand-lg navbar-dark fixed-top bg-dark">
<a class="navbar-brand" href="#"><?php echo $Reflector->GetReflectorName(); ?> Reflector</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbarCollapse" class="collapse navbar-collapse">
<ul class="navbar-nav mr-auto">
<li<?php echo (($_GET['show'] == "users") || ($_GET['show'] == "")) ? ' class="nav-item active"' : ''; ?>><a class="nav-link" href="./index.php">Last Heard</a></li>
<li<?php echo ($_GET['show'] == "repeaters") ? ' class="nav-item active"' : ''; ?>><a class="nav-link" href="./index.php?show=repeaters">Links (<?php echo $Reflector->NodeCount(); ?>)</a></li>
</ul>
<span class="navbar-text px-2">mrefd v<?php echo $Reflector->GetVersion(); ?> - Dashboard v<?php echo $PageOptions['DashboardVersion']; ?></span>
<span class="navbar-text px-2">Service uptime: <?php echo FormatSeconds($Reflector->GetServiceUptime()); ?></span>
</div>
</nav>
<div class="container-fluid">
<div class="row">
<div class="col-sm-3 col-md-2 sidebar">
<ul class="nav nav-sidebar">
<li<?php echo (($_GET['show'] == "users") || ($_GET['show'] == "")) ? ' class="active"' : ''; ?>><a
href="./index.php">Last Heard</a></li>
<li<?php echo ($_GET['show'] == "repeaters") ? ' class="active"' : ''; ?>><a
href="./index.php?show=repeaters">Links (<?php echo $Reflector->NodeCount(); ?>)</a></li>
</ul>
</div>
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<?php
if ($CallingHome['Active']) {
if (!is_readable($CallingHome['HashFile']) && (!is_writeable($CallingHome['HashFile']))) {
echo '
<div class="error">
your private hash in ' . $CallingHome['HashFile'] . ' could not be created, please check your config file and the permissions for the defined folder.
</div>';
<main role="main">
<div class="container-fluid">
<div class="row">
<?php
/* Do we really want to keep calling home?
if ($CallingHome['Active']) {
if (!is_readable($CallingHome['HashFile']) && (!is_writeable($CallingHome['HashFile']))) {
echo '
<div class="error">
your private hash in ' . $CallingHome['HashFile'] . ' could not be created, please check your config file and the permissions for the defined folder.
</div>';
}
}
*/
switch ($_GET['show']) {
case 'users' :
require_once("./include/users.php");
break;
case 'repeaters' :
require_once("./include/repeaters.php");
break;
default :
require_once("./include/users.php");
}
}
switch ($_GET['show']) {
case 'users' :
require_once("./include/users.php");
break;
case 'repeaters' :
require_once("./include/repeaters.php");
break;
default :
require_once("./include/users.php");
}
?>
?>
</div>
</div>
</div>
<footer class="footer">
<div class="container">
<p><a href="mailto:<?php echo $PageOptions['ContactEmail']; ?>"><?php echo $PageOptions['ContactEmail']; ?></a>
</p>
</div>
</main>
<footer class="container-fluid">
<nav class="navbar navbar-expand-lg navbar-light fixed-bottom" style="background-color: #e3f2fd;">
<div id="navbarCollapse" class="collapse navbar-collapse">
<span class="navbar-text px-2">IPv4: <?php echo $PageOptions['IPV4']; ?></span>
<span class="navbar-text px-2">IPv6: <?php echo $PageOptions['IPV6']; ?></span>
</div>
<span class="navbar-text px-2"><a href="mailto:<?php echo $PageOptions['ContactEmail']; ?>">Sysop Email: <?php echo $PageOptions['ContactEmail']; ?></a></span>
</nav>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js" integrity="sha512-bLT0Qm9VnAYZDflyKcBaQ2gg0hSYNQrJ8RilYldYQ1FxQYoCLtUjuuRuZo+fjqhx/qtq/1itJ0C2ejDxltZVFg==" crossorigin="anonymous"></script>
<!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> -->
<script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script>
<script src="js/bootstrap.min.js"></script>
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<script src="js/bootstrap.bundle.min.js"></script>
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug
<script src="js/ie10-viewport-bug-workaround.js"></script>
-->
</body>
</html>

7
js/bootstrap.bundle.min.js vendored 100644

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

7
js/bootstrap.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1,23 +0,0 @@
/*!
* IE10 viewport hack for Surface/desktop Windows 8 bug
* Copyright 2014-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
// See the Getting Started docs for more information:
// http://getbootstrap.com/getting-started/#support-ie10-width
(function () {
'use strict';
if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
var msViewportStyle = document.createElement('style')
msViewportStyle.appendChild(
document.createTextNode(
'@-ms-viewport{width:auto!important}'
)
)
document.querySelector('head').appendChild(msViewportStyle)
}
})();