compass-jquery-plugin 0.3.2.3 → 0.3.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (235) hide show
  1. data/README.md +54 -37
  2. data/VERSION.yml +1 -1
  3. data/lib/handle_attributes.rb +4 -4
  4. data/lib/handle_js_files.rb +5 -5
  5. data/lib/jqtouch_theme.rb +2 -2
  6. data/lib/jquery/dynatree.rb +2 -2
  7. data/lib/jquery/emulators.rb +1 -1
  8. data/lib/jquery/flash_messages.rb +6 -6
  9. data/lib/jquery/graphics.rb +5 -0
  10. data/lib/jquery/gridify/assertions.rb +1 -1
  11. data/lib/jquery/gridify/grid.rb +76 -59
  12. data/lib/jquery/gridify/grid_column.rb +73 -67
  13. data/lib/jquery/gridify/grid_finder.rb +79 -79
  14. data/lib/jquery/gridify/grid_options.rb +154 -149
  15. data/lib/jquery/gridify/grid_view.rb +143 -143
  16. data/lib/jquery/gridify.rb +25 -25
  17. data/lib/jquery/ical/calendar.rb +2 -2
  18. data/lib/jquery/ical/event.rb +48 -44
  19. data/lib/jquery/ical/helpers/ui_event_helper.rb +3 -3
  20. data/lib/jquery/jqgrid/jqgrid.rb +58 -58
  21. data/lib/jquery/jqgrid.rb +1 -1
  22. data/lib/jquery/jqtouch.rb +1 -1
  23. data/lib/jquery/jquery.rb +117 -117
  24. data/lib/jquery/jquery_auto_complete.rb +9 -9
  25. data/lib/jquery/jquery_json_response.rb +12 -12
  26. data/lib/jquery/jquery_selector_assertions.rb +55 -53
  27. data/lib/jquery/jstree.rb +2 -2
  28. data/lib/jquery/mobile.rb +1 -1
  29. data/lib/jquery/ribbon.rb +2 -2
  30. data/lib/jquery/secret_sauce/controller/ui_dialog_controls.rb +5 -5
  31. data/lib/jquery/secret_sauce/controller/ui_grid_controls.rb +5 -5
  32. data/lib/jquery/secret_sauce/helpers/ui_dialog_helper.rb +1 -1
  33. data/lib/jquery/secret_sauce/helpers/ui_form_helper.rb +39 -39
  34. data/lib/jquery/secret_sauce/helpers/ui_grid_helper.rb +74 -74
  35. data/lib/jquery/secret_sauce/model/find_for_grid.rb +21 -21
  36. data/lib/jquery/secret_sauce.rb +1 -1
  37. data/lib/jquery/tools.rb +1 -1
  38. data/lib/jquery_mobile_theme.rb +2 -2
  39. data/lib/jquery_ui_theme.rb +12 -12
  40. data/templates/dynatree/config/initializers/dynatree.rb +3 -3
  41. data/templates/dynatree/jquery/dynatree/aero.scss +16 -16
  42. data/templates/dynatree/jquery/dynatree/aqua.scss +16 -16
  43. data/templates/dynatree/jquery/dynatree/crystal.scss +16 -16
  44. data/templates/dynatree/jquery/dynatree/xp.scss +17 -17
  45. data/templates/dynatree/jquery.dynatree.js +2926 -2912
  46. data/templates/emulators/config/initializers/emulators.rb +6 -6
  47. data/templates/graphics/config/initializers/graphics.rb +5 -0
  48. data/templates/graphics/jquery/ganttView.scss +89 -0
  49. data/templates/graphics/jquery.ganttView.js +1669 -0
  50. data/templates/graphics/jquery.ganttView.min.js +70 -0
  51. data/templates/{jquery → graphics}/jquery.sparkline.js +466 -438
  52. data/templates/{jquery → graphics}/jquery.sparkline.min.js +0 -0
  53. data/templates/graphics/manifest.rb +9 -0
  54. data/templates/jqgrid/config/initializers/jqgrid.rb +1 -1
  55. data/templates/jqgrid/i18n/jqgrid/locale-ar.js +131 -125
  56. data/templates/jqgrid/i18n/jqgrid/locale-bg.js +135 -131
  57. data/templates/jqgrid/i18n/jqgrid/locale-bg1251.js +135 -131
  58. data/templates/jqgrid/i18n/jqgrid/locale-cat.js +132 -126
  59. data/templates/jqgrid/i18n/jqgrid/locale-cn.js +137 -131
  60. data/templates/jqgrid/i18n/jqgrid/locale-cs.js +133 -127
  61. data/templates/jqgrid/i18n/jqgrid/locale-da.js +132 -126
  62. data/templates/jqgrid/i18n/jqgrid/locale-de.js +138 -132
  63. data/templates/jqgrid/i18n/jqgrid/locale-el.js +131 -125
  64. data/templates/jqgrid/i18n/jqgrid/locale-en.js +133 -127
  65. data/templates/jqgrid/i18n/jqgrid/locale-es.js +133 -127
  66. data/templates/jqgrid/i18n/jqgrid/locale-fa.js +19 -16
  67. data/templates/jqgrid/i18n/jqgrid/locale-fi.js +132 -126
  68. data/templates/jqgrid/i18n/jqgrid/locale-fr.js +131 -125
  69. data/templates/jqgrid/i18n/jqgrid/locale-gl.js +131 -125
  70. data/templates/jqgrid/i18n/jqgrid/locale-he.js +132 -126
  71. data/templates/jqgrid/i18n/jqgrid/locale-hu.js +133 -127
  72. data/templates/jqgrid/i18n/jqgrid/locale-is.js +131 -125
  73. data/templates/jqgrid/i18n/jqgrid/locale-it.js +8 -1
  74. data/templates/jqgrid/i18n/jqgrid/locale-ja.js +139 -136
  75. data/templates/jqgrid/i18n/jqgrid/locale-nl.js +4 -1
  76. data/templates/jqgrid/i18n/jqgrid/locale-no.js +14 -1
  77. data/templates/jqgrid/i18n/jqgrid/locale-pl.js +132 -126
  78. data/templates/jqgrid/i18n/jqgrid/locale-pt-br.js +132 -126
  79. data/templates/jqgrid/i18n/jqgrid/locale-pt.js +130 -124
  80. data/templates/jqgrid/i18n/jqgrid/locale-ro.js +144 -138
  81. data/templates/jqgrid/i18n/jqgrid/locale-ru.js +132 -126
  82. data/templates/jqgrid/i18n/jqgrid/locale-sk.js +132 -126
  83. data/templates/jqgrid/i18n/jqgrid/locale-sr.js +133 -127
  84. data/templates/jqgrid/i18n/jqgrid/locale-sv.js +132 -126
  85. data/templates/jqgrid/i18n/jqgrid/locale-tr.js +131 -125
  86. data/templates/jqgrid/i18n/jqgrid/locale-ua.js +132 -126
  87. data/templates/jqgrid/jquery.jqGrid.js +12735 -10444
  88. data/templates/jqgrid/jquery.jqGrid.min.js +477 -469
  89. data/templates/jqgrid/public/stylesheets/ellipsis-xbl.xml +12 -10
  90. data/templates/jqtouch/config/initializers/jqtouch.rb +3 -3
  91. data/templates/jqtouch/jquery/touch/jqtouch.scss +1 -1
  92. data/templates/jqtouch/jquery.jqtouch.js +10025 -10043
  93. data/templates/jquery/config/initializers/jquery.rb +2 -4
  94. data/templates/jquery/history.adapter.jquery.js +71 -0
  95. data/templates/jquery/history.adapter.jquery.min.js +4 -0
  96. data/templates/jquery/history.html4.js +690 -0
  97. data/templates/jquery/history.html4.min.js +21 -0
  98. data/templates/jquery/history.js +1297 -0
  99. data/templates/jquery/history.min.js +29 -0
  100. data/templates/jquery/i18n/jquery.ui/datepicker-af.js +20 -20
  101. data/templates/jquery/i18n/jquery.ui/datepicker-ar-DZ.js +19 -19
  102. data/templates/jquery/i18n/jquery.ui/datepicker-ar.js +19 -19
  103. data/templates/jquery/i18n/jquery.ui/datepicker-az.js +19 -19
  104. data/templates/jquery/i18n/jquery.ui/datepicker-bg.js +8 -8
  105. data/templates/jquery/i18n/jquery.ui/datepicker-bs.js +20 -20
  106. data/templates/jquery/i18n/jquery.ui/datepicker-ca.js +20 -20
  107. data/templates/jquery/i18n/jquery.ui/datepicker-cs.js +20 -20
  108. data/templates/jquery/i18n/jquery.ui/datepicker-da.js +14 -14
  109. data/templates/jquery/i18n/jquery.ui/datepicker-de.js +20 -20
  110. data/templates/jquery/i18n/jquery.ui/datepicker-el.js +20 -20
  111. data/templates/jquery/i18n/jquery.ui/datepicker-en-AU.js +20 -20
  112. data/templates/jquery/i18n/jquery.ui/datepicker-en-GB.js +20 -20
  113. data/templates/jquery/i18n/jquery.ui/datepicker-en-NZ.js +20 -20
  114. data/templates/jquery/i18n/jquery.ui/datepicker-eo.js +20 -20
  115. data/templates/jquery/i18n/jquery.ui/datepicker-es.js +20 -20
  116. data/templates/jquery/i18n/jquery.ui/datepicker-et.js +20 -20
  117. data/templates/jquery/i18n/jquery.ui/datepicker-eu.js +20 -20
  118. data/templates/jquery/i18n/jquery.ui/datepicker-fa.js +18 -18
  119. data/templates/jquery/i18n/jquery.ui/datepicker-fi.js +15 -15
  120. data/templates/jquery/i18n/jquery.ui/datepicker-fo.js +20 -20
  121. data/templates/jquery/i18n/jquery.ui/datepicker-fr-CH.js +20 -20
  122. data/templates/jquery/i18n/jquery.ui/datepicker-fr.js +22 -22
  123. data/templates/jquery/i18n/jquery.ui/datepicker-gl.js +20 -20
  124. data/templates/jquery/i18n/jquery.ui/datepicker-he.js +20 -20
  125. data/templates/jquery/i18n/jquery.ui/datepicker-hr.js +20 -20
  126. data/templates/jquery/i18n/jquery.ui/datepicker-hu.js +20 -20
  127. data/templates/jquery/i18n/jquery.ui/datepicker-hu.min.js +1 -1
  128. data/templates/jquery/i18n/jquery.ui/datepicker-hy.js +20 -20
  129. data/templates/jquery/i18n/jquery.ui/datepicker-id.js +20 -20
  130. data/templates/jquery/i18n/jquery.ui/datepicker-is.js +20 -20
  131. data/templates/jquery/i18n/jquery.ui/datepicker-it.js +20 -20
  132. data/templates/jquery/i18n/jquery.ui/datepicker-ja.js +20 -20
  133. data/templates/jquery/i18n/jquery.ui/datepicker-ko.js +20 -20
  134. data/templates/jquery/i18n/jquery.ui/datepicker-kz.js +20 -20
  135. data/templates/jquery/i18n/jquery.ui/datepicker-lt.js +20 -20
  136. data/templates/jquery/i18n/jquery.ui/datepicker-lv.js +20 -20
  137. data/templates/jquery/i18n/jquery.ui/datepicker-ml.js +20 -20
  138. data/templates/jquery/i18n/jquery.ui/datepicker-ms.js +20 -20
  139. data/templates/jquery/i18n/jquery.ui/datepicker-nl.js +20 -20
  140. data/templates/jquery/i18n/jquery.ui/datepicker-no.js +16 -16
  141. data/templates/jquery/i18n/jquery.ui/datepicker-no.min.js +2 -2
  142. data/templates/jquery/i18n/jquery.ui/datepicker-pl.js +20 -20
  143. data/templates/jquery/i18n/jquery.ui/datepicker-pt-BR.js +20 -20
  144. data/templates/jquery/i18n/jquery.ui/datepicker-pt.js +20 -20
  145. data/templates/jquery/i18n/jquery.ui/datepicker-rm.js +18 -18
  146. data/templates/jquery/i18n/jquery.ui/datepicker-ro.js +20 -20
  147. data/templates/jquery/i18n/jquery.ui/datepicker-ru.js +20 -20
  148. data/templates/jquery/i18n/jquery.ui/datepicker-sk.js +20 -20
  149. data/templates/jquery/i18n/jquery.ui/datepicker-sl.js +20 -20
  150. data/templates/jquery/i18n/jquery.ui/datepicker-sq.js +20 -20
  151. data/templates/jquery/i18n/jquery.ui/datepicker-sr-SR.js +20 -20
  152. data/templates/jquery/i18n/jquery.ui/datepicker-sr.js +20 -20
  153. data/templates/jquery/i18n/jquery.ui/datepicker-sv.js +14 -14
  154. data/templates/jquery/i18n/jquery.ui/datepicker-ta.js +20 -20
  155. data/templates/jquery/i18n/jquery.ui/datepicker-th.js +20 -20
  156. data/templates/jquery/i18n/jquery.ui/datepicker-tr.js +20 -20
  157. data/templates/jquery/i18n/jquery.ui/datepicker-uk.js +20 -20
  158. data/templates/jquery/i18n/jquery.ui/datepicker-vi.js +20 -20
  159. data/templates/jquery/i18n/jquery.ui/datepicker-zh-CN.js +20 -20
  160. data/templates/jquery/i18n/jquery.ui/datepicker-zh-HK.js +20 -20
  161. data/templates/jquery/i18n/jquery.ui/datepicker-zh-TW.js +20 -20
  162. data/templates/jquery/{partials → jquery/ui}/_flash_messages.scss +0 -0
  163. data/templates/jquery/jquery/ui/_theme.scss +14 -13
  164. data/templates/jquery/jquery/ui/contextMenu/configure.png +0 -0
  165. data/templates/jquery/jquery/ui/contextMenu/copy.png +0 -0
  166. data/templates/jquery/jquery/ui/contextMenu/cut.png +0 -0
  167. data/templates/jquery/jquery/ui/contextMenu/delete.png +0 -0
  168. data/templates/jquery/jquery/ui/contextMenu/edit.png +0 -0
  169. data/templates/jquery/jquery/ui/contextMenu/exit.png +0 -0
  170. data/templates/jquery/jquery/ui/contextMenu/new.png +0 -0
  171. data/templates/jquery/jquery/ui/contextMenu/paste.png +0 -0
  172. data/templates/jquery/jquery/ui/contextMenu/rename.png +0 -0
  173. data/templates/jquery/jquery/ui/contextMenu/show.png +0 -0
  174. data/templates/jquery/jquery/ui/contextMenu/trash.png +0 -0
  175. data/templates/jquery/jquery/ui/contextMenu.scss +16 -10
  176. data/templates/jquery/jquery-ui.js +11839 -23066
  177. data/templates/jquery/jquery-ui.min.js +401 -795
  178. data/templates/jquery/jquery.bgiframe.js +27 -25
  179. data/templates/jquery/jquery.contextMenu.js +209 -196
  180. data/templates/jquery/jquery.cookie.js +3 -1
  181. data/templates/jquery/jquery.dotimeout.js +236 -228
  182. data/templates/jquery/jquery.dst.js +154 -151
  183. data/templates/jquery/jquery.farbtastic.js +293 -293
  184. data/templates/jquery/jquery.flashMessages.js +26 -0
  185. data/templates/jquery/jquery.flashMessages.min.js +1 -0
  186. data/templates/jquery/jquery.form.js +803 -786
  187. data/templates/jquery/jquery.haml.js +248 -247
  188. data/templates/jquery/jquery.hotkeys.js +89 -89
  189. data/templates/jquery/jquery.js +8141 -8106
  190. data/templates/jquery/jquery.layout.js +2451 -2415
  191. data/templates/jquery/jquery.min.js +167 -166
  192. data/templates/jquery/jquery.mousewheel.js +62 -54
  193. data/templates/jquery/jquery.offline.js +171 -171
  194. data/templates/jquery/jquery.pngFix.js +76 -76
  195. data/templates/jquery/jquery.replacetext.js +83 -83
  196. data/templates/jquery/jquery.themeswitchertool.js +202 -177
  197. data/templates/jquery/jquery.tmpl.js +478 -473
  198. data/templates/jquery/jquery.tmplPlus.js +82 -81
  199. data/templates/jquery/jrails.js +178 -175
  200. data/templates/jquery/json.js +77 -7
  201. data/templates/jquery/json2.js +480 -0
  202. data/templates/jquery/json2.min.js +7 -0
  203. data/templates/jquery/lib/tasks/haml.rake +2 -2
  204. data/templates/jquery/manifest.rb +21 -17
  205. data/templates/jstree/jquery.jstree.js +5967 -4536
  206. data/templates/mobile/config/initializers/mobile.rb +1 -1
  207. data/templates/mobile/jquery/mobile/_base.scss +944 -927
  208. data/templates/mobile/jquery/mobile/default.scss +61 -48
  209. data/templates/mobile/jquery/mobile/valencia.scss +56 -42
  210. data/templates/mobile/jquery.mobile.js +4461 -4347
  211. data/templates/mobile/jquery.mobile.min.js +11 -2
  212. data/templates/mobile/lib/tasks/jquery.mobile.rake +12 -12
  213. data/templates/ribbon/config/initializers/ribbon.rb +2 -2
  214. data/templates/ribbon/jquery.ribbon.js +50 -29
  215. data/templates/secret_sauce/secret_sauce.js +8 -8
  216. data/templates/tools/flowplayer.js +945 -1
  217. data/templates/tools/jquery.tools.js +4645 -4335
  218. data/templates/tools/jquery.tools.min.js +37 -37
  219. data/templates/tools/lib/tasks/jquery.tools.rake +4 -4
  220. data/templates/tools/swfobject.js +813 -773
  221. metadata +33 -21
  222. data/templates/jquery/haml.js +0 -506
  223. data/templates/jquery/haml.min.js +0 -5
  224. data/templates/jquery/jquery/ui/contextMenu/door.png +0 -0
  225. data/templates/jquery/jquery/ui/contextMenu/page_white_copy.png +0 -0
  226. data/templates/jquery/jquery/ui/contextMenu/page_white_delete.png +0 -0
  227. data/templates/jquery/jquery/ui/contextMenu/page_white_edit.png +0 -0
  228. data/templates/jquery/jquery/ui/contextMenu/page_white_new.png +0 -0
  229. data/templates/jquery/jquery/ui/contextMenu/page_white_paste.png +0 -0
  230. data/templates/jquery/jquery.compat-1.3.js +0 -291
  231. data/templates/jquery/jquery.compat-1.3.min.js +0 -6
  232. data/templates/jquery/jquery.flash_messages.js +0 -5
  233. data/templates/jquery/jquery.flash_messages.min.js +0 -1
  234. data/templates/jquery/jquery.history.js +0 -194
  235. data/templates/jquery/jquery.history.min.js +0 -5
