heart 0.0.1.pre → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. data/README.rdoc +38 -2
  2. data/app/assets/images/heart/footer_background.jpg +0 -0
  3. data/app/assets/images/heart/header.png +0 -0
  4. data/app/assets/javascripts/heart/application.js +11 -2
  5. data/app/assets/javascripts/heart/colortip-1.0-jquery.js +143 -0
  6. data/app/assets/javascripts/heart/flot/jquery.flot.legendcanvas.js +116 -0
  7. data/app/assets/javascripts/heart/heart.js +15 -20
  8. data/app/assets/javascripts/heart/jquery.betterTooltip.js +1 -1
  9. data/app/assets/stylesheets/heart/colortip-1.0-jquery.css +99 -0
  10. data/app/assets/stylesheets/heart/heart.css.erb +77 -77
  11. data/app/helpers/heart/dashboards_helper.rb +1 -1
  12. data/app/models/heart/isometric.rb +3 -1
  13. data/app/models/heart/metric.rb +16 -12
  14. data/app/views/heart/dashboards/_dashboard_form.html.haml +1 -3
  15. data/app/views/heart/dashboards/_graph_options.html.haml +1 -1
  16. data/app/views/heart/dashboards/_heart_form.html.haml +75 -81
  17. data/app/views/heart/dashboards/default.html.haml +21 -30
  18. data/app/views/heart/dashboards/edit.html.haml +1 -12
  19. data/app/views/layouts/heart_engine.html.haml +9 -9
  20. data/config/locales/en.yml +2 -1
  21. data/config/locales/ja.yml +1 -0
  22. data/lib/heart/engine.rb +1 -1
  23. data/lib/heart/version.rb +1 -1
  24. data/lib/tasks/heart_tasks.rake +25 -22
  25. data/test/dummy/features/step_definitions/language_switching_steps.rb +2 -2
  26. data/test/dummy/features/support/world_extensions.rb +2 -1
  27. data/test/dummy/log/development.log +1893 -503
  28. data/test/dummy/log/test.log +5309 -18253
  29. data/test/dummy/tmp/cache/assets/BCE/DD0/sprockets%2F48636d92910966777339405463bc1b61 +0 -0
  30. data/test/dummy/tmp/cache/assets/C0B/580/sprockets%2F2729492b7a538798d165774705f6326e +0 -0
  31. data/test/dummy/tmp/cache/assets/C35/CC0/sprockets%2F350984604189d6547b46c8878446d0cc +0 -0
  32. data/test/dummy/tmp/cache/assets/C4B/4A0/sprockets%2F407965193330e74081b567aa41d3f61e +0 -0
  33. data/test/dummy/tmp/cache/assets/C4F/5A0/sprockets%2Fe2d2019fb44d0269069a79676b251622 +0 -0
  34. data/test/dummy/tmp/cache/assets/{D35/560/sprockets%2Fa79fc4b2a2293acaa002547e93d9704e → C51/F70/sprockets%2Fca81b44fd24a72950483f01269236587} +0 -0
  35. data/test/dummy/tmp/cache/assets/{D43/FC0/sprockets%2F7f972ba9de00917d116bfc1c7126e8d6 → C55/AD0/sprockets%2F101381269de6690957ab38f67032a3d9} +0 -0
  36. data/test/dummy/tmp/cache/assets/C6A/310/sprockets%2F4e447400a105c1622d589d5a4e500a46 +0 -0
  37. data/test/dummy/tmp/cache/assets/C7D/500/sprockets%2F11a24403746f285399056db7df2d8e01 +0 -0
  38. data/test/dummy/tmp/cache/assets/{D76/410/sprockets%2F3ba75e6fe03df5d227c7e7a54be98720 → C7F/FF0/sprockets%2F3cfe216156725373f8c1110fc87464e3} +0 -0
  39. data/test/dummy/tmp/cache/assets/{C76/680/sprockets%2Fb72c325230e403c89a229efd94013438 → C86/570/sprockets%2F82b0b0a8996382923bd9b0e498348b04} +0 -0
  40. data/test/dummy/tmp/cache/assets/CA1/B60/sprockets%2F23e0f332153c81c49d66e41ef3b52052 +0 -0
  41. data/test/dummy/tmp/cache/assets/CA7/CB0/sprockets%2F332cb62f37af2e9aa810f14992421626 +0 -0
  42. data/test/dummy/tmp/cache/assets/{D76/750/sprockets%2F4422ff4ebec16419ef79a9a9d3f530f0 → CAA/500/sprockets%2F32bf1142771622db5fdf7490702763bf} +0 -0
  43. data/test/dummy/tmp/cache/assets/CAD/090/sprockets%2F4c7103e5637564a510e6a193cbc58e84 +0 -0
  44. data/test/dummy/tmp/cache/assets/CAE/7E0/sprockets%2Fc2b55f3659e4fa2129c945455a2f9100 +0 -0
  45. data/test/dummy/tmp/cache/assets/CB0/6F0/sprockets%2F9c1b3793f404f80f1b967b21c844b334 +0 -0
  46. data/test/dummy/tmp/cache/assets/{CD1/320/sprockets%2Fb09e869800e3e0a0d7805d4c1c7113d1 → CB0/FA0/sprockets%2Fe1b96526c02cb3716461d6dfb9764343} +0 -0
  47. data/test/dummy/tmp/cache/assets/{D64/540/sprockets%2F8b24e4230a33d44ed39d3d4ca015f7ff → CB3/510/sprockets%2F8233c7ad0c16f69756e047db537a2870} +0 -0
  48. data/test/dummy/tmp/cache/assets/CB4/470/sprockets%2F296ccb5ba0196228975060b8ec466e63 +0 -0
  49. data/test/dummy/tmp/cache/assets/{D0E/560/sprockets%2Ffb853b302b8b8338911fd212f3e9d65a → CBA/F70/sprockets%2F6e7ce337f4dd05075817a935882044bf} +0 -0
  50. data/test/dummy/tmp/cache/assets/CC3/F60/sprockets%2F3cac5656e845c899c912c7366c0a4947 +0 -0
  51. data/test/dummy/tmp/cache/assets/CC4/200/sprockets%2F885f9d7bf35a3293673f0b6781068d5b +0 -0
  52. data/test/dummy/tmp/cache/assets/{E8A/510/sprockets%2F4dcf2d4f6fbfe6af61adafbed37240a8 → CCC/A30/sprockets%2F536411172c2601ea70cc0fa3b3af8696} +0 -0
  53. data/test/dummy/tmp/cache/assets/{D5D/820/sprockets%2F60c2f35af5ce8dc4ab2a724043fd0373 → CCF/700/sprockets%2F5b07dba0784de7f43a131171f04a4934} +0 -0
  54. data/test/dummy/tmp/cache/assets/CCF/D80/sprockets%2Fc41538d27342fc5d03080ca6a96cd601 +0 -0
  55. data/test/dummy/tmp/cache/assets/{CAF/B10/sprockets%2F68ee8201881a1c1d3d987490e5015ed0 → CD0/1E0/sprockets%2Fcf961a0220aa37d219f91680c45af531} +0 -0
  56. data/test/dummy/tmp/cache/assets/CD5/E00/sprockets%2F44cf6f371dcb562272a342e552731fb2 +0 -0
  57. data/test/dummy/tmp/cache/assets/CE1/8B0/sprockets%2Fbd0533901e5d135c72deac286883f908 +0 -0
  58. data/test/dummy/tmp/cache/assets/CE3/210/sprockets%2F0182aef8a76ed0561bdab54860781885 +0 -0
  59. data/test/dummy/tmp/cache/assets/CE7/1B0/sprockets%2F36990700f854ca9a54ee6c29352f8ab2 +0 -0
  60. data/test/dummy/tmp/cache/assets/CE9/2D0/sprockets%2F6315e5fcb548a606456c9af796ae2065 +0 -0
  61. data/test/dummy/tmp/cache/assets/{CE8/CE0/sprockets%2F5c698abb053124d9a5421666bf75c8f8 → CEA/B00/sprockets%2F71b1d228b7d9267c7478cc8d3b07149e} +0 -0
  62. data/test/dummy/tmp/cache/assets/CEB/7B0/sprockets%2Fa3d277688563f6ddd7814a0c0b97744b +0 -0
  63. data/test/dummy/tmp/cache/assets/CEE/5D0/sprockets%2Ff95f724b4f43ce6f07db69863411b168 +0 -0
  64. data/test/dummy/tmp/cache/assets/CF6/710/sprockets%2Fc86e51f6b961e955f5d1c88e048434e4 +0 -0
  65. data/test/dummy/tmp/cache/assets/{D04/920/sprockets%2F5830c0ccdb2a54d7848283d21f44e2a4 → CF8/590/sprockets%2Fb5025f115b491fa2b3ee06aa35a27177} +0 -0
  66. data/test/dummy/tmp/cache/assets/{B7A/D60/sprockets%2F12305388866122331aea456101382236 → CFB/970/sprockets%2F0cea772969ea3e643582ce98b99e7074} +0 -0
  67. data/test/dummy/tmp/cache/assets/CFE/A10/sprockets%2Fbd957cd95290e6985bf6e346269e082f +0 -0
  68. data/test/dummy/tmp/cache/assets/{D9A/FB0/sprockets%2F4bd1e3c2f82a72a0d6f8935ed92aeb60 → D00/6F0/sprockets%2F7629d6603e232ee5d010b06f1a3a5ff4} +0 -0
  69. data/test/dummy/tmp/cache/assets/D01/A30/sprockets%2F3f935c77e897728bcd5a7e4493bc8655 +0 -0
  70. data/test/dummy/tmp/cache/assets/D06/0F0/sprockets%2Fe2a4046bd077e58d16e913167d6d2a0b +0 -0
  71. data/test/dummy/tmp/cache/assets/D08/8F0/sprockets%2F0708c5f06e0da4a65f223c70ffc63574 +0 -0
  72. data/test/dummy/tmp/cache/assets/D08/940/sprockets%2F2e84b07f4a26d219cc2f17144a8555bd +0 -0
  73. data/test/dummy/tmp/cache/assets/D08/E80/sprockets%2F053235ae2c72fc9f70c177bba7632f35 +0 -0
  74. data/test/dummy/tmp/cache/assets/D0B/680/sprockets%2Fb77533f2e3a0f6af1759df14080e471b +0 -0
  75. data/test/dummy/tmp/cache/assets/{E1E/A70/sprockets%2F4a6f52c1cf40efaf040aabe5eca74c86 → D0D/670/sprockets%2F8f857b2bc4636a0565113df39a7a2ef1} +0 -0
  76. data/test/dummy/tmp/cache/assets/D0F/780/sprockets%2F9da1f1e9af060d5dc891396753502ea2 +0 -0
  77. data/test/dummy/tmp/cache/assets/D10/770/sprockets%2F7aee91c9281fadf993a30a260341b398 +0 -0
  78. data/test/dummy/tmp/cache/assets/D11/290/sprockets%2F9964cd8ef96658e16e79e9050875f6cf +0 -0
  79. data/test/dummy/tmp/cache/assets/D11/2C0/sprockets%2F8150f72b041fcd399c44af7b8e2b4249 +0 -0
  80. data/test/dummy/tmp/cache/assets/{D68/7F0/sprockets%2F35b0c94f2372250feee3c76a8bad07d4 → D13/4E0/sprockets%2F38073c62f7472ed28d0ca37683ca6a6f} +0 -0
  81. data/test/dummy/tmp/cache/assets/{C3E/2A0/sprockets%2Fe37f35746618667d995a3587734e1f14 → D13/AE0/sprockets%2F61ecabd482e95072b8f0640387ef2e90} +0 -0
  82. data/test/dummy/tmp/cache/assets/D14/410/sprockets%2F751a08e4877e012b418fe427e1fafe75 +0 -0
  83. data/test/dummy/tmp/cache/assets/{DCD/ED0/sprockets%2Fe3e1abc488563aa8c2d44c9b8b5b2f6c → D15/810/sprockets%2F2e87bbd9425a26e1274b468270cfeb95} +0 -0
  84. data/test/dummy/tmp/cache/assets/{CCB/CA0/sprockets%2F9b705933be3255cfd4938a9c99146e69 → D15/950/sprockets%2Fff3972fc07592e802a19229b8e8d21ab} +0 -0
  85. data/test/dummy/tmp/cache/assets/{D27/7B0/sprockets%2F6401357b67027ace91aae0cbcf5e4021 → D16/9B0/sprockets%2F85fbd821e6a4a4d9488bb1397155f01f} +0 -0
  86. data/test/dummy/tmp/cache/assets/{E86/5D0/sprockets%2Fec1c00efc9e5ebfa6c0576eb1ddfd60d → D1B/AF0/sprockets%2F3f404853ea73821a79c9dfbce688092a} +0 -0
  87. data/test/dummy/tmp/cache/assets/D1C/3B0/sprockets%2Ff53a86a82df23f7be17d593e57654e03 +0 -0
  88. data/test/dummy/tmp/cache/assets/{DB1/C10/sprockets%2Fddabb257ba3637433fc7729f79fe6c9e → D1E/1A0/sprockets%2Fac8d33672aa0855594e4d0e54f59f9b7} +0 -0
  89. data/test/dummy/tmp/cache/assets/D26/DD0/sprockets%2F925cffe93f8816954191ce2e5b0d83d7 +0 -0
  90. data/test/dummy/tmp/cache/assets/D27/6A0/sprockets%2F752045002a7f22a46aa8ddba37148dad +0 -0
  91. data/test/dummy/tmp/cache/assets/D27/AB0/sprockets%2F874b6796434729445fd4ce2eed96bd3b +0 -0
  92. data/test/dummy/tmp/cache/assets/D28/8C0/sprockets%2Fc0128113b5a88968e79f949e3edb8e5d +0 -0
  93. data/test/dummy/tmp/cache/assets/D29/C80/sprockets%2Fd81305ae19b244231723cab26edc0eb9 +0 -0
  94. data/test/dummy/tmp/cache/assets/D2B/A10/sprockets%2F8b792d55ed2e5eecf393964b6755248d +0 -0
  95. data/test/dummy/tmp/cache/assets/D2F/E70/sprockets%2Fc9b7037ff79c3e5c818484cffc692863 +0 -0
  96. data/test/dummy/tmp/cache/assets/{CE4/050/sprockets%2F21d0ae6e0a782753af4ed2492e959671 → D33/950/sprockets%2Fb2122c97ab77d529ba214c5a6f91a71d} +0 -0
  97. data/test/dummy/tmp/cache/assets/D34/DE0/sprockets%2Fae1d2d6209196dcb8db54e2b9354d103 +0 -0
  98. data/test/dummy/tmp/cache/assets/D3E/AA0/sprockets%2F64e73c86309aca55f129ae7703a3dde3 +0 -0
  99. data/test/dummy/tmp/cache/assets/{CE7/F80/sprockets%2F7715072387d4d8e6193c2ffda13a375f → D3F/610/sprockets%2F26d831c7eb5575abbb1e0b56468c65d6} +0 -0
  100. data/test/dummy/tmp/cache/assets/{CB6/080/sprockets%2F735f5d59ce0703357780bf4a574490ca → D41/390/sprockets%2Ff4fe5d5f31ea48685bbbc01b65048178} +0 -0
  101. data/test/dummy/tmp/cache/assets/{DAA/300/sprockets%2Ff4ebcefbb66ce3f58d70987c6123523e → D41/FB0/sprockets%2Fef199a54330c02fc542e4e5e5abf9393} +0 -0
  102. data/test/dummy/tmp/cache/assets/D43/4F0/sprockets%2Fe3e13cde6924e02beb55e72c15691f95 +0 -0
  103. data/test/dummy/tmp/cache/assets/{D69/F50/sprockets%2F0fe620b4cef107c5b770d70c5bbe6839 → D44/0B0/sprockets%2F2ab486fbb0b690fb2559866b9ae9b414} +0 -0
  104. data/test/dummy/tmp/cache/assets/{D0B/350/sprockets%2F58255cc783163fa49e6caa32e01af293 → D45/5A0/sprockets%2Fce53b91d9a995b627f92314ace4e07a4} +0 -0
  105. data/test/dummy/tmp/cache/assets/D47/000/sprockets%2F8b13ceb944516a4fb90ef78296371ead +0 -0
  106. data/test/dummy/tmp/cache/assets/{D3B/EF0/sprockets%2F996d2466d00c1bacc4351f87e2d5e62a → D47/B20/sprockets%2F62401776425f2feef6d1c95f349dde1a} +0 -0
  107. data/test/dummy/tmp/cache/assets/D48/6A0/sprockets%2Fcb96d8b457ac10b88e8a0587dd93064c +0 -0
  108. data/test/dummy/tmp/cache/assets/{D6A/630/sprockets%2F0e159a9bce743e35c180d0eceac52487 → D4C/C00/sprockets%2F9b8148cd4f625240890ad4a7def890ee} +0 -0
  109. data/test/dummy/tmp/cache/assets/{CC2/A70/sprockets%2F99163775fcea80cf5530f8808188e40b → D4F/E40/sprockets%2Fba1e08f8d45ee95c46a55816583ff8d0} +0 -0
  110. data/test/dummy/tmp/cache/assets/D51/6D0/sprockets%2Faf81dfa11c117d6e00407932bad3e12b +0 -0
  111. data/test/dummy/tmp/cache/assets/D53/550/sprockets%2F5b534c96f1189bed6b67c50cb87198ef +0 -0
  112. data/test/dummy/tmp/cache/assets/D55/880/sprockets%2F68af4f0856c939b4fae4bc73c034899f +0 -0
  113. data/test/dummy/tmp/cache/assets/{D4A/E50/sprockets%2Fa876a03aed98118f76cac6e916ff5423 → D56/260/sprockets%2F3decc69448e1c8287f77d2f8bf23c159} +0 -0
  114. data/test/dummy/tmp/cache/assets/D56/450/sprockets%2F453bf21bea53b4da4037b113e72e7f1b +0 -0
  115. data/test/dummy/tmp/cache/assets/{CFD/E70/sprockets%2F6cb7d8f69c8c4e1f246868d46f017639 → D58/900/sprockets%2F75326f97ffcfc23b683da05e87e885f1} +0 -0
  116. data/test/dummy/tmp/cache/assets/D59/220/sprockets%2F6299a569d63ddb2d8e11b79c75ae86d9 +0 -0
  117. data/test/dummy/tmp/cache/assets/{CF2/C20/sprockets%2F7b5779909f4f5440c9d0874af23d63db → D59/8F0/sprockets%2F4a282064eb1fb4f33bed1153ba8403fe} +0 -0
  118. data/test/dummy/tmp/cache/assets/{D3B/A10/sprockets%2F2cecd599ad2374ea47112715ae70ea49 → D5B/4B0/sprockets%2Fcf44a61310de418ba2bd906cec78a115} +0 -0
  119. data/test/dummy/tmp/cache/assets/D66/440/sprockets%2F84c0f9fd84a2fcca42b128b35443d6b2 +0 -0
  120. data/test/dummy/tmp/cache/assets/D68/380/sprockets%2Fe53dad0286f7a33b2a013c0dcfe48969 +0 -0
  121. data/test/dummy/tmp/cache/assets/D69/040/sprockets%2F4906f24a65ac74122acc49edfbbe6309 +0 -0
  122. data/test/dummy/tmp/cache/assets/{D6F/120/sprockets%2F09730b5eed71a1971eb1ed85f0cd8c28 → D69/BD0/sprockets%2F1c19cba06c35ea9c97e9263ce15614ac} +0 -0
  123. data/test/dummy/tmp/cache/assets/{D52/590/sprockets%2Fae4195e4fc883e26b828d9c7b525ff42 → D6C/0B0/sprockets%2Faeffe7c7400d645cc36c2b281865cd06} +0 -0
  124. data/test/dummy/tmp/cache/assets/D70/750/sprockets%2Fa282691d086c330c1f25192cfdecffe9 +0 -0
  125. data/test/dummy/tmp/cache/assets/{D59/B40/sprockets%2F29c73ae2b2a2dcf81b5210703eeed252 → D70/900/sprockets%2F693c1afc47f8eff04593ce071a35b5e0} +0 -0
  126. data/test/dummy/tmp/cache/assets/D74/020/sprockets%2Fd5375691d312cbba7247484d7facc8ee +0 -0
  127. data/test/dummy/tmp/cache/assets/{BE3/050/sprockets%2F0421426926cdd29806245aa078142462 → D76/DF0/sprockets%2F29dc6daa6794cba9f711e1f8173cd617} +0 -0
  128. data/test/dummy/tmp/cache/assets/{E91/E50/sprockets%2F6caf6f973c4dfd0a94ca97da0cbfb8da → D77/4D0/sprockets%2F38fd33569b43815041c3fccd9e3edd7e} +0 -0
  129. data/test/dummy/tmp/cache/assets/D78/0D0/sprockets%2F14b08dfacfd75738e1937c3114e6fe7e +0 -0
  130. data/test/dummy/tmp/cache/assets/D78/B70/sprockets%2Fc1c4c44187faa696de4086fd16e8ed70 +0 -0
  131. data/test/dummy/tmp/cache/assets/D79/320/sprockets%2Fb8832da960f9ecb2b76a54c6aa678e63 +0 -0
  132. data/test/dummy/tmp/cache/assets/D7C/260/sprockets%2F28a24c76a9ebac8191dcb749fee43784 +0 -0
  133. data/test/dummy/tmp/cache/assets/D80/7E0/sprockets%2Fbb39eb4824db37338ef39ced7a3299c8 +0 -0
  134. data/test/dummy/tmp/cache/assets/{CF1/7B0/sprockets%2Fa447299b5fa19244e6a281825f9e77dc → D87/150/sprockets%2F114ff47301ab76cf0b1bebb98133cce0} +0 -0
  135. data/test/dummy/tmp/cache/assets/D8A/A20/sprockets%2F1af00e2355e3fc13ac3a48bf02b79f5b +0 -0
  136. data/test/dummy/tmp/cache/assets/D8E/530/sprockets%2Fc8c5d774d94c77ae11b1cd4b31bb112c +0 -0
  137. data/test/dummy/tmp/cache/assets/{D3B/CF0/sprockets%2F4cac58b5d3abf581ca5857583017d3e1 → D91/A10/sprockets%2F7bcb44fd5cf42ec2205ef810f04b086b} +0 -0
  138. data/test/dummy/tmp/cache/assets/D91/E60/sprockets%2Fb979a310a40e3708db932ceabf21ae5f +0 -0
  139. data/test/dummy/tmp/cache/assets/{D5F/6D0/sprockets%2Ff1f0426663c9048eceaa032dc3f05b5c → D9A/370/sprockets%2F34b1b4bad60fbcf7758cea821c546e46} +0 -0
  140. data/test/dummy/tmp/cache/assets/D9A/900/sprockets%2F792e90cac5d63b13f64eb1e71d771bda +0 -0
  141. data/test/dummy/tmp/cache/assets/D9A/F30/sprockets%2F800a198f0e91d6bc6d8157caadc8c32d +0 -0
  142. data/test/dummy/tmp/cache/assets/{DC2/1D0/sprockets%2F548c5a2d07c2b3db2eea9a24e2e25c9c → DA1/970/sprockets%2F8c138bbe3ec6a32fa735f9decf653540} +0 -0
  143. data/test/dummy/tmp/cache/assets/{E54/7B0/sprockets%2F7eba769afbacdcd2b019e3ae52fdb093 → DA1/CC0/sprockets%2F2880348f871bcb056c1eab649ccfda6f} +0 -0
  144. data/test/dummy/tmp/cache/assets/DA4/560/sprockets%2Ff2ba7cbd1fb329d832f584fe58f53a16 +0 -0
  145. data/test/dummy/tmp/cache/assets/DA5/B80/sprockets%2Fc3b75f7f0fb7b7837c6d72f3a1bf1a85 +0 -0
  146. data/test/dummy/tmp/cache/assets/DA8/280/sprockets%2F37ea4de30bdebc58f54036fed95939c2 +0 -0
  147. data/test/dummy/tmp/cache/assets/DAC/EF0/sprockets%2Fac252f3c99391bf6cc7c85f4dbf9d127 +0 -0
  148. data/test/dummy/tmp/cache/assets/DB1/050/sprockets%2F964f429dc9ce34d5f0e671c59fb54acf +0 -0
  149. data/test/dummy/tmp/cache/assets/DB5/AF0/sprockets%2F7bf8e7055f63cb18ed48dbf695f840ec +0 -0
  150. data/test/dummy/tmp/cache/assets/DB7/410/sprockets%2Fbea5dac105d0560105ce452b23c9effd +0 -0
  151. data/test/dummy/tmp/cache/assets/DBF/BC0/sprockets%2F3f1e8d7e5a682f9d1c673f99937ecdfb +0 -0
  152. data/test/dummy/tmp/cache/assets/{D99/890/sprockets%2F783e81abd4c0cf96b0642acde9b7202f → DC1/E50/sprockets%2F9bcdf007c240d4aa623ffe7faa563e32} +0 -0
  153. data/test/dummy/tmp/cache/assets/DC3/540/sprockets%2Fd08c0e7ecbbd83ca24753f2cc3eb8224 +0 -0
  154. data/test/dummy/tmp/cache/assets/{CE4/D80/sprockets%2Fa98448b0f9e10bf393a552d26664d7a3 → DC5/670/sprockets%2Fd0fc5a1aa98aa30859151aaf8d05fef6} +0 -0
  155. data/test/dummy/tmp/cache/assets/{DB9/800/sprockets%2Fbd0a2a66976fd5ef12be3ac3e22d100e → DC9/330/sprockets%2Ff6dd4b9134b8cac7aff84c1e25109b4a} +0 -0
  156. data/test/dummy/tmp/cache/assets/DCF/640/sprockets%2Fa59a39f4ccb3d744531fb3a6fd0c8cf6 +0 -0
  157. data/test/dummy/tmp/cache/assets/DD3/930/sprockets%2Ff838b42f1cfa0cb862559b6ffdd5b0b8 +0 -0
  158. data/test/dummy/tmp/cache/assets/{D05/FC0/sprockets%2Fd06631201fe7c8760eea1e3ffd351191 → DD7/C20/sprockets%2Fac3f3d6ea4cdfe3fe6733302897c4d7e} +0 -0
  159. data/test/dummy/tmp/cache/assets/DE4/8C0/sprockets%2F399c3d12e3d6bb66fe75eb8f7cfdc755 +0 -0
  160. data/test/dummy/tmp/cache/assets/DEA/9C0/sprockets%2F8d551a6ecea60c03bb550da1447bafdf +0 -0
  161. data/test/dummy/tmp/cache/assets/DFA/B20/sprockets%2Fafbd5efcaf937c698efc818f779955f5 +0 -0
  162. data/test/dummy/tmp/cache/assets/E02/230/sprockets%2F6c0f87d4900fe4bf1ab76a5dfc67d9aa +0 -0
  163. data/test/dummy/tmp/cache/assets/E0F/AE0/sprockets%2Fa7e48efc0e484cefe2df50661fcd9b95 +0 -0
  164. data/test/dummy/tmp/cache/assets/E20/D40/sprockets%2Faeec921e771db04ceeaf18a1c66b0b9a +0 -0
  165. data/test/dummy/tmp/cache/assets/{D02/7C0/sprockets%2Fa4900a35834e0ab16a2ae17b6887a66d → E21/130/sprockets%2Fa7e108eed7bc4c677dabb6082d2cbc1b} +0 -0
  166. data/test/dummy/tmp/cache/assets/E27/310/sprockets%2Ff4baccbc4ecd78511bea80a165d27ff7 +0 -0
  167. data/test/dummy/tmp/cache/assets/{C81/4B0/sprockets%2F115a9d464b8720982880ad4926aaf505 → E2F/920/sprockets%2Fcc6b79d313deb39adcfd1a16b4f7f39c} +0 -0
  168. data/test/dummy/tmp/cache/assets/E30/D50/sprockets%2F8cd7ecebbc2cbb4892b0cff3354677ae +0 -0
  169. data/test/dummy/tmp/cache/assets/E31/8D0/sprockets%2F2cb08ed964d2fb3fae552891eefabcc6 +0 -0
  170. data/test/dummy/tmp/cache/assets/{CF2/070/sprockets%2Fca7b20d93194b5827d9d57837578b6db → E31/C20/sprockets%2Fae107dc187cf6ec1bf22875eebeb6cf6} +0 -0
  171. data/test/dummy/tmp/cache/assets/{DF0/C50/sprockets%2Fc3dee69afa21d4462d0fda717c2f5a1b → E34/C30/sprockets%2Ff2169e1bb9aa1c3e3f8c5dede797e0ec} +0 -0
  172. data/test/dummy/tmp/cache/assets/{E15/B10/sprockets%2F8fded28e5dfea96f7f42212ee4de8d82 → E42/AA0/sprockets%2Fc91cb15dd3e44d12cac1d0df2dcb6eb1} +0 -0
  173. data/test/dummy/tmp/cache/assets/{D00/5C0/sprockets%2F9abbd043d031592a556306748dbaeb26 → E4C/F10/sprockets%2Faaa1d4bbfa7bd3a8c07bdd3fa39d5454} +0 -0
  174. data/test/dummy/tmp/cache/assets/E4F/630/sprockets%2Fdc16d1af4881392facdf10bac1dac8ee +0 -0
  175. data/test/dummy/tmp/cache/assets/{CE3/A70/sprockets%2F87a37405e84d5a30dd672cf6148ec119 → E5E/980/sprockets%2F6e1f0b772c8fbf8f0face9eea5c820aa} +0 -0
  176. metadata +324 -297
  177. data/app/assets/images/heart/bluestar.png +0 -0
  178. data/app/assets/images/heart/tooltip/columnBg.png +0 -0
  179. data/app/assets/images/heart/tooltip/columnTop.gif +0 -0
  180. data/app/assets/images/heart/tooltip/tipBtm.png +0 -0
  181. data/app/assets/images/heart/tooltip/tipBtm280.png +0 -0
  182. data/app/assets/images/heart/tooltip/tipBtm280b.png +0 -0
  183. data/app/assets/images/heart/tooltip/tipMid.png +0 -0
  184. data/app/assets/images/heart/tooltip/tipMid280.png +0 -0
  185. data/app/assets/images/heart/tooltip/tipMid280b.png +0 -0
  186. data/app/assets/images/heart/tooltip/tipMid280g.png +0 -0
  187. data/app/assets/images/heart/tooltip/tipMid280w.png +0 -0
  188. data/app/assets/images/heart/tooltip/tipTop.png +0 -0
  189. data/app/assets/images/heart/tooltip/tipTop280.png +0 -0
  190. data/app/assets/images/heart/tooltip/tipTop280b.png +0 -0
  191. data/test/dummy/db/migrate/20130902083555_create_heart_metrics.heart.rb +0 -17
  192. data/test/dummy/db/migrate/20130902083556_create_heart_isometrics.heart.rb +0 -10
  193. data/test/dummy/db/migrate/20130902083557_create_heart_dashboards.heart.rb +0 -14
  194. data/test/dummy/db/migrate/20130902083558_create_heart_annotations.heart.rb +0 -11
  195. data/test/dummy/db/migrate/20130902083559_create_heart_images.heart.rb +0 -12
  196. data/test/dummy/db/migrate/20130902083560_create_heart_configurations.heart.rb +0 -12
  197. data/test/dummy/tmp/cache/assets/C4F/0C0/sprockets%2Fb0695bc459d01217161ae9028368b856 +0 -0
  198. data/test/dummy/tmp/cache/assets/C57/200/sprockets%2F2e442476c863f14144881e259b1b597a +0 -0
  199. data/test/dummy/tmp/cache/assets/C61/A80/sprockets%2F7f20dd76170d803754a3085694f669e6 +0 -0
  200. data/test/dummy/tmp/cache/assets/C6B/710/sprockets%2F61a084f53ca308b115c54491f5b38120 +0 -0
  201. data/test/dummy/tmp/cache/assets/C7D/AD0/sprockets%2Fa702e8b86f4697101583ea24307b7a53 +0 -0
  202. data/test/dummy/tmp/cache/assets/C83/670/sprockets%2F125f9496da25b06ace8951e752253273 +0 -0
  203. data/test/dummy/tmp/cache/assets/C86/DC0/sprockets%2F26269d2349fba3c41619fe3e88363044 +0 -0
  204. data/test/dummy/tmp/cache/assets/CA6/170/sprockets%2F6e0bb6a54c8f40c3419b183772c73331 +0 -0
  205. data/test/dummy/tmp/cache/assets/CB6/490/sprockets%2Fc4b6a866f5d3627d2a186e2095e60717 +0 -0
  206. data/test/dummy/tmp/cache/assets/CB9/9E0/sprockets%2F7a20a269f11f7331c8a56908c68f18d9 +0 -0
  207. data/test/dummy/tmp/cache/assets/CBB/950/sprockets%2F575827e14ba8d9920284eae267874ca1 +0 -0
  208. data/test/dummy/tmp/cache/assets/CBE/3A0/sprockets%2F73bdae55823e56e6f3796265941b36d1 +0 -0
  209. data/test/dummy/tmp/cache/assets/CCB/970/sprockets%2F472690f680dd7d91690ebf603f7685e8 +0 -0
  210. data/test/dummy/tmp/cache/assets/CCF/FE0/sprockets%2Fea0015147c89d0181ba9460464bbf08c +0 -0
  211. data/test/dummy/tmp/cache/assets/CD1/1C0/sprockets%2F675a331d19ae21eaa532b27aa7606955 +0 -0
  212. data/test/dummy/tmp/cache/assets/CD5/1C0/sprockets%2F9a8012934e9d2f70a66c43310e3e44ab +0 -0
  213. data/test/dummy/tmp/cache/assets/CD7/270/sprockets%2F3bc51cb676bca1416770598d28109fa0 +0 -0
  214. data/test/dummy/tmp/cache/assets/CE0/E50/sprockets%2F9814922a41a67b828e462b31accb38f8 +0 -0
  215. data/test/dummy/tmp/cache/assets/CE8/890/sprockets%2F394187006c387afef0429558db43bf4e +0 -0
  216. data/test/dummy/tmp/cache/assets/CF1/CD0/sprockets%2Fd06db0e7d91462ed5ea64694583797e2 +0 -0
  217. data/test/dummy/tmp/cache/assets/CF4/B20/sprockets%2F604291e761acf24ffb2998f369b176e8 +0 -0
  218. data/test/dummy/tmp/cache/assets/CF6/220/sprockets%2F06bd95eb7a76f96eb2d8c54782607745 +0 -0
  219. data/test/dummy/tmp/cache/assets/D02/000/sprockets%2F842565584accd26c5572aa1d15b3bb35 +0 -0
  220. data/test/dummy/tmp/cache/assets/D06/8C0/sprockets%2Faae533655b6c51d0b999ce29015c4c03 +0 -0
  221. data/test/dummy/tmp/cache/assets/D0F/340/sprockets%2F81d96cf056d0ab1856c588f181b21fe0 +0 -0
  222. data/test/dummy/tmp/cache/assets/D18/460/sprockets%2Fb0145de92306b4c1bedc53aa0030e522 +0 -0
  223. data/test/dummy/tmp/cache/assets/D19/710/sprockets%2F90db64737e5b2ef37757b1cc2e52909d +0 -0
  224. data/test/dummy/tmp/cache/assets/D1C/270/sprockets%2F1475adbe1d4ec03f947d379865d477b3 +0 -0
  225. data/test/dummy/tmp/cache/assets/D27/770/sprockets%2Fa10a1cef30d33ecec13933b36280c548 +0 -0
  226. data/test/dummy/tmp/cache/assets/D2B/700/sprockets%2Fe90d34a411e79a9d1b510ae04c80e04e +0 -0
  227. data/test/dummy/tmp/cache/assets/D34/100/sprockets%2F504aeb3e34faa21a7c9fa726264934d3 +0 -0
  228. data/test/dummy/tmp/cache/assets/D35/F80/sprockets%2Ffb91b5a46525f11e9f6658a0daa005d4 +0 -0
  229. data/test/dummy/tmp/cache/assets/D38/A70/sprockets%2F56d65a0db0739f5f1a215bde93528f0a +0 -0
  230. data/test/dummy/tmp/cache/assets/D3A/A50/sprockets%2F1edbcb279564b5c4a85c13aa6940b279 +0 -0
  231. data/test/dummy/tmp/cache/assets/D3E/410/sprockets%2F4d2270e9821b7d9658df04c4adbdf214 +0 -0
  232. data/test/dummy/tmp/cache/assets/D4B/310/sprockets%2F3402fd809cbee959fdb8db9950a37342 +0 -0
  233. data/test/dummy/tmp/cache/assets/D4C/E60/sprockets%2Fcd389726cc723176e5547ac75cc3fbc8 +0 -0
  234. data/test/dummy/tmp/cache/assets/D52/730/sprockets%2Fd92d03a100128cafe40eb231c3c77ba9 +0 -0
  235. data/test/dummy/tmp/cache/assets/D53/4E0/sprockets%2F6b5c3667b962d3740c9de6a5b9bfc948 +0 -0
  236. data/test/dummy/tmp/cache/assets/D5A/5F0/sprockets%2Fa03a93be0c8545371de91a5cab10fe52 +0 -0
  237. data/test/dummy/tmp/cache/assets/D5D/C10/sprockets%2Fa56376015a3d663ddeb1c90e3faa901b +0 -0
  238. data/test/dummy/tmp/cache/assets/D5E/030/sprockets%2Fb709d4ed36a3b17b21a42a66ae0098fb +0 -0
  239. data/test/dummy/tmp/cache/assets/D66/7D0/sprockets%2F6d2be390800b01686b6aeb7bba686c7b +0 -0
  240. data/test/dummy/tmp/cache/assets/D73/5A0/sprockets%2F726af59d1d3774cebabf5011f2a9955f +0 -0
  241. data/test/dummy/tmp/cache/assets/D78/460/sprockets%2Ff8b234b2bfb694b85d927c693aba7d54 +0 -0
  242. data/test/dummy/tmp/cache/assets/D79/4F0/sprockets%2F0323ebeae0a56602aa023c9bb268b3ab +0 -0
  243. data/test/dummy/tmp/cache/assets/D7B/AF0/sprockets%2Fe1e0818c824997cffe5e04f2bff31e26 +0 -0
  244. data/test/dummy/tmp/cache/assets/D94/590/sprockets%2F95f6b48a4415cb3ab8acc4e0da36750d +0 -0
  245. data/test/dummy/tmp/cache/assets/D9E/A00/sprockets%2Fdb6bd6ed1be390eb760409309a6d79ad +0 -0
  246. data/test/dummy/tmp/cache/assets/D9F/6D0/sprockets%2F6da6b2d77e0c546c69a3bb1720f9b9cd +0 -0
  247. data/test/dummy/tmp/cache/assets/DA1/050/sprockets%2F082944b24f4e6533ce0ce9fa64fadf5b +0 -0
  248. data/test/dummy/tmp/cache/assets/DA5/3B0/sprockets%2Fc5e9c4c0d3563ae2b49bf7cd67f458b1 +0 -0
  249. data/test/dummy/tmp/cache/assets/DB1/C90/sprockets%2Fdf909d50d7a568a1bc9dd9e47baf4973 +0 -0
  250. data/test/dummy/tmp/cache/assets/DC3/C30/sprockets%2F45d3db961ffaa14a7acb04d139f3ae93 +0 -0
  251. data/test/dummy/tmp/cache/assets/DC8/180/sprockets%2F44add687b1c02f2afd55b3dc9d58a04f +0 -0
  252. data/test/dummy/tmp/cache/assets/DCB/0A0/sprockets%2Ffec15e165ae6e45fe4d36b903fccf103 +0 -0
  253. data/test/dummy/tmp/cache/assets/DCC/6C0/sprockets%2F1dd6adb3594e3cf84ce35ea45114ead9 +0 -0
  254. data/test/dummy/tmp/cache/assets/DCD/350/sprockets%2F0a1ad87bab5ab47f377d5f87736acdd2 +0 -0
  255. data/test/dummy/tmp/cache/assets/DD1/620/sprockets%2F3c34c92afb93cab6ab8f1640683ee8fd +0 -0
  256. data/test/dummy/tmp/cache/assets/DD2/2B0/sprockets%2Fcb959dcb42fe971fef3b07705a4de60b +0 -0
  257. data/test/dummy/tmp/cache/assets/DD4/DB0/sprockets%2Fd16e7fa5788cebf2c0335cfb5a94d5b5 +0 -0
  258. data/test/dummy/tmp/cache/assets/DDA/140/sprockets%2F9dab37c1f47e99ba86bf306fbed67c23 +0 -0
  259. data/test/dummy/tmp/cache/assets/DF3/CE0/sprockets%2Fd413b4fcbf2a3afe3a2f96fb3b22349f +0 -0
  260. data/test/dummy/tmp/cache/assets/DF5/020/sprockets%2Ffdbfbdaa7be9bc2fa2824455b9f36200 +0 -0
  261. data/test/dummy/tmp/cache/assets/DFB/120/sprockets%2F56abeace37f20e8ed908bb19c26c73ca +0 -0
  262. data/test/dummy/tmp/cache/assets/DFE/9D0/sprockets%2Fdfd5d12ea923dd88dd2fb5c56c2a6a73 +0 -0
  263. data/test/dummy/tmp/cache/assets/E04/670/sprockets%2Fe9e9c736dab1268ea76aed2ba1cf51f9 +0 -0
  264. data/test/dummy/tmp/cache/assets/E11/620/sprockets%2Fb79efcee1bf9f7559d26cc36bcbd6481 +0 -0
  265. data/test/dummy/tmp/cache/assets/E2F/B60/sprockets%2F9e9f03eab43fa8aeeb4aa97f1dff2171 +0 -0
  266. data/test/dummy/tmp/cache/assets/E3E/D60/sprockets%2F51bfcacbab0f9acbbcd331e31e095c40 +0 -0
  267. data/test/dummy/tmp/cache/assets/E4E/FE0/sprockets%2Fee2cecebeb842cdbbcfc530d13d50546 +0 -0
  268. data/test/dummy/tmp/cache/assets/E50/170/sprockets%2Faa1cd6441f82b0f9bfa1baffe5ce3c81 +0 -0
  269. data/test/dummy/tmp/cache/assets/E6C/5E0/sprockets%2F48dce5eee43c4ec8f9daa25a7fb847be +0 -0
  270. data/test/dummy/tmp/cache/assets/F0C/2E0/sprockets%2Fbcad47aa7a1eda0cc0fdc3eac6cb99fd +0 -0
