mirror of
				https://github.com/ml-explore/mlx.git
				synced 2025-11-04 10:38:10 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			135 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
 @licstart  The following is the entire license notice for the JavaScript code in this file.
 | 
						|
 | 
						|
 The MIT License (MIT)
 | 
						|
 | 
						|
 Copyright (C) 1997-2020 by Dimitri van Heesch
 | 
						|
 | 
						|
 Permission is hereby granted, free of charge, to any person obtaining a copy of this software
 | 
						|
 and associated documentation files (the "Software"), to deal in the Software without restriction,
 | 
						|
 including without limitation the rights to use, copy, modify, merge, publish, distribute,
 | 
						|
 sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
 | 
						|
 furnished to do so, subject to the following conditions:
 | 
						|
 | 
						|
 The above copyright notice and this permission notice shall be included in all copies or
 | 
						|
 substantial portions of the Software.
 | 
						|
 | 
						|
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
 | 
						|
 BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 | 
						|
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
 | 
						|
 DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
						|
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
						|
 | 
						|
 @licend  The above is the entire license notice for the JavaScript code in this file
 | 
						|
 */
 | 
						|
function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) {
 | 
						|
  function makeTree(data,relPath) {
 | 
						|
    let result='';
 | 
						|
    if ('children' in data) {
 | 
						|
      result+='<ul>';
 | 
						|
      for (let i in data.children) {
 | 
						|
        let url;
 | 
						|
        const link = data.children[i].url;
 | 
						|
        if (link.substring(0,1)=='^') {
 | 
						|
          url = link.substring(1);
 | 
						|
        } else {
 | 
						|
          url = relPath+link;
 | 
						|
        }
 | 
						|
        result+='<li><a href="'+url+'">'+
 | 
						|
                                data.children[i].text+'</a>'+
 | 
						|
                                makeTree(data.children[i],relPath)+'</li>';
 | 
						|
      }
 | 
						|
      result+='</ul>';
 | 
						|
    }
 | 
						|
    return result;
 | 
						|
  }
 | 
						|
  let searchBoxHtml;
 | 
						|
  if (searchEnabled) {
 | 
						|
    if (serverSide) {
 | 
						|
      searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+
 | 
						|
                 '<div class="left">'+
 | 
						|
                  '<form id="FSearchBox" action="'+relPath+searchPage+
 | 
						|
                    '" method="get"><span id="MSearchSelectExt"> </span>'+
 | 
						|
                  '<input type="text" id="MSearchField" name="query" value="" placeholder="'+search+
 | 
						|
                    '" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)"'+
 | 
						|
                    ' onblur="searchBox.OnSearchFieldFocus(false)"/>'+
 | 
						|
                  '</form>'+
 | 
						|
                 '</div>'+
 | 
						|
                 '<div class="right"></div>'+
 | 
						|
                '</div>';
 | 
						|
    } else {
 | 
						|
      searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+
 | 
						|
                 '<span class="left">'+
 | 
						|
                  '<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()"'+
 | 
						|
                     ' onmouseout="return searchBox.OnSearchSelectHide()"> </span>'+
 | 
						|
                  '<input type="text" id="MSearchField" value="" placeholder="'+search+
 | 
						|
                    '" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" '+
 | 
						|
                    'onblur="searchBox.OnSearchFieldFocus(false)" '+
 | 
						|
                    'onkeyup="searchBox.OnSearchFieldChange(event)"/>'+
 | 
						|
                 '</span>'+
 | 
						|
                 '<span class="right"><a id="MSearchClose" '+
 | 
						|
                  'href="javascript:searchBox.CloseResultsWindow()">'+
 | 
						|
                  '<img id="MSearchCloseImg" border="0" src="'+relPath+
 | 
						|
                  'search/close.svg" alt=""/></a>'+
 | 
						|
                 '</span>'+
 | 
						|
                '</div>';
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  $('#main-nav').before('<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>'+
 | 
						|
                        '<label class="main-menu-btn" for="main-menu-state">'+
 | 
						|
                        '<span class="main-menu-btn-icon"></span> '+
 | 
						|
                        'Toggle main menu visibility</label>'+
 | 
						|
                        '<span id="searchBoxPos1" style="position:absolute;right:8px;top:8px;height:36px;"></span>'+
 | 
						|
                        '</div>');
 | 
						|
  $('#main-nav').append(makeTree(menudata,relPath));
 | 
						|
  $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
 | 
						|
  if (searchBoxHtml) {
 | 
						|
    $('#main-menu').append('<li id="searchBoxPos2" style="float:right"></li>');
 | 
						|
  }
 | 
						|
  const $mainMenuState = $('#main-menu-state');
 | 
						|
  let prevWidth = 0;
 | 
						|
  if ($mainMenuState.length) {
 | 
						|
    const initResizableIfExists = function() {
 | 
						|
      if (typeof initResizable==='function') initResizable(treeview);
 | 
						|
    }
 | 
						|
    // animate mobile menu
 | 
						|
    $mainMenuState.change(function() {
 | 
						|
      const $menu = $('#main-menu');
 | 
						|
      let options = { duration: 250, step: initResizableIfExists };
 | 
						|
      if (this.checked) {
 | 
						|
        options['complete'] = () => $menu.css('display', 'block');
 | 
						|
        $menu.hide().slideDown(options);
 | 
						|
      } else {
 | 
						|
        options['complete'] = () => $menu.css('display', 'none');
 | 
						|
        $menu.show().slideUp(options);
 | 
						|
      }
 | 
						|
    });
 | 
						|
    // set default menu visibility
 | 
						|
    const resetState = function() {
 | 
						|
      const $menu = $('#main-menu');
 | 
						|
      const newWidth = $(window).outerWidth();
 | 
						|
      if (newWidth!=prevWidth) {
 | 
						|
        if ($(window).outerWidth()<768) {
 | 
						|
          $mainMenuState.prop('checked',false); $menu.hide();
 | 
						|
          $('#searchBoxPos1').html(searchBoxHtml);
 | 
						|
          $('#searchBoxPos2').hide();
 | 
						|
        } else {
 | 
						|
          $menu.show();
 | 
						|
          $('#searchBoxPos1').empty();
 | 
						|
          $('#searchBoxPos2').html(searchBoxHtml);
 | 
						|
          $('#searchBoxPos2').show();
 | 
						|
        }
 | 
						|
        if (typeof searchBox!=='undefined') {
 | 
						|
          searchBox.CloseResultsWindow();
 | 
						|
        }
 | 
						|
        prevWidth = newWidth;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    $(window).ready(function() { resetState(); initResizableIfExists(); });
 | 
						|
    $(window).resize(resetState);
 | 
						|
  }
 | 
						|
  $('#main-menu').smartmenus();
 | 
						|
}
 | 
						|
/* @license-end */
 |