1b18c2d1eSnia<?xml version="1.0" encoding="UTF-8"?> 2b18c2d1eSnia<svg version="1.1" baseProfile="full" width="606" height="406" 3b18c2d1eSnia xmlns="http://www.w3.org/2000/svg"> 4b18c2d1eSnia <style type="text/css"> 5b18c2d1eSnia rect { 6b18c2d1eSnia fill: #DDDDDD; 7b18c2d1eSnia stroke: #000000; 8b18c2d1eSnia stroke-width: 4; 9b18c2d1eSnia } 10b18c2d1eSnia rect.xwin { 11b18c2d1eSnia fill: #000000; 12b18c2d1eSnia } 13b18c2d1eSnia polyline { 14b18c2d1eSnia fill: none; 15b18c2d1eSnia stroke: #000000; 16b18c2d1eSnia } 17b18c2d1eSnia </style> 18b18c2d1eSnia 19b18c2d1eSnia <!-- Monitors --> 20b18c2d1eSnia <rect width="400" height="200" x="3" y="3" class="monitors" /> 21b18c2d1eSnia <text x="15" y="25" class="monlabel">Mon1</text> 22b18c2d1eSnia <rect width="200" height="400" x="403" y="3" class="monitors" /> 23b18c2d1eSnia <text x="585" y="25" text-anchor="end" class="monlabel">Mon2</text> 24b18c2d1eSnia 25b18c2d1eSnia <!-- Fill out the rest of the root --> 26b18c2d1eSnia <polyline points="2,202 2,404 402,404" class="monitors" 27b18c2d1eSnia style="stroke-width: 2; stroke-dasharray: 2,3;" /> 28b18c2d1eSnia <text x="15" y="385" class="monlabel">(dead space)</text> 29b18c2d1eSnia 30b18c2d1eSnia <!-- Horizontal stripes --> 31b18c2d1eSnia <rect width="600" height="200" x="3" y="3" class="hstripe" /> 32b18c2d1eSnia <text x="15" y="25" class="hslabel">Hstripe1</text> 33b18c2d1eSnia <rect width="200" height="200" x="403" y="203" class="hstripe" /> 34b18c2d1eSnia <text x="585" y="385" text-anchor="end" class="hslabel">Hstripe2</text> 35b18c2d1eSnia 36b18c2d1eSnia <!-- Vertical stripes --> 37b18c2d1eSnia <rect width="400" height="200" x="3" y="3" class="vstripe" /> 38b18c2d1eSnia <text x="15" y="25" class="vslabel">Vstripe1</text> 39b18c2d1eSnia <rect width="200" height="400" x="403" y="3" class="vstripe" /> 40b18c2d1eSnia <text x="585" y="385" text-anchor="end" class="vslabel">Vstripe2</text> 41b18c2d1eSnia 42b18c2d1eSnia <!-- A window to position --> 43b18c2d1eSnia <rect width="150" height="150" x="25" y="25" class="xwin" id="xwin" /> 44b18c2d1eSnia 45b18c2d1eSnia 46b18c2d1eSnia 47b18c2d1eSnia <!-- JSery to grub out query params --> 48b18c2d1eSnia <script type="text/javascript"><![CDATA[ 49b18c2d1eSnia // Parameters we expect and their defaults 50b18c2d1eSnia var params = { 51b18c2d1eSnia // Visibility 52b18c2d1eSnia v_monitors: 0, 53b18c2d1eSnia v_monlabel: 0, 54b18c2d1eSnia v_hstripe: 0, 55b18c2d1eSnia v_hslabel: 0, 56b18c2d1eSnia v_vstripe: 0, 57b18c2d1eSnia v_vslabel: 0, 58b18c2d1eSnia v_xwin: 0, 59b18c2d1eSnia 60b18c2d1eSnia // Opacity 61b18c2d1eSnia o_monitors: 1.0, 62b18c2d1eSnia o_hstripe: 1.0, 63b18c2d1eSnia o_vstripe: 1.0, 64b18c2d1eSnia o_xwin: 0.5, 65b18c2d1eSnia 66b18c2d1eSnia // Flying around xtra window 67b18c2d1eSnia g_xwin_w: 150, 68b18c2d1eSnia g_xwin_h: 150, 69b18c2d1eSnia g_xwin_x: 25, 70b18c2d1eSnia g_xwin_y: 25, 71b18c2d1eSnia }; 72b18c2d1eSnia 73b18c2d1eSnia // Stash keys 74b18c2d1eSnia var pkeys = Object.keys(params); 75b18c2d1eSnia 76b18c2d1eSnia // Params we were actually given (rather than defaulting) 77b18c2d1eSnia var qpset = {}; 78b18c2d1eSnia 79b18c2d1eSnia // Parse params 80b18c2d1eSnia (function() { 81b18c2d1eSnia var qstr = window.location.hash.substring(1); 82b18c2d1eSnia var xtr_re = /([^&=]+)=?([^&]*)/g; 83b18c2d1eSnia var unencode = function (s) { 84b18c2d1eSnia return decodeURIComponent(s.replace(/\+/g, " ")); 85b18c2d1eSnia }; 86b18c2d1eSnia var qv; 87b18c2d1eSnia 88b18c2d1eSnia while(qv = xtr_re.exec(qstr)) { 89b18c2d1eSnia if(typeof params[qv[1]] === 'undefined') { 90b18c2d1eSnia console.log("Unexpected param: " + qv[1]); 91b18c2d1eSnia continue; 92b18c2d1eSnia } 93b18c2d1eSnia 94b18c2d1eSnia params[unencode(qv[1])] = unencode(qv[2]); 95b18c2d1eSnia qpset[unencode(qv[1])] = 1; 96b18c2d1eSnia } 97b18c2d1eSnia })(); 98b18c2d1eSnia 99b18c2d1eSnia // Do some defaulting 100b18c2d1eSnia if(!qpset.v_monlabel) 101b18c2d1eSnia params.v_monlabel = params.v_monitors; 102b18c2d1eSnia if(!qpset.v_vslabel) 103b18c2d1eSnia params.v_vslabel = params.v_vstripe; 104b18c2d1eSnia if(!qpset.v_hslabel) 105b18c2d1eSnia params.v_hslabel = params.v_hstripe; 106b18c2d1eSnia 107b18c2d1eSnia function do_vis(fld) { 108b18c2d1eSnia var vis; 109b18c2d1eSnia 110b18c2d1eSnia // All vis params are v_ 111b18c2d1eSnia if(fld.indexOf('v_') !== 0) { 112b18c2d1eSnia return; 113b18c2d1eSnia } 114b18c2d1eSnia 115b18c2d1eSnia if(typeof params[fld] === 'undefined') 116b18c2d1eSnia return; 117b18c2d1eSnia if(params[fld] != 0) 118b18c2d1eSnia vis = 'visible'; 119b18c2d1eSnia else 120b18c2d1eSnia vis = 'hidden'; 121b18c2d1eSnia 122b18c2d1eSnia var elclass = fld.substring(2); 123b18c2d1eSnia var els = document.getElementsByClassName(elclass); 124b18c2d1eSnia for(var i = 0 ; i < els.length ; i++) { 125b18c2d1eSnia els[i].style.visibility = vis; 126b18c2d1eSnia } 127b18c2d1eSnia 128b18c2d1eSnia return; 129b18c2d1eSnia } 130b18c2d1eSnia 131b18c2d1eSnia function do_opacity(fld) { 132b18c2d1eSnia // All opaq params are o_ 133b18c2d1eSnia if(fld.indexOf('o_') !== 0) { 134b18c2d1eSnia return; 135b18c2d1eSnia } 136b18c2d1eSnia 137b18c2d1eSnia if(typeof params[fld] === 'undefined') 138b18c2d1eSnia return; 139b18c2d1eSnia 140b18c2d1eSnia var elclass = fld.substring(2); 141b18c2d1eSnia var els = document.getElementsByClassName(elclass); 142b18c2d1eSnia for(var i = 0 ; i < els.length ; i++) { 143b18c2d1eSnia els[i].style.opacity = params[fld]; 144b18c2d1eSnia } 145b18c2d1eSnia 146b18c2d1eSnia return; 147b18c2d1eSnia } 148b18c2d1eSnia 149b18c2d1eSnia function handle_geom(wname) { 150b18c2d1eSnia var tw = document.getElementById(wname); 151b18c2d1eSnia if(typeof tw === 'undefined' || tw == null) { 152b18c2d1eSnia console.log("Can't find handle_geom(" + wname + ")"); 153b18c2d1eSnia return; 154b18c2d1eSnia } 155b18c2d1eSnia 156b18c2d1eSnia tw.setAttribute('width', params["g_" + wname + "_w"]); 157b18c2d1eSnia tw.setAttribute('height', params["g_" + wname + "_h"]); 158b18c2d1eSnia tw.setAttribute('x', params["g_" + wname + "_x"]); 159b18c2d1eSnia tw.setAttribute('y', params["g_" + wname + "_y"]); 160b18c2d1eSnia 161b18c2d1eSnia return; 162b18c2d1eSnia } 163b18c2d1eSnia 164b18c2d1eSnia // Init 165b18c2d1eSnia for(var i = 0 ; i < pkeys.length ; i++) { 166b18c2d1eSnia var pk = pkeys[i]; 167b18c2d1eSnia 168b18c2d1eSnia if(pk.indexOf('v_') == 0) { 169b18c2d1eSnia do_vis(pkeys[i]); 170b18c2d1eSnia } 171b18c2d1eSnia else if(pk.indexOf('o_') == 0) { 172b18c2d1eSnia do_opacity(pkeys[i]); 173b18c2d1eSnia } 174b18c2d1eSnia else if(pk.indexOf('g_') == 0) { 175b18c2d1eSnia // Geometry handling: do this separately 176b18c2d1eSnia } 177b18c2d1eSnia } 178b18c2d1eSnia 179b18c2d1eSnia handle_geom('xwin'); 180b18c2d1eSnia ]]></script> 181b18c2d1eSnia</svg> 182