data/README.rdoc CHANGED
@@ -1,3 +1,39 @@
1
- = Heart
1
+ # HEART
2
2
 
3
- This project rocks and uses MIT-LICENSE.
3
+ SEE the markdown README.md for the most up to date documentation.
4
+
5
+ ## You
6
+ - Want to quickly start tracking important daily metrics
7
+ - Have access to your data for generating metrics
8
+ - Don't want to dally around with excel, would prefer to automate the presentation and amalgamation of metric data
9
+ - Might like to share your metric definitions across projects, keep things separated and reusable
10
+
11
+ ## Install
12
+ Add the gem to your gemfile:
13
+ ```
14
+ gem 'heart', '~> 0.0.1'
15
+ ```
16
+
17
+ [Optional] Add any other gems to your gemfile for prepackaged HEART metrics if applicable:
18
+ ```
19
+ gem 'heart_vbulletin4', '~> 0.0.1'
20
+ ```
21
+
22
+ Bundle, then migrate:
23
+ ```
24
+ bundle install
25
+ bundle exec rake db:migrate
26
+ ```
27
+ That will setup the HEART database tables, and add metrics for any prepackaged HEART metric gem that you might have installed.
28
+
29
+ Mount the engine on some path, by editing your routes.rb file and adding:
30
+ ```ruby
31
+ mount Heart::Engine => "/heart", as: 'heart_engine'
32
+ ```
33
+ Now, when you startup your local server and access /heart you'll be greeted by the heart main page.
34
+
35
+ ### Rails 4
36
+ Currently, need to add ```gem 'protected_attributes'``` and ```gem 'haml', '~> 4.0'``` to your gemfile for rails 4 support.
37
+
38
+ ## Creating your own custom metrics
39
+ The real simplicity of this gem comes from the ease in which you can create and isolate your own custom metrics into gems to share between projects. You can start by creating the metrics locally, in your project, then easily move them into a gem if you plan on sharing them with other people / projects.
Binary file
@@ -72,13 +72,22 @@ $(function(){
72
72
  return false;
73
73
  });
