hatchy 0.0.5.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (500) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +20 -0
  4. data/app/assets/javascripts/hatchy/admin.js +36 -0
  5. data/app/assets/javascripts/hatchy/admin/dashboard.js +26 -0
  6. data/app/assets/javascripts/hatchy/application.js +88 -0
  7. data/app/assets/javascripts/hatchy/bootstrap/affix.js +162 -0
  8. data/app/assets/javascripts/hatchy/bootstrap/alert.js +94 -0
  9. data/app/assets/javascripts/hatchy/bootstrap/bootstrap.js +12 -0
  10. data/app/assets/javascripts/hatchy/bootstrap/button.js +120 -0
  11. data/app/assets/javascripts/hatchy/bootstrap/carousel.js +237 -0
  12. data/app/assets/javascripts/hatchy/bootstrap/collapse.js +211 -0
  13. data/app/assets/javascripts/hatchy/bootstrap/dropdown.js +165 -0
  14. data/app/assets/javascripts/hatchy/bootstrap/modal.js +337 -0
  15. data/app/assets/javascripts/hatchy/bootstrap/popover.js +108 -0
  16. data/app/assets/javascripts/hatchy/bootstrap/scrollspy.js +172 -0
  17. data/app/assets/javascripts/hatchy/bootstrap/tab.js +155 -0
  18. data/app/assets/javascripts/hatchy/bootstrap/tooltip.js +514 -0
  19. data/app/assets/javascripts/hatchy/bootstrap/transition.js +59 -0
  20. data/app/assets/javascripts/hatchy/dashboard.js +24 -0
  21. data/app/assets/javascripts/hatchy/hatchy.js +8 -0
  22. data/app/assets/javascripts/hatchy/home.js +17 -0
  23. data/app/assets/javascripts/hatchy/libraries/jquery.countdown.js +206 -0
  24. data/app/assets/javascripts/hatchy/libraries/owl.carousel.js +1512 -0
  25. data/app/assets/javascripts/hatchy/libraries/pnotify.custom.js +1421 -0
  26. data/app/assets/javascripts/hatchy/libraries/summernote.js +7300 -0
  27. data/app/assets/javascripts/hatchy/projects/contributions/new_contribution.js +57 -0
  28. data/app/assets/javascripts/hatchy/projects/edit.js +59 -0
  29. data/app/assets/javascripts/hatchy/projects/show.js +16 -0
  30. data/app/assets/javascripts/hatchy/users/edit.js +29 -0
  31. data/app/assets/stylesheets/hatchy/admin.scss.erb +68 -0
  32. data/app/assets/stylesheets/hatchy/base.scss +195 -0
  33. data/app/assets/stylesheets/hatchy/bootstrap/_alerts.scss +73 -0
  34. data/app/assets/stylesheets/hatchy/bootstrap/_badges.scss +68 -0
  35. data/app/assets/stylesheets/hatchy/bootstrap/_breadcrumbs.scss +26 -0
  36. data/app/assets/stylesheets/hatchy/bootstrap/_button-groups.scss +244 -0
  37. data/app/assets/stylesheets/hatchy/bootstrap/_buttons.scss +168 -0
  38. data/app/assets/stylesheets/hatchy/bootstrap/_carousel.scss +269 -0
  39. data/app/assets/stylesheets/hatchy/bootstrap/_close.scss +36 -0
  40. data/app/assets/stylesheets/hatchy/bootstrap/_code.scss +69 -0
  41. data/app/assets/stylesheets/hatchy/bootstrap/_component-animations.scss +37 -0
  42. data/app/assets/stylesheets/hatchy/bootstrap/_dropdowns.scss +216 -0
  43. data/app/assets/stylesheets/hatchy/bootstrap/_forms.scss +611 -0
  44. data/app/assets/stylesheets/hatchy/bootstrap/_glyphicons.scss +307 -0
  45. data/app/assets/stylesheets/hatchy/bootstrap/_grid.scss +84 -0
  46. data/app/assets/stylesheets/hatchy/bootstrap/_input-groups.scss +167 -0
  47. data/app/assets/stylesheets/hatchy/bootstrap/_jumbotron.scss +52 -0
  48. data/app/assets/stylesheets/hatchy/bootstrap/_labels.scss +66 -0
  49. data/app/assets/stylesheets/hatchy/bootstrap/_list-group.scss +130 -0
  50. data/app/assets/stylesheets/hatchy/bootstrap/_media.scss +66 -0
  51. data/app/assets/stylesheets/hatchy/bootstrap/_mixins.scss +40 -0
  52. data/app/assets/stylesheets/hatchy/bootstrap/_modals.scss +150 -0
  53. data/app/assets/stylesheets/hatchy/bootstrap/_navbar.scss +662 -0
  54. data/app/assets/stylesheets/hatchy/bootstrap/_navs.scss +242 -0
  55. data/app/assets/stylesheets/hatchy/bootstrap/_normalize.scss +424 -0
  56. data/app/assets/stylesheets/hatchy/bootstrap/_pager.scss +54 -0
  57. data/app/assets/stylesheets/hatchy/bootstrap/_pagination.scss +89 -0
  58. data/app/assets/stylesheets/hatchy/bootstrap/_panels.scss +271 -0
  59. data/app/assets/stylesheets/hatchy/bootstrap/_popovers.scss +131 -0
  60. data/app/assets/stylesheets/hatchy/bootstrap/_print.scss +101 -0
  61. data/app/assets/stylesheets/hatchy/bootstrap/_progress-bars.scss +87 -0
  62. data/app/assets/stylesheets/hatchy/bootstrap/_responsive-embed.scss +35 -0
  63. data/app/assets/stylesheets/hatchy/bootstrap/_responsive-utilities.scss +179 -0
  64. data/app/assets/stylesheets/hatchy/bootstrap/_scaffolding.scss +161 -0
  65. data/app/assets/stylesheets/hatchy/bootstrap/_tables.scss +234 -0
  66. data/app/assets/stylesheets/hatchy/bootstrap/_theme.scss +291 -0
  67. data/app/assets/stylesheets/hatchy/bootstrap/_thumbnails.scss +38 -0
  68. data/app/assets/stylesheets/hatchy/bootstrap/_tooltip.scss +101 -0
  69. data/app/assets/stylesheets/hatchy/bootstrap/_type.scss +298 -0
  70. data/app/assets/stylesheets/hatchy/bootstrap/_utilities.scss +55 -0
  71. data/app/assets/stylesheets/hatchy/bootstrap/_variables.scss +872 -0
  72. data/app/assets/stylesheets/hatchy/bootstrap/_wells.scss +29 -0
  73. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_alerts.scss +14 -0
  74. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_background-variant.scss +12 -0
  75. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_border-radius.scss +18 -0
  76. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_buttons.scss +68 -0
  77. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_center-block.scss +7 -0
  78. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_clearfix.scss +22 -0
  79. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_forms.scss +88 -0
  80. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_gradients.scss +58 -0
  81. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_grid-framework.scss +81 -0
  82. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_grid.scss +122 -0
  83. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_hide-text.scss +21 -0
  84. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_image.scss +33 -0
  85. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_labels.scss +12 -0
  86. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_list-group.scss +32 -0
  87. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_nav-divider.scss +10 -0
  88. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_nav-vertical-align.scss +9 -0
  89. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_opacity.scss +8 -0
  90. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_pagination.scss +24 -0
  91. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_panels.scss +24 -0
  92. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_progress-bar.scss +10 -0
  93. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_reset-filter.scss +8 -0
  94. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_reset-text.scss +18 -0
  95. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_resize.scss +6 -0
  96. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_responsive-visibility.scss +21 -0
  97. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_size.scss +10 -0
  98. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_tab-focus.scss +9 -0
  99. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_table-row.scss +28 -0
  100. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_text-emphasis.scss +12 -0
  101. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_text-overflow.scss +8 -0
  102. data/app/assets/stylesheets/hatchy/bootstrap/mixins/_vendor-prefixes.scss +222 -0
  103. data/app/assets/stylesheets/hatchy/hatchy.scss.erb +72 -0
  104. data/app/assets/stylesheets/hatchy/libraries/owl/owl.carousel.css +71 -0
  105. data/app/assets/stylesheets/hatchy/libraries/owl/owl.theme.css +79 -0
  106. data/app/assets/stylesheets/hatchy/libraries/pnotify.custom.css +178 -0
  107. data/app/assets/stylesheets/hatchy/libraries/summernote.css +1 -0
  108. data/app/assets/stylesheets/hatchy/themes/default/_variables.scss +0 -0
  109. data/app/assets/stylesheets/hatchy/themes/default/mixins.scss +0 -0
  110. data/app/assets/stylesheets/hatchy/themes/default/theme.scss +0 -0
  111. data/app/controllers/hatchy/admin/announcements_controller.rb +61 -0
  112. data/app/controllers/hatchy/admin/application_controller.rb +30 -0
  113. data/app/controllers/hatchy/admin/banks_controller.rb +61 -0
  114. data/app/controllers/hatchy/admin/categories_controller.rb +61 -0
  115. data/app/controllers/hatchy/admin/countries_controller.rb +61 -0
  116. data/app/controllers/hatchy/admin/dashboard_controller.rb +15 -0
  117. data/app/controllers/hatchy/announcements_controller.rb +11 -0
  118. data/app/controllers/hatchy/application_controller.rb +15 -0
  119. data/app/controllers/hatchy/dashboard_controller.rb +8 -0
  120. data/app/controllers/hatchy/home_controller.rb +20 -0
  121. data/app/controllers/hatchy/projects/contributions_controller.rb +60 -0
  122. data/app/controllers/hatchy/projects_controller.rb +99 -0
  123. data/app/controllers/hatchy/users_controller.rb +47 -0
  124. data/app/helpers/hatchy/application_helper.rb +4 -0
  125. data/app/helpers/hatchy/form_helper.rb +30 -0
  126. data/app/helpers/hatchy/layout_helper.rb +43 -0
  127. data/app/models/concerns/hatchy/project_states.rb +173 -0
  128. data/app/models/hatchy/announcement.rb +9 -0
  129. data/app/models/hatchy/bank.rb +6 -0
  130. data/app/models/hatchy/bank_account.rb +7 -0
  131. data/app/models/hatchy/category.rb +16 -0
  132. data/app/models/hatchy/category_follower.rb +7 -0
  133. data/app/models/hatchy/contribution.rb +45 -0
  134. data/app/models/hatchy/country.rb +5 -0
  135. data/app/models/hatchy/project.rb +46 -0
  136. data/app/models/hatchy/project_account.rb +10 -0
  137. data/app/models/hatchy/reward.rb +8 -0
  138. data/app/models/hatchy/user.rb +25 -0
  139. data/app/policies/hatchy/admin/application_policy.rb +7 -0
  140. data/app/policies/hatchy/application_policy.rb +57 -0
  141. data/app/policies/hatchy/project_policy.rb +19 -0
  142. data/app/policies/hatchy/user_policy.rb +16 -0
  143. data/app/uploaders/hatchy/project_uploader.rb +10 -0
  144. data/app/uploaders/hatchy/user_uploader.rb +9 -0
  145. data/app/views/devise/registrations/new.html.haml +23 -0
  146. data/app/views/devise/sessions/new.html.haml +26 -0
  147. data/app/views/devise/shared/_links.html.erb +25 -0
  148. data/app/views/hatchy/admin/announcements/edit.html.haml +10 -0
  149. data/app/views/hatchy/admin/announcements/index.html.haml +10 -0
  150. data/app/views/hatchy/admin/announcements/new.html.haml +10 -0
  151. data/app/views/hatchy/admin/announcements/show.html.haml +13 -0
  152. data/app/views/hatchy/admin/banks/edit.html.haml +10 -0
  153. data/app/views/hatchy/admin/banks/index.html.haml +10 -0
  154. data/app/views/hatchy/admin/banks/new.html.haml +10 -0
  155. data/app/views/hatchy/admin/banks/show.html.haml +13 -0
  156. data/app/views/hatchy/admin/categories/edit.html.haml +10 -0
  157. data/app/views/hatchy/admin/categories/index.html.haml +10 -0
  158. data/app/views/hatchy/admin/categories/new.html.haml +10 -0
  159. data/app/views/hatchy/admin/categories/show.html.haml +13 -0
  160. data/app/views/hatchy/admin/countries/edit.html.haml +10 -0
  161. data/app/views/hatchy/admin/countries/index.html.haml +10 -0
  162. data/app/views/hatchy/admin/countries/new.html.haml +10 -0
  163. data/app/views/hatchy/admin/countries/show.html.haml +13 -0
  164. data/app/views/hatchy/admin/dashboard/_last_updated_table.html.haml +32 -0
  165. data/app/views/hatchy/admin/dashboard/index.html.haml +14 -0
  166. data/app/views/hatchy/admin/shared/_admin_navtabs.html.haml +17 -0
  167. data/app/views/hatchy/admin/shared/_admin_sidebar.html.haml +38 -0
  168. data/app/views/hatchy/admin/shared/_model_form.html.haml +22 -0
  169. data/app/views/hatchy/admin/shared/_model_index.html.haml +31 -0
  170. data/app/views/hatchy/admin/shared/_model_show.html.haml +10 -0
  171. data/app/views/hatchy/dashboard/_projects_you_support.html.haml +8 -0
  172. data/app/views/hatchy/dashboard/_your_projects.html.haml +10 -0
  173. data/app/views/hatchy/dashboard/index.html.haml +8 -0
  174. data/app/views/hatchy/home/_recommended_projects.html.haml +7 -0
  175. data/app/views/hatchy/home/explore.html.haml +29 -0
  176. data/app/views/hatchy/home/index.html.haml +4 -0
  177. data/app/views/hatchy/projects/_reward_fields.html.haml +21 -0
  178. data/app/views/hatchy/projects/contributions/_billing.html.haml +40 -0
  179. data/app/views/hatchy/projects/contributions/_form.html.haml +7 -0
  180. data/app/views/hatchy/projects/contributions/_payment.html.haml +18 -0
  181. data/app/views/hatchy/projects/contributions/_rewards.html.haml +19 -0
  182. data/app/views/hatchy/projects/contributions/new.html.haml +7 -0
  183. data/app/views/hatchy/projects/edit.html.haml +18 -0
  184. data/app/views/hatchy/projects/edit/_account.html.haml +60 -0
  185. data/app/views/hatchy/projects/edit/_analysis_success.html.haml +12 -0
  186. data/app/views/hatchy/projects/edit/_basic.html.haml +24 -0
  187. data/app/views/hatchy/projects/edit/_budget.html.haml +16 -0
  188. data/app/views/hatchy/projects/edit/_description.html.haml +18 -0
  189. data/app/views/hatchy/projects/edit/_goal.html.haml +25 -0
  190. data/app/views/hatchy/projects/edit/_project_card.html.haml +24 -0
  191. data/app/views/hatchy/projects/edit/_project_sidebar.html.haml +67 -0
  192. data/app/views/hatchy/projects/edit/_rewards.html.haml +16 -0
  193. data/app/views/hatchy/projects/edit/_video.html.haml +17 -0
  194. data/app/views/hatchy/projects/new.html.haml +16 -0
  195. data/app/views/hatchy/projects/show.html.haml +63 -0
  196. data/app/views/hatchy/shared/_project.html.haml +29 -0
  197. data/app/views/hatchy/users/edit.html.haml +17 -0
  198. data/app/views/hatchy/users/edit/_about_you.html.haml +37 -0
  199. data/app/views/hatchy/users/edit/_banks_and_cards.html.haml +17 -0
  200. data/app/views/hatchy/users/edit/_data_and_address.html.haml +47 -0
  201. data/app/views/hatchy/users/edit/_notifications.html.haml +16 -0
  202. data/app/views/hatchy/users/show.html.haml +1 -0
  203. data/app/views/layouts/hatchy/_footer.html.haml +1 -0
  204. data/app/views/layouts/hatchy/_navbar.html.haml +32 -0
  205. data/app/views/layouts/hatchy/admin/admin_layout.html.haml +26 -0
  206. data/app/views/layouts/hatchy/application.html.haml +22 -0
  207. data/config/initializers/devise.rb +266 -0
  208. data/config/locales/devise.en.yml +60 -0
  209. data/config/locales/en.yml +146 -0
  210. data/config/routes.rb +54 -0
  211. data/db/countries.txt +252 -0
  212. data/db/migrate/20160111174923_create_hatchy_announcements.rb +10 -0
  213. data/db/migrate/20160111174945_create_hatchy_banks.rb +10 -0
  214. data/db/migrate/20160111175001_create_hatchy_bank_accounts.rb +12 -0
  215. data/db/migrate/20160111175017_create_hatchy_categories.rb +9 -0
  216. data/db/migrate/20160111175037_create_hatchy_contributions.rb +31 -0
  217. data/db/migrate/20160111175055_create_hatchy_countries.rb +14 -0
  218. data/db/migrate/20160111175124_create_hatchy_rewards.rb +14 -0
  219. data/db/migrate/20160111175139_create_hatchy_projects.rb +27 -0
  220. data/db/migrate/20160111175158_create_hatchy_project_accounts.rb +26 -0
  221. data/db/migrate/20160111175249_devise_create_hatchy_users.rb +64 -0
  222. data/db/migrate/20160111181655_create_hatchy_category_followers.rb +10 -0
  223. data/db/seed.rb +43 -0
  224. data/lib/hatchy.rb +24 -0
  225. data/lib/hatchy/country_importer.rb +32 -0
  226. data/lib/hatchy/engine.rb +43 -0
  227. data/lib/hatchy/setup_generator.rb +10 -0
  228. data/lib/hatchy/version.rb +3 -0
  229. data/lib/tasks/hatchy_tasks.rake +18 -0
  230. data/spec/controllers/hatchy/admin/announcements_controller_spec.rb +7 -0
  231. data/spec/controllers/hatchy/admin/application_controller_spec.rb +7 -0
  232. data/spec/controllers/hatchy/admin/banks_controller_spec.rb +7 -0
  233. data/spec/controllers/hatchy/admin/categories_controller_spec.rb +7 -0
  234. data/spec/controllers/hatchy/admin/countries_controller_spec.rb +7 -0
  235. data/spec/controllers/hatchy/admin/dashboard_controller_spec.rb +7 -0
  236. data/spec/controllers/hatchy/announcements_controller_spec.rb +7 -0
  237. data/spec/controllers/hatchy/dashboard_controller_spec.rb +7 -0
  238. data/spec/controllers/hatchy/home_controller_spec.rb +7 -0
  239. data/spec/controllers/hatchy/projects/contributions_controller_spec.rb +7 -0
  240. data/spec/controllers/hatchy/projects_controller_spec.rb +7 -0
  241. data/spec/controllers/hatchy/users_controller_spec.rb +7 -0
  242. data/spec/dummy/README.rdoc +28 -0
  243. data/spec/dummy/Rakefile +6 -0
  244. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  245. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  246. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  247. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  248. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  249. data/spec/dummy/bin/bundle +3 -0
  250. data/spec/dummy/bin/rails +4 -0
  251. data/spec/dummy/bin/rake +4 -0
  252. data/spec/dummy/config.ru +4 -0
  253. data/spec/dummy/config/application.rb +29 -0
  254. data/spec/dummy/config/boot.rb +5 -0
  255. data/spec/dummy/config/database.yml +25 -0
  256. data/spec/dummy/config/environment.rb +5 -0
  257. data/spec/dummy/config/environments/development.rb +37 -0
  258. data/spec/dummy/config/environments/production.rb +78 -0
  259. data/spec/dummy/config/environments/test.rb +39 -0
  260. data/spec/dummy/config/initializers/assets.rb +8 -0
  261. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  262. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  263. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  264. data/spec/dummy/config/initializers/inflections.rb +16 -0
  265. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  266. data/spec/dummy/config/initializers/session_store.rb +3 -0
  267. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  268. data/spec/dummy/config/locales/en.yml +23 -0
  269. data/spec/dummy/config/routes.rb +3 -0
  270. data/spec/dummy/config/secrets.yml +22 -0
  271. data/spec/dummy/db/development.sqlite3 +0 -0
  272. data/spec/dummy/db/schema.rb +207 -0
  273. data/spec/dummy/log/development.log +20486 -0
  274. data/spec/dummy/public/404.html +67 -0
  275. data/spec/dummy/public/422.html +67 -0
  276. data/spec/dummy/public/500.html +66 -0
  277. data/spec/dummy/public/favicon.ico +0 -0
  278. data/spec/dummy/public/uploads/hatchy/project/project_img/1/circus.jpg +0 -0
  279. data/spec/dummy/public/uploads/hatchy/user/profile_img/1/costanza.jpg +0 -0
  280. data/spec/dummy/public/uploads/tmp/1452646096-14084-2585/circus.jpg +0 -0
  281. data/spec/dummy/tmp/cache/assets/development/sass/1ae7eaad6fbe78b7fa091e1570fc6b83fd216672/admin.scss.erbc +0 -0
  282. data/spec/dummy/tmp/cache/assets/development/sass/1ae7eaad6fbe78b7fa091e1570fc6b83fd216672/base.scssc +0 -0
  283. data/spec/dummy/tmp/cache/assets/development/sass/1ae7eaad6fbe78b7fa091e1570fc6b83fd216672/hatchy.scss.erbc +0 -0
  284. data/spec/dummy/tmp/cache/assets/development/sass/4cd2ed92d25169cb17133dbe165a813de108b092/jquery.dataTables.bootstrap.scssc +0 -0
  285. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_alerts.scssc +0 -0
  286. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_badges.scssc +0 -0
  287. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_breadcrumbs.scssc +0 -0
  288. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_button-groups.scssc +0 -0
  289. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_buttons.scssc +0 -0
  290. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_carousel.scssc +0 -0
  291. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_close.scssc +0 -0
  292. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_code.scssc +0 -0
  293. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_component-animations.scssc +0 -0
  294. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_dropdowns.scssc +0 -0
  295. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_forms.scssc +0 -0
  296. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_glyphicons.scssc +0 -0
  297. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_grid.scssc +0 -0
  298. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_input-groups.scssc +0 -0
  299. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_jumbotron.scssc +0 -0
  300. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_labels.scssc +0 -0
  301. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_list-group.scssc +0 -0
  302. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_media.scssc +0 -0
  303. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_mixins.scssc +0 -0
  304. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_modals.scssc +0 -0
  305. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_navbar.scssc +0 -0
  306. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_navs.scssc +0 -0
  307. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_normalize.scssc +0 -0
  308. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_pager.scssc +0 -0
  309. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_pagination.scssc +0 -0
  310. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_panels.scssc +0 -0
  311. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_popovers.scssc +0 -0
  312. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_print.scssc +0 -0
  313. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_progress-bars.scssc +0 -0
  314. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_responsive-embed.scssc +0 -0
  315. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_responsive-utilities.scssc +0 -0
  316. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_scaffolding.scssc +0 -0
  317. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_tables.scssc +0 -0
  318. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_thumbnails.scssc +0 -0
  319. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_tooltip.scssc +0 -0
  320. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_type.scssc +0 -0
  321. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_utilities.scssc +0 -0
  322. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_variables.scssc +0 -0
  323. data/spec/dummy/tmp/cache/assets/development/sass/5abc7faa8d65750bfbc9bb398645121a327e7af5/_wells.scssc +0 -0
  324. data/spec/dummy/tmp/cache/assets/development/sass/7ffb18582ef75d2e0545e59d54b66a8ac063388e/pnotify.custom.cssc +0 -0
  325. data/spec/dummy/tmp/cache/assets/development/sass/7ffb18582ef75d2e0545e59d54b66a8ac063388e/summernote.cssc +0 -0
  326. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_alerts.scssc +0 -0
  327. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_background-variant.scssc +0 -0
  328. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_border-radius.scssc +0 -0
  329. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_buttons.scssc +0 -0
  330. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_center-block.scssc +0 -0
  331. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_clearfix.scssc +0 -0
  332. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_forms.scssc +0 -0
  333. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_gradients.scssc +0 -0
  334. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_grid-framework.scssc +0 -0
  335. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_grid.scssc +0 -0
  336. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_hide-text.scssc +0 -0
  337. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_image.scssc +0 -0
  338. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_labels.scssc +0 -0
  339. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_list-group.scssc +0 -0
  340. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_nav-divider.scssc +0 -0
  341. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_nav-vertical-align.scssc +0 -0
  342. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_opacity.scssc +0 -0
  343. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_pagination.scssc +0 -0
  344. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_panels.scssc +0 -0
  345. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_progress-bar.scssc +0 -0
  346. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_reset-filter.scssc +0 -0
  347. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_reset-text.scssc +0 -0
  348. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_resize.scssc +0 -0
  349. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_responsive-visibility.scssc +0 -0
  350. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_size.scssc +0 -0
  351. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_tab-focus.scssc +0 -0
  352. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_table-row.scssc +0 -0
  353. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_text-emphasis.scssc +0 -0
  354. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_text-overflow.scssc +0 -0
  355. data/spec/dummy/tmp/cache/assets/development/sass/89c944581dfef47a3aa150f4bf2513c369606c18/_vendor-prefixes.scssc +0 -0
  356. data/spec/dummy/tmp/cache/assets/development/sass/9082de7479e9f9037daea1156327806c827ee4de/owl.carousel.cssc +0 -0
  357. data/spec/dummy/tmp/cache/assets/development/sass/9082de7479e9f9037daea1156327806c827ee4de/owl.theme.cssc +0 -0
  358. data/spec/dummy/tmp/cache/assets/development/sass/b098c6707accd416c04158e97686f3c60d18a5db/_variables.scssc +0 -0
  359. data/spec/dummy/tmp/cache/assets/development/sass/b098c6707accd416c04158e97686f3c60d18a5db/mixins.scssc +0 -0
  360. data/spec/dummy/tmp/cache/assets/development/sass/b098c6707accd416c04158e97686f3c60d18a5db/theme.scssc +0 -0
  361. data/spec/dummy/tmp/cache/assets/development/sass/c3eb61727e774fdd7a4c50d47dc9321d8c03465b/jquery.dataTables.scssc +0 -0
  362. data/spec/dummy/tmp/cache/assets/development/sprockets/02acd5c42920e30100d000381f279ed8 +0 -0
  363. data/spec/dummy/tmp/cache/assets/development/sprockets/06f25975c6b8ed69acfdec01011eb7bb +0 -0
  364. data/spec/dummy/tmp/cache/assets/development/sprockets/07683e3cd4c5faddd8150344d7f8ce74 +0 -0
  365. data/spec/dummy/tmp/cache/assets/development/sprockets/0a95350d1433847b3b929478b039b141 +0 -0
  366. data/spec/dummy/tmp/cache/assets/development/sprockets/114e00ddb52ee022a79ed4560ec79aa8 +0 -0
  367. data/spec/dummy/tmp/cache/assets/development/sprockets/14a82abe97db49e4cfcce62837ebd7b7 +0 -0
  368. data/spec/dummy/tmp/cache/assets/development/sprockets/1c6272244847e7e1fa1b127ea9c66bff +0 -0
  369. data/spec/dummy/tmp/cache/assets/development/sprockets/1ec4fb0db29fbf0cbf12c32449a988a9 +0 -0
  370. data/spec/dummy/tmp/cache/assets/development/sprockets/249e03ac9621a71cb1f7023fcc915530 +0 -0
  371. data/spec/dummy/tmp/cache/assets/development/sprockets/2600e70eaad40390bb6639885a589d2a +0 -0
  372. data/spec/dummy/tmp/cache/assets/development/sprockets/285362fd93ab9c40902bc5d499f699d8 +0 -0
  373. data/spec/dummy/tmp/cache/assets/development/sprockets/2da2ceb289ce39df011db7062d0d1327 +0 -0
  374. data/spec/dummy/tmp/cache/assets/development/sprockets/2f6ded1a00bc3b095f5c479acb5b3095 +0 -0
  375. data/spec/dummy/tmp/cache/assets/development/sprockets/3488bebbfac5a929b11e49b7403b4d7b +0 -0
  376. data/spec/dummy/tmp/cache/assets/development/sprockets/384156f28d835fc24585e681a46cd5d6 +0 -0
  377. data/spec/dummy/tmp/cache/assets/development/sprockets/39843c3b06d4de6199e87dc88d498201 +0 -0
  378. data/spec/dummy/tmp/cache/assets/development/sprockets/3be516ed9e4cd248c26d9921d29295ec +0 -0
  379. data/spec/dummy/tmp/cache/assets/development/sprockets/3d215563f8c60683272face7ff3c1038 +0 -0
  380. data/spec/dummy/tmp/cache/assets/development/sprockets/4276e0e173b6cfc29b9d6050eafe4bf3 +0 -0
  381. data/spec/dummy/tmp/cache/assets/development/sprockets/44f26650184cffb7192a3ad7d98a9d31 +0 -0
  382. data/spec/dummy/tmp/cache/assets/development/sprockets/497d2e4a82764eb58b4fbbb5fcb45aa2 +0 -0
  383. data/spec/dummy/tmp/cache/assets/development/sprockets/4c23aeaa35b27e7a0d5d3be8ee53c27d +0 -0
  384. data/spec/dummy/tmp/cache/assets/development/sprockets/4deda75c514a17f1f937821be49df47b +0 -0
  385. data/spec/dummy/tmp/cache/assets/development/sprockets/55f31fb7b5e9a4e1062acfdd4135432d +0 -0
  386. data/spec/dummy/tmp/cache/assets/development/sprockets/56567ed0854d6dd03a2dea900b2e9185 +0 -0
  387. data/spec/dummy/tmp/cache/assets/development/sprockets/567ed12a623140fb5eb2bb0591c94d70 +0 -0
  388. data/spec/dummy/tmp/cache/assets/development/sprockets/58abb036e1d10f9b42c55b22ffc8dfcf +0 -0
  389. data/spec/dummy/tmp/cache/assets/development/sprockets/59e8ebcc9e2bd48aefe3a211ef9e8d87 +0 -0
  390. data/spec/dummy/tmp/cache/assets/development/sprockets/5f7fb90ab1019225755f94778855fb8b +0 -0
  391. data/spec/dummy/tmp/cache/assets/development/sprockets/63c5d34e8d06c12346aa262d42bd0084 +0 -0
  392. data/spec/dummy/tmp/cache/assets/development/sprockets/6444bc0df41903ea509632e5127abcce +0 -0
  393. data/spec/dummy/tmp/cache/assets/development/sprockets/65b6d4456ef6974271b9a59fc6ec876f +0 -0
  394. data/spec/dummy/tmp/cache/assets/development/sprockets/6762976f03563abb88a60dd2284077f3 +0 -0
  395. data/spec/dummy/tmp/cache/assets/development/sprockets/6978b21857c4cf9d2472adf77f935dfb +0 -0
  396. data/spec/dummy/tmp/cache/assets/development/sprockets/6a402a89434119334a77b09c04ed6bd8 +0 -0
  397. data/spec/dummy/tmp/cache/assets/development/sprockets/6aea5e2eeb52372c0f4dacc9b5e17629 +0 -0
  398. data/spec/dummy/tmp/cache/assets/development/sprockets/6b0b3bc73b6ef3a71ff8c1235076f2fe +0 -0
  399. data/spec/dummy/tmp/cache/assets/development/sprockets/6de647c9f4ed6eab93fde5b1d14fa8d1 +0 -0
  400. data/spec/dummy/tmp/cache/assets/development/sprockets/73a3722d728be6cf120c161d1a504b69 +0 -0
  401. data/spec/dummy/tmp/cache/assets/development/sprockets/74616b97e75a1dd4f47c89c3682a5962 +0 -0
  402. data/spec/dummy/tmp/cache/assets/development/sprockets/746472d5488bcdba743ae6905b4d9349 +0 -0
  403. data/spec/dummy/tmp/cache/assets/development/sprockets/75ef1b07ff3b729901c05d7693c459bd +0 -0
  404. data/spec/dummy/tmp/cache/assets/development/sprockets/77caa48be4dcd5f1d6f7791702ddbf3d +0 -0
  405. data/spec/dummy/tmp/cache/assets/development/sprockets/788ef0523fa5e97bb2ce29fbec1acd3d +0 -0
  406. data/spec/dummy/tmp/cache/assets/development/sprockets/79842d87a8281f97fa6e29373248487a +0 -0
  407. data/spec/dummy/tmp/cache/assets/development/sprockets/79ea9ff8872eea03ff917b2710b89875 +0 -0
  408. data/spec/dummy/tmp/cache/assets/development/sprockets/79f81993fad700117165d85ea5e66f80 +0 -0
  409. data/spec/dummy/tmp/cache/assets/development/sprockets/7abdb6b3ba312e2e713372cfa9ed6fd5 +0 -0
  410. data/spec/dummy/tmp/cache/assets/development/sprockets/7c817753da2ab2a8909c5f67ca1055c4 +0 -0
  411. data/spec/dummy/tmp/cache/assets/development/sprockets/8387ec69aabd9e9e2922644385d82285 +0 -0
  412. data/spec/dummy/tmp/cache/assets/development/sprockets/893f7993845d6e4c08115ef3898fbbe8 +0 -0
  413. data/spec/dummy/tmp/cache/assets/development/sprockets/8bfa3d2073d730eeae5930950577808b +0 -0
  414. data/spec/dummy/tmp/cache/assets/development/sprockets/8cec29e6f07e8b1786d5fdacf8a715d2 +0 -0
  415. data/spec/dummy/tmp/cache/assets/development/sprockets/8df3635dafa13e99eda2cd17dd9f4698 +0 -0
  416. data/spec/dummy/tmp/cache/assets/development/sprockets/8e08251664adb259d48c3ff9019fb9cf +0 -0
  417. data/spec/dummy/tmp/cache/assets/development/sprockets/94686c27c680e4e11436a2262aa72b55 +0 -0
  418. data/spec/dummy/tmp/cache/assets/development/sprockets/95fcb48e995eb3d264567f7534ff91ee +0 -0
  419. data/spec/dummy/tmp/cache/assets/development/sprockets/9c9def80980301503b1376146256ae2f +0 -0
  420. data/spec/dummy/tmp/cache/assets/development/sprockets/9ccf973914706eef2efa9e6e7e443818 +0 -0
  421. data/spec/dummy/tmp/cache/assets/development/sprockets/9d495bd3c398e7d7b507902bb8f71eeb +0 -0
  422. data/spec/dummy/tmp/cache/assets/development/sprockets/9d71f6be7960469b0582464c006ac743 +0 -0
  423. data/spec/dummy/tmp/cache/assets/development/sprockets/9e985e9ae12f0a0f409840f8de50ec85 +0 -0
  424. data/spec/dummy/tmp/cache/assets/development/sprockets/a12f906dc9d7f98d0d33c14534624207 +0 -0
  425. data/spec/dummy/tmp/cache/assets/development/sprockets/a3241713158b6d467b4ff8c0e86260ef +0 -0
  426. data/spec/dummy/tmp/cache/assets/development/sprockets/a38526dbff17aaff93ad71c58a5fac91 +0 -0
  427. data/spec/dummy/tmp/cache/assets/development/sprockets/a563347af44f552d9777160b9bc2f20c +0 -0
  428. data/spec/dummy/tmp/cache/assets/development/sprockets/a5895b06bddc58da1693d54571f58872 +0 -0
  429. data/spec/dummy/tmp/cache/assets/development/sprockets/a6233feba34a45a0550ca7e06ebeb8b2 +0 -0
  430. data/spec/dummy/tmp/cache/assets/development/sprockets/a62d4f134ec8d16ef50bbf15a53d6b57 +0 -0
  431. data/spec/dummy/tmp/cache/assets/development/sprockets/a7c825ce172c4a095653ab0022a0e979 +0 -0
  432. data/spec/dummy/tmp/cache/assets/development/sprockets/a9612f700869ef313dbd4fe5e23e9361 +0 -0
  433. data/spec/dummy/tmp/cache/assets/development/sprockets/aa1ba41473bb9ff1a6d2be1f794719df +0 -0
  434. data/spec/dummy/tmp/cache/assets/development/sprockets/aac3bc57fb221351f292885c5ee21933 +0 -0
  435. data/spec/dummy/tmp/cache/assets/development/sprockets/aad666db3c05857182302664d9b8cc45 +0 -0
  436. data/spec/dummy/tmp/cache/assets/development/sprockets/ab0cb44cae19250b9348dcd66b5c04d7 +0 -0
  437. data/spec/dummy/tmp/cache/assets/development/sprockets/ad6173f532233499e71f4e8c28e6020d +0 -0
  438. data/spec/dummy/tmp/cache/assets/development/sprockets/adc78e9799ac1c95dee7e858df40b4a8 +0 -0
  439. data/spec/dummy/tmp/cache/assets/development/sprockets/adf03687ee42f87002445c1096069d64 +0 -0
  440. data/spec/dummy/tmp/cache/assets/development/sprockets/aeb4122ebead9e5e9f6a3625fefbae3d +0 -0
  441. data/spec/dummy/tmp/cache/assets/development/sprockets/af6aade4734b90299fb7b16e4bb3e737 +0 -0
  442. data/spec/dummy/tmp/cache/assets/development/sprockets/b5f65e3f4319656fcd1dd0a3f1b66e6d +0 -0
  443. data/spec/dummy/tmp/cache/assets/development/sprockets/bc3e3f14e046b451d6f962e59bf22e0b +0 -0
  444. data/spec/dummy/tmp/cache/assets/development/sprockets/bd49e8df5191d3e15d2ffa14fc384869 +0 -0
  445. data/spec/dummy/tmp/cache/assets/development/sprockets/c37311498380e52a91dbfc2c96425eac +0 -0
  446. data/spec/dummy/tmp/cache/assets/development/sprockets/c60cce66e260d24218c7365bc3401b3e +0 -0
  447. data/spec/dummy/tmp/cache/assets/development/sprockets/c8ee3b2ea3203e3955b4db6e857d346e +0 -0
  448. data/spec/dummy/tmp/cache/assets/development/sprockets/cb3ac6ce6a98f3a3fd0443fcf846239d +0 -0
  449. data/spec/dummy/tmp/cache/assets/development/sprockets/cb758c86a19ec6b77f88402c95add6d4 +0 -0
  450. data/spec/dummy/tmp/cache/assets/development/sprockets/ccffcd47c7db3a6ab7e8006abc792752 +0 -0
  451. data/spec/dummy/tmp/cache/assets/development/sprockets/ce0edb89508050d6ce80d9c608b0e478 +0 -0
  452. data/spec/dummy/tmp/cache/assets/development/sprockets/ce4654bef988a1eb28b9da8d16fd2f65 +0 -0
  453. data/spec/dummy/tmp/cache/assets/development/sprockets/d1ba02c2518f1bd8954e5fb38a6fdac1 +0 -0
  454. data/spec/dummy/tmp/cache/assets/development/sprockets/d3ef307aaa54f919818b4dfb65b612f3 +0 -0
  455. data/spec/dummy/tmp/cache/assets/development/sprockets/d85c828a1b79af337db6fa07b91d05f2 +0 -0
  456. data/spec/dummy/tmp/cache/assets/development/sprockets/d8e52300c14f8f97b4ad8849301d7433 +0 -0
  457. data/spec/dummy/tmp/cache/assets/development/sprockets/d986eea7fe11b3e20c563cdc38db62ad +0 -0
  458. data/spec/dummy/tmp/cache/assets/development/sprockets/db8fa1b50c3d48a484b7f5949e075a57 +0 -0
  459. data/spec/dummy/tmp/cache/assets/development/sprockets/de74bb6959d07da7cff09d3b7d85cd7e +0 -0
  460. data/spec/dummy/tmp/cache/assets/development/sprockets/e3254e9ef9c6add6c4ef3a9eee700e7d +0 -0
  461. data/spec/dummy/tmp/cache/assets/development/sprockets/e37cf58bfbd61c44c57446c460ccc066 +0 -0
  462. data/spec/dummy/tmp/cache/assets/development/sprockets/e45751ceff92085477ef49e2c7f7622e +0 -0
  463. data/spec/dummy/tmp/cache/assets/development/sprockets/e64d1a313c5d885c637c9224d54c6cbd +0 -0
  464. data/spec/dummy/tmp/cache/assets/development/sprockets/e6c4ac31d3e7740403f6d8d50903e3b2 +0 -0
  465. data/spec/dummy/tmp/cache/assets/development/sprockets/e8272a81b13334e8f911097487b72702 +0 -0
  466. data/spec/dummy/tmp/cache/assets/development/sprockets/e93f2eac197dae7e9c54b2a4e17675f3 +0 -0
  467. data/spec/dummy/tmp/cache/assets/development/sprockets/ecc139ef2345848cb162ee60e48a008c +0 -0
  468. data/spec/dummy/tmp/cache/assets/development/sprockets/ef919881a8fe5b6d173257130a00adbc +0 -0
  469. data/spec/dummy/tmp/cache/assets/development/sprockets/f041bae6ba73e8a34bdf8603dca6f761 +0 -0
  470. data/spec/dummy/tmp/cache/assets/development/sprockets/f469cae685b83bf116813dc134ed0d2b +0 -0
  471. data/spec/dummy/tmp/cache/assets/development/sprockets/f8c026bc9f28742f8499ae687002da88 +0 -0
  472. data/spec/dummy/tmp/cache/assets/development/sprockets/f9677a86b9c39422d1720fbc89ab727f +0 -0
  473. data/spec/dummy/tmp/cache/assets/development/sprockets/fc35cea81cbc344664892761d90af504 +0 -0
  474. data/spec/dummy/tmp/cache/assets/development/sprockets/fe23e9bb24f73b37f78fcf7523f4ddc7 +0 -0
  475. data/spec/dummy/tmp/cache/assets/development/sprockets/fe79efd19de6388221ed374971484cbc +0 -0
  476. data/spec/factories/hatchy_announcements.rb +6 -0
  477. data/spec/factories/hatchy_bank_accounts.rb +6 -0
  478. data/spec/factories/hatchy_banks.rb +6 -0
  479. data/spec/factories/hatchy_categories.rb +6 -0
  480. data/spec/factories/hatchy_category_followers.rb +6 -0
  481. data/spec/factories/hatchy_contributions.rb +6 -0
  482. data/spec/factories/hatchy_countries.rb +6 -0
  483. data/spec/factories/hatchy_project_accounts.rb +6 -0
  484. data/spec/factories/hatchy_projects.rb +6 -0
  485. data/spec/factories/hatchy_rewards.rb +6 -0
  486. data/spec/factories/hatchy_users.rb +6 -0
  487. data/spec/models/hatchy/announcement_spec.rb +7 -0
  488. data/spec/models/hatchy/bank_account_spec.rb +7 -0
  489. data/spec/models/hatchy/bank_spec.rb +7 -0
  490. data/spec/models/hatchy/category_follower_spec.rb +7 -0
  491. data/spec/models/hatchy/category_spec.rb +7 -0
  492. data/spec/models/hatchy/contribution_spec.rb +7 -0
  493. data/spec/models/hatchy/country_spec.rb +7 -0
  494. data/spec/models/hatchy/project_account_spec.rb +7 -0
  495. data/spec/models/hatchy/project_spec.rb +7 -0
  496. data/spec/models/hatchy/reward_spec.rb +7 -0
  497. data/spec/models/hatchy/user_spec.rb +7 -0
  498. data/spec/rails_helper.rb +49 -0
  499. data/spec/spec_helper.rb +94 -0
  500. metadata +1019 -0
