annotate client/src/components/fairway/AvailableFairwayDepth.vue @ 3135:4c6b66c12486

wip
author Thomas Junk <thomas.junk@intevation.de>
date Tue, 30 Apr 2019 15:32:57 +0200
parents ab00165540fe
children 8159bd2aaf93
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3033
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
1 <template>
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
2 <div>
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
3 <h1>Available Fairway Depth</h1>
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
4 <UISpinnerOverlay v-if="loading" />
3135
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
5 <div class="d-flex flex-row ml-3">
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
6 <div class="mr-3 ml-auto">
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
7 <select class="mr-3">
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
8 <option>Monthly</option>
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
9 <option>Quaterly</option>
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
10 <option>Yearly</option>
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
11 </select>
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
12 </div>
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
13 <div class="mr-3">
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
14 <label for="from" class="mr-3"><translate>from</translate></label
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
15 ><input />
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
16 </div>
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
17 <div class="mr-auto">
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
18 <label for="to" class="mr-3"><translate>to</translate></label
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
19 ><input />
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
20 </div>
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
21 </div>
3134
ab00165540fe available_fairway_depths: Component made visible
Thomas Junk <thomas.junk@intevation.de>
parents: 3131
diff changeset
22 <div class="diagram-container"></div>
3033
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
23 </div>
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
24 </template>
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
25
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
26 <style></style>
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
27
3033
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
28 <script>
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
29 /* This is Free Software under GNU Affero General Public License v >= 3.0
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
30 * without warranty, see README.md and license for details.
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
31 *
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
32 * SPDX-License-Identifier: AGPL-3.0-or-later
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
33 * License-Filename: LICENSES/AGPL-3.0.txt
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
34 *
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
35 * Copyright (C) 2018 by via donau
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
36 * – Österreichische Wasserstraßen-Gesellschaft mbH
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
37 * Software engineering by Intevation GmbH
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
38 *
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
39 * Author(s):
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
40 * Thomas Junk <thomas.junk@intevation.de>
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
41 * Markus Kottländer <markus.kottlaender@intevation.de>
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
42 */
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
43 import * as d3 from "d3";
3135
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
44 import app from "@/main";
3033
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
45
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
46 export default {
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
47 data() {
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
48 return {
3134
ab00165540fe available_fairway_depths: Component made visible
Thomas Junk <thomas.junk@intevation.de>
parents: 3131
diff changeset
49 loading: false,
3135
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
50 colors: ["red", "green", "blue", "purple"],
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
51 fwData: null,
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
52 width: 1000,
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
53 height: 600
3033
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
54 };
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
55 },
3134
ab00165540fe available_fairway_depths: Component made visible
Thomas Junk <thomas.junk@intevation.de>
parents: 3131
diff changeset
56 mounted() {
3135
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
57 this.loadData();
3134
ab00165540fe available_fairway_depths: Component made visible
Thomas Junk <thomas.junk@intevation.de>
parents: 3131
diff changeset
58 this.drawDiagram();
ab00165540fe available_fairway_depths: Component made visible
Thomas Junk <thomas.junk@intevation.de>
parents: 3131
diff changeset
59 },
3033
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
60 computed: {
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
61 availability() {
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
62 return this.plainAvailability;
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
63 }
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
64 },
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
65 methods: {
3135
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
66 loadData() {},
3033
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
67 drawDiagram() {
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
68 const data = [
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
69 { month: "feb", values: [30, 20, 10, 0] },
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
70 { month: "mar", values: [25, 23, 0, 0] },
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
71 { month: "apr", values: [17, 18, 16, 13] }
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
72 ];
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
73
3134
ab00165540fe available_fairway_depths: Component made visible
Thomas Junk <thomas.junk@intevation.de>
parents: 3131
diff changeset
74 d3.select(".diagram-container svg").remove();
3033
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
75 const yScale = d3
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
76 .scaleLinear()
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
77 .domain([-30, 30])
3135
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
78 .range([this.height - 30, 0]);
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
79
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
80 const diagram = d3
3134
ab00165540fe available_fairway_depths: Component made visible
Thomas Junk <thomas.junk@intevation.de>
parents: 3131
diff changeset
81 .select(".diagram-container")
ab00165540fe available_fairway_depths: Component made visible
Thomas Junk <thomas.junk@intevation.de>
parents: 3131
diff changeset
82 .append("svg")
3135
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
83 .attr("width", this.width)
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
84 .attr("height", this.height);
3130
2e36267ab50e client: available fairway depth diagram: fixed method calls
Markus Kottlaender <markus@intevation.de>
parents: 3128
diff changeset
85 this.drawBars({ diagram, data, yScale });
3135
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
86 this.drawLabel(diagram, this.height);
3130
2e36267ab50e client: available fairway depth diagram: fixed method calls
Markus Kottlaender <markus@intevation.de>
parents: 3128
diff changeset
87 this.drawScale(diagram, yScale);
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
88 },
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
89 drawBars({ diagram, data, yScale }) {
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
90 const paddingRight = 100;
3131
1a1ec4c98c98 client: resolve linter issues
Markus Kottlaender <markus@intevation.de>
parents: 3130
diff changeset
91 const paddingTop = 10;
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
92
3128
1610d3042bbb fairway_availability: generative code fixed
Thomas Junk <thomas.junk@intevation.de>
parents: 3125
diff changeset
93 const allBars = diagram
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
94 .selectAll("g")
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
95 .data(data)
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
96 .enter()
3033
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
97 .append("g")
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
98 .attr("transform", (d, i) => {
3131
1a1ec4c98c98 client: resolve linter issues
Markus Kottlaender <markus@intevation.de>
parents: 3130
diff changeset
99 return `translate(${paddingRight + i * 95} ${paddingTop})`;
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
100 });
3131
1a1ec4c98c98 client: resolve linter issues
Markus Kottlaender <markus@intevation.de>
parents: 3130
diff changeset
101 // bars per month
1a1ec4c98c98 client: resolve linter issues
Markus Kottlaender <markus@intevation.de>
parents: 3130
diff changeset
102 allBars
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
103 .selectAll("rect")
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
104 .data(d => d.values)
3033
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
105 .enter()
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
106 .append("rect")
3128
1610d3042bbb fairway_availability: generative code fixed
Thomas Junk <thomas.junk@intevation.de>
parents: 3125
diff changeset
107 .attr("x", 0)
1610d3042bbb fairway_availability: generative code fixed
Thomas Junk <thomas.junk@intevation.de>
parents: 3125
diff changeset
108 .attr("y", yScale(0))
1610d3042bbb fairway_availability: generative code fixed
Thomas Junk <thomas.junk@intevation.de>
parents: 3125
diff changeset
109 .attr("height", d => {
1610d3042bbb fairway_availability: generative code fixed
Thomas Junk <thomas.junk@intevation.de>
parents: 3125
diff changeset
110 return Math.abs(yScale(0) - yScale(d));
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
111 })
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
112 .attr("transform", d => {
3128
1610d3042bbb fairway_availability: generative code fixed
Thomas Junk <thomas.junk@intevation.de>
parents: 3125
diff changeset
113 if (d > 0)
1610d3042bbb fairway_availability: generative code fixed
Thomas Junk <thomas.junk@intevation.de>
parents: 3125
diff changeset
114 return "translate(0 -" + Math.abs(yScale(0) - yScale(d)) + ")";
1610d3042bbb fairway_availability: generative code fixed
Thomas Junk <thomas.junk@intevation.de>
parents: 3125
diff changeset
115 return "translate(0 " + 0 + ")";
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
116 })
3128
1610d3042bbb fairway_availability: generative code fixed
Thomas Junk <thomas.junk@intevation.de>
parents: 3125
diff changeset
117 .attr("width", 60)
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
118 .attr("fill", (d, i) => {
3134
ab00165540fe available_fairway_depths: Component made visible
Thomas Junk <thomas.junk@intevation.de>
parents: 3131
diff changeset
119 return this.colors[i];
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
120 });
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
121 },
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
122 drawLabel(diagram, height) {
3135
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
123 const center = height / 2;
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
124 diagram
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
125 .append("text")
3135
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
126 .text(this.$options.LEGEND)
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
127 .attr("text-anchor", "middle")
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
128 .attr("x", 0)
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
129 .attr("y", 0)
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
130 .attr("dy", "1em")
3135
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
131 .attr("transform", `translate(0, ${center}), rotate(-90)`);
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
132 },
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
133 drawScale(diagram, yScale) {
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
134 const paddingLeft = 50;
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
135 const paddingTop = 10;
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
136 const yAxis = d3.axisLeft().scale(yScale);
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
137 diagram
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
138 .append("g")
3135
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
139 .attr("transform", `translate(${paddingLeft} ${paddingTop})`)
3125
383720d8d98e fairway_availability: generative code for diagram added
Thomas Junk <thomas.junk@intevation.de>
parents: 3033
diff changeset
140 .call(yAxis);
3033
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
141 }
3135
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
142 },
Thomas Junk <thomas.junk@intevation.de>
parents: 3134
diff changeset
143 LEGEND: app.$gettext("sum of days / Summe der Tage")
3033
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
144 };
c2c1e3e3af1c Available fairway depth: rudimentary thoughts / prototype. Tbd;
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
145 </script>