ruby-trade 0.1

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 (144) hide show
  1. data/.gitignore +5 -0
  2. data/README.md +99 -0
  3. data/examples/market_maker.rb +42 -0
  4. data/lib/Gemfile +6 -0
  5. data/lib/Gemfile.lock +23 -0
  6. data/lib/client.rb +203 -0
  7. data/lib/order.rb +49 -0
  8. data/lib/ruby-trade.rb +1 -0
  9. data/rubytrade.gemspec +12 -0
  10. data/server/Gemfile +12 -0
  11. data/server/Gemfile.lock +57 -0
  12. data/server/account.rb +39 -0
  13. data/server/app.rb +20 -0
  14. data/server/exchange.rb +59 -0
  15. data/server/order-book.rb +113 -0
  16. data/server/order.rb +60 -0
  17. data/server/public/app.js +51 -0
  18. data/server/public/dist/css/bootstrap-theme.css +459 -0
  19. data/server/public/dist/css/bootstrap-theme.min.css +9 -0
  20. data/server/public/dist/css/bootstrap.css +7098 -0
  21. data/server/public/dist/css/bootstrap.min.css +9 -0
  22. data/server/public/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  23. data/server/public/dist/fonts/glyphicons-halflings-regular.svg +229 -0
  24. data/server/public/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  25. data/server/public/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  26. data/server/public/dist/js/bootstrap.js +2002 -0
  27. data/server/public/dist/js/bootstrap.min.js +9 -0
  28. data/server/public/flot/API.md +1464 -0
  29. data/server/public/flot/CONTRIBUTING.md +99 -0
  30. data/server/public/flot/FAQ.md +75 -0
  31. data/server/public/flot/LICENSE.txt +22 -0
  32. data/server/public/flot/Makefile +12 -0
  33. data/server/public/flot/NEWS.md +893 -0
  34. data/server/public/flot/PLUGINS.md +143 -0
  35. data/server/public/flot/README.md +110 -0
  36. data/server/public/flot/build.log +0 -0
  37. data/server/public/flot/examples/ajax/data-eu-gdp-growth-1.json +4 -0
  38. data/server/public/flot/examples/ajax/data-eu-gdp-growth-2.json +4 -0
  39. data/server/public/flot/examples/ajax/data-eu-gdp-growth-3.json +4 -0
  40. data/server/public/flot/examples/ajax/data-eu-gdp-growth-4.json +4 -0
  41. data/server/public/flot/examples/ajax/data-eu-gdp-growth-5.json +4 -0
  42. data/server/public/flot/examples/ajax/data-eu-gdp-growth.json +4 -0
  43. data/server/public/flot/examples/ajax/data-japan-gdp-growth.json +4 -0
  44. data/server/public/flot/examples/ajax/data-usa-gdp-growth.json +4 -0
  45. data/server/public/flot/examples/ajax/index.html +173 -0
  46. data/server/public/flot/examples/annotating/index.html +87 -0
  47. data/server/public/flot/examples/axes-interacting/index.html +97 -0
  48. data/server/public/flot/examples/axes-multiple/index.html +77 -0
  49. data/server/public/flot/examples/axes-time-zones/date.js +893 -0
  50. data/server/public/flot/examples/axes-time-zones/index.html +114 -0
  51. data/server/public/flot/examples/axes-time-zones/tz/africa +1181 -0
  52. data/server/public/flot/examples/axes-time-zones/tz/antarctica +413 -0
  53. data/server/public/flot/examples/axes-time-zones/tz/asia +2717 -0
  54. data/server/public/flot/examples/axes-time-zones/tz/australasia +1719 -0
  55. data/server/public/flot/examples/axes-time-zones/tz/backward +117 -0
  56. data/server/public/flot/examples/axes-time-zones/tz/etcetera +81 -0
  57. data/server/public/flot/examples/axes-time-zones/tz/europe +2856 -0
  58. data/server/public/flot/examples/axes-time-zones/tz/factory +10 -0
  59. data/server/public/flot/examples/axes-time-zones/tz/iso3166.tab +276 -0
  60. data/server/public/flot/examples/axes-time-zones/tz/leapseconds +100 -0
  61. data/server/public/flot/examples/axes-time-zones/tz/northamerica +3235 -0
  62. data/server/public/flot/examples/axes-time-zones/tz/pacificnew +28 -0
  63. data/server/public/flot/examples/axes-time-zones/tz/solar87 +390 -0
  64. data/server/public/flot/examples/axes-time-zones/tz/solar88 +390 -0
  65. data/server/public/flot/examples/axes-time-zones/tz/solar89 +395 -0
  66. data/server/public/flot/examples/axes-time-zones/tz/southamerica +1711 -0
  67. data/server/public/flot/examples/axes-time-zones/tz/systemv +38 -0
  68. data/server/public/flot/examples/axes-time-zones/tz/yearistype.sh +38 -0
  69. data/server/public/flot/examples/axes-time-zones/tz/zone.tab +441 -0
  70. data/server/public/flot/examples/axes-time/index.html +137 -0
  71. data/server/public/flot/examples/background.png +0 -0
  72. data/server/public/flot/examples/basic-options/index.html +91 -0
  73. data/server/public/flot/examples/basic-usage/index.html +57 -0
  74. data/server/public/flot/examples/canvas/index.html +75 -0
  75. data/server/public/flot/examples/categories/index.html +64 -0
  76. data/server/public/flot/examples/examples.css +97 -0
  77. data/server/public/flot/examples/image/hs-2004-27-a-large-web.jpg +0 -0
  78. data/server/public/flot/examples/image/index.html +69 -0
  79. data/server/public/flot/examples/index.html +80 -0
  80. data/server/public/flot/examples/interacting/index.html +130 -0
  81. data/server/public/flot/examples/navigate/arrow-down.gif +0 -0
  82. data/server/public/flot/examples/navigate/arrow-left.gif +0 -0
  83. data/server/public/flot/examples/navigate/arrow-right.gif +0 -0
  84. data/server/public/flot/examples/navigate/arrow-up.gif +0 -0
  85. data/server/public/flot/examples/navigate/index.html +153 -0
  86. data/server/public/flot/examples/percentiles/index.html +79 -0
  87. data/server/public/flot/examples/realtime/index.html +122 -0
  88. data/server/public/flot/examples/resize/index.html +76 -0
  89. data/server/public/flot/examples/selection/index.html +141 -0
  90. data/server/public/flot/examples/series-errorbars/index.html +150 -0
  91. data/server/public/flot/examples/series-pie/index.html +818 -0
  92. data/server/public/flot/examples/series-toggle/index.html +121 -0
  93. data/server/public/flot/examples/series-types/index.html +90 -0
  94. data/server/public/flot/examples/shared/jquery-ui/jquery-ui.min.css +6 -0
  95. data/server/public/flot/examples/shared/jquery-ui/jquery-ui.min.js +6 -0
  96. data/server/public/flot/examples/stacking/index.html +107 -0
  97. data/server/public/flot/examples/symbols/index.html +76 -0
  98. data/server/public/flot/examples/threshold/index.html +76 -0
  99. data/server/public/flot/examples/tracking/index.html +135 -0
  100. data/server/public/flot/examples/visitors/index.html +146 -0
  101. data/server/public/flot/examples/zooming/index.html +144 -0
  102. data/server/public/flot/excanvas.js +1428 -0
  103. data/server/public/flot/excanvas.min.js +1 -0
  104. data/server/public/flot/jquery.colorhelpers.js +179 -0
  105. data/server/public/flot/jquery.colorhelpers.min.js +21 -0
  106. data/server/public/flot/jquery.flot.canvas.js +345 -0
  107. data/server/public/flot/jquery.flot.canvas.min.js +28 -0
  108. data/server/public/flot/jquery.flot.categories.js +190 -0
  109. data/server/public/flot/jquery.flot.categories.min.js +44 -0
  110. data/server/public/flot/jquery.flot.crosshair.js +176 -0
  111. data/server/public/flot/jquery.flot.crosshair.min.js +59 -0
  112. data/server/public/flot/jquery.flot.errorbars.js +353 -0
  113. data/server/public/flot/jquery.flot.errorbars.min.js +63 -0
  114. data/server/public/flot/jquery.flot.fillbetween.js +226 -0
  115. data/server/public/flot/jquery.flot.fillbetween.min.js +30 -0
  116. data/server/public/flot/jquery.flot.image.js +241 -0
  117. data/server/public/flot/jquery.flot.image.min.js +53 -0
  118. data/server/public/flot/jquery.flot.js +3061 -0
  119. data/server/public/flot/jquery.flot.min.js +29 -0
  120. data/server/public/flot/jquery.flot.navigate.js +346 -0
  121. data/server/public/flot/jquery.flot.navigate.min.js +86 -0
  122. data/server/public/flot/jquery.flot.pie.js +817 -0
  123. data/server/public/flot/jquery.flot.pie.min.js +56 -0
  124. data/server/public/flot/jquery.flot.resize.js +60 -0
  125. data/server/public/flot/jquery.flot.resize.min.js +19 -0
  126. data/server/public/flot/jquery.flot.selection.js +360 -0
  127. data/server/public/flot/jquery.flot.selection.min.js +79 -0
  128. data/server/public/flot/jquery.flot.stack.js +188 -0
  129. data/server/public/flot/jquery.flot.stack.min.js +36 -0
  130. data/server/public/flot/jquery.flot.symbol.js +71 -0
  131. data/server/public/flot/jquery.flot.symbol.min.js +14 -0
  132. data/server/public/flot/jquery.flot.threshold.js +142 -0
  133. data/server/public/flot/jquery.flot.threshold.min.js +43 -0
  134. data/server/public/flot/jquery.flot.time.js +431 -0
  135. data/server/public/flot/jquery.flot.time.min.js +9 -0
  136. data/server/public/flot/jquery.js +9472 -0
  137. data/server/public/flot/jquery.min.js +2 -0
  138. data/server/public/index.html +53 -0
  139. data/server/public/jquery-2.0.3.min.js +6 -0
  140. data/server/public/sockjs-0.2.1.min.js +27 -0
  141. data/server/server.rb +156 -0
  142. data/server/test/test_order_book.rb +118 -0
  143. data/server/web_server.rb +110 -0
  144. metadata +188 -0
