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