houston-core 0.5.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (926) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +46 -0
  3. data/.gitignore +23 -0
  4. data/.gitmodules +0 -0
  5. data/Gemfile +24 -0
  6. data/Gemfile.lock +354 -0
  7. data/README.md +133 -0
  8. data/Rakefile +8 -0
  9. data/app/adapters/houston/adapters.rb +51 -0
  10. data/app/adapters/houston/adapters/ci_server.rb +5 -0
  11. data/app/adapters/houston/adapters/ci_server/errors.rb +16 -0
  12. data/app/adapters/houston/adapters/ci_server/jenkins_adapter.rb +21 -0
  13. data/app/adapters/houston/adapters/ci_server/jenkins_adapter/job.rb +245 -0
  14. data/app/adapters/houston/adapters/ci_server/none_adapter.rb +21 -0
  15. data/app/adapters/houston/adapters/ci_server/none_adapter/job.rb +25 -0
  16. data/app/adapters/houston/adapters/deployment/engineyard.rb +107 -0
  17. data/app/adapters/houston/adapters/deployment/engineyard/config.rb +18 -0
  18. data/app/adapters/houston/adapters/error_tracker.rb +5 -0
  19. data/app/adapters/houston/adapters/error_tracker/errbit_adapter.rb +69 -0
  20. data/app/adapters/houston/adapters/error_tracker/errbit_adapter/app.rb +48 -0
  21. data/app/adapters/houston/adapters/error_tracker/errbit_adapter/connection.rb +153 -0
  22. data/app/adapters/houston/adapters/error_tracker/errbit_adapter/notice.rb +26 -0
  23. data/app/adapters/houston/adapters/error_tracker/errbit_adapter/problem.rb +98 -0
  24. data/app/adapters/houston/adapters/error_tracker/errors.rb +0 -0
  25. data/app/adapters/houston/adapters/error_tracker/none_adapter.rb +31 -0
  26. data/app/adapters/houston/adapters/error_tracker/null_app.rb +40 -0
  27. data/app/adapters/houston/adapters/ticket_tracker.rb +5 -0
  28. data/app/adapters/houston/adapters/ticket_tracker/errors.rb +23 -0
  29. data/app/adapters/houston/adapters/ticket_tracker/github_adapter.rb +27 -0
  30. data/app/adapters/houston/adapters/ticket_tracker/github_adapter/connection.rb +167 -0
  31. data/app/adapters/houston/adapters/ticket_tracker/github_adapter/issue.rb +99 -0
  32. data/app/adapters/houston/adapters/ticket_tracker/houston_adapter.rb +23 -0
  33. data/app/adapters/houston/adapters/ticket_tracker/houston_adapter/connection.rb +48 -0
  34. data/app/adapters/houston/adapters/ticket_tracker/houston_adapter/ticket.rb +65 -0
  35. data/app/adapters/houston/adapters/ticket_tracker/none_adapter.rb +21 -0
  36. data/app/adapters/houston/adapters/ticket_tracker/null_connection.rb +46 -0
  37. data/app/adapters/houston/adapters/ticket_tracker/null_ticket.rb +71 -0
  38. data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter.rb +43 -0
  39. data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter/connection.rb +224 -0
  40. data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter/milestone.rb +42 -0
  41. data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter/ticket.rb +240 -0
  42. data/app/adapters/houston/adapters/version_control.rb +5 -0
  43. data/app/adapters/houston/adapters/version_control/commit.rb +29 -0
  44. data/app/adapters/houston/adapters/version_control/errors.rb +37 -0
  45. data/app/adapters/houston/adapters/version_control/git_adapter.rb +96 -0
  46. data/app/adapters/houston/adapters/version_control/git_adapter/diff_changes.rb +49 -0
  47. data/app/adapters/houston/adapters/version_control/git_adapter/github_repo.rb +65 -0
  48. data/app/adapters/houston/adapters/version_control/git_adapter/remote_repo.rb +104 -0
  49. data/app/adapters/houston/adapters/version_control/git_adapter/repo.rb +247 -0
  50. data/app/adapters/houston/adapters/version_control/none_adapter.rb +21 -0
  51. data/app/adapters/houston/adapters/version_control/null_commit.rb +21 -0
  52. data/app/adapters/houston/adapters/version_control/null_repo.rb +65 -0
  53. data/app/assets/font/octicons.eot +0 -0
  54. data/app/assets/font/octicons.svg +198 -0
  55. data/app/assets/font/octicons.ttf +0 -0
  56. data/app/assets/font/octicons.woff +0 -0
  57. data/app/assets/font/roboto-black-webfont.eot +0 -0
  58. data/app/assets/font/roboto-black-webfont.svg +675 -0
  59. data/app/assets/font/roboto-black-webfont.ttf +0 -0
  60. data/app/assets/font/roboto-black-webfont.woff +0 -0
  61. data/app/assets/font/roboto-blackitalic-webfont.eot +0 -0
  62. data/app/assets/font/roboto-blackitalic-webfont.svg +677 -0
  63. data/app/assets/font/roboto-blackitalic-webfont.ttf +0 -0
  64. data/app/assets/font/roboto-blackitalic-webfont.woff +0 -0
  65. data/app/assets/font/roboto-bold-webfont.eot +0 -0
  66. data/app/assets/font/roboto-bold-webfont.svg +675 -0
  67. data/app/assets/font/roboto-bold-webfont.ttf +0 -0
  68. data/app/assets/font/roboto-bold-webfont.woff +0 -0
  69. data/app/assets/font/roboto-bolditalic-webfont.eot +0 -0
  70. data/app/assets/font/roboto-bolditalic-webfont.svg +677 -0
  71. data/app/assets/font/roboto-bolditalic-webfont.ttf +0 -0
  72. data/app/assets/font/roboto-bolditalic-webfont.woff +0 -0
  73. data/app/assets/font/roboto-italic-webfont.eot +0 -0
  74. data/app/assets/font/roboto-italic-webfont.svg +668 -0
  75. data/app/assets/font/roboto-italic-webfont.ttf +0 -0
  76. data/app/assets/font/roboto-italic-webfont.woff +0 -0
  77. data/app/assets/font/roboto-light-webfont.eot +0 -0
  78. data/app/assets/font/roboto-light-webfont.svg +666 -0
  79. data/app/assets/font/roboto-light-webfont.ttf +0 -0
  80. data/app/assets/font/roboto-light-webfont.woff +0 -0
  81. data/app/assets/font/roboto-lightitalic-webfont.eot +0 -0
  82. data/app/assets/font/roboto-lightitalic-webfont.svg +668 -0
  83. data/app/assets/font/roboto-lightitalic-webfont.ttf +0 -0
  84. data/app/assets/font/roboto-lightitalic-webfont.woff +0 -0
  85. data/app/assets/font/roboto-medium-webfont.eot +0 -0
  86. data/app/assets/font/roboto-medium-webfont.svg +675 -0
  87. data/app/assets/font/roboto-medium-webfont.ttf +0 -0
  88. data/app/assets/font/roboto-medium-webfont.woff +0 -0
  89. data/app/assets/font/roboto-mediumitalic-webfont.eot +0 -0
  90. data/app/assets/font/roboto-mediumitalic-webfont.svg +677 -0
  91. data/app/assets/font/roboto-mediumitalic-webfont.ttf +0 -0
  92. data/app/assets/font/roboto-mediumitalic-webfont.woff +0 -0
  93. data/app/assets/font/roboto-regular-webfont.eot +0 -0
  94. data/app/assets/font/roboto-regular-webfont.svg +666 -0
  95. data/app/assets/font/roboto-regular-webfont.ttf +0 -0
  96. data/app/assets/font/roboto-regular-webfont.woff +0 -0
  97. data/app/assets/font/roboto-thin-webfont.eot +0 -0
  98. data/app/assets/font/roboto-thin-webfont.svg +666 -0
  99. data/app/assets/font/roboto-thin-webfont.ttf +0 -0
  100. data/app/assets/font/roboto-thin-webfont.woff +0 -0
  101. data/app/assets/font/roboto-thinitalic-webfont.eot +0 -0
  102. data/app/assets/font/roboto-thinitalic-webfont.svg +668 -0
  103. data/app/assets/font/roboto-thinitalic-webfont.ttf +0 -0
  104. data/app/assets/font/roboto-thinitalic-webfont.woff +0 -0
  105. data/app/assets/images/.keep +0 -0
  106. data/app/assets/images/bug-fixed-128.png +0 -0
  107. data/app/assets/images/bug-fixed-32.png +0 -0
  108. data/app/assets/images/bug-fixed-48.png +0 -0
  109. data/app/assets/images/bug-new-128.png +0 -0
  110. data/app/assets/images/bug-new-32.png +0 -0
  111. data/app/assets/images/bug-new-48.png +0 -0
  112. data/app/assets/images/bug-open-32.png +0 -0
  113. data/app/assets/images/bug-zero-128.png +0 -0
  114. data/app/assets/images/bug-zero-48.png +0 -0
  115. data/app/assets/javascripts/app/boot.coffee +22 -0
  116. data/app/assets/javascripts/app/emoji.coffee.erb +2 -0
  117. data/app/assets/javascripts/app/infinite_scroll.coffee +32 -0
  118. data/app/assets/javascripts/app/models/commit.coffee +9 -0
  119. data/app/assets/javascripts/app/models/release.coffee +9 -0
  120. data/app/assets/javascripts/app/models/task.coffee +5 -0
  121. data/app/assets/javascripts/app/models/tester.coffee +8 -0
  122. data/app/assets/javascripts/app/models/testing_note.coffee +18 -0
  123. data/app/assets/javascripts/app/models/ticket.coffee +165 -0
  124. data/app/assets/javascripts/app/models/user.coffee +3 -0
  125. data/app/assets/javascripts/app/mousetrap-bind-scoped.js +37 -0
  126. data/app/assets/javascripts/app/releases.coffee +55 -0
  127. data/app/assets/javascripts/app/stacked_area_graph.coffee +113 -0
  128. data/app/assets/javascripts/app/stacked_bar_graph.coffee +108 -0
  129. data/app/assets/javascripts/app/table_row_expander.coffee +52 -0
  130. data/app/assets/javascripts/app/ticket_tracker_refresh.coffee +73 -0
  131. data/app/assets/javascripts/app/views/_show_sprint_view.coffee +84 -0
  132. data/app/assets/javascripts/app/views/_tickets_view.coffee +62 -0
  133. data/app/assets/javascripts/app/views/all_tickets_view.coffee +29 -0
  134. data/app/assets/javascripts/app/views/commit_view.coffee +13 -0
  135. data/app/assets/javascripts/app/views/edit_sprint_view.coffee +327 -0
  136. data/app/assets/javascripts/app/views/edit_ticket_view.coffee +67 -0
  137. data/app/assets/javascripts/app/views/find_or_create_ticket_view.coffee +75 -0
  138. data/app/assets/javascripts/app/views/keyboard_shortcuts_modal.coffee +42 -0
  139. data/app/assets/javascripts/app/views/new_ticket_modal.coffee +24 -0
  140. data/app/assets/javascripts/app/views/new_ticket_view.coffee +207 -0
  141. data/app/assets/javascripts/app/views/problems_view.coffee +114 -0
  142. data/app/assets/javascripts/app/views/reports_view.coffee +51 -0
  143. data/app/assets/javascripts/app/views/testing_note_view.coffee +85 -0
  144. data/app/assets/javascripts/app/views/testing_report_view.coffee +29 -0
  145. data/app/assets/javascripts/app/views/testing_ticket_view.coffee +203 -0
  146. data/app/assets/javascripts/app/views/ticket_modal_view.coffee +77 -0
  147. data/app/assets/javascripts/application.js +18 -0
  148. data/app/assets/javascripts/core/app.coffee +169 -0
  149. data/app/assets/javascripts/core/burndown_chart.coffee +111 -0
  150. data/app/assets/javascripts/core/core_ext/number.coffee +48 -0
  151. data/app/assets/javascripts/core/errors.coffee +26 -0
  152. data/app/assets/javascripts/core/handlebars_helpers.coffee +164 -0
  153. data/app/assets/javascripts/core/helpers.coffee +18 -0
  154. data/app/assets/javascripts/core/jquery_extensions.coffee +176 -0
  155. data/app/assets/javascripts/dashboard.js +23 -0
  156. data/app/assets/javascripts/dashboard/refresher.coffee +120 -0
  157. data/app/assets/javascripts/vendor.js +26 -0
  158. data/app/assets/stylesheets/application.css +14 -0
  159. data/app/assets/stylesheets/application/ansi.scss +38 -0
  160. data/app/assets/stylesheets/application/commit.scss +6 -0
  161. data/app/assets/stylesheets/application/emoji.scss +5 -0
  162. data/app/assets/stylesheets/application/exceptions.scss +64 -0
  163. data/app/assets/stylesheets/application/find_or_create_ticket.scss +12 -0
  164. data/app/assets/stylesheets/application/follow_up.scss +44 -0
  165. data/app/assets/stylesheets/application/forms.scss +46 -0
  166. data/app/assets/stylesheets/application/freight_train.css.scss +46 -0
  167. data/app/assets/stylesheets/application/full_screen.scss +8 -0
  168. data/app/assets/stylesheets/application/infinite_scroll.scss +17 -0
  169. data/app/assets/stylesheets/application/keyboard_shortcuts.scss +31 -0
  170. data/app/assets/stylesheets/application/markdown.scss +27 -0
  171. data/app/assets/stylesheets/application/mobile.scss +3 -0
  172. data/app/assets/stylesheets/application/modals.scss +3 -0
  173. data/app/assets/stylesheets/application/navigation.scss +212 -0
  174. data/app/assets/stylesheets/application/new_ticket_view.scss +89 -0
  175. data/app/assets/stylesheets/application/omnibar.scss +55 -0
  176. data/app/assets/stylesheets/application/project_banner_buttons.scss +70 -0
  177. data/app/assets/stylesheets/application/project_tiles.scss +26 -0
  178. data/app/assets/stylesheets/application/projects.css.scss +96 -0
  179. data/app/assets/stylesheets/application/pull_requests.scss +68 -0
  180. data/app/assets/stylesheets/application/queue.scss +11 -0
  181. data/app/assets/stylesheets/application/release_form.scss +67 -0
  182. data/app/assets/stylesheets/application/releases.scss +164 -0
  183. data/app/assets/stylesheets/application/sortable_table.scss +26 -0
  184. data/app/assets/stylesheets/application/sprint.scss +83 -0
  185. data/app/assets/stylesheets/application/tables.scss +74 -0
  186. data/app/assets/stylesheets/application/test_run.scss +145 -0
  187. data/app/assets/stylesheets/application/testing_report.scss +279 -0
  188. data/app/assets/stylesheets/application/ticket.scss +156 -0
  189. data/app/assets/stylesheets/application/ticket_modal.scss +173 -0
  190. data/app/assets/stylesheets/application/tickets.scss +36 -0
  191. data/app/assets/stylesheets/application/timeline.scss +206 -0
  192. data/app/assets/stylesheets/application/tips.scss +5 -0
  193. data/app/assets/stylesheets/application/typeahead.scss +29 -0
  194. data/app/assets/stylesheets/application/uploading.scss +101 -0
  195. data/app/assets/stylesheets/application/user_wall.scss +4 -0
  196. data/app/assets/stylesheets/application/users.scss +22 -0
  197. data/app/assets/stylesheets/application/welcome.scss +48 -0
  198. data/app/assets/stylesheets/core/alerts.scss +14 -0
  199. data/app/assets/stylesheets/core/avatars.scss +22 -0
  200. data/app/assets/stylesheets/core/burndown_chart.scss +92 -0
  201. data/app/assets/stylesheets/core/colors.scss.erb +106 -0
  202. data/app/assets/stylesheets/core/misc.scss +165 -0
  203. data/app/assets/stylesheets/core/octicons-icons.scss +221 -0
  204. data/app/assets/stylesheets/core/octicons.scss.erb +9 -0
  205. data/app/assets/stylesheets/core/overrides.scss +48 -0
  206. data/app/assets/stylesheets/core/roboto.scss.erb +131 -0
  207. data/app/assets/stylesheets/core/scores.scss +123 -0
  208. data/app/assets/stylesheets/dashboard.css +14 -0
  209. data/app/assets/stylesheets/dashboard/dashboard.scss +110 -0
  210. data/app/assets/stylesheets/print.css.scss +22 -0
  211. data/app/assets/stylesheets/vendor.css +16 -0
  212. data/app/assets/templates/commit.hbs +9 -0
  213. data/app/assets/templates/keyboard_shortcuts.hbs +14 -0
  214. data/app/assets/templates/new_ticket/form.hbs +14 -0
  215. data/app/assets/templates/new_ticket/modal.hbs +9 -0
  216. data/app/assets/templates/new_ticket/suggestion.hbs +3 -0
  217. data/app/assets/templates/omnibar/commit.hbs +6 -0
  218. data/app/assets/templates/omnibar/modal.hbs +5 -0
  219. data/app/assets/templates/omnibar/project.hbs +5 -0
  220. data/app/assets/templates/omnibar/ticket.hbs +6 -0
  221. data/app/assets/templates/problems/index.hbs +3 -0
  222. data/app/assets/templates/problems/show.hbs +48 -0
  223. data/app/assets/templates/sprints/edit.hbs +50 -0
  224. data/app/assets/templates/sprints/show.hbs +1 -0
  225. data/app/assets/templates/sprints/task.hbs +17 -0
  226. data/app/assets/templates/sprints/typeahead.hbs +7 -0
  227. data/app/assets/templates/testing_notes/edit.hbs +20 -0
  228. data/app/assets/templates/testing_notes/new.hbs +27 -0
  229. data/app/assets/templates/testing_notes/show.hbs +11 -0
  230. data/app/assets/templates/testing_report/description.hbs +12 -0
  231. data/app/assets/templates/testing_report/ticket.hbs +21 -0
  232. data/app/assets/templates/testing_report/verdict.hbs +4 -0
  233. data/app/assets/templates/tickets/find_or_create.hbs +4 -0
  234. data/app/assets/templates/tickets/index.hbs +19 -0
  235. data/app/assets/templates/tickets/modal.hbs +5 -0
  236. data/app/assets/templates/tickets/show.hbs +62 -0
  237. data/app/assets/templates/tickets/typeahead.hbs +2 -0
  238. data/app/concerns/belongs_to_commit.rb +22 -0
  239. data/app/concerns/commit_synchronizer.rb +94 -0
  240. data/app/concerns/feature_state.rb +27 -0
  241. data/app/concerns/feature_support.rb +15 -0
  242. data/app/concerns/historical_weekly_stats.rb +15 -0
  243. data/app/concerns/milestone_synchronizer.rb +60 -0
  244. data/app/concerns/nosync.rb +21 -0
  245. data/app/concerns/project_adapter.rb +81 -0
  246. data/app/concerns/retirement.rb +28 -0
  247. data/app/concerns/ticket_synchronizer.rb +120 -0
  248. data/app/concerns/unique_add.rb +7 -0
  249. data/app/controllers/api/v1/sprint_tasks_controller.rb +97 -0
  250. data/app/controllers/api/v1/ticket_tasks_controller.rb +75 -0
  251. data/app/controllers/application_controller.rb +151 -0
  252. data/app/controllers/commits_controller.rb +33 -0
  253. data/app/controllers/concerns/.keep +0 -0
  254. data/app/controllers/deploys_controller.rb +43 -0
  255. data/app/controllers/home_controller.rb +9 -0
  256. data/app/controllers/hooks_controller.rb +31 -0
  257. data/app/controllers/jobs_controller.rb +13 -0
  258. data/app/controllers/oauth_consumers_controller.rb +68 -0
  259. data/app/controllers/omnibar_controller.rb +64 -0
  260. data/app/controllers/project_exceptions_controller.rb +36 -0
  261. data/app/controllers/project_hooks_controller.rb +30 -0
  262. data/app/controllers/project_options_controller.rb +27 -0
  263. data/app/controllers/project_pretickets_controller.rb +27 -0
  264. data/app/controllers/project_roles_controller.rb +22 -0
  265. data/app/controllers/project_tickets_controller.rb +153 -0
  266. data/app/controllers/project_tickets_sync_controller.rb +22 -0
  267. data/app/controllers/projects_controller.rb +97 -0
  268. data/app/controllers/releases_controller.rb +130 -0
  269. data/app/controllers/reports_controller.rb +215 -0
  270. data/app/controllers/sessions_controller.rb +8 -0
  271. data/app/controllers/settings_controller.rb +14 -0
  272. data/app/controllers/sprint_task_locks_controller.rb +47 -0
  273. data/app/controllers/sprints_controller.rb +99 -0
  274. data/app/controllers/tasks_controller.rb +40 -0
  275. data/app/controllers/test_runs_controller.rb +35 -0
  276. data/app/controllers/tester_bar_controller.rb +12 -0
  277. data/app/controllers/testing_notes_controller.rb +50 -0
  278. data/app/controllers/testing_report_controller.rb +38 -0
  279. data/app/controllers/tickets_controller.rb +48 -0
  280. data/app/controllers/uploads_controller.rb +56 -0
  281. data/app/controllers/user_credentials_controller.rb +24 -0
  282. data/app/controllers/user_options_controller.rb +19 -0
  283. data/app/controllers/users_controller.rb +115 -0
  284. data/app/controllers/welcome_controller.rb +28 -0
  285. data/app/helpers/ansi_helper.rb +46 -0
  286. data/app/helpers/application_helper.rb +97 -0
  287. data/app/helpers/avatar_helper.rb +32 -0
  288. data/app/helpers/backtrace_helper.rb +7 -0
  289. data/app/helpers/breadcrumbs_helper.rb +60 -0
  290. data/app/helpers/commit_helper.rb +60 -0
  291. data/app/helpers/demo_helper.rb +23 -0
  292. data/app/helpers/email_helper.rb +13 -0
  293. data/app/helpers/emoji_helper.rb +13 -0
  294. data/app/helpers/excel_helpers.rb +7 -0
  295. data/app/helpers/exposure_helper.rb +11 -0
  296. data/app/helpers/flash_message_helper.rb +22 -0
  297. data/app/helpers/maintenance_light_helper.rb +19 -0
  298. data/app/helpers/markdown_helper.rb +17 -0
  299. data/app/helpers/navigation_helper.rb +67 -0
  300. data/app/helpers/project_helper.rb +33 -0
  301. data/app/helpers/release_helper.rb +47 -0
  302. data/app/helpers/score_card_helper.rb +85 -0
  303. data/app/helpers/sprint_helper.rb +11 -0
  304. data/app/helpers/static_chart_helper.rb +7 -0
  305. data/app/helpers/test_run_helper.rb +36 -0
  306. data/app/helpers/ticket_helper.rb +70 -0
  307. data/app/helpers/timeline_helper.rb +39 -0
  308. data/app/helpers/url_helper.rb +75 -0
  309. data/app/helpers/user_helper.rb +15 -0
  310. data/app/helpers/version_helper.rb +9 -0
  311. data/app/interactors/push_gemfile_to_gemnasium.rb +88 -0
  312. data/app/interactors/test_run_comparer.rb +46 -0
  313. data/app/interactors/ticket_report.rb +66 -0
  314. data/app/jobs/sync_all_tickets_job.rb +48 -0
  315. data/app/jobs/sync_commits_job.rb +13 -0
  316. data/app/jobs/sync_project_tickets_job.rb +32 -0
  317. data/app/mailers/.gitkeep +0 -0
  318. data/app/mailers/.keep +0 -0
  319. data/app/mailers/deploy_notification.rb +33 -0
  320. data/app/mailers/project_notification.rb +131 -0
  321. data/app/mailers/view_mailer.rb +117 -0
  322. data/app/models/.gitkeep +0 -0
  323. data/app/models/.keep +0 -0
  324. data/app/models/ability.rb +53 -0
  325. data/app/models/activity_feed.rb +111 -0
  326. data/app/models/antecedent.rb +15 -0
  327. data/app/models/code_climate/coverage_report.rb +167 -0
  328. data/app/models/commit.rb +255 -0
  329. data/app/models/concerns/.keep +0 -0
  330. data/app/models/consumer_token.rb +13 -0
  331. data/app/models/deploy.rb +103 -0
  332. data/app/models/environment.rb +39 -0
  333. data/app/models/gemnasium/alert.rb +25 -0
  334. data/app/models/github/comment_event.rb +29 -0
  335. data/app/models/github/commit_comment_event.rb +7 -0
  336. data/app/models/github/commit_status_report.rb +73 -0
  337. data/app/models/github/diff_comment_event.rb +7 -0
  338. data/app/models/github/event.rb +20 -0
  339. data/app/models/github/issue_comment_event.rb +16 -0
  340. data/app/models/github/post_receive_event.rb +14 -0
  341. data/app/models/github/pull_request.rb +133 -0
  342. data/app/models/github/pull_request_event.rb +43 -0
  343. data/app/models/github/unauthorized.rb +4 -0
  344. data/app/models/github_token.rb +8 -0
  345. data/app/models/historical_head.rb +5 -0
  346. data/app/models/key_dependency.rb +45 -0
  347. data/app/models/maintenance_light.rb +12 -0
  348. data/app/models/measurement.rb +110 -0
  349. data/app/models/menu_item.rb +19 -0
  350. data/app/models/menu_item_divider.rb +11 -0
  351. data/app/models/milestone.rb +106 -0
  352. data/app/models/output_stream.rb +26 -0
  353. data/app/models/post_receive_payload.rb +30 -0
  354. data/app/models/project.rb +247 -0
  355. data/app/models/project_dependencies.rb +52 -0
  356. data/app/models/project_dependency.rb +108 -0
  357. data/app/models/project_menu_item.rb +12 -0
  358. data/app/models/release.rb +217 -0
  359. data/app/models/release_change.rb +54 -0
  360. data/app/models/role.rb +55 -0
  361. data/app/models/rubygems/gem.rb +76 -0
  362. data/app/models/run_tests_on_post_receive.rb +180 -0
  363. data/app/models/setting.rb +10 -0
  364. data/app/models/settings.rb +38 -0
  365. data/app/models/source_file_coverage.rb +10 -0
  366. data/app/models/sprint.rb +75 -0
  367. data/app/models/sprint_report.rb +56 -0
  368. data/app/models/sprint_task.rb +32 -0
  369. data/app/models/static_chart.rb +137 -0
  370. data/app/models/static_chart/area.rb +70 -0
  371. data/app/models/task.rb +217 -0
  372. data/app/models/test.rb +8 -0
  373. data/app/models/test_error.rb +8 -0
  374. data/app/models/test_result.rb +10 -0
  375. data/app/models/test_run.rb +366 -0
  376. data/app/models/test_run_statistics.rb +54 -0
  377. data/app/models/testing_note.rb +64 -0
  378. data/app/models/ticket.rb +368 -0
  379. data/app/models/ticket_antecedent.rb +39 -0
  380. data/app/models/ticket_comment.rb +21 -0
  381. data/app/models/ticket_committer.rb +11 -0
  382. data/app/models/ticket_tag.rb +25 -0
  383. data/app/models/user.rb +160 -0
  384. data/app/models/user_credentials.rb +48 -0
  385. data/app/models/value_statement.rb +9 -0
  386. data/app/presenters/commit_presenter.rb +52 -0
  387. data/app/presenters/full_ticket_presenter.rb +78 -0
  388. data/app/presenters/one_or_many.rb +22 -0
  389. data/app/presenters/problem_presenter.rb +49 -0
  390. data/app/presenters/release_presenter.rb +20 -0
  391. data/app/presenters/sprint_task_presenter.rb +49 -0
  392. data/app/presenters/task_presenter.rb +44 -0
  393. data/app/presenters/tasks_excel_presenter.rb +107 -0
  394. data/app/presenters/tester_presenter.rb +15 -0
  395. data/app/presenters/testing_note_presenter.rb +27 -0
  396. data/app/presenters/testing_report_ticket_presenter.rb +71 -0
  397. data/app/presenters/ticket_presenter.rb +36 -0
  398. data/app/views/activity/_events.html.erb +24 -0
  399. data/app/views/commits/show.html.erb +49 -0
  400. data/app/views/configuration_error/_invalid_repo.html.erb +7 -0
  401. data/app/views/configuration_error/_no_ticket_tracker.html.erb +7 -0
  402. data/app/views/configuration_error/_no_version_control.html.erb +7 -0
  403. data/app/views/deploys/show.html.erb +39 -0
  404. data/app/views/devise/_links.erb +25 -0
  405. data/app/views/devise/confirmations/new.html.erb +12 -0
  406. data/app/views/devise/invitations/edit.html.erb +26 -0
  407. data/app/views/devise/invitations/new.html.erb +12 -0
  408. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  409. data/app/views/devise/mailer/invitation_instructions.html.erb +8 -0
  410. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  411. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  412. data/app/views/devise/passwords/edit.html.erb +28 -0
  413. data/app/views/devise/passwords/new.html.erb +19 -0
  414. data/app/views/devise/registrations/edit.html.erb +25 -0
  415. data/app/views/devise/registrations/new.html.erb +18 -0
  416. data/app/views/devise/sessions/new.html.erb +43 -0
  417. data/app/views/devise/unlocks/new.html.erb +12 -0
  418. data/app/views/home/index.html.erb +0 -0
  419. data/app/views/jobs/show.html.erb +82 -0
  420. data/app/views/layouts/_navigation.html.erb +96 -0
  421. data/app/views/layouts/_tester_bar.html.erb +6 -0
  422. data/app/views/layouts/application.html.erb +83 -0
  423. data/app/views/layouts/dashboard.html.erb +48 -0
  424. data/app/views/layouts/email.html.erb +217 -0
  425. data/app/views/layouts/minimal.html.erb +54 -0
  426. data/app/views/layouts/naked_dashboard.html.erb +46 -0
  427. data/app/views/oauth_consumers/error.html.erb +5 -0
  428. data/app/views/oauth_consumers/index.html.erb +29 -0
  429. data/app/views/oauth_consumers/show.html.erb +7 -0
  430. data/app/views/project_notification/ci_configuration_error.html.erb +15 -0
  431. data/app/views/project_notification/follow_up.html.erb +26 -0
  432. data/app/views/project_notification/new_release.html.erb +31 -0
  433. data/app/views/project_notification/test_run.html.erb +141 -0
  434. data/app/views/project_notification/testing_note.html.erb +9 -0
  435. data/app/views/project_pretickets/show.html.erb +49 -0
  436. data/app/views/project_tickets/_tickets.html.erb +37 -0
  437. data/app/views/project_tickets/bugs.html.erb +13 -0
  438. data/app/views/project_tickets/ideas.html.erb +13 -0
  439. data/app/views/project_tickets/index.html.erb +13 -0
  440. data/app/views/project_tickets/index.xls.erb +130 -0
  441. data/app/views/project_tickets/new.html.erb +18 -0
  442. data/app/views/project_tickets/no_ticket_tracker.html.erb +8 -0
  443. data/app/views/project_tickets/open.html.erb +13 -0
  444. data/app/views/project_tickets/open_bugs.html.erb +13 -0
  445. data/app/views/project_tickets/open_ideas.html.erb +13 -0
  446. data/app/views/project_tickets/show.html.erb +76 -0
  447. data/app/views/projects/_form.html.erb +174 -0
  448. data/app/views/projects/_header.html.erb +11 -0
  449. data/app/views/projects/_keyboard_shortcuts.html.erb +8 -0
  450. data/app/views/projects/_new_ticket.html.erb +8 -0
  451. data/app/views/projects/_ticket_tracker_refresh.html.erb +4 -0
  452. data/app/views/projects/edit.html.erb +3 -0
  453. data/app/views/projects/index.html.erb +157 -0
  454. data/app/views/projects/new.html.erb +7 -0
  455. data/app/views/releases/_antecedents.html.erb +12 -0
  456. data/app/views/releases/_changelog.html.erb +48 -0
  457. data/app/views/releases/_commits.html.erb +18 -0
  458. data/app/views/releases/_form.html.erb +126 -0
  459. data/app/views/releases/_new_release.html.erb +15 -0
  460. data/app/views/releases/_tickets.html.erb +12 -0
  461. data/app/views/releases/edit.html.erb +19 -0
  462. data/app/views/releases/index.html.erb +80 -0
  463. data/app/views/releases/new.html.erb +72 -0
  464. data/app/views/releases/show.html.erb +3 -0
  465. data/app/views/reports/index.html.erb +9 -0
  466. data/app/views/reports/sprint.html.erb +21 -0
  467. data/app/views/reports/velocity.html.erb +104 -0
  468. data/app/views/settings/show.html.erb +20 -0
  469. data/app/views/sprints/dashboard.html.erb +29 -0
  470. data/app/views/sprints/show.html.erb +39 -0
  471. data/app/views/test_runs/confirm_retry.html.erb +3 -0
  472. data/app/views/testing_report/_scripts.html.erb +12 -0
  473. data/app/views/testing_report/index.html.erb +31 -0
  474. data/app/views/testing_report/show.html.erb +29 -0
  475. data/app/views/tickets/new.html.erb +18 -0
  476. data/app/views/users/_form.html.erb +115 -0
  477. data/app/views/users/_header.html.erb +10 -0
  478. data/app/views/users/edit.html.erb +3 -0
  479. data/app/views/users/index.html.erb +80 -0
  480. data/app/views/users/new.html.erb +8 -0
  481. data/app/views/users/show.html.erb +13 -0
  482. data/app/views/welcome/_tdl.html.erb +31 -0
  483. data/app/views/welcome/index.html.erb +29 -0
  484. data/bin/bundle +3 -0
  485. data/bin/rails +4 -0
  486. data/bin/rake +4 -0
  487. data/config/application.rb +91 -0
  488. data/config/boot.rb +4 -0
  489. data/config/database.yml +21 -0
  490. data/config/environment.rb +5 -0
  491. data/config/environments/development.rb +48 -0
  492. data/config/environments/production.rb +86 -0
  493. data/config/environments/test.rb +45 -0
  494. data/config/initializers/action_view_field_error_proc.rb +30 -0
  495. data/config/initializers/add_navigation_renderers.rb +66 -0
  496. data/config/initializers/assets.rb +9 -0
  497. data/config/initializers/backtrace_silencers.rb +7 -0
  498. data/config/initializers/constants.rb +9 -0
  499. data/config/initializers/cookies_serializer.rb +3 -0
  500. data/config/initializers/devise.rb +287 -0
  501. data/config/initializers/filter_parameter_logging.rb +4 -0
  502. data/config/initializers/hard_coded_knowledge.rb +141 -0
  503. data/config/initializers/houston_async.rb +13 -0
  504. data/config/initializers/houston_benchmark.rb +11 -0
  505. data/config/initializers/houston_report_exception.rb +27 -0
  506. data/config/initializers/houston_scheduler.rb +23 -0
  507. data/config/initializers/houston_tdl.rb +104 -0
  508. data/config/initializers/houston_try.rb +24 -0
  509. data/config/initializers/inflections.rb +16 -0
  510. data/config/initializers/mime_types.rb +5 -0
  511. data/config/initializers/oauth_consumers.rb +18 -0
  512. data/config/initializers/profile_gc.rb +1 -0
  513. data/config/initializers/requirements.rb +4 -0
  514. data/config/initializers/run_tests_on_post_receive.rb +1 -0
  515. data/config/initializers/secret_token.rb +16 -0
  516. data/config/initializers/session_store.rb +3 -0
  517. data/config/initializers/sync_commits_on_post_receive.rb +8 -0
  518. data/config/initializers/unfuddle.rb +6 -0
  519. data/config/initializers/vestal_versions.rb +9 -0
  520. data/config/initializers/wrap_parameters.rb +14 -0
  521. data/config/locales/devise.en.yml +59 -0
  522. data/config/locales/devise_invitable.en.yml +10 -0
  523. data/config/locales/en.yml +23 -0
  524. data/config/routes.rb +279 -0
  525. data/db/fixtures/projects.yml +21 -0
  526. data/db/fixtures/roles.yml +9 -0
  527. data/db/fixtures/users.yml +36 -0
  528. data/db/migrate/20120324185914_create_projects.rb +12 -0
  529. data/db/migrate/20120324202224_create_environments.rb +11 -0
  530. data/db/migrate/20120324212848_create_releases.rb +12 -0
  531. data/db/migrate/20120324212946_create_changes.rb +11 -0
  532. data/db/migrate/20120324230038_create_commits.rb +13 -0
  533. data/db/migrate/20120406185643_add_initial_commit_to_environments.rb +5 -0
  534. data/db/migrate/20120408155047_add_kanban_fields_to_projects.rb +9 -0
  535. data/db/migrate/20120417175450_devise_create_users.rb +52 -0
  536. data/db/migrate/20120417175841_devise_invitable_add_to_users.rb +23 -0
  537. data/db/migrate/20120417190504_add_role_to_users.rb +5 -0
  538. data/db/migrate/20120417195313_create_tickets.rb +12 -0
  539. data/db/migrate/20120417195433_create_ticket_queues.rb +11 -0
  540. data/db/migrate/20120424212706_create_testing_notes.rb +14 -0
  541. data/db/migrate/20120501230243_add_unfuddle_id_to_tickets.rb +9 -0
  542. data/db/migrate/20120501231817_add_expires_at_to_testing_notes.rb +5 -0
  543. data/db/migrate/20120501231948_add_unfuddle_id_to_testing_notes.rb +5 -0
  544. data/db/migrate/20120504143615_link_tickets_and_releases.rb +19 -0
  545. data/db/migrate/20120525013703_add_health_fields_to_projects.rb +6 -0
  546. data/db/migrate/20120607124115_add_cached_queries_to_projects.rb +5 -0
  547. data/db/migrate/20120626140242_add_deployment_to_tickets.rb +5 -0
  548. data/db/migrate/20120626150333_add_last_release_at_to_tickets.rb +14 -0
  549. data/db/migrate/20120626151320_link_tickets_and_commits.rb +17 -0
  550. data/db/migrate/20120626152020_add_committer_email_to_commits.rb +13 -0
  551. data/db/migrate/20120626152949_replace_committer_info_with_author_info.rb +12 -0
  552. data/db/migrate/20120715230526_change_testing_notes_comment_to_text.rb +9 -0
  553. data/db/migrate/20120715230922_create_user_notifications.rb +19 -0
  554. data/db/migrate/20120716010743_add_user_to_releases.rb +14 -0
  555. data/db/migrate/20120726212620_add_message_to_release.rb +5 -0
  556. data/db/migrate/20120726231754_link_projects_and_maintainers.rb +22 -0
  557. data/db/migrate/20120804003344_add_goldmine_to_tickets.rb +5 -0
  558. data/db/migrate/20120823025935_add_errbit_app_id_to_projects.rb +5 -0
  559. data/db/migrate/20120826022643_add_authentication_token_to_users.rb +13 -0
  560. data/db/migrate/20120827190634_add_git_last_sync_at_to_projects.rb +5 -0
  561. data/db/migrate/20120913020218_add_new_relic_id_to_projects.rb +5 -0
  562. data/db/migrate/20120920023251_add_administrator_to_users.rb +17 -0
  563. data/db/migrate/20120922010212_add_unfuddle_id_to_users.rb +5 -0
  564. data/db/migrate/20121026014457_split_users_name_into_first_and_last.rb +22 -0
  565. data/db/migrate/20121027160548_create_deploys.rb +11 -0
  566. data/db/migrate/20121027171215_add_deploy_id_to_releases.rb +6 -0
  567. data/db/migrate/20121104233305_add_tag_slug_to_changes.rb +5 -0
  568. data/db/migrate/20121126005019_add_retired_at_to_projects.rb +5 -0
  569. data/db/migrate/20121214025558_add_estimated_effort_and_estimated_value_to_tickets.rb +6 -0
  570. data/db/migrate/20121219202734_add_category_to_projects.rb +5 -0
  571. data/db/migrate/20121220031008_add_expires_at_to_tickets.rb +5 -0
  572. data/db/migrate/20121222170917_add_version_control_adapter_to_projects.rb +17 -0
  573. data/db/migrate/20121222223325_remove_unused_fields_from_projects.rb +21 -0
  574. data/db/migrate/20121222223635_add_ticket_tracking_adapter_to_projects.rb +17 -0
  575. data/db/migrate/20121224212623_rename_environments.rb +29 -0
  576. data/db/migrate/20121225175106_replace_environment_id_with_environment_name.rb +39 -0
  577. data/db/migrate/20121230173644_setup_hstore.rb +9 -0
  578. data/db/migrate/20121230174234_create_test_runs.rb +22 -0
  579. data/db/migrate/20130105200429_add_c_i_adapter_to_projects.rb +5 -0
  580. data/db/migrate/20130106184327_replace_test_runs_details_with_tests.rb +11 -0
  581. data/db/migrate/20130106185425_add_total_count_to_test_runs.rb +5 -0
  582. data/db/migrate/20130119203853_remove_cached_queries_from_projects.rb +9 -0
  583. data/db/migrate/20130119204608_add_extended_attributes_to_tickets.rb +35 -0
  584. data/db/migrate/20130119211540_remove_estimated_effort_and_estimated_value_from_tickets.rb +11 -0
  585. data/db/migrate/20130119212008_rename_tickets_unfuddle_id_to_remote_id.rb +5 -0
  586. data/db/migrate/20130120182026_create_ticket_prerequisites.rb +13 -0
  587. data/db/migrate/20130211015046_add_min_passing_verdicts_to_projects.rb +5 -0
  588. data/db/migrate/20130302205014_change_default_role_for_users.rb +8 -0
  589. data/db/migrate/20130306023456_add_agent_email_to_test_runs.rb +5 -0
  590. data/db/migrate/20130306023613_add_branch_to_test_runs.rb +5 -0
  591. data/db/migrate/20130312224911_create_errors.rb +12 -0
  592. data/db/migrate/20130319003918_add_coverage_to_test_runs.rb +7 -0
  593. data/db/migrate/20130407195450_create_roles.rb +14 -0
  594. data/db/migrate/20130407200624_populate_roles.rb +43 -0
  595. data/db/migrate/20130407220039_add_project_id_to_testing_notes.rb +26 -0
  596. data/db/migrate/20130407220937_add_project_id_to_commits.rb +26 -0
  597. data/db/migrate/20130416020627_add_environments_subscribed_to_to_users.rb +17 -0
  598. data/db/migrate/20130420151334_rename_ticket_tracking_to_ticket_tracker.rb +6 -0
  599. data/db/migrate/20130420155332_rename_projects_version_control_adapter_to_version_control_name.rb +5 -0
  600. data/db/migrate/20130420172322_rename_projects_ci_adapter_to_ci_server_name.rb +5 -0
  601. data/db/migrate/20130420174002_rename_projects_errbit_app_id_to_error_tracker_id.rb +5 -0
  602. data/db/migrate/20130420174126_add_error_tracker_name_to_projects.rb +11 -0
  603. data/db/migrate/20130427223925_create_project_quotas.rb +14 -0
  604. data/db/migrate/20130428005808_create_settings.rb +8 -0
  605. data/db/migrate/20130504014802_add_extended_attributes_to_projects.rb +19 -0
  606. data/db/migrate/20130504135741_add_antecedents_to_tickets.rb +26 -0
  607. data/db/migrate/20130505144446_add_tags_to_tickets.rb +9 -0
  608. data/db/migrate/20130505162039_add_type_to_tickets.rb +9 -0
  609. data/db/migrate/20130505212838_add_closed_at_to_tickets.rb +9 -0
  610. data/db/migrate/20130518224352_drop_environments.rb +9 -0
  611. data/db/migrate/20130518224406_drop_projects_maintainers.rb +9 -0
  612. data/db/migrate/20130518224655_remove_goldmine_from_tickets.rb +9 -0
  613. data/db/migrate/20130518224722_remove_pre_adapter_fields_from_projects.rb +11 -0
  614. data/db/migrate/20130519163615_create_user_credentials.rb +18 -0
  615. data/db/migrate/20130525192607_add_reporter_email_and_reporter_id_to_tickets.rb +6 -0
  616. data/db/migrate/20130525222131_add_regression_count_to_test_runs.rb +5 -0
  617. data/db/migrate/20130526024851_give_default_values_for_counts_from_test_runs.rb +19 -0
  618. data/db/migrate/20130706141443_drop_deprecated_project_roles.rb +9 -0
  619. data/db/migrate/20130710233849_add_authored_at_to_commits.rb +52 -0
  620. data/db/migrate/20130711004558_downcase_commits_committer_emails.rb +10 -0
  621. data/db/migrate/20130711013156_link_commits_and_users.rb +35 -0
  622. data/db/migrate/20130728191005_add_retired_at_to_users.rb +5 -0
  623. data/db/migrate/20130806143651_link_commits_and_releases.rb +18 -0
  624. data/db/migrate/20130815232527_add_unreachable_to_commits.rb +6 -0
  625. data/db/migrate/20130914152419_rename_test_runs_commit_to_sha.rb +9 -0
  626. data/db/migrate/20130914155044_add_code_climate_repo_token_to_projects.rb +5 -0
  627. data/db/migrate/20130921141449_create_milestones.rb +19 -0
  628. data/db/migrate/20131002005512_add_last_ticket_tracker_sync_at_to_projects.rb +5 -0
  629. data/db/migrate/20131002015547_add_ticket_tracker_sync_started_at_to_projects.rb +5 -0
  630. data/db/migrate/20131002145620_add_destroyed_at_to_tickets.rb +6 -0
  631. data/db/migrate/20131003014023_add_destroyed_at_to_milestones.rb +6 -0
  632. data/db/migrate/20131004015452_add_resolution_to_tickets.rb +6 -0
  633. data/db/migrate/20131004185618_add_first_release_at_to_tickets.rb +14 -0
  634. data/db/migrate/20131012152403_create_sprints.rb +15 -0
  635. data/db/migrate/20131013185636_add_checked_out_to_tickets.rb +6 -0
  636. data/db/migrate/20131027214942_add_priority_to_tickets.rb +5 -0
  637. data/db/migrate/20131112010815_delete_duplicate_commits.rb +33 -0
  638. data/db/migrate/20131216014505_create_oauth_consumer_tokens.rb +20 -0
  639. data/db/migrate/20131223194246_add_reopened_at_to_tickets.rb +5 -0
  640. data/db/migrate/20140106212047_add_options_to_projects.rb +5 -0
  641. data/db/migrate/20140106212305_add_options_to_users.rb +5 -0
  642. data/db/migrate/20140114014144_add_deployer_to_deploys.rb +5 -0
  643. data/db/migrate/20140217150735_drop_table_user_notifications.rb +9 -0
  644. data/db/migrate/20140217160450_add_email_addresses_to_users.rb +18 -0
  645. data/db/migrate/20140217195942_add_prerequisites_to_tickets.rb +5 -0
  646. data/db/migrate/20140327020121_drop_ticket_prerequisites.rb +9 -0
  647. data/db/migrate/20140401234330_add_index_to_ticket_queues.rb +6 -0
  648. data/db/migrate/20140406183224_remove_new_relic_id_from_projects.rb +9 -0
  649. data/db/migrate/20140406230121_delete_automatically_generated_messages_for_releases.rb +12 -0
  650. data/db/migrate/20140407010111_drop_sprints_project_id.rb +9 -0
  651. data/db/migrate/20140411214022_add_invitation_created_at_to_user.rb +5 -0
  652. data/db/migrate/20140418133005_change_ticket_antecedents_to_text_array.rb +9 -0
  653. data/db/migrate/20140419152214_add_gemnasium_slug_to_projects.rb +5 -0
  654. data/db/migrate/20140425141946_embed_changes_in_releases.rb +19 -0
  655. data/db/migrate/20140427235508_prevent_release_changes_from_being_null.rb +6 -0
  656. data/db/migrate/20140428023146_prevent_ticket_number_from_being_null.rb +5 -0
  657. data/db/migrate/20140429000919_add_feature_states_to_projects.rb +5 -0
  658. data/db/migrate/20140506032958_add_locked_to_sprints.rb +5 -0
  659. data/db/migrate/20140506035755_create_value_statements.rb +9 -0
  660. data/db/migrate/20140511024021_rename_testing_notes_unfuddle_id_to_remote_id.rb +5 -0
  661. data/db/migrate/20140515174322_create_tasks.rb +20 -0
  662. data/db/migrate/20140515200824_link_tasks_and_commits.rb +8 -0
  663. data/db/migrate/20140516005310_link_tasks_and_releases.rb +8 -0
  664. data/db/migrate/20140516012049_create_tasks_for_existing_tickets.rb +33 -0
  665. data/db/migrate/20140517012626_prevent_hstore_fields_from_being_null.rb +22 -0
  666. data/db/migrate/20140521014652_allow_task_descriptions_to_be_null.rb +13 -0
  667. data/db/migrate/20140526155845_add_commit_id_to_deploys.rb +31 -0
  668. data/db/migrate/20140526162645_add_commit_before_id_and_commit_after_id_to_releases.rb +28 -0
  669. data/db/migrate/20140526180608_associate_remaining_deploys_and_releases.rb +60 -0
  670. data/db/migrate/20140606232907_create_vestal_versions.rb +28 -0
  671. data/db/migrate/20140724231918_create_sprints_tasks.rb +17 -0
  672. data/db/migrate/20140806233301_add_position_to_milestones.rb +5 -0
  673. data/db/migrate/20140810224209_add_size_and_units_to_milestones.rb +7 -0
  674. data/db/migrate/20140824194031_add_project_id_to_tasks.rb +11 -0
  675. data/db/migrate/20140824194526_add_completed_at_to_tasks.rb +20 -0
  676. data/db/migrate/20140824211249_require_sprints_to_be_unique.rb +9 -0
  677. data/db/migrate/20140907012329_drop_table_changes.rb +9 -0
  678. data/db/migrate/20140907013836_drop_table_errors.rb +9 -0
  679. data/db/migrate/20140921190022_add_checked_out_to_sprints_tasks.rb +19 -0
  680. data/db/migrate/20140921201441_drop_users_name.rb +9 -0
  681. data/db/migrate/20140925021043_rename_deploys_commit_to_sha.rb +17 -0
  682. data/db/migrate/20140929004347_create_historical_heads.rb +23 -0
  683. data/db/migrate/20141027194819_make_users_environments_subscribed_to_an_array.rb +18 -0
  684. data/db/migrate/20141202004123_add_duration_to_deploys.rb +5 -0
  685. data/db/migrate/20141226171730_create_measurements.rb +17 -0
  686. data/db/migrate/20150116153233_add_timestamps_to_measurements.rb +6 -0
  687. data/db/migrate/20150119154013_drop_unused_fields_from_milestones.rb +13 -0
  688. data/db/migrate/20150220215154_add_branch_to_deploys.rb +5 -0
  689. data/db/migrate/20150222205616_add_features_to_projects.rb +12 -0
  690. data/db/migrate/20150222214124_add_current_project_to_users.rb +5 -0
  691. data/db/migrate/20150223013721_add_nickname_to_users.rb +5 -0
  692. data/db/migrate/20150302153319_add_username_to_users.rb +5 -0
  693. data/db/migrate/20150323004452_add_deploys_completed_at.rb +10 -0
  694. data/db/migrate/20150323011050_add_output_to_deploy.rb +5 -0
  695. data/db/migrate/20150805180939_add_commit_id_to_test_runs.rb +30 -0
  696. data/db/migrate/20150805233946_add_user_id_to_test_runs.rb +23 -0
  697. data/db/migrate/20150806032230_create_tests.rb +33 -0
  698. data/db/migrate/20150808161729_create_test_errors.rb +10 -0
  699. data/db/migrate/20150808161805_create_test_results.rb +72 -0
  700. data/db/migrate/20150808162928_index_test_runs_on_commit_id.rb +5 -0
  701. data/db/migrate/20150808192103_index_commits_on_sha.rb +5 -0
  702. data/db/migrate/20150808193354_add_parent_sha_to_commits.rb +43 -0
  703. data/db/migrate/20150809132417_rename_test_results_regression_to_difference.rb +11 -0
  704. data/db/migrate/20150809201942_add_compared_to_test_runs.rb +5 -0
  705. data/db/migrate/20150817232311_create_pull_requests.rb +25 -0
  706. data/db/migrate/20150820023708_add_labels_to_pull_requests.rb +5 -0
  707. data/db/migrate/20150902005758_downcase_environment_names.rb +19 -0
  708. data/db/migrate/20150902010629_add_user_id_to_deploys.rb +5 -0
  709. data/db/migrate/20150902010853_populate_deploys_user.rb +13 -0
  710. data/db/seeds.rb +9 -0
  711. data/db/structure.sql +2282 -0
  712. data/houston.gemspec +99 -0
  713. data/lib/configuration.rb +764 -0
  714. data/lib/core_ext/duration.rb +21 -0
  715. data/lib/core_ext/exception.rb +7 -0
  716. data/lib/core_ext/hash.rb +51 -0
  717. data/lib/core_ext/kernel.rb +23 -0
  718. data/lib/houston/application.rb +1 -0
  719. data/lib/houston/version.rb +3 -0
  720. data/lib/houston_daemonize.rb +37 -0
  721. data/lib/houston_observer.rb +69 -0
  722. data/lib/houston_server.rb +31 -0
  723. data/lib/parallel_enumerable.rb +56 -0
  724. data/lib/patches/sprockets_output_path_for_assets.rb +29 -0
  725. data/lib/tasks/.gitkeep +0 -0
  726. data/lib/tasks/.keep +0 -0
  727. data/lib/tasks/config.rake +255 -0
  728. data/lib/tasks/keypair.rake +18 -0
  729. data/lib/unexpected_response.rb +22 -0
  730. data/log/.gitkeep +0 -0
  731. data/log/.keep +0 -0
  732. data/script/bootstrap +14 -0
  733. data/script/cibuild +9 -0
  734. data/support/award.ai +4409 -19
  735. data/support/badges.ai +4621 -19
  736. data/support/bugs-1.ai +1364 -1
  737. data/support/bugs-2.ai +806 -1
  738. data/support/chevron.ai +4431 -19
  739. data/support/favicon.psd +0 -0
  740. data/support/flask.ai +386 -1
  741. data/support/headings.ai +394 -0
  742. data/support/new-window-link-12.gif +0 -0
  743. data/support/newrelic.ai +204 -0
  744. data/support/newrelic.png +0 -0
  745. data/support/wrench.ai +4389 -20
  746. data/vendor/assets/javascripts/.gitkeep +0 -0
  747. data/vendor/assets/javascripts/.keep +0 -0
  748. data/vendor/assets/javascripts/Markdown.Converter.js +1412 -0
  749. data/vendor/assets/javascripts/alertify.js +1 -0
  750. data/vendor/assets/javascripts/bootstrap.js +2280 -0
  751. data/vendor/assets/javascripts/d3.v3.js +9274 -0
  752. data/vendor/assets/javascripts/dropzone.js +1728 -0
  753. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.accordion.js +572 -0
  754. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.autocomplete.js +608 -0
  755. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.button.js +419 -0
  756. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.core.js +324 -0
  757. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.datepicker.js +2050 -0
  758. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.dialog.js +799 -0
  759. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.draggable.js +943 -0
  760. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.droppable.js +371 -0
  761. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.effect-blind.js +82 -0
  762. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.effect-bounce.js +113 -0
  763. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.effect-clip.js +67 -0
  764. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.effect-drop.js +65 -0
  765. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.effect-explode.js +97 -0
  766. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.effect-fade.js +30 -0
  767. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.effect-fold.js +76 -0
  768. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.effect-highlight.js +50 -0
  769. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.effect-pulsate.js +63 -0
  770. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.effect-scale.js +318 -0
  771. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.effect-shake.js +74 -0
  772. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.effect-slide.js +64 -0
  773. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.effect-transfer.js +47 -0
  774. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.effect.js +1268 -0
  775. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.menu.js +621 -0
  776. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.mouse.js +169 -0
  777. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.position.js +497 -0
  778. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.progressbar.js +145 -0
  779. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.resizable.js +946 -0
  780. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.selectable.js +277 -0
  781. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.slider.js +672 -0
  782. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.sortable.js +1250 -0
  783. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.spinner.js +492 -0
  784. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.tabs.js +846 -0
  785. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.tooltip.js +402 -0
  786. data/vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.widget.js +521 -0
  787. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery-ui-i18n.js +1379 -0
  788. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-af.js +23 -0
  789. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-ar-DZ.js +23 -0
  790. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-ar.js +23 -0
  791. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-az.js +23 -0
  792. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-bg.js +24 -0
  793. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-bs.js +23 -0
  794. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-ca.js +23 -0
  795. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-cs.js +23 -0
  796. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-da.js +23 -0
  797. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-de.js +23 -0
  798. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-el.js +23 -0
  799. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-en-AU.js +23 -0
  800. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-en-GB.js +23 -0
  801. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-en-NZ.js +23 -0
  802. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-eo.js +23 -0
  803. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-es.js +23 -0
  804. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-et.js +23 -0
  805. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-eu.js +23 -0
  806. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-fa.js +23 -0
  807. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-fi.js +23 -0
  808. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-fo.js +23 -0
  809. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-fr-CH.js +23 -0
  810. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-fr.js +25 -0
  811. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-gl.js +23 -0
  812. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-he.js +23 -0
  813. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-hr.js +23 -0
  814. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-hu.js +23 -0
  815. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-hy.js +23 -0
  816. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-id.js +23 -0
  817. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-is.js +23 -0
  818. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-it.js +23 -0
  819. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-ja.js +23 -0
  820. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-ko.js +23 -0
  821. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-kz.js +23 -0
  822. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-lt.js +23 -0
  823. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-lv.js +23 -0
  824. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-ml.js +23 -0
  825. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-ms.js +23 -0
  826. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-nl.js +23 -0
  827. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-no.js +23 -0
  828. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-pl.js +23 -0
  829. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-pt-BR.js +23 -0
  830. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-pt.js +22 -0
  831. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-rm.js +21 -0
  832. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-ro.js +26 -0
  833. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-ru.js +23 -0
  834. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-sk.js +23 -0
  835. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-sl.js +24 -0
  836. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-sq.js +23 -0
  837. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-sr-SR.js +23 -0
  838. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-sr.js +23 -0
  839. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-sv.js +23 -0
  840. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-ta.js +23 -0
  841. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-th.js +23 -0
  842. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-tj.js +23 -0
  843. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-tr.js +23 -0
  844. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-uk.js +23 -0
  845. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-vi.js +23 -0
  846. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-zh-CN.js +23 -0
  847. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-zh-HK.js +23 -0
  848. data/vendor/assets/javascripts/jquery-ui-1.8.4/i18n/jquery.ui.datepicker-zh-TW.js +23 -0
  849. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.effects.blind.js +49 -0
  850. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.effects.bounce.js +78 -0
  851. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.effects.clip.js +54 -0
  852. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.effects.core.js +746 -0
  853. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.effects.drop.js +50 -0
  854. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.effects.explode.js +79 -0
  855. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.effects.fade.js +32 -0
  856. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.effects.fold.js +56 -0
  857. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.effects.highlight.js +49 -0
  858. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.effects.pulsate.js +51 -0
  859. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.effects.scale.js +178 -0
  860. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.effects.shake.js +57 -0
  861. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.effects.slide.js +50 -0
  862. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.effects.transfer.js +45 -0
  863. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.accordion.js +611 -0
  864. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.autocomplete.js +612 -0
  865. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.button.js +416 -0
  866. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.core.js +312 -0
  867. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.datepicker.js +1814 -0
  868. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.dialog.js +879 -0
  869. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.draggable.js +823 -0
  870. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.droppable.js +296 -0
  871. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.mouse.js +160 -0
  872. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.position.js +252 -0
  873. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.progressbar.js +109 -0
  874. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.resizable.js +842 -0
  875. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.selectable.js +266 -0
  876. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.slider.js +666 -0
  877. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.sortable.js +1077 -0
  878. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.tabs.js +758 -0
  879. data/vendor/assets/javascripts/jquery-ui-1.8.4/jquery.ui.widget.js +262 -0
  880. data/vendor/assets/javascripts/jquery-ui.js +55 -0
  881. data/vendor/assets/javascripts/jquery.autosize.js +242 -0
  882. data/vendor/assets/javascripts/jquery.pjax.js +817 -0
  883. data/vendor/assets/javascripts/jquery.tablesorter.js +1032 -0
  884. data/vendor/assets/javascripts/jquery.timeago.js +214 -0
  885. data/vendor/assets/javascripts/md5.js +202 -0
  886. data/vendor/assets/javascripts/mousetrap.js +953 -0
  887. data/vendor/assets/stylesheets/.gitkeep +0 -0
  888. data/vendor/assets/stylesheets/.keep +0 -0
  889. data/vendor/assets/stylesheets/alertify-bootstrap-3.css +2 -0
  890. data/vendor/assets/stylesheets/alertify-bootstrap.css +2 -0
  891. data/vendor/assets/stylesheets/alertify.css +2 -0
  892. data/vendor/assets/stylesheets/bootstrap-responsive.css +800 -0
  893. data/vendor/assets/stylesheets/bootstrap.css +6163 -0
  894. data/vendor/assets/stylesheets/jquery-ui-1.10.1/jquery.ui.accordion.css +38 -0
  895. data/vendor/assets/stylesheets/jquery-ui-1.10.1/jquery.ui.autocomplete.css +16 -0
  896. data/vendor/assets/stylesheets/jquery-ui-1.10.1/jquery.ui.button.css +114 -0
  897. data/vendor/assets/stylesheets/jquery-ui-1.10.1/jquery.ui.core.css +93 -0
  898. data/vendor/assets/stylesheets/jquery-ui-1.10.1/jquery.ui.datepicker.css +178 -0
  899. data/vendor/assets/stylesheets/jquery-ui-1.10.1/jquery.ui.dialog.css +69 -0
  900. data/vendor/assets/stylesheets/jquery-ui-1.10.1/jquery.ui.menu.css +77 -0
  901. data/vendor/assets/stylesheets/jquery-ui-1.10.1/jquery.ui.progressbar.css +28 -0
  902. data/vendor/assets/stylesheets/jquery-ui-1.10.1/jquery.ui.resizable.css +78 -0
  903. data/vendor/assets/stylesheets/jquery-ui-1.10.1/jquery.ui.selectable.css +15 -0
  904. data/vendor/assets/stylesheets/jquery-ui-1.10.1/jquery.ui.slider.css +73 -0
  905. data/vendor/assets/stylesheets/jquery-ui-1.10.1/jquery.ui.spinner.css +65 -0
  906. data/vendor/assets/stylesheets/jquery-ui-1.10.1/jquery.ui.tabs.css +52 -0
  907. data/vendor/assets/stylesheets/jquery-ui-1.10.1/jquery.ui.theme.css +406 -0
  908. data/vendor/assets/stylesheets/jquery-ui-1.10.1/jquery.ui.tooltip.css +19 -0
  909. data/vendor/assets/stylesheets/jquery-ui.css +28 -0
  910. data/vendor/images/fa-bank.svg +9 -0
  911. data/vendor/images/fa-bell.svg +9 -0
  912. data/vendor/images/fa-bomb.svg +9 -0
  913. data/vendor/images/fa-bug.svg +9 -0
  914. data/vendor/images/fa-bullhorn.svg +6 -0
  915. data/vendor/images/fa-burndown.svg +15 -0
  916. data/vendor/images/fa-calendar-o.svg +9 -0
  917. data/vendor/images/fa-comment.svg +9 -0
  918. data/vendor/images/fa-comments.svg +9 -0
  919. data/vendor/images/fa-database.svg +9 -0
  920. data/vendor/images/fa-fire-extinguisher.svg +9 -0
  921. data/vendor/images/fa-gear.svg +6 -0
  922. data/vendor/images/fa-lightbulb-o.svg +9 -0
  923. data/vendor/images/fa-paper-plane.svg +9 -0
  924. data/vendor/images/fa-road.svg +9 -0
  925. data/vendor/images/fa-user.svg +9 -0
  926. metadata +1611 -0