@@ -0,0 +1,121 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
+ <title>Flot Examples: Toggling Series</title>
6
+ <link href="../examples.css" rel="stylesheet" type="text/css">
7
+ <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
8
+ <script language="javascript" type="text/javascript" src="../../jquery.js"></script>
9
+ <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
10
+ <script type="text/javascript">
11
+
12
+ $(function() {
13
+
14
+ var datasets = {
15
+ "usa": {
16
+ label: "USA",
17
+ data: [[1988, 483994], [1989, 479060], [1990, 457648], [1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995, 357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999, 329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003, 440813], [2004, 480451], [2005, 504638], [2006, 528692]]
18
+ },
19
+ "russia": {
20
+ label: "Russia",
21
+ data: [[1988, 218000], [1989, 203000], [1990, 171000], [1992, 42500], [1993, 37600], [1994, 36600], [1995, 21700], [1996, 19200], [1997, 21300], [1998, 13600], [1999, 14000], [2000, 19100], [2001, 21300], [2002, 23600], [2003, 25100], [2004, 26100], [2005, 31100], [2006, 34700]]
22
+ },
23
+ "uk": {
24
+ label: "UK",
25
+ data: [[1988, 62982], [1989, 62027], [1990, 60696], [1991, 62348], [1992, 58560], [1993, 56393], [1994, 54579], [1995, 50818], [1996, 50554], [1997, 48276], [1998, 47691], [1999, 47529], [2000, 47778], [2001, 48760], [2002, 50949], [2003, 57452], [2004, 60234], [2005, 60076], [2006, 59213]]
26
+ },
27
+ "germany": {
28
+ label: "Germany",
29
+ data: [[1988, 55627], [1989, 55475], [1990, 58464], [1991, 55134], [1992, 52436], [1993, 47139], [1994, 43962], [1995, 43238], [1996, 42395], [1997, 40854], [1998, 40993], [1999, 41822], [2000, 41147], [2001, 40474], [2002, 40604], [2003, 40044], [2004, 38816], [2005, 38060], [2006, 36984]]
30
+ },
31
+ "denmark": {
32
+ label: "Denmark",
33
+ data: [[1988, 3813], [1989, 3719], [1990, 3722], [1991, 3789], [1992, 3720], [1993, 3730], [1994, 3636], [1995, 3598], [1996, 3610], [1997, 3655], [1998, 3695], [1999, 3673], [2000, 3553], [2001, 3774], [2002, 3728], [2003, 3618], [2004, 3638], [2005, 3467], [2006, 3770]]
34
+ },
35
+ "sweden": {
36
+ label: "Sweden",
37
+ data: [[1988, 6402], [1989, 6474], [1990, 6605], [1991, 6209], [1992, 6035], [1993, 6020], [1994, 6000], [1995, 6018], [1996, 3958], [1997, 5780], [1998, 5954], [1999, 6178], [2000, 6411], [2001, 5993], [2002, 5833], [2003, 5791], [2004, 5450], [2005, 5521], [2006, 5271]]
38
+ },
39
+ "norway": {
40
+ label: "Norway",
41
+ data: [[1988, 4382], [1989, 4498], [1990, 4535], [1991, 4398], [1992, 4766], [1993, 4441], [1994, 4670], [1995, 4217], [1996, 4275], [1997, 4203], [1998, 4482], [1999, 4506], [2000, 4358], [2001, 4385], [2002, 5269], [2003, 5066], [2004, 5194], [2005, 4887], [2006, 4891]]
42
+ }
43
+ };
44
+
45
+ // hard-code color indices to prevent them from shifting as
46
+ // countries are turned on/off
47
+
48
+ var i = 0;
49
+ $.each(datasets, function(key, val) {
50
+ val.color = i;
51
+ ++i;
52
+ });
53
+
54
+ // insert checkboxes
55
+ var choiceContainer = $("#choices");
56
+ $.each(datasets, function(key, val) {
57
+ choiceContainer.append("<br/><input type='checkbox' name='" + key +
58
+ "' checked='checked' id='id" + key + "'></input>" +
59
+ "<label for='id" + key + "'>"
60
+ + val.label + "</label>");
61
+ });
62
+
63
+ choiceContainer.find("input").click(plotAccordingToChoices);
64
+
65
+ function plotAccordingToChoices() {
66
+
67
+ var data = [];
68
+
69
+ choiceContainer.find("input:checked").each(function () {
70
+ var key = $(this).attr("name");
71
+ if (key && datasets[key]) {
72
+ data.push(datasets[key]);
73
+ }
74
+ });
75
+
76
+ if (data.length > 0) {
77
+ $.plot("#placeholder", data, {
78
+ yaxis: {
79
+ min: 0
80
+ },
81
+ xaxis: {
82
+ tickDecimals: 0
83
+ }
84
+ });
85
+ }
86
+ }
87
+
88
+ plotAccordingToChoices();
89
+
90
+ // Add the Flot version string to the footer
91
+
92
+ $("#footer").prepend("Flot " + $.plot.version + " &ndash; ");
93
+ });
94
+
95
+ </script>
96
+ </head>
97
+ <body>
98
+
99
+ <div id="header">
100
+ <h2>Toggling Series</h2>
101
+ </div>
102
+
103
+ <div id="content">
104
+
105
+ <div class="demo-container">
106
+ <div id="placeholder" class="demo-placeholder" style="float:left; width:675px;"></div>
107
+ <p id="choices" style="float:right; width:135px;"></p>
108
+ </div>
109
+
110
+ <p>This example shows military budgets for various countries in constant (2005) million US dollars (source: <a href="http://www.sipri.org/">SIPRI</a>).</p>
111
+
112
+ <p>Since all data is available client-side, it's pretty easy to make the plot interactive. Try turning countries on and off with the checkboxes next to the plot.</p>
113
+
114
+ </div>
115
+
116
+ <div id="footer">
117
+ Copyright &copy; 2007 - 2013 IOLA and Ole Laursen
118
+ </div>
119
+
120
+ </body>
121
+ </html>
@@ -0,0 +1,90 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
+ <title>Flot Examples: Series Types</title>
6
+ <link href="../examples.css" rel="stylesheet" type="text/css">
7
+ <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
8
+ <script language="javascript" type="text/javascript" src="../../jquery.js"></script>
9
+ <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
10
+ <script type="text/javascript">
11
+
12
+ $(function() {
13
+
14
+ var d1 = [];
15
+ for (var i = 0; i < 14; i += 0.5) {
16
+ d1.push([i, Math.sin(i)]);
17
+ }
18
+
19
+ var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]];
20
+
21
+ var d3 = [];
22
+ for (var i = 0; i < 14; i += 0.5) {
23
+ d3.push([i, Math.cos(i)]);
24
+ }
25
+
26
+ var d4 = [];
27
+ for (var i = 0; i < 14; i += 0.1) {
28
+ d4.push([i, Math.sqrt(i * 10)]);
29
+ }
30
+
31
+ var d5 = [];
32
+ for (var i = 0; i < 14; i += 0.5) {
33
+ d5.push([i, Math.sqrt(i)]);
34
+ }
35
+
36
+ var d6 = [];
37
+ for (var i = 0; i < 14; i += 0.5 + Math.random()) {
38
+ d6.push([i, Math.sqrt(2*i + Math.sin(i) + 5)]);
39
+ }
40
+
41
+ $.plot("#placeholder", [{
42
+ data: d1,
43
+ lines: { show: true, fill: true }
44
+ }, {
45
+ data: d2,
46
+ bars: { show: true }
47
+ }, {
48
+ data: d3,
49
+ points: { show: true }
50
+ }, {
51
+ data: d4,
52
+ lines: { show: true }
53
+ }, {
54
+ data: d5,
55
+ lines: { show: true },
56
+ points: { show: true }
57
+ }, {
58
+ data: d6,
59
+ lines: { show: true, steps: true }
60
+ }]);
61
+
62
+ // Add the Flot version string to the footer
63
+
64
+ $("#footer").prepend("Flot " + $.plot.version + " &ndash; ");
65
+ });
66
+
67
+ </script>
68
+ </head>
69
+ <body>
70
+
71
+ <div id="header">
72
+ <h2>Series Types</h2>
73
+ </div>
74
+
75
+ <div id="content">
76
+
77
+ <div class="demo-container">
78
+ <div id="placeholder" class="demo-placeholder"></div>
79
+ </div>
80
+
81
+ <p>Flot supports lines, points, filled areas, bars and any combinations of these, in the same plot and even on the same data series.</p>
82
+
83
+ </div>
84
+
85
+ <div id="footer">
86
+ Copyright &copy; 2007 - 2013 IOLA and Ole Laursen
87
+ </div>
88
+
89
+ </body>
90
+ </html>
@@ -0,0 +1,6 @@
1
+ /*! jQuery UI - v1.10.0 - 2013-01-26
2
+ * http://jqueryui.com
3
+ * Includes: jquery.ui.core.css, jquery.ui.resizable.css
4
+ * Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */
5
+
6
+ .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}
@@ -0,0 +1,6 @@
1
+ /*! jQuery UI - v1.10.0 - 2013-01-26
2
+ * http://jqueryui.com
3
+ * Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.resizable.js
4
+ * Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */
5
+
6
+ (function(e,t){function i(t,n){var r,i,o,u=t.nodeName.toLowerCase();return"area"===u?(r=t.parentNode,i=r.name,!t.href||!i||r.nodeName.toLowerCase()!=="map"?!1:(o=e("img[usemap=#"+i+"]")[0],!!o&&s(o))):(/input|select|textarea|button|object/.test(u)?!t.disabled:"a"===u?t.href||n:n)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return e.css(this,"visibility")==="hidden"}).length}var n=0,r=/^ui-id-\d+$/;e.ui=e.ui||{};if(e.ui.version)return;e.extend(e.ui,{version:"1.10.0",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({_focus:e.fn.focus,focus:function(t,n){return typeof t=="number"?this.each(function(){var r=this;setTimeout(function(){e(r).focus(),n&&n.call(r)},t)}):this._focus.apply(this,arguments)},scrollParent:function(){var t;return e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?t=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):t=this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(n){if(n!==t)return this.css("zIndex",n);if(this.length){var r=e(this[0]),i,s;while(r.length&&r[0]!==document){i=r.css("position");if(i==="absolute"||i==="relative"||i==="fixed"){s=parseInt(r.css("zIndex"),10);if(!isNaN(s)&&s!==0)return s}r=r.parent()}}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++n)})},removeUniqueId:function(){return this.each(function(){r.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(n){return!!e.data(n,t)}}):function(t,n,r){return!!e.data(t,r[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var n=e.attr(t,"tabindex"),r=isNaN(n);return(r||n>=0)&&i(t,!r)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(n,r){function u(t,n,r,s){return e.each(i,function(){n-=parseFloat(e.css(t,"padding"+this))||0,r&&(n-=parseFloat(e.css(t,"border"+this+"Width"))||0),s&&(n-=parseFloat(e.css(t,"margin"+this))||0)}),n}var i=r==="Width"?["Left","Right"]:["Top","Bottom"],s=r.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+r]=function(n){return n===t?o["inner"+r].call(this):this.each(function(){e(this).css(s,u(this,n)+"px")})},e.fn["outer"+r]=function(t,n){return typeof t!="number"?o["outer"+r].call(this,t):this.each(function(){e(this).css(s,u(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(n){return arguments.length?t.call(this,e.camelCase(n)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,n,r){var i,s=e.ui[t].prototype;for(i in r)s.plugins[i]=s.plugins[i]||[],s.plugins[i].push([n,r[i]])},call:function(e,t,n){var r,i=e.plugins[t];if(!i||!e.element[0].parentNode||e.element[0].parentNode.nodeType===11)return;for(r=0;r<i.length;r++)e.options[i[r][0]]&&i[r][1].apply(e.element,n)}},hasScroll:function(t,n){if(e(t).css("overflow")==="hidden")return!1;var r=n&&n==="left"?"scrollLeft":"scrollTop",i=!1;return t[r]>0?!0:(t[r]=1,i=t[r]>0,t[r]=0,i)}})})(jQuery);(function(e,t){var n=0,r=Array.prototype.slice,i=e.cleanData;e.cleanData=function(t){for(var n=0,r;(r=t[n])!=null;n++)try{e(r).triggerHandler("remove")}catch(s){}i(t)},e.widget=function(t,n,r){var i,s,o,u,a={},f=t.split(".")[0];t=t.split(".")[1],i=f+"-"+t,r||(r=n,n=e.Widget),e.expr[":"][i.toLowerCase()]=function(t){return!!e.data(t,i)},e[f]=e[f]||{},s=e[f][t],o=e[f][t]=function(e,t){if(!this._createWidget)return new o(e,t);arguments.length&&this._createWidget(e,t)},e.extend(o,s,{version:r.version,_proto:e.extend({},r),_childConstructors:[]}),u=new n,u.options=e.widget.extend({},u.options),e.each(r,function(t,r){if(!e.isFunction(r)){a[t]=r;return}a[t]=function(){var e=function(){return n.prototype[t].apply(this,arguments)},i=function(e){return n.prototype[t].apply(this,e)};return function(){var t=this._super,n=this._superApply,s;return this._super=e,this._superApply=i,s=r.apply(this,arguments),this._super=t,this._superApply=n,s}}()}),o.prototype=e.widget.extend(u,{widgetEventPrefix:s?u.widgetEventPrefix:t},a,{constructor:o,namespace:f,widgetName:t,widgetFullName:i}),s?(e.each(s._childConstructors,function(t,n){var r=n.prototype;e.widget(r.namespace+"."+r.widgetName,o,n._proto)}),delete s._childConstructors):n._childConstructors.push(o),e.widget.bridge(t,o)},e.widget.extend=function(n){var i=r.call(arguments,1),s=0,o=i.length,u,a;for(;s<o;s++)for(u in i[s])a=i[s][u],i[s].hasOwnProperty(u)&&a!==t&&(e.isPlainObject(a)?n[u]=e.isPlainObject(n[u])?e.widget.extend({},n[u],a):e.widget.extend({},a):n[u]=a);return n},e.widget.bridge=function(n,i){var s=i.prototype.widgetFullName||n;e.fn[n]=function(o){var u=typeof o=="string",a=r.call(arguments,1),f=this;return o=!u&&a.length?e.widget.extend.apply(null,[o].concat(a)):o,u?this.each(function(){var r,i=e.data(this,s);if(!i)return e.error("cannot call methods on "+n+" prior to initialization; "+"attempted to call method '"+o+"'");if(!e.isFunction(i[o])||o.charAt(0)==="_")return e.error("no such method '"+o+"' for "+n+" widget instance");r=i[o].apply(i,a);if(r!==i&&r!==t)return f=r&&r.jquery?f.pushStack(r.get()):r,!1}):this.each(function(){var t=e.data(this,s);t?t.option(o||{})._init():e.data(this,s,new i(o,this))}),f}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,r){r=e(r||this.defaultElement||this)[0],this.element=e(r),this.uuid=n++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),r!==this&&(e.data(r,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===r&&this.destroy()}}),this.document=e(r.style?r.ownerDocument:r.document||r),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(n,r){var i=n,s,o,u;if(arguments.length===0)return e.widget.extend({},this.options);if(typeof n=="string"){i={},s=n.split("."),n=s.shift();if(s.length){o=i[n]=e.widget.extend({},this.options[n]);for(u=0;u<s.length-1;u++)o[s[u]]=o[s[u]]||{},o=o[s[u]];n=s.pop();if(r===t)return o[n]===t?null:o[n];o[n]=r}else{if(r===t)return this.options[n]===t?null:this.options[n];i[n]=r}}return this._setOptions(i),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,e==="disabled"&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(t,n,r){var i,s=this;typeof t!="boolean"&&(r=n,n=t,t=!1),r?(n=i=e(n),this.bindings=this.bindings.add(n)):(r=n,n=this.element,i=this.widget()),e.each(r,function(r,o){function u(){if(!t&&(s.options.disabled===!0||e(this).hasClass("ui-state-disabled")))return;return(typeof o=="string"?s[o]:o).apply(s,arguments)}typeof o!="string"&&(u.guid=o.guid=o.guid||u.guid||e.guid++);var a=r.match(/^(\w+)\s*(.*)$/),f=a[1]+s.eventNamespace,l=a[2];l?i.delegate(l,f,u):n.bind(f,u)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function n(){return(typeof e=="string"?r[e]:e).apply(r,arguments)}var r=this;return setTimeout(n,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,n,r){var i,s,o=this.options[t];r=r||{},n=e.Event(n),n.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),n.target=this.element[0],s=n.originalEvent;if(s)for(i in s)i in n||(n[i]=s[i]);return this.element.trigger(n,r),!(e.isFunction(o)&&o.apply(this.element[0],[n].concat(r))===!1||n.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,n){e.Widget.prototype["_"+t]=function(r,i,s){typeof i=="string"&&(i={effect:i});var o,u=i?i===!0||typeof i=="number"?n:i.effect||n:t;i=i||{},typeof i=="number"&&(i={duration:i}),o=!e.isEmptyObject(i),i.complete=s,i.delay&&r.delay(i.delay),o&&e.effects&&e.effects.effect[u]?r[t](i):u!==t&&r[u]?r[u](i.duration,i.easing,s):r.queue(function(n){e(this)[t](),s&&s.call(r[0]),n()})}})})(jQuery);(function(e,t){var n=!1;e(document).mouseup(function(){n=!1}),e.widget("ui.mouse",{version:"1.10.0",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(n){if(!0===e.data(n.target,t.widgetName+".preventClickEvent"))return e.removeData(n.target,t.widgetName+".preventClickEvent"),n.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(n)return;this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var r=this,i=t.which===1,s=typeof this.options.cancel=="string"&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;if(!i||s||!this._mouseCapture(t))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){r.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)){this._mouseStarted=this._mouseStart(t)!==!1;if(!this._mouseStarted)return t.preventDefault(),!0}return!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return r._mouseMove(e)},this._mouseUpDelegate=function(e){return r._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),n=!0,!0},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||document.documentMode<9)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(e,t){function n(e){return parseInt(e,10)||0}function r(e){return!isNaN(parseInt(e,10))}e.widget("ui.resizable",e.ui.mouse,{version:"1.10.0",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var t,n,r,i,s,o=this,u=this.options;this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!u.aspectRatio,aspectRatio:u.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:u.helper||u.ghost||u.animate?u.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=u.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor===String){this.handles==="all"&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={};for(n=0;n<t.length;n++)r=e.trim(t[n]),s="ui-resizable-"+r,i=e("<div class='ui-resizable-handle "+s+"'></div>"),i.css({zIndex:u.zIndex}),"se"===r&&i.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[r]=".ui-resizable-"+r,this.element.append(i)}this._renderAxis=function(t){var n,r,i,s;t=t||this.element;for(n in this.handles){this.handles[n].constructor===String&&(this.handles[n]=e(this.handles[n],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(r=e(this.handles[n],this.element),s=/sw|ne|nw|se|n|s/.test(n)?r.outerHeight():r.outerWidth(),i=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize());if(!e(this.handles[n]).length)continue}},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=i&&i[1]?i[1]:"se")}),u.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){if(u.disabled)return;e(this).removeClass("ui-resizable-autohide"),o._handles.show()}).mouseleave(function(){if(u.disabled)return;o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,n=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(n(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),n(this.originalElement),this},_mouseCapture:function(t){var n,r,i=!1;for(n in this.handles){r=e(this.handles[n])[0];if(r===t.target||e.contains(r,t.target))i=!0}return!this.options.disabled&&i},_mouseStart:function(t){var r,i,s,o=this.options,u=this.element.position(),a=this.element;return this.resizing=!0,/absolute/.test(a.css("position"))?a.css({position:"absolute",top:a.css("top"),left:a.css("left")}):a.is(".ui-draggable")&&a.css({position:"absolute",top:u.top,left:u.left}),this._renderProxy(),r=n(this.helper.css("left")),i=n(this.helper.css("top")),o.containment&&(r+=e(o.containment).scrollLeft()||0,i+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:r,top:i},this.size=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.originalPosition={left:r,top:i},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio=typeof o.aspectRatio=="number"?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor",s==="auto"?this.axis+"-resize":s),a.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var n,r=this.helper,i={},s=this.originalMousePosition,o=this.axis,u=this.position.top,a=this.position.left,f=this.size.width,l=this.size.height,c=t.pageX-s.left||0,h=t.pageY-s.top||0,p=this._change[o];if(!p)return!1;n=p.apply(this,[t,c,h]),this._updateVirtualBoundaries(t.shiftKey);if(this._aspectRatio||t.shiftKey)n=this._updateRatio(n,t);return n=this._respectSize(n,t),this._updateCache(n),this._propagate("resize",t),this.position.top!==u&&(i.top=this.position.top+"px"),this.position.left!==a&&(i.left=this.position.left+"px"),this.size.width!==f&&(i.width=this.size.width+"px"),this.size.height!==l&&(i.height=this.size.height+"px"),r.css(i),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(i)||this._trigger("resize",t,this.ui()),!1},_mouseStop:function(t){this.resizing=!1;var n,r,i,s,o,u,a,f=this.options,l=this;return this._helper&&(n=this._proportionallyResizeElements,r=n.length&&/textarea/i.test(n[0].nodeName),i=r&&e.ui.hasScroll(n[0],"left")?0:l.sizeDiff.height,s=r?0:l.sizeDiff.width,o={width:l.helper.width()-s,height:l.helper.height()-i},u=parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left)||null,a=parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top)||null,f.animate||this.element.css(e.extend(o,{top:a,left:u})),l.helper.height(l.size.height),l.helper.width(l.size.width),this._helper&&!f.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,n,i,s,o,u=this.options;o={minWidth:r(u.minWidth)?u.minWidth:0,maxWidth:r(u.maxWidth)?u.maxWidth:Infinity,minHeight:r(u.minHeight)?u.minHeight:0,maxHeight:r(u.maxHeight)?u.maxHeight:Infinity};if(this._aspectRatio||e)t=o.minHeight*this.aspectRatio,i=o.minWidth/this.aspectRatio,n=o.maxHeight*this.aspectRatio,s=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),i>o.minHeight&&(o.minHeight=i),n<o.maxWidth&&(o.maxWidth=n),s<o.maxHeight&&(o.maxHeight=s);this._vBoundaries=o},_updateCache:function(e){this.offset=this.helper.offset(),r(e.left)&&(this.position.left=e.left),r(e.top)&&(this.position.top=e.top),r(e.height)&&(this.size.height=e.height),r(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,n=this.size,i=this.axis;return r(e.height)?e.width=e.height*this.aspectRatio:r(e.width)&&(e.height=e.width/this.aspectRatio),i==="sw"&&(e.left=t.left+(n.width-e.width),e.top=null),i==="nw"&&(e.top=t.top+(n.height-e.height),e.left=t.left+(n.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,n=this.axis,i=r(e.width)&&t.maxWidth&&t.maxWidth<e.width,s=r(e.height)&&t.maxHeight&&t.maxHeight<e.height,o=r(e.width)&&t.minWidth&&t.minWidth>e.width,u=r(e.height)&&t.minHeight&&t.minHeight>e.height,a=this.originalPosition.left+this.originalSize.width,f=this.position.top+this.size.height,l=/sw|nw|w/.test(n),c=/nw|ne|n/.test(n);return o&&(e.width=t.minWidth),u&&(e.height=t.minHeight),i&&(e.width=t.maxWidth),s&&(e.height=t.maxHeight),o&&l&&(e.left=a-t.minWidth),i&&l&&(e.left=a-t.maxWidth),u&&c&&(e.top=f-t.minHeight),s&&c&&(e.top=f-t.maxHeight),!e.width&&!e.height&&!e.left&&e.top?e.top=null:!e.width&&!e.height&&!e.top&&e.left&&(e.left=null),e},_proportionallyResize:function(){if(!this._proportionallyResizeElements.length)return;var e,t,n,r,i,s=this.helper||this.element;for(e=0;e<this._proportionallyResizeElements.length;e++){i=this._proportionallyResizeElements[e];if(!this.borderDif){this.borderDif=[],n=[i.css("borderTopWidth"),i.css("borderRightWidth"),i.css("borderBottomWidth"),i.css("borderLeftWidth")],r=[i.css("paddingTop"),i.css("paddingRight"),i.css("paddingBottom"),i.css("paddingLeft")];for(t=0;t<n.length;t++)this.borderDif[t]=(parseInt(n[t],10)||0)+(parseInt(r[t],10)||0)}i.css({height:s.height()-this.borderDif[0]-this.borderDif[2]||0,width:s.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var t=this.element,n=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++n.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var n=this.originalSize,r=this.originalPosition;return{left:r.left+t,width:n.width-t}},n:function(e,t,n){var r=this.originalSize,i=this.originalPosition;return{top:i.top+n,height:r.height-n}},s:function(e,t,n){return{height:this.originalSize.height+n}},se:function(t,n,r){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,n,r]))},sw:function(t,n,r){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,n,r]))},ne:function(t,n,r){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,n,r]))},nw:function(t,n,r){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,n,r]))}},_propagate:function(t,n){e.ui.plugin.call(this,t,[n,this.ui()]),t!=="resize"&&this._trigger(t,n,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var n=e(this).data("ui-resizable"),r=n.options,i=n._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),o=s&&e.ui.hasScroll(i[0],"left")?0:n.sizeDiff.height,u=s?0:n.sizeDiff.width,a={width:n.size.width-u,height:n.size.height-o},f=parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left)||null,l=parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top)||null;n.element.animate(e.extend(a,l&&f?{top:l,left:f}:{}),{duration:r.animateDuration,easing:r.animateEasing,step:function(){var r={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};i&&i.length&&e(i[0]).css({width:r.width,height:r.height}),n._updateCache(r),n._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,r,i,s,o,u,a,f=e(this).data("ui-resizable"),l=f.options,c=f.element,h=l.containment,p=h instanceof e?h.get(0):/parent/.test(h)?c.parent().get(0):h;if(!p)return;f.containerElement=e(p),/document/.test(h)||h===document?(f.containerOffset={left:0,top:0},f.containerPosition={left:0,top:0},f.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(p),r=[],e(["Top","Right","Left","Bottom"]).each(function(e,i){r[e]=n(t.css("padding"+i))}),f.containerOffset=t.offset(),f.containerPosition=t.position(),f.containerSize={height:t.innerHeight()-r[3],width:t.innerWidth()-r[1]},i=f.containerOffset,s=f.containerSize.height,o=f.containerSize.width,u=e.ui.hasScroll(p,"left")?p.scrollWidth:o,a=e.ui.hasScroll(p)?p.scrollHeight:s,f.parentData={element:p,left:i.left,top:i.top,width:u,height:a})},resize:function(t){var n,r,i,s,o=e(this).data("ui-resizable"),u=o.options,a=o.containerOffset,f=o.position,l=o._aspectRatio||t.shiftKey,c={top:0,left:0},h=o.containerElement;h[0]!==document&&/static/.test(h.css("position"))&&(c=a),f.left<(o._helper?a.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-a.left:o.position.left-c.left),l&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=u.helper?a.left:0),f.top<(o._helper?a.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-a.top:o.position.top),l&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?a.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,n=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),r=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-a.top)+o.sizeDiff.height),i=o.containerElement.get(0)===o.element.parent().get(0),s=/relative|absolute/.test(o.containerElement.css("position")),i&&s&&(n-=o.parentData.left),n+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-n,l&&(o.size.height=o.size.width/o.aspectRatio)),r+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-r,l&&(o.size.width=o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),n=t.options,r=t.containerOffset,i=t.containerPosition,s=t.containerElement,o=e(t.helper),u=o.offset(),a=o.outerWidth()-t.sizeDiff.width,f=o.outerHeight()-t.sizeDiff.height;t._helper&&!n.animate&&/relative/.test(s.css("position"))&&e(this).css({left:u.left-i.left-r.left,width:a,height:f}),t._helper&&!n.animate&&/static/.test(s.css("position"))&&e(this).css({left:u.left-i.left-r.left,width:a,height:f})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),n=t.options,r=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};typeof n.alsoResize=="object"&&!n.alsoResize.parentNode?n.alsoResize.length?(n.alsoResize=n.alsoResize[0],r(n.alsoResize)):e.each(n.alsoResize,function(e){r(e)}):r(n.alsoResize)},resize:function(t,n){var r=e(this).data("ui-resizable"),i=r.options,s=r.originalSize,o=r.originalPosition,u={height:r.size.height-s.height||0,width:r.size.width-s.width||0,top:r.position.top-o.top||0,left:r.position.left-o.left||0},a=function(t,r){e(t).each(function(){var t=e(this),i=e(this).data("ui-resizable-alsoresize"),s={},o=r&&r.length?r:t.parents(n.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var n=(i[t]||0)+(u[t]||0);n&&n>=0&&(s[t]=n||null)}),t.css(s)})};typeof i.alsoResize=="object"&&!i.alsoResize.nodeType?e.each(i.alsoResize,function(e,t){a(e,t)}):a(i.alsoResize)},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),n=t.options,r=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:r.height,width:r.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof n.ghost=="string"?n.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),n=t.options,r=t.size,i=t.originalSize,s=t.originalPosition,o=t.axis,u=typeof n.grid=="number"?[n.grid,n.grid]:n.grid,a=u[0]||1,f=u[1]||1,l=Math.round((r.width-i.width)/a)*a,c=Math.round((r.height-i.height)/f)*f,h=i.width+l,p=i.height+c,d=n.maxWidth&&n.maxWidth<h,v=n.maxHeight&&n.maxHeight<p,m=n.minWidth&&n.minWidth>h,g=n.minHeight&&n.minHeight>p;n.grid=u,m&&(h+=a),g&&(p+=f),d&&(h-=a),v&&(p-=f),/^(se|s|e)$/.test(o)?(t.size.width=h,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=h,t.size.height=p,t.position.top=s.top-c):/^(sw)$/.test(o)?(t.size.width=h,t.size.height=p,t.position.left=s.left-l):(t.size.width=h,t.size.height=p,t.position.top=s.top-c,t.position.left=s.left-l)}})})(jQuery);
@@ -0,0 +1,107 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
+ <title>Flot Examples: Stacking</title>
6
+ <link href="../examples.css" rel="stylesheet" type="text/css">
7
+ <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
8
+ <script language="javascript" type="text/javascript" src="../../jquery.js"></script>
9
+ <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
10
+ <script language="javascript" type="text/javascript" src="../../jquery.flot.stack.js"></script>
11
+ <script type="text/javascript">
12
+
13
+ $(function() {
14
+
15
+ var d1 = [];
16
+ for (var i = 0; i <= 10; i += 1) {
17
+ d1.push([i, parseInt(Math.random() * 30)]);
18
+ }
19
+
20
+ var d2 = [];
21
+ for (var i = 0; i <= 10; i += 1) {
22
+ d2.push([i, parseInt(Math.random() * 30)]);
23
+ }
24
+
25
+ var d3 = [];
26
+ for (var i = 0; i <= 10; i += 1) {
27
+ d3.push([i, parseInt(Math.random() * 30)]);
28
+ }
29
+
30
+ var stack = 0,
31
+ bars = true,
32
+ lines = false,
33
+ steps = false;
34
+
35
+ function plotWithOptions() {
36
+ $.plot("#placeholder", [ d1, d2, d3 ], {
37
+ series: {
38
+ stack: stack,
39
+ lines: {
40
+ show: lines,
41
+ fill: true,
42
+ steps: steps
43
+ },
44
+ bars: {
45
+ show: bars,
46
+ barWidth: 0.6
47
+ }
48
+ }
49
+ });
50
+ }
51
+
52
+ plotWithOptions();
53
+
54
+ $(".stackControls button").click(function (e) {
55
+ e.preventDefault();
56
+ stack = $(this).text() == "With stacking" ? true : null;
57
+ plotWithOptions();
58
+ });
59
+
60
+ $(".graphControls button").click(function (e) {
61
+ e.preventDefault();
62
+ bars = $(this).text().indexOf("Bars") != -1;
63
+ lines = $(this).text().indexOf("Lines") != -1;
64
+ steps = $(this).text().indexOf("steps") != -1;
65
+ plotWithOptions();
66
+ });
67
+
68
+ // Add the Flot version string to the footer
69
+
70
+ $("#footer").prepend("Flot " + $.plot.version + " &ndash; ");
71
+ });
72
+
73
+ </script>
74
+ </head>
75
+ <body>
76
+
77
+ <div id="header">
78
+ <h2>Stacking</h2>
79
+ </div>
80
+
81
+ <div id="content">
82
+
83
+ <div class="demo-container">
84
+ <div id="placeholder" class="demo-placeholder"></div>
85
+ </div>
86
+
87
+ <p>With the stack plugin, you can have Flot stack the series. This is useful if you wish to display both a total and the constituents it is made of. The only requirement is that you provide the input sorted on x.</p>
88
+
89
+ <p class="stackControls">
90
+ <button>With stacking</button>
91
+ <button>Without stacking</button>
92
+ </p>
93
+
94
+ <p class="graphControls">
95
+ <button>Bars</button>
96
+ <button>Lines</button>
97
+ <button>Lines with steps</button>
98
+ </p>
99
+
100
+ </div>
101
+
102
+ <div id="footer">
103
+ Copyright &copy; 2007 - 2013 IOLA and Ole Laursen
104
+ </div>
105
+
106
+ </body>
107
+ </html>
@@ -0,0 +1,76 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
+ <title>Flot Examples: Symbols</title>
6
+ <link href="../examples.css" rel="stylesheet" type="text/css">
7
+ <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
8
+ <script language="javascript" type="text/javascript" src="../../jquery.js"></script>
9
+ <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
10
+ <script language="javascript" type="text/javascript" src="../../jquery.flot.symbol.js"></script>
11
+ <script type="text/javascript">
12
+
13
+ $(function() {
14
+
15
+ function generate(offset, amplitude) {
16
+
17
+ var res = [];
18
+ var start = 0, end = 10;
19
+
20
+ for (var i = 0; i <= 50; ++i) {
21
+ var x = start + i / 50 * (end - start);
22
+ res.push([x, amplitude * Math.sin(x + offset)]);
23
+ }
24
+
25
+ return res;
26
+ }
27
+
28
+ var data = [
29
+ { data: generate(2, 1.8), points: { symbol: "circle" } },
30
+ { data: generate(3, 1.5), points: { symbol: "square" } },
31
+ { data: generate(4, 0.9), points: { symbol: "diamond" } },
32
+ { data: generate(6, 1.4), points: { symbol: "triangle" } },
33
+ { data: generate(7, 1.1), points: { symbol: "cross" } }
34
+ ];
35
+
36
+ $.plot("#placeholder", data, {
37
+ series: {
38
+ points: {
39
+ show: true,
40
+ radius: 3
41
+ }
42
+ },
43
+ grid: {
44
+ hoverable: true
45
+ }
46
+ });
47
+
48
+ // Add the Flot version string to the footer
49
+
50
+ $("#footer").prepend("Flot " + $.plot.version + " &ndash; ");
51
+ });
52
+
53
+ </script>
54
+ </head>
55
+ <body>
56
+
57
+ <div id="header">
58
+ <h2>Symbols</h2>
59
+ </div>
60
+
61
+ <div id="content">
62
+
63
+ <div class="demo-container">
64
+ <div id="placeholder" class="demo-placeholder"></div>
65
+ </div>
66
+
67
+ <p>Points can be marked in several ways, with circles being the built-in default. For other point types, you can define a callback function to draw the symbol. Some common symbols are available in the symbol plugin.</p>
68
+
69
+ </div>
70
+
71
+ <div id="footer">
72
+ Copyright &copy; 2007 - 2013 IOLA and Ole Laursen
73
+ </div>
74
+
75
+ </body>
76
+ </html>
@@ -0,0 +1,76 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
+ <title>Flot Examples: Thresholds</title>
6
+ <link href="../examples.css" rel="stylesheet" type="text/css">
7
+ <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]-->
8
+ <script language="javascript" type="text/javascript" src="../../jquery.js"></script>
9
+ <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script>
10
+ <script language="javascript" type="text/javascript" src="../../jquery.flot.threshold.js"></script>
11
+ <script type="text/javascript">
12
+
13
+ $(function() {
14
+
15
+ var d1 = [];
16
+ for (var i = 0; i <= 60; i += 1) {
17
+ d1.push([i, parseInt(Math.random() * 30 - 10)]);
18
+ }
19
+
20
+ function plotWithOptions(t) {
21
+ $.plot("#placeholder", [{
22
+ data: d1,
23
+ color: "rgb(30, 180, 20)",
24
+ threshold: {
25
+ below: t,
26
+ color: "rgb(200, 20, 30)"
27
+ },
28
+ lines: {
29
+ steps: true
30
+ }
31
+ }]);
32
+ }
33
+
34
+ plotWithOptions(0);
35
+
36
+ $(".controls button").click(function (e) {
37
+ e.preventDefault();
38
+ var t = parseFloat($(this).text().replace("Threshold at ", ""));
39
+ plotWithOptions(t);
40
+ });
41
+
42
+ // Add the Flot version string to the footer
43
+
44
+ $("#footer").prepend("Flot " + $.plot.version + " &ndash; ");
45
+ });
46
+
47
+ </script>
48
+ </head>
49
+ <body>
50
+
51
+ <div id="header">
52
+ <h2>Thresholds</h2>
53
+ </div>
54
+
55
+ <div id="content">
56
+
57
+ <div class="demo-container">
58
+ <div id="placeholder" class="demo-placeholder"></div>
59
+ </div>
60
+
61
+ <p>With the threshold plugin, you can apply a specific color to the part of a data series below a threshold. This is can be useful for highlighting negative values, e.g. when displaying net results or what's in stock.</p>
62
+
63
+ <p class="controls">
64
+ <button>Threshold at 5</button>
65
+ <button>Threshold at 0</button>
66
+ <button>Threshold at -2.5</button>
67
+ </p>
68
+
69
+ </div>
70
+
71
+ <div id="footer">
72
+ Copyright &copy; 2007 - 2013 IOLA and Ole Laursen
73
+ </div>
74
+
75
+ </body>
76
+ </html>