github.com/jgarto/itcv@v0.0.0-20180826224514-4eea09c1aa0d/_vendor/src/golang.org/x/tools/godoc/static/play.js (about)

     1  // Copyright 2012 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  function initPlayground(transport) {
     6  	'use strict';
     7  
     8  	function text(node) {
     9  		var s = '';
    10  		for (var i = 0; i < node.childNodes.length; i++) {
    11  			var n = node.childNodes[i];
    12  			if (n.nodeType === 1) {
    13  				if (n.tagName === 'BUTTON') continue
    14  				if (n.tagName === 'SPAN' && n.className === 'number') continue;
    15  				if (n.tagName === 'DIV' || n.tagName == 'BR') {
    16  					s += "\n";
    17  				}
    18  				s += text(n);
    19  				continue;
    20  			}
    21  			if (n.nodeType === 3) {
    22  				s += n.nodeValue;
    23  			}
    24  		}
    25  		return s.replace('\xA0', ' '); // replace non-breaking spaces
    26  	}
    27  
    28  	// When presenter notes are enabled, the index passed
    29  	// here will identify the playground to be synced
    30  	function init(code, index) {
    31  		var output = document.createElement('div');
    32  		var outpre = document.createElement('pre');
    33  		var running;
    34  
    35  		if ($ && $(output).resizable) {
    36  			$(output).resizable({
    37  				handles: 	'n,w,nw',
    38  				minHeight:	27,
    39  				minWidth:	135,
    40  				maxHeight:	608,
    41  				maxWidth:	990
    42  			});
    43  		}
    44  
    45  		function onKill() {
    46  			if (running) running.Kill();
    47  			if (window.notesEnabled) updatePlayStorage('onKill', index);
    48  		}
    49  
    50  		function onRun(e) {
    51  			var sk = e.shiftKey || localStorage.getItem('play-shiftKey') === 'true';
    52  			if (running) running.Kill();
    53  			output.style.display = 'block';
    54  			outpre.innerHTML = '';
    55  			run1.style.display = 'none';
    56  			var options = {Race: sk};
    57  			running = transport.Run(text(code), PlaygroundOutput(outpre), options);
    58  			if (window.notesEnabled) updatePlayStorage('onRun', index, e);
    59  		}
    60  
    61  		function onClose() {
    62  			if (running) running.Kill();
    63  			output.style.display = 'none';
    64  			run1.style.display = 'inline-block';
    65  			if (window.notesEnabled) updatePlayStorage('onClose', index);
    66  		}
    67  
    68  		if (window.notesEnabled) {
    69  			playgroundHandlers.onRun.push(onRun);
    70  			playgroundHandlers.onClose.push(onClose);
    71  			playgroundHandlers.onKill.push(onKill);
    72  		}
    73  
    74  		var run1 = document.createElement('button');
    75  		run1.innerHTML = 'Run';
    76  		run1.className = 'run';
    77  		run1.addEventListener("click", onRun, false);
    78  		var run2 = document.createElement('button');
    79  		run2.className = 'run';
    80  		run2.innerHTML = 'Run';
    81  		run2.addEventListener("click", onRun, false);
    82  		var kill = document.createElement('button');
    83  		kill.className = 'kill';
    84  		kill.innerHTML = 'Kill';
    85  		kill.addEventListener("click", onKill, false);
    86  		var close = document.createElement('button');
    87  		close.className = 'close';
    88  		close.innerHTML = 'Close';
    89  		close.addEventListener("click", onClose, false);
    90  
    91  		var button = document.createElement('div');
    92  		button.classList.add('buttons');
    93  		button.appendChild(run1);
    94  		// Hack to simulate insertAfter
    95  		code.parentNode.insertBefore(button, code.nextSibling);
    96  
    97  		var buttons = document.createElement('div');
    98  		buttons.classList.add('buttons');
    99  		buttons.appendChild(run2);
   100  		buttons.appendChild(kill);
   101  		buttons.appendChild(close);
   102  
   103  		output.classList.add('output');
   104  		output.appendChild(buttons);
   105  		output.appendChild(outpre);
   106  		output.style.display = 'none';
   107  		code.parentNode.insertBefore(output, button.nextSibling);
   108  	}
   109  
   110  	var play = document.querySelectorAll('div.playground');
   111  	for (var i = 0; i < play.length; i++) {
   112  		init(play[i], i);
   113  	}
   114  }