@@ -0,0 +1,64 @@
1
+ /*!
2
+ * jQuery UI Effects Slide 1.10.1
3
+ * http://jqueryui.com
4
+ *
5
+ * Copyright 2013 jQuery Foundation and other contributors
6
+ * Released under the MIT license.
7
+ * http://jquery.org/license
8
+ *
9
+ * http://api.jqueryui.com/slide-effect/
10
+ *
11
+ * Depends:
12
+ * jquery.ui.effect.js
13
+ */
14
+ (function( $, undefined ) {
15
+
16
+ $.effects.effect.slide = function( o, done ) {
17
+
18
+ // Create element
19
+ var el = $( this ),
20
+ props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
21
+ mode = $.effects.setMode( el, o.mode || "show" ),
22
+ show = mode === "show",
23
+ direction = o.direction || "left",
24
+ ref = (direction === "up" || direction === "down") ? "top" : "left",
25
+ positiveMotion = (direction === "up" || direction === "left"),
26
+ distance,
27
+ animation = {};
28
+
29
+ // Adjust
30
+ $.effects.save( el, props );
31
+ el.show();
32
+ distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
33
+
34
+ $.effects.createWrapper( el ).css({
35
+ overflow: "hidden"
36
+ });
37
+
38
+ if ( show ) {
39
+ el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
40
+ }
41
+
42
+ // Animation
43
+ animation[ ref ] = ( show ?
44
+ ( positiveMotion ? "+=" : "-=") :
45
+ ( positiveMotion ? "-=" : "+=")) +
46
+ distance;
47
+
48
+ // Animate
49
+ el.animate( animation, {
50
+ queue: false,
51
+ duration: o.duration,
52
+ easing: o.easing,
53
+ complete: function() {
54
+ if ( mode === "hide" ) {
55
+ el.hide();
56
+ }
57
+ $.effects.restore( el, props );
58
+ $.effects.removeWrapper( el );
59
+ done();
60
+ }
61
+ });
62
+ };
63
+
64
+ })(jQuery);
@@ -0,0 +1,47 @@
1
+ /*!
2
+ * jQuery UI Effects Transfer 1.10.1
3
+ * http://jqueryui.com
4
+ *
5
+ * Copyright 2013 jQuery Foundation and other contributors
6
+ * Released under the MIT license.
7
+ * http://jquery.org/license
8
+ *
9
+ * http://api.jqueryui.com/transfer-effect/
10
+ *
11
+ * Depends:
12
+ * jquery.ui.effect.js
13
+ */
14
+ (function( $, undefined ) {
15
+
16
+ $.effects.effect.transfer = function( o, done ) {
17
+ var elem = $( this ),
18
+ target = $( o.to ),
19
+ targetFixed = target.css( "position" ) === "fixed",
20
+ body = $("body"),
21
+ fixTop = targetFixed ? body.scrollTop() : 0,
22
+ fixLeft = targetFixed ? body.scrollLeft() : 0,
23
+ endPosition = target.offset(),
24
+ animation = {
25
+ top: endPosition.top - fixTop ,
26
+ left: endPosition.left - fixLeft ,
27
+ height: target.innerHeight(),
28
+ width: target.innerWidth()
29
+ },
30
+ startPosition = elem.offset(),
31
+ transfer = $( "<div class='ui-effects-transfer'></div>" )
32
+ .appendTo( document.body )
33
+ .addClass( o.className )
34
+ .css({
35
+ top: startPosition.top - fixTop ,
36
+ left: startPosition.left - fixLeft ,
37
+ height: elem.innerHeight(),
38
+ width: elem.innerWidth(),
39
+ position: targetFixed ? "fixed" : "absolute"
40
+ })
41
+ .animate( animation, o.duration, o.easing, function() {
42
+ transfer.remove();
43
+ done();
44
+ });
45
+ };
46
+
47
+ })(jQuery);
@@ -0,0 +1,1268 @@
1
+ /*!
2
+ * jQuery UI Effects 1.10.1
3
+ * http://jqueryui.com
4
+ *
5
+ * Copyright 2013 jQuery Foundation and other contributors
6
+ * Released under the MIT license.
7
+ * http://jquery.org/license
8
+ *
9
+ * http://api.jqueryui.com/category/effects-core/
10
+ */
11
+ ;(jQuery.effects || (function($, undefined) {
12
+
13
+ var dataSpace = "ui-effects-";
14
+
15
+ $.effects = {
16
+ effect: {}
17
+ };
18
+
19
+ /*!
20
+ * jQuery Color Animations v2.1.2
21
+ * https://github.com/jquery/jquery-color
22
+ *
23
+ * Copyright 2013 jQuery Foundation and other contributors
24
+ * Released under the MIT license.
25
+ * http://jquery.org/license
26
+ *
27
+ * Date: Wed Jan 16 08:47:09 2013 -0600
28
+ */
29
+ (function( jQuery, undefined ) {
30
+
31
+ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
32
+
33
+ // plusequals test for += 100 -= 100
34
+ rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
35
+ // a set of RE's that can match strings and generate color tuples.
36
+ stringParsers = [{
37
+ re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
38
+ parse: function( execResult ) {
39
+ return [
40
+ execResult[ 1 ],
41
+ execResult[ 2 ],
42
+ execResult[ 3 ],
43
+ execResult[ 4 ]
44
+ ];
45
+ }
46
+ }, {
47
+ re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
48
+ parse: function( execResult ) {
49
+ return [
50
+ execResult[ 1 ] * 2.55,
51
+ execResult[ 2 ] * 2.55,
52
+ execResult[ 3 ] * 2.55,
53
+ execResult[ 4 ]
54
+ ];
55
+ }
56
+ }, {
57
+ // this regex ignores A-F because it's compared against an already lowercased string
58
+ re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
59
+ parse: function( execResult ) {
60
+ return [
61
+ parseInt( execResult[ 1 ], 16 ),
62
+ parseInt( execResult[ 2 ], 16 ),
63
+ parseInt( execResult[ 3 ], 16 )
64
+ ];
65
+ }
66
+ }, {
67
+ // this regex ignores A-F because it's compared against an already lowercased string
68
+ re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
69
+ parse: function( execResult ) {
70
+ return [
71
+ parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
72
+ parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
73
+ parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
74
+ ];
75
+ }
76
+ }, {
77
+ re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
78
+ space: "hsla",
79
+ parse: function( execResult ) {
80
+ return [
81
+ execResult[ 1 ],
82
+ execResult[ 2 ] / 100,
83
+ execResult[ 3 ] / 100,
84
+ execResult[ 4 ]
85
+ ];
86
+ }
87
+ }],
88
+
89
+ // jQuery.Color( )
90
+ color = jQuery.Color = function( color, green, blue, alpha ) {
91
+ return new jQuery.Color.fn.parse( color, green, blue, alpha );
92
+ },
93
+ spaces = {
94
+ rgba: {
95
+ props: {
96
+ red: {
97
+ idx: 0,
98
+ type: "byte"
99
+ },
100
+ green: {
101
+ idx: 1,
102
+ type: "byte"
103
+ },
104
+ blue: {
105
+ idx: 2,
106
+ type: "byte"
107
+ }
108
+ }
109
+ },
110
+
111
+ hsla: {
112
+ props: {
113
+ hue: {
114
+ idx: 0,
115
+ type: "degrees"
116
+ },
117
+ saturation: {
118
+ idx: 1,
119
+ type: "percent"
120
+ },
121
+ lightness: {
122
+ idx: 2,
123
+ type: "percent"
124
+ }
125
+ }
126
+ }
127
+ },
128
+ propTypes = {
129
+ "byte": {
130
+ floor: true,
131
+ max: 255
132
+ },
133
+ "percent": {
134
+ max: 1
135
+ },
136
+ "degrees": {
137
+ mod: 360,
138
+ floor: true
139
+ }
140
+ },
141
+ support = color.support = {},
142
+
143
+ // element for support tests
144
+ supportElem = jQuery( "<p>" )[ 0 ],
145
+
146
+ // colors = jQuery.Color.names
147
+ colors,
148
+
149
+ // local aliases of functions called often
150
+ each = jQuery.each;
151
+
152
+ // determine rgba support immediately
153
+ supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
154
+ support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
155
+
156
+ // define cache name and alpha properties
157
+ // for rgba and hsla spaces
158
+ each( spaces, function( spaceName, space ) {
159
+ space.cache = "_" + spaceName;
160
+ space.props.alpha = {
161
+ idx: 3,
162
+ type: "percent",
163
+ def: 1
164
+ };
165
+ });
166
+
167
+ function clamp( value, prop, allowEmpty ) {
168
+ var type = propTypes[ prop.type ] || {};
169
+
170
+ if ( value == null ) {
171
+ return (allowEmpty || !prop.def) ? null : prop.def;
172
+ }
173
+
174
+ // ~~ is an short way of doing floor for positive numbers
175
+ value = type.floor ? ~~value : parseFloat( value );
176
+
177
+ // IE will pass in empty strings as value for alpha,
178
+ // which will hit this case
179
+ if ( isNaN( value ) ) {
180
+ return prop.def;
181
+ }
182
+
183
+ if ( type.mod ) {
184
+ // we add mod before modding to make sure that negatives values
185
+ // get converted properly: -10 -> 350
186
+ return (value + type.mod) % type.mod;
187
+ }
188
+
189
+ // for now all property types without mod have min and max
190
+ return 0 > value ? 0 : type.max < value ? type.max : value;
191
+ }
192
+
193
+ function stringParse( string ) {
194
+ var inst = color(),
195
+ rgba = inst._rgba = [];
196
+
197
+ string = string.toLowerCase();
198
+
199
+ each( stringParsers, function( i, parser ) {
200
+ var parsed,
201
+ match = parser.re.exec( string ),
202
+ values = match && parser.parse( match ),
203
+ spaceName = parser.space || "rgba";
204
+
205
+ if ( values ) {
206
+ parsed = inst[ spaceName ]( values );
207
+
208
+ // if this was an rgba parse the assignment might happen twice
209
+ // oh well....
210
+ inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
211
+ rgba = inst._rgba = parsed._rgba;
212
+
213
+ // exit each( stringParsers ) here because we matched
214
+ return false;
215
+ }
216
+ });
217
+
218
+ // Found a stringParser that handled it
219
+ if ( rgba.length ) {
220
+
221
+ // if this came from a parsed string, force "transparent" when alpha is 0
222
+ // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
223
+ if ( rgba.join() === "0,0,0,0" ) {
224
+ jQuery.extend( rgba, colors.transparent );
225
+ }
226
+ return inst;
227
+ }
228
+
229
+ // named colors
230
+ return colors[ string ];
231
+ }
232
+
233
+ color.fn = jQuery.extend( color.prototype, {
234
+ parse: function( red, green, blue, alpha ) {
235
+ if ( red === undefined ) {
236
+ this._rgba = [ null, null, null, null ];
237
+ return this;
238
+ }
239
+ if ( red.jquery || red.nodeType ) {
240
+ red = jQuery( red ).css( green );
241
+ green = undefined;
242
+ }
243
+
244
+ var inst = this,
245
+ type = jQuery.type( red ),
246
+ rgba = this._rgba = [];
247
+
248
+ // more than 1 argument specified - assume ( red, green, blue, alpha )
249
+ if ( green !== undefined ) {
250
+ red = [ red, green, blue, alpha ];
251
+ type = "array";
252
+ }
253
+
254
+ if ( type === "string" ) {
255
+ return this.parse( stringParse( red ) || colors._default );
256
+ }
257
+
258
+ if ( type === "array" ) {
259
+ each( spaces.rgba.props, function( key, prop ) {
260
+ rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
261
+ });
262
+ return this;
263
+ }
264
+
265
+ if ( type === "object" ) {
266
+ if ( red instanceof color ) {
267
+ each( spaces, function( spaceName, space ) {
268
+ if ( red[ space.cache ] ) {
269
+ inst[ space.cache ] = red[ space.cache ].slice();
270
+ }
271
+ });
272
+ } else {
273
+ each( spaces, function( spaceName, space ) {
274
+ var cache = space.cache;
275
+ each( space.props, function( key, prop ) {
276
+
277
+ // if the cache doesn't exist, and we know how to convert
278
+ if ( !inst[ cache ] && space.to ) {
279
+
280
+ // if the value was null, we don't need to copy it
281
+ // if the key was alpha, we don't need to copy it either
282
+ if ( key === "alpha" || red[ key ] == null ) {
283
+ return;
284
+ }
285
+ inst[ cache ] = space.to( inst._rgba );
286
+ }
287
+
288
+ // this is the only case where we allow nulls for ALL properties.
289
+ // call clamp with alwaysAllowEmpty
290
+ inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
291
+ });
292
+
293
+ // everything defined but alpha?
294
+ if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
295
+ // use the default of 1
296
+ inst[ cache ][ 3 ] = 1;
297
+ if ( space.from ) {
298
+ inst._rgba = space.from( inst[ cache ] );
299
+ }
300
+ }
301
+ });
302
+ }
303
+ return this;
304
+ }
305
+ },
306
+ is: function( compare ) {
307
+ var is = color( compare ),
308
+ same = true,
309
+ inst = this;
310
+
311
+ each( spaces, function( _, space ) {
312
+ var localCache,
313
+ isCache = is[ space.cache ];
314
+ if (isCache) {
315
+ localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
316
+ each( space.props, function( _, prop ) {
317
+ if ( isCache[ prop.idx ] != null ) {
318
+ same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
319
+ return same;
320
+ }
321
+ });
322
+ }
323
+ return same;
324
+ });
325
+ return same;
326
+ },
327
+ _space: function() {
328
+ var used = [],
329
+ inst = this;
330
+ each( spaces, function( spaceName, space ) {
331
+ if ( inst[ space.cache ] ) {
332
+ used.push( spaceName );
333
+ }
334
+ });
335
+ return used.pop();
336
+ },
337
+ transition: function( other, distance ) {
338
+ var end = color( other ),
339
+ spaceName = end._space(),
340
+ space = spaces[ spaceName ],
341
+ startColor = this.alpha() === 0 ? color( "transparent" ) : this,
342
+ start = startColor[ space.cache ] || space.to( startColor._rgba ),
343
+ result = start.slice();
344
+
345
+ end = end[ space.cache ];
346
+ each( space.props, function( key, prop ) {
347
+ var index = prop.idx,
348
+ startValue = start[ index ],
349
+ endValue = end[ index ],
350
+ type = propTypes[ prop.type ] || {};
351
+
352
+ // if null, don't override start value
353
+ if ( endValue === null ) {
354
+ return;
355
+ }
356
+ // if null - use end
357
+ if ( startValue === null ) {
358
+ result[ index ] = endValue;
359
+ } else {
360
+ if ( type.mod ) {
361
+ if ( endValue - startValue > type.mod / 2 ) {
362
+ startValue += type.mod;
363
+ } else if ( startValue - endValue > type.mod / 2 ) {
364
+ startValue -= type.mod;
365
+ }
366
+ }
367
+ result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
368
+ }
369
+ });
370
+ return this[ spaceName ]( result );
371
+ },
372
+ blend: function( opaque ) {
373
+ // if we are already opaque - return ourself
374
+ if ( this._rgba[ 3 ] === 1 ) {
375
+ return this;
376
+ }
377
+
378
+ var rgb = this._rgba.slice(),
379
+ a = rgb.pop(),
380
+ blend = color( opaque )._rgba;
381
+
382
+ return color( jQuery.map( rgb, function( v, i ) {
383
+ return ( 1 - a ) * blend[ i ] + a * v;
384
+ }));
385
+ },
386
+ toRgbaString: function() {
387
+ var prefix = "rgba(",
388
+ rgba = jQuery.map( this._rgba, function( v, i ) {
389
+ return v == null ? ( i > 2 ? 1 : 0 ) : v;
390
+ });
391
+
392
+ if ( rgba[ 3 ] === 1 ) {
393
+ rgba.pop();
394
+ prefix = "rgb(";
395
+ }
396
+
397
+ return prefix + rgba.join() + ")";
398
+ },
399
+ toHslaString: function() {
400
+ var prefix = "hsla(",
401
+ hsla = jQuery.map( this.hsla(), function( v, i ) {
402
+ if ( v == null ) {
403
+ v = i > 2 ? 1 : 0;
404
+ }
405
+
406
+ // catch 1 and 2
407
+ if ( i && i < 3 ) {
408
+ v = Math.round( v * 100 ) + "%";
409
+ }
410
+ return v;
411
+ });
412
+
413
+ if ( hsla[ 3 ] === 1 ) {
414
+ hsla.pop();
415
+ prefix = "hsl(";
416
+ }
417
+ return prefix + hsla.join() + ")";
418
+ },
419
+ toHexString: function( includeAlpha ) {
420
+ var rgba = this._rgba.slice(),
421
+ alpha = rgba.pop();
422
+
423
+ if ( includeAlpha ) {
424
+ rgba.push( ~~( alpha * 255 ) );
425
+ }
426
+
427
+ return "#" + jQuery.map( rgba, function( v ) {
428
+
429
+ // default to 0 when nulls exist
430
+ v = ( v || 0 ).toString( 16 );
431
+ return v.length === 1 ? "0" + v : v;
432
+ }).join("");
433
+ },
434
+ toString: function() {
435
+ return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
436
+ }
437
+ });
438
+ color.fn.parse.prototype = color.fn;
439
+
440
+ // hsla conversions adapted from:
441
+ // https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
442
+
443
+ function hue2rgb( p, q, h ) {
444
+ h = ( h + 1 ) % 1;
445
+ if ( h * 6 < 1 ) {
446
+ return p + (q - p) * h * 6;
447
+ }
448
+ if ( h * 2 < 1) {
449
+ return q;
450
+ }
451
+ if ( h * 3 < 2 ) {
452
+ return p + (q - p) * ((2/3) - h) * 6;
453
+ }
454
+ return p;
455
+ }
456
+
457
+ spaces.hsla.to = function ( rgba ) {
458
+ if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
459
+ return [ null, null, null, rgba[ 3 ] ];
460
+ }
461
+ var r = rgba[ 0 ] / 255,
462
+ g = rgba[ 1 ] / 255,
463
+ b = rgba[ 2 ] / 255,
464
+ a = rgba[ 3 ],
465
+ max = Math.max( r, g, b ),
466
+ min = Math.min( r, g, b ),
467
+ diff = max - min,
468
+ add = max + min,
469
+ l = add * 0.5,
470
+ h, s;
471
+
472
+ if ( min === max ) {
473
+ h = 0;
474
+ } else if ( r === max ) {
475
+ h = ( 60 * ( g - b ) / diff ) + 360;
476
+ } else if ( g === max ) {
477
+ h = ( 60 * ( b - r ) / diff ) + 120;
478
+ } else {
479
+ h = ( 60 * ( r - g ) / diff ) + 240;
480
+ }
481
+
482
+ // chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
483
+ // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
484
+ if ( diff === 0 ) {
485
+ s = 0;
486
+ } else if ( l <= 0.5 ) {
487
+ s = diff / add;
488
+ } else {
489
+ s = diff / ( 2 - add );
490
+ }
491
+ return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
492
+ };
493
+
494
+ spaces.hsla.from = function ( hsla ) {
495
+ if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
496
+ return [ null, null, null, hsla[ 3 ] ];
497
+ }
498
+ var h = hsla[ 0 ] / 360,
499
+ s = hsla[ 1 ],
500
+ l = hsla[ 2 ],
501
+ a = hsla[ 3 ],
502
+ q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
503
+ p = 2 * l - q;
504
+
505
+ return [
506
+ Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
507
+ Math.round( hue2rgb( p, q, h ) * 255 ),
508
+ Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
509
+ a
510
+ ];
511
+ };
512
+
513
+
514
+ each( spaces, function( spaceName, space ) {
515
+ var props = space.props,
516
+ cache = space.cache,
517
+ to = space.to,
518
+ from = space.from;
519
+
520
+ // makes rgba() and hsla()
521
+ color.fn[ spaceName ] = function( value ) {
522
+
523
+ // generate a cache for this space if it doesn't exist
524
+ if ( to && !this[ cache ] ) {
525
+ this[ cache ] = to( this._rgba );
526
+ }
527
+ if ( value === undefined ) {
528
+ return this[ cache ].slice();
529
+ }
530
+
531
+ var ret,
532
+ type = jQuery.type( value ),
533
+ arr = ( type === "array" || type === "object" ) ? value : arguments,
534
+ local = this[ cache ].slice();
535
+
536
+ each( props, function( key, prop ) {
537
+ var val = arr[ type === "object" ? key : prop.idx ];
538
+ if ( val == null ) {
539
+ val = local[ prop.idx ];
540
+ }
541
+ local[ prop.idx ] = clamp( val, prop );
542
+ });
543
+
544
+ if ( from ) {
545
+ ret = color( from( local ) );
546
+ ret[ cache ] = local;
547
+ return ret;
548
+ } else {
549
+ return color( local );
550
+ }
551
+ };
552
+
553
+ // makes red() green() blue() alpha() hue() saturation() lightness()
554
+ each( props, function( key, prop ) {
555
+ // alpha is included in more than one space
556
+ if ( color.fn[ key ] ) {
557
+ return;
558
+ }
559
+ color.fn[ key ] = function( value ) {
560
+ var vtype = jQuery.type( value ),
561
+ fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
562
+ local = this[ fn ](),
563
+ cur = local[ prop.idx ],
564
+ match;
565
+
566
+ if ( vtype === "undefined" ) {
567
+ return cur;
568
+ }
569
+
570
+ if ( vtype === "function" ) {
571
+ value = value.call( this, cur );
572
+ vtype = jQuery.type( value );
573
+ }
574
+ if ( value == null && prop.empty ) {
575
+ return this;
576
+ }
577
+ if ( vtype === "string" ) {
578
+ match = rplusequals.exec( value );
579
+ if ( match ) {
580
+ value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
581
+ }
582
+ }
583
+ local[ prop.idx ] = value;
584
+ return this[ fn ]( local );
585
+ };
586
+ });
587
+ });
588
+
589
+ // add cssHook and .fx.step function for each named hook.
590
+ // accept a space separated string of properties
591
+ color.hook = function( hook ) {
592
+ var hooks = hook.split( " " );
593
+ each( hooks, function( i, hook ) {
594
+ jQuery.cssHooks[ hook ] = {
595
+ set: function( elem, value ) {
596
+ var parsed, curElem,
597
+ backgroundColor = "";
598
+
599
+ if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
600
+ value = color( parsed || value );
601
+ if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
602
+ curElem = hook === "backgroundColor" ? elem.parentNode : elem;
603
+ while (
604
+ (backgroundColor === "" || backgroundColor === "transparent") &&
605
+ curElem && curElem.style
606
+ ) {
607
+ try {
608
+ backgroundColor = jQuery.css( curElem, "backgroundColor" );
609
+ curElem = curElem.parentNode;
610
+ } catch ( e ) {
611
+ }
612
+ }
613
+
614
+ value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
615
+ backgroundColor :
616
+ "_default" );
617
+ }
618
+
619
+ value = value.toRgbaString();
620
+ }
621
+ try {
622
+ elem.style[ hook ] = value;
623
+ } catch( e ) {
624
+ // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
625
+ }
626
+ }
627
+ };
628
+ jQuery.fx.step[ hook ] = function( fx ) {
629
+ if ( !fx.colorInit ) {
630
+ fx.start = color( fx.elem, hook );
631
+ fx.end = color( fx.end );
632
+ fx.colorInit = true;
633
+ }
634
+ jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
635
+ };
636
+ });
637
+
638
+ };
639
+
640
+ color.hook( stepHooks );
641
+
642
+ jQuery.cssHooks.borderColor = {
643
+ expand: function( value ) {
644
+ var expanded = {};
645
+
646
+ each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
647
+ expanded[ "border" + part + "Color" ] = value;
648
+ });
649
+ return expanded;
650
+ }
651
+ };
652
+
653
+ // Basic color names only.
654
+ // Usage of any of the other color names requires adding yourself or including
655
+ // jquery.color.svg-names.js.
656
+ colors = jQuery.Color.names = {
657
+ // 4.1. Basic color keywords
658
+ aqua: "#00ffff",
659
+ black: "#000000",
660
+ blue: "#0000ff",
661
+ fuchsia: "#ff00ff",
662
+ gray: "#808080",
663
+ green: "#008000",
664
+ lime: "#00ff00",
665
+ maroon: "#800000",
666
+ navy: "#000080",
667
+ olive: "#808000",
668
+ purple: "#800080",
669
+ red: "#ff0000",
670
+ silver: "#c0c0c0",
671
+ teal: "#008080",
672
+ white: "#ffffff",
673
+ yellow: "#ffff00",
674
+
675
+ // 4.2.3. "transparent" color keyword
676
+ transparent: [ null, null, null, 0 ],
677
+
678
+ _default: "#ffffff"
679
+ };
680
+
681
+ })( jQuery );
682
+
683
+
684
+ /******************************************************************************/
685
+ /****************************** CLASS ANIMATIONS ******************************/
686
+ /******************************************************************************/
687
+ (function() {
688
+
689
+ var classAnimationActions = [ "add", "remove", "toggle" ],
690
+ shorthandStyles = {
691
+ border: 1,
692
+ borderBottom: 1,
693
+ borderColor: 1,
694
+ borderLeft: 1,
695
+ borderRight: 1,
696
+ borderTop: 1,
697
+ borderWidth: 1,
698
+ margin: 1,
699
+ padding: 1
700
+ };
701
+
702
+ $.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
703
+ $.fx.step[ prop ] = function( fx ) {
704
+ if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
705
+ jQuery.style( fx.elem, prop, fx.end );
706
+ fx.setAttr = true;
707
+ }
708
+ };
709
+ });
710
+
711
+ function getElementStyles( elem ) {
712
+ var key, len,
713
+ style = elem.ownerDocument.defaultView ?
714
+ elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
715
+ elem.currentStyle,
716
+ styles = {};
717
+
718
+ if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
719
+ len = style.length;
720
+ while ( len-- ) {
721
+ key = style[ len ];
722
+ if ( typeof style[ key ] === "string" ) {
723
+ styles[ $.camelCase( key ) ] = style[ key ];
724
+ }
725
+ }
726
+ // support: Opera, IE <9
727
+ } else {
728
+ for ( key in style ) {
729
+ if ( typeof style[ key ] === "string" ) {
730
+ styles[ key ] = style[ key ];
731
+ }
732
+ }
733
+ }
734
+
735
+ return styles;
736
+ }
737
+
738
+
739
+ function styleDifference( oldStyle, newStyle ) {
740
+ var diff = {},
741
+ name, value;
742
+
743
+ for ( name in newStyle ) {
744
+ value = newStyle[ name ];
745
+ if ( oldStyle[ name ] !== value ) {
746
+ if ( !shorthandStyles[ name ] ) {
747
+ if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
748
+ diff[ name ] = value;
749
+ }
750
+ }
751
+ }
752
+ }
753
+
754
+ return diff;
755
+ }
756
+
757
+ // support: jQuery <1.8
758
+ if ( !$.fn.addBack ) {
759
+ $.fn.addBack = function( selector ) {
760
+ return this.add( selector == null ?
761
+ this.prevObject : this.prevObject.filter( selector )
762
+ );
763
+ };
764
+ }
765
+
766
+ $.effects.animateClass = function( value, duration, easing, callback ) {
767
+ var o = $.speed( duration, easing, callback );
768
+
769
+ return this.queue( function() {
770
+ var animated = $( this ),
771
+ baseClass = animated.attr( "class" ) || "",
772
+ applyClassChange,
773
+ allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
774
+
775
+ // map the animated objects to store the original styles.
776
+ allAnimations = allAnimations.map(function() {
777
+ var el = $( this );
778
+ return {
779
+ el: el,
780
+ start: getElementStyles( this )
781
+ };
782
+ });
783
+
784
+ // apply class change
785
+ applyClassChange = function() {
786
+ $.each( classAnimationActions, function(i, action) {
787
+ if ( value[ action ] ) {
788
+ animated[ action + "Class" ]( value[ action ] );
789
+ }
790
+ });
791
+ };
792
+ applyClassChange();
793
+
794
+ // map all animated objects again - calculate new styles and diff
795
+ allAnimations = allAnimations.map(function() {
796
+ this.end = getElementStyles( this.el[ 0 ] );
797
+ this.diff = styleDifference( this.start, this.end );
798
+ return this;
799
+ });
800
+
801
+ // apply original class
802
+ animated.attr( "class", baseClass );
803
+
804
+ // map all animated objects again - this time collecting a promise
805
+ allAnimations = allAnimations.map(function() {
806
+ var styleInfo = this,
807
+ dfd = $.Deferred(),
808
+ opts = $.extend({}, o, {
809
+ queue: false,
810
+ complete: function() {
811
+ dfd.resolve( styleInfo );
812
+ }
813
+ });
814
+
815
+ this.el.animate( this.diff, opts );
816
+ return dfd.promise();
817
+ });
818
+
819
+ // once all animations have completed:
820
+ $.when.apply( $, allAnimations.get() ).done(function() {
821
+
822
+ // set the final class
823
+ applyClassChange();
824
+
825
+ // for each animated element,
826
+ // clear all css properties that were animated
827
+ $.each( arguments, function() {
828
+ var el = this.el;
829
+ $.each( this.diff, function(key) {
830
+ el.css( key, "" );
831
+ });
832
+ });
833
+
834
+ // this is guarnteed to be there if you use jQuery.speed()
835
+ // it also handles dequeuing the next anim...
836
+ o.complete.call( animated[ 0 ] );
837
+ });
838
+ });
839
+ };
840
+
841
+ $.fn.extend({
842
+ _addClass: $.fn.addClass,
843
+ addClass: function( classNames, speed, easing, callback ) {
844
+ return speed ?
845
+ $.effects.animateClass.call( this,
846
+ { add: classNames }, speed, easing, callback ) :
847
+ this._addClass( classNames );
848
+ },
849
+
850
+ _removeClass: $.fn.removeClass,
851
+ removeClass: function( classNames, speed, easing, callback ) {
852
+ return arguments.length > 1 ?
853
+ $.effects.animateClass.call( this,
854
+ { remove: classNames }, speed, easing, callback ) :
855
+ this._removeClass.apply( this, arguments );
856
+ },
857
+
858
+ _toggleClass: $.fn.toggleClass,
859
+ toggleClass: function( classNames, force, speed, easing, callback ) {
860
+ if ( typeof force === "boolean" || force === undefined ) {
861
+ if ( !speed ) {
862
+ // without speed parameter
863
+ return this._toggleClass( classNames, force );
864
+ } else {
865
+ return $.effects.animateClass.call( this,
866
+ (force ? { add: classNames } : { remove: classNames }),
867
+ speed, easing, callback );
868
+ }
869
+ } else {
870
+ // without force parameter
871
+ return $.effects.animateClass.call( this,
872
+ { toggle: classNames }, force, speed, easing );
873
+ }
874
+ },
875
+
876
+ switchClass: function( remove, add, speed, easing, callback) {
877
+ return $.effects.animateClass.call( this, {
878
+ add: add,
879
+ remove: remove
880
+ }, speed, easing, callback );
881
+ }
882
+ });
883
+
884
+ })();
885
+
886
+ /******************************************************************************/
887
+ /*********************************** EFFECTS **********************************/
888
+ /******************************************************************************/
889
+
890
+ (function() {
891
+
892
+ $.extend( $.effects, {
893
+ version: "1.10.1",
894
+
895
+ // Saves a set of properties in a data storage
896
+ save: function( element, set ) {
897
+ for( var i=0; i < set.length; i++ ) {
898
+ if ( set[ i ] !== null ) {
899
+ element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
900
+ }
901
+ }
902
+ },
903
+
904
+ // Restores a set of previously saved properties from a data storage
905
+ restore: function( element, set ) {
906
+ var val, i;
907
+ for( i=0; i < set.length; i++ ) {
908
+ if ( set[ i ] !== null ) {
909
+ val = element.data( dataSpace + set[ i ] );
910
+ // support: jQuery 1.6.2
911
+ // http://bugs.jquery.com/ticket/9917
912
+ // jQuery 1.6.2 incorrectly returns undefined for any falsy value.
913
+ // We can't differentiate between "" and 0 here, so we just assume
914
+ // empty string since it's likely to be a more common value...
915
+ if ( val === undefined ) {
916
+ val = "";
917
+ }
918
+ element.css( set[ i ], val );
919
+ }
920
+ }
921
+ },
922
+
923
+ setMode: function( el, mode ) {
924
+ if (mode === "toggle") {
925
+ mode = el.is( ":hidden" ) ? "show" : "hide";
926
+ }
927
+ return mode;
928
+ },
929
+
930
+ // Translates a [top,left] array into a baseline value
931
+ // this should be a little more flexible in the future to handle a string & hash
932
+ getBaseline: function( origin, original ) {
933
+ var y, x;
934
+ switch ( origin[ 0 ] ) {
935
+ case "top": y = 0; break;
936
+ case "middle": y = 0.5; break;
937
+ case "bottom": y = 1; break;
938
+ default: y = origin[ 0 ] / original.height;
939
+ }
940
+ switch ( origin[ 1 ] ) {
941
+ case "left": x = 0; break;
942
+ case "center": x = 0.5; break;
943
+ case "right": x = 1; break;
944
+ default: x = origin[ 1 ] / original.width;
945
+ }
946
+ return {
947
+ x: x,
948
+ y: y
949
+ };
950
+ },
951
+
952
+ // Wraps the element around a wrapper that copies position properties
953
+ createWrapper: function( element ) {
954
+
955
+ // if the element is already wrapped, return it
956
+ if ( element.parent().is( ".ui-effects-wrapper" )) {
957
+ return element.parent();
958
+ }
959
+
960
+ // wrap the element
961
+ var props = {
962
+ width: element.outerWidth(true),
963
+ height: element.outerHeight(true),
964
+ "float": element.css( "float" )
965
+ },
966
+ wrapper = $( "<div></div>" )
967
+ .addClass( "ui-effects-wrapper" )
968
+ .css({
969
+ fontSize: "100%",
970
+ background: "transparent",
971
+ border: "none",
972
+ margin: 0,
973
+ padding: 0
974
+ }),
975
+ // Store the size in case width/height are defined in % - Fixes #5245
976
+ size = {
977
+ width: element.width(),
978
+ height: element.height()
979
+ },
980
+ active = document.activeElement;
981
+
982
+ // support: Firefox
983
+ // Firefox incorrectly exposes anonymous content
984
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=561664
985
+ try {
986
+ active.id;
987
+ } catch( e ) {
988
+ active = document.body;
989
+ }
990
+
991
+ element.wrap( wrapper );
992
+
993
+ // Fixes #7595 - Elements lose focus when wrapped.
994
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
995
+ $( active ).focus();
996
+ }
997
+
998
+ wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
999
+
1000
+ // transfer positioning properties to the wrapper
1001
+ if ( element.css( "position" ) === "static" ) {
1002
+ wrapper.css({ position: "relative" });
1003
+ element.css({ position: "relative" });
1004
+ } else {
1005
+ $.extend( props, {
1006
+ position: element.css( "position" ),
1007
+ zIndex: element.css( "z-index" )
1008
+ });
1009
+ $.each([ "top", "left", "bottom", "right" ], function(i, pos) {
1010
+ props[ pos ] = element.css( pos );
1011
+ if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
1012
+ props[ pos ] = "auto";
1013
+ }
1014
+ });
1015
+ element.css({
1016
+ position: "relative",
1017
+ top: 0,
1018
+ left: 0,
1019
+ right: "auto",
1020
+ bottom: "auto"
1021
+ });
1022
+ }
1023
+ element.css(size);
1024
+
1025
+ return wrapper.css( props ).show();
1026
+ },
1027
+
1028
+ removeWrapper: function( element ) {
1029
+ var active = document.activeElement;
1030
+
1031
+ if ( element.parent().is( ".ui-effects-wrapper" ) ) {
1032
+ element.parent().replaceWith( element );
1033
+
1034
+ // Fixes #7595 - Elements lose focus when wrapped.
1035
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
1036
+ $( active ).focus();
1037
+ }
1038
+ }
1039
+
1040
+
1041
+ return element;
1042
+ },
1043
+
1044
+ setTransition: function( element, list, factor, value ) {
1045
+ value = value || {};
1046
+ $.each( list, function( i, x ) {
1047
+ var unit = element.cssUnit( x );
1048
+ if ( unit[ 0 ] > 0 ) {
1049
+ value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
1050
+ }
1051
+ });
1052
+ return value;
1053
+ }
1054
+ });
1055
+
1056
+ // return an effect options object for the given parameters:
1057
+ function _normalizeArguments( effect, options, speed, callback ) {
1058
+
1059
+ // allow passing all options as the first parameter
1060
+ if ( $.isPlainObject( effect ) ) {
1061
+ options = effect;
1062
+ effect = effect.effect;
1063
+ }
1064
+
1065
+ // convert to an object
1066
+ effect = { effect: effect };
1067
+
1068
+ // catch (effect, null, ...)
1069
+ if ( options == null ) {
1070
+ options = {};
1071
+ }
1072
+
1073
+ // catch (effect, callback)
1074
+ if ( $.isFunction( options ) ) {
1075
+ callback = options;
1076
+ speed = null;
1077
+ options = {};
1078
+ }
1079
+
1080
+ // catch (effect, speed, ?)
1081
+ if ( typeof options === "number" || $.fx.speeds[ options ] ) {
1082
+ callback = speed;
1083
+ speed = options;
1084
+ options = {};
1085
+ }
1086
+
1087
+ // catch (effect, options, callback)
1088
+ if ( $.isFunction( speed ) ) {
1089
+ callback = speed;
1090
+ speed = null;
1091
+ }
1092
+
1093
+ // add options to effect
1094
+ if ( options ) {
1095
+ $.extend( effect, options );
1096
+ }
1097
+
1098
+ speed = speed || options.duration;
1099
+ effect.duration = $.fx.off ? 0 :
1100
+ typeof speed === "number" ? speed :
1101
+ speed in $.fx.speeds ? $.fx.speeds[ speed ] :
1102
+ $.fx.speeds._default;
1103
+
1104
+ effect.complete = callback || options.complete;
1105
+
1106
+ return effect;
1107
+ }
1108
+
1109
+ function standardSpeed( speed ) {
1110
+ // valid standard speeds
1111
+ if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) {
1112
+ return true;
1113
+ }
1114
+
1115
+ // invalid strings - treat as "normal" speed
1116
+ return typeof speed === "string" && !$.effects.effect[ speed ];
1117
+ }
1118
+
1119
+ $.fn.extend({
1120
+ effect: function( /* effect, options, speed, callback */ ) {
1121
+ var args = _normalizeArguments.apply( this, arguments ),
1122
+ mode = args.mode,
1123
+ queue = args.queue,
1124
+ effectMethod = $.effects.effect[ args.effect ];
1125
+
1126
+ if ( $.fx.off || !effectMethod ) {
1127
+ // delegate to the original method (e.g., .show()) if possible
1128
+ if ( mode ) {
1129
+ return this[ mode ]( args.duration, args.complete );
1130
+ } else {
1131
+ return this.each( function() {
1132
+ if ( args.complete ) {
1133
+ args.complete.call( this );
1134
+ }
1135
+ });
1136
+ }
1137
+ }
1138
+
1139
+ function run( next ) {
1140
+ var elem = $( this ),
1141
+ complete = args.complete,
1142
+ mode = args.mode;
1143
+
1144
+ function done() {
1145
+ if ( $.isFunction( complete ) ) {
1146
+ complete.call( elem[0] );
1147
+ }
1148
+ if ( $.isFunction( next ) ) {
1149
+ next();
1150
+ }
1151
+ }
1152
+
1153
+ // if the element is hiddden and mode is hide,
1154
+ // or element is visible and mode is show
1155
+ if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
1156
+ done();
1157
+ } else {
1158
+ effectMethod.call( elem[0], args, done );
1159
+ }
1160
+ }
1161
+
1162
+ return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
1163
+ },
1164
+
1165
+ _show: $.fn.show,
1166
+ show: function( speed ) {
1167
+ if ( standardSpeed( speed ) ) {
1168
+ return this._show.apply( this, arguments );
1169
+ } else {
1170
+ var args = _normalizeArguments.apply( this, arguments );
1171
+ args.mode = "show";
1172
+ return this.effect.call( this, args );
1173
+ }
1174
+ },
1175
+
1176
+ _hide: $.fn.hide,
1177
+ hide: function( speed ) {
1178
+ if ( standardSpeed( speed ) ) {
1179
+ return this._hide.apply( this, arguments );
1180
+ } else {
1181
+ var args = _normalizeArguments.apply( this, arguments );
1182
+ args.mode = "hide";
1183
+ return this.effect.call( this, args );
1184
+ }
1185
+ },
1186
+
1187
+ // jQuery core overloads toggle and creates _toggle
1188
+ __toggle: $.fn.toggle,
1189
+ toggle: function( speed ) {
1190
+ if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) {
1191
+ return this.__toggle.apply( this, arguments );
1192
+ } else {
1193
+ var args = _normalizeArguments.apply( this, arguments );
1194
+ args.mode = "toggle";
1195
+ return this.effect.call( this, args );
1196
+ }
1197
+ },
1198
+
1199
+ // helper functions
1200
+ cssUnit: function(key) {
1201
+ var style = this.css( key ),
1202
+ val = [];
1203
+
1204
+ $.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
1205
+ if ( style.indexOf( unit ) > 0 ) {
1206
+ val = [ parseFloat( style ), unit ];
1207
+ }
1208
+ });
1209
+ return val;
1210
+ }
1211
+ });
1212
+
1213
+ })();
1214
+
1215
+ /******************************************************************************/
1216
+ /*********************************** EASING ***********************************/
1217
+ /******************************************************************************/
1218
+
1219
+ (function() {
1220
+
1221
+ // based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
1222
+
1223
+ var baseEasings = {};
1224
+
1225
+ $.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
1226
+ baseEasings[ name ] = function( p ) {
1227
+ return Math.pow( p, i + 2 );
1228
+ };
1229
+ });
1230
+
1231
+ $.extend( baseEasings, {
1232
+ Sine: function ( p ) {
1233
+ return 1 - Math.cos( p * Math.PI / 2 );
1234
+ },
1235
+ Circ: function ( p ) {
1236
+ return 1 - Math.sqrt( 1 - p * p );
1237
+ },
1238
+ Elastic: function( p ) {
1239
+ return p === 0 || p === 1 ? p :
1240
+ -Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
1241
+ },
1242
+ Back: function( p ) {
1243
+ return p * p * ( 3 * p - 2 );
1244
+ },
1245
+ Bounce: function ( p ) {
1246
+ var pow2,
1247
+ bounce = 4;
1248
+
1249
+ while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
1250
+ return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
1251
+ }
1252
+ });
1253
+
1254
+ $.each( baseEasings, function( name, easeIn ) {
1255
+ $.easing[ "easeIn" + name ] = easeIn;
1256
+ $.easing[ "easeOut" + name ] = function( p ) {
1257
+ return 1 - easeIn( 1 - p );
1258
+ };
1259
+ $.easing[ "easeInOut" + name ] = function( p ) {
1260
+ return p < 0.5 ?
1261
+ easeIn( p * 2 ) / 2 :
1262
+ 1 - easeIn( p * -2 + 2 ) / 2;
1263
+ };
1264
+ });
1265
+
1266
+ })();
1267
+
1268
+ })(jQuery));