core/src/www/head.inc

241 lines
8.3 KiB
PHP

<?php
function system_get_language_code() {
global $config;
$code = "en-US"; // Set default code.
// a language code, as per [RFC3066]
if (isset($config['system']['language'])) {
$language = $config['system']['language'];
$code = str_replace("_", "-", $language);
}
return $code;
}
// link menu system
$menu = new OPNsense\Base\Menu\MenuSystem();
$menuSystem = $menu->getItems($_SERVER['REQUEST_URI']);
/* XXX workaround for dashboard */
if (!isset($menuBreadcrumbs)) {
/* XXX generating breadcrumbs requires getItems() call */
$menuBreadcrumbs = $menu->getBreadcrumbs();
}
$themename = htmlspecialchars(get_current_theme());
$pagetitle = gentitle(array_reverse($menuBreadcrumbs), ' | ');
$pagetitle .= sprintf(' | %s.%s', $config['system']['hostname'], $config['system']['domain']);
?><!doctype html>
<!--[if IE 8 ]><html lang="<?=system_get_language_code();?>" class="ie ie8 lte9 lte8 no-js"><![endif]-->
<!--[if IE 9 ]><html lang="<?=system_get_language_code();?>" class="ie ie9 lte9 no-js"><![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--><html lang="<?=system_get_language_code();?>" class="no-js"><!--<![endif]-->
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="robots" content="index, follow, noodp, noydir" />
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta name="copyright" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<title><?= $pagetitle ?></title>
<!-- include (theme) style -->
<link href="/ui/themes/<?= $themename ?>/build/css/main.css" rel="stylesheet">
<!-- TODO: move to theme style -->
<style>
.menu-level-3-item {
font-size: 90%;
padding-left: 54px !important;
}
.typeahead {
overflow: hidden;
}
/** jquery-sortable styles **/
body.dragging, body.dragging * {
cursor: move !important;
}
.dragged {
position: absolute;
opacity: 0.5;
z-index: 2000;
}
ol.example li.placeholder {
position: relative;
}
ol.example li.placeholder:before {
position: absolute;
}
</style>
<!-- Favicon -->
<link href="/ui/themes/<?= $themename ?>/build/images/favicon.png" rel="shortcut icon">
<!-- Stylesheet for fancy select/dropdown -->
<link rel="stylesheet" type="text/css" href="/ui/themes/<?= $themename ?>/build/css/bootstrap-select.css">
<!-- bootstrap dialog -->
<link href="/ui/themes/<?= $themename ?>/build/css/bootstrap-dialog.css" rel="stylesheet" type="text/css" />
<!-- Font awesome -->
<link rel="stylesheet" href="/ui/css/font-awesome.min.css">
<!--[if lt IE 9]><script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js"></script><![endif]-->
<!-- nvd3 -->
<link rel="stylesheet" href="/ui/css/nv.d3.css">
<!-- datepicker css -->
<link href="/ui/css/bootstrap-datepicker3.min.css" rel="stylesheet">
<script>var theme = "<?= $themename ?>"; </script>
<!-- JQuery -->
<script type="text/javascript" src="/ui/js/jquery-1.12.0.min.js"></script>
<!-- Ticker used for notices-->
<script type="text/javascript" src="/javascript/ticker.js"></script>
<!-- datepicker -->
<script src="/ui/js/bootstrap-datepicker.min.js"></script>
<!-- d3 -->
<script type="text/javascript" src="/ui/js/d3.min.js"></script>
<!-- nvd3 -->
<script type="text/javascript" src="/ui/js/nv.d3.min.js"></script>
<!-- append some helper functions to integrate into the legacy code -->
<script type="text/javascript" src="/javascript/opnsense_legacy.js"></script>
<!-- opnsense non legacy helper functions -->
<script type="text/javascript" src="/ui/js/opnsense.js"></script>
<!-- Bootstrap type ahead -->
<script type="text/javascript" src="/ui/js/bootstrap3-typeahead.min.js"></script>
<script type="text/javascript">
//<![CDATA[
$( document ).ready(function() {
$('[data-toggle="tooltip"]').tooltip();
$("input").attr("autocomplete","off");
// hide empty menu items
$('#mainmenu > div > .collapse').each(function(){
// cleanup empty second level menu containers
$(this).find("div.collapse").each(function(){
if ($(this).children().length == 0 ) {
$("#mainmenu").find('[href="#'+$(this).attr('id')+'"]').remove();
$(this).remove();
}
});
// cleanup empty first level menu items
if ($(this).children().length == 0) {
$("#mainmenu").find('[href="#'+$(this).attr('id')+'"]').remove();
}
});
// link showhelp class behavior
$("a[class='showhelp']").click(function (event) {
$("*[for='" + $(this).attr('id') + "']").toggleClass("hidden show");
event.preventDefault();
});
// handle all help messages show/hide
$('[id*="show_all_help"]').click(function(event) {
$('[id*="show_all_help"]').toggleClass("fa-toggle-on fa-toggle-off");
$('[id*="show_all_help"]').toggleClass("text-success text-danger");
if ($('[id*="show_all_help"]').hasClass("fa-toggle-on")) {
$('[for*="help_for"]').addClass("show");
$('[for*="help_for"]').removeClass("hidden");
} else {
$('[for*="help_for"]').addClass("hidden");
$('[for*="help_for"]').removeClass("show");
}
event.preventDefault();
});
// hide submenu items
$('#mainmenu .list-group-item').click(function(){
if($(this).attr('href').substring(0,1) == '#') {
$('#mainmenu .list-group-item').each(function(){
if ($(this).attr('aria-expanded') == 'true' && $(this).data('parent') != '#mainmenu') {
$("#"+$(this).attr('href').substring(1,999)).collapse('hide');
}
});
}
});
// hook in live menu search
$.ajax("/api/core/menu/search/", {
type: 'get',
cache: false,
dataType: "json",
data: {},
error : function (jqXHR, textStatus, errorThrown) {
console.log('menu.search : ' +errorThrown);
},
success: function (data) {
var menusearch_items = [];
$.each(data,function(idx, menu_item){
if (menu_item.Url != "") {
menusearch_items.push({id:menu_item.Url, name:menu_item.breadcrumb});
}
});
$("#menu_search_box").typeahead({
source: menusearch_items,
matcher: function (item) {
var ar = this.query.trim()
if (ar == "") {
return false;
}
ar = ar.toLowerCase().split(/\s+/);
if (ar.length == 0) {
return false;
}
var it = this.displayText(item).toLowerCase();
for (var i = 0; i < ar.length; i++) {
if (it.indexOf(ar[i]) == -1) {
return false;
}
}
return true;
},
afterSelect: function(item){
// (re)load page
if (window.location.href.split("#")[0].indexOf(item.id.split("#")[0]) > -1 ) {
// same url, different hash marker
window.location.href = item.id;
window.location.reload();
} else {
window.location.href = item.id;
}
}
});
}
});
// change search input size on focus() to fit results
$("#menu_search_box").focus(function(){
$("#menu_search_box").css('width', '450px');
$("#menu_messages").hide();
});
$("#menu_search_box").focusout(function(){
$("#menu_search_box").css('width', '250px');
$("#menu_messages").show();
});
// convert input form tables for better mobile experience
hook_stacked_form_tables(".opnsense_standard_table_form");
});
//]]>
</script>
</head>