@@ -0,0 +1,1421 @@
1
+ /*
2
+ PNotify 2.1.0 sciactive.com/pnotify/
3
+ (C) 2015 Hunter Perrin
4
+ license GPL/LGPL/MPL
5
+ */
6
+ /*
7
+ * ====== PNotify ======
8
+ *
9
+ * http://sciactive.com/pnotify/
10
+ *
11
+ * Copyright 2009-2015 Hunter Perrin
12
+ *
13
+ * Triple licensed under the GPL, LGPL, and MPL.
14
+ * http://gnu.org/licenses/gpl.html
15
+ * http://gnu.org/licenses/lgpl.html
16
+ * http://mozilla.org/MPL/MPL-1.1.html
17
+ */
18
+
19
+ (function (factory) {
20
+ if (typeof exports === 'object' && typeof module !== 'undefined') {
21
+ // CommonJS
22
+ module.exports = factory(require('jquery'));
23
+ } else if (typeof define === 'function' && define.amd) {
24
+ // AMD. Register as a module.
25
+ define('pnotify', ['jquery'], factory);
26
+ } else {
27
+ // Browser globals
28
+ factory(jQuery);
29
+ }
30
+ }(function($){
31
+ var default_stack = {
32
+ dir1: "down",
33
+ dir2: "left",
34
+ push: "bottom",
35
+ spacing1: 25,
36
+ spacing2: 25,
37
+ context: $("body")
38
+ };
39
+ var posTimer, // Position all timer.
40
+ body,
41
+ jwindow = $(window);
42
+ // Set global variables.
43
+ var do_when_ready = function(){
44
+ body = $("body");
45
+ PNotify.prototype.options.stack.context = body;
46
+ jwindow = $(window);
47
+ // Reposition the notices when the window resizes.
48
+ jwindow.bind('resize', function(){
49
+ if (posTimer) {
50
+ clearTimeout(posTimer);
51
+ }
52
+ posTimer = setTimeout(function(){
53
+ PNotify.positionAll(true);
54
+ }, 10);
55
+ });
56
+ };
57
+ PNotify = function(options){
58
+ this.parseOptions(options);
59
+ this.init();
60
+ };
61
+ $.extend(PNotify.prototype, {
62
+ // The current version of PNotify.
63
+ version: "2.1.0",
64
+
65
+ // === Options ===
66
+
67
+ // Options defaults.
68
+ options: {
69
+ // The notice's title.
70
+ title: false,
71
+ // Whether to escape the content of the title. (Not allow HTML.)
72
+ title_escape: false,
73
+ // The notice's text.
74
+ text: false,
75
+ // Whether to escape the content of the text. (Not allow HTML.)
76
+ text_escape: false,
77
+ // What styling classes to use. (Can be either "brighttheme", "jqueryui", "bootstrap2", "bootstrap3", or "fontawesome".)
78
+ styling: "brighttheme",
79
+ // Additional classes to be added to the notice. (For custom styling.)
80
+ addclass: "",
81
+ // Class to be added to the notice for corner styling.
82
+ cornerclass: "",
83
+ // Display the notice when it is created.
84
+ auto_display: true,
85
+ // Width of the notice.
86
+ width: "300px",
87
+ // Minimum height of the notice. It will expand to fit content.
88
+ min_height: "16px",
89
+ // Type of the notice. "notice", "info", "success", or "error".
90
+ type: "notice",
91
+ // Set icon to true to use the default icon for the selected
92
+ // style/type, false for no icon, or a string for your own icon class.
93
+ icon: true,
94
+ // Opacity of the notice.
95
+ opacity: 1,
96
+ // The animation to use when displaying and hiding the notice. "none",
97
+ // "show", "fade", and "slide" are built in to jQuery. Others require jQuery
98
+ // UI. Use an object with effect_in and effect_out to use different effects.
99
+ animation: "fade",
100
+ // Speed at which the notice animates in and out. "slow", "def" or "normal",
101
+ // "fast" or number of milliseconds.
102
+ animate_speed: "slow",
103
+ // Specify a specific duration of position animation
104
+ position_animate_speed: 500,
105
+ // Display a drop shadow.
106
+ shadow: true,
107
+ // After a delay, remove the notice.
108
+ hide: true,
109
+ // Delay in milliseconds before the notice is removed.
110
+ delay: 8000,
111
+ // Reset the hide timer if the mouse moves over the notice.
112
+ mouse_reset: true,
113
+ // Remove the notice's elements from the DOM after it is removed.
114
+ remove: true,
115
+ // Change new lines to br tags.
116
+ insert_brs: true,
117
+ // Whether to remove notices from the global array.
118
+ destroy: true,
119
+ // The stack on which the notices will be placed. Also controls the
120
+ // direction the notices stack.
121
+ stack: default_stack
122
+ },
123
+
124
+ // === Modules ===
125
+
126
+ // This object holds all the PNotify modules. They are used to provide
127
+ // additional functionality.
128
+ modules: {},
129
+ // This runs an event on all the modules.
130
+ runModules: function(event, arg){
131
+ var curArg;
132
+ for (var module in this.modules) {
133
+ curArg = ((typeof arg === "object" && module in arg) ? arg[module] : arg);
134
+ if (typeof this.modules[module][event] === 'function') {
135
+ this.modules[module][event](this, typeof this.options[module] === 'object' ? this.options[module] : {}, curArg);
136
+ }
137
+ }
138
+ },
139
+
140
+ // === Class Variables ===
141
+
142
+ state: "initializing", // The state can be "initializing", "opening", "open", "closing", and "closed".
143
+ timer: null, // Auto close timer.
144
+ styles: null,
145
+ elem: null,
146
+ container: null,
147
+ title_container: null,
148
+ text_container: null,
149
+ animating: false, // Stores what is currently being animated (in or out).
150
+ timerHide: false, // Stores whether the notice was hidden by a timer.
151
+
152
+ // === Events ===
153
+
154
+ init: function(){
155
+ var that = this;
156
+
157
+ // First and foremost, we don't want our module objects all referencing the prototype.
158
+ this.modules = {};
159
+ $.extend(true, this.modules, PNotify.prototype.modules);
160
+
161
+ // Get our styling object.
162
+ if (typeof this.options.styling === "object") {
163
+ this.styles = this.options.styling;
164
+ } else {
165
+ this.styles = PNotify.styling[this.options.styling];
166
+ }
167
+
168
+ // Create our widget.
169
+ // Stop animation, reset the removal timer when the user mouses over.
170
+ this.elem = $("<div />", {
171
+ "class": "ui-pnotify "+this.options.addclass,
172
+ "css": {"display": "none"},
173
+ "aria-live": "assertive",
174
+ "mouseenter": function(e){
175
+ if (that.options.mouse_reset && that.animating === "out") {
176
+ if (!that.timerHide) {
177
+ return;
178
+ }
179
+ that.cancelRemove();
180
+ }
181
+ // Stop the close timer.
182
+ if (that.options.hide && that.options.mouse_reset) {
183
+ that.cancelRemove();
184
+ }
185
+ },
186
+ "mouseleave": function(e){
187
+ // Start the close timer.
188
+ if (that.options.hide && that.options.mouse_reset && that.animating !== "out") {
189
+ that.queueRemove();
190
+ }
191
+ PNotify.positionAll();
192
+ }
193
+ });
194
+ // Create a container for the notice contents.
195
+ this.container = $("<div />", {
196
+ "class": this.styles.container+" ui-pnotify-container "+(this.options.type === "error" ? this.styles.error : (this.options.type === "info" ? this.styles.info : (this.options.type === "success" ? this.styles.success : this.styles.notice))),
197
+ "role": "alert"
198
+ }).appendTo(this.elem);
199
+ if (this.options.cornerclass !== "") {
200
+ this.container.removeClass("ui-corner-all").addClass(this.options.cornerclass);
201
+ }
202
+ // Create a drop shadow.
203
+ if (this.options.shadow) {
204
+ this.container.addClass("ui-pnotify-shadow");
205
+ }
206
+
207
+
208
+ // Add the appropriate icon.
209
+ if (this.options.icon !== false) {
210
+ $("<div />", {"class": "ui-pnotify-icon"})
211
+ .append($("<span />", {"class": this.options.icon === true ? (this.options.type === "error" ? this.styles.error_icon : (this.options.type === "info" ? this.styles.info_icon : (this.options.type === "success" ? this.styles.success_icon : this.styles.notice_icon))) : this.options.icon}))
212
+ .prependTo(this.container);
213
+ }
214
+
215
+ // Add a title.
216
+ this.title_container = $("<h4 />", {
217
+ "class": "ui-pnotify-title"
218
+ })
219
+ .appendTo(this.container);
220
+ if (this.options.title === false) {
221
+ this.title_container.hide();
222
+ } else if (this.options.title_escape) {
223
+ this.title_container.text(this.options.title);
224
+ } else {
225
+ this.title_container.html(this.options.title);
226
+ }
227
+
228
+ // Add text.
229
+ this.text_container = $("<div />", {
230
+ "class": "ui-pnotify-text"
231
+ })
232
+ .appendTo(this.container);
233
+ if (this.options.text === false) {
234
+ this.text_container.hide();
235
+ } else if (this.options.text_escape) {
236
+ this.text_container.text(this.options.text);
237
+ } else {
238
+ this.text_container.html(this.options.insert_brs ? String(this.options.text).replace(/\n/g, "<br />") : this.options.text);
239
+ }
240
+
241
+ // Set width and min height.
242
+ if (typeof this.options.width === "string") {
243
+ this.elem.css("width", this.options.width);
244
+ }
245
+ if (typeof this.options.min_height === "string") {
246
+ this.container.css("min-height", this.options.min_height);
247
+ }
248
+
249
+
250
+ // Add the notice to the notice array.
251
+ if (this.options.stack.push === "top") {
252
+ PNotify.notices = $.merge([this], PNotify.notices);
253
+ } else {
254
+ PNotify.notices = $.merge(PNotify.notices, [this]);
255
+ }
256
+ // Now position all the notices if they are to push to the top.
257
+ if (this.options.stack.push === "top") {
258
+ this.queuePosition(false, 1);
259
+ }
260
+
261
+
262
+
263
+
264
+ // Mark the stack so it won't animate the new notice.
265
+ this.options.stack.animation = false;
266
+
267
+ // Run the modules.
268
+ this.runModules('init');
269
+
270
+ // Display the notice.
271
+ if (this.options.auto_display) {
272
+ this.open();
273
+ }
274
+ return this;
275
+ },
276
+
277
+ // This function is for updating the notice.
278
+ update: function(options){
279
+ // Save old options.
280
+ var oldOpts = this.options;
281
+ // Then update to the new options.
282
+ this.parseOptions(oldOpts, options);
283
+ // Update the corner class.
284
+ if (this.options.cornerclass !== oldOpts.cornerclass) {
285
+ this.container.removeClass("ui-corner-all "+oldOpts.cornerclass).addClass(this.options.cornerclass);
286
+ }
287
+ // Update the shadow.
288
+ if (this.options.shadow !== oldOpts.shadow) {
289
+ if (this.options.shadow) {
290
+ this.container.addClass("ui-pnotify-shadow");
291
+ } else {
292
+ this.container.removeClass("ui-pnotify-shadow");
293
+ }
294
+ }
295
+ // Update the additional classes.
296
+ if (this.options.addclass === false) {
297
+ this.elem.removeClass(oldOpts.addclass);
298
+ } else if (this.options.addclass !== oldOpts.addclass) {
299
+ this.elem.removeClass(oldOpts.addclass).addClass(this.options.addclass);
300
+ }
301
+ // Update the title.
302
+ if (this.options.title === false) {
303
+ this.title_container.slideUp("fast");
304
+ } else if (this.options.title !== oldOpts.title) {
305
+ if (this.options.title_escape) {
306
+ this.title_container.text(this.options.title);
307
+ } else {
308
+ this.title_container.html(this.options.title);
309
+ }
310
+ if (oldOpts.title === false) {
311
+ this.title_container.slideDown(200)
312
+ }
313
+ }
314
+ // Update the text.
315
+ if (this.options.text === false) {
316
+ this.text_container.slideUp("fast");
317
+ } else if (this.options.text !== oldOpts.text) {
318
+ if (this.options.text_escape) {
319
+ this.text_container.text(this.options.text);
320
+ } else {
321
+ this.text_container.html(this.options.insert_brs ? String(this.options.text).replace(/\n/g, "<br />") : this.options.text);
322
+ }
323
+ if (oldOpts.text === false) {
324
+ this.text_container.slideDown(200)
325
+ }
326
+ }
327
+ // Change the notice type.
328
+ if (this.options.type !== oldOpts.type)
329
+ this.container.removeClass(
330
+ this.styles.error+" "+this.styles.notice+" "+this.styles.success+" "+this.styles.info
331
+ ).addClass(this.options.type === "error" ?
332
+ this.styles.error :
333
+ (this.options.type === "info" ?
334
+ this.styles.info :
335
+ (this.options.type === "success" ?
336
+ this.styles.success :
337
+ this.styles.notice
338
+ )
339
+ )
340
+ );
341
+ if (this.options.icon !== oldOpts.icon || (this.options.icon === true && this.options.type !== oldOpts.type)) {
342
+ // Remove any old icon.
343
+ this.container.find("div.ui-pnotify-icon").remove();
344
+ if (this.options.icon !== false) {
345
+ // Build the new icon.
346
+ $("<div />", {"class": "ui-pnotify-icon"})
347
+ .append($("<span />", {"class": this.options.icon === true ? (this.options.type === "error" ? this.styles.error_icon : (this.options.type === "info" ? this.styles.info_icon : (this.options.type === "success" ? this.styles.success_icon : this.styles.notice_icon))) : this.options.icon}))
348
+ .prependTo(this.container);
349
+ }
350
+ }
351
+ // Update the width.
352
+ if (this.options.width !== oldOpts.width) {
353
+ this.elem.animate({width: this.options.width});
354
+ }
355
+ // Update the minimum height.
356
+ if (this.options.min_height !== oldOpts.min_height) {
357
+ this.container.animate({minHeight: this.options.min_height});
358
+ }
359
+ // Update the opacity.
360
+ if (this.options.opacity !== oldOpts.opacity) {
361
+ this.elem.fadeTo(this.options.animate_speed, this.options.opacity);
362
+ }
363
+ // Update the timed hiding.
364
+ if (!this.options.hide) {
365
+ this.cancelRemove();
366
+ } else if (!oldOpts.hide) {
367
+ this.queueRemove();
368
+ }
369
+ this.queuePosition(true);
370
+
371
+ // Run the modules.
372
+ this.runModules('update', oldOpts);
373
+ return this;
374
+ },
375
+
376
+ // Display the notice.
377
+ open: function(){
378
+ this.state = "opening";
379
+ // Run the modules.
380
+ this.runModules('beforeOpen');
381
+
382
+ var that = this;
383
+ // If the notice is not in the DOM, append it.
384
+ if (!this.elem.parent().length) {
385
+ this.elem.appendTo(this.options.stack.context ? this.options.stack.context : body);
386
+ }
387
+ // Try to put it in the right position.
388
+ if (this.options.stack.push !== "top") {
389
+ this.position(true);
390
+ }
391
+ // First show it, then set its opacity, then hide it.
392
+ if (this.options.animation === "fade" || this.options.animation.effect_in === "fade") {
393
+ // If it's fading in, it should start at 0.
394
+ this.elem.show().fadeTo(0, 0).hide();
395
+ } else {
396
+ // Or else it should be set to the opacity.
397
+ if (this.options.opacity !== 1) {
398
+ this.elem.show().fadeTo(0, this.options.opacity).hide();
399
+ }
400
+ }
401
+ this.animateIn(function(){
402
+ that.queuePosition(true);
403
+
404
+ // Now set it to hide.
405
+ if (that.options.hide) {
406
+ that.queueRemove();
407
+ }
408
+
409
+ that.state = "open";
410
+
411
+ // Run the modules.
412
+ that.runModules('afterOpen');
413
+ });
414
+
415
+ return this;
416
+ },
417
+
418
+ // Remove the notice.
419
+ remove: function(timer_hide) {
420
+ this.state = "closing";
421
+ this.timerHide = !!timer_hide; // Make sure it's a boolean.
422
+ // Run the modules.
423
+ this.runModules('beforeClose');
424
+
425
+ var that = this;
426
+ if (this.timer) {
427
+ window.clearTimeout(this.timer);
428
+ this.timer = null;
429
+ }
430
+ this.animateOut(function(){
431
+ that.state = "closed";
432
+ // Run the modules.
433
+ that.runModules('afterClose');
434
+ that.queuePosition(true);
435
+ // If we're supposed to remove the notice from the DOM, do it.
436
+ if (that.options.remove)
437
+ that.elem.detach();
438
+ // Run the modules.
439
+ that.runModules('beforeDestroy');
440
+ // Remove object from PNotify.notices to prevent memory leak (issue #49)
441
+ // unless destroy is off
442
+ if (that.options.destroy) {
443
+ if (PNotify.notices !== null) {
444
+ var idx = $.inArray(that,PNotify.notices);
445
+ if (idx !== -1) {
446
+ PNotify.notices.splice(idx,1);
447
+ }
448
+ }
449
+ }
450
+ // Run the modules.
451
+ that.runModules('afterDestroy');
452
+ });
453
+
454
+ return this;
455
+ },
456
+
457
+ // === Class Methods ===
458
+
459
+ // Get the DOM element.
460
+ get: function(){
461
+ return this.elem;
462
+ },
463
+
464
+ // Put all the options in the right places.
465
+ parseOptions: function(options, moreOptions){
466
+ this.options = $.extend(true, {}, PNotify.prototype.options);
467
+ // This is the only thing that *should* be copied by reference.
468
+ this.options.stack = PNotify.prototype.options.stack;
469
+ var optArray = [options, moreOptions], curOpts;
470
+ for (var curIndex=0; curIndex < optArray.length; curIndex++) {
471
+ curOpts = optArray[curIndex];
472
+ if (typeof curOpts == "undefined") {
473
+ break;
474
+ }
475
+ if (typeof curOpts !== 'object') {
476
+ this.options.text = curOpts;
477
+ } else {
478
+ for (var option in curOpts) {
479
+ if (this.modules[option]) {
480
+ // Avoid overwriting module defaults.
481
+ $.extend(true, this.options[option], curOpts[option]);
482
+ } else {
483
+ this.options[option] = curOpts[option];
484
+ }
485
+ }
486
+ }
487
+ }
488
+ },
489
+
490
+ // Animate the notice in.
491
+ animateIn: function(callback){
492
+ // Declare that the notice is animating in. (Or has completed animating in.)
493
+ this.animating = "in";
494
+ var animation;
495
+ if (typeof this.options.animation.effect_in !== "undefined") {
496
+ animation = this.options.animation.effect_in;
497
+ } else {
498
+ animation = this.options.animation;
499
+ }
500
+ if (animation === "none") {
501
+ this.elem.show();
502
+ callback();
503
+ } else if (animation === "show") {
504
+ this.elem.show(this.options.animate_speed, callback);
505
+ } else if (animation === "fade") {
506
+ this.elem.show().fadeTo(this.options.animate_speed, this.options.opacity, callback);
507
+ } else if (animation === "slide") {
508
+ this.elem.slideDown(this.options.animate_speed, callback);
509
+ } else if (typeof animation === "function") {
510
+ animation("in", callback, this.elem);
511
+ } else {
512
+ this.elem.show(animation, (typeof this.options.animation.options_in === "object" ? this.options.animation.options_in : {}), this.options.animate_speed, callback);
513
+ }
514
+ if (this.elem.parent().hasClass('ui-effects-wrapper')) {
515
+ this.elem.parent().css({
516
+ "position": "fixed",
517
+ "overflow": "visible"
518
+ });
519
+ }
520
+ if (animation !== "slide") {
521
+ this.elem.css("overflow", "visible");
522
+ }
523
+ this.container.css("overflow", "hidden");
524
+ },
525
+
526
+ // Animate the notice out.
527
+ animateOut: function(callback){
528
+ // Declare that the notice is animating out. (Or has completed animating out.)
529
+ this.animating = "out";
530
+ var animation;
531
+ if (typeof this.options.animation.effect_out !== "undefined") {
532
+ animation = this.options.animation.effect_out;
533
+ } else {
534
+ animation = this.options.animation;
535
+ }
536
+ if (animation === "none") {
537
+ this.elem.hide();
538
+ callback();
539
+ } else if (animation === "show") {
540
+ this.elem.hide(this.options.animate_speed, callback);
541
+ } else if (animation === "fade") {
542
+ this.elem.fadeOut(this.options.animate_speed, callback);
543
+ } else if (animation === "slide") {
544
+ this.elem.slideUp(this.options.animate_speed, callback);
545
+ } else if (typeof animation === "function") {
546
+ animation("out", callback, this.elem);
547
+ } else {
548
+ this.elem.hide(animation, (typeof this.options.animation.options_out === "object" ? this.options.animation.options_out : {}), this.options.animate_speed, callback);
549
+ }
550
+ if (this.elem.parent().hasClass('ui-effects-wrapper')) {
551
+ this.elem.parent().css({
552
+ "position": "fixed",
553
+ "overflow": "visible"
554
+ });
555
+ }
556
+ if (animation !== "slide") {
557
+ this.elem.css("overflow", "visible");
558
+ }
559
+ this.container.css("overflow", "hidden");
560
+ },
561
+
562
+ // Position the notice. dont_skip_hidden causes the notice to
563
+ // position even if it's not visible.
564
+ position: function(dontSkipHidden){
565
+ // Get the notice's stack.
566
+ var s = this.options.stack,
567
+ e = this.elem;
568
+ if (e.parent().hasClass('ui-effects-wrapper')) {
569
+ e = this.elem.css({
570
+ "left": "0",
571
+ "top": "0",
572
+ "right": "0",
573
+ "bottom": "0"
574
+ }).parent();
575
+ }
576
+ if (typeof s.context === "undefined") {
577
+ s.context = body;
578
+ }
579
+ if (!s) {
580
+ return;
581
+ }
582
+ if (typeof s.nextpos1 !== "number") {
583
+ s.nextpos1 = s.firstpos1;
584
+ }
585
+ if (typeof s.nextpos2 !== "number") {
586
+ s.nextpos2 = s.firstpos2;
587
+ }
588
+ if (typeof s.addpos2 !== "number") {
589
+ s.addpos2 = 0;
590
+ }
591
+ var hidden = e.css("display") === "none";
592
+ // Skip this notice if it's not shown.
593
+ if (!hidden || dontSkipHidden) {
594
+ var curpos1, curpos2;
595
+ // Store what will need to be animated.
596
+ var animate = {};
597
+ // Calculate the current pos1 value.
598
+ var csspos1;
599
+ switch (s.dir1) {
600
+ case "down":
601
+ csspos1 = "top";
602
+ break;
603
+ case "up":
604
+ csspos1 = "bottom";
605
+ break;
606
+ case "left":
607
+ csspos1 = "right";
608
+ break;
609
+ case "right":
610
+ csspos1 = "left";
611
+ break;
612
+ }
613
+ curpos1 = parseInt(e.css(csspos1).replace(/(?:\..*|[^0-9.])/g, ''));
614
+ if (isNaN(curpos1)) {
615
+ curpos1 = 0;
616
+ }
617
+ // Remember the first pos1, so the first visible notice goes there.
618
+ if (typeof s.firstpos1 === "undefined" && !hidden) {
619
+ s.firstpos1 = curpos1;
620
+ s.nextpos1 = s.firstpos1;
621
+ }
622
+ // Calculate the current pos2 value.
623
+ var csspos2;
624
+ switch (s.dir2) {
625
+ case "down":
626
+ csspos2 = "top";
627
+ break;
628
+ case "up":
629
+ csspos2 = "bottom";
630
+ break;
631
+ case "left":
632
+ csspos2 = "right";
633
+ break;
634
+ case "right":
635
+ csspos2 = "left";
636
+ break;
637
+ }
638
+ curpos2 = parseInt(e.css(csspos2).replace(/(?:\..*|[^0-9.])/g, ''));
639
+ if (isNaN(curpos2)) {
640
+ curpos2 = 0;
641
+ }
642
+ // Remember the first pos2, so the first visible notice goes there.
643
+ if (typeof s.firstpos2 === "undefined" && !hidden) {
644
+ s.firstpos2 = curpos2;
645
+ s.nextpos2 = s.firstpos2;
646
+ }
647
+ // Check that it's not beyond the viewport edge.
648
+ if ((s.dir1 === "down" && s.nextpos1 + e.height() > (s.context.is(body) ? jwindow.height() : s.context.prop('scrollHeight')) ) ||
649
+ (s.dir1 === "up" && s.nextpos1 + e.height() > (s.context.is(body) ? jwindow.height() : s.context.prop('scrollHeight')) ) ||
650
+ (s.dir1 === "left" && s.nextpos1 + e.width() > (s.context.is(body) ? jwindow.width() : s.context.prop('scrollWidth')) ) ||
651
+ (s.dir1 === "right" && s.nextpos1 + e.width() > (s.context.is(body) ? jwindow.width() : s.context.prop('scrollWidth')) ) ) {
652
+ // If it is, it needs to go back to the first pos1, and over on pos2.
653
+ s.nextpos1 = s.firstpos1;
654
+ s.nextpos2 += s.addpos2 + (typeof s.spacing2 === "undefined" ? 25 : s.spacing2);
655
+ s.addpos2 = 0;
656
+ }
657
+ // Animate if we're moving on dir2.
658
+ if (s.animation && s.nextpos2 < curpos2) {
659
+ switch (s.dir2) {
660
+ case "down":
661
+ animate.top = s.nextpos2+"px";
662
+ break;
663
+ case "up":
664
+ animate.bottom = s.nextpos2+"px";
665
+ break;
666
+ case "left":
667
+ animate.right = s.nextpos2+"px";
668
+ break;
669
+ case "right":
670
+ animate.left = s.nextpos2+"px";
671
+ break;
672
+ }
673
+ } else {
674
+ if (typeof s.nextpos2 === "number") {
675
+ e.css(csspos2, s.nextpos2+"px");
676
+ }
677
+ }
678
+ // Keep track of the widest/tallest notice in the column/row, so we can push the next column/row.
679
+ switch (s.dir2) {
680
+ case "down":
681
+ case "up":
682
+ if (e.outerHeight(true) > s.addpos2) {
683
+ s.addpos2 = e.height();
684
+ }
685
+ break;
686
+ case "left":
687
+ case "right":
688
+ if (e.outerWidth(true) > s.addpos2) {
689
+ s.addpos2 = e.width();
690
+ }
691
+ break;
692
+ }
693
+ // Move the notice on dir1.
694
+ if (typeof s.nextpos1 === "number") {
695
+ // Animate if we're moving toward the first pos.
696
+ if (s.animation && (curpos1 > s.nextpos1 || animate.top || animate.bottom || animate.right || animate.left)) {
697
+ switch (s.dir1) {
698
+ case "down":
699
+ animate.top = s.nextpos1+"px";
700
+ break;
701
+ case "up":
702
+ animate.bottom = s.nextpos1+"px";
703
+ break;
704
+ case "left":
705
+ animate.right = s.nextpos1+"px";
706
+ break;
707
+ case "right":
708
+ animate.left = s.nextpos1+"px";
709
+ break;
710
+ }
711
+ } else {
712
+ e.css(csspos1, s.nextpos1+"px");
713
+ }
714
+ }
715
+ // Run the animation.
716
+ if (animate.top || animate.bottom || animate.right || animate.left) {
717
+ e.animate(animate, {
718
+ duration: this.options.position_animate_speed,
719
+ queue: false
720
+ });
721
+ }
722
+ // Calculate the next dir1 position.
723
+ switch (s.dir1) {
724
+ case "down":
725
+ case "up":
726
+ s.nextpos1 += e.height() + (typeof s.spacing1 === "undefined" ? 25 : s.spacing1);
727
+ break;
728
+ case "left":
729
+ case "right":
730
+ s.nextpos1 += e.width() + (typeof s.spacing1 === "undefined" ? 25 : s.spacing1);
731
+ break;
732
+ }
733
+ }
734
+ return this;
735
+ },
736
+ // Queue the position all function so it doesn't run repeatedly and
737
+ // use up resources.
738
+ queuePosition: function(animate, milliseconds){
739
+ if (posTimer) {
740
+ clearTimeout(posTimer);
741
+ }
742
+ if (!milliseconds) {
743
+ milliseconds = 10;
744
+ }
745
+ posTimer = setTimeout(function(){
746
+ PNotify.positionAll(animate);
747
+ }, milliseconds);
748
+ return this;
749
+ },
750
+
751
+
752
+ // Cancel any pending removal timer.
753
+ cancelRemove: function(){
754
+ if (this.timer) {
755
+ window.clearTimeout(this.timer);
756
+ }
757
+ if (this.state === "closing") {
758
+ // If it's animating out, animate back in really quickly.
759
+ this.elem.stop(true);
760
+ this.state = "open";
761
+ this.animating = "in";
762
+ this.elem.css("height", "auto").animate({
763
+ "width": this.options.width,
764
+ "opacity": this.options.opacity
765
+ }, "fast");
766
+ }
767
+ return this;
768
+ },
769
+ // Queue a removal timer.
770
+ queueRemove: function(){
771
+ var that = this;
772
+ // Cancel any current removal timer.
773
+ this.cancelRemove();
774
+ this.timer = window.setTimeout(function(){
775
+ that.remove(true);
776
+ }, (isNaN(this.options.delay) ? 0 : this.options.delay));
777
+ return this;
778
+ }
779
+ });
780
+ // These functions affect all notices.
781
+ $.extend(PNotify, {
782
+ // This holds all the notices.
783
+ notices: [],
784
+ removeAll: function () {
785
+ $.each(PNotify.notices, function(){
786
+ if (this.remove) {
787
+ this.remove(false);
788
+ }
789
+ });
790
+ },
791
+ positionAll: function (animate) {
792
+ // This timer is used for queueing this function so it doesn't run
793
+ // repeatedly.
794
+ if (posTimer) {
795
+ clearTimeout(posTimer);
796
+ }
797
+ posTimer = null;
798
+ // Reset the next position data.
799
+ if (PNotify.notices && PNotify.notices.length) {
800
+ $.each(PNotify.notices, function(){
801
+ var s = this.options.stack;
802
+ if (!s) {
803
+ return;
804
+ }
805
+ s.nextpos1 = s.firstpos1;
806
+ s.nextpos2 = s.firstpos2;
807
+ s.addpos2 = 0;
808
+ s.animation = animate;
809
+ });
810
+ $.each(PNotify.notices, function(){
811
+ this.position();
812
+ });
813
+ } else {
814
+ var s = PNotify.prototype.options.stack;
815
+ if (s) {
816
+ delete s.nextpos1;
817
+ delete s.nextpos2;
818
+ }
819
+ }
820
+ },
821
+ styling: {
822
+ brighttheme: {
823
+ // Bright Theme doesn't require any UI libraries.
824
+ container: "brighttheme",
825
+ notice: "brighttheme-notice",
826
+ notice_icon: "brighttheme-icon-notice",
827
+ info: "brighttheme-info",
828
+ info_icon: "brighttheme-icon-info",
829
+ success: "brighttheme-success",
830
+ success_icon: "brighttheme-icon-success",
831
+ error: "brighttheme-error",
832
+ error_icon: "brighttheme-icon-error"
833
+ },
834
+ jqueryui: {
835
+ container: "ui-widget ui-widget-content ui-corner-all",
836
+ notice: "ui-state-highlight",
837
+ // (The actual jQUI notice icon looks terrible.)
838
+ notice_icon: "ui-icon ui-icon-info",
839
+ info: "",
840
+ info_icon: "ui-icon ui-icon-info",
841
+ success: "ui-state-default",
842
+ success_icon: "ui-icon ui-icon-circle-check",
843
+ error: "ui-state-error",
844
+ error_icon: "ui-icon ui-icon-alert"
845
+ },
846
+ bootstrap2: {
847
+ container: "alert",
848
+ notice: "",
849
+ notice_icon: "icon-exclamation-sign",
850
+ info: "alert-info",
851
+ info_icon: "icon-info-sign",
852
+ success: "alert-success",
853
+ success_icon: "icon-ok-sign",
854
+ error: "alert-error",
855
+ error_icon: "icon-warning-sign"
856
+ },
857
+ bootstrap3: {
858
+ container: "alert",
859
+ notice: "alert-warning",
860
+ notice_icon: "glyphicon glyphicon-exclamation-sign",
861
+ info: "alert-info",
862
+ info_icon: "glyphicon glyphicon-info-sign",
863
+ success: "alert-success",
864
+ success_icon: "glyphicon glyphicon-ok-sign",
865
+ error: "alert-danger",
866
+ error_icon: "glyphicon glyphicon-warning-sign"
867
+ }
868
+ }
869
+ });
870
+ /*
871
+ * uses icons from http://fontawesome.io/
872
+ * version 4.0.3
873
+ */
874
+ PNotify.styling.fontawesome = $.extend({}, PNotify.styling.bootstrap3);
875
+ $.extend(PNotify.styling.fontawesome, {
876
+ notice_icon: "fa fa-exclamation-circle",
877
+ info_icon: "fa fa-info",
878
+ success_icon: "fa fa-check",
879
+ error_icon: "fa fa-warning"
880
+ });
881
+
882
+ if (document.body) {
883
+ do_when_ready();
884
+ } else {
885
+ $(do_when_ready);
886
+ }
887
+ return PNotify;
888
+ }));
889
+ // Buttons
890
+ // Uses AMD or browser globals for jQuery.
891
+ (function (factory) {
892
+ if (typeof exports === 'object' && typeof module !== 'undefined') {
893
+ // CommonJS
894
+ module.exports = factory(require('jquery'), require('pnotify'));
895
+ } else if (typeof define === 'function' && define.amd) {
896
+ // AMD. Register as a module.
897
+ define('pnotify.buttons', ['jquery', 'pnotify'], factory);
898
+ } else {
899
+ // Browser globals
900
+ factory(jQuery, PNotify);
901
+ }
902
+ }(function($, PNotify){
903
+ PNotify.prototype.options.buttons = {
904
+ // Provide a button for the user to manually close the notice.
905
+ closer: true,
906
+ // Only show the closer button on hover.
907
+ closer_hover: true,
908
+ // Provide a button for the user to manually stick the notice.
909
+ sticker: true,
910
+ // Only show the sticker button on hover.
911
+ sticker_hover: true,
912
+ // Show the buttons even when the nonblock module is in use.
913
+ show_on_nonblock: false,
914
+ // The various displayed text, helps facilitating internationalization.
915
+ labels: {
916
+ close: "Close",
917
+ stick: "Stick"
918
+ }
919
+ };
920
+ PNotify.prototype.modules.buttons = {
921
+ // This lets us update the options available in the closures.
922
+ myOptions: null,
923
+
924
+ closer: null,
925
+ sticker: null,
926
+
927
+ init: function(notice, options){
928
+ var that = this;
929
+ this.myOptions = options;
930
+ notice.elem.on({
931
+ "mouseenter": function(e){
932
+ // Show the buttons.
933
+ if (that.myOptions.sticker && (!(notice.options.nonblock && notice.options.nonblock.nonblock) || that.myOptions.show_on_nonblock)) {
934
+ that.sticker.trigger("pnotify_icon").css("visibility", "visible");
935
+ }
936
+ if (that.myOptions.closer && (!(notice.options.nonblock && notice.options.nonblock.nonblock) || that.myOptions.show_on_nonblock)) {
937
+ that.closer.css("visibility", "visible");
938
+ }
939
+ },
940
+ "mouseleave": function(e){
941
+ // Hide the buttons.
942
+ if (that.myOptions.sticker_hover) {
943
+ that.sticker.css("visibility", "hidden");
944
+ }
945
+ if (that.myOptions.closer_hover) {
946
+ that.closer.css("visibility", "hidden");
947
+ }
948
+ }
949
+ });
950
+
951
+ // Provide a button to stick the notice.
952
+ this.sticker = $("<div />", {
953
+ "class": "ui-pnotify-sticker",
954
+ "css": {
955
+ "cursor": "pointer",
956
+ "visibility": options.sticker_hover ? "hidden" : "visible"
957
+ },
958
+ "click": function(){
959
+ notice.options.hide = !notice.options.hide;
960
+ if (notice.options.hide) {
961
+ notice.queueRemove();
962
+ } else {
963
+ notice.cancelRemove();
964
+ }
965
+ $(this).trigger("pnotify_icon");
966
+ }
967
+ })
968
+ .bind("pnotify_icon", function(){
969
+ $(this).children().removeClass(notice.styles.pin_up+" "+notice.styles.pin_down).addClass(notice.options.hide ? notice.styles.pin_up : notice.styles.pin_down);
970
+ })
971
+ .append($("<span />", {"class": notice.styles.pin_up, "title": options.labels.stick}))
972
+ .prependTo(notice.container);
973
+ if (!options.sticker || (notice.options.nonblock && notice.options.nonblock.nonblock && !options.show_on_nonblock)) {
974
+ this.sticker.css("display", "none");
975
+ }
976
+
977
+ // Provide a button to close the notice.
978
+ this.closer = $("<div />", {
979
+ "class": "ui-pnotify-closer",
980
+ "css": {"cursor": "pointer", "visibility": options.closer_hover ? "hidden" : "visible"},
981
+ "click": function(){
982
+ notice.remove(false);
983
+ that.sticker.css("visibility", "hidden");
984
+ that.closer.css("visibility", "hidden");
985
+ }
986
+ })
987
+ .append($("<span />", {"class": notice.styles.closer, "title": options.labels.close}))
988
+ .prependTo(notice.container);
989
+ if (!options.closer || (notice.options.nonblock && notice.options.nonblock.nonblock && !options.show_on_nonblock)) {
990
+ this.closer.css("display", "none");
991
+ }
992
+ },
993
+ update: function(notice, options){
994
+ this.myOptions = options;
995
+ // Update the sticker and closer buttons.
996
+ if (!options.closer || (notice.options.nonblock && notice.options.nonblock.nonblock && !options.show_on_nonblock)) {
997
+ this.closer.css("display", "none");
998
+ } else if (options.closer) {
999
+ this.closer.css("display", "block");
1000
+ }
1001
+ if (!options.sticker || (notice.options.nonblock && notice.options.nonblock.nonblock && !options.show_on_nonblock)) {
1002
+ this.sticker.css("display", "none");
1003
+ } else if (options.sticker) {
1004
+ this.sticker.css("display", "block");
1005
+ }
1006
+ // Update the sticker icon.
1007
+ this.sticker.trigger("pnotify_icon");
1008
+ // Update the hover status of the buttons.
1009
+ if (options.sticker_hover) {
1010
+ this.sticker.css("visibility", "hidden");
1011
+ } else if (!(notice.options.nonblock && notice.options.nonblock.nonblock && !options.show_on_nonblock)) {
1012
+ this.sticker.css("visibility", "visible");
1013
+ }
1014
+ if (options.closer_hover) {
1015
+ this.closer.css("visibility", "hidden");
1016
+ } else if (!(notice.options.nonblock && notice.options.nonblock.nonblock && !options.show_on_nonblock)) {
1017
+ this.closer.css("visibility", "visible");
1018
+ }
1019
+ }
1020
+ };
1021
+ $.extend(PNotify.styling.brighttheme, {
1022
+ closer: "brighttheme-icon-closer",
1023
+ pin_up: "brighttheme-icon-sticker",
1024
+ pin_down: "brighttheme-icon-sticker brighttheme-icon-stuck"
1025
+ });
1026
+ $.extend(PNotify.styling.jqueryui, {
1027
+ closer: "ui-icon ui-icon-close",
1028
+ pin_up: "ui-icon ui-icon-pin-w",
1029
+ pin_down: "ui-icon ui-icon-pin-s"
1030
+ });
1031
+ $.extend(PNotify.styling.bootstrap2, {
1032
+ closer: "icon-remove",
1033
+ pin_up: "icon-pause",
1034
+ pin_down: "icon-play"
1035
+ });
1036
+ $.extend(PNotify.styling.bootstrap3, {
1037
+ closer: "glyphicon glyphicon-remove",
1038
+ pin_up: "glyphicon glyphicon-pause",
1039
+ pin_down: "glyphicon glyphicon-play"
1040
+ });
1041
+ $.extend(PNotify.styling.fontawesome, {
1042
+ closer: "fa fa-times",
1043
+ pin_up: "fa fa-pause",
1044
+ pin_down: "fa fa-play"
1045
+ });
1046
+ }));
1047
+ // Callbacks
1048
+ (function (factory) {
1049
+ if (typeof exports === 'object' && typeof module !== 'undefined') {
1050
+ // CommonJS
1051
+ module.exports = factory(require('jquery'), require('pnotify'));
1052
+ } else if (typeof define === 'function' && define.amd) {
1053
+ // AMD. Register as a module.
1054
+ define('pnotify.callbacks', ['jquery', 'pnotify'], factory);
1055
+ } else {
1056
+ // Browser globals
1057
+ factory(jQuery, PNotify);
1058
+ }
1059
+ }(function($, PNotify){
1060
+ var _init = PNotify.prototype.init,
1061
+ _open = PNotify.prototype.open,
1062
+ _remove = PNotify.prototype.remove;
1063
+ PNotify.prototype.init = function(){
1064
+ if (this.options.before_init) {
1065
+ this.options.before_init(this.options);
1066
+ }
1067
+ _init.apply(this, arguments);
1068
+ if (this.options.after_init) {
1069
+ this.options.after_init(this);
1070
+ }
1071
+ };
1072
+ PNotify.prototype.open = function(){
1073
+ var ret;
1074
+ if (this.options.before_open) {
1075
+ ret = this.options.before_open(this);
1076
+ }
1077
+ if (ret !== false) {
1078
+ _open.apply(this, arguments);
1079
+ if (this.options.after_open) {
1080
+ this.options.after_open(this);
1081
+ }
1082
+ }
1083
+ };
1084
+ PNotify.prototype.remove = function(timer_hide){
1085
+ var ret;
1086
+ if (this.options.before_close) {
1087
+ ret = this.options.before_close(this, timer_hide);
1088
+ }
1089
+ if (ret !== false) {
1090
+ _remove.apply(this, arguments);
1091
+ if (this.options.after_close) {
1092
+ this.options.after_close(this, timer_hide);
1093
+ }
1094
+ }
1095
+ };
1096
+ }));
1097
+ // Desktop
1098
+ (function (factory) {
1099
+ if (typeof exports === 'object' && typeof module !== 'undefined') {
1100
+ // CommonJS
1101
+ module.exports = factory(require('jquery'), require('pnotify'));
1102
+ } else if (typeof define === 'function' && define.amd) {
1103
+ // AMD. Register as a module.
1104
+ define('pnotify.desktop', ['jquery', 'pnotify'], factory);
1105
+ } else {
1106
+ // Browser globals
1107
+ factory(jQuery, PNotify);
1108
+ }
1109
+ }(function($, PNotify){
1110
+ var permission;
1111
+ var notify = function(title, options){
1112
+ // Memoize based on feature detection.
1113
+ if ("Notification" in window) {
1114
+ notify = function (title, options) {
1115
+ return new Notification(title, options);
1116
+ };
1117
+ } else if ("mozNotification" in navigator) {
1118
+ notify = function (title, options) {
1119
+ // Gecko < 22
1120
+ return navigator.mozNotification
1121
+ .createNotification(title, options.body, options.icon)
1122
+ .show();
1123
+ };
1124
+ } else if ("webkitNotifications" in window) {
1125
+ notify = function (title, options) {
1126
+ return window.webkitNotifications.createNotification(
1127
+ options.icon,
1128
+ title,
1129
+ options.body
1130
+ );
1131
+ };
1132
+ } else {
1133
+ notify = function (title, options) {
1134
+ return null;
1135
+ };
1136
+ }
1137
+ return notify(title, options);
1138
+ };
1139
+
1140
+
1141
+ PNotify.prototype.options.desktop = {
1142
+ // Display the notification as a desktop notification.
1143
+ desktop: false,
1144
+ // If desktop notifications are not supported or allowed, fall back to a regular notice.
1145
+ fallback: true,
1146
+ // The URL of the icon to display. If false, no icon will show. If null, a default icon will show.
1147
+ icon: null,
1148
+ // Using a tag lets you update an existing notice, or keep from duplicating notices between tabs.
1149
+ // If you leave tag null, one will be generated, facilitating the "update" function.
1150
+ // see: http://www.w3.org/TR/notifications/#tags-example
1151
+ tag: null
1152
+ };
1153
+ PNotify.prototype.modules.desktop = {
1154
+ tag: null,
1155
+ icon: null,
1156
+ genNotice: function(notice, options){
1157
+ if (options.icon === null) {
1158
+ this.icon = "http://sciactive.com/pnotify/includes/desktop/"+notice.options.type+".png";
1159
+ } else if (options.icon === false) {
1160
+ this.icon = null;
1161
+ } else {
1162
+ this.icon = options.icon;
1163
+ }
1164
+ if (this.tag === null || options.tag !== null) {
1165
+ this.tag = options.tag === null ? "PNotify-"+Math.round(Math.random() * 1000000) : options.tag;
1166
+ }
1167
+ notice.desktop = notify(notice.options.title, {
1168
+ icon: this.icon,
1169
+ body: notice.options.text,
1170
+ tag: this.tag
1171
+ });
1172
+ if (!("close" in notice.desktop) && ("cancel" in notice.desktop)) {
1173
+ notice.desktop.close = function(){
1174
+ notice.desktop.cancel();
1175
+ };
1176
+ }
1177
+ notice.desktop.onclick = function(){
1178
+ notice.elem.trigger("click");
1179
+ };
1180
+ notice.desktop.onclose = function(){
1181
+ if (notice.state !== "closing" && notice.state !== "closed") {
1182
+ notice.remove();
1183
+ }
1184
+ };
1185
+ },
1186
+ init: function(notice, options){
1187
+ if (!options.desktop)
1188
+ return;
1189
+ permission = PNotify.desktop.checkPermission();
1190
+ if (permission !== 0) {
1191
+ // Keep the notice from opening if fallback is false.
1192
+ if (!options.fallback) {
1193
+ notice.options.auto_display = false;
1194
+ }
1195
+ return;
1196
+ }
1197
+ this.genNotice(notice, options);
1198
+ },
1199
+ update: function(notice, options, oldOpts){
1200
+ if ((permission !== 0 && options.fallback) || !options.desktop)
1201
+ return;
1202
+ this.genNotice(notice, options);
1203
+ },
1204
+ beforeOpen: function(notice, options){
1205
+ if ((permission !== 0 && options.fallback) || !options.desktop)
1206
+ return;
1207
+ notice.elem.css({'left': '-10000px', 'display': 'none'});
1208
+ },
1209
+ afterOpen: function(notice, options){
1210
+ if ((permission !== 0 && options.fallback) || !options.desktop)
1211
+ return;
1212
+ notice.elem.css({'left': '-10000px', 'display': 'none'});
1213
+ if ("show" in notice.desktop) {
1214
+ notice.desktop.show();
1215
+ }
1216
+ },
1217
+ beforeClose: function(notice, options){
1218
+ if ((permission !== 0 && options.fallback) || !options.desktop)
1219
+ return;
1220
+ notice.elem.css({'left': '-10000px', 'display': 'none'});
1221
+ },
1222
+ afterClose: function(notice, options){
1223
+ if ((permission !== 0 && options.fallback) || !options.desktop)
1224
+ return;
1225
+ notice.elem.css({'left': '-10000px', 'display': 'none'});
1226
+ if ("close" in notice.desktop) {
1227
+ notice.desktop.close();
1228
+ }
1229
+ }
1230
+ };
1231
+ PNotify.desktop = {
1232
+ permission: function(){
1233
+ if (typeof Notification !== "undefined" && "requestPermission" in Notification) {
1234
+ Notification.requestPermission();
1235
+ } else if ("webkitNotifications" in window) {
1236
+ window.webkitNotifications.requestPermission();
1237
+ }
1238
+ },
1239
+ checkPermission: function(){
1240
+ if (typeof Notification !== "undefined" && "permission" in Notification) {
1241
+ return (Notification.permission === "granted" ? 0 : 1);
1242
+ } else if ("webkitNotifications" in window) {
1243
+ return window.webkitNotifications.checkPermission() == 0 ? 0 : 1;
1244
+ } else {
1245
+ return 1;
1246
+ }
1247
+ }
1248
+ };
1249
+ permission = PNotify.desktop.checkPermission();
1250
+ }));
1251
+ // Mobile
1252
+ (function (factory) {
1253
+ if (typeof exports === 'object' && typeof module !== 'undefined') {
1254
+ // CommonJS
1255
+ module.exports = factory(require('jquery'), require('pnotify'));
1256
+ } else if (typeof define === 'function' && define.amd) {
1257
+ // AMD. Register as a module.
1258
+ define('pnotify.mobile', ['jquery', 'pnotify'], factory);
1259
+ } else {
1260
+ // Browser globals
1261
+ factory(jQuery, PNotify);
1262
+ }
1263
+ }(function($, PNotify){
1264
+
1265
+ }));
1266
+ // Nonblock
1267
+ (function (factory) {
1268
+ if (typeof exports === 'object' && typeof module !== 'undefined') {
1269
+ // CommonJS
1270
+ module.exports = factory(require('jquery'), require('pnotify'));
1271
+ } else if (typeof define === 'function' && define.amd) {
1272
+ // AMD. Register as a module.
1273
+ define('pnotify.nonblock', ['jquery', 'pnotify'], factory);
1274
+ } else {
1275
+ // Browser globals
1276
+ factory(jQuery, PNotify);
1277
+ }
1278
+ }(function($, PNotify){
1279
+ // Some useful regexes.
1280
+ var re_on = /^on/,
1281
+ re_mouse_events = /^(dbl)?click$|^mouse(move|down|up|over|out|enter|leave)$|^contextmenu$/,
1282
+ re_ui_events = /^(focus|blur|select|change|reset)$|^key(press|down|up)$/,
1283
+ re_html_events = /^(scroll|resize|(un)?load|abort|error)$/;
1284
+ // Fire a DOM event.
1285
+ var dom_event = function(e, orig_e){
1286
+ var event_object;
1287
+ e = e.toLowerCase();
1288
+ if (document.createEvent && this.dispatchEvent) {
1289
+ // FireFox, Opera, Safari, Chrome
1290
+ e = e.replace(re_on, '');
1291
+ if (e.match(re_mouse_events)) {
1292
+ // This allows the click event to fire on the notice. There is
1293
+ // probably a much better way to do it.
1294
+ $(this).offset();
1295
+ event_object = document.createEvent("MouseEvents");
1296
+ event_object.initMouseEvent(
1297
+ e, orig_e.bubbles, orig_e.cancelable, orig_e.view, orig_e.detail,
1298
+ orig_e.screenX, orig_e.screenY, orig_e.clientX, orig_e.clientY,
1299
+ orig_e.ctrlKey, orig_e.altKey, orig_e.shiftKey, orig_e.metaKey, orig_e.button, orig_e.relatedTarget
1300
+ );
1301
+ } else if (e.match(re_ui_events)) {
1302
+ event_object = document.createEvent("UIEvents");
1303
+ event_object.initUIEvent(e, orig_e.bubbles, orig_e.cancelable, orig_e.view, orig_e.detail);
1304
+ } else if (e.match(re_html_events)) {
1305
+ event_object = document.createEvent("HTMLEvents");
1306
+ event_object.initEvent(e, orig_e.bubbles, orig_e.cancelable);
1307
+ }
1308
+ if (!event_object) return;
1309
+ this.dispatchEvent(event_object);
1310
+ } else {
1311
+ // Internet Explorer
1312
+ if (!e.match(re_on)) e = "on"+e;
1313
+ event_object = document.createEventObject(orig_e);
1314
+ this.fireEvent(e, event_object);
1315
+ }
1316
+ };
1317
+
1318
+
1319
+ // This keeps track of the last element the mouse was over, so
1320
+ // mouseleave, mouseenter, etc can be called.
1321
+ var nonblock_last_elem;
1322
+ // This is used to pass events through the notice if it is non-blocking.
1323
+ var nonblock_pass = function(notice, e, e_name){
1324
+ notice.elem.css("display", "none");
1325
+ var element_below = document.elementFromPoint(e.clientX, e.clientY);
1326
+ notice.elem.css("display", "block");
1327
+ var jelement_below = $(element_below);
1328
+ var cursor_style = jelement_below.css("cursor");
1329
+ if (cursor_style === "auto" && element_below.tagName === "A") {
1330
+ cursor_style = "pointer";
1331
+ }
1332
+ notice.elem.css("cursor", cursor_style !== "auto" ? cursor_style : "default");
1333
+ // If the element changed, call mouseenter, mouseleave, etc.
1334
+ if (!nonblock_last_elem || nonblock_last_elem.get(0) != element_below) {
1335
+ if (nonblock_last_elem) {
1336
+ dom_event.call(nonblock_last_elem.get(0), "mouseleave", e.originalEvent);
1337
+ dom_event.call(nonblock_last_elem.get(0), "mouseout", e.originalEvent);
1338
+ }
1339
+ dom_event.call(element_below, "mouseenter", e.originalEvent);
1340
+ dom_event.call(element_below, "mouseover", e.originalEvent);
1341
+ }
1342
+ dom_event.call(element_below, e_name, e.originalEvent);
1343
+ // Remember the latest element the mouse was over.
1344
+ nonblock_last_elem = jelement_below;
1345
+ };
1346
+
1347
+
1348
+ PNotify.prototype.options.nonblock = {
1349
+ // Create a non-blocking notice. It lets the user click elements underneath it.
1350
+ nonblock: false,
1351
+ // The opacity of the notice (if it's non-blocking) when the mouse is over it.
1352
+ nonblock_opacity: .2
1353
+ };
1354
+ PNotify.prototype.modules.nonblock = {
1355
+ // This lets us update the options available in the closures.
1356
+ myOptions: null,
1357
+
1358
+ init: function(notice, options){
1359
+ var that = this;
1360
+ this.myOptions = options;
1361
+ notice.elem.on({
1362
+ "mouseenter": function(e){
1363
+ if (that.myOptions.nonblock) e.stopPropagation();
1364
+ if (that.myOptions.nonblock) {
1365
+ // If it's non-blocking, animate to the other opacity.
1366
+ notice.elem.stop().animate({"opacity": that.myOptions.nonblock_opacity}, "fast");
1367
+ }
1368
+ },
1369
+ "mouseleave": function(e){
1370
+ if (that.myOptions.nonblock) e.stopPropagation();
1371
+ nonblock_last_elem = null;
1372
+ notice.elem.css("cursor", "auto");
1373
+ // Animate back to the normal opacity.
1374
+ if (that.myOptions.nonblock && notice.animating !== "out")
1375
+ notice.elem.stop().animate({"opacity": notice.options.opacity}, "fast");
1376
+ },
1377
+ "mouseover": function(e){
1378
+ if (that.myOptions.nonblock) e.stopPropagation();
1379
+ },
1380
+ "mouseout": function(e){
1381
+ if (that.myOptions.nonblock) e.stopPropagation();
1382
+ },
1383
+ "mousemove": function(e){
1384
+ if (that.myOptions.nonblock) {
1385
+ e.stopPropagation();
1386
+ nonblock_pass(notice, e, "onmousemove");
1387
+ }
1388
+ },
1389
+ "mousedown": function(e){
1390
+ if (that.myOptions.nonblock) {
1391
+ e.stopPropagation();
1392
+ e.preventDefault();
1393
+ nonblock_pass(notice, e, "onmousedown");
1394
+ }
1395
+ },
1396
+ "mouseup": function(e){
1397
+ if (that.myOptions.nonblock) {
1398
+ e.stopPropagation();
1399
+ e.preventDefault();
1400
+ nonblock_pass(notice, e, "onmouseup");
1401
+ }
1402
+ },
1403
+ "click": function(e){
1404
+ if (that.myOptions.nonblock) {
1405
+ e.stopPropagation();
1406
+ nonblock_pass(notice, e, "onclick");
1407
+ }
1408
+ },
1409
+ "dblclick": function(e){
1410
+ if (that.myOptions.nonblock) {
1411
+ e.stopPropagation();
1412
+ nonblock_pass(notice, e, "ondblclick");
1413
+ }
1414
+ }
1415
+ });
1416
+ },
1417
+ update: function(notice, options){
1418
+ this.myOptions = options;
1419
+ }
1420
+ };
1421
+ }));