maidr 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/.Rbuildignore +1 -0
  2. package/.eslintignore +3 -0
  3. package/.eslintrc.json +6 -0
  4. package/.github/workflows/build.yml +20 -0
  5. package/.prettierignore +3 -0
  6. package/.prettierrc.json +7 -0
  7. package/.vscode/extensions.json +25 -0
  8. package/.vscode/settings.json +30 -0
  9. package/.vscode/tasks.json +57 -0
  10. package/CHANGELOG.md +7 -0
  11. package/CITATION.cff +21 -0
  12. package/CONTRIBUTING.md +87 -0
  13. package/LICENSE.md +595 -0
  14. package/README.md +341 -0
  15. package/dist/maidr.js +8851 -0
  16. package/dist/maidr.min.js +1 -0
  17. package/dist/styles.css +244 -0
  18. package/dist/styles.min.css +1 -0
  19. package/docs/Audio.html +1398 -0
  20. package/docs/Constants.html +256 -0
  21. package/docs/Description.html +582 -0
  22. package/docs/Helper.html +364 -0
  23. package/docs/LogError.html +905 -0
  24. package/docs/Menu.html +665 -0
  25. package/docs/Position.html +174 -0
  26. package/docs/Resources.html +338 -0
  27. package/docs/Review.html +333 -0
  28. package/docs/Tracker.html +965 -0
  29. package/docs/audio.js.html +635 -0
  30. package/docs/constants.js.html +1242 -0
  31. package/docs/display.js.html +1184 -0
  32. package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
  33. package/docs/fonts/OpenSans-Bold-webfont.svg +1830 -0
  34. package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
  35. package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  36. package/docs/fonts/OpenSans-BoldItalic-webfont.svg +1830 -0
  37. package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  38. package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
  39. package/docs/fonts/OpenSans-Italic-webfont.svg +1830 -0
  40. package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
  41. package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
  42. package/docs/fonts/OpenSans-Light-webfont.svg +1831 -0
  43. package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
  44. package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  45. package/docs/fonts/OpenSans-LightItalic-webfont.svg +1835 -0
  46. package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  47. package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
  48. package/docs/fonts/OpenSans-Regular-webfont.svg +1831 -0
  49. package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
  50. package/docs/fonts/OpenSans-Semibold-webfont.eot +0 -0
  51. package/docs/fonts/OpenSans-Semibold-webfont.svg +1830 -0
  52. package/docs/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  53. package/docs/fonts/OpenSans-Semibold-webfont.woff +0 -0
  54. package/docs/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  55. package/docs/fonts/OpenSans-SemiboldItalic-webfont.svg +1830 -0
  56. package/docs/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  57. package/docs/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  58. package/docs/index.html +66 -0
  59. package/docs/scripts/linenumber.js +25 -0
  60. package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
  61. package/docs/scripts/prettify/lang-css.js +2 -0
  62. package/docs/scripts/prettify/prettify.js +28 -0
  63. package/docs/styles/jsdoc-default.css +692 -0
  64. package/docs/styles/prettify-jsdoc.css +111 -0
  65. package/docs/styles/prettify-tomorrow.css +132 -0
  66. package/examples/dev_charts/barplot.html +1056 -0
  67. package/examples/dev_charts/boxplot.html +1856 -0
  68. package/examples/dev_charts/boxplot_flipped.svg +727 -0
  69. package/examples/dev_charts/heatmap.html +1217 -0
  70. package/examples/dev_charts/scatterplot/displ.js +18 -0
  71. package/examples/dev_charts/scatterplot/histogram_for_residual.svg +595 -0
  72. package/examples/dev_charts/scatterplot/hwy.js +15 -0
  73. package/examples/dev_charts/scatterplot/layers/point_layer.json +938 -0
  74. package/examples/dev_charts/scatterplot/layers/smooth_layer.json +322 -0
  75. package/examples/dev_charts/scatterplot/point_layer.js +938 -0
  76. package/examples/dev_charts/scatterplot/prediction_array.js +31 -0
  77. package/examples/dev_charts/scatterplot/prediction_array.json +31 -0
  78. package/examples/dev_charts/scatterplot/residual_array.js +29 -0
  79. package/examples/dev_charts/scatterplot/residual_array.json +29 -0
  80. package/examples/dev_charts/scatterplot/scatterplot.svg +1428 -0
  81. package/examples/dev_charts/scatterplot/scatterplot_data.html +2838 -0
  82. package/examples/dev_charts/scatterplot/scatterplot_no_jitter_point_only.svg +1393 -0
  83. package/examples/dev_charts/scatterplot/scatterplot_no_jitter_with_bestfit.svg +1424 -0
  84. package/examples/dev_charts/scatterplot/scatterplot_no_jitter_with_loess_curve.svg +1402 -0
  85. package/examples/dev_charts/scatterplot/smooth_layer.js +322 -0
  86. package/examples/dev_charts/scatterplot.html +4560 -0
  87. package/examples/dodged_bar/dodged_bar.png +0 -0
  88. package/examples/dodged_bar/dodged_bar.svg +198 -0
  89. package/examples/dodged_bar/schema.json +41 -0
  90. package/examples/histogram/histogram_tutorial.svg +482 -0
  91. package/examples/histogram/histogram_tutorial_raw_data.json +362 -0
  92. package/examples/histogram/histogram_user_study.svg +578 -0
  93. package/examples/histogram/histogram_user_study_raw_data.json +362 -0
  94. package/examples/lineplot/lineplot_sample.svg +126 -0
  95. package/examples/lineplot/lineplot_sample_raw_data.json +1 -0
  96. package/examples/lineplot/point+lineplot_sample.svg +700 -0
  97. package/examples/other/audio_oscillator_boxplot.js +95 -0
  98. package/examples/other/barplot_labels.svg +314 -0
  99. package/examples/other/barplot_user_study.svg +313 -0
  100. package/examples/other/boxplot.html +927 -0
  101. package/examples/other/boxplot_data_frame.html +568 -0
  102. package/examples/other/boxplot_label.svg +751 -0
  103. package/examples/other/braille-display_boxplot.js +79 -0
  104. package/examples/other/control_boxplot.js +55 -0
  105. package/examples/other/draft.js +56 -0
  106. package/examples/other/getData.html +400 -0
  107. package/examples/other/getData.js +41 -0
  108. package/examples/other/ggplot_to_svg.R +371 -0
  109. package/examples/other/heatmap.svg +582 -0
  110. package/examples/other/heatmap_label.svg +608 -0
  111. package/examples/other/multiple_barplot.html +2250 -0
  112. package/examples/other/new_scatterplot_user_study_point_layer.json +122 -0
  113. package/examples/other/py_binder_output.html +1167 -0
  114. package/examples/other/scatterplot_label.svg +1429 -0
  115. package/examples/other/seaborn_plot.py +9 -0
  116. package/examples/other/svglite_bar.svg +136 -0
  117. package/examples/other/tutorial_boxplot.svg +727 -0
  118. package/examples/other/tutorial_boxplot_data.json +72 -0
  119. package/examples/other/user_study_boxplot.svg +676 -0
  120. package/examples/stacked_bar/schema.json +41 -0
  121. package/examples/stacked_bar/stack_bar.png +0 -0
  122. package/examples/stacked_bar/stacked_bar.svg +180 -0
  123. package/examples/stacked_normalized_bar/stacked_normalized_bar.png +0 -0
  124. package/examples/stacked_normalized_bar/stacked_normalized_bar.svg +189 -0
  125. package/examples/static/barplot.svg +263 -0
  126. package/examples/static/barplot_diamonds_gridSVG.svg +254 -0
  127. package/examples/static/boxplot.svg +424 -0
  128. package/examples/static/heatmap.svg +373 -0
  129. package/examples/static/heatmap_penguins_table.html +486 -0
  130. package/examples/static/scatterplot.svg +530 -0
  131. package/examples/svglite/task_heatmap.html +802 -0
  132. package/examples/svglite/task_heatmap.svg +111 -0
  133. package/examples/svglite/tutorial_bar.svg +136 -0
  134. package/examples/svglite/tutorial_bar_plot.html +504 -0
  135. package/examples/svglite/tutorial_boxplot.html +1850 -0
  136. package/examples/svglite/tutorial_boxplot.svg +727 -0
  137. package/examples/svglite/tutorial_scatterplot.html +3135 -0
  138. package/examples/svglite/tutorial_scatterplot.svg +311 -0
  139. package/gulpfile.js +49 -0
  140. package/index.html +40 -0
  141. package/jsconfig.json +10 -0
  142. package/jsdoc.json +19 -0
  143. package/package.json +47 -0
  144. package/src/css/styles.css +241 -0
  145. package/src/js/__tests__/audio.test.js +49 -0
  146. package/src/js/__tests__/constants.test.js +622 -0
  147. package/src/js/audio.js +575 -0
  148. package/src/js/barplot.js +254 -0
  149. package/src/js/boxplot.js +682 -0
  150. package/src/js/constants.js +1182 -0
  151. package/src/js/controls.js +3182 -0
  152. package/src/js/display.js +1124 -0
  153. package/src/js/heatmap.js +411 -0
  154. package/src/js/histogram.js +134 -0
  155. package/src/js/init.js +427 -0
  156. package/src/js/lineplot.js +219 -0
  157. package/src/js/scatterplot.js +619 -0
  158. package/src/js/segmented.js +268 -0
  159. package/user_study_pilot/binder_test.html +526 -0
  160. package/user_study_pilot/data/barplot_user_study.svg +492 -0
  161. package/user_study_pilot/data/barplot_user_study_raw_data.json +22 -0
  162. package/user_study_pilot/data/boxplot_tutorial.json +72 -0
  163. package/user_study_pilot/data/boxplot_tutorial_horizontal.svg +727 -0
  164. package/user_study_pilot/data/boxplot_user_study.json +52 -0
  165. package/user_study_pilot/data/boxplot_user_study_vertical.svg +675 -0
  166. package/user_study_pilot/data/boxplot_user_study_vertical_horizontal.svg +676 -0
  167. package/user_study_pilot/data/heatmap_user_study.svg +719 -0
  168. package/user_study_pilot/data/heatmap_user_study_raw_data.json +127 -0
  169. package/user_study_pilot/data/new_barplot_user_study.svg +269 -0
  170. package/user_study_pilot/data/new_heatmap_user_study.svg +367 -0
  171. package/user_study_pilot/data/new_scatterplot_user_study.svg +603 -0
  172. package/user_study_pilot/data/new_scatterplot_user_study_point_layer.json +122 -0
  173. package/user_study_pilot/data/scatterplot_user_study (1).svg +321 -0
  174. package/user_study_pilot/data/scatterplot_user_study.svg +603 -0
  175. package/user_study_pilot/data/scatterplot_user_study_point_layer.json +122 -0
  176. package/user_study_pilot/data/scatterplot_user_study_smooth_layer.json +322 -0
  177. package/user_study_pilot/intro.html +215 -0
  178. package/user_study_pilot/jaws_settings/Chrome.JDF +10 -0
  179. package/user_study_pilot/jaws_settings/Firefox.JDF +10 -0
  180. package/user_study_pilot/jaws_settings/backup_utf8/Chrome.JDF +10 -0
  181. package/user_study_pilot/jaws_settings/backup_utf8/Firefox.JDF +10 -0
  182. package/user_study_pilot/jaws_settings/backup_utf8/msedge.JDF +10 -0
  183. package/user_study_pilot/jaws_settings/msedge.JDF +10 -0
  184. package/user_study_pilot/nvda_settings/chrome.dic +10 -0
  185. package/user_study_pilot/nvda_settings/default.dic +10 -0
  186. package/user_study_pilot/nvda_settings/firefox.dic +10 -0
  187. package/user_study_pilot/nvda_settings/msedge.dic +10 -0
  188. package/user_study_pilot/scatterplot.html +4560 -0
  189. package/user_study_pilot/seaborn_test.html +1059 -0
  190. package/user_study_pilot/svglite_test.html +534 -0
  191. package/user_study_pilot/task1_bar_plot.html +1111 -0
  192. package/user_study_pilot/task2_heatmap.html +1661 -0
  193. package/user_study_pilot/task3_boxplot_horizontal.html +1690 -0
  194. package/user_study_pilot/task3_boxplot_vertical.html +1689 -0
  195. package/user_study_pilot/task4_scatterplot.html +2091 -0
  196. package/user_study_pilot/tutorial1_bar_plot.html +1159 -0
  197. package/user_study_pilot/tutorial2_heatmap.html +1276 -0
  198. package/user_study_pilot/tutorial3_boxplot_horizontal.html +1861 -0
  199. package/user_study_pilot/tutorial3_boxplot_vertical.html +1807 -0
  200. package/user_study_pilot/tutorial4_scatterplot.html +5893 -0
  201. package/user_study_pilot/tutorial5_histogram.html +1553 -0
  202. package/user_study_pilot/tutorial6_lineplot.html +1011 -0
  203. package/user_study_pilot/tutorial7_stacked.html +763 -0
  204. package/user_study_pilot/tutorial8_stacked_normalized.html +796 -0
  205. package/user_study_pilot/tutorial9_dodged_bar.html +831 -0
  206. package/user_study_pilot/voiceover_settings/user_study_VoiceOver Archive.voprefs +573 -0
