mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 11:15:07 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			325 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			325 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable file
		
	
	
	
	
<!DOCTYPE html>
 | 
						|
 | 
						|
<html class="is-clipped">
 | 
						|
<head>
 | 
						|
    <meta charset="utf-8">
 | 
						|
    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
						|
 | 
						|
    <title>RiV-nesh</title>
 | 
						|
    <link rel="stylesheet" href="https://maxst.icons8.com/vue-static/landings/line-awesome/font-awesome-line-awesome/css/all.min.css" type="text/css">
 | 
						|
    <link rel="stylesheet" href="https://unpkg.com/bulmaswatch/slate/bulmaswatch.min.css" type="text/css">
 | 
						|
    <script>
 | 
						|
      
 | 
						|
    function setFieldValue(id, value){
 | 
						|
        var field = document.getElementById(id);
 | 
						|
        field.innerHTML = value;
 | 
						|
    }
 | 
						|
 | 
						|
    function openTab(element, tabName) {
 | 
						|
        // Declare all variables
 | 
						|
        var i, tabContent, tabLinks;
 | 
						|
    
 | 
						|
        // Get all elements with class="content" and hide them
 | 
						|
        tabContent = document.getElementsByClassName("tab here");
 | 
						|
        for (i = 0; i < tabContent.length; i++) {
 | 
						|
            tabContent[i].className = "tab here is-hidden";
 | 
						|
        }
 | 
						|
    
 | 
						|
        // Get all elements with class="tab" and remove the class "is-active"
 | 
						|
        tabLinks = document.getElementsByClassName("tab is-active");
 | 
						|
        for (i = 0; i < tabLinks.length; i++) {
 | 
						|
            tabLinks[i].className = "tab";
 | 
						|
        }
 | 
						|
    
 | 
						|
        // Show the current tab, and add an "is-active" class to the button that opened the tab
 | 
						|
        document.getElementById(tabName).className = "tab here";
 | 
						|
        element.parentElement.className = "tab is-active";
 | 
						|
        refreshRecordsList();
 | 
						|
    };
 | 
						|
    
 | 
						|
    function copy2clipboard(text){
 | 
						|
      var textArea = document.createElement("textarea");
 | 
						|
      textArea.style.position = 'fixed';
 | 
						|
      textArea.style.top = 0;
 | 
						|
      textArea.style.left = 0;
 | 
						|
    
 | 
						|
      // Ensure it has a small width and height. Setting to 1px / 1em
 | 
						|
      // doesn't work as this gives a negative w/h on some browsers.
 | 
						|
      textArea.style.width = '2em';
 | 
						|
      textArea.style.height = '2em';
 | 
						|
    
 | 
						|
      // We don't need padding, reducing the size if it does flash render.
 | 
						|
      textArea.style.padding = 0;
 | 
						|
    
 | 
						|
      // Clean up any borders.
 | 
						|
      textArea.style.border = 'none';
 | 
						|
      textArea.style.outline = 'none';
 | 
						|
      textArea.style.boxShadow = 'none';
 | 
						|
    
 | 
						|
      // Avoid flash of the white box if rendered for any reason.
 | 
						|
      textArea.style.background = 'transparent';
 | 
						|
      textArea.value = text;
 | 
						|
 | 
						|
      document.body.appendChild(textArea);
 | 
						|
      textArea.focus();
 | 
						|
      textArea.select();
 | 
						|
      try {
 | 
						|
        var successful = document.execCommand('copy');
 | 
						|
        var msg = successful ? 'successful' : 'unsuccessful';
 | 
						|
        console.log('Copying text command was ' + msg);
 | 
						|
      } catch (err) {
 | 
						|
        console.log('Oops, unable to copy');
 | 
						|
      }
 | 
						|
      document.body.removeChild(textArea);
 | 
						|
      showInfo('value copied successfully!');
 | 
						|
    };
 | 
						|
    
 | 
						|
    function showInfo(text) {
 | 
						|
        var info = document.getElementById("notification_info");
 | 
						|
        var message = document.getElementById("info_text");
 | 
						|
        message.innerHTML = text;
 | 
						|
    
 | 
						|
        info.className = "notification is-primary";
 | 
						|
        var button = document.getElementById("info_close");
 | 
						|
        button.onclick = function() {
 | 
						|
            message.value = "";
 | 
						|
            info.className = "notification is-primary is-hidden";
 | 
						|
        };
 | 
						|
        setTimeout(button.onclick, 2000);
 | 
						|
    };
 | 
						|
    
 | 
						|
    function showWindow(text) {
 | 
						|
        var info = document.getElementById("notification_window");
 | 
						|
        var message = document.getElementById("info_text");
 | 
						|
        message.innerHTML = text;
 | 
						|
    
 | 
						|
        info.className = "notification is-primary";
 | 
						|
        var button = document.getElementById("info_close");
 | 
						|
        button.onclick = function() {
 | 
						|
            message.value = "";
 | 
						|
            info.className = "notification is-primary is-hidden";
 | 
						|
        };
 | 
						|
    };
 | 
						|
    
 | 
						|
	function getPeerList(){
 | 
						|
	    var xhr = new XMLHttpRequest();
 | 
						|
	    xhr.open("GET", 'http://192.168.1.106:8080/rest/peers.json', false);
 | 
						|
	    xhr.send(null);
 | 
						|
	    if (xhr.status === 200) {
 | 
						|
		const peerList = JSON.parse(xhr.responseText);
 | 
						|
		add_table(peerList);
 | 
						|
	    }
 | 
						|
	};
 | 
						|
	
 | 
						|