@@ -0,0 +1,70 @@
1
+ /*
2
+ : Licensed under The MIT License. See license.txt and http://www.datejs.com/license/.
3
+ @website: http://www.datejs.com/
4
+ */
5
+ Date.CultureInfo={name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan",
6
+ "Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,
7
+ feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\+|aft(er)?|from|hence)/i,subtract:/^(\-|bef(ore)?|ago)/i,yesterday:/^yes(terday)?/i,
8
+ today:/^t(od(ay)?)?/i,tomorrow:/^tom(orrow)?/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^mn|min(ute)?s?/i,hour:/^h(our)?s?/i,week:/^w(eek)?s?/i,month:/^m(onth)?s?/i,day:/^d(ay)?s?/i,year:/^y(ear)?s?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\.?m?\.?|p\.?m?\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt|utc)/i,ordinalSuffix:/^\s*(st|nd|rd|th)/i,timeContext:/^\s*(\:|a(?!u|p)|p)/i},timezones:[{name:"UTC",offset:"-000"},
9
+ {name:"GMT",offset:"-000"},{name:"EST",offset:"-0500"},{name:"EDT",offset:"-0400"},{name:"CST",offset:"-0600"},{name:"CDT",offset:"-0500"},{name:"MST",offset:"-0700"},{name:"MDT",offset:"-0600"},{name:"PST",offset:"-0800"},{name:"PDT",offset:"-0700"}]};
10
+ (function(){var f=Date,l=f.prototype,q=f.CultureInfo,e=function(a,c){c||(c=2);return("000"+a).slice(c*-1)};l.clearTime=function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this};l.setTimeToNow=function(){var a=new Date;this.setHours(a.getHours());this.setMinutes(a.getMinutes());this.setSeconds(a.getSeconds());this.setMilliseconds(a.getMilliseconds());return this};f.today=function(){return(new Date).clearTime()};f.compare=function(a,c){if(isNaN(a)||isNaN(c))throw Error(a+
11
+ " - "+c);else if(a instanceof Date&&c instanceof Date)return a<c?-1:a>c?1:0;else throw new TypeError(a+" - "+c);};f.equals=function(a,c){return a.compareTo(c)===0};f.getDayNumberFromName=function(a){var c=q.dayNames,b=q.abbreviatedDayNames,g=q.shortestDayNames;a=a.toLowerCase();for(var k=0;k<c.length;k++)if(c[k].toLowerCase()==a||b[k].toLowerCase()==a||g[k].toLowerCase()==a)return k;return-1};f.getMonthNumberFromName=function(a){var c=q.monthNames,b=q.abbreviatedMonthNames;a=a.toLowerCase();for(var g=
12
+ 0;g<c.length;g++)if(c[g].toLowerCase()==a||b[g].toLowerCase()==a)return g;return-1};f.isLeapYear=function(a){return a%4===0&&a%100!==0||a%400===0};f.getDaysInMonth=function(a,c){return[31,f.isLeapYear(a)?29:28,31,30,31,30,31,31,30,31,30,31][c]};f.getTimezoneAbbreviation=function(a){for(var c=q.timezones,b=0;b<c.length;b++)if(c[b].offset===a)return c[b].name;return null};f.getTimezoneOffset=function(a){for(var c=q.timezones,b=0;b<c.length;b++)if(c[b].name===a.toUpperCase())return c[b].offset;return null};
13
+ l.clone=function(){return new Date(this.getTime())};l.compareTo=function(a){return Date.compare(this,a)};l.equals=function(a){return Date.equals(this,a||new Date)};l.between=function(a,c){return this.getTime()>=a.getTime()&&this.getTime()<=c.getTime()};l.isAfter=function(a){return this.compareTo(a||new Date)===1};l.isBefore=function(a){return this.compareTo(a||new Date)===-1};l.isToday=function(){return this.isSameDay(new Date)};l.isSameDay=function(a){return this.clone().clearTime().equals(a.clone().clearTime())};
14
+ l.addMilliseconds=function(a){this.setMilliseconds(this.getMilliseconds()+a);return this};l.addSeconds=function(a){return this.addMilliseconds(a*1E3)};l.addMinutes=function(a){return this.addMilliseconds(a*6E4)};l.addHours=function(a){return this.addMilliseconds(a*36E5)};l.addDays=function(a){this.setDate(this.getDate()+a);return this};l.addWeeks=function(a){return this.addDays(a*7)};l.addMonths=function(a){var c=this.getDate();this.setDate(1);this.setMonth(this.getMonth()+a);this.setDate(Math.min(c,
15
+ f.getDaysInMonth(this.getFullYear(),this.getMonth())));return this};l.addYears=function(a){return this.addMonths(a*12)};l.add=function(a){if(typeof a=="number"){this._orient=a;return this}a.milliseconds&&this.addMilliseconds(a.milliseconds);a.seconds&&this.addSeconds(a.seconds);a.minutes&&this.addMinutes(a.minutes);a.hours&&this.addHours(a.hours);a.weeks&&this.addWeeks(a.weeks);a.months&&this.addMonths(a.months);a.years&&this.addYears(a.years);a.days&&this.addDays(a.days);return this};var d,i,j;l.getWeek=
16
+ function(){var a,c,b,g,k;d=!d?this.getFullYear():d;i=!i?this.getMonth()+1:i;j=!j?this.getDate():j;if(i<=2){a=d-1;c=(a/4|0)-(a/100|0)+(a/400|0);b=((a-1)/4|0)-((a-1)/100|0)+((a-1)/400|0);b=c-b;g=0;k=j-1+31*(i-1)}else{a=d;c=(a/4|0)-(a/100|0)+(a/400|0);b=((a-1)/4|0)-((a-1)/100|0)+((a-1)/400|0);b=c-b;g=b+1;k=j+(153*(i-3)+2)/5+58+b}a=(a+c)%7;c=k+3-(k+a-g)%7|0;b=c<0?53-((a-b)/5|0):c>364+b?1:(c/7|0)+1;d=i=j=null;return b};l.getISOWeek=function(){d=this.getUTCFullYear();i=this.getUTCMonth()+1;j=this.getUTCDate();
17
+ return e(this.getWeek())};l.setWeek=function(a){return this.moveToDayOfWeek(1).addWeeks(a-this.getWeek())};f._validate=function(a,c,b,g){if(typeof a=="undefined")return false;else if(typeof a!="number")throw new TypeError(a+" is not a Number.");else if(a<c||a>b)throw new RangeError(a+" is not a valid value for "+g+".");return true};f.validateMillisecond=function(a){return f._validate(a,0,999,"millisecond")};f.validateSecond=function(a){return f._validate(a,0,59,"second")};f.validateMinute=function(a){return f._validate(a,
18
+ 0,59,"minute")};f.validateHour=function(a){return f._validate(a,0,23,"hour")};f.validateDay=function(a,c,b){return f._validate(a,1,f.getDaysInMonth(c,b),"day")};f.validateMonth=function(a){return f._validate(a,0,11,"month")};f.validateYear=function(a){return f._validate(a,0,9999,"year")};l.set=function(a){f.validateMillisecond(a.millisecond)&&this.addMilliseconds(a.millisecond-this.getMilliseconds());f.validateSecond(a.second)&&this.addSeconds(a.second-this.getSeconds());f.validateMinute(a.minute)&&
19
+ this.addMinutes(a.minute-this.getMinutes());f.validateHour(a.hour)&&this.addHours(a.hour-this.getHours());f.validateMonth(a.month)&&this.addMonths(a.month-this.getMonth());f.validateYear(a.year)&&this.addYears(a.year-this.getFullYear());f.validateDay(a.day,this.getFullYear(),this.getMonth())&&this.addDays(a.day-this.getDate());a.timezone&&this.setTimezone(a.timezone);a.timezoneOffset&&this.setTimezoneOffset(a.timezoneOffset);a.week&&f._validate(a.week,0,53,"week")&&this.setWeek(a.week);return this};
20
+ l.moveToFirstDayOfMonth=function(){return this.set({day:1})};l.moveToLastDayOfMonth=function(){return this.set({day:f.getDaysInMonth(this.getFullYear(),this.getMonth())})};l.moveToNthOccurrence=function(a,c){var b=0;if(c>0)b=c-1;else if(c===-1){this.moveToLastDayOfMonth();this.getDay()!==a&&this.moveToDayOfWeek(a,-1);return this}return this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(a,+1).addWeeks(b)};l.moveToDayOfWeek=function(a,c){var b=(a-this.getDay()+7*(c||+1))%7;return this.addDays(b===
21
+ 0?b+=7*(c||+1):b)};l.moveToMonth=function(a,c){var b=(a-this.getMonth()+12*(c||+1))%12;return this.addMonths(b===0?b+=12*(c||+1):b)};l.getOrdinalNumber=function(){return Math.ceil((this.clone().clearTime()-new Date(this.getFullYear(),0,1))/864E5)+1};l.getTimezone=function(){return f.getTimezoneAbbreviation(this.getUTCOffset())};l.setTimezoneOffset=function(a){var c=this.getTimezoneOffset();return this.addMinutes(Number(a)*-6/10-c)};l.setTimezone=function(a){return this.setTimezoneOffset(f.getTimezoneOffset(a))};
22
+ l.hasDaylightSavingTime=function(){return Date.today().set({month:0,day:1}).getTimezoneOffset()!==Date.today().set({month:6,day:1}).getTimezoneOffset()};l.isDaylightSavingTime=function(){return this.hasDaylightSavingTime()&&(new Date).getTimezoneOffset()===Date.today().set({month:6,day:1}).getTimezoneOffset()};l.getUTCOffset=function(){var a=this.getTimezoneOffset()*-10/6;if(a<0){a=(a-1E4).toString();return a.charAt(0)+a.substr(2)}else{a=(a+1E4).toString();return"+"+a.substr(1)}};l.getElapsed=function(a){return(a||
23
+ new Date)-this};if(!l.toISOString)l.toISOString=function(){function a(c){return c<10?"0"+c:c}return'"'+this.getUTCFullYear()+"-"+a(this.getUTCMonth()+1)+"-"+a(this.getUTCDate())+"T"+a(this.getUTCHours())+":"+a(this.getUTCMinutes())+":"+a(this.getUTCSeconds())+'Z"'};l._toString=l.toString;l.toString=function(a){var c=this;if(a&&a.length==1){var b=q.formatPatterns;c.t=c.toString;switch(a){case "d":return c.t(b.shortDate);case "D":return c.t(b.longDate);case "F":return c.t(b.fullDateTime);case "m":return c.t(b.monthDay);
24
+ case "r":return c.t(b.rfc1123);case "s":return c.t(b.sortableDateTime);case "t":return c.t(b.shortTime);case "T":return c.t(b.longTime);case "u":return c.t(b.universalSortableDateTime);case "y":return c.t(b.yearMonth)}}var g=function(k){switch(k*1){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th"}};return a?a.replace(/(\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S)/g,function(k){if(k.charAt(0)==="\\")return k.replace("\\","");c.h=c.getHours;
25
+ switch(k){case "hh":return e(c.h()<13?c.h()===0?12:c.h():c.h()-12);case "h":return c.h()<13?c.h()===0?12:c.h():c.h()-12;case "HH":return e(c.h());case "H":return c.h();case "mm":return e(c.getMinutes());case "m":return c.getMinutes();case "ss":return e(c.getSeconds());case "s":return c.getSeconds();case "yyyy":return e(c.getFullYear(),4);case "yy":return e(c.getFullYear());case "dddd":return q.dayNames[c.getDay()];case "ddd":return q.abbreviatedDayNames[c.getDay()];case "dd":return e(c.getDate());
26
+ case "d":return c.getDate();case "MMMM":return q.monthNames[c.getMonth()];case "MMM":return q.abbreviatedMonthNames[c.getMonth()];case "MM":return e(c.getMonth()+1);case "M":return c.getMonth()+1;case "t":return c.h()<12?q.amDesignator.substring(0,1):q.pmDesignator.substring(0,1);case "tt":return c.h()<12?q.amDesignator:q.pmDesignator;case "S":return g(c.getDate());default:return k}}):this._toString()}})();
27
+ (function(){var f=Date,l=f.prototype,q=f.CultureInfo,e=Number.prototype;l._orient=+1;l._nth=null;l._is=false;l._same=false;l._isSecond=false;e._dateElement="day";l.next=function(){this._orient=+1;return this};f.next=function(){return f.today().next()};l.last=l.prev=l.previous=function(){this._orient=-1;return this};f.last=f.prev=f.previous=function(){return f.today().last()};l.is=function(){this._is=true;return this};l.same=function(){this._same=true;this._isSecond=false;return this};l.today=function(){return this.same().day()};
28
+ l.weekday=function(){if(this._is){this._is=false;return!this.is().sat()&&!this.is().sun()}return false};l.at=function(h){return typeof h==="string"?f.parse(this.toString("d")+" "+h):this.set(h)};e.fromNow=e.after=function(h){var m={};m[this._dateElement]=this;return(!h?new Date:h.clone()).add(m)};e.ago=e.before=function(h){var m={};m[this._dateElement]=this*-1;return(!h?new Date:h.clone()).add(m)};var d="sunday monday tuesday wednesday thursday friday saturday".split(/\s/),i="january february march april may june july august september october november december".split(/\s/),
29
+ j="Millisecond Second Minute Hour Day Week Month Year".split(/\s/),a="Milliseconds Seconds Minutes Hours Date Week Month FullYear".split(/\s/),c="final first second third fourth fifth".split(/\s/);l.toObject=function(){for(var h={},m=0;m<j.length;m++)h[j[m].toLowerCase()]=this["get"+a[m]]();return h};f.fromObject=function(h){h.week=null;return Date.today().set(h)};for(var b=function(h){return function(){if(this._is){this._is=false;return this.getDay()==h}if(this._nth!==null){this._isSecond&&this.addSeconds(this._orient*
30
+ -1);this._isSecond=false;var m=this._nth;this._nth=null;var n=this.clone().moveToLastDayOfMonth();this.moveToNthOccurrence(h,m);if(this>n)throw new RangeError(f.getDayName(h)+" does not occur "+m+" times in the month of "+f.getMonthName(n.getMonth())+" "+n.getFullYear()+".");return this}return this.moveToDayOfWeek(h,this._orient)}},g=function(h){return function(){var m=f.today(),n=h-m.getDay();if(h===0&&q.firstDayOfWeek===1&&m.getDay()!==0)n+=7;return m.addDays(n)}},k=0;k<d.length;k++){f[d[k].toUpperCase()]=
31
+ f[d[k].toUpperCase().substring(0,3)]=k;f[d[k]]=f[d[k].substring(0,3)]=g(k);l[d[k]]=l[d[k].substring(0,3)]=b(k)}d=function(h){return function(){if(this._is){this._is=false;return this.getMonth()===h}return this.moveToMonth(h,this._orient)}};b=function(h){return function(){return f.today().set({month:h,day:1})}};for(g=0;g<i.length;g++){f[i[g].toUpperCase()]=f[i[g].toUpperCase().substring(0,3)]=g;f[i[g]]=f[i[g].substring(0,3)]=b(g);l[i[g]]=l[i[g].substring(0,3)]=d(g)}d=function(h){return function(m){if(this._isSecond){this._isSecond=
32
+ false;return this}if(this._same){this._same=this._is=false;var n=this.toObject();m=(m||new Date).toObject();for(var o="",p=h.toLowerCase(),t=j.length-1;t>-1;t--){o=j[t].toLowerCase();if(n[o]!=m[o])return false;if(p==o)break}return true}if(h.substring(h.length-1)!="s")h+="s";return this["add"+h](this._orient)}};b=function(h){return function(){this._dateElement=h;return this}};for(g=0;g<j.length;g++){i=j[g].toLowerCase();l[i]=l[i+"s"]=d(j[g]);e[i]=e[i+"s"]=b(i)}l._ss=d("Second");e=function(h){return function(m){if(this._same)return this._ss(m);
33
+ if(m||m===0)return this.moveToNthOccurrence(m,h);this._nth=h;if(h===2&&(m===undefined||m===null)){this._isSecond=true;return this.addSeconds(this._orient)}return this}};for(i=0;i<c.length;i++)l[c[i]]=i===0?e(-1):e(i)})();
34
+ (function(){Date.Parsing={Exception:function(i){this.message="Parse error at '"+i.substring(0,10)+" ...'"}};for(var f=Date.Parsing,l=f.Operators={rtoken:function(i){return function(j){var a=j.match(i);if(a)return[a[0],j.substring(a[0].length)];else throw new f.Exception(j);}},token:function(){return function(i){return l.rtoken(RegExp("^s*"+i+"s*"))(i)}},stoken:function(i){return l.rtoken(RegExp("^"+i))},until:function(i){return function(j){for(var a=[],c=null;j.length;){try{c=i.call(this,j)}catch(b){a.push(c[0]);
35
+ j=c[1];continue}break}return[a,j]}},many:function(i){return function(j){for(var a=[],c=null;j.length;){try{c=i.call(this,j)}catch(b){break}a.push(c[0]);j=c[1]}return[a,j]}},optional:function(i){return function(j){var a=null;try{a=i.call(this,j)}catch(c){return[null,j]}return[a[0],a[1]]}},not:function(i){return function(j){try{i.call(this,j)}catch(a){return[null,j]}throw new f.Exception(j);}},ignore:function(i){return i?function(j){var a=null;a=i.call(this,j);return[null,a[1]]}:null},product:function(){for(var i=
36
+ arguments[0],j=Array.prototype.slice.call(arguments,1),a=[],c=0;c<i.length;c++)a.push(l.each(i[c],j));return a},cache:function(i){var j={},a=null;return function(c){try{a=j[c]=j[c]||i.call(this,c)}catch(b){a=j[c]=b}if(a instanceof f.Exception)throw a;else return a}},any:function(){var i=arguments;return function(j){for(var a=null,c=0;c<i.length;c++)if(i[c]!=null){try{a=i[c].call(this,j)}catch(b){a=null}if(a)return a}throw new f.Exception(j);}},each:function(){var i=arguments;return function(j){for(var a=
37
+ [],c=null,b=0;b<i.length;b++)if(i[b]!=null){try{c=i[b].call(this,j)}catch(g){throw new f.Exception(j);}a.push(c[0]);j=c[1]}return[a,j]}},all:function(){var i=i;return i.each(i.optional(arguments))},sequence:function(i,j,a){j=j||l.rtoken(/^\s*/);a=a||null;if(i.length==1)return i[0];return function(c){for(var b=null,g=null,k=[],h=0;h<i.length;h++){try{b=i[h].call(this,c)}catch(m){break}k.push(b[0]);try{g=j.call(this,b[1])}catch(n){g=null;break}c=g[1]}if(!b)throw new f.Exception(c);if(g)throw new f.Exception(g[1]);
38
+ if(a)try{b=a.call(this,b[1])}catch(o){throw new f.Exception(b[1]);}return[k,b?b[1]:c]}},between:function(i,j,a){a=a||i;var c=l.each(l.ignore(i),j,l.ignore(a));return function(b){b=c.call(this,b);return[[b[0][0],r[0][2]],b[1]]}},list:function(i,j,a){j=j||l.rtoken(/^\s*/);a=a||null;return i instanceof Array?l.each(l.product(i.slice(0,-1),l.ignore(j)),i.slice(-1),l.ignore(a)):l.each(l.many(l.each(i,l.ignore(j))),px,l.ignore(a))},set:function(i,j,a){j=j||l.rtoken(/^\s*/);a=a||null;return function(c){var b=
39
+ null;for(var g=b=null,k=null,h=[[],c],m=false,n=0;n<i.length;n++){b=g=null;m=i.length==1;try{b=i[n].call(this,c)}catch(o){continue}k=[[b[0]],b[1]];if(b[1].length>0&&!m)try{g=j.call(this,b[1])}catch(p){m=true}else m=true;if(!m&&g[1].length===0)m=true;if(!m){b=[];for(m=0;m<i.length;m++)n!=m&&b.push(i[m]);b=l.set(b,j).call(this,g[1]);if(b[0].length>0){k[0]=k[0].concat(b[0]);k[1]=b[1]}}if(k[1].length<h[1].length)h=k;if(h[1].length===0)break}if(h[0].length===0)return h;if(a){try{g=a.call(this,h[1])}catch(t){throw new f.Exception(h[1]);
40
+ }h[1]=g[1]}return h}},forward:function(i,j){return function(a){return i[j].call(this,a)}},replace:function(i,j){return function(a){a=i.call(this,a);return[j,a[1]]}},process:function(i,j){return function(a){a=i.call(this,a);return[j.call(this,a[0]),a[1]]}},min:function(i,j){return function(a){var c=j.call(this,a);if(c[0].length<i)throw new f.Exception(a);return c}}},q=function(i){return function(){var j=null,a=[];if(arguments.length>1)j=Array.prototype.slice.call(arguments);else if(arguments[0]instanceof
41
+ Array)j=arguments[0];if(j)for(var c=j.shift();0<c.length;){j.unshift(c[0]);a.push(i.apply(null,j));j.shift();return a}else return i.apply(null,arguments)}},e="optional not ignore cache".split(/\s/),d=0;d<e.length;d++)l[e[d]]=q(l[e[d]]);q=function(i){return function(){return arguments[0]instanceof Array?i.apply(null,arguments[0]):i.apply(null,arguments)}};e="each any all".split(/\s/);for(d=0;d<e.length;d++)l[e[d]]=q(l[e[d]])})();
42
+ (function(){var f=Date,l=f.CultureInfo,q=function(b){for(var g=[],k=0;k<b.length;k++)if(b[k]instanceof Array)g=g.concat(q(b[k]));else b[k]&&g.push(b[k]);return g};f.Grammar={};f.Translator={hour:function(b){return function(){this.hour=Number(b)}},minute:function(b){return function(){this.minute=Number(b)}},second:function(b){return function(){this.second=Number(b)}},meridian:function(b){return function(){this.meridian=b.slice(0,1).toLowerCase()}},timezone:function(b){return function(){var g=b.replace(/[^\d\+\-]/g,
43
+ "");if(g.length)this.timezoneOffset=Number(g);else this.timezone=b.toLowerCase()}},day:function(b){var g=b[0];return function(){this.day=Number(g.match(/\d+/)[0])}},month:function(b){return function(){this.month=b.length==3?"jan feb mar apr may jun jul aug sep oct nov dec".indexOf(b)/4:Number(b)-1}},year:function(b){return function(){var g=Number(b);this.year=b.length>2?g:g+(g+2E3<l.twoDigitYearMax?2E3:1900)}},rday:function(b){return function(){switch(b){case "yesterday":this.days=-1;break;case "tomorrow":this.days=
44
+ 1;break;case "today":this.days=0;break;case "now":this.days=0;this.now=true}}},finishExact:function(b){b=b instanceof Array?b:[b];for(var g=0;g<b.length;g++)b[g]&&b[g].call(this);b=new Date;if((this.hour||this.minute)&&!this.month&&!this.year&&!this.day)this.day=b.getDate();if(!this.year)this.year=b.getFullYear();if(!this.month&&this.month!==0)this.month=b.getMonth();if(!this.day)this.day=1;if(!this.hour)this.hour=0;if(!this.minute)this.minute=0;if(!this.second)this.second=0;if(this.meridian&&this.hour)if(this.meridian==
45
+ "p"&&this.hour<12)this.hour+=12;else if(this.meridian=="a"&&this.hour==12)this.hour=0;if(this.day>f.getDaysInMonth(this.year,this.month))throw new RangeError(this.day+" is not a valid value for days.");b=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second);if(this.timezone)b.set({timezone:this.timezone});else this.timezoneOffset&&b.set({timezoneOffset:this.timezoneOffset});return b},finish:function(b){b=b instanceof Array?q(b):[b];if(b.length===0)return null;for(var g=0;g<b.length;g++)typeof b[g]==
46
+ "function"&&b[g].call(this);b=f.today();if(this.now&&!this.unit&&!this.operator)return new Date;else if(this.now)b=new Date;g=!!(this.days&&this.days!==null||this.orient||this.operator);var k,h,m;m=this.orient=="past"||this.operator=="subtract"?-1:1;!this.now&&"hour minute second".indexOf(this.unit)!=-1&&b.setTimeToNow();if(this.month||this.month===0)if("year day hour minute second".indexOf(this.unit)!=-1){this.value=this.month+1;this.month=null;g=true}if(!g&&this.weekday&&!this.day&&!this.days){k=
47
+ Date[this.weekday]();this.day=k.getDate();if(!this.month)this.month=k.getMonth();this.year=k.getFullYear()}if(g&&this.weekday&&this.unit!="month"){this.unit="day";k=f.getDayNumberFromName(this.weekday)-b.getDay();h=7;this.days=k?(k+m*h)%h:m*h}if(this.month&&this.unit=="day"&&this.operator){this.value=this.month+1;this.month=null}if(this.value!=null&&this.month!=null&&this.year!=null)this.day=this.value*1;if(this.month&&!this.day&&this.value){b.set({day:this.value*1});if(!g)this.day=this.value*1}if(!this.month&&
48
+ this.value&&this.unit=="month"&&!this.now){this.month=this.value;g=true}if(g&&(this.month||this.month===0)&&this.unit!="year"){this.unit="month";k=this.month-b.getMonth();h=12;this.months=k?(k+m*h)%h:m*h;this.month=null}if(!this.unit)this.unit="day";if(!this.value&&this.operator&&this.operator!==null&&this[this.unit+"s"]&&this[this.unit+"s"]!==null)this[this.unit+"s"]=this[this.unit+"s"]+(this.operator=="add"?1:-1)+(this.value||0)*m;else if(this[this.unit+"s"]==null||this.operator!=null){if(!this.value)this.value=
49
+ 1;this[this.unit+"s"]=this.value*m}if(this.meridian&&this.hour)if(this.meridian=="p"&&this.hour<12)this.hour+=12;else if(this.meridian=="a"&&this.hour==12)this.hour=0;if(this.weekday&&!this.day&&!this.days){k=Date[this.weekday]();this.day=k.getDate();if(k.getMonth()!==b.getMonth())this.month=k.getMonth()}if((this.month||this.month===0)&&!this.day)this.day=1;if(!this.orient&&!this.operator&&this.unit=="week"&&this.value&&!this.day&&!this.month)return Date.today().setWeek(this.value);if(g&&this.timezone&&
50
+ this.day&&this.days)this.day=this.days;return g?b.add(this):b.set(this)}};var e=f.Parsing.Operators,d=f.Grammar,i=f.Translator,j;d.datePartDelimiter=e.rtoken(/^([\s\-\.\,\/\x27]+)/);d.timePartDelimiter=e.stoken(":");d.whiteSpace=e.rtoken(/^\s*/);d.generalDelimiter=e.rtoken(/^(([\s\,]|at|@|on)+)/);var a={};d.ctoken=function(b){var g=a[b];if(!g){g=l.regexPatterns;for(var k=b.split(/\s+/),h=[],m=0;m<k.length;m++)h.push(e.replace(e.rtoken(g[k[m]]),k[m]));g=a[b]=e.any.apply(null,h)}return g};d.ctoken2=
51
+ function(b){return e.rtoken(l.regexPatterns[b])};d.h=e.cache(e.process(e.rtoken(/^(0[0-9]|1[0-2]|[1-9])/),i.hour));d.hh=e.cache(e.process(e.rtoken(/^(0[0-9]|1[0-2])/),i.hour));d.H=e.cache(e.process(e.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/),i.hour));d.HH=e.cache(e.process(e.rtoken(/^([0-1][0-9]|2[0-3])/),i.hour));d.m=e.cache(e.process(e.rtoken(/^([0-5][0-9]|[0-9])/),i.minute));d.mm=e.cache(e.process(e.rtoken(/^[0-5][0-9]/),i.minute));d.s=e.cache(e.process(e.rtoken(/^([0-5][0-9]|[0-9])/),i.second));d.ss=
52
+ e.cache(e.process(e.rtoken(/^[0-5][0-9]/),i.second));d.hms=e.cache(e.sequence([d.H,d.m,d.s],d.timePartDelimiter));d.t=e.cache(e.process(d.ctoken2("shortMeridian"),i.meridian));d.tt=e.cache(e.process(d.ctoken2("longMeridian"),i.meridian));d.z=e.cache(e.process(e.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/),i.timezone));d.zz=e.cache(e.process(e.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/),i.timezone));d.zzz=e.cache(e.process(d.ctoken2("timezone"),i.timezone));d.timeSuffix=e.each(e.ignore(d.whiteSpace),
53
+ e.set([d.tt,d.zzz]));d.time=e.each(e.optional(e.ignore(e.stoken("T"))),d.hms,d.timeSuffix);d.d=e.cache(e.process(e.each(e.rtoken(/^([0-2]\d|3[0-1]|\d)/),e.optional(d.ctoken2("ordinalSuffix"))),i.day));d.dd=e.cache(e.process(e.each(e.rtoken(/^([0-2]\d|3[0-1])/),e.optional(d.ctoken2("ordinalSuffix"))),i.day));d.ddd=d.dddd=e.cache(e.process(d.ctoken("sun mon tue wed thu fri sat"),function(b){return function(){this.weekday=b}}));d.M=e.cache(e.process(e.rtoken(/^(1[0-2]|0\d|\d)/),i.month));d.MM=e.cache(e.process(e.rtoken(/^(1[0-2]|0\d)/),
54
+ i.month));d.MMM=d.MMMM=e.cache(e.process(d.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"),i.month));d.y=e.cache(e.process(e.rtoken(/^(\d\d?)/),i.year));d.yy=e.cache(e.process(e.rtoken(/^(\d\d)/),i.year));d.yyy=e.cache(e.process(e.rtoken(/^(\d\d?\d?\d?)/),i.year));d.yyyy=e.cache(e.process(e.rtoken(/^(\d\d\d\d)/),i.year));j=function(){return e.each(e.any.apply(null,arguments),e.not(d.ctoken2("timeContext")))};d.day=j(d.d,d.dd);d.month=j(d.M,d.MMM);d.year=j(d.yyyy,d.yy);d.orientation=e.process(d.ctoken("past future"),
55
+ function(b){return function(){this.orient=b}});d.operator=e.process(d.ctoken("add subtract"),function(b){return function(){this.operator=b}});d.rday=e.process(d.ctoken("yesterday tomorrow today now"),i.rday);d.unit=e.process(d.ctoken("second minute hour day week month year"),function(b){return function(){this.unit=b}});d.value=e.process(e.rtoken(/^\d\d?(st|nd|rd|th)?/),function(b){return function(){this.value=b.replace(/\D/g,"")}});d.expression=e.set([d.rday,d.operator,d.value,d.unit,d.orientation,
56
+ d.ddd,d.MMM]);j=function(){return e.set(arguments,d.datePartDelimiter)};d.mdy=j(d.ddd,d.month,d.day,d.year);d.ymd=j(d.ddd,d.year,d.month,d.day);d.dmy=j(d.ddd,d.day,d.month,d.year);d.date=function(b){return(d[l.dateElementOrder]||d.mdy).call(this,b)};d.format=e.process(e.many(e.any(e.process(e.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),function(b){if(d[b])return d[b];else throw f.Parsing.Exception(b);}),e.process(e.rtoken(/^[^dMyhHmstz]+/),function(b){return e.ignore(e.stoken(b))}))),
57
+ function(b){return e.process(e.each.apply(null,b),i.finishExact)});var c={};d.formats=function(b){if(b instanceof Array){for(var g=[],k=0;k<b.length;k++)g.push(c[b[k]]=c[b[k]]||d.format(b[k])[0]);return e.any.apply(null,g)}else return c[b]=c[b]||d.format(b)[0]};d._formats=d.formats(['"yyyy-MM-ddTHH:mm:ssZ"',"yyyy-MM-ddTHH:mm:ssZ","yyyy-MM-ddTHH:mm:ssz","yyyy-MM-ddTHH:mm:ss","yyyy-MM-ddTHH:mmZ","yyyy-MM-ddTHH:mmz","yyyy-MM-ddTHH:mm","ddd, MMM dd, yyyy H:mm:ss tt","ddd MMM d yyyy HH:mm:ss zzz","MMddyyyy",
58
+ "ddMMyyyy","Mddyyyy","ddMyyyy","Mdyyyy","dMyyyy","yyyy","Mdyy","dMyy","d"]);d._start=e.process(e.set([d.date,d.time,d.expression],d.generalDelimiter,d.whiteSpace),i.finish);d.start=function(b){try{var g=d._formats.call({},b);if(g[1].length===0)return g}catch(k){}return d._start.call({},b)};f._parse=f.parse;f.parse=function(b){var g=null;if(!b)return null;if(b instanceof Date)return b;try{g=f.Grammar.start.call({},b.replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1"))}catch(k){return null}return g[1].length===
59
+ 0?g[0]:null};f.getParseFunction=function(b){var g=f.Grammar.formats(b);return function(k){var h=null;try{h=g.call({},k)}catch(m){return null}return h[1].length===0?h[0]:null}};f.parseExact=function(b,g){return f.getParseFunction(g)(b)}})();
60
+ (function(f){function l(j){function a(){var g=i.getBoundaryDatesFromData(b.data,Math.floor(b.slideWidth/b.cellWidth+5));b.start=g[0];b.end=g[1];c.each(function(){var k=f(this),h=f("<div>",{"class":"ganttview"});(new e(h,b)).render();k.append(h);h=f("div.ganttview-vtheader",k).outerWidth()+f("div.ganttview-slide-container",k).outerWidth();k.css("width",h+2+"px");(new d(k,b)).apply()})}var c=this,b=f.extend(true,{showWeekends:true,cellWidth:21,cellHeight:31,slideWidth:400,vHeaderWidth:100,behavior:{clickable:true,
61
+ draggable:true,resizable:true}},j);if(b.data)a();else b.dataUrl&&f.getJSON(b.dataUrl,function(g){b.data=g;a()})}function q(j,a){if(j=="setSlideWidth"){var c=$("div.ganttview",this);c.each(function(){var b=$("div.ganttview-vtheader",c).outerWidth();$(c).width(b+a+1);$("div.ganttview-slide-container",this).width(a)})}}f.fn.ganttView=function(){var j=Array.prototype.slice.call(arguments);j.length==1&&typeof j[0]=="object"&&l.call(this,j[0]);j.length==2&&typeof j[0]=="string"&&q.call(this,j[0],j[1])};
62
+ var e=function(j,a){var c=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];return{render:function(){for(var b=a.data,g=a.cellHeight,k=f("<div>",{"class":"ganttview-vtheader"}),h=0;h<b.length;h++){var m=f("<div>",{"class":"ganttview-vtheader-item"});m.append(f("<div>",{"class":"ganttview-vtheader-item-name",css:{height:b[h].series.length*g+"px"}}).append(b[h].name));for(var n=f("<div>",{"class":"ganttview-vtheader-series"}),o=0;o<b[h].series.length;o++)n.append(f("<div>",{"class":"ganttview-vtheader-series-name"}).append(b[h].series[o].name));
63
+ m.append(n);k.append(m)}j.append(k);b=f("<div>",{"class":"ganttview-slide-container",css:{width:a.slideWidth+"px"}});h=a.start;g=a.end;k=[];k[h.getFullYear()]=[];k[h.getFullYear()][h.getMonth()]=[h];for(h=h;h.compareTo(g)==-1;){h=h.clone().addDays(1);k[h.getFullYear()]||(k[h.getFullYear()]=[]);k[h.getFullYear()][h.getMonth()]||(k[h.getFullYear()][h.getMonth()]=[]);k[h.getFullYear()][h.getMonth()].push(h);h=h}g=dates=k;k=a.cellWidth;h=f("<div>",{"class":"ganttview-hzheader"});m=f("<div>",{"class":"ganttview-hzheader-months"});
64
+ n=f("<div>",{"class":"ganttview-hzheader-days"});o=0;for(var p in g)for(var t in g[p]){var x=g[p][t].length*k;o+=x;m.append(f("<div>",{"class":"ganttview-hzheader-month",css:{width:x-1+"px"}}).append(c[t]+"/"+p));for(var u in g[p][t])n.append(f("<div>",{"class":"ganttview-hzheader-day"}).append(g[p][t][u].getDate()))}m.css("width",o+"px");n.css("width",o+"px");h.append(m).append(n);b.append(h);p=a.data;g=dates;k=a.cellWidth;h=a.showWeekends;t=f("<div>",{"class":"ganttview-grid"});u=f("<div>",{"class":"ganttview-grid-row"});
65
+ for(var s in g)for(var v in g[s])for(var w in g[s][v]){m=f("<div>",{"class":"ganttview-grid-row-cell"});i.isWeekend(g[s][v][w])&&h&&m.addClass("ganttview-weekend");u.append(m)}s=f("div.ganttview-grid-row-cell",u).length*k;u.css("width",s+"px");t.css("width",s+"px");for(s=0;s<p.length;s++)for(v=0;v<p[s].series.length;v++)t.append(u.clone());b.append(t);s=a.data;v=f("<div>",{"class":"ganttview-blocks"});for(w=0;w<s.length;w++)for(p=0;p<s[w].series.length;p++)v.append(f("<div>",{"class":"ganttview-block-container"}));
66
+ b.append(v);s=a.data;v=a.cellWidth;w=a.start;p=f("div.ganttview-blocks div.ganttview-block-container",b);for(u=t=0;u<s.length;u++)for(g=0;g<s[u].series.length;g++){k=s[u].series[g];h=i.daysBetween(k.start,k.end)+1;m=i.daysBetween(w,k.start);n=m=f("<div>",{"class":"ganttview-block",title:k.name+", "+h+" days",css:{width:h*v-9+"px","margin-left":m*v+3+"px"}});o=s[u];o={id:o.id,name:o.name};f.extend(o,k);n.data("block-data",o);s[u].series[g].color&&m.css("background-color",s[u].series[g].color);m.append(f("<div>",
67
+ {"class":"ganttview-block-text"}).text(h));f(p[t]).append(m);t+=1}j.append(b);b=j.parent();f("div.ganttview-grid-row div.ganttview-grid-row-cell:last-child",b).addClass("last");f("div.ganttview-hzheader-days div.ganttview-hzheader-day:last-child",b).addClass("last");f("div.ganttview-hzheader-months div.ganttview-hzheader-month:last-child",b).addClass("last")}}},d=function(j,a){function c(h,m){f("div.ganttview-block",h).live("click",function(){m&&m(f(this).data("block-data"))})}function b(h,m,n,o){f("div.ganttview-block",
68
+ h).resizable({grid:m,handles:"e,w",stop:function(){var p=f(this);k(h,p,m,n);o&&o(p.data("block-data"))}})}function g(h,m,n,o){f("div.ganttview-block",h).draggable({axis:"x",grid:[m,m],stop:function(){var p=f(this);k(h,p,m,n);o&&o(p.data("block-data"))}})}function k(h,m,n,o){h=f("div.ganttview-slide-container",h);var p=h.scrollLeft();h=m.offset().left-h.offset().left-1+p;p=Math.round(h/n);o=o.clone().addDays(p);m.data("block-data").start=o;p=m.outerWidth();n=Math.round(p/n)-1;m.data("block-data").end=
69
+ o.clone().addDays(n);f("div.ganttview-block-text",m).text(n+1);m.css("top","").css("left","").css("position","relative").css("margin-left",h+"px")}return{apply:function(){a.behavior.clickable&&c(j,a.behavior.onClick);a.behavior.resizable&&b(j,a.cellWidth,a.start,a.behavior.onResize);a.behavior.draggable&&g(j,a.cellWidth,a.start,a.behavior.onDrag)}}},i={daysBetween:function(j,a){if(!j||!a)return 0;j=Date.parse(j);a=Date.parse(a);if(j.getYear()==1901||a.getYear()==8099)return 0;for(var c=0,b=j.clone();b.compareTo(a)==
70
+ -1;){c+=1;b.addDays(1)}return c},isWeekend:function(j){return j.getDay()%6==0},getBoundaryDatesFromData:function(j,a){var c=new Date;maxEnd=new Date;for(var b=0;b<j.length;b++)for(var g=0;g<j[b].series.length;g++){var k=Date.parse(j[b].series[g].start),h=Date.parse(j[b].series[g].end);if(b==0&&g==0){c=k;maxEnd=h}if(c.compareTo(k)==1)c=k;if(maxEnd.compareTo(h)==-1)maxEnd=h}if(i.daysBetween(c,maxEnd)<a)maxEnd=c.clone().addDays(a);return[c,maxEnd]}}})(jQuery);
@@ -1,171 +1,171 @@
1
1
  /**
2
- *
3
- * jquery.sparkline.js
4
- *
5
- * v1.6
6
- * (c) Splunk, Inc
7
- * Contact: Gareth Watts (gareth@splunk.com)
8
- * http://omnipotent.net/jquery.sparkline/
9
- *
10
- * Generates inline sparkline charts from data supplied either to the method
11
- * or inline in HTML
12
- *
13
- * Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag
14
- * (Firefox 2.0+, Safari, Opera, etc)
15
- *
16
- * License: New BSD License
17
- *
18
- * Copyright (c) 2010, Splunk Inc.
19
- * All rights reserved.
20
- *
21
- * Redistribution and use in source and binary forms, with or without modification,
22
- * are permitted provided that the following conditions are met:
23
- *
24
- * * Redistributions of source code must retain the above copyright notice,
25
- * this list of conditions and the following disclaimer.
26
- * * Redistributions in binary form must reproduce the above copyright notice,
27
- * this list of conditions and the following disclaimer in the documentation
28
- * and/or other materials provided with the distribution.
29
- * * Neither the name of Splunk Inc nor the names of its contributors may
30
- * be used to endorse or promote products derived from this software without
31
- * specific prior written permission.
32
- *
33
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
34
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
35
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
36
- * SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
37
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
38
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
40
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
41
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42
- *
43
- *
44
- * Usage:
45
- * $(selector).sparkline(values, options)
46
- *
47
- * If values is undefined or set to 'html' then the data values are read from the specified tag:
48
- * <p>Sparkline: <span class="sparkline">1,4,6,6,8,5,3,5</span></p>
49
- * $('.sparkline').sparkline();
50
- * There must be no spaces in the enclosed data set
51
- *
52
- * Otherwise values must be an array of numbers or null values
53
- * <p>Sparkline: <span id="sparkline1">This text replaced if the browser is compatible</span></p>
54
- * $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])
55
- * $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])
56
- *
57
- * Values can also be specified in an HTML comment, or as a values attribute:
58
- * <p>Sparkline: <span class="sparkline"><!--1,4,6,6,8,5,3,5 --></span></p>
59
- * <p>Sparkline: <span class="sparkline" values="1,4,6,6,8,5,3,5"></span></p>
60
- * $('.sparkline').sparkline();
61
- *
62
- * For line charts, x values can also be specified:
63
- * <p>Sparkline: <span class="sparkline">1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5</span></p>
64
- * $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])
65
- *
66
- * By default, options should be passed in as teh second argument to the sparkline function:
67
- * $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})
68
- *
69
- * Options can also be set by passing them on the tag itself. This feature is disabled by default though
70
- * as there's a slight performance overhead:
71
- * $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})
72
- * <p>Sparkline: <span class="sparkline" sparkType="bar" sparkBarColor="red">loading</span></p>
73
- * Prefix all options supplied as tag attribute with "spark" (configurable by setting tagOptionPrefix)
74
- *
75
- * Supported options:
76
- * lineColor - Color of the line used for the chart
77
- * fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart
78
- * width - Width of the chart - Defaults to 3 times the number of values in pixels
79
- * height - Height of the chart - Defaults to the height of the containing element
80
- * chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied
81
- * chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied
82
- * chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax
83
- * chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied
84
- * chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied
85
- * composite - If true then don't erase any existing chart attached to the tag, but draw
86
- * another chart over the top - Note that width and height are ignored if an
87
- * existing chart is detected.
88
- * tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'
89
- * enableTagOptions - Whether to check tags for sparkline options
90
- * tagOptionPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'
91
- *
92
- * There are 7 types of sparkline, selected by supplying a "type" option of 'line' (default),
93
- * 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'
94
- * line - Line chart. Options:
95
- * spotColor - Set to '' to not end each line in a circular spot
96
- * minSpotColor - If set, color of spot at minimum value
97
- * maxSpotColor - If set, color of spot at maximum value
98
- * spotRadius - Radius in pixels
99
- * lineWidth - Width of line in pixels
100
- * normalRangeMin
101
- * normalRangeMax - If set draws a filled horizontal bar between these two values marking the "normal"
102
- * or expected range of values
103
- * normalRangeColor - Color to use for the above bar
104
- * drawNormalOnTop - Draw the normal range above the chart fill color if true
105
- * defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart
106
- *
107
- * bar - Bar chart. Options:
108
- * barColor - Color of bars for postive values
109
- * negBarColor - Color of bars for negative values
110
- * zeroColor - Color of bars with zero values
111
- * nullColor - Color of bars with null values - Defaults to omitting the bar entirely
112
- * barWidth - Width of bars in pixels
113
- * colorMap - Optional mappnig of values to colors to override the *BarColor values above
114
- * can be an Array of values to control the color of individual bars
115
- * barSpacing - Gap between bars in pixels
116
- * zeroAxis - Centers the y-axis around zero if true
117
- *
118
- * tristate - Charts values of win (>0), lose (<0) or draw (=0)
119
- * posBarColor - Color of win values
120
- * negBarColor - Color of lose values
121
- * zeroBarColor - Color of draw values
122
- * barWidth - Width of bars in pixels
123
- * barSpacing - Gap between bars in pixels
124
- * colorMap - Optional mappnig of values to colors to override the *BarColor values above
125
- * can be an Array of values to control the color of individual bars
126
- *
127
- * discrete - Options:
128
- * lineHeight - Height of each line in pixels - Defaults to 30% of the graph height
129
- * thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor
130
- * thresholdColor
131
- *
132
- * bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...
133
- * options:
134
- * targetColor - The color of the vertical target marker
135
- * targetWidth - The width of the target marker in pixels
136
- * performanceColor - The color of the performance measure horizontal bar
137
- * rangeColors - Colors to use for each qualitative range background color
138
- *
139
- * pie - Pie chart. Options:
140
- * sliceColors - An array of colors to use for pie slices
141
- * offset - Angle in degrees to offset the first slice - Try -90 or +90
142
- *
143
- * box - Box plot. Options:
144
- * raw - Set to true to supply pre-computed plot points as values
145
- * values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier
146
- * When set to false you can supply any number of values and the box plot will
147
- * be computed for you. Default is false.
148
- * showOutliers - Set to true (default) to display outliers as circles
149
- * outlierIRQ - Interquartile range used to determine outliers. Default 1.5
150
- * boxLineColor - Outline color of the box
151
- * boxFillColor - Fill color for the box
152
- * whiskerColor - Line color used for whiskers
153
- * outlierLineColor - Outline color of outlier circles
154
- * outlierFillColor - Fill color of the outlier circles
155
- * spotRadius - Radius of outlier circles
156
- * medianColor - Line color of the median line
157
- * target - Draw a target cross hair at the supplied value (default undefined)
158
- *
159
- *
160
- *
161
- * Examples:
162
- * $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });
163
- * $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });
164
- * $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):
165
- * $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });
166
- * $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });
167
- * $('#pie').sparkline([1,1,2], { type:'pie' });
168
- */
2
+ *
3
+ * jquery.sparkline.js
4
+ *
5
+ * v1.6
6
+ * (c) Splunk, Inc
7
+ * Contact: Gareth Watts (gareth@splunk.com)
8
+ * http://omnipotent.net/jquery.sparkline/
9
+ *
10
+ * Generates inline sparkline charts from data supplied either to the method
11
+ * or inline in HTML
12
+ *
13
+ * Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag
14
+ * (Firefox 2.0+, Safari, Opera, etc)
15
+ *
16
+ * License: New BSD License
17
+ *
18
+ * Copyright (c) 2010, Splunk Inc.
19
+ * All rights reserved.
20
+ *
21
+ * Redistribution and use in source and binary forms, with or without modification,
22
+ * are permitted provided that the following conditions are met:
23
+ *
24
+ * * Redistributions of source code must retain the above copyright notice,
25
+ * this list of conditions and the following disclaimer.
26
+ * * Redistributions in binary form must reproduce the above copyright notice,
27
+ * this list of conditions and the following disclaimer in the documentation
28
+ * and/or other materials provided with the distribution.
29
+ * * Neither the name of Splunk Inc nor the names of its contributors may
30
+ * be used to endorse or promote products derived from this software without
31
+ * specific prior written permission.
32
+ *
33
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
34
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
35
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
36
+ * SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
37
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
38
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
40
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
41
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42
+ *
43
+ *
44
+ * Usage:
45
+ * $(selector).sparkline(values, options)
46
+ *
47
+ * If values is undefined or set to 'html' then the data values are read from the specified tag:
48
+ * <p>Sparkline: <span class="sparkline">1,4,6,6,8,5,3,5</span></p>
49
+ * $('.sparkline').sparkline();
50
+ * There must be no spaces in the enclosed data set
51
+ *
52
+ * Otherwise values must be an array of numbers or null values
53
+ * <p>Sparkline: <span id="sparkline1">This text replaced if the browser is compatible</span></p>
54
+ * $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])
55
+ * $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])
56
+ *
57
+ * Values can also be specified in an HTML comment, or as a values attribute:
58
+ * <p>Sparkline: <span class="sparkline"><!--1,4,6,6,8,5,3,5 --></span></p>
59
+ * <p>Sparkline: <span class="sparkline" values="1,4,6,6,8,5,3,5"></span></p>
60
+ * $('.sparkline').sparkline();
61
+ *
62
+ * For line charts, x values can also be specified:
63
+ * <p>Sparkline: <span class="sparkline">1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5</span></p>
64
+ * $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])
65
+ *
66
+ * By default, options should be passed in as teh second argument to the sparkline function:
67
+ * $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})
68
+ *
69
+ * Options can also be set by passing them on the tag itself. This feature is disabled by default though
70
+ * as there's a slight performance overhead:
71
+ * $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})
72
+ * <p>Sparkline: <span class="sparkline" sparkType="bar" sparkBarColor="red">loading</span></p>
73
+ * Prefix all options supplied as tag attribute with "spark" (configurable by setting tagOptionPrefix)
74
+ *
75
+ * Supported options:
76
+ * lineColor - Color of the line used for the chart
77
+ * fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart
78
+ * width - Width of the chart - Defaults to 3 times the number of values in pixels
79
+ * height - Height of the chart - Defaults to the height of the containing element
80
+ * chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied
81
+ * chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied
82
+ * chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax
83
+ * chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied
84
+ * chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied
85
+ * composite - If true then don't erase any existing chart attached to the tag, but draw
86
+ * another chart over the top - Note that width and height are ignored if an
87
+ * existing chart is detected.
88
+ * tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'
89
+ * enableTagOptions - Whether to check tags for sparkline options
90
+ * tagOptionPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'
91
+ *
92
+ * There are 7 types of sparkline, selected by supplying a "type" option of 'line' (default),
93
+ * 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'
94
+ * line - Line chart. Options:
95
+ * spotColor - Set to '' to not end each line in a circular spot
96
+ * minSpotColor - If set, color of spot at minimum value
97
+ * maxSpotColor - If set, color of spot at maximum value
98
+ * spotRadius - Radius in pixels
99
+ * lineWidth - Width of line in pixels
100
+ * normalRangeMin
101
+ * normalRangeMax - If set draws a filled horizontal bar between these two values marking the "normal"
102
+ * or expected range of values
103
+ * normalRangeColor - Color to use for the above bar
104
+ * drawNormalOnTop - Draw the normal range above the chart fill color if true
105
+ * defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart
106
+ *
107
+ * bar - Bar chart. Options:
108
+ * barColor - Color of bars for postive values
109
+ * negBarColor - Color of bars for negative values
110
+ * zeroColor - Color of bars with zero values
111
+ * nullColor - Color of bars with null values - Defaults to omitting the bar entirely
112
+ * barWidth - Width of bars in pixels
113
+ * colorMap - Optional mappnig of values to colors to override the *BarColor values above
114
+ * can be an Array of values to control the color of individual bars
115
+ * barSpacing - Gap between bars in pixels
116
+ * zeroAxis - Centers the y-axis around zero if true
117
+ *
118
+ * tristate - Charts values of win (>0), lose (<0) or draw (=0)
119
+ * posBarColor - Color of win values
120
+ * negBarColor - Color of lose values
121
+ * zeroBarColor - Color of draw values
122
+ * barWidth - Width of bars in pixels
123
+ * barSpacing - Gap between bars in pixels
124
+ * colorMap - Optional mappnig of values to colors to override the *BarColor values above
125
+ * can be an Array of values to control the color of individual bars
126
+ *
127
+ * discrete - Options:
128
+ * lineHeight - Height of each line in pixels - Defaults to 30% of the graph height
129
+ * thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor
130
+ * thresholdColor
131
+ *
132
+ * bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...
133
+ * options:
134
+ * targetColor - The color of the vertical target marker
135
+ * targetWidth - The width of the target marker in pixels
136
+ * performanceColor - The color of the performance measure horizontal bar
137
+ * rangeColors - Colors to use for each qualitative range background color
138
+ *
139
+ * pie - Pie chart. Options:
140
+ * sliceColors - An array of colors to use for pie slices
141
+ * offset - Angle in degrees to offset the first slice - Try -90 or +90
142
+ *
143
+ * box - Box plot. Options:
144
+ * raw - Set to true to supply pre-computed plot points as values
145
+ * values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier
146
+ * When set to false you can supply any number of values and the box plot will
147
+ * be computed for you. Default is false.
148
+ * showOutliers - Set to true (default) to display outliers as circles
149
+ * outlierIRQ - Interquartile range used to determine outliers. Default 1.5
150
+ * boxLineColor - Outline color of the box
151
+ * boxFillColor - Fill color for the box
152
+ * whiskerColor - Line color used for whiskers
153
+ * outlierLineColor - Outline color of outlier circles
154
+ * outlierFillColor - Fill color of the outlier circles
155
+ * spotRadius - Radius of outlier circles
156
+ * medianColor - Line color of the median line
157
+ * target - Draw a target cross hair at the supplied value (default undefined)
158
+ *
159
+ *
160
+ *
161
+ * Examples:
162
+ * $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });
163
+ * $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });
164
+ * $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):
165
+ * $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });
166
+ * $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });
167
+ * $('#pie').sparkline([1,1,2], { type:'pie' });
168
+ */
169
169
 