@@ -0,0 +1,79 @@
1
+ // get div that displays braille
2
+ const barContainer = document.getElementById('bar-container');
3
+ const brailleDiv = document.getElementById('braille-div');
4
+ const brailleDisplay = document.getElementById('braille-display');
5
+
6
+ // focus on braille display
7
+ // brailleDisplay.tabIndex = "0";
8
+
9
+ var range1 = ymin + range;
10
+ var range2 = range1 + range;
11
+ var range3 = range2 + range;
12
+ var range4 = range3 + range;
13
+
14
+ // Cursor variables
15
+ // var currCursor = -1;
16
+
17
+ // var allowedKeys = {
18
+ // "37" : "arrow-left",
19
+ // "39" : "arrow-right"
20
+ // }
21
+
22
+ var brailleArray = [];
23
+ console.log(y_values);
24
+ for (var i = 0; i < y_values.length; i++) {
25
+ if (y_values[i] <= range1) {
26
+ brailleArray.push('⣀');
27
+ } else if (y_values[i] <= range2) {
28
+ brailleArray.push('⠤');
29
+ } else if (y_values[i] <= range3) {
30
+ brailleArray.push('⠒');
31
+ } else if (y_values[i] <= range4) {
32
+ brailleArray.push('⠉');
33
+ }
34
+ }
35
+
36
+ var display = false;
37
+ var brailleText = brailleArray.join('');
38
+ brailleDisplay.innerHTML = brailleText;
39
+ brailleDiv.style.display = 'none';
40
+
41
+ // For input
42
+ // brailleDisplay.value = brailleText;
43
+ // brailleDisplay.setSelectionRange(0,0);
44
+
45
+ barContainer.addEventListener('keydown', function (e) {
46
+ if (e.which == 66) {
47
+ if (display) {
48
+ brailleDiv.style.display = 'none';
49
+ } else {
50
+ brailleDiv.style.display = 'block';
51
+ }
52
+ display = !display;
53
+ }
54
+
55
+ // Cursor function
56
+ // if (!allowedKeys[e.which]) {
57
+ // e.preventDefault();
58
+ // }
59
+
60
+ // if (currCursor < 0 && e.which == 39) {
61
+ // e.preventDefault();
62
+ // currCursor++;
63
+ // } else if (currCursor >= _numBars - 1 && e.which == 39) {
64
+ // e.preventDefault();
65
+ // } else if (e.which == 39) {
66
+ // brailleDisplay.setSelectionRange(currCursor, currCursor);
67
+ // currCursor++;
68
+ // }
69
+
70
+ // if (currCursor > _numBars - 1 && e.which == 37) {
71
+ // e.preventDefault();
72
+ // currCursor--;
73
+ // } else if (currCursor <= 0 && e.which == 37) {
74
+ // e.preventDefault();
75
+ // } else if (e.which == 37) {
76
+ // brailleDisplay.setSelectionRange(currCursor, currCursor);
77
+ // currCursor--;
78
+ // }
79
+ });
@@ -0,0 +1,55 @@
1
+ // display x and y information under bar plot
2
+ // var x = document.getElementById("x");
3
+ // var y = document.getElementById("y");
4
+
5
+ // variables for manipulation of bars
6
+ var currBar = -1;
7
+
8
+ // manipulate bars using left and right arrows
9
+ svg.addEventListener('keydown', function (e) {
10
+ if (e.which === 39) {
11
+ if (currBar == -1) {
12
+ currBar += 1;
13
+ // this.document.getElementById(bars[currBar]).style.fill = "rgb(3,200,9)";
14
+ select(currBar);
15
+ displayValues(currBar);
16
+ // x.innerHTML = "x-value: " + x_values[currBar];
17
+ // y.innerHTML = "y-value: " + y_values[currBar];
18
+ } else if (currBar > -1 && currBar < _numBars - 1) {
19
+ currBar += 1;
20
+ // this.document.getElementById(bars[currBar]).style.fill = "rgb(3,200,9)";
21
+ // this.document.getElementById(bars[currBar - 1]).style.fill = "rgb(89,89,89)";
22
+ select(currBar);
23
+ deselect(currBar - 1);
24
+ displayValues(currBar);
25
+ // x.innerHTML = "x-value: " + x_values[currBar];
26
+ // y.innerHTML = "y-value: " + y_values[currBar];
27
+ }
28
+ }
29
+
30
+ if (e.which === 37) {
31
+ if (currBar > 0 && currBar < _numBars) {
32
+ currBar -= 1;
33
+ // this.document.getElementById(bars[currBar]).style.fill = "rgb(3,200,9)";
34
+ // this.document.getElementById(bars[currBar + 1]).style.fill = "rgb(89,89,89)";
35
+ select(currBar);
36
+ deselect(currBar + 1);
37
+ displayValues(currBar);
38
+ // x.innerHTML = "x-value: " + x_values[currBar];
39
+ // y.innerHTML = "y-value: " + y_values[currBar];
40
+ }
41
+ }
42
+ });
43
+
44
+ function select(num) {
45
+ this.document.getElementById(bars[num]).style.fill = 'rgb(3,200,9)';
46
+ }
47
+
48
+ function deselect(num) {
49
+ this.document.getElementById(bars[num]).style.fill = 'rgb(89,89,89)';
50
+ }
51
+
52
+ function displayValues(num) {
53
+ this.document.getElementById('x').innerHTML = 'x-value: ' + x_values[num];
54
+ this.document.getElementById('y').innerHTML = 'y-value: ' + y_values[num];
55
+ }
@@ -0,0 +1,56 @@
1
+ // Ths file records all the trials.
2
+
3
+ // First trial
4
+ /*
5
+ var svg = document.getElementById("barplotsvg");
6
+ var barplot = svg.contentDocument;
7
+ window.addEventListener("load" ,function() {
8
+ console.log(barplot);
9
+ var firstBar = barplot.getElementsByTagName("rect")[0];
10
+ console.log(firstBar);
11
+ document.addEventListener("keydown", function(e) {
12
+ if (e.key === 39) {
13
+ firstBar.setAttribute('fill', 'rgb(3,200,9)');
14
+ }
15
+ });
16
+ });
17
+ */
18
+
19
+ // sample addEventListener
20
+ /*
21
+ var input = document.getElementById("demo");
22
+ input.addEventListener("keydown", function(e) {
23
+ if (e.which === 39) input.style.backgroundColor = "red";
24
+ });
25
+ */
26
+
27
+ /*$(document).ready(function() {
28
+ $("#barplotsvg").contents().find("#geom_rect.rect.56.1.1").attr({"fill":"red"});
29
+ });
30
+ $(window).on("keypress", function(e) {
31
+ if (e.keyCode === 39) {
32
+ alert("it works!");
33
+ $("#barplotsvg").contents().find("#geom_rect.rect.56.1.1").addClass("animated shake");
34
+ }
35
+ });*/
36
+
37
+ // D3.js method
38
+ /*
39
+ import * as d3 from "/Users/y.yujun/Documents/accessible-graphs/node_modules";
40
+ d3.xml("/Users/y.yujun/Documents/accessible-graphs/barplot.svg", function(error, xml) {
41
+ if (error) throw error;
42
+
43
+ var svg = xml.documentElement;
44
+ document.body.appendChild(svg);
45
+ console.log(svg);
46
+ document.body.append("rect").attr("x", 47.88).attr("y", 63.4).attr("width", 86.4).attr("height", 50.79).style("stroke", "black").style("fill", "black");
47
+ });
48
+ */
49
+
50
+ // const audioElement = document.querySelector('audio');
51
+ // const track = audioContext.createMediaElementSource(audioElement);
52
+
53
+ // var stereoNode = new StereoPannerNode(audioContext, { pan: 0 });
54
+ // stereoNode.pan.value = -1;
55
+
56
+ // track.connect(merger).connect(audioContext.destination);
@@ -0,0 +1,400 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+ <title>Get Data for Bar Chart</title>
6
+ </head>
7
+
8
+ <body>
9
+ <?xml version="1.0" encoding="UTF-8"?>
10
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="672px" height="672px"
11
+ viewBox="0 0 672 672" version="1.1">
12
+ <metadata xmlns:gridsvg="http://www.stat.auckland.ac.nz/~paul/R/gridSVG/">
13
+ <gridsvg:generator name="gridSVG" version="1.7-4" time="2022-07-14 14:26:55" />
14
+ <gridsvg:argument name="name" value="barplot_diamonds_gridSVG.svg" />
15
+ <gridsvg:argument name="exportCoords" value="none" />
16
+ <gridsvg:argument name="exportMappings" value="none" />
17
+ <gridsvg:argument name="exportJS" value="none" />
18
+ <gridsvg:argument name="res" value="96" />
19
+ <gridsvg:argument name="prefix" value="" />
20
+ <gridsvg:argument name="addClasses" value="FALSE" />
21
+ <gridsvg:argument name="indent" value="TRUE" />
22
+ <gridsvg:argument name="htmlWrapper" value="FALSE" />
23
+ <gridsvg:argument name="usePaths" value="vpPaths" />
24
+ <gridsvg:argument name="uniqueNames" value="TRUE" />
25
+ <gridsvg:separator name="id.sep" value="." />
26
+ <gridsvg:separator name="gPath.sep" value="::" />
27
+ <gridsvg:separator name="vpPath.sep" value="::" />
28
+ </metadata>
29
+ <g transform="translate(0, 672) scale(1, -1)">
30
+ <g id="gridSVG" fill="none" stroke="rgb(0,0,0)" stroke-dasharray="none" stroke-width="1" font-size="16"
31
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" opacity="1"
32
+ stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-opacity="1" fill-opacity="0"
33
+ font-weight="normal" font-style="normal">
34
+ <g id="layout.1">
35
+ <g id="layout.2">
36
+ <defs>
37
+ <clipPath id="layout::background.1-9-12-1.1.clipPath">
38
+ <rect x="0" y="0" width="672" height="672" fill="none" stroke="none" />
39
+ </clipPath>
40
+ </defs>
41
+ <g id="layout::background.1-9-12-1.1" clip-path="url(#layout::background.1-9-12-1.1.clipPath)">
42
+ <g id="background.1-9-12-1.1">
43
+ <rect id="background.1-9-12-1.1.1" x="0" y="0" width="672" height="672" transform="" stroke-width="1.42"
44
+ stroke="rgb(255,255,255)" fill="rgb(255,255,255)" stroke-dasharray="none" stroke-opacity="1"
45
+ fill-opacity="1" />
46
+ </g>
47
+ </g>
48
+ <defs>
49
+ <clipPath id="layout::panel.7-5-7-5.1.clipPath">
50
+ <rect x="67.53" y="44.53" width="597.16" height="620.16" fill="none" stroke="none" />
51
+ </clipPath>
52
+ </defs>
53
+ <g id="layout::panel.7-5-7-5.1" clip-path="url(#layout::panel.7-5-7-5.1.clipPath)">
54
+ <g id="panel.7-5-7-5.1">
55
+ <g id="grill.gTree.13.1">
56
+ <g id="panel.background..rect.6.1">
57
+ <rect id="panel.background..rect.6.1.1" x="67.53" y="44.53" width="597.16" height="620.16"
58
+ transform="" stroke-width="1.42" stroke="none" fill="rgb(235,235,235)" stroke-dasharray="none"
59
+ stroke-opacity="0" fill-opacity="1" />
60
+ </g>
61
+ <g id="panel.grid.minor.y..polyline.8.1">
62
+ <polyline id="panel.grid.minor.y..polyline.8.1.1" points="67.53,138.12 664.69,138.12"
63
+ stroke="rgb(255,255,255)" fill="none" stroke-width="0.71" stroke-dasharray="none"
64
+ stroke-linecap="butt" stroke-opacity="1" fill-opacity="1" />
65
+ <polyline id="panel.grid.minor.y..polyline.8.1.2" points="67.53,268.93 664.69,268.93"
66
+ stroke="rgb(255,255,255)" fill="none" stroke-width="0.71" stroke-dasharray="none"
67
+ stroke-linecap="butt" stroke-opacity="1" fill-opacity="1" />
68
+ <polyline id="panel.grid.minor.y..polyline.8.1.3" points="67.53,399.73 664.69,399.73"
69
+ stroke="rgb(255,255,255)" fill="none" stroke-width="0.71" stroke-dasharray="none"
70
+ stroke-linecap="butt" stroke-opacity="1" fill-opacity="1" />
71
+ <polyline id="panel.grid.minor.y..polyline.8.1.4" points="67.53,530.53 664.69,530.53"
72
+ stroke="rgb(255,255,255)" fill="none" stroke-width="0.71" stroke-dasharray="none"
73
+ stroke-linecap="butt" stroke-opacity="1" fill-opacity="1" />
74
+ <polyline id="panel.grid.minor.y..polyline.8.1.5" points="67.53,661.33 664.69,661.33"
75
+ stroke="rgb(255,255,255)" fill="none" stroke-width="0.71" stroke-dasharray="none"
76
+ stroke-linecap="butt" stroke-opacity="1" fill-opacity="1" />
77
+ </g>
78
+ <g id="panel.grid.major.y..polyline.10.1">
79
+ <polyline id="panel.grid.major.y..polyline.10.1.1" points="67.53,72.72 664.69,72.72"
80
+ stroke="rgb(255,255,255)" fill="none" stroke-width="1.42" stroke-dasharray="none"
81
+ stroke-linecap="butt" stroke-opacity="1" fill-opacity="1" />
82
+ <polyline id="panel.grid.major.y..polyline.10.1.2" points="67.53,203.53 664.69,203.53"
83
+ stroke="rgb(255,255,255)" fill="none" stroke-width="1.42" stroke-dasharray="none"
84
+ stroke-linecap="butt" stroke-opacity="1" fill-opacity="1" />
85
+ <polyline id="panel.grid.major.y..polyline.10.1.3" points="67.53,334.33 664.69,334.33"
86
+ stroke="rgb(255,255,255)" fill="none" stroke-width="1.42" stroke-dasharray="none"
87
+ stroke-linecap="butt" stroke-opacity="1" fill-opacity="1" />
88
+ <polyline id="panel.grid.major.y..polyline.10.1.4" points="67.53,465.13 664.69,465.13"
89
+ stroke="rgb(255,255,255)" fill="none" stroke-width="1.42" stroke-dasharray="none"
90
+ stroke-linecap="butt" stroke-opacity="1" fill-opacity="1" />
91
+ <polyline id="panel.grid.major.y..polyline.10.1.5" points="67.53,595.93 664.69,595.93"
92
+ stroke="rgb(255,255,255)" fill="none" stroke-width="1.42" stroke-dasharray="none"
93
+ stroke-linecap="butt" stroke-opacity="1" fill-opacity="1" />
94
+ </g>
95
+ <g id="panel.grid.major.x..polyline.12.1">
96
+ <polyline id="panel.grid.major.x..polyline.12.1.1" points="136.44,44.53 136.44,664.69"
97
+ stroke="rgb(255,255,255)" fill="none" stroke-width="1.42" stroke-dasharray="none"
98
+ stroke-linecap="butt" stroke-opacity="1" fill-opacity="1" />
99
+ <polyline id="panel.grid.major.x..polyline.12.1.2" points="251.28,44.53 251.28,664.69"
100
+ stroke="rgb(255,255,255)" fill="none" stroke-width="1.42" stroke-dasharray="none"
101
+ stroke-linecap="butt" stroke-opacity="1" fill-opacity="1" />
102
+ <polyline id="panel.grid.major.x..polyline.12.1.3" points="366.11,44.53 366.11,664.69"
103
+ stroke="rgb(255,255,255)" fill="none" stroke-width="1.42" stroke-dasharray="none"
104
+ stroke-linecap="butt" stroke-opacity="1" fill-opacity="1" />
105
+ <polyline id="panel.grid.major.x..polyline.12.1.4" points="480.95,44.53 480.95,664.69"
106
+ stroke="rgb(255,255,255)" fill="none" stroke-width="1.42" stroke-dasharray="none"
107
+ stroke-linecap="butt" stroke-opacity="1" fill-opacity="1" />
108
+ <polyline id="panel.grid.major.x..polyline.12.1.5" points="595.79,44.53 595.79,664.69"
109
+ stroke="rgb(255,255,255)" fill="none" stroke-width="1.42" stroke-dasharray="none"
110
+ stroke-linecap="butt" stroke-opacity="1" fill-opacity="1" />
111
+ </g>
112
+ </g>
113
+ <g id="geom_rect.rect.2.1">
114
+ <rect id="geom_rect.rect.2.1.1" x="84.76" y="72.72" width="103.35" height="42.12" transform=""
115
+ stroke="none" fill="rgb(89,89,89)" stroke-width="1.42" stroke-dasharray="none"
116
+ stroke-linejoin="miter" stroke-linecap="square" stroke-opacity="0" fill-opacity="1" />
117
+ <rect id="geom_rect.rect.2.1.2" x="199.6" y="72.72" width="103.35" height="128.34" transform=""
118
+ stroke="none" fill="rgb(89,89,89)" stroke-width="1.42" stroke-dasharray="none"
119
+ stroke-linejoin="miter" stroke-linecap="square" stroke-opacity="0" fill-opacity="1" />
120
+ <rect id="geom_rect.rect.2.1.3" x="314.44" y="72.72" width="103.35" height="316.07" transform=""
121
+ stroke="none" fill="rgb(89,89,89)" stroke-width="1.42" stroke-dasharray="none"
122
+ stroke-linejoin="miter" stroke-linecap="square" stroke-opacity="0" fill-opacity="1" />
123
+ <rect id="geom_rect.rect.2.1.4" x="429.28" y="72.72" width="103.35" height="360.78" transform=""
124
+ stroke="none" fill="rgb(89,89,89)" stroke-width="1.42" stroke-dasharray="none"
125
+ stroke-linejoin="miter" stroke-linecap="square" stroke-opacity="0" fill-opacity="1" />
126
+ <rect id="geom_rect.rect.2.1.5" x="544.11" y="72.72" width="103.35" height="563.78" transform=""
127
+ stroke="none" fill="rgb(89,89,89)" stroke-width="1.42" stroke-dasharray="none"
128
+ stroke-linejoin="miter" stroke-linecap="square" stroke-opacity="0" fill-opacity="1" />
129
+ </g>
130
+ </g>
131
+ </g>
132
+ <g id="layout::spacer.8-6-8-6.1" />
133
+ <g id="layout::spacer.8-4-8-4.1" />
134
+ <g id="layout::spacer.6-6-6-6.1" />
135
+ <g id="layout::spacer.6-4-6-4.1" />
136
+ <g id="layout::axis-t.6-5-6-5.1" />
137
+ <g id="layout::axis-l.7-4-7-4.1">
138
+ <g id="layout::axis-l.7-4-7-4::GRID.VP.6.1">
139
+ <g id="axis-l.7-4-7-4.1">
140
+ <g id="layout::axis-l.7-4-7-4::GRID.VP.6::axis.1">
141
+ <g id="axis.1">
142
+ <g id="layout::axis-l.7-4-7-4::GRID.VP.6::axis::axis.1-1-1-1.1">
143
+ <g id="layout::axis-l.7-4-7-4::GRID.VP.6::axis::axis.1-1-1-1::GRID.VP.4.1" font-size="11.73"
144
+ stroke="rgb(77,77,77)"
145
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif"
146
+ stroke-opacity="1" font-weight="normal" font-style="normal">
147
+ <g id="layout::axis-l.7-4-7-4::GRID.VP.6::axis::axis.1-1-1-1::GRID.VP.4::GRID.VP.5.1">
148
+ <g id="axis.1-1-1-1.1">
149
+ <g id="GRID.text.21.1">
150
+ <g id="GRID.text.21.1.1" transform="translate(60.96, 72.72)" stroke-width="0.1">
151
+ <g id="GRID.text.21.1.1.scale" transform="scale(1, -1)">
152
+ <text x="0" y="0" id="GRID.text.21.1.1.text" text-anchor="end" font-size="11.73"
153
+ stroke="rgb(77,77,77)"
154
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif"
155
+ fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal"
156
+ font-style="normal">
157
+ <tspan id="GRID.text.21.1.1.tspan.1" dy="5" x="0">0</tspan>
158
+ </text>
159
+ </g>
160
+ </g>
161
+ <g id="GRID.text.21.1.2" transform="translate(60.96, 203.53)" stroke-width="0.1">
162
+ <g id="GRID.text.21.1.2.scale" transform="scale(1, -1)">
163
+ <text x="0" y="0" id="GRID.text.21.1.2.text" text-anchor="end" font-size="11.73"
164
+ stroke="rgb(77,77,77)"
165
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif"
166
+ fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal"
167
+ font-style="normal">
168
+ <tspan id="GRID.text.21.1.2.tspan.1" dy="5" x="0">5000</tspan>
169
+ </text>
170
+ </g>
171
+ </g>
172
+ <g id="GRID.text.21.1.3" transform="translate(60.96, 334.33)" stroke-width="0.1">
173
+ <g id="GRID.text.21.1.3.scale" transform="scale(1, -1)">
174
+ <text x="0" y="0" id="GRID.text.21.1.3.text" text-anchor="end" font-size="11.73"
175
+ stroke="rgb(77,77,77)"
176
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif"
177
+ fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal"
178
+ font-style="normal">
179
+ <tspan id="GRID.text.21.1.3.tspan.1" dy="5" x="0">10000</tspan>
180
+ </text>
181
+ </g>
182
+ </g>
183
+ <g id="GRID.text.21.1.4" transform="translate(60.96, 465.13)" stroke-width="0.1">
184
+ <g id="GRID.text.21.1.4.scale" transform="scale(1, -1)">
185
+ <text x="0" y="0" id="GRID.text.21.1.4.text" text-anchor="end" font-size="11.73"
186
+ stroke="rgb(77,77,77)"
187
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif"
188
+ fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal"
189
+ font-style="normal">
190
+ <tspan id="GRID.text.21.1.4.tspan.1" dy="5" x="0">15000</tspan>
191
+ </text>
192
+ </g>
193
+ </g>
194
+ <g id="GRID.text.21.1.5" transform="translate(60.96, 595.93)" stroke-width="0.1">
195
+ <g id="GRID.text.21.1.5.scale" transform="scale(1, -1)">
196
+ <text x="0" y="0" id="GRID.text.21.1.5.text" text-anchor="end" font-size="11.73"
197
+ stroke="rgb(77,77,77)"
198
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif"
199
+ fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal"
200
+ font-style="normal">
201
+ <tspan id="GRID.text.21.1.5.tspan.1" dy="5" x="0">20000</tspan>
202
+ </text>
203
+ </g>
204
+ </g>
205
+ </g>
206
+ </g>
207
+ </g>
208
+ </g>
209
+ </g>
210
+ <g id="layout::axis-l.7-4-7-4::GRID.VP.6::axis::axis.1-2-1-2.1">
211
+ <g id="axis.1-2-1-2.1">
212
+ <polyline id="axis.1-2-1-2.1.1" points="63.88,72.72 67.53,72.72" stroke="rgb(51,51,51)"
213
+ fill="none" stroke-width="1.42" stroke-dasharray="none" stroke-linecap="butt"
214
+ stroke-opacity="1" fill-opacity="1" />
215
+ <polyline id="axis.1-2-1-2.1.2" points="63.88,203.53 67.53,203.53" stroke="rgb(51,51,51)"
216
+ fill="none" stroke-width="1.42" stroke-dasharray="none" stroke-linecap="butt"
217
+ stroke-opacity="1" fill-opacity="1" />
218
+ <polyline id="axis.1-2-1-2.1.3" points="63.88,334.33 67.53,334.33" stroke="rgb(51,51,51)"
219
+ fill="none" stroke-width="1.42" stroke-dasharray="none" stroke-linecap="butt"
220
+ stroke-opacity="1" fill-opacity="1" />
221
+ <polyline id="axis.1-2-1-2.1.4" points="63.88,465.13 67.53,465.13" stroke="rgb(51,51,51)"
222
+ fill="none" stroke-width="1.42" stroke-dasharray="none" stroke-linecap="butt"
223
+ stroke-opacity="1" fill-opacity="1" />
224
+ <polyline id="axis.1-2-1-2.1.5" points="63.88,595.93 67.53,595.93" stroke="rgb(51,51,51)"
225
+ fill="none" stroke-width="1.42" stroke-dasharray="none" stroke-linecap="butt"
226
+ stroke-opacity="1" fill-opacity="1" />
227
+ </g>
228
+ </g>
229
+ </g>
230
+ </g>
231
+ </g>
232
+ </g>
233
+ </g>
234
+ <g id="layout::axis-r.7-6-7-6.1" />
235
+ <g id="layout::axis-b.8-5-8-5.1">
236
+ <g id="layout::axis-b.8-5-8-5::GRID.VP.3.1">
237
+ <g id="axis-b.8-5-8-5.1">
238
+ <g id="layout::axis-b.8-5-8-5::GRID.VP.3::axis.1">
239
+ <g id="axis.2">
240
+ <g id="layout::axis-b.8-5-8-5::GRID.VP.3::axis::axis.1-1-1-1.1">
241
+ <g id="axis.1-1-1-1.2">
242
+ <polyline id="axis.1-1-1-1.2.1" points="136.44,40.88 136.44,44.53" stroke="rgb(51,51,51)"
243
+ fill="none" stroke-width="1.42" stroke-dasharray="none" stroke-linecap="butt"
244
+ stroke-opacity="1" fill-opacity="1" />
245
+ <polyline id="axis.1-1-1-1.2.2" points="251.28,40.88 251.28,44.53" stroke="rgb(51,51,51)"
246
+ fill="none" stroke-width="1.42" stroke-dasharray="none" stroke-linecap="butt"
247
+ stroke-opacity="1" fill-opacity="1" />
248
+ <polyline id="axis.1-1-1-1.2.3" points="366.11,40.88 366.11,44.53" stroke="rgb(51,51,51)"
249
+ fill="none" stroke-width="1.42" stroke-dasharray="none" stroke-linecap="butt"
250
+ stroke-opacity="1" fill-opacity="1" />
251
+ <polyline id="axis.1-1-1-1.2.4" points="480.95,40.88 480.95,44.53" stroke="rgb(51,51,51)"
252
+ fill="none" stroke-width="1.42" stroke-dasharray="none" stroke-linecap="butt"
253
+ stroke-opacity="1" fill-opacity="1" />
254
+ <polyline id="axis.1-1-1-1.2.5" points="595.79,40.88 595.79,44.53" stroke="rgb(51,51,51)"
255
+ fill="none" stroke-width="1.42" stroke-dasharray="none" stroke-linecap="butt"
256
+ stroke-opacity="1" fill-opacity="1" />
257
+ </g>
258
+ </g>
259
+ <g id="layout::axis-b.8-5-8-5::GRID.VP.3::axis::axis.2-1-2-1.1">
260
+ <g id="layout::axis-b.8-5-8-5::GRID.VP.3::axis::axis.2-1-2-1::GRID.VP.1.1" font-size="11.73"
261
+ stroke="rgb(77,77,77)"
262
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif"
263
+ stroke-opacity="1" font-weight="normal" font-style="normal">
264
+ <g id="layout::axis-b.8-5-8-5::GRID.VP.3::axis::axis.2-1-2-1::GRID.VP.1::GRID.VP.2.1">
265
+ <g id="axis.2-1-2-1.1">
266
+ <g id="GRID.text.16.1">
267
+ <g id="GRID.text.16.1.1" transform="translate(136.44, 37.96)" stroke-width="0.1">
268
+ <g id="GRID.text.16.1.1.scale" transform="scale(1, -1)">
269
+ <text x="0" y="0" id="GRID.text.16.1.1.text" text-anchor="middle" font-size="11.73"
270
+ stroke="rgb(77,77,77)"
271
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif"
272
+ fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal"
273
+ font-style="normal">
274
+ <tspan id="GRID.text.16.1.1.tspan.1" dy="10" x="0">Fair</tspan>
275
+ </text>
276
+ </g>
277
+ </g>
278
+ <g id="GRID.text.16.1.2" transform="translate(251.28, 37.96)" stroke-width="0.1">
279
+ <g id="GRID.text.16.1.2.scale" transform="scale(1, -1)">
280
+ <text x="0" y="0" id="GRID.text.16.1.2.text" text-anchor="middle" font-size="11.73"
281
+ stroke="rgb(77,77,77)"
282
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif"
283
+ fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal"
284
+ font-style="normal">
285
+ <tspan id="GRID.text.16.1.2.tspan.1" dy="10" x="0">Good</tspan>
286
+ </text>
287
+ </g>
288
+ </g>
289
+ <g id="GRID.text.16.1.3" transform="translate(366.11, 37.96)" stroke-width="0.1">
290
+ <g id="GRID.text.16.1.3.scale" transform="scale(1, -1)">
291
+ <text x="0" y="0" id="GRID.text.16.1.3.text" text-anchor="middle" font-size="11.73"
292
+ stroke="rgb(77,77,77)"
293
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif"
294
+ fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal"
295
+ font-style="normal">
296
+ <tspan id="GRID.text.16.1.3.tspan.1" dy="10" x="0">Very Good</tspan>
297
+ </text>
298
+ </g>
299
+ </g>
300
+ <g id="GRID.text.16.1.4" transform="translate(480.95, 37.96)" stroke-width="0.1">
301
+ <g id="GRID.text.16.1.4.scale" transform="scale(1, -1)">
302
+ <text x="0" y="0" id="GRID.text.16.1.4.text" text-anchor="middle" font-size="11.73"
303
+ stroke="rgb(77,77,77)"
304
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif"
305
+ fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal"
306
+ font-style="normal">
307
+ <tspan id="GRID.text.16.1.4.tspan.1" dy="10" x="0">Premium</tspan>
308
+ </text>
309
+ </g>
310
+ </g>
311
+ <g id="GRID.text.16.1.5" transform="translate(595.79, 37.96)" stroke-width="0.1">
312
+ <g id="GRID.text.16.1.5.scale" transform="scale(1, -1)">
313
+ <text x="0" y="0" id="GRID.text.16.1.5.text" text-anchor="middle" font-size="11.73"
314
+ stroke="rgb(77,77,77)"
315
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif"
316
+ fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal"
317
+ font-style="normal">
318
+ <tspan id="GRID.text.16.1.5.tspan.1" dy="10" x="0">Ideal</tspan>
319
+ </text>
320
+ </g>
321
+ </g>
322
+ </g>
323
+ </g>
324
+ </g>
325
+ </g>
326
+ </g>
327
+ </g>
328
+ </g>
329
+ </g>
330
+ </g>
331
+ </g>
332
+ <g id="layout::xlab-t.5-5-5-5.1" />
333
+ <g id="layout::xlab-b.9-5-9-5.1">
334
+ <g id="layout::xlab-b.9-5-9-5::GRID.VP.7.1" font-size="14.67" stroke="rgb(0,0,0)"
335
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" stroke-opacity="1"
336
+ font-weight="normal" font-style="normal">
337
+ <g id="layout::xlab-b.9-5-9-5::GRID.VP.7::GRID.VP.8.1">
338
+ <g id="xlab-b.9-5-9-5.1">
339
+ <g id="GRID.text.25.1">
340
+ <g id="GRID.text.25.1.1" transform="translate(366.11, 22.31)" stroke-width="0.1">
341
+ <g id="GRID.text.25.1.1.scale" transform="scale(1, -1)">
342
+ <text x="0" y="0" id="GRID.text.25.1.1.text" text-anchor="middle" font-size="14.67"
343
+ stroke="rgb(0,0,0)"
344
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif"
345
+ fill="rgb(0,0,0)" stroke-opacity="1" fill-opacity="1" font-weight="normal"
346
+ font-style="normal">
347
+ <tspan id="GRID.text.25.1.1.tspan.1" dy="12" x="0">cut</tspan>
348
+ </text>
349
+ </g>
350
+ </g>
351
+ </g>
352
+ </g>
353
+ </g>
354
+ </g>
355
+ </g>
356
+ <g id="layout::ylab-l.7-3-7-3.1">
357
+ <g id="layout::ylab-l.7-3-7-3::GRID.VP.9.1" font-size="14.67" stroke="rgb(0,0,0)"
358
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" stroke-opacity="1"
359
+ font-weight="normal" font-style="normal">
360
+ <g id="layout::ylab-l.7-3-7-3::GRID.VP.9::GRID.VP.10.1">
361
+ <g id="ylab-l.7-3-7-3.1">
362
+ <g id="GRID.text.29.1">
363
+ <g id="GRID.text.29.1.1" transform="translate(7.31, 354.61)" stroke-width="0.1">
364
+ <g id="GRID.text.29.1.1.scale" transform="scale(1, -1)">
365
+ <text x="0" y="0" id="GRID.text.29.1.1.text" transform="rotate(-90)" text-anchor="middle"
366
+ font-size="14.67" stroke="rgb(0,0,0)"
367
+ font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif"
368
+ fill="rgb(0,0,0)" stroke-opacity="1" fill-opacity="1" font-weight="normal"
369
+ font-style="normal">
370
+ <tspan id="GRID.text.29.1.1.tspan.1" dy="12" x="0">count</tspan>
371
+ </text>
372
+ </g>
373
+ </g>
374
+ </g>
375
+ </g>
376
+ </g>
377
+ </g>
378
+ </g>
379
+ <g id="layout::ylab-r.7-7-7-7.1" />
380
+ <g id="layout::subtitle.4-5-4-5.1" />
381
+ <g id="layout::title.3-5-3-5.1" />
382
+ <g id="layout::caption.10-5-10-5.1" />
383
+ <g id="layout::tag.2-2-2-2.1" />
384
+ </g>
385
+ </g>
386
+ </g>
387
+ </g>
388
+ </svg>
389
+
390
+ <p>Enter x and y-values with this format: {x1: y1, x2: y2}. Add "" around the value if it is text.</p>
391
+ <form id="form" action="barplot.html">
392
+ <textarea id="yVal" autofocus placeholder='{"x1": y1, "x2": y2}' required cols="100" rows="8"></textarea>
393
+ <button id="submitBtn" type="submit">Submit</button>
394
+ </form>
395
+ <p id="notValid"></p>
396
+
397
+ <script src="constants.js"></script>
398
+ <script src="getData.js"></script>
399
+
400
+ </html>
@@ -0,0 +1,41 @@
1
+ var form = document.getElementById('form');
2
+ var submitBtn = document.getElementById('submitBtn');
3
+ var invalid_text = document.getElementById('notValid');
4
+
5
+ var yVal;
6
+
7
+ form.addEventListener('submit', function (e) {
8
+ e.preventDefault();
9
+ let input = document.getElementById('yVal').value;
10
+ var inputObject = parseJSONObject(input);
11
+ xVal = [];
12
+ yVal = [];
13
+ for (var key in inputObject) {
14
+ if (inputObject.hasOwnProperty(key)) {
15
+ xVal.push(key);
16
+ yVal.push(inputObject[key]);
17
+ }
18
+ }
19
+ // yVal = input.split(",").map(function(item) {
20
+ // return parseFloat(item.trim());
21
+ // });
22
+ sessionStorage.setItem('xVal', xVal);
23
+ sessionStorage.setItem('yVal', yVal);
24
+ if (yVal.length != _numBars) {
25
+ invalid_text.innerHTML = 'Invalid input';
26
+ } else {
27
+ window.location.assign(
28
+ '/Users/y.yujun/Documents/Data accessiblization/accessible-graph/accessible-graphs/barplot.html'
29
+ );
30
+ }
31
+ });
32
+
33
+ function parseJSONObject(json) {
34
+ try {
35
+ var obj = JSON.parse(json);
36
+ if (obj && typeof obj == 'object') {
37
+ return obj;
38
+ }
39
+ } catch (e) {}
40
+ return false;
41
+ }