function add_table(peerList) {
 | 
						|
  const countries = Object.keys(peerList);
 | 
						|
  // get the reference for the body
 | 
						|
  var body = document.createElement("div");
 | 
						|
 | 
						|
  // creates a <table> element and a <tbody> element
 | 
						|
  var tbl = document.createElement("table");
 | 
						|
  //tbl.setAttribute('cellpadding', '10');
 | 
						|
  var tblBody = document.createElement("tbody");
 | 
						|
 | 
						|
  // creating all cells
 | 
						|
  for (var c in peerList) {
 | 
						|
    for (peer in peerList[c]){
 | 
						|
    // creates a table row
 | 
						|
    var row = document.createElement("tr");
 | 
						|
    var peerAddress = document.createElement("td");
 | 
						|
    var cellText = document.createTextNode(peer);
 | 
						|
    peerAddress.appendChild(cellText);
 | 
						|
    var peerSelect = document.createElement("td");
 | 
						|
    var chk = document.createElement('input');
 | 
						|
    chk.setAttribute('type', 'checkbox');
 | 
						|
    peerSelect.appendChild(chk);
 | 
						|
    row.appendChild(peerAddress);
 | 
						|
    row.appendChild(peerSelect);
 | 
						|
    tblBody.appendChild(row);
 | 
						|
  }
 | 
						|
}
 | 
						|
  // put the <tbody> in the <table>
 | 
						|
  tbl.appendChild(tblBody);
 | 
						|
  // appends <table> into <body>
 | 
						|
  body.appendChild(tbl);
 | 
						|
  // sets the border attribute of tbl to 2;
 | 
						|
  //tbl.setAttribute("border", "0");
 | 
						|
  showWindow(body.innerHTML);
 | 
						|
};
 | 
						|
 | 
						|
        
 | 
						|
    </script>
 | 
						|
    <style>
 | 
						|
          
 | 
						|
    .container-ip {
 | 
						|
    
 | 
						|
      display: flex;
 | 
						|
      border: 1px solid #5d656d;
 | 
						|
      border-radius: 4px;
 | 
						|
      margin:10px;
 | 
						|
    }
 | 
						|
    
 | 
						|
    .push-right {
 | 
						|
      margin-left: auto;
 | 
						|
    }
 | 
						|
    
 | 
						|
    .item {
 | 
						|
      padding: 10px;
 | 
						|
      /*border: 1px solid #5d656d;*/
 | 
						|
      
 | 
						|
    }
 | 
						|
    
 | 
						|
    .column {
 | 
						|
      max-height: 350px;
 | 
						|
      
 | 
						|
      display: flex;
 | 
						|
      flex-direction: column;
 | 
						|
      justify-content: space-between;
 | 
						|
    }
 | 
						|
    
 | 
						|
    .over {
 | 
						|
      max-height: 150px;
 | 
						|
      overflow: auto;
 | 
						|
    }
 | 
						|
    
 | 
						|
    .container{
 | 
						|
        position: relative;
 | 
						|
    }
 | 
						|
    
 | 
						|
    .box{
 | 
						|
        width: 100%;
 | 
						|
        height: 100px;
 | 
						|
        position: absolute;
 | 
						|
        top: 0;
 | 
						|
        left: 0;
 | 
						|
        background: rgba(0, 0, 0, 0.0);
 | 
						|
    }
 | 
						|
 | 
						|
    .stack-top{
 | 
						|
        z-index: 9;
 | 
						|
        margin: 10px; /* for demo purpose  */
 | 
						|
	background: rgba(255, 0, 0, 1);
 | 
						|
    }
 | 
						|
    
 | 
						|
    th, td {
 | 
						|
	  padding: 5px;
 | 
						|
    }
 | 
						|
 | 
						|
    </style>
 | 
						|