170
170
 
171
171
  (function($) {
@@ -180,7 +180,7 @@
180
180
  lineColor : '#00f',
181
181
  fillColor : '#cdf',
182
182
  defaultPixelsPerValue : 3,
183
- width : 'auto',
183
+ width : 'auto',
184
184
  height : 'auto',
185
185
  composite : false,
186
186
  tagValuesAttribute: 'values',
@@ -193,7 +193,7 @@
193
193
  spotRadius : 1.5,
194
194
  minSpotColor : '#f80',
195
195
  maxSpotColor : '#f80',
196
- lineWidth: 1,
196
+ lineWidth: 1,
197
197
  normalRangeMin : undefined,
198
198
  normalRangeMax : undefined,
199
199
  normalRangeColor : '#ccc',
@@ -272,11 +272,11 @@
272
272
  if (use_existing && this[0].VCanvas) {
273
273
  return this[0].VCanvas;
274
274
  }
275
- if (width === undefined) {
276
- width=$(this).innerWidth();
275
+ if (width === undefined) {
276
+ width = $(this).innerWidth();
277
277
  }
278
278
  if (height === undefined) {
279
- height=$(this).innerHeight();
279
+ height = $(this).innerHeight();
280
280
  }
281
281
  if ($.browser.hasCanvas) {
282
282
  return new VCanvas_canvas(width, height, this);
@@ -295,9 +295,9 @@
295
295
  var options = new $.fn.sparkline.options(this, userOptions);
296
296
  var render = function() {
297
297
  var values, width, height;
298
- if (uservalues==='html' || uservalues===undefined) {
298
+ if (uservalues === 'html' || uservalues === undefined) {
299
299
  var vals = this.getAttribute(options.get('tagValuesAttribute'));
300
- if (vals===undefined || vals===null) {
300
+ if (vals === undefined || vals === null) {
301
301
  vals = $(this).html();
302
302
  }
303
303
  values = vals.replace(/(^\s*<!--)|(-->\s*$)|\s+/g, '').split(',');
@@ -305,7 +305,7 @@
305
305
  values = uservalues;
306
306
  }
307
307
 
308
- width = options.get('width')=='auto' ? values.length*options.get('defaultPixelsPerValue') : options.get('width');
308
+ width = options.get('width') == 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');
309
309
  if (options.get('height') == 'auto') {
310
310
  if (!options.get('composite') || !this.VCanvas) {
311
311
  // must be a better way to get the line height
@@ -334,7 +334,7 @@
334
334
 
335
335
 
336
336
  $.sparkline_display_visible = function() {
337
- for (var i=pending.length-1; i>=0; i--) {
337
+ for (var i = pending.length - 1; i >= 0; i--) {
338
338
  var el = pending[i][0];
339
339
  if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {
340
340
  pending[i][1].call(el);
@@ -349,7 +349,7 @@
349
349
  */
350
350
  var UNSET_OPTION = {};
351
351
  var normalizeValue = function(val) {
352
- switch(val) {
352
+ switch (val) {
353
353
  case 'undefined':
354
354
  val = undefined;
355
355
  break;
@@ -378,7 +378,7 @@
378
378
  var defaults = $.fn.sparkline.defaults;
379
379
  var base = defaults.common;
380
380
  this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);
381
-
381
+
382
382
  var tagOptionType = this.getTagSetting('type');
383
383
  if (tagOptionType === UNSET_OPTION) {
384
384
  extendedOptions = defaults[userOptions.type || base.type];
@@ -401,14 +401,14 @@
401
401
  if (val === undefined || val === null) {
402
402
  val = UNSET_OPTION;
403
403
  } else if (val.substr(0, 1) == '[') {
404
- val = val.substr(1, val.length-2).split(',');
405
- for(i=val.length; i--;) {
404
+ val = val.substr(1, val.length - 2).split(',');
405
+ for (i = val.length; i--;) {
406
406
  val[i] = normalizeValue(val[i].replace(/(^\s*)|(\s*$)/g, ''));
407
407
  }
408
408
  } else if (val.substr(0, 1) == '{') {
409
- var pairs= val.substr(1, val.length-2).split(',');
409
+ var pairs = val.substr(1, val.length - 2).split(',');
410
410
  val = {};
411
- for(i=pairs.length; i--;) {
411
+ for (i = pairs.length; i--;) {
412
412
  var keyval = pairs[i].split(':', 2);
413
413
  val[keyval[0].replace(/(^\s*)|(\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\s*)|(\s*$)/g, ''));
414
414
  }
@@ -417,7 +417,7 @@
417
417
  }
418
418
  this.tagValCache.key = val;
419
419
  }
420
- return val;
420
+ return val;
421
421
  };
422
422
 
423
423
  $.fn.sparkline.options.prototype.get = function(key) {
@@ -434,10 +434,10 @@
434
434
  */
435
435
  $.fn.sparkline.line = function(values, options, width, height) {
436
436
  var xvalues = [], yvalues = [], yminmax = [];
437
- for (var i=0; i<values.length; i++) {
437
+ for (var i = 0; i < values.length; i++) {
438
438
  var val = values[i];
439
- var isstr = typeof(values[i])=='string';
440
- var isarray = typeof(values[i])=='object' && values[i] instanceof Array;
439
+ var isstr = typeof(values[i]) == 'string';
440
+ var isarray = typeof(values[i]) == 'object' && values[i] instanceof Array;
441
441
  var sp = isstr && values[i].split(':');
442
442
  if (isstr && sp.length == 2) { // x:y
443
443
  xvalues.push(Number(sp[0]));
@@ -449,7 +449,7 @@
449
449
  yminmax.push(val[1]);
450
450
  } else {
451
451
  xvalues.push(i);
452
- if (values[i]===null || values[i]=='null') {
452
+ if (values[i] === null || values[i] == 'null') {
453
453
  yvalues.push(null);
454
454
  } else {
455
455
  yvalues.push(Number(val));
@@ -472,31 +472,31 @@
472
472
  var normalRangeMin = options.get('normalRangeMin');
473
473
  var normalRangeMax = options.get('normalRangeMax');
474
474
 
475
- if (normalRangeMin!==undefined) {
476
- if (normalRangeMin<miny) {
475
+ if (normalRangeMin !== undefined) {
476
+ if (normalRangeMin < miny) {
477
477
  miny = normalRangeMin;
478
478
  }
479
- if (normalRangeMax>maxy) {
479
+ if (normalRangeMax > maxy) {
480
480
  maxy = normalRangeMax;
481
481
  }
482
482
  }
483
- if (options.get('chartRangeMin')!==undefined && (options.get('chartRangeClip') || options.get('chartRangeMin')<miny)) {
483
+ if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < miny)) {
484
484
  miny = options.get('chartRangeMin');
485
485
  }
486
- if (options.get('chartRangeMax')!==undefined && (options.get('chartRangeClip') || options.get('chartRangeMax')>maxy)) {
486
+ if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > maxy)) {
487
487
  maxy = options.get('chartRangeMax');
488
488
  }
489
- if (options.get('chartRangeMinX')!==undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX')<minx)) {
489
+ if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < minx)) {
490
490
  minx = options.get('chartRangeMinX');
491
491
  }
492
- if (options.get('chartRangeMaxX')!==undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX')>maxx)) {
492
+ if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > maxx)) {
493
493
  maxx = options.get('chartRangeMaxX');
494
494
  }
495
- var rangex = maxx-minx === 0 ? 1 : maxx-minx;
496
- var rangey = maxy-miny === 0 ? 1 : maxy-miny;
497
- var vl = yvalues.length-1;
495
+ var rangex = maxx - minx === 0 ? 1 : maxx - minx;
496
+ var rangey = maxy - miny === 0 ? 1 : maxy - miny;
497
+ var vl = yvalues.length - 1;
498
498
 
499
- if (vl<1) {
499
+ if (vl < 1) {
500
500
  this.innerHTML = '';
501
501
  return;
502
502
  }
@@ -509,23 +509,23 @@
509
509
  var canvas_left = 0;
510
510
 
511
511
  var spotRadius = options.get('spotRadius');
512
- if (spotRadius && (canvas_width < (spotRadius*4) || canvas_height < (spotRadius*4))) {
512
+ if (spotRadius && (canvas_width < (spotRadius * 4) || canvas_height < (spotRadius * 4))) {
513
513
  spotRadius = 0;
514
514
  }
515
515
  if (spotRadius) {
516
516
  // adjust the canvas size as required so that spots will fit
517
- if (options.get('minSpotColor') || (options.get('spotColor') && yvalues[vl]==miny)) {
517
+ if (options.get('minSpotColor') || (options.get('spotColor') && yvalues[vl] == miny)) {
518
518
  canvas_height -= Math.ceil(spotRadius);
519
519
  }
520
- if (options.get('maxSpotColor') || (options.get('spotColor') && yvalues[vl]==maxy)) {
520
+ if (options.get('maxSpotColor') || (options.get('spotColor') && yvalues[vl] == maxy)) {
521
521
  canvas_height -= Math.ceil(spotRadius);
522
522
  canvas_top += Math.ceil(spotRadius);
523
523
  }
524
- if (options.get('minSpotColor') || options.get('maxSpotColor') && (yvalues[0]==miny || yvalues[0]==maxy)) {
524
+ if (options.get('minSpotColor') || options.get('maxSpotColor') && (yvalues[0] == miny || yvalues[0] == maxy)) {
525
525
  canvas_left += Math.ceil(spotRadius);
526
526
  canvas_width -= Math.ceil(spotRadius);
527
527
  }
528
- if (options.get('spotColor') || (options.get('minSpotColor') || options.get('maxSpotColor') && (yvalues[vl]==miny||yvalues[vl]==maxy))) {
528
+ if (options.get('spotColor') || (options.get('minSpotColor') || options.get('maxSpotColor') && (yvalues[vl] == miny || yvalues[vl] == maxy))) {
529
529
  canvas_width -= Math.ceil(spotRadius);
530
530
  }
531
531
  }
@@ -534,9 +534,9 @@
534
534
  canvas_height--;
535
535
 
536
536
  var drawNormalRange = function() {
537
- if (normalRangeMin!==undefined) {
538
- var ytop = canvas_top+Math.round(canvas_height-(canvas_height*((normalRangeMax-miny)/rangey)));
539
- var height = Math.round((canvas_height*(normalRangeMax-normalRangeMin))/rangey);
537
+ if (normalRangeMin !== undefined) {
538
+ var ytop = canvas_top + Math.round(canvas_height - (canvas_height * ((normalRangeMax - miny) / rangey)));
539
+ var height = Math.round((canvas_height * (normalRangeMax - normalRangeMin)) / rangey);
540
540
  target.drawRect(canvas_left, ytop, canvas_width, height, undefined, options.get('normalRangeColor'));
541
541
  }
542
542
  };
@@ -547,47 +547,47 @@
547
547
 
548
548
  var path = [];
549
549
  var paths = [path];
550
- var x, y, vlen=yvalues.length;
551
- for(i=0; i<vlen; i++) {
552
- x=xvalues[i];
553
- y=yvalues[i];
554
- if (y===null) {
550
+ var x, y, vlen = yvalues.length;
551
+ for (i = 0; i < vlen; i++) {
552
+ x = xvalues[i];
553
+ y = yvalues[i];
554
+ if (y === null) {
555
555
  if (i) {
556
- if (yvalues[i-1]!==null) {
556
+ if (yvalues[i - 1] !== null) {
557
557
  path = [];
558
558
  paths.push(path);
559
559
  }
560
560
  }
561
561
  } else {
562
562
  if (y < miny) {
563
- y=miny;
563
+ y = miny;
564
564
  }
565
565
  if (y > maxy) {
566
- y=maxy;
566
+ y = maxy;
567
567
  }
568
568
  if (!path.length) {
569
569
  // previous value was null
570
- path.push([canvas_left+Math.round((x-minx)*(canvas_width/rangex)), canvas_top+canvas_height]);
570
+ path.push([canvas_left + Math.round((x - minx) * (canvas_width / rangex)), canvas_top + canvas_height]);
571
571
  }
572
- path.push([canvas_left+Math.round((x-minx)*(canvas_width/rangex)), canvas_top+Math.round(canvas_height-(canvas_height*((y-miny)/rangey)))]);
572
+ path.push([canvas_left + Math.round((x - minx) * (canvas_width / rangex)), canvas_top + Math.round(canvas_height - (canvas_height * ((y - miny) / rangey)))]);
573
573
  }
574
574
  }
575
575
  var lineshapes = [];
576
576
  var fillshapes = [];
577
- var plen=paths.length;
578
- for(i=0; i<plen; i++) {
577
+ var plen = paths.length;
578
+ for (i = 0; i < plen; i++) {
579
579
  path = paths[i];
580
580
  if (!path.length) {
581
581
  continue; // last value was null
582
582
  }
583
583
  if (options.get('fillColor')) {
584
- path.push([path[path.length-1][0], canvas_top+canvas_height-1]);
584
+ path.push([path[path.length - 1][0], canvas_top + canvas_height - 1]);
585
585
  fillshapes.push(path.slice(0));
586
586
  path.pop();
587
587
  }
588
588
  // if there's only a single point in this path, then we want to display it as a vertical line
589
589
  // which means we keep path[0] as is
590
- if (path.length>2) {
590
+ if (path.length > 2) {
591
591
  // else we want the first value
592
592
  path[0] = [ path[0][0], path[1][1] ];
593
593
  }
@@ -596,7 +596,7 @@
596
596
 
597
597
  // draw the fill first, then optionally the normal range, then the line on top of that
598
598
  plen = fillshapes.length;
599
- for(i=0; i<plen; i++) {
599
+ for (i = 0; i < plen; i++) {
600
600
  target.drawShape(fillshapes[i], undefined, options.get('fillColor'));
601
601
  }
602
602
 
@@ -605,21 +605,21 @@
605
605
  }
606
606
 
607
607
  plen = lineshapes.length;
608
- for(i=0; i<plen; i++) {
608
+ for (i = 0; i < plen; i++) {
609
609
  target.drawShape(lineshapes[i], options.get('lineColor'), undefined, options.get('lineWidth'));
610
610
  }
611
-
611
+
612
612
  if (spotRadius && options.get('spotColor')) {
613
- target.drawCircle(canvas_left+Math.round(xvalues[xvalues.length-1]*(canvas_width/rangex)), canvas_top+Math.round(canvas_height-(canvas_height*((yvalues[vl]-miny)/rangey))), spotRadius, undefined, options.get('spotColor'));
613
+ target.drawCircle(canvas_left + Math.round(xvalues[xvalues.length - 1] * (canvas_width / rangex)), canvas_top + Math.round(canvas_height - (canvas_height * ((yvalues[vl] - miny) / rangey))), spotRadius, undefined, options.get('spotColor'));
614
614
  }
615
- if (maxy!=minyval) {
615
+ if (maxy != minyval) {
616
616
  if (spotRadius && options.get('minSpotColor')) {
617
617
  x = xvalues[$.inArray(minyval, yvalues)];
618
- target.drawCircle(canvas_left+Math.round((x-minx)*(canvas_width/rangex)), canvas_top+Math.round(canvas_height-(canvas_height*((minyval-miny)/rangey))), spotRadius, undefined, options.get('minSpotColor'));
618
+ target.drawCircle(canvas_left + Math.round((x - minx) * (canvas_width / rangex)), canvas_top + Math.round(canvas_height - (canvas_height * ((minyval - miny) / rangey))), spotRadius, undefined, options.get('minSpotColor'));
619
619
  }
620
620
  if (spotRadius && options.get('maxSpotColor')) {
621
621
  x = xvalues[$.inArray(maxyval, yvalues)];
622
- target.drawCircle(canvas_left+Math.round((x-minx)*(canvas_width/rangex)), canvas_top+Math.round(canvas_height-(canvas_height*((maxyval-miny)/rangey))), spotRadius, undefined, options.get('maxSpotColor'));
622
+ target.drawCircle(canvas_left + Math.round((x - minx) * (canvas_width / rangex)), canvas_top + Math.round(canvas_height - (canvas_height * ((maxyval - miny) / rangey))), spotRadius, undefined, options.get('maxSpotColor'));
623
623
  }
624
624
  }
625
625
 
@@ -629,15 +629,15 @@
629
629
  }
630
630
  };
631
631
 
632
-
633
- /**
632
+
633
+ /**
634
634
  * Bar charts
635
635
  */
636
636
  $.fn.sparkline.bar = function(values, options, width, height) {
637
- width = (values.length * options.get('barWidth')) + ((values.length-1) * options.get('barSpacing'));
637
+ width = (values.length * options.get('barWidth')) + ((values.length - 1) * options.get('barSpacing'));
638
638
  var num_values = [];
639
- for(var i=0, vlen=values.length; i<vlen; i++) {
640
- if (values[i]=='null' || values[i]===null) {
639
+ for (var i = 0, vlen = values.length; i < vlen; i++) {
640
+ if (values[i] == 'null' || values[i] === null) {
641
641
  values[i] = null;
642
642
  } else {
643
643
  values[i] = Number(values[i]);
@@ -645,18 +645,18 @@
645
645
  }
646
646
  }
647
647
  var max = Math.max.apply(Math, num_values),
648
- min = Math.min.apply(Math, num_values);
649
- if (options.get('chartRangeMin')!==undefined && (options.get('chartRangeClip') || options.get('chartRangeMin')<min)) {
648
+ min = Math.min.apply(Math, num_values);
649
+ if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {
650
650
  min = options.get('chartRangeMin');
651
651
  }
652
- if (options.get('chartRangeMax')!==undefined && (options.get('chartRangeClip') || options.get('chartRangeMax')>max)) {
652
+ if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {
653
653
  max = options.get('chartRangeMax');
654
654
  }
655
655
  var zeroAxis = options.get('zeroAxis');
656
656
  if (zeroAxis === undefined) {
657
- zeroAxis = min<0;
657
+ zeroAxis = min < 0;
658
658
  }
659
- var range = max-min === 0 ? 1 : max-min;
659
+ var range = max - min === 0 ? 1 : max - min;
660
660
 
661
661
  var colorMapByIndex, colorMapByValue;
662
662
  if ($.isArray(options.get('colorMap'))) {
@@ -670,50 +670,50 @@
670
670
  var target = $(this).simpledraw(width, height, options.get('composite'));
671
671
  if (target) {
672
672
  var color,
673
- canvas_height = target.pixel_height,
674
- yzero = min<0 && zeroAxis ? canvas_height-Math.round(canvas_height * (Math.abs(min)/range))-1 : canvas_height-1;
675
-
676
- for(i=values.length; i--;) {
677
- var x = i*(options.get('barWidth')+options.get('barSpacing')),
678
- y,
679
- val = values[i];
680
- if (val===null) {
673
+ canvas_height = target.pixel_height,
674
+ yzero = min < 0 && zeroAxis ? canvas_height - Math.round(canvas_height * (Math.abs(min) / range)) - 1 : canvas_height - 1;
675
+
676
+ for (i = values.length; i--;) {
677
+ var x = i * (options.get('barWidth') + options.get('barSpacing')),
678
+ y,
679
+ val = values[i];
680
+ if (val === null) {
681
681
  if (options.get('nullColor')) {
682
682
  color = options.get('nullColor');
683
- val = (zeroAxis && min<0) ? 0 : min;
683
+ val = (zeroAxis && min < 0) ? 0 : min;
684
684
  height = 1;
685
- y = (zeroAxis && min<0) ? yzero : canvas_height - height;
685
+ y = (zeroAxis && min < 0) ? yzero : canvas_height - height;
686
686
  } else {
687
687
  continue;
688
688
  }
689
689
  } else {
690
690
  if (val < min) {
691
- val=min;
691
+ val = min;
692
692
  }
693
693
  if (val > max) {
694
- val=max;
694
+ val = max;
695
695
  }
696
696
  color = (val < 0) ? options.get('negBarColor') : options.get('barColor');
697
- if (zeroAxis && min<0) {
698
- height = Math.round(canvas_height*((Math.abs(val)/range)))+1;
699
- y = (val < 0) ? yzero : yzero-height;
697
+ if (zeroAxis && min < 0) {
698
+ height = Math.round(canvas_height * ((Math.abs(val) / range))) + 1;
699
+ y = (val < 0) ? yzero : yzero - height;
700
700
  } else {
701
- height = Math.round(canvas_height*((val-min)/range))+1;
702
- y = canvas_height-height;
701
+ height = Math.round(canvas_height * ((val - min) / range)) + 1;
702
+ y = canvas_height - height;
703
703
  }
704
- if (val===0 && options.get('zeroColor')!==undefined) {
704
+ if (val === 0 && options.get('zeroColor') !== undefined) {
705
705
  color = options.get('zeroColor');
706
706
  }
707
707
  if (colorMapByValue && colorMapByValue[val]) {
708
708
  color = colorMapByValue[val];
709
- } else if (colorMapByIndex && colorMapByIndex.length>i) {
709
+ } else if (colorMapByIndex && colorMapByIndex.length > i) {
710
710
  color = colorMapByIndex[i];
711
711
  }
712
- if (color===null) {
712
+ if (color === null) {
713
713
  continue;
714
714
  }
715
715
  }
716
- target.drawRect(x, y, options.get('barWidth')-1, height-1, color, color);
716
+ target.drawRect(x, y, options.get('barWidth') - 1, height - 1, color, color);
717
717
  }
718
718
  } else {
719
719
  // Remove the tag contents if sparklines aren't supported
@@ -727,7 +727,7 @@
727
727
  */
728
728
  $.fn.sparkline.tristate = function(values, options, width, height) {
729
729
  values = $.map(values, Number);
730
- width = (values.length * options.get('barWidth')) + ((values.length-1) * options.get('barSpacing'));
730
+ width = (values.length * options.get('barWidth')) + ((values.length - 1) * options.get('barSpacing'));
731
731
 
732
732
  var colorMapByIndex, colorMapByValue;
733
733
  if ($.isArray(options.get('colorMap'))) {
@@ -741,33 +741,33 @@
741
741
  var target = $(this).simpledraw(width, height, options.get('composite'));
742
742
  if (target) {
743
743
  var canvas_height = target.pixel_height,
744
- half_height = Math.round(canvas_height/2);
744
+ half_height = Math.round(canvas_height / 2);
745
745
 
746
- for(var i=values.length; i--;) {
747
- var x = i*(options.get('barWidth')+options.get('barSpacing')),
748
- y, color;
746
+ for (var i = values.length; i--;) {
747
+ var x = i * (options.get('barWidth') + options.get('barSpacing')),
748
+ y, color;
749
749
  if (values[i] < 0) {
750
750
  y = half_height;
751
- height = half_height-1;
751
+ height = half_height - 1;
752
752
  color = options.get('negBarColor');
753
753
  } else if (values[i] > 0) {
754
754
  y = 0;
755
- height = half_height-1;
755
+ height = half_height - 1;
756
756
  color = options.get('posBarColor');
757
757
  } else {
758
- y = half_height-1;
758
+ y = half_height - 1;
759
759
  height = 2;
760
760
  color = options.get('zeroBarColor');
761
761
  }
762
762
  if (colorMapByValue && colorMapByValue[values[i]]) {
763
763
  color = colorMapByValue[values[i]];
764
- } else if (colorMapByIndex && colorMapByIndex.length>i) {
764
+ } else if (colorMapByIndex && colorMapByIndex.length > i) {
765
765
  color = colorMapByIndex[i];
766
766
  }
767
- if (color===null) {
767
+ if (color === null) {
768
768
  continue;
769
769
  }
770
- target.drawRect(x, y, options.get('barWidth')-1, height-1, color, color);
770
+ target.drawRect(x, y, options.get('barWidth') - 1, height - 1, color, color);
771
771
  }
772
772
  } else {
773
773
  // Remove the tag contents if sparklines aren't supported
@@ -776,46 +776,46 @@
776
776
  };
777
777
 
778
778
 
779
- /**
779
+ /**
780
780
  * Discrete charts
781
781
  */
782
782
  $.fn.sparkline.discrete = function(values, options, width, height) {
783
783
  values = $.map(values, Number);
784
- width = options.get('width')=='auto' ? values.length*2 : width;
784
+ width = options.get('width') == 'auto' ? values.length * 2 : width;
785
785
  var interval = Math.floor(width / values.length);
786
786
 
787
787
  var target = $(this).simpledraw(width, height, options.get('composite'));
788
788
  if (target) {
789
789
  var canvas_height = target.pixel_height,
790
- line_height = options.get('lineHeight') == 'auto' ? Math.round(canvas_height * 0.3) : options.get('lineHeight'),
791
- pheight = canvas_height - line_height,
792
- min = Math.min.apply(Math, values),
793
- max = Math.max.apply(Math, values);
794
- if (options.get('chartRangeMin')!==undefined && (options.get('chartRangeClip') || options.get('chartRangeMin')<min)) {
790
+ line_height = options.get('lineHeight') == 'auto' ? Math.round(canvas_height * 0.3) : options.get('lineHeight'),
791
+ pheight = canvas_height - line_height,
792
+ min = Math.min.apply(Math, values),
793
+ max = Math.max.apply(Math, values);
794
+ if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {
795
795
  min = options.get('chartRangeMin');
796
796
  }
797
- if (options.get('chartRangeMax')!==undefined && (options.get('chartRangeClip') || options.get('chartRangeMax')>max)) {
797
+ if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {
798
798
  max = options.get('chartRangeMax');
799
799
  }
800
- var range = max-min;
800
+ var range = max - min;
801
801
 
802
- for(var i=values.length; i--;) {
802
+ for (var i = values.length; i--;) {
803
803
  var val = values[i];
804
804
  if (val < min) {
805
- val=min;
805
+ val = min;
806
806
  }
807
807
  if (val > max) {
808
- val=max;
808
+ val = max;
809
809
  }
810
- var x = (i*interval),
811
- ytop = Math.round(pheight-pheight*((val-min)/range));
812
- target.drawLine(x, ytop, x, ytop+line_height, (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor'));
810
+ var x = (i * interval),
811
+ ytop = Math.round(pheight - pheight * ((val - min) / range));
812
+ target.drawLine(x, ytop, x, ytop + line_height, (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor'));
813
813
  }
814
- } else {
814
+ } else {
815
815
  // Remove the tag contents if sparklines aren't supported
816
816
  this.innerHTML = '';
817
817
  }
818
-
818
+
819
819
  };
820
820
 
821
821
 
@@ -825,42 +825,42 @@
825
825
  $.fn.sparkline.bullet = function(values, options, width, height) {
826
826
  values = $.map(values, Number);
827
827
  // target, performance, range1, range2, range3
828
-
829
- width = options.get('width')=='auto' ? '4.0em' : width;
828
+
829
+ width = options.get('width') == 'auto' ? '4.0em' : width;
830
830
 
831
831
  var target = $(this).simpledraw(width, height, options.get('composite'));
832
- if (target && values.length>1) {
833
- var canvas_width = target.pixel_width-Math.ceil(options.get('targetWidth')/2),
834
- canvas_height = target.pixel_height,
835
- min = Math.min.apply(Math, values),
836
- max = Math.max.apply(Math, values);
832
+ if (target && values.length > 1) {
833
+ var canvas_width = target.pixel_width - Math.ceil(options.get('targetWidth') / 2),
834
+ canvas_height = target.pixel_height,
835
+ min = Math.min.apply(Math, values),
836
+ max = Math.max.apply(Math, values);
837
837
 
838
838
  if (options.get('base') === undefined) {
839
839
  min = min < 0 ? min : 0;
840
840
  } else {
841
841
  min = options.get('base');
842
842
  }
843
- var range = max-min;
843
+ var range = max - min;
844
844
 
845
845
  // draw range values
846
- for(var i=2, vlen=values.length; i<vlen; i++) {
846
+ for (var i = 2, vlen = values.length; i < vlen; i++) {
847
847
  var rangeval = values[i],
848
- rangewidth = Math.round(canvas_width*((rangeval-min)/range));
849
- target.drawRect(0, 0, rangewidth-1, canvas_height-1, options.get('rangeColors')[i-2], options.get('rangeColors')[i-2]);
848
+ rangewidth = Math.round(canvas_width * ((rangeval - min) / range));
849
+ target.drawRect(0, 0, rangewidth - 1, canvas_height - 1, options.get('rangeColors')[i - 2], options.get('rangeColors')[i - 2]);
850
850
  }
851
851
 
852
852
  // draw the performance bar
853
853
  var perfval = values[1],
854
- perfwidth = Math.round(canvas_width*((perfval-min)/range));
855
- target.drawRect(0, Math.round(canvas_height*0.3), perfwidth-1, Math.round(canvas_height*0.4)-1, options.get('performanceColor'), options.get('performanceColor'));
854
+ perfwidth = Math.round(canvas_width * ((perfval - min) / range));
855
+ target.drawRect(0, Math.round(canvas_height * 0.3), perfwidth - 1, Math.round(canvas_height * 0.4) - 1, options.get('performanceColor'), options.get('performanceColor'));
856
856
 
857
857
  // draw the target line
858
858
  var targetval = values[0],
859
- x = Math.round(canvas_width*((targetval-min)/range)-(options.get('targetWidth')/2)),
860
- targettop = Math.round(canvas_height*0.10),
861
- targetheight = canvas_height-(targettop*2);
862
- target.drawRect(x, targettop, options.get('targetWidth')-1, targetheight-1, options.get('targetColor'), options.get('targetColor'));
863
- } else {
859
+ x = Math.round(canvas_width * ((targetval - min) / range) - (options.get('targetWidth') / 2)),
860
+ targettop = Math.round(canvas_height * 0.10),
861
+ targetheight = canvas_height - (targettop * 2);
862
+ target.drawRect(x, targettop, options.get('targetWidth') - 1, targetheight - 1, options.get('targetColor'), options.get('targetColor'));
863
+ } else {
864
864
  // Remove the tag contents if sparklines aren't supported
865
865
  this.innerHTML = '';
866
866
  }
@@ -872,30 +872,30 @@
872
872
  */
873
873
  $.fn.sparkline.pie = function(values, options, width, height) {
874
874
  values = $.map(values, Number);
875
- width = options.get('width')=='auto' ? height : width;
875
+ width = options.get('width') == 'auto' ? height : width;
876
876
 
877
877
  var target = $(this).simpledraw(width, height, options.get('composite'));
878
- if (target && values.length>1) {
878
+ if (target && values.length > 1) {
879
879
  var canvas_width = target.pixel_width,
880
- canvas_height = target.pixel_height,
881
- radius = Math.floor(Math.min(canvas_width, canvas_height)/2),
882
- total = 0,
883
- next = 0,
884
- circle = 2*Math.PI;
880
+ canvas_height = target.pixel_height,
881
+ radius = Math.floor(Math.min(canvas_width, canvas_height) / 2),
882
+ total = 0,
883
+ next = 0,
884
+ circle = 2 * Math.PI;
885
885
 
886
- for(var i=values.length; i--;) {
886
+ for (var i = values.length; i--;) {
887
887
  total += values[i];
888
888
  }
889
889
 
890
890
  if (options.get('offset')) {
891
- next += (2*Math.PI)*(options.get('offset')/360);
891
+ next += (2 * Math.PI) * (options.get('offset') / 360);
892
892
  }
893
893
  var vlen = values.length;
894
- for(i=0; i<vlen; i++) {
894
+ for (i = 0; i < vlen; i++) {
895
895
  var start = next;
896
896
  var end = next;
897
897
  if (total > 0) { // avoid divide by zero
898
- end = next + (circle*(values[i]/total));
898
+ end = next + (circle * (values[i] / total));
899
899
  }
900
900
  target.drawPieSlice(radius, radius, radius, start, end, undefined, options.get('sliceColors')[i % options.get('sliceColors').length]);
901
901
  next = end;
@@ -908,128 +908,141 @@
908
908
  * Box plots
909
909
  */
910
910
  var quartile = function(values, q) {
911
- if (q==2) {
912
- var vl2 = Math.floor(values.length/2);
913
- return values.length % 2 ? values[vl2] : (values[vl2]+values[vl2+1])/2;
911
+ if (q == 2) {
912
+ var vl2 = Math.floor(values.length / 2);
913
+ return values.length % 2 ? values[vl2] : (values[vl2] + values[vl2 + 1]) / 2;
914
914
  } else {
915
- var vl4 = Math.floor(values.length/4);
916
- return values.length % 2 ? (values[vl4*q]+values[vl4*q+1])/2 : values[vl4*q];
915
+ var vl4 = Math.floor(values.length / 4);
916
+ return values.length % 2 ? (values[vl4 * q] + values[vl4 * q + 1]) / 2 : values[vl4 * q];
917
917
  }
918
918
  };
919
919
 
920
920
  $.fn.sparkline.box = function(values, options, width, height) {
921
921
  values = $.map(values, Number);
922
- width = options.get('width')=='auto' ? '4.0em' : width;
922
+ width = options.get('width') == 'auto' ? '4.0em' : width;
923
923
 
924
- var minvalue = options.get('chartRangeMin')===undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),
925
- maxvalue = options.get('chartRangeMax')===undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),
926
- target = $(this).simpledraw(width, height, options.get('composite')),
927
- vlen = values.length,
928
- lwhisker, loutlier, q1, q2, q3, rwhisker, routlier;
924
+ var minvalue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),
925
+ maxvalue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),
926
+ target = $(this).simpledraw(width, height, options.get('composite')),
927
+ vlen = values.length,
928
+ lwhisker, loutlier, q1, q2, q3, rwhisker, routlier;
929
929
 
930
- if (target && values.length>1) {
930
+ if (target && values.length > 1) {
931
931
  var canvas_width = target.pixel_width,
932
- canvas_height = target.pixel_height;
932
+ canvas_height = target.pixel_height;
933
933
  if (options.get('raw')) {
934
- if (options.get('showOutliers') && values.length>5) {
935
- loutlier=values[0]; lwhisker=values[1]; q1=values[2]; q2=values[3]; q3=values[4]; rwhisker=values[5]; routlier=values[6];
934
+ if (options.get('showOutliers') && values.length > 5) {
935
+ loutlier = values[0];
936
+ lwhisker = values[1];
937
+ q1 = values[2];
938
+ q2 = values[3];
939
+ q3 = values[4];
940
+ rwhisker = values[5];
941
+ routlier = values[6];
936
942
  } else {
937
- lwhisker=values[0]; q1=values[1]; q2=values[2]; q3=values[3]; rwhisker=values[4];
943
+ lwhisker = values[0];
944
+ q1 = values[1];
945
+ q2 = values[2];
946
+ q3 = values[3];
947
+ rwhisker = values[4];
938
948
  }
939
949
  } else {
940
- values.sort(function(a, b) { return a-b; });
950
+ values.sort(function(a, b) {
951
+ return a - b;
952
+ });
941
953
  q1 = quartile(values, 1);
942
954
  q2 = quartile(values, 2);
943
955
  q3 = quartile(values, 3);
944
- var iqr = q3-q1;
956
+ var iqr = q3 - q1;
945
957
  if (options.get('showOutliers')) {
946
- lwhisker=undefined; rwhisker=undefined;
947
- for(var i=0; i<vlen; i++) {
948
- if (lwhisker===undefined && values[i] > q1-(iqr*options.get('outlierIQR'))) {
958
+ lwhisker = undefined;
959
+ rwhisker = undefined;
960
+ for (var i = 0; i < vlen; i++) {
961
+ if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {
949
962
  lwhisker = values[i];
950
963
  }
951
- if (values[i] < q3+(iqr*options.get('outlierIQR'))) {
964
+ if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {
952
965
  rwhisker = values[i];
953
966
  }
954
967
  }
955
968
  loutlier = values[0];
956
- routlier = values[vlen-1];
969
+ routlier = values[vlen - 1];
957
970
  } else {
958
971
  lwhisker = values[0];
959
- rwhisker = values[vlen-1];
972
+ rwhisker = values[vlen - 1];
960
973
  }
961
974
  }
962
975
 
963
- var unitsize = canvas_width / (maxvalue-minvalue+1),
964
- canvas_left = 0;
976
+ var unitsize = canvas_width / (maxvalue - minvalue + 1),
977
+ canvas_left = 0;
965
978
  if (options.get('showOutliers')) {
966
979
  canvas_left = Math.ceil(options.get('spotRadius'));
967
- canvas_width -= 2*Math.ceil(options.get('spotRadius'));
968
- unitsize = canvas_width / (maxvalue-minvalue+1);
980
+ canvas_width -= 2 * Math.ceil(options.get('spotRadius'));
981
+ unitsize = canvas_width / (maxvalue - minvalue + 1);
969
982
  if (loutlier < lwhisker) {
970
- target.drawCircle((loutlier-minvalue)*unitsize+canvas_left, canvas_height/2, options.get('spotRadius'), options.get('outlierLineColor'), options.get('outlierFillColor'));
983
+ target.drawCircle((loutlier - minvalue) * unitsize + canvas_left, canvas_height / 2, options.get('spotRadius'), options.get('outlierLineColor'), options.get('outlierFillColor'));
971
984
  }
972
985
  if (routlier > rwhisker) {
973
- target.drawCircle((routlier-minvalue)*unitsize+canvas_left, canvas_height/2, options.get('spotRadius'), options.get('outlierLineColor'), options.get('outlierFillColor'));
986
+ target.drawCircle((routlier - minvalue) * unitsize + canvas_left, canvas_height / 2, options.get('spotRadius'), options.get('outlierLineColor'), options.get('outlierFillColor'));
974
987
  }
975
988
  }
976
989
 
977
990
  // box
978
991
  target.drawRect(
979
- Math.round((q1-minvalue)*unitsize+canvas_left),
980
- Math.round(canvas_height*0.1),
981
- Math.round((q3-q1)*unitsize),
982
- Math.round(canvas_height*0.8),
983
- options.get('boxLineColor'),
984
- options.get('boxFillColor'));
992
+ Math.round((q1 - minvalue) * unitsize + canvas_left),
993
+ Math.round(canvas_height * 0.1),
994
+ Math.round((q3 - q1) * unitsize),
995
+ Math.round(canvas_height * 0.8),
996
+ options.get('boxLineColor'),
997
+ options.get('boxFillColor'));
985
998
  // left whisker
986
999
  target.drawLine(
987
- Math.round((lwhisker-minvalue)*unitsize+canvas_left),
988
- Math.round(canvas_height/2),
989
- Math.round((q1-minvalue)*unitsize+canvas_left),
990
- Math.round(canvas_height/2),
991
- options.get('lineColor'));
1000
+ Math.round((lwhisker - minvalue) * unitsize + canvas_left),
1001
+ Math.round(canvas_height / 2),
1002
+ Math.round((q1 - minvalue) * unitsize + canvas_left),
1003
+ Math.round(canvas_height / 2),
1004
+ options.get('lineColor'));
992
1005
  target.drawLine(
993
- Math.round((lwhisker-minvalue)*unitsize+canvas_left),
994
- Math.round(canvas_height/4),
995
- Math.round((lwhisker-minvalue)*unitsize+canvas_left),
996
- Math.round(canvas_height-canvas_height/4),
997
- options.get('whiskerColor'));
1006
+ Math.round((lwhisker - minvalue) * unitsize + canvas_left),
1007
+ Math.round(canvas_height / 4),
1008
+ Math.round((lwhisker - minvalue) * unitsize + canvas_left),
1009
+ Math.round(canvas_height - canvas_height / 4),
1010
+ options.get('whiskerColor'));
998
1011
  // right whisker
999
- target.drawLine(Math.round((rwhisker-minvalue)*unitsize+canvas_left),
1000
- Math.round(canvas_height/2),
1001
- Math.round((q3-minvalue)*unitsize+canvas_left),
1002
- Math.round(canvas_height/2),
1003
- options.get('lineColor'));
1012
+ target.drawLine(Math.round((rwhisker - minvalue) * unitsize + canvas_left),
1013
+ Math.round(canvas_height / 2),
1014
+ Math.round((q3 - minvalue) * unitsize + canvas_left),
1015
+ Math.round(canvas_height / 2),
1016
+ options.get('lineColor'));
1004
1017
  target.drawLine(
1005
- Math.round((rwhisker-minvalue)*unitsize+canvas_left),
1006
- Math.round(canvas_height/4),
1007
- Math.round((rwhisker-minvalue)*unitsize+canvas_left),
1008
- Math.round(canvas_height-canvas_height/4),
1009
- options.get('whiskerColor'));
1018
+ Math.round((rwhisker - minvalue) * unitsize + canvas_left),
1019
+ Math.round(canvas_height / 4),
1020
+ Math.round((rwhisker - minvalue) * unitsize + canvas_left),
1021
+ Math.round(canvas_height - canvas_height / 4),
1022
+ options.get('whiskerColor'));
1010
1023
  // median line
1011
1024
  target.drawLine(
1012
- Math.round((q2-minvalue)*unitsize+canvas_left),
1013
- Math.round(canvas_height*0.1),
1014
- Math.round((q2-minvalue)*unitsize+canvas_left),
1015
- Math.round(canvas_height*0.9),
1016
- options.get('medianColor'));
1025
+ Math.round((q2 - minvalue) * unitsize + canvas_left),
1026
+ Math.round(canvas_height * 0.1),
1027
+ Math.round((q2 - minvalue) * unitsize + canvas_left),
1028
+ Math.round(canvas_height * 0.9),
1029
+ options.get('medianColor'));
1017
1030
  if (options.get('target')) {
1018
1031
  var size = Math.ceil(options.get('spotRadius'));
1019
1032
  target.drawLine(
1020
- Math.round((options.get('target')-minvalue)*unitsize+canvas_left),
1021
- Math.round((canvas_height/2)-size),
1022
- Math.round((options.get('target')-minvalue)*unitsize+canvas_left),
1023
- Math.round((canvas_height/2)+size),
1024
- options.get('targetColor'));
1033
+ Math.round((options.get('target') - minvalue) * unitsize + canvas_left),
1034
+ Math.round((canvas_height / 2) - size),
1035
+ Math.round((options.get('target') - minvalue) * unitsize + canvas_left),
1036
+ Math.round((canvas_height / 2) + size),
1037
+ options.get('targetColor'));
1025
1038
  target.drawLine(
1026
- Math.round((options.get('target')-minvalue)*unitsize+canvas_left-size),
1027
- Math.round(canvas_height/2),
1028
- Math.round((options.get('target')-minvalue)*unitsize+canvas_left+size),
1029
- Math.round(canvas_height/2),
1030
- options.get('targetColor'));
1039
+ Math.round((options.get('target') - minvalue) * unitsize + canvas_left - size),
1040
+ Math.round(canvas_height / 2),
1041
+ Math.round((options.get('target') - minvalue) * unitsize + canvas_left + size),
1042
+ Math.round(canvas_height / 2),
1043
+ options.get('targetColor'));
1031
1044
  }
1032
- } else {
1045
+ } else {
1033
1046
  // Remove the tag contents if sparklines aren't supported
1034
1047
  this.innerHTML = '';
1035
1048
  }
@@ -1045,7 +1058,7 @@
1045
1058
 
1046
1059
  if ($.browser.hasCanvas === undefined) {
1047
1060
  var t = document.createElement('canvas');
1048
- $.browser.hasCanvas = t.getContext!==undefined;
1061
+ $.browser.hasCanvas = t.getContext !== undefined;
1049
1062
  }
1050
1063
 
1051
1064
  VCanvas_base = function(width, height, target) {
@@ -1057,7 +1070,7 @@
1057
1070
  this.height = height;
1058
1071
  this.target = target;
1059
1072
  if (target[0]) {
1060
- target=target[0];
1073
+ target = target[0];
1061
1074
  }
1062
1075
  target.VCanvas = this;
1063
1076
  },
@@ -1067,7 +1080,10 @@
1067
1080
  },
1068
1081
 
1069
1082
  drawLine : function(x1, y1, x2, y2, lineColor, lineWidth) {
1070
- return this.drawShape([ [x1,y1], [x2,y2] ], lineColor, lineWidth);
1083
+ return this.drawShape([
1084
+ [x1,y1],
1085
+ [x2,y2]
1086
+ ], lineColor, lineWidth);
1071
1087
  },
1072
1088
 
1073
1089
  drawCircle : function(x, y, radius, lineColor, fillColor) {
@@ -1102,7 +1118,7 @@
1102
1118
  this._super.init(width, height, target);
1103
1119
  this.canvas = document.createElement('canvas');
1104
1120
  if (target[0]) {
1105
- target=target[0];
1121
+ target = target[0];
1106
1122
  }
1107
1123
  target.VCanvas = this;
1108
1124
  $(this.canvas).css({ display:'inline-block', width:width, height:height, verticalAlign:'top' });
@@ -1119,7 +1135,7 @@
1119
1135
  if (lineColor !== undefined) {
1120
1136
  context.strokeStyle = lineColor;
1121
1137
  }
1122
- context.lineWidth = lineWidth===undefined ? 1 : lineWidth;
1138
+ context.lineWidth = lineWidth === undefined ? 1 : lineWidth;
1123
1139
  if (fillColor !== undefined) {
1124
1140
  context.fillStyle = fillColor;
1125
1141
  }
@@ -1129,9 +1145,9 @@
1129
1145
  drawShape : function(path, lineColor, fillColor, lineWidth) {
1130
1146
  var context = this._getContext(lineColor, fillColor, lineWidth);
1131
1147
  context.beginPath();
1132
- context.moveTo(path[0][0]+0.5, path[0][1]+0.5);
1133
- for(var i=1, plen=path.length; i<plen; i++) {
1134
- context.lineTo(path[i][0]+0.5, path[i][1]+0.5); // the 0.5 offset gives us crisp pixel-width lines
1148
+ context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);
1149
+ for (var i = 1, plen = path.length; i < plen; i++) {
1150
+ context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines
1135
1151
  }
1136
1152
  if (lineColor !== undefined) {
1137
1153
  context.stroke();
@@ -1144,14 +1160,14 @@
1144
1160
  drawCircle : function(x, y, radius, lineColor, fillColor) {
1145
1161
  var context = this._getContext(lineColor, fillColor);
1146
1162
  context.beginPath();
1147
- context.arc(x, y, radius, 0, 2*Math.PI, false);
1163
+ context.arc(x, y, radius, 0, 2 * Math.PI, false);
1148
1164
  if (lineColor !== undefined) {
1149
1165
  context.stroke();
1150
1166
  }
1151
1167
  if (fillColor !== undefined) {
1152
1168
  context.fill();
1153
1169
  }
1154
- },
1170
+ },
1155
1171
 
1156
1172
  drawPieSlice : function(x, y, radius, startAngle, endAngle, lineColor, fillColor) {
1157
1173
  var context = this._getContext(lineColor, fillColor);
@@ -1169,9 +1185,15 @@
1169
1185
  },
1170
1186
 
1171
1187
  drawRect : function(x, y, width, height, lineColor, fillColor) {
1172
- return this.drawShape([ [x,y], [x+width, y], [x+width, y+height], [x, y+height], [x, y] ], lineColor, fillColor);
1188
+ return this.drawShape([
1189
+ [x,y],
1190
+ [x + width, y],
1191
+ [x + width, y + height],
1192
+ [x, y + height],
1193
+ [x, y]
1194
+ ], lineColor, fillColor);
1173
1195
  }
1174
-
1196
+
1175
1197
  });
1176
1198
 
1177
1199
  VCanvas_vml = function(width, height, target) {
@@ -1184,7 +1206,7 @@
1184
1206
  init : function(width, height, target) {
1185
1207
  this._super.init(width, height, target);
1186
1208
  if (target[0]) {
1187
- target=target[0];
1209
+ target = target[0];
1188
1210
  }
1189
1211
  target.VCanvas = this;
1190
1212
  this.canvas = document.createElement('span');
@@ -1194,51 +1216,51 @@
1194
1216
  this.pixel_width = $(this.canvas).width();
1195
1217
  this.canvas.width = this.pixel_width;
1196
1218
  this.canvas.height = this.pixel_height;
1197
- var groupel = '<v:group coordorigin="0 0" coordsize="'+this.pixel_width+' '+this.pixel_height+'"' +
1198
- ' style="position:absolute;top:0;left:0;width:'+this.pixel_width+'px;height='+this.pixel_height+'px;"></v:group>';
1219
+ var groupel = '<v:group coordorigin="0 0" coordsize="' + this.pixel_width + ' ' + this.pixel_height + '"' +
1220
+ ' style="position:absolute;top:0;left:0;width:' + this.pixel_width + 'px;height=' + this.pixel_height + 'px;"></v:group>';
1199
1221
  this.canvas.insertAdjacentHTML('beforeEnd', groupel);
1200
1222
  this.group = $(this.canvas).children()[0];
1201
1223
  },
1202
1224
 
1203
1225
  drawShape : function(path, lineColor, fillColor, lineWidth) {
1204
1226
  var vpath = [];
1205
- for(var i=0, plen=path.length; i<plen; i++) {
1206
- vpath[i] = ''+(path[i][0])+','+(path[i][1]);
1227
+ for (var i = 0, plen = path.length; i < plen; i++) {
1228
+ vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);
1207
1229
  }
1208
- var initial = vpath.splice(0,1);
1230
+ var initial = vpath.splice(0, 1);
1209
1231
  lineWidth = lineWidth === undefined ? 1 : lineWidth;
1210
- var stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="'+lineWidth+'" strokeColor="'+lineColor+'" ';
1211
- var fill = fillColor === undefined ? ' filled="false"' : ' fillColor="'+fillColor+'" filled="true" ';
1212
- var closed = vpath[0] == vpath[vpath.length-1] ? 'x ' : '';
1213
- var vel = '<v:shape coordorigin="0 0" coordsize="'+this.pixel_width+' '+this.pixel_height+'" ' +
1214
- stroke +
1215
- fill +
1216
- ' style="position:absolute;left:0px;top:0px;height:'+this.pixel_height+'px;width:'+this.pixel_width+'px;padding:0px;margin:0px;" ' +
1217
- ' path="m '+initial+' l '+vpath.join(', ')+' '+closed+'e">' +
1218
- ' </v:shape>';
1219
- this.group.insertAdjacentHTML('beforeEnd', vel);
1232
+ var stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + '" strokeColor="' + lineColor + '" ';
1233
+ var fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" ';
1234
+ var closed = vpath[0] == vpath[vpath.length - 1] ? 'x ' : '';
1235
+ var vel = '<v:shape coordorigin="0 0" coordsize="' + this.pixel_width + ' ' + this.pixel_height + '" ' +
1236
+ stroke +
1237
+ fill +
1238
+ ' style="position:absolute;left:0px;top:0px;height:' + this.pixel_height + 'px;width:' + this.pixel_width + 'px;padding:0px;margin:0px;" ' +
1239
+ ' path="m ' + initial + ' l ' + vpath.join(', ') + ' ' + closed + 'e">' +
1240
+ ' </v:shape>';
1241
+ this.group.insertAdjacentHTML('beforeEnd', vel);
1220
1242
  },
1221
1243
 
1222
1244
  drawCircle : function(x, y, radius, lineColor, fillColor) {
1223
- x -= radius+1;
1224
- y -= radius+1;
1225
- var stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="1" strokeColor="'+lineColor+'" ';
1226
- var fill = fillColor === undefined ? ' filled="false"' : ' fillColor="'+fillColor+'" filled="true" ';
1245
+ x -= radius + 1;
1246
+ y -= radius + 1;
1247
+ var stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="1" strokeColor="' + lineColor + '" ';
1248
+ var fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" ';
1227
1249
  var vel = '<v:oval ' +
1228
- stroke +
1229
- fill +
1230
- ' style="position:absolute;top:'+y+'px; left:'+x+'px; width:'+(radius*2)+'px; height:'+(radius*2)+'px"></v:oval>';
1250
+ stroke +
1251
+ fill +
1252
+ ' style="position:absolute;top:' + y + 'px; left:' + x + 'px; width:' + (radius * 2) + 'px; height:' + (radius * 2) + 'px"></v:oval>';
1231
1253
  this.group.insertAdjacentHTML('beforeEnd', vel);
1232
-
1254
+
1233
1255
  },
1234
-
1256
+
1235
1257
  drawPieSlice : function(x, y, radius, startAngle, endAngle, lineColor, fillColor) {
1236
1258
  if (startAngle == endAngle) {
1237
1259
  return; // VML seems to have problem when start angle equals end angle.
1238
1260
  }
1239
- if ((endAngle - startAngle) == (2*Math.PI)) {
1261
+ if ((endAngle - startAngle) == (2 * Math.PI)) {
1240
1262
  startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0
1241
- endAngle = (2*Math.PI);
1263
+ endAngle = (2 * Math.PI);
1242
1264
  }
1243
1265
 
1244
1266
  var startx = x + Math.round(Math.cos(startAngle) * radius);
@@ -1247,24 +1269,30 @@
1247
1269
  var endy = y + Math.round(Math.sin(endAngle) * radius);
1248
1270
 
1249
1271
  // Prevent very small slices from being mistaken as a whole pie
1250
- if (startx==endx && starty==endy && (endAngle-startAngle) < Math.PI) {
1272
+ if (startx == endx && starty == endy && (endAngle - startAngle) < Math.PI) {
1251
1273
  return;
1252
1274
  }
1253
1275
 
1254
- var vpath = [ x-radius, y-radius, x+radius, y+radius, startx, starty, endx, endy ];
1255
- var stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="1" strokeColor="'+lineColor+'" ';
1256
- var fill = fillColor === undefined ? ' filled="false"' : ' fillColor="'+fillColor+'" filled="true" ';
1257
- var vel = '<v:shape coordorigin="0 0" coordsize="'+this.pixel_width+' '+this.pixel_height+'" ' +
1258
- stroke +
1259
- fill +
1260
- ' style="position:absolute;left:0px;top:0px;height:'+this.pixel_height+'px;width:'+this.pixel_width+'px;padding:0px;margin:0px;" ' +
1261
- ' path="m '+x+','+y+' wa '+vpath.join(', ')+' x e">' +
1262
- ' </v:shape>';
1263
- this.group.insertAdjacentHTML('beforeEnd', vel);
1276
+ var vpath = [ x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy ];
1277
+ var stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="1" strokeColor="' + lineColor + '" ';
1278
+ var fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" ';
1279
+ var vel = '<v:shape coordorigin="0 0" coordsize="' + this.pixel_width + ' ' + this.pixel_height + '" ' +
1280
+ stroke +
1281
+ fill +
1282
+ ' style="position:absolute;left:0px;top:0px;height:' + this.pixel_height + 'px;width:' + this.pixel_width + 'px;padding:0px;margin:0px;" ' +
1283
+ ' path="m ' + x + ',' + y + ' wa ' + vpath.join(', ') + ' x e">' +
1284
+ ' </v:shape>';
1285
+ this.group.insertAdjacentHTML('beforeEnd', vel);
1264
1286
  },
1265
1287
 
1266
1288
  drawRect : function(x, y, width, height, lineColor, fillColor) {
1267
- return this.drawShape( [ [x, y], [x, y+height], [x+width, y+height], [x+width, y], [x, y] ], lineColor, fillColor);
1289
+ return this.drawShape([
1290
+ [x, y],
1291
+ [x, y + height],
1292
+ [x + width, y + height],
1293
+ [x + width, y],
1294
+ [x, y]
1295
+ ], lineColor, fillColor);
1268
1296
  }
1269
1297
  });
1270
1298