74
74
  $('.heart_set_zoom').click(function(){
75
- HEART.set_set_zoom();
75
+ HEART.set_zoom();
76
+ return false;
77
+ });
78
+ $('#description_div').click(function(){
79
+ $('#description_div').hide();
80
+ $('#description_div_form').show();
81
+ return false;
82
+ });
83
+ $('#add_metric_link').click(function(){
84
+ $('#heart_form_metrics').toggle();
76
85
  return false;
77
86
  });
78
87
  });
79
88
 
80
89
  $(document).ready(function(){
81
- $('.tTip').betterTooltip();
90
+ $('[title]').colorTip({color:'yellow', timeout:25});
82
91
  $('#clickdata').hide();
83
92
  $(function() {
84
93
  if($("#date_from").length){
@@ -0,0 +1,143 @@
1
+ (function($){
2
+ $.fn.colorTip = function(settings){
3
+
4
+ var defaultSettings = {
5
+ color : 'yellow',
6
+ timeout : 500
7
+ }
8
+
9
+ var supportedColors = ['red','green','blue','white','yellow','black'];
10
+
11
+ /* Combining the default settings object with the supplied one */
12
+ settings = $.extend(defaultSettings,settings);
13
+
14
+ /*
15
+ * Looping through all the elements and returning them afterwards.
16
+ * This will add chainability to the plugin.
17
+ */
18
+
19
+ return this.each(function(){
20
+
21
+ var elem = $(this);
22
+
23
+ // If the title attribute is empty, continue with the next element
24
+ if(!elem.attr('title')) return true;
25
+
26
+ // Creating new eventScheduler and Tip objects for this element.
27
+ // (See the class definition at the bottom).
28
+
29
+ var scheduleEvent = new eventScheduler();
30
+ var tip = new Tip(elem.attr('title'));
31
+
32
+ // Adding the tooltip markup to the element and
33
+ // applying a special class:
34
+
35
+ elem.append(tip.generate()).addClass('colorTipContainer');
36
+
37
+ // Checking to see whether a supported color has been
38
+ // set as a classname on the element.
39
+
40
+ var hasClass = false;
41
+ for(var i=0;i<supportedColors.length;i++)
42
+ {
43
+ if(elem.hasClass(supportedColors[i])){
44
+ hasClass = true;
45
+ break;
46
+ }
47
+ }
48
+
49
+ // If it has been set, it will override the default color
50
+
51
+ if(!hasClass){
52
+ elem.addClass(settings.color);
53
+ }
54
+
55
+ // On mouseenter, show the tip, on mouseleave set the
56
+ // tip to be hidden in half a second.
57
+
58
+ elem.hover(function(){
59
+
60
+ tip.show();
61
+
62
+ // If the user moves away and hovers over the tip again,
63
+ // clear the previously set event:
64
+
65
+ scheduleEvent.clear();
66
+
67
+ },function(){
68
+
69
+ // Schedule event actualy sets a timeout (as you can
70
+ // see from the class definition below).
71
+
72
+ scheduleEvent.set(function(){
73
+ tip.hide();
74
+ },settings.timeout);
75
+
76
+ });
77
+
78
+ // Removing the title attribute, so the regular OS titles are
79
+ // not shown along with the tooltips.
80
+
81
+ elem.removeAttr('title');
82
+ });
83
+
84
+ }
85
+
86
+
87
+ /*
88
+ / Event Scheduler Class Definition
89
+ */
90
+
91
+ function eventScheduler(){}
92
+
93
+ eventScheduler.prototype = {
94
+ set : function (func,timeout){
95
+
96
+ // The set method takes a function and a time period (ms) as
97
+ // parameters, and sets a timeout
98
+
99
+ this.timer = setTimeout(func,timeout);
100
+ },
101
+ clear: function(){
102
+
103
+ // The clear method clears the timeout
104
+
105
+ clearTimeout(this.timer);
106
+ }
107
+ }
108
+
109
+
110
+ /*
111
+ / Tip Class Definition
112
+ */
113
+
114
+ function Tip(txt){
115
+ this.content = txt;
116
+ this.shown = false;
117
+ }
118
+
119
+ Tip.prototype = {
120
+ generate: function(){
121
+
122
+ // The generate method returns either a previously generated element
123
+ // stored in the tip variable, or generates it and saves it in tip for
124
+ // later use, after which returns it.
125
+
126
+ return this.tip || (this.tip = $('<span class="colorTip">'+this.content+
127
+ '<span class="pointyTipShadow"></span><span class="pointyTip"></span></span>'));
128
+ },
129
+ show: function(){
130
+ if(this.shown) return;
131
+
132
+ // Center the tip and start a fadeIn animation
133
+ this.tip.css('top',-this.tip.outerHeight()*1.5);
134
+ this.tip.css('margin-left',-this.tip.outerWidth()/2).fadeIn('fast');
135
+ this.shown = true;
136
+ },
137
+ hide: function(){
138
+ this.tip.fadeOut();
139
+ this.shown = false;
140
+ }
141
+ }
142
+
143
+ })(jQuery);
@@ -0,0 +1,116 @@
1
+ (function($) {
2
+
3
+ function init(plot) {
4
+ plot.hooks.processOptions.push(addLastDrawHook);
5
+ }
6
+
7
+ function addLastDrawHook(plot) {
8
+ plot.hooks.draw.push(drawLegend);
9
+ }
10
+
11
+ // draws the legend on the canvas, using the HTML added by flot as a guide
12
+ function drawLegend(plot, ctx) {
13
+ var options = plot.getOptions();
14
+ if(!options.legend.show) return;
15
+ if(!options.legend.showOnCanvas) return;
16
+
17
+ var placeholder = plot.getPlaceholder();
18
+ var container = options.legend.container || placeholder.find('.legend');
19
+
20
+ var f = {
21
+ style: placeholder.css("font-style"),
22
+ size: Math.round(0.8 * (+placeholder.css("font-size").replace("px", "") || 13)),
23
+ variant: placeholder.css("font-variant"),
24
+ weight: placeholder.css("font-weight"),
25
+ family: placeholder.css("font-family")
26
+ };
27
+
28
+ ctx.font = f.style + " " + f.variant + " " + f.weight + " " + f.size + "px '" + f.family + "'";
29
+ ctx.textAlign = "left";
30
+ ctx.textBaseline = "bottom";
31
+
32
+ function fontAscent() {
33
+ return 12;
34
+ }
35
+
36
+ var series = plot.getData();
37
+ var plotOffset = plot.getPlotOffset();
38
+ var plotHeight = plot.height();
39
+ var plotWidth = plot.width();
40
+ var lf = options.legend.labelFormatter;
41
+ var legendWidth = 0, legendHeight = 0;
42
+ var num_labels = 0;
43
+ var s, label;
44
+ // get width of legend and number of valid legend entries
45
+ for(var i = 0; i < series.length; ++i) {
46
+ s = series[i];
47
+ label = s.label;
48
+ if(!label) continue;
49
+ num_labels++;
50
+ if(lf) label = lf(label, s);
51
+ labelWidth = ctx.measureText(label).width;
52
+ if(labelWidth > legendWidth) legendWidth = labelWidth
53
+ }
54
+ var LEGEND_BOX_WIDTH = 22; // color box
55
+ var PADDING_RIGHT = 5;
56
+ var LEGEND_BOX_LINE_HEIGHT = 18;
57
+ legendWidth = legendWidth + LEGEND_BOX_WIDTH + PADDING_RIGHT;
58
+ legendHeight = num_labels * LEGEND_BOX_LINE_HEIGHT;
59
+ var x, y;
60
+ if(options.legend.container != null) {
61
+ x = $(options.legend.container).offset().left;
62
+ y = $(options.legend.container).offset().top;
63
+ } else {
64
+ var pos = "";
65
+ var p = options.legend.position;
66
+ var m = options.legend.margin;
67
+ if(m[0] == null) m = [m, m];
68
+ if(p.charAt(0) == "n")
69
+ y = Math.round(plotOffset.top + options.grid.borderWidth + m[1]);
70
+ else if(p.charAt(0) == "s")
71
+ y = Math.round(plotOffset.top + options.grid.borderWidth + plotHeight - m[0] - legendHeight);
72
+ if(p.charAt(1) == "e")
73
+ x = Math.round(plotOffset.left + options.grid.borderWidth + plotWidth - m[0] - legendWidth);
74
+ else if(p.charAt(1) == "w")
75
+ x = Math.round(plotOffset.left + options.grid.borderWidth + m[0]);
76
+ if(options.legend.backgroundOpacity != 0.0) {
77
+ var c = options.legend.backgroundColor;
78
+ if(c == null) c = options.grid.backgroundColor;
79
+ if(c && typeof c == "string") {
80
+ ctx.globalAlpha = options.legend.backgroundOpacity;
81
+ ctx.fillStyle = c;
82
+ ctx.fillRect(x, y, legendWidth, legendHeight);
83
+ ctx.globalAlpha = 1.0;
84
+ }
85
+ }
86
+ }
87
+ var posx, posy;
88
+ for(var i = 0; i < series.length; ++i) {
89
+ s = series[i];
90
+ label = s.label;
91
+ if(!label) continue;
92
+ if(lf) label = lf(label, s);
93
+ posy = y + (i * 18);
94
+ ctx.fillStyle = options.legend.labelBoxBorderColor;
95
+ ctx.fillRect(x, posy, 18, 14);
96
+ ctx.fillStyle = "#FFF";
97
+ ctx.fillRect(x + 1, posy + 1, 16, 12);
98
+ ctx.fillStyle = s.color;
99
+ ctx.fillRect(x + 2, posy + 2, 14, 10);
100
+ posx = x + 22;
101
+ posy = posy + f.size + 2;
102
+
103
+ ctx.fillStyle = options.grid.color;
104
+ ctx.fillText(label, posx, posy);
105
+ }
106
+
107
+ container.hide(); // hide the HTML version
108
+ }
109
+
110
+ $.plot.plugins.push({
111
+ init: init,
112
+ options: {},
113
+ name: 'legendoncanvas',
114
+ version: '1.0'
115
+ });
116
+ })(jQuery);
@@ -77,7 +77,6 @@ var HEART = function(){
77
77
 
78
78
  description : function(bool_remove){
79
79
  var remove = bool_remove || false;
80
- console.log(remove);
81
80
  if(!remove){
82
81
  $.ajax({
83
82
  type : "POST",
@@ -87,7 +86,9 @@ var HEART = function(){
87
86
  data : { 'fulldate': '2999-12-31', 'note': $('#custom_description').val(), 'date_from': '2999-12-31', 'date_to': '2999-12-31' },
88
87
  success : function(res){
89
88
  if(typeof(chart_description) != 'undefined' && chart_description != ""){
90
- $('#description_div').html("<img src='"+HEARTENGINE.mountPoint()+"/images/bluestar.png' align='left' width='16px' onclick='HEART.description(false)'/> &nbsp; " + chart_description);
89
+ $('#description_div').html(chart_description);
90
+ $('#description_div').show();
91
+ $('#description_div_form').hide();
91
92
  }
92
93
  HEART.link();
93
94
  },
@@ -121,6 +122,11 @@ var HEART = function(){
121
122
  },
122
123
 
123
124
  image : function(){
125
+ HEART.flotGraph(
126
+ {
127
+ flotoptions: { legend: { noColumns: 3, show: true, showOnCanvas: true, position: 'nw'} }
128
+ }
129
+ ).draw();
124
130
  dashboard_id = $('#dashboard_id').val();
125
131
  result = $.ajax({
126
132
  type : "POST",
@@ -142,6 +148,7 @@ var HEART = function(){
142
148
  'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
143
149
  },
144
150
  });
151
+ HEART.flotGraph().draw();
145
152
  },
146
153
 
147
154
  tsv : function(){
@@ -288,7 +295,7 @@ var HEART = function(){
288
295
  //
289
296
  flotGraph : function(spec){
290
297
  var spec = spec || {};
291
- spec.flotoptions = {
298
+ var flotoptions = {
292
299
  colors: ["#FF8300", "#06799F", "#FF2800", "#9440ed","#C3F500"],
293
300
  xaxis: { mode: "time", reserveSpace: null},
294
301
  xaxes: [{ },
@@ -299,22 +306,7 @@ var HEART = function(){
299
306
  yaxis: { min: 0 },
300
307
  grid: { backgroundColor: { colors: ["#fff", "#fff"] }, hoverable: true, clickable: true },
301
308
  legend: { noColumns: 3, container: $('#flotlegend, .legend'), labelBoxBorderColor: null, show: true, labelFormatter: function(label, series) {
302
- // series is the series object for the label
303
- if(label.substring(label.length -1) == "]"){
304
- if(label.substring(label.length -4) == "999]"){
305
- return "forecast";
306
- }else if(label.substring(label.length -4) == "998]"){
307
- return ".";
308
- }else if(label.substring(label.length -4) == "888]"){
309
- return "target";
310
- }else if(label.substring(label.length -4) == "666]"){
311
- return "significance";
312
- }else{
313
- return label.substring(label.indexOf('['));
314
- }
315
- }else{
316
- return "<a onclick=\"$('#measurement_" + series.att_name + "').attr('checked', false); HEART.flotGraph().draw(); return false;\">" + label + "</a>";
317
- }
309
+ return "<a onclick=\"$('#measurement_" + series.att_name + "').attr('checked', false); HEART.flotGraph().draw(); return false;\">" + label + "</a>";
318
310
  } },
319
311
  series: {
320
312
  stack: HEART.get_stack(),
@@ -337,6 +329,9 @@ var HEART = function(){
337
329
  lines : { show : HEART.get_lines(), fill : HEART.get_fill() },
338
330
  points : { show : HEART.get_points() },
339
331
  };
332
+
333
+ jQuery.extend(flotoptions, spec.flotoptions);
334
+ spec.flotoptions = flotoptions;
340
335
 
341
336
  var that = this.graph(spec);
342
337
 
@@ -574,7 +569,7 @@ var HEART = function(){
574
569
  }
575
570
  if(typeof(HEART.cacheRead(cache_index)["chart_description"]) != 'undefined'){
576
571
  if(HEART.cacheRead(cache_index)["chart_description"] != ""){
577
- $('#description_div').html("<p class='notice'><img src='"+HEARTENGINE.mountPoint()+"/images/bluestar.png' align='right' width='16px' /><img src='"+HEARTENGINE.mountPoint()+"/images/bluestar.png' align='left' width='16px' onclick='HEART.description(true)'/>&nbsp;" + HEART.cacheRead(cache_index)["chart_description"] + "</p>");
572
+ $('#description_div').html(HEART.cacheRead(cache_index)["chart_description"]);
578
573
  }else{
579
574
  $('#description_div').html("");
580
575
  }
@@ -91,7 +91,7 @@ function showTooltip(x, y, contents) {
91
91
  top: y + 5,
92
92
  left: x + 5,
93
93
  padding: '10px',
94
- 'line-height': '14px',
94
+ 'line-height': '12px',
95
95
  'text-shadow': '0px -1px 1px rgba(0, 0, 0, .8)',
96
96
  'max-width': '240px',
97
97
  color: 'white',
@@ -0,0 +1,99 @@
1
+ .colorTip{
2
+ /* This class is assigned to the color tip span by jQuery */
3
+
4
+ display:none;
5
+ position:absolute;
6
+ left:50%;
7
+ top:-30px;
8
+ padding:6px;
9
+
10
+ background-color:white;
11
+ font-family:Arial,Helvetica,sans-serif;
12
+ font-size:11px;
13
+ font-style:normal;
14
+ line-height:1;
15
+ text-decoration:none;
16
+ text-align:center;
17
+ text-shadow:0 0 1px white;
18
+ white-space:nowrap;
19
+
20
+ -moz-border-radius:4px;
21
+ -webkit-border-radius:4px;
22
+ border-radius:4px;
23
+ }
24
+
25
+ .pointyTip,.pointyTipShadow{
26
+ /* Setting a thick transparent border on a 0x0 div to create a triangle */
27
+ border:6px solid transparent;
28
+ bottom:-12px;
29
+ height:0;
30
+ left:50%;
31
+ margin-left:-6px;
32
+ position:absolute;
33
+ width:0;
34
+ }
35
+
36
+ .pointyTipShadow{
37
+ /* The shadow tip is 1px larger, so it acts as a border to the tip */
38
+ border-width:7px;
39
+ bottom:-14px;
40
+ margin-left:-7px;
41
+ }
42
+
43
+ .colorTipContainer{
44
+ position:relative;
45
+ text-decoration:none !important;
46
+ }
47
+
48
+
49
+ /* 6 Available Color Themes */
50
+
51
+ .white .pointyTip{ border-top-color:white;}
52
+ .white .pointyTipShadow{ border-top-color:#ddd;}
53
+ .white .colorTip{
54
+ background-color:white;
55
+ border:1px solid #DDDDDD;
56
+ color:#555555;
57
+ }
58
+
59
+ .yellow .pointyTip{ border-top-color:#f9f2ba;}
60
+ .yellow .pointyTipShadow{ border-top-color:#e9d315;}
61
+ .yellow .colorTip{
62
+ background-color:#f9f2ba;
63
+ border:1px solid #e9d315;
64
+ color:#5b5316;
65
+ }
66
+
67
+ .blue .pointyTip{ border-top-color:#d9f1fb;}
68
+ .blue .pointyTipShadow{ border-top-color:#7fcdee;}
69
+ .blue .colorTip{
70
+ background-color:#d9f1fb;
71
+ border:1px solid #7fcdee;
72
+ color:#1b475a;
73
+ }
74
+
75
+ .green .pointyTip{ border-top-color:#f2fdf1;}
76
+ .green .pointyTipShadow{ border-top-color:#b6e184;}
77
+ .green .colorTip{
78
+ background-color:#f2fdf1;
79
+ border:1px solid #b6e184;
80
+ color:#558221;
81
+ }
82
+
83
+ .red .pointyTip{ border-top-color:#bb3b1d;}
84
+ .red .pointyTipShadow{ border-top-color:#8f2a0f;}
85
+ .red .colorTip{
86
+ background-color:#bb3b1d;
87
+ border:1px solid #8f2a0f;
88
+ color:#fcfcfc;
89
+ text-shadow:none;
90
+ }
91
+
92
+ .black .pointyTip{ border-top-color:#333;}
93
+ .black .pointyTipShadow{ border-top-color:#111;}
94
+ .black .colorTip{
95
+ background-color:#333;
96
+ border:1px solid #111;
97
+ color:#fcfcfc;
98
+ text-shadow:none;
99
+ }