</head>
 | 
						|
 | 
						|
<body onload="onLoad();">
 | 
						|
   <div style="padding:3px; max-height: 250px;">
 | 
						|
   <div class="box">
 | 
						|
 | 
						|
        <div style="z-index: 9;" class="box stack-top notification is-primary is-hidden" id="notification_window">
 | 
						|
              <button class="delete" id="info_close"></button>
 | 
						|
              <p style="padding:3px; max-height: 250px; overflow-y: auto;" id="info_text"></p>
 | 
						|
        <div style="padding-left:100px; padding-top:15px;" class="field is-grouped" >      
 | 
						|
        <p class="control">
 | 
						|
          <a class="button is-success">
 | 
						|
          <span class="icon is-small">
 | 
						|
            <i class="fa fa-check"> </i>
 | 
						|
          </span>
 | 
						|
          <span> Save </span>
 | 
						|
        </a>
 | 
						|
        </p>
 | 
						|
        <p class="control">
 | 
						|
          <a class="button is-danger is-outlined">
 | 
						|
          <span> Cancel </span>
 | 
						|
          <span class="icon is-small">
 | 
						|
            <i class="fa fa-times"> </i>
 | 
						|
          </span>
 | 
						|
        </a>
 | 
						|
        </p>
 | 
						|
      
 | 
						|
        </div>
 | 
						|
	</div>
 | 
						|
    </div>
 | 
						|
        <!-- Tabs -->
 | 
						|
        <div class="tabs is-centered is-boxed">
 | 
						|
            <ul>
 | 
						|
                <li class="tab is-active">
 | 
						|
                    <a onclick="openTab(this, 'my_node');">
 | 
						|
                        <span class="icon">
 | 
						|
                          <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" width="1em" height="1em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 42 42"><path d="M18.5 35.5l-8 2c-.48.04-1 .52-1 1v1c0 .5.47 1 1 1h20c.43 0 1-.41 1-1v-1c-.02-.52-.55-.98-1-1l-8-2h-4zm19-1c2.59 0 3-.529 3-3v-26c0-2.391-.55-3-3-3h-34c-2.43 0-3 .54-3 3v26c0 2.51.529 3 3 3h34zm-2-27v22h-30v-22h30z" fill="white"/></svg>                           
 | 
						|
                        </span>
 | 
						|
                        <span>My Node</span>
 | 
						|
                    </a>
 | 
						|
                </li>
 | 
						|
                <li class="tab">
 | 
						|
                    <a onclick="openTab(this, 'keys');">
 | 
						|
                        <span class="icon">
 | 
						|
                            <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" width="1em" height="1em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><g fill="none" stroke="white" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M5 15v15h22V15zm4 0C9 9 9 5 16 5s7 4 7 10m-7 5v3"/><circle cx="16" cy="24" r="1"/></g></svg>
 | 
						|
                        </span>
 | 
						|
                        <span>Keys</span>
 | 
						|
                    </a>
 | 
						|
                </li>
 | 
						|
                <li class="tab">
 | 
						|
                    <a onclick="openTab(this, 'about');">
 | 
						|
                        <span class="icon">
 | 
						|
                            <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" width="1em" height="1em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 48 48"><path fill="#2196F3" d="M37 40H11l-6 6V12c0-3.3 2.7-6 6-6h26c3.3 0 6 2.7 6 6v22c0 3.3-2.7 6-6 6z"/><g fill="#fff"><path d="M22 20h4v11h-4z"/><circle cx="24" cy="15" r="2"/></g></svg>
 | 
						|
                        </span>
 | 
						|
                        <span>About</span>
 | 
						|
                    </a>
 | 
						|
                </li>
 | 
						|
            </ul>
 | 
						|
        </div>
 | 
						|
        
 | 
						|
 | 
						|
        <div class="tab here " id="my_node">
 | 
						|
          
 | 
						|
             <div class="column">
 | 
						|
                <div class="container-ip">
 | 
						|
                  <div class="item">IPv6</div>
 | 
						|
                  <div id="ipv6" class="item push-right">N/A</div>
 | 
						|
                  <div class="item">
 | 
						|
                    <a class="fas fa-copy" onclick="copy2clipboard(document.getElementById('ipv6').innerHTML);"/></a>
 | 
						|
                  </div>
 | 
						|
                </div>
 | 
						|
                
 | 
						|
                <div class="container-ip">
 | 
						|
                  <div class="item">Subnet</div>
 | 
						|
                  <div id="subnet" class="item push-right">N/A</div>
 | 
						|
                  <div class="item">
 | 
						|
                    <a class="fas fa-copy" onclick="copy2clipboard(document.getElementById('subnet').innerHTML);"></a>
 | 
						|
                  </div>
 | 
						|
                </div>
 | 
						|
                
 | 
						|
                <div class="container-ip">
 | 
						|
                
 | 
						|
                 <div class="item">Peers</div>
 | 
						|
                  <div id="peers" class="item over">
 | 
						|
 | 
						|
                  </div>
 | 
						|
                  <div class="item push-right">
 | 
						|
                    <a class="fas fa-edit" onclick="getPeerList();"></a>
 | 
						|
                  </div>
 | 
						|
 | 
						|
                </div>
 | 
						|
                
 | 
						|
             </div>
 | 
						|
        </div>
 | 
						|
        
 | 
						|
        <div class="tab here is-hidden" id="keys">
 | 
						|
    
 | 
						|
        </div>
 | 
						|
            
 | 
						|
 | 
						|
    </div>
 | 
						|
        
 | 
						|
    </div>
 | 
						|
    <div style="margin-left: 100px; margin-right: 100px;">
 | 
						|
        <div class="notification is-primary is-hidden" id="notification_info">
 | 
						|
              <button class="delete" id="info_close"></button>
 | 
						|
              <p id="info_text"></p>
 | 
						|
        </div>
 | 
						|
    </div>
 | 
						|
    <!--div style="width: 100%; padding: 20px; box-sizing: border-box;">
 | 
						|
                <div class="buttons">
 | 
						|
                    <a class="button">Save</a>
 | 
						|
                </div>
 | 
						|
    </div-->
 | 
						|
    
 | 
						|
</body>
 | 
						|
</html>
 |