Blame | Last modification | View Log | Download
<?php namespace ProcessWire;if(!defined("PROCESSWIRE")) die();/** @var AdminThemeUikit $adminTheme *//** @var Paths $urls *//** @var Config $config *//** @var WireInput $input *//** @var Sanitizer $sanitizer *//** @var Page $page *//** @var string $layout */// whether or not page tree should be used for left sidebar$treePaneLeft = $adminTheme->layout == 'sidenav-tree';$treePane = strpos($adminTheme->layout, 'sidenav-tree') === 0;// define location of panes$treePaneLocation = $treePaneLeft ? 'west' : 'east';$sidePaneLocation = $treePaneLeft ? 'east' : 'west';// URL for main pane$mainURL = $input->url(true);if(strpos($mainURL, 'layout=')) {$mainURL = preg_replace('/([&?]layout)=([-_a-zA-Z0-9]+)/', '$1=sidenav-main', $mainURL);} else {$mainURL .= (strpos($mainURL, '?') ? '&' : '?') . 'layout=sidenav-main';}$mainURL = $sanitizer->entities($mainURL);$themeURL = $adminTheme->url();// pane definition iframes$panes = array('main' => "<iframe id='pw-admin-main' name='main' class='pane ui-layout-center' " ."src='$mainURL?layout=sidenav-main'></iframe>",'side' => "<iframe id='pw-admin-side' name='side' class='pane ui-layout-$sidePaneLocation' " ."src='{$urls->admin}login/?layout=sidenav-side'></iframe>",'tree' => "<iframe id='pw-admin-tree' name='tree' class='pane ui-layout-$treePaneLocation' " ."src='{$urls->admin}page/?layout=sidenav-tree'></iframe>",);?><!DOCTYPE html><html class="pw" lang="<?php echo $adminTheme->_('en');/* this intentionally on a separate line */ ?>"><head><title></title><?php /* this title is populated dynamically by JS */ ?><meta http-equiv="content-type" content="text/html; charset=utf-8" /><meta name="robots" content="noindex, nofollow" /><meta name="google" content="notranslate" /><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" href="<?php echo $themeURL; ?>layout/source/stable/layout-default.css"><?php $adminTheme->includeFile('_head.php', array('layout' => $layout)); ?><style type='text/css'>html, body {width: 100%;height: 100%;padding: 0;margin: 0;overflow: auto; /* when page gets too small */}.pane {display: none; /* will appear when layout inits */}iframe {margin: 0;padding: 0;}.ui-layout-pane {padding: 0;}#pw-admin-head {overflow: visible;}</style><script src="<?php echo $themeURL; ?>layout/source/stable/jquery.layout.js"></script><script src="<?php echo $themeURL; ?>layout/source/stable/plugins/jquery.layout.state.js"></script></head><body class='pw-layout-sidenav-init'><?phpif($treePane) {echo "<div id='pw-admin-head'>";$adminTheme->includeFile('_masthead.php');echo "</div>";}?><div id='pw-layout-container' style='height: calc(100vh - 80px);'><?phpecho $panes['main'];echo $treePane ? $panes['tree'] : $panes['side'] . $panes['tree'];if($adminTheme->isLoggedIn) {$adminTheme->includeFile('_offcanvas.php');}?></div><script>var isPresent = true; // requiredvar mobileWidth = 959;function pwInitLayout() {var windowWidth = $(window).width();var sidePaneWidth = windowWidth / 4;var sidePaneMinWidth = 200;var treePaneWidth = windowWidth / 3;var treePaneMinWidth = 300;if(sidePaneWidth < sidePaneMinWidth) sidePaneWidth = sidePaneMinWidth;if(treePaneWidth < treePaneMinWidth) treePaneWidth = treePaneMinWidth;var layoutOptions = {resizable: true,slidable: true,closable: true,maskContents: true,applyDefaultStyles: false,fxName: 'none',stateManagement: {enabled: true,stateKeys: "west.size,east.size,west.isClosed,east.isClosed",autoLoad: true,autoSave: true},<?phpif($treePane) {echo "$treePaneLocation: { size: treePaneWidth },";} else {echo "$sidePaneLocation: { size: sidePaneWidth, initClosed: false },";echo "$treePaneLocation: { size: treePaneWidth, initClosed: true }";}?>};// determine if panes should be open or closed by default (depending on screen width)if(windowWidth < mobileWidth) {<?phpif($treePane) {echo "layoutOptions.$treePaneLocation.initClosed = true;";} else {echo "layoutOptions.$sidePaneLocation.initClosed = true;";echo "layoutOptions.$treePaneLocation.initClosed = true;";}?>}// initialize layoutvar layout = $('#pw-layout-container').layout(layoutOptions);// populate title and url from main pane to this window$('#pw-admin-main').on('load', function() {var main = $('#pw-admin-main')[0].contentWindow;var title = main.document.title;var href = main.location.href;if(href.search(/^http[s]?:\/\/<?php echo preg_quote($config->httpHost); ?>/i) !== 0) {console.log('Invalid main frame http host: ' + href);return;}if(href.indexOf('layout=')) {href = href.replace(/([?&]layout)=[-_a-z0-9]+/g, '');}window.history.pushState('obj', 'newtitle', href);$('title').text(title);});// window resize event to detect when sidebar(s) should be hidden for mobilevar lastWidth = 0;$(window).resize(function() {var width = $(window).width();if(width <= mobileWidth && (!lastWidth || lastWidth > mobileWidth)) {<?php echo "if(!layout.state.$sidePaneLocation.isClosed) layout.close('$sidePaneLocation');"; ?><?php echo "if(!layout.state.$treePaneLocation.isClosed) layout.close('$treePaneLocation');"; ?>} else if(lastWidth <= mobileWidth && width > mobileWidth) {<?php echo "if(layout.state.$sidePaneLocation.isClosed) layout.open('$sidePaneLocation');"; ?>}lastWidth = width;});// make any links in this file direct to the main pane$(document).on('mouseover', 'a', ProcessWireAdminTheme.linkTargetMainMouseoverEvent);// update the uk-active state of top navigation, since this pane doesn't reload$(document).on('mousedown', 'a', function() {var $a = $(this);$('li.uk-active').removeClass('uk-active');$a.parents('li').each(function() {$(this).addClass('uk-active');var $a = $(this).children('a');var from = $a.attr('data-from');if(from) $('#' + from).parent('li').addClass('uk-active');});});// collapse offcanvas nav when link within it clicked, if it changes the main pane URL$('#offcanvas-nav').on('click', 'a', function() {var t, w1 = $('#pw-admin-main')[0].contentWindow.document.location.href;if(!t) t = setTimeout(function() {var w2 = $('#pw-admin-main')[0].contentWindow.document.location.href;if(w1 != w2) $('#offcanvas-toggle').click(); // closet = false;}, 1000);});return layout;}var layout;$(document).ready(function() {layout = pwInitLayout();});/*** Are we currently at mobile width?**/function isMobileWidth() {var width = $(window).width();return width <= mobileWidth;}/*** Toggle navigation sidebar pane open/closed**/function toggleSidebarPane() {layout.toggle('<?php echo $sidePaneLocation; ?>');}/*** Toggle tree sidebar pane open/closed**/function toggleTreePane() {layout.toggle('<?php echo $treePaneLocation; ?>');}/*** Close the tree pane**/function closeTreePane() {if(!layout.state.<?php echo $treePaneLocation; ?>.isClosed) {layout.close('<?php echo $treePaneLocation; ?>');}}/*** Hide the tree pane**/function hideTreePane() {if(!layout.state.<?php echo $treePaneLocation; ?>.isHidden) {layout.hide('<?php echo $treePaneLocation; ?>');}}/*** Open the tree pane**/function openTreePane() {if(layout.state.<?php echo $treePaneLocation; ?>.isClosed) {layout.open('<?php echo $treePaneLocation; ?>');}}/*** Show the tree pane (if hidden)**/function showTreePane() {if(layout.state.<?php echo $treePaneLocation; ?>.isHidden) {layout.show('<?php echo $treePaneLocation; ?>');}}/*** Is the tree pane currently closed?**/function treePaneClosed() {<?php echo "return layout.state.$treePaneLocation.isClosed;"; ?>}/*** Is the tree pane currently hidden?**/function treePaneHidden() {<?php echo "return layout.state.$treePaneLocation.isHidden;"; ?>}/*** Is the sidebar pane currently closed?**/function sidebarPaneClosed() {<?php echo "return layout.state.$sidePaneLocation.isClosed;"; ?>}/*** Reload/refresh the tree pane, optionally for children of specific page ID** If page ID provided, it refreshes just children of that page ID.* If no argument provided, then it refreshes the entire pane.**/function refreshTreePane(pageID) {var pane = $('#pw-admin-tree')[0].contentWindow;if(typeof pageID == "undefined") {pane.location.reload(true);} else if(typeof pane.pageListRefresh != "undefined") {pane.pageListRefresh.refreshPage(pageID);}}</script></body></html>