Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Initial commit.

  • Loading branch information...
commit 103c5e1a93acf228ec248d7df39752718741c941 0 parents
@benubois benubois authored
Showing with 10,690 additions and 0 deletions.
  1. +21 −0 .gitignore
  2. +3 −0  Capfile
  3. +71 −0 Gemfile
  4. +373 −0 Gemfile.lock
  5. +10 −0 LICENSE.md
  6. +3 −0  Procfile
  7. +3 −0  Procfile.dev
  8. +153 −0 README.md
  9. +6 −0 Rakefile
  10. +40 −0 app/assets/fonts/Feedbin.dev.svg
  11. BIN  app/assets/fonts/Feedbin.eot
  12. +40 −0 app/assets/fonts/Feedbin.svg
  13. BIN  app/assets/fonts/Feedbin.ttf
  14. BIN  app/assets/fonts/Feedbin.woff
  15. BIN  app/assets/fonts/OpenSans-Light.eot
  16. +146 −0 app/assets/fonts/OpenSans-Light.svg
  17. BIN  app/assets/fonts/OpenSans-Light.ttf
  18. BIN  app/assets/fonts/OpenSans-Light.woff
  19. BIN  app/assets/images/1x/favicon-feed.png
  20. BIN  app/assets/images/1x/logo-stripe.png
  21. BIN  app/assets/images/2x/favicon-feed.png
  22. BIN  app/assets/images/2x/logo-stripe.png
  23. BIN  app/assets/images/apple-touch-icon-precomposed.png
  24. BIN  app/assets/images/apple-touch-startup-image-iphone-large.png
  25. BIN  app/assets/images/apple-touch-startup-image-iphone.png
  26. BIN  app/assets/images/border.png
  27. +16 −0 app/assets/images/favicon-all.svg
  28. +10 −0 app/assets/images/favicon-star.svg
  29. +10 −0 app/assets/images/favicon-tag.svg
  30. +7 −0 app/assets/images/favicon-unread.svg
  31. BIN  app/assets/images/icon-credit-card.png
  32. +21 −0 app/assets/images/logo.svg
  33. +453 −0 app/assets/javascripts/_site.js.coffee
  34. +16 −0 app/assets/javascripts/application.js
  35. +55 −0 app/assets/javascripts/entries.js.coffee
  36. +326 −0 app/assets/javascripts/keyboard.js.coffee
  37. +51 −0 app/assets/javascripts/polyptych.js.coffee
  38. +33 −0 app/assets/javascripts/registrations.js.coffee
  39. +7 −0 app/assets/stylesheets/application.css.scss
  40. +89 −0 app/assets/stylesheets/fonts.css.scss
  41. +19 −0 app/assets/stylesheets/functions.css.scss
  42. +22 −0 app/assets/stylesheets/home.css.scss
  43. +2,446 −0 app/assets/stylesheets/site.css.scss
  44. +14 −0 app/controllers/api/v1/api_controller.rb
  45. +133 −0 app/controllers/api/v2/api_controller.rb
  46. +65 −0 app/controllers/api/v2/entries_controller.rb
  47. +14 −0 app/controllers/api/v2/feeds_controller.rb
  48. +42 −0 app/controllers/api/v2/feeds_entries_controller.rb
  49. +66 −0 app/controllers/api/v2/starred_entries_controller.rb
  50. +89 −0 app/controllers/api/v2/subscriptions_controller.rb
  51. +61 −0 app/controllers/api/v2/taggings_controller.rb
  52. +66 −0 app/controllers/api/v2/unread_entries_controller.rb
  53. +168 −0 app/controllers/application_controller.rb
  54. +23 −0 app/controllers/billing_events_controller.rb
  55. 0  app/controllers/concerns/.keep
  56. +29 −0 app/controllers/emails_controller.rb
  57. +258 −0 app/controllers/entries_controller.rb
  58. +8 −0 app/controllers/errors_controller.rb
  59. +62 −0 app/controllers/feeds_controller.rb
  60. +35 −0 app/controllers/feeds_entries_controller.rb
  61. +31 −0 app/controllers/imports_controller.rb
  62. +37 −0 app/controllers/password_resets_controller.rb
  63. +25 −0 app/controllers/sessions_controller.rb
  64. +142 −0 app/controllers/settings_controller.rb
  65. +38 −0 app/controllers/sharing_services_controller.rb
  66. +49 −0 app/controllers/site_controller.rb
  67. +21 −0 app/controllers/starred_controller.rb
  68. +23 −0 app/controllers/starred_entries_controller.rb
  69. +119 −0 app/controllers/subscriptions_controller.rb
  70. +94 −0 app/controllers/tags_controller.rb
  71. +24 −0 app/controllers/unread_entries_controller.rb
  72. +72 −0 app/controllers/users_controller.rb
  73. +52 −0 app/helpers/application_helper.rb
  74. +2 −0  app/helpers/collections_helper.rb
  75. +2 −0  app/helpers/emails_helper.rb
  76. +2 −0  app/helpers/entries_helper.rb
  77. +5 −0 app/helpers/feeds_helper.rb
  78. +2 −0  app/helpers/imports_helper.rb
  79. +2 −0  app/helpers/password_resets_helper.rb
  80. +58 −0 app/helpers/sessions_helper.rb
  81. +2 −0  app/helpers/settings_helper.rb
  82. +2 −0  app/helpers/sharing_services_helper.rb
  83. +13 −0 app/helpers/site_helper.rb
  84. +2 −0  app/helpers/starred_helper.rb
  85. +2 −0  app/helpers/subscriptions_helper.rb
  86. +2 −0  app/helpers/sync_helper.rb
  87. +2 −0  app/helpers/taggings_helper.rb
  88. +6 −0 app/helpers/tags_helper.rb
  89. +2 −0  app/helpers/users_helper.rb
  90. 0  app/mailers/.gitkeep
  91. +20 −0 app/mailers/user_mailer.rb
  92. 0  app/models/.gitkeep
  93. +39 −0 app/models/billing_event.rb
  94. 0  app/models/concerns/.keep
  95. +148 −0 app/models/content_formatter.rb
  96. +12 −0 app/models/coupon.rb
  97. +111 −0 app/models/entry.rb
  98. +82 −0 app/models/feed.rb
  99. +203 −0 app/models/feed_fetcher.rb
  100. +47 −0 app/models/import.rb
  101. +8 −0 app/models/import_item.rb
  102. +3 −0  app/models/plan.rb
  103. +5 −0 app/models/redis_lock.rb
  104. +4 −0 app/models/sharing_service.rb
  105. +12 −0 app/models/starred_entry.rb
  106. +24 −0 app/models/subscription.rb
  107. +6 −0 app/models/tag.rb
  108. +5 −0 app/models/tagging.rb
  109. +12 −0 app/models/unread_entry.rb
  110. +281 −0 app/models/user.rb
  111. +17 −0 app/presenters/base_presenter.rb
  112. +77 −0 app/presenters/entry_presenter.rb
  113. +43 −0 app/presenters/feed_presenter.rb
  114. +9 −0 app/uploaders/import_uploader.rb
  115. +25 −0 app/validators/import_file_validator.rb
  116. +5 −0 app/views/api/v2/entries/_entry.json.jbuilder
  117. +3 −0  app/views/api/v2/entries/index.json.jbuilder
  118. +1 −0  app/views/api/v2/entries/show.json.jbuilder
  119. +1 −0  app/views/api/v2/feeds/_feed.json.jbuilder
  120. +1 −0  app/views/api/v2/feeds/show.json.jbuilder
  121. +3 −0  app/views/api/v2/feeds_entries/index.json.jbuilder
  122. +1 −0  app/views/api/v2/feeds_entries/show.json.jbuilder
  123. +3 −0  app/views/api/v2/shared/_api_error.json.jbuilder
  124. +3 −0  app/views/api/v2/subscriptions/_feed.json.jbuilder
  125. +4 −0 app/views/api/v2/subscriptions/_options.json.jbuilder
  126. +3 −0  app/views/api/v2/subscriptions/_subscription.json.jbuilder
  127. +5 −0 app/views/api/v2/subscriptions/create.json.jbuilder
  128. +3 −0  app/views/api/v2/subscriptions/index.json.jbuilder
  129. +1 −0  app/views/api/v2/subscriptions/show.json.jbuilder
  130. +1 −0  app/views/api/v2/subscriptions/update.json.jbuilder
  131. +2 −0  app/views/api/v2/taggings/_tagging.json.jbuilder
  132. +1 −0  app/views/api/v2/taggings/create.json.jbuilder
  133. +3 −0  app/views/api/v2/taggings/index.json.jbuilder
  134. +1 −0  app/views/api/v2/taggings/show.json.jbuilder
  135. +33 −0 app/views/billing_events/show.html.erb
  136. +9 −0 app/views/collections/_collection.html.erb
  137. +16 −0 app/views/entries/_entry.html.erb
  138. +28 −0 app/views/entries/_show.html.erb
  139. +14 −0 app/views/entries/_toggle_content.html.erb
  140. +3 −0  app/views/entries/content.js.erb
  141. +2 −0  app/views/entries/mark_all_as_read.js.erb
  142. +11 −0 app/views/entries/show.js.erb
  143. +14 −0 app/views/errors/not_found.html.erb
  144. +15 −0 app/views/errors/service_unavailable.html.erb
  145. +9 −0 app/views/feeds/_feed.html.erb
  146. +6 −0 app/views/feeds/_feed.xml.builder
  147. +3 −0  app/views/feeds/_feeds.html.erb
  148. +15 −0 app/views/feeds/_form.html.erb
  149. +4 −0 app/views/feeds/edit.html.erb
  150. +3 −0  app/views/feeds/update.js.erb
  151. +37 −0 app/views/layouts/application.html.erb
  152. +4 −0 app/views/layouts/home.html.erb
  153. +40 −0 app/views/layouts/settings.html.erb
  154. +22 −0 app/views/layouts/wrap.html.erb
  155. +24 −0 app/views/password_resets/edit.html.erb
  156. +21 −0 app/views/password_resets/new.html.erb
  157. +26 −0 app/views/sessions/new.html.erb
  158. +9 −0 app/views/settings/_sidebar.html.erb
  159. +31 −0 app/views/settings/account.html.erb
  160. +63 −0 app/views/settings/billing.html.erb
  161. +38 −0 app/views/settings/feeds.html.erb
  162. +19 −0 app/views/settings/help.html.erb
  163. +17 −0 app/views/settings/import_export.html.erb
  164. +68 −0 app/views/settings/settings.html.erb
  165. +9 −0 app/views/shared/_credit_card_form.html.erb
  166. +24 −0 app/views/shared/_data.html.erb
  167. +27 −0 app/views/shared/_entries.js.erb
  168. +17 −0 app/views/shared/_flash.html.erb
  169. +69 −0 app/views/shared/_keyboard_shortcuts.html.erb
  170. +19 −0 app/views/shared/_keyboard_shortcuts_wrap.html.erb
  171. +1 −0  app/views/shared/_logo.html.erb
  172. +3 −0  app/views/shared/_messages.html.erb
  173. +5 −0 app/views/shared/_resizable_form.html.erb
  174. +13 −0 app/views/shared/_tracking.html.erb
  175. +11 −0 app/views/shared/_update_view_mode.js.erb
  176. +18 −0 app/views/shared/buttons/_destroy_tag.html.erb
  177. +46 −0 app/views/shared/buttons/_mark_all_as_read.html.erb
  178. +20 −0 app/views/shared/buttons/_tag.html.erb
  179. +31 −0 app/views/shared/buttons/_unsubscribe.html.erb
  180. +13 −0 app/views/shared/buttons/_view_all.html.erb
  181. +15 −0 app/views/shared/buttons/_view_unread.html.erb
  182. +1 −0  app/views/shared/errors/500.js.erb
  183. +6 −0 app/views/shared/svg/_check.html.erb
  184. +21 −0 app/views/shared/svg/_logo.html.erb
  185. +16 −0 app/views/shared/svg/_readability.html.erb
  186. +16 −0 app/views/shared/svg/_share.html.erb
  187. +14 −0 app/views/shared/svg/_star_off.html.erb
  188. +10 −0 app/views/shared/svg/_star_on.html.erb
  189. +4 −0 app/views/shared/svg/_tag.html.erb
  190. +10 −0 app/views/shared/svg/_trash.html.erb
  191. +14 −0 app/views/sharing_services/_sharing_service_button.html.erb
  192. +9 −0 app/views/sharing_services/_sharing_service_fields.erb
  193. +50 −0 app/views/sharing_services/index.html.erb
  194. +60 −0 app/views/site/logged_in.html.erb
  195. +16 −0 app/views/site/not_logged_in.html.erb
  196. +17 −0 app/views/site/privacy_policy.html.erb
  197. +18 −0 app/views/starred/index.xml.builder
  198. +10 −0 app/views/starred_entries/_form.html.erb
  199. +10 −0 app/views/starred_entries/update.js.erb
  200. +21 −0 app/views/subscriptions/_choices.html.erb
  201. +10 −0 app/views/subscriptions/_form.html.erb
  202. +10 −0 app/views/subscriptions/create.js.erb
  203. +7 −0 app/views/subscriptions/destroy.js.erb
  204. +20 −0 app/views/subscriptions/index.xml.builder
  205. +19 −0 app/views/tags/_tag.html.erb
  206. +9 −0 app/views/tags/_tag_visibility.html.erb
  207. +5 −0 app/views/tags/destroy.js.erb
  208. +5 −0 app/views/tags/update.js.erb
  209. +10 −0 app/views/unread_entries/_form.html.erb
  210. +11 −0 app/views/unread_entries/update.js.erb
  211. +5 −0 app/views/user_mailer/password_reset.text.erb
  212. +7 −0 app/views/user_mailer/payment_failed.text.erb
  213. +14 −0 app/views/user_mailer/payment_receipt.text.erb
  214. +78 −0 app/views/users/new.html.erb
  215. +39 −0 app/views_mobile/site/logged_in.html.erb
  216. +12 −0 app/workers/cancel_billing.rb
  217. +19 −0 app/workers/entry_deleter.rb
  218. +16 −0 app/workers/entry_deleter_scheduler.rb
  219. +77 −0 app/workers/feed_importer.rb
  220. +21 −0 app/workers/feed_refresher_receiver.rb
  221. +15 −0 app/workers/feed_refresher_scheduler.rb
  222. +16 −0 app/workers/import_worker.rb
  223. +8 −0 app/workers/send_exceptions.rb
  224. +106 −0 app/workers/send_stats.rb
  225. +9 −0 app/workers/starred_count.rb
  226. +16 −0 app/workers/starred_count_scheduler.rb
  227. +9 −0 app/workers/unread_entry_deleter.rb
  228. +3 −0  bin/bundle
  229. +4 −0 bin/rails
  230. +4 −0 bin/rake
  231. +4 −0 config.ru
  232. +37 −0 config/application.rb
  233. +4 −0 config/boot.rb
  234. +17 −0 config/database.yml
  235. +78 −0 config/deploy.rb
  236. +5 −0 config/environment.rb
  237. +35 −0 config/environments/development.rb
  238. +99 −0 config/environments/production.rb
  239. +36 −0 config/environments/test.rb
  240. +7 −0 config/initializers/backtrace_silencers.rb
  241. +1 −0  config/initializers/bust_rails_etags.rb
  242. +9 −0 config/initializers/carrierwave.rb
  243. +80 −0 config/initializers/core_ext/try.rb
  244. +25 −0 config/initializers/database_connection.rb
  245. +1 −0  config/initializers/email.rb
  246. +1 −0  config/initializers/expire_caches.rb
  247. +10 −0 config/initializers/feedzirra_extension.rb
  248. +4 −0 config/initializers/filter_parameter_logging.rb
  249. +6 −0 config/initializers/honeybadger.rb
  250. +16 −0 config/initializers/inflections.rb
  251. +5 −0 config/initializers/mime_types.rb
  252. +13 −0 config/initializers/notifications.rb
  253. +1 −0  config/initializers/price_tier.rb
  254. +1 −0  config/initializers/readability.rb
  255. +20 −0 config/initializers/secret_token.rb
  256. +3 −0  config/initializers/session_store.rb
  257. +11 −0 config/initializers/sidekiq.rb
  258. +8 −0 config/initializers/stripe.rb
  259. +3 −0  config/initializers/time.rb
  260. +1 −0  config/initializers/will_paginate.rb
  261. +14 −0 config/initializers/wrap_parameters.rb
  262. +26 −0 config/locales/en.yml
  263. +115 −0 config/routes.rb
  264. +44 −0 config/unicorn.rb
  265. +46 −0 db/migrate/20121010042043_devise_create_users.rb
  266. +17 −0 db/migrate/20121011035904_create_feeds.rb
  267. +16 −0 db/migrate/20121011035933_create_subscriptions.rb
  268. +26 −0 db/migrate/20121012074155_create_entries.rb
  269. +19 −0 db/migrate/20121012075009_create_entry_states.rb
  270. +15 −0 db/migrate/20121013082327_add_feed_id_to_entry_states.rb
  271. +5 −0 db/migrate/20121019045613_add_last_modified_to_feed.rb
  272. +13 −0 db/migrate/20121019150248_remove_entry_id_from_entries.rb
  273. +5 −0 db/migrate/20121019231945_add_selected_feed_to_users.rb
  274. +8 −0 db/migrate/20121023224542_add_url_index_to_entries.rb
  275. +5 −0 db/migrate/20121029015723_add_selected_entry_to_users.rb
  276. +17 −0 db/migrate/20121106123418_create_settings.rb
  277. +11 −0 db/migrate/20121109200937_remove_selected_feed_and_selected_entry_from_users.rb
  278. +8 −0 db/migrate/20121115044716_remove_feed_id_and_entry_id_index_from_entries.rb
  279. +14 −0 db/migrate/20121117212752_add_indexes_to_entry_states.rb
  280. +8 −0 db/migrate/20121117225703_add_published_index_to_entries.rb
  281. +10 −0 db/migrate/20121124070158_create_imports.rb
  282. +11 −0 db/migrate/20121124070242_add_attachment_file_to_imports.rb
  283. +9 −0 db/migrate/20121125043913_add_default_value_to_import_default.rb
  284. +13 −0 db/migrate/20121125051935_create_import_items.rb
  285. +30 −0 db/migrate/20121202173023_acts_as_taggable_on_migration.rb
  286. +17 −0 db/migrate/20121220043916_remove_settings_gem.rb
  287. +5 −0 db/migrate/20121220044158_add_settings_to_users.rb
  288. +7 −0 db/migrate/20130101205608_add_entry_id_and_public_id_to_entries.rb
  289. +9 −0 db/migrate/20130107050848_remove_url_index_from_entries.rb
  290. +27 −0 db/migrate/20130108022157_use_text_for_feed_and_entry_properties.rb
  291. +6 −0 db/migrate/20130121161637_add_billing_info_to_users.rb
  292. +11 −0 db/migrate/20130121162410_create_plans.rb
  293. +5 −0 db/migrate/20130121162825_add_plan_id_to_users.rb
  294. +5 −0 db/migrate/20130124120921_add_admin_to_user.rb
  295. +13 −0 db/migrate/20130124141157_create_billing_events.rb
  296. +5 −0 db/migrate/20130124144546_add_customer_id_index_to_users.rb
  297. +6 −0 db/migrate/20130124151206_add_event_id_to_billing_events.rb
  298. +5 −0 db/migrate/20130126044222_add_suspended_to_users.rb
  299. +5 −0 db/migrate/20130202145544_rename_feed_title_to_title.rb
  300. +12 −0 db/migrate/20130203182936_add_state_timestamps_to_entry_states.rb
Sorry, we could not display the entire diff because too many files (432) changed.
21 .gitignore
@@ -0,0 +1,21 @@
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+#
+# If you find yourself ignoring temporary files generated by your text editor
+# or operating system, you probably want to add a global ignore instead:
+# git config --global core.excludesfile ~/.gitignore_global
+
+# Ignore bundler config
+/.bundle
+
+# Ignore the default SQLite database.
+/db/*.sqlite3
+
+# Ignore all logfiles and tempfiles.
+/log/*.log
+/tmp
+
+/vendor/bundle
+/public/uploads
+.powenv
+.env
+.env-tmp
3  Capfile
@@ -0,0 +1,3 @@
+load 'deploy'
+load 'deploy/assets'
+load 'config/deploy'
71 Gemfile
@@ -0,0 +1,71 @@
+source 'https://rubygems.org'
+ruby '2.0.0'
+
+gem 'rails', '~>4.0.0'
+
+if ENV['FEEDBIN_HOMEPAGE_REPO']
+ gem 'feedbin_homepage', git: ENV['FEEDBIN_HOMEPAGE_REPO'], branch: 'master'
+end
+
+group :development do
+ gem 'better_errors'
+ gem 'quiet_assets'
+ gem 'capistrano-unicorn', github: 'sosedoff/capistrano-unicorn', ref: '52376ad', require: false
+end
+
+group :test do
+ gem 'factory_girl_rails'
+end
+
+group :production do
+ gem "therubyracer", require: 'v8'
+end
+
+gem 'pg'
+gem 'unicorn'
+
+gem 'nokogiri', '1.5.10'
+
+gem 'opml_saw', github: 'feedbin/opml_saw', ref: '61d8c2d'
+gem 'feedzirra', github: 'feedbin/feedzirra', ref: 'c782e93'
+gem 'html-pipeline', github: 'benubois/html-pipeline', ref: '652162b'
+gem 'activerecord-import', github: 'feedbin/activerecord-import', ref: 'b7851b1'
+gem 'multi_fetch_fragments', github: 'feedbin/multi_fetch_fragments', ref: 'e99b6f7'
+gem 'redis', github: 'redis/redis-rb', ref: '77c2a99'
+
+gem 'sass-rails', '~>4.0.0'
+gem 'coffee-rails', '~>4.0.0'
+gem 'uglifier', '>= 1.0.3'
+gem 'bourbon'
+
+gem 'jquery-rails'
+gem 'postmark-rails'
+gem 'dalli'
+gem 'will_paginate'
+gem 'sanitize'
+gem 'longurl'
+gem 'carrierwave'
+gem 'carrierwave_direct'
+gem 'fog'
+gem 'clockwork'
+gem 'bust_rails_etags'
+gem 'jbuilder'
+gem 'request_exception_handler'
+gem 'bcrypt-ruby', '~> 3.0.0'
+gem 'clockwork'
+gem 'honeybadger'
+gem 'addressable', require: 'addressable/uri'
+gem 'librato-rails'
+gem 'foreman'
+gem 'yajl-ruby', require: nil
+gem 'readability_parser'
+gem 'lograge'
+
+# Sidekiq
+gem 'sidekiq'
+gem 'slim'
+gem 'sinatra', require: nil
+
+# Stripe
+gem 'stripe'
+gem 'stripe_event'
373 Gemfile.lock
@@ -0,0 +1,373 @@
+GIT
+ remote: git://github.com/benubois/html-pipeline.git
+ revision: 652162b4c6c6a320cf8a45ee035704c10f802522
+ ref: 652162b
+ specs:
+ html-pipeline (0.0.12)
+ activesupport (>= 2)
+ escape_utils (~> 0.3)
+ gemoji (~> 1.0)
+ github-markdown (~> 0.5)
+ nokogiri (~> 1.4)
+ rinku (~> 1.7)
+ sanitize (~> 2.0)
+
+GIT
+ remote: git://github.com/feedbin/activerecord-import.git
+ revision: b7851b1b0bb50412240d37afe2ceeb10af406b99
+ ref: b7851b1
+ specs:
+ activerecord-import (0.4.0)
+ activerecord (>= 3.0)
+
+GIT
+ remote: git://github.com/feedbin/feedzirra.git
+ revision: c782e93eaf613aa29e75fcd64c077a281e7c261d
+ ref: c782e93
+ specs:
+ feedzirra (0.2.0.rc2)
+ curb (~> 0.8.1)
+ loofah (~> 1.2.1)
+ nokogiri (~> 1.5.3)
+ sax-machine (~> 0.2.0.rc1)
+
+GIT
+ remote: git://github.com/feedbin/multi_fetch_fragments.git
+ revision: e99b6f7d82d1cca35969d999c60985fcaa583b9b
+ ref: e99b6f7
+ specs:
+ multi_fetch_fragments (0.0.16)
+
+GIT
+ remote: git://github.com/feedbin/opml_saw.git
+ revision: 61d8c2dd3d46e9cae38178754469dd9da7c8bd6a
+ ref: 61d8c2d
+ specs:
+ opml_saw (0.0.2)
+ nokogiri
+
+GIT
+ remote: git://github.com/redis/redis-rb.git
+ revision: 77c2a9965772c7a6786d90ac40344a632959f229
+ ref: 77c2a99
+ specs:
+ redis (3.0.4)
+
+GIT
+ remote: git://github.com/sosedoff/capistrano-unicorn.git
+ revision: 52376ad3d1fb20c21b7d79806bcf79fb91c78471
+ ref: 52376ad
+ specs:
+ capistrano-unicorn (0.1.9)
+ capistrano
+
+GIT
+ remote: https://31428c0a277250173ffb8d676e1e9ea8fcbb5c6d:x-oauth-basic@github.com/feedbin/feedbin-homepage.git
+ revision: 575c3218e4da837e4414e28f16c74a3706408f54
+ branch: master
+ specs:
+ feedbin_homepage (0.0.1)
+ rails (~> 4.0.0)
+
+GEM
+ remote: https://rubygems.org/
+ specs:
+ actionmailer (4.0.0)
+ actionpack (= 4.0.0)
+ mail (~> 2.5.3)
+ actionpack (4.0.0)
+ activesupport (= 4.0.0)
+ builder (~> 3.1.0)
+ erubis (~> 2.7.0)
+ rack (~> 1.5.2)
+ rack-test (~> 0.6.2)
+ activemodel (4.0.0)
+ activesupport (= 4.0.0)
+ builder (~> 3.1.0)
+ activerecord (4.0.0)
+ activemodel (= 4.0.0)
+ activerecord-deprecated_finders (~> 1.0.2)
+ activesupport (= 4.0.0)
+ arel (~> 4.0.0)
+ activerecord-deprecated_finders (1.0.3)
+ activesupport (4.0.0)
+ i18n (~> 0.6, >= 0.6.4)
+ minitest (~> 4.2)
+ multi_json (~> 1.3)
+ thread_safe (~> 0.1)
+ tzinfo (~> 0.3.37)
+ addressable (2.3.5)
+ aggregate (0.2.2)
+ arel (4.0.0)
+ atomic (1.1.13)
+ bcrypt-ruby (3.0.1)
+ better_errors (0.9.0)
+ coderay (>= 1.0.0)
+ erubis (>= 2.6.6)
+ bourbon (3.1.8)
+ sass (>= 3.2.0)
+ thor
+ builder (3.1.4)
+ bust_rails_etags (0.0.5)
+ capistrano (2.15.5)
+ highline
+ net-scp (>= 1.0.0)
+ net-sftp (>= 2.0.0)
+ net-ssh (>= 2.0.14)
+ net-ssh-gateway (>= 1.1.0)
+ carrierwave (0.9.0)
+ activemodel (>= 3.2.0)
+ activesupport (>= 3.2.0)
+ json (>= 1.7)
+ carrierwave_direct (0.0.13)
+ carrierwave
+ fog
+ uuidtools
+ celluloid (0.14.1)
+ timers (>= 1.0.0)
+ clockwork (0.6.0)
+ activesupport
+ tzinfo (~> 0.3.35)
+ coderay (1.0.9)
+ coffee-rails (4.0.0)
+ coffee-script (>= 2.2.0)
+ railties (>= 4.0.0.beta, < 5.0)
+ coffee-script (2.2.0)
+ coffee-script-source
+ execjs
+ coffee-script-source (1.6.3)
+ connection_pool (1.1.0)
+ curb (0.8.4)
+ dalli (2.6.4)
+ dotenv (0.8.0)
+ erubis (2.7.0)
+ escape_utils (0.3.2)
+ excon (0.25.3)
+ execjs (1.4.0)
+ multi_json (~> 1.0)
+ factory_girl (4.2.0)
+ activesupport (>= 3.0.0)
+ factory_girl_rails (4.2.1)
+ factory_girl (~> 4.2.0)
+ railties (>= 3.0.0)
+ faraday (0.8.8)
+ multipart-post (~> 1.2.0)
+ faraday_middleware (0.9.0)
+ faraday (>= 0.7.4, < 0.9)
+ fog (1.15.0)
+ builder
+ excon (~> 0.25.0)
+ formatador (~> 0.2.0)
+ mime-types
+ multi_json (~> 1.0)
+ net-scp (~> 1.1)
+ net-ssh (>= 2.1.3)
+ nokogiri (~> 1.5)
+ ruby-hmac
+ foreman (0.63.0)
+ dotenv (>= 0.7)
+ thor (>= 0.13.6)
+ formatador (0.2.4)
+ gemoji (1.4.0)
+ github-markdown (0.5.3)
+ hashie (1.2.0)
+ highline (1.6.19)
+ hike (1.2.3)
+ honeybadger (1.8.0)
+ json
+ i18n (0.6.5)
+ jbuilder (1.5.0)
+ activesupport (>= 3.0.0)
+ multi_json (>= 1.2.0)
+ jquery-rails (3.0.4)
+ railties (>= 3.0, < 5.0)
+ thor (>= 0.14, < 2.0)
+ json (1.8.0)
+ kgio (2.8.0)
+ librato-metrics (1.1.0)
+ aggregate (~> 0.2.2)
+ faraday (~> 0.7)
+ multi_json
+ librato-rails (0.9.0)
+ librato-metrics (~> 1.1.0)
+ rails (>= 3.0)
+ libv8 (3.11.8.17)
+ lograge (0.2.0)
+ actionpack
+ activesupport
+ longurl (0.1.6)
+ json
+ loofah (1.2.1)
+ nokogiri (>= 1.4.4)
+ mail (2.5.4)
+ mime-types (~> 1.16)
+ treetop (~> 1.4.8)
+ mime-types (1.24)
+ minitest (4.7.5)
+ multi_json (1.7.9)
+ multi_xml (0.5.5)
+ multipart-post (1.2.0)
+ net-scp (1.1.2)
+ net-ssh (>= 2.6.5)
+ net-sftp (2.1.2)
+ net-ssh (>= 2.6.5)
+ net-ssh (2.6.8)
+ net-ssh-gateway (1.2.0)
+ net-ssh (>= 2.6.5)
+ nokogiri (1.5.10)
+ pg (0.16.0)
+ polyglot (0.3.3)
+ postmark (1.0.1)
+ json
+ rake
+ postmark-rails (0.5.1)
+ actionmailer (>= 3.0.0)
+ postmark (~> 1.0)
+ quiet_assets (1.0.2)
+ railties (>= 3.1, < 5.0)
+ rack (1.5.2)
+ rack-protection (1.5.0)
+ rack
+ rack-test (0.6.2)
+ rack (>= 1.0)
+ rails (4.0.0)
+ actionmailer (= 4.0.0)
+ actionpack (= 4.0.0)
+ activerecord (= 4.0.0)
+ activesupport (= 4.0.0)
+ bundler (>= 1.3.0, < 2.0)
+ railties (= 4.0.0)
+ sprockets-rails (~> 2.0.0)
+ railties (4.0.0)
+ actionpack (= 4.0.0)
+ activesupport (= 4.0.0)
+ rake (>= 0.8.7)
+ thor (>= 0.18.1, < 2.0)
+ raindrops (0.11.0)
+ rake (10.1.0)
+ readability_parser (0.0.3)
+ faraday (~> 0.8.4)
+ faraday_middleware (~> 0.9.0)
+ hashie (~> 1.2.0)
+ multi_json (~> 1.7.2)
+ multi_xml (~> 0.5.2)
+ redis-namespace (1.3.1)
+ redis (~> 3.0.0)
+ ref (1.0.5)
+ request_exception_handler (0.4)
+ actionpack (>= 2.1)
+ rest-client (1.6.7)
+ mime-types (>= 1.16)
+ rinku (1.7.3)
+ ruby-hmac (0.4.0)
+ sanitize (2.0.6)
+ nokogiri (>= 1.4.4)
+ sass (3.2.10)
+ sass-rails (4.0.0)
+ railties (>= 4.0.0.beta, < 5.0)
+ sass (>= 3.1.10)
+ sprockets-rails (~> 2.0.0)
+ sax-machine (0.2.0.rc1)
+ nokogiri (~> 1.5.2)
+ sidekiq (2.13.1)
+ celluloid (>= 0.14.1)
+ connection_pool (>= 1.0.0)
+ json
+ redis (>= 3.0)
+ redis-namespace
+ sinatra (1.4.3)
+ rack (~> 1.4)
+ rack-protection (~> 1.4)
+ tilt (~> 1.3, >= 1.3.4)
+ slim (2.0.1)
+ temple (~> 0.6.6)
+ tilt (>= 1.3.3, < 2.1)
+ sprockets (2.10.0)
+ hike (~> 1.2)
+ multi_json (~> 1.0)
+ rack (~> 1.0)
+ tilt (~> 1.1, != 1.3.0)
+ sprockets-rails (2.0.0)
+ actionpack (>= 3.0)
+ activesupport (>= 3.0)
+ sprockets (~> 2.8)
+ stripe (1.8.5)
+ multi_json (>= 1.0.4, < 2)
+ rest-client (~> 1.4)
+ stripe_event (0.6.0)
+ rails (>= 3.1)
+ stripe (~> 1.6)
+ temple (0.6.6)
+ therubyracer (0.11.4)
+ libv8 (~> 3.11.8.12)
+ ref
+ thor (0.18.1)
+ thread_safe (0.1.2)
+ atomic
+ tilt (1.4.1)
+ timers (1.1.0)
+ treetop (1.4.15)
+ polyglot
+ polyglot (>= 0.3.1)
+ tzinfo (0.3.37)
+ uglifier (2.1.2)
+ execjs (>= 0.3.0)
+ multi_json (~> 1.0, >= 1.0.2)
+ unicorn (4.6.3)
+ kgio (~> 2.6)
+ rack
+ raindrops (~> 0.7)
+ uuidtools (2.1.4)
+ will_paginate (3.0.4)
+ yajl-ruby (1.1.0)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ activerecord-import!
+ addressable
+ bcrypt-ruby (~> 3.0.0)
+ better_errors
+ bourbon
+ bust_rails_etags
+ capistrano-unicorn!
+ carrierwave
+ carrierwave_direct
+ clockwork
+ coffee-rails (~> 4.0.0)
+ dalli
+ factory_girl_rails
+ feedbin_homepage!
+ feedzirra!
+ fog
+ foreman
+ honeybadger
+ html-pipeline!
+ jbuilder
+ jquery-rails
+ librato-rails
+ lograge
+ longurl
+ multi_fetch_fragments!
+ nokogiri (= 1.5.10)
+ opml_saw!
+ pg
+ postmark-rails
+ quiet_assets
+ rails (~> 4.0.0)
+ readability_parser
+ redis!
+ request_exception_handler
+ sanitize
+ sass-rails (~> 4.0.0)
+ sidekiq
+ sinatra
+ slim
+ stripe
+ stripe_event
+ therubyracer
+ uglifier (>= 1.0.3)
+ unicorn
+ will_paginate
+ yajl-ruby
10 LICENSE.md
@@ -0,0 +1,10 @@
+The MIT License
+===============
+
+Copyright 2013 [Ben Ubois](mailto:ben@feedbin.me)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3  Procfile
@@ -0,0 +1,3 @@
+worker: env DB_POOL=12 bundle exec sidekiq -c 12 -q critical,2 -q feed_refresher_receiver,1 -q default
+worker_slow: env DB_POOL=1 bundle exec sidekiq -c 1 -q worker_slow
+clock: bundle exec clockwork lib/clock.rb
3  Procfile.dev
@@ -0,0 +1,3 @@
+worker: env DB_POOL=15 bundle exec sidekiq -c 15 -q critical,2 -q feed_refresher_receiver,1 -q default
+worker_slow: env DB_POOL=1 bundle exec sidekiq -c 1 -q worker_slow
+clock: bundle exec clockwork lib/clock.rb
153 README.md
@@ -0,0 +1,153 @@
+Feedbin
+=======
+
+Feedbin is a simple, fast and nice looking RSS reader.
+
+![Feedbin Screenshot](https://feedbin.me/assets/screenshots/_main-54c8dba826433d431b8d24cb0bdf42a1.png)
+
+Introduction
+------------
+
+Feedbin is a web based RSS reader. It provides a user interface for reading and managing feeds as well as a [REST-like API](https://github.com/feedbin/feedbin-api) for clients to connect to.
+
+The main Feedbin project is a [Rails 4.0](http://rubyonrails.org/) application. In addition to the main project there are several other services that provide additional functionality. None of these services are required to get Feedbin running locally, but they all provide important functionality that you would want for a production install.
+
+ - [**refresher:**](https://github.com/feedbin/refresher)
+ Refresher is the service that does feed refreshing. Feed refreshes are scheduled as background jobs using [Sidekiq](https://github.com/mperham/sidekiq). Refresher is kept separate so it can be scaled independently. It's also a benefit to not have to load all of Rails for this service.
+ - [**polyptych:**](https://github.com/feedbin/refresher)
+ Polyptych is an API for fetching favicons. Favicons are compiled into a singe CSS file as base64 encoded background images. Polyptych is another Rails App.
+ - [**camo:**](https://github.com/atmos/camo)
+ Camo is an https image proxy. In production Feedbin is SSL only. One issue with SSL is all assets must be served over SSL as well or the browser will show insecure content warnings. Camo proxies all image requests through an SSL enabled host to prevent this.
+
+Requirements
+------------
+
+ - Mac OS X or Linux
+ - [Ruby 2.0](http://www.ruby-lang.org/en/)
+ - [Postgres 9.2.4](http://www.postgresql.org/)
+ - [Redis 2.6.13](http://redis.io/)
+
+Installation
+-------------
+Ultimately you need a Ruby environment and a Rack compatible application server. For development [Pow](http://pow.cx/) is recommended.
+
+Feedbin uses environment variables for configuration. Feedbin will run without any of these, but various features and functionality will be turned off.
+
+| Environment Variable | Description |
+|--------------------------|------------------------------------------------------------------------------------|
+| ASSET_HOST | Pull CDN URL |
+| AWS_ACCESS_KEY_ID | Used for file uploads - http://aws.amazon.com |
+| AWS_S3_BUCKET | Used for file uploads - http://aws.amazon.com |
+| AWS_SECRET_ACCESS_KEY | Used for file uploads - http://aws.amazon.com |
+| CAMO_HOST | CDN to point to the camo host |
+| CAMO_KEY | Used to rewrite assets to use https - https://github.com/atmos/camo |
+| DATABASE_URL | Database connection string - postgres://USER:PASS@IP:PORT/DATABASE |
+| DEFAULT_URL_OPTIONS_HOST | Mailer host - feedbin.me |
+| FEEDBIN_HOMEPAGE_REPO | Git URL to a Rails engine that provides a custom homepage |
+| FROM_ADDRESS | Used as a reply-to email address |
+| GAUGES_SITE_ID | [gaug.es](http://gaug.es) analytics identifier |
+| HONEYBADGER_API_KEY | Used for error reporting - http://honeybadger.io |
+| LIBRATO_SOURCE | Default source for metrics - feedbin |
+| LIBRATO_TOKEN | Used for reporting stats - http://metrics.librato.com |
+| LIBRATO_USER | Used for reporting stats - http://metrics.librato.com |
+| MEMCACHED_HOSTS | Comma separated memcached hosts/ports - 192.168.1.2:11121 |
+| POLYPTYCH_CDN | Used for retrieving and serving favicons - https://github.com/feedbin/polyptych |
+| POLYPTYCH_URL | Used for retrieving and serving favicons - https://github.com/feedbin/polyptych |
+| POSTGRES_USERNAME | Used for connecting to database |
+| POSTMARK_API_KEY | Used for sending email - http://postmarkapp.com |
+| RACK_ENV | Environment - production |
+| RAILS_ENV | Environment - production |
+| READABILITY_API_TOKEN | Used for Readability - http://www.readability.com |
+| REDIS_URL | redis connection string - redis://redis:PASSWORD@192.168.1.3:6379 |
+| SECRET_KEY_BASE | Encryptions key for Rails - run `rake secret` |
+| SIDEKIQ_PASSWORD | Sidekiq Basic Auth Password |
+| STRIPE_API_KEY | Used for communicating with stripe - https://stripe.com |
+| STRIPE_PUBLIC_KEY | Used for communicating with stripe - https://stripe.com |
+
+These variables need to be available in the environment of the user running the app.
+
+Locally I use [dotenv](https://github.com/bkeepers/dotenv) combined with [pow](http://pow.cx/). Pow's `.powenv` file is set up to read dotenv's .env file like:
+
+```shell
+export $(cat .env)
+```
+
+This is necessary so the environment variables can be read by both Pow and Unicorn.
+
+In production environment variables are set in the `app` users ~/.bash_profile like:
+
+```shell
+export AWS_ACCESS_KEY_ID=aoisjf3j23oij23f
+...
+```
+
+###Mac OS X Install
+
+This will get Feedbin running on a fresh Mountain Lion install. If you already have a ruby environment configured you can skip most of these steps.
+
+**Command Line Tools (OS X Mountain Lion)**
+
+ These can be downloaded from the [Apple Developer website](https://developer.apple.com/downloads/index.action), or in XCode preferences.
+
+**Homebrew**
+
+ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
+
+**rbenv**
+
+ brew update
+ brew install rbenv
+ brew install ruby-build
+ echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile
+ source ~/.bash_profile
+
+**Ruby 2.0**
+
+ rbenv install 2.0.0-p247
+ rbenv global 2.0.0-p247
+
+**Bundler**
+
+ gem install bundler
+
+**Postgres 9.2.4**
+
+ cd ~/Downloads
+ curl -L http://postgresapp.com/download > postgres.zip
+ unzip postgres.zip
+ mv Postgres.app /Applications/
+ open /Applications/Postgres.app
+
+**Redis 2.6.14**
+
+ brew update
+ brew install redis
+
+Make sure to follow post install instructions.
+
+**Clone Feedbin**
+
+ git clone https://github.com/feedbin/feedbin.git
+ cd feedbin
+ bundle
+
+**Setup the database**
+
+ rake db:setup
+
+**[pow](http://pow.cx)**
+
+ curl get.pow.cx | sh
+ ln -nfs /path/to/feedbin ~/.pow/feedbin
+
+At this point you should be able to load [feedbin.dev](http://feedbin.dev/) in your browser.
+
+###Ubuntu 12.04 Dependencies
+
+ apt-get install -y python-software-properties
+ add-apt-repository -y ppa:pitti/postgresql
+ apt-get -y update
+ apt-get -y upgrade
+ apt-get install -y build-essential curl libreadline-dev libcurl4-gnutls-dev libpq-dev libxml2-dev libxslt1-dev libcurl4-gnutls-dev zlib1g-dev libssl-dev postgresql-client-9.2
+
+TODO: Getting the Ruby environment setup on Ubuntu and running Feedbin
6 Rakefile
@@ -0,0 +1,6 @@
+# Add your own tasks in files placed in lib/tasks ending in .rake,
+# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
+
+require File.expand_path('../config/application', __FILE__)
+
+Feedbin::Application.load_tasks
40 app/assets/fonts/Feedbin.dev.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+This is a custom SVG font generated by IcoMoon.
+<iconset id="Feedbin" name="Feedbin" href="https://feedbin.me" grid="16"></iconset><author name="Ben Ubois" href="https://feedbin.me"></author>
+</metadata>
+<defs>
+<font id="Feedbin" horiz-adv-x="512" >
+<font-face units-per-em="512" ascent="480" descent="-32" />
+<missing-glyph horiz-adv-x="512" />
+<glyph class="hidden" unicode="&#xf000;" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" />
+<glyph unicode="&#xe001;" d="M 510.944,478.944L 330.976,480L 13.152,162.176l 181.056-181.024L 512,298.976L 510.944,478.944z M 384,296
+ c-30.944,0-56,25.088-56,56S 353.056,408, 384,408S 440,382.912, 440,352S 414.944,296, 384,296z" data-tags="tag" />
+<glyph unicode="&#xe002;" d="M 352,155.232L 418.88-32l-163.232,128L 93.12-32L 160,155.232L0,256l 186.176,0 L 256,448l 69.824-192L 512,256 L 352,155.232z" data-tags="star-filled" />
+<glyph unicode="&#xe003;" d="M 256,354.368l 32-109.312L 295.648,224l 22.4,0 l 83.104,0 l-66.208-41.696L 313.248,168.64l 8.64-24.192l 29.632-82.944l-76.096,59.68
+ l-19.808,15.488L 235.84,121.12l-75.2-59.2l 29.504,82.496l 8.64,24.192L 177.056,182.304L 110.848,224L 193.92,224 l 22.432,0 L 224,245.056L 256,354.368 M 256,448L 186.176,256L0,256
+ l 160-100.768L 93.12-32l 162.528,128l 163.232-128L 352,155.232L 512,256l-186.176,0 L 256,448L 256,448z" data-tags="star-empty" />
+<glyph unicode="&#xe004;" d="M0,448L 64,448L 64,384L0,384zM 128,448L 512,448L 512,384L 128,384zM0,320L 64,320L 64,256L0,256zM 128,320L 512,320L 512,256L 128,256zM0,192L 64,192L 64,128L0,128zM 128,192L 512,192L 512,128L 128,128zM0,64L 64,64L 64,0L0,0zM 128,64L 512,64L 512,0L 128,0z" data-tags="feeds" />
+<glyph unicode="&#xe005;" d="M0,448L 512,448L 512,384L0,384zM0,352L 416,352L 416,288L0,288zM0,256L 480,256L 480,192L0,192zM0,160L 416,160L 416,96L0,96zM0,64L 204.8,64L 204.8,0L0,0z" data-tags="list" />
+<glyph unicode="&#xe006;" d="M0,288L 448,288L 448,224L0,224zM0,192L 384,192L 384,128L0,128zM0,96L 320,96L 320,32L0,32zM0,448L 512,448L 512,352L0,352z" data-tags="entry-content" />
+<glyph unicode="&#xe007;" d="M0,448L 512,448L 512,352L0,352zM0,288L 512,288L 512,192L0,192zM0,128L 512,128L 512,32L0,32z" data-tags="entries" />
+<glyph unicode="&#xe009;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 256,19.2c-113.12,0-204.8,91.68-204.8,204.8
+ S 142.88,428.8, 256,428.8s 204.8-91.68, 204.8-204.8S 369.12,19.2, 256,19.2z" data-tags="circle-empty" />
+<glyph unicode="&#xe00a;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 230.368,70.368L 128,198.368L 128,288 l 102.368-96l 128,185.632
+ L 384,326.368L 230.368,70.368z" data-tags="check" />
+<glyph unicode="&#xe000;" d="M 64-32l 384,0 l 32,384L 32,352 L 64-32z M 320,256l 64,0 l0-224 l-64,0 L 320,256 z M 224,256l 64,0 l0-224 L 224,32 L 224,256 z M 128,256l 64,0 l0-224 L 128,32 L 128,256 zM 384,448L 384,480L 128,480L 128,448L0,448L0,384L 512,384L 512,448 z" data-tags="trash" />
+<glyph unicode="&#xe008;" d="M0,224A256,256 180 1 1 512,224A256,256 180 1 1 0,224z" data-tags="circle-filled" />
+<glyph unicode="&#xe00b;" d="M 495.552,231.264l-234.176-173.44c-4.8-3.616-8.8-1.6-8.8,4.48L 252.48,171.968C 186.272,172.448, 42.496,174.272,0,73.152
+ c 3.040,208.416, 203.168,236.832, 252.288,240.704L 252.192,412.832c0,6.048, 4,8.064, 8.8,4.48l 234.56-172.992
+ C 500.384,240.704, 500.416,234.848, 495.552,231.264z" data-tags="share" />
+<glyph unicode="&#xe00c;" d="M 96,70.944C 96,61.92, 109.984,64, 100.928,64L 73.504,64 C 64.48,64, 64,61.92, 64,70.944l0,41.088 L 23.712,180.224
+ C 12.384,190.624, 4.032,205.536, 4.032,221.568c0,31.712, 14.304,57.504, 46.016,57.504C 81.728,279.104, 96,253.312, 96,221.568L 96,70.944 z M 384,166.816L 384,96 L 128,96 L 128,179.2
+ c 32,29.824, 76.8,45.12, 117.92,45.12c 41.12,0, 93.504-15.296, 124.224-43.104L 384,166.816z M 384,221.568l0-21.184 L 369.312,204.48
+ c-29.824,26.912-73.12,41.76-112.736,41.76c-39.584,0-86.016-14.816-115.84-41.76L 128,200.384L 128,221.568 c0,30.688-12.512,58.912-40.672,71.936l 0.64,0.96
+ l 2.112,2.272C 111.040,367.008, 177.568,416, 250.816,416c 73.312,0, 139.424-48.992, 160.384-119.264l 0.928-2.272l 7.936-0.96C 392,280.48, 384,252.288, 384,221.568z
+ M 482.56,179.488l-35.712-68.768L 448,94.944l0-24 C 448,61.92, 438.592,64, 429.568,64l-27.456,0 C 393.088,64, 416,61.92, 416,70.944L 416,221.568
+ c0,31.712, 10.688,57.504, 42.368,57.504c 31.616,0, 49.92-25.792, 49.92-57.504C 508.288,205.536, 494.496,190.624, 482.56,179.488z" data-tags="readability" />
+<glyph unicode="&#x20;" horiz-adv-x="256" />
+</font></defs></svg>
BIN  app/assets/fonts/Feedbin.eot
Binary file not shown
40 app/assets/fonts/Feedbin.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+This is a custom SVG font generated by IcoMoon.
+<iconset id="Feedbin" name="Feedbin" href="https://feedbin.me" grid="16"></iconset><author name="Ben Ubois" href="https://feedbin.me"></author>
+</metadata>
+<defs>
+<font id="Feedbin" horiz-adv-x="512" >
+<font-face units-per-em="512" ascent="480" descent="-32" />
+<missing-glyph horiz-adv-x="512" />
+<glyph class="hidden" unicode="&#xf000;" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" />
+<glyph unicode="&#xe001;" d="M 510.944,478.944L 330.976,480L 13.152,162.176l 181.056-181.024L 512,298.976L 510.944,478.944z M 384,296
+ c-30.944,0-56,25.088-56,56S 353.056,408, 384,408S 440,382.912, 440,352S 414.944,296, 384,296z" />
+<glyph unicode="&#xe002;" d="M 352,155.232L 418.88-32l-163.232,128L 93.12-32L 160,155.232L0,256l 186.176,0 L 256,448l 69.824-192L 512,256 L 352,155.232z" />
+<glyph unicode="&#xe003;" d="M 256,354.368l 32-109.312L 295.648,224l 22.4,0 l 83.104,0 l-66.208-41.696L 313.248,168.64l 8.64-24.192l 29.632-82.944l-76.096,59.68
+ l-19.808,15.488L 235.84,121.12l-75.2-59.2l 29.504,82.496l 8.64,24.192L 177.056,182.304L 110.848,224L 193.92,224 l 22.432,0 L 224,245.056L 256,354.368 M 256,448L 186.176,256L0,256
+ l 160-100.768L 93.12-32l 162.528,128l 163.232-128L 352,155.232L 512,256l-186.176,0 L 256,448L 256,448z" />
+<glyph unicode="&#xe004;" d="M0,448L 64,448L 64,384L0,384zM 128,448L 512,448L 512,384L 128,384zM0,320L 64,320L 64,256L0,256zM 128,320L 512,320L 512,256L 128,256zM0,192L 64,192L 64,128L0,128zM 128,192L 512,192L 512,128L 128,128zM0,64L 64,64L 64,0L0,0zM 128,64L 512,64L 512,0L 128,0z" />
+<glyph unicode="&#xe005;" d="M0,448L 512,448L 512,384L0,384zM0,352L 416,352L 416,288L0,288zM0,256L 480,256L 480,192L0,192zM0,160L 416,160L 416,96L0,96zM0,64L 204.8,64L 204.8,0L0,0z" />
+<glyph unicode="&#xe006;" d="M0,288L 448,288L 448,224L0,224zM0,192L 384,192L 384,128L0,128zM0,96L 320,96L 320,32L0,32zM0,448L 512,448L 512,352L0,352z" />
+<glyph unicode="&#xe007;" d="M0,448L 512,448L 512,352L0,352zM0,288L 512,288L 512,192L0,192zM0,128L 512,128L 512,32L0,32z" />
+<glyph unicode="&#xe009;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 256,19.2c-113.12,0-204.8,91.68-204.8,204.8
+ S 142.88,428.8, 256,428.8s 204.8-91.68, 204.8-204.8S 369.12,19.2, 256,19.2z" />
+<glyph unicode="&#xe00a;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 230.368,70.368L 128,198.368L 128,288 l 102.368-96l 128,185.632
+ L 384,326.368L 230.368,70.368z" />
+<glyph unicode="&#xe000;" d="M 64-32l 384,0 l 32,384L 32,352 L 64-32z M 320,256l 64,0 l0-224 l-64,0 L 320,256 z M 224,256l 64,0 l0-224 L 224,32 L 224,256 z M 128,256l 64,0 l0-224 L 128,32 L 128,256 zM 384,448L 384,480L 128,480L 128,448L0,448L0,384L 512,384L 512,448 z" />
+<glyph unicode="&#xe008;" d="M0,224A256,256 180 1 1 512,224A256,256 180 1 1 0,224z" />
+<glyph unicode="&#xe00b;" d="M 495.552,231.264l-234.176-173.44c-4.8-3.616-8.8-1.6-8.8,4.48L 252.48,171.968C 186.272,172.448, 42.496,174.272,0,73.152
+ c 3.040,208.416, 203.168,236.832, 252.288,240.704L 252.192,412.832c0,6.048, 4,8.064, 8.8,4.48l 234.56-172.992
+ C 500.384,240.704, 500.416,234.848, 495.552,231.264z" />
+<glyph unicode="&#xe00c;" d="M 96,70.944C 96,61.92, 109.984,64, 100.928,64L 73.504,64 C 64.48,64, 64,61.92, 64,70.944l0,41.088 L 23.712,180.224
+ C 12.384,190.624, 4.032,205.536, 4.032,221.568c0,31.712, 14.304,57.504, 46.016,57.504C 81.728,279.104, 96,253.312, 96,221.568L 96,70.944 z M 384,166.816L 384,96 L 128,96 L 128,179.2
+ c 32,29.824, 76.8,45.12, 117.92,45.12c 41.12,0, 93.504-15.296, 124.224-43.104L 384,166.816z M 384,221.568l0-21.184 L 369.312,204.48
+ c-29.824,26.912-73.12,41.76-112.736,41.76c-39.584,0-86.016-14.816-115.84-41.76L 128,200.384L 128,221.568 c0,30.688-12.512,58.912-40.672,71.936l 0.64,0.96
+ l 2.112,2.272C 111.040,367.008, 177.568,416, 250.816,416c 73.312,0, 139.424-48.992, 160.384-119.264l 0.928-2.272l 7.936-0.96C 392,280.48, 384,252.288, 384,221.568z
+ M 482.56,179.488l-35.712-68.768L 448,94.944l0-24 C 448,61.92, 438.592,64, 429.568,64l-27.456,0 C 393.088,64, 416,61.92, 416,70.944L 416,221.568
+ c0,31.712, 10.688,57.504, 42.368,57.504c 31.616,0, 49.92-25.792, 49.92-57.504C 508.288,205.536, 494.496,190.624, 482.56,179.488z" />
+<glyph unicode="&#x20;" horiz-adv-x="256" />
+</font></defs></svg>
BIN  app/assets/fonts/Feedbin.ttf
Binary file not shown
BIN  app/assets/fonts/Feedbin.woff
Binary file not shown
BIN  app/assets/fonts/OpenSans-Light.eot
Binary file not shown
146 app/assets/fonts/OpenSans-Light.svg
@@ -0,0 +1,146 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : Digitized data copyright 20102011 Google Corporation
+Foundry : Ascender Corporation
+Foundry URL : httpwwwascendercorpcom
+</metadata>
+<defs>
+<font id="OpenSansLight" horiz-adv-x="1169" >
+<font-face units-per-em="2048" ascent="1638" descent="-410" />
+<missing-glyph horiz-adv-x="532" />
+<glyph unicode=" " horiz-adv-x="532" />
+<glyph unicode="&#x09;" horiz-adv-x="532" />
+<glyph unicode="&#xa0;" horiz-adv-x="532" />
+<glyph unicode="!" horiz-adv-x="492" d="M164 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98zM186 1462h119l-29 -1085h-61z" />
+<glyph unicode="&#x22;" horiz-adv-x="723" d="M133 1462h127l-33 -528h-61zM463 1462h127l-33 -528h-61z" />
+<glyph unicode="#" horiz-adv-x="1323" d="M55 451v79h299l76 398h-297v80h311l86 454h91l-89 -454h365l88 454h86l-88 -454h285v-80h-301l-76 -398h303v-79h-320l-86 -451h-90l88 451h-360l-86 -451h-88l86 451h-283zM440 530h363l78 398h-363z" />
+<glyph unicode="$" d="M164 186v103q75 -36 179.5 -61t193.5 -25v508q-145 44 -215 88t-102 104t-32 146q0 124 94.5 208.5t254.5 104.5v192h81v-190q197 -9 351 -72l-33 -90q-141 62 -318 72v-486q213 -66 293 -144t80 -204q0 -133 -99 -217t-274 -106v-236h-81v232q-92 2 -200.5 22.5 t-172.5 50.5zM297 1049q0 -86 57 -141t183 -93v453q-119 -16 -179.5 -76t-60.5 -143zM618 209q122 13 192.5 75t70.5 160q0 85 -63 140.5t-200 95.5v-471z" />
+<glyph unicode="%" horiz-adv-x="1653" d="M113 1026q0 223 72 340t212 117q139 0 215 -120.5t76 -336.5q0 -226 -75 -343.5t-216 -117.5q-133 0 -208.5 120.5t-75.5 340.5zM211 1026q0 -186 45 -279.5t141 -93.5q193 0 193 373q0 184 -49.5 276.5t-143.5 92.5q-96 0 -141 -92.5t-45 -276.5zM373 0l811 1462h96 l-811 -1462h-96zM965 438q0 225 73.5 341t212.5 116q137 0 213 -120t76 -337q0 -226 -74 -343.5t-215 -117.5q-136 0 -211 121.5t-75 339.5zM1063 438q0 -185 45 -277.5t141 -92.5q193 0 193 370q0 369 -193 369q-96 0 -141 -91.5t-45 -277.5z" />
+<glyph unicode="&#x26;" horiz-adv-x="1460" d="M123 371q0 138 73.5 235t274.5 205l-75 82q-66 71 -98 139t-32 142q0 143 95.5 227t256.5 84q155 0 245.5 -81t90.5 -224q0 -105 -70 -192.5t-253 -194.5l452 -457q61 72 104 157t75 201h96q-63 -246 -209 -426l266 -268h-135l-193 197q-92 -90 -164 -131.5t-157.5 -63.5 t-194.5 -22q-209 0 -328.5 103t-119.5 288zM227 375q0 -143 93 -224t258 -81q128 0 234.5 43.5t209.5 146.5l-483 485q-136 -72 -196.5 -122.5t-88 -109.5t-27.5 -138zM373 1176q0 -79 40 -146t152 -174q159 85 221 159t62 169q0 94 -62 152.5t-168 58.5q-114 0 -179.5 -58 t-65.5 -161z" />
+<glyph unicode="'" horiz-adv-x="393" d="M133 1462h127l-33 -528h-61z" />
+<glyph unicode="(" horiz-adv-x="557" d="M82 561q0 265 77.5 496t223.5 405h113q-148 -182 -227 -412.5t-79 -486.5q0 -483 304 -887h-111q-147 170 -224 397t-77 488z" />
+<glyph unicode=")" horiz-adv-x="557" d="M61 1462h113q147 -175 224 -406.5t77 -494.5t-77.5 -490t-223.5 -395h-111q304 404 304 887q0 257 -79 487.5t-227 411.5z" />
+<glyph unicode="*" horiz-adv-x="1128" d="M104 1124l19 131l401 -104l-39 405h146l-37 -405l405 104l21 -131l-395 -39l247 -340l-124 -71l-191 379l-180 -379l-125 71l242 340z" />
+<glyph unicode="+" d="M111 682v82h432v434h82v-434h434v-82h-434v-432h-82v432h-432z" />
+<glyph unicode="," horiz-adv-x="440" d="M68 -264q77 275 110 502h117l12 -21q-75 -265 -174 -481h-65z" />
+<glyph unicode="-" horiz-adv-x="659" d="M92 512v82h475v-82h-475z" />
+<glyph unicode="." horiz-adv-x="487" d="M162 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98z" />
+<glyph unicode="/" horiz-adv-x="698" d="M25 0l544 1462h105l-545 -1462h-104z" />
+<glyph unicode="0" d="M115 735q0 382 115.5 566t351.5 184q231 0 352 -190.5t121 -559.5q0 -385 -117.5 -570t-355.5 -185q-229 0 -348 190.5t-119 564.5zM223 735q0 -340 89 -502.5t270 -162.5q189 0 275.5 168t86.5 497q0 324 -86.5 492t-275.5 168t-274 -168t-85 -492z" />
+<glyph unicode="1" d="M199 1165l397 297h86v-1462h-98v1065q0 145 12 301q-15 -15 -31 -29t-309 -243z" />
+<glyph unicode="2" d="M113 0v88l389 406q164 170 230 260t97 172t31 172q0 131 -86 213t-223 82q-183 0 -350 -133l-54 69q183 154 406 154q191 0 300.5 -102t109.5 -281q0 -145 -73.5 -280.5t-268.5 -334.5l-375 -385v-4h782v-96h-915z" />
+<glyph unicode="3" d="M94 63v99q84 -44 188.5 -69t196.5 -25q221 0 332 89.5t111 252.5q0 145 -113.5 223t-333.5 78h-158v96h160q182 0 288.5 86.5t106.5 234.5q0 122 -86.5 195.5t-226.5 73.5q-109 0 -199 -30.5t-202 -104.5l-49 67q85 71 205 112.5t243 41.5q202 0 312 -95.5t110 -269.5 q0 -136 -85.5 -229t-229.5 -119v-6q176 -22 268 -112t92 -242q0 -205 -139.5 -317.5t-401.5 -112.5q-223 0 -389 83z" />
+<glyph unicode="4" d="M43 373v67l725 1030h121v-1011h252v-86h-252v-373h-94v373h-752zM162 459h633v418q0 302 14 507h-8q-20 -37 -123 -188z" />
+<glyph unicode="5" d="M143 63v103q108 -55 192 -76.5t179 -21.5q192 0 308 101.5t116 274.5q0 163 -113 256t-307 93q-130 0 -272 -39l-60 39l58 669h704v-96h-610l-45 -516q156 29 244 29q234 0 368.5 -113t134.5 -311q0 -225 -140 -350t-386 -125q-109 0 -207 21.5t-164 61.5z" />
+<glyph unicode="6" d="M131 623q0 285 77.5 479.5t220 288.5t343.5 94q94 0 172 -23v-88q-73 27 -176 27q-247 0 -384.5 -178t-154.5 -518h13q76 98 174 148t207 50q205 0 320.5 -117t115.5 -323q0 -224 -121.5 -353.5t-327.5 -129.5q-222 0 -350.5 169.5t-128.5 473.5zM240 504 q0 -111 49.5 -213.5t134 -162.5t186.5 -60q164 0 255 103t91 294q0 168 -90 262t-245 94q-102 0 -189.5 -45t-139.5 -119.5t-52 -152.5z" />
+<glyph unicode="7" d="M109 1366v96h946v-73l-604 -1389h-117l602 1366h-827z" />
+<glyph unicode="8" d="M121 375q0 131 83 230t257 169q-161 76 -227 160.5t-66 202.5q0 105 53 184.5t148.5 122.5t212.5 43q186 0 299.5 -95t113.5 -257q0 -112 -70.5 -198t-228.5 -159q192 -79 270 -173t78 -228q0 -181 -126.5 -289t-339.5 -108q-221 0 -339 101t-118 294zM223 360 q0 -138 93.5 -214t261.5 -76q164 0 264 80.5t100 218.5q0 124 -78.5 201.5t-302.5 162.5q-184 -71 -261 -157t-77 -216zM268 1137q0 -70 31.5 -123.5t91 -97t199.5 -101.5q163 63 234 139t71 183q0 120 -84.5 190t-230.5 70q-141 0 -226.5 -69.5t-85.5 -190.5z" />
+<glyph unicode="9" d="M111 993q0 220 124.5 356t323.5 136q144 0 252 -75.5t166.5 -221.5t58.5 -346q0 -288 -75.5 -482t-220 -287t-349.5 -93q-104 0 -192 26v86q43 -14 103.5 -21.5t92.5 -7.5q247 0 387 178.5t156 520.5h-12q-73 -96 -174 -147.5t-211 -51.5q-203 0 -316.5 112t-113.5 318z M213 999q0 -174 87 -264t249 -90q101 0 188.5 45t139 119.5t51.5 151.5q0 117 -46.5 219t-130 159.5t-192.5 57.5q-158 0 -252 -106.5t-94 -291.5z" />
+<glyph unicode=":" horiz-adv-x="487" d="M162 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98zM162 971q0 98 80 98q82 0 82 -98q0 -53 -23.5 -76t-58.5 -23q-34 0 -57 23t-23 76z" />
+<glyph unicode=";" horiz-adv-x="487" d="M76 -264q29 97 62 245.5t48 256.5h117l12 -21q-75 -265 -174 -481h-65zM162 971q0 98 80 98q82 0 82 -98q0 -53 -23.5 -76t-58.5 -23q-34 0 -57 23t-23 76z" />
+<glyph unicode="&#x3c;" d="M111 682v61l948 474v-95l-823 -405l823 -355v-96z" />
+<glyph unicode="=" d="M111 477v82h948v-82h-948zM111 885v82h948v-82h-948z" />
+<glyph unicode="&#x3e;" d="M111 266v96l823 355l-823 405v95l948 -474v-61z" />
+<glyph unicode="?" horiz-adv-x="862" d="M57 1403q110 48 184.5 64t153.5 16q183 0 288 -98.5t105 -270.5q0 -68 -18 -119t-50.5 -94.5t-78.5 -84t-102 -87.5q-64 -54 -98.5 -98.5t-50 -93.5t-15.5 -146v-14h-82v37q0 123 37.5 201t138.5 167l91 79q72 61 103 121t31 138q0 127 -83.5 202t-219.5 75 q-79 0 -148 -17.5t-149 -56.5zM260 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98z" />
+<glyph unicode="@" horiz-adv-x="1815" d="M113 561q0 256 108.5 460.5t307 317.5t448.5 113q215 0 380.5 -89t255 -254.5t89.5 -383.5q0 -228 -90.5 -366t-245.5 -138q-89 0 -144.5 54t-64.5 147h-4q-43 -100 -124 -150.5t-189 -50.5q-148 0 -229 96.5t-81 270.5q0 202 120.5 330.5t314.5 128.5q138 0 286 -41 l-22 -464v-30q0 -104 35 -156.5t116 -52.5q103 0 168.5 116.5t65.5 303.5q0 194 -79 340t-225.5 224.5t-334.5 78.5q-230 0 -405.5 -99.5t-270 -281.5t-94.5 -418q0 -322 167 -497.5t474 -175.5q93 0 188.5 18t231.5 70v-99q-203 -80 -414 -80q-349 0 -544 200.5t-195 557.5 zM633 590q0 -143 55 -215t174 -72q255 0 273 346l16 291q-79 27 -193 27q-149 0 -237 -102.5t-88 -274.5z" />
+<glyph unicode="A" horiz-adv-x="1229" d="M0 0l588 1468h65l576 -1468h-115l-203 516h-594l-204 -516h-113zM354 608h523l-199 527q-25 62 -60 172q-27 -96 -59 -174z" />
+<glyph unicode="B" horiz-adv-x="1284" d="M207 0v1462h401q271 0 398 -92t127 -278q0 -127 -77.5 -211.5t-226.5 -108.5v-6q175 -26 257.5 -110.5t82.5 -235.5q0 -202 -134 -311t-380 -109h-448zM309 90h344q406 0 406 330q0 301 -428 301h-322v-631zM309 811h322q206 0 299.5 68.5t93.5 214.5t-105.5 212 t-314.5 66h-295v-561z" />
+<glyph unicode="C" horiz-adv-x="1272" d="M129 735q0 223 84.5 393t243 262.5t368.5 92.5q214 0 383 -80l-41 -92q-160 80 -336 80q-275 0 -433 -176t-158 -482q0 -313 149 -486t426 -173q184 0 338 47v-90q-145 -51 -362 -51q-308 0 -485 199t-177 556z" />
+<glyph unicode="D" horiz-adv-x="1446" d="M207 0v1462h395q350 0 532.5 -183t182.5 -534q0 -368 -193 -556.5t-567 -188.5h-350zM309 90h242q655 0 655 651q0 314 -159.5 472.5t-468.5 158.5h-269v-1282z" />
+<glyph unicode="E" horiz-adv-x="1130" d="M207 0v1462h799v-94h-697v-553h658v-94h-658v-627h697v-94h-799z" />
+<glyph unicode="F" horiz-adv-x="1028" d="M207 0v1462h801v-94h-699v-620h660v-95h-660v-653h-102z" />
+<glyph unicode="G" horiz-adv-x="1481" d="M129 729q0 223 91.5 395.5t262 266.5t391.5 94q239 0 429 -88l-41 -92q-190 88 -394 88q-289 0 -458.5 -178.5t-169.5 -481.5q0 -330 161 -496.5t473 -166.5q202 0 343 57v514h-435v96h539v-667q-212 -90 -477 -90q-346 0 -530.5 195.5t-184.5 553.5z" />
+<glyph unicode="H" horiz-adv-x="1473" d="M207 0v1462h102v-649h854v649h103v-1462h-103v719h-854v-719h-102z" />
+<glyph unicode="I" horiz-adv-x="516" d="M207 0v1462h102v-1462h-102z" />
+<glyph unicode="J" horiz-adv-x="506" d="M-184 -254q78 -20 149 -20q242 0 242 264v1472h102v-1462q0 -369 -342 -369q-92 0 -151 27v88z" />
+<glyph unicode="K" horiz-adv-x="1190" d="M207 0v1462h102v-760l162 162l573 598h130l-599 -618l615 -844h-125l-561 772l-195 -172v-600h-102z" />
+<glyph unicode="L" horiz-adv-x="1051" d="M207 0v1462h102v-1366h697v-96h-799z" />
+<glyph unicode="M" horiz-adv-x="1767" d="M207 0v1462h158l518 -1286h6l518 1286h154v-1462h-103v1108q0 116 12 240h-8l-547 -1348h-65l-545 1350h-8q8 -124 8 -254v-1096h-98z" />
+<glyph unicode="N" horiz-adv-x="1477" d="M207 0v1462h102l865 -1296h6q-9 180 -9 342v954h99v-1462h-103l-866 1298h-8q12 -232 12 -350v-948h-98z" />
+<glyph unicode="O" horiz-adv-x="1565" d="M129 735q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5q0 -348 -174 -550.5t-480 -202.5q-305 0 -479 202.5t-174 552.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5t-401.5 168.5q-261 0 -402.5 -170 t-141.5 -483z" />
+<glyph unicode="P" horiz-adv-x="1198" d="M207 0v1462h358q522 0 522 -420q0 -212 -144 -325t-408 -113h-226v-604h-102zM309 692h201q247 0 357 81.5t110 264.5q0 169 -104 250.5t-322 81.5h-242v-678z" />
+<glyph unicode="Q" horiz-adv-x="1565" d="M129 735q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5q0 -294 -126 -486.5t-349 -246.5l333 -348h-166l-282 330l-33 -2h-31q-305 0 -479 202.5t-174 552.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5 t-401.5 168.5q-261 0 -402.5 -170t-141.5 -483z" />
+<glyph unicode="R" horiz-adv-x="1217" d="M207 0v1462h348q272 0 402 -100.5t130 -302.5q0 -147 -77.5 -248t-235.5 -145l397 -666h-122l-377 637h-363v-637h-102zM309 725h279q185 0 287 82.5t102 243.5q0 167 -100 243t-326 76h-242v-645z" />
+<glyph unicode="S" horiz-adv-x="1116" d="M111 39v102q158 -67 403 -67q180 0 285.5 82.5t105.5 216.5q0 83 -35 137.5t-114 99.5t-232 97q-224 77 -309.5 166.5t-85.5 238.5q0 164 128.5 267.5t330.5 103.5q206 0 387 -78l-37 -88q-182 76 -348 76q-162 0 -258 -75t-96 -204q0 -81 29.5 -133t96.5 -93.5 t230 -99.5q171 -59 257 -114.5t125.5 -126t39.5 -170.5q0 -183 -134.5 -290t-357.5 -107q-268 0 -411 59z" />
+<glyph unicode="T" horiz-adv-x="1073" d="M10 1366v96h1053v-96h-475v-1366h-103v1366h-475z" />
+<glyph unicode="U" horiz-adv-x="1473" d="M190 520v942h103v-946q0 -211 117 -328.5t331 -117.5q209 0 324 115.5t115 320.5v956h102v-946q0 -252 -146 -394t-407 -142q-254 0 -396.5 142.5t-142.5 397.5z" />
+<glyph unicode="V" horiz-adv-x="1182" d="M0 1462h109l368 -995q84 -225 113 -338q20 75 79 233l402 1100h111l-547 -1462h-90z" />
+<glyph unicode="W" horiz-adv-x="1827" d="M51 1462h107l256 -942q15 -57 28 -105.5t23.5 -91t19 -82t15.5 -79.5q24 136 102 413l250 887h113l293 -1018q51 -176 73 -284q13 72 33.5 153t308.5 1149h103l-404 -1462h-84l-321 1128q-40 139 -60 228q-16 -87 -45.5 -200t-322.5 -1156h-86z" />
+<glyph unicode="X" horiz-adv-x="1102" d="M0 0l492 762l-447 700h115l395 -626l401 626h109l-453 -698l490 -764h-117l-432 682l-440 -682h-113z" />
+<glyph unicode="Y" horiz-adv-x="1081" d="M0 1462h117l426 -800l428 800h110l-487 -897v-565h-105v557z" />
+<glyph unicode="Z" horiz-adv-x="1180" d="M82 0v76l856 1290h-817v96h954v-76l-858 -1290h881v-96h-1016z" />
+<glyph unicode="[" horiz-adv-x="653" d="M174 -324v1786h428v-94h-330v-1597h330v-95h-428z" />
+<glyph unicode="\" horiz-adv-x="698" d="M25 1462h102l547 -1462h-103z" />
+<glyph unicode="]" horiz-adv-x="653" d="M51 -229h330v1597h-330v94h428v-1786h-428v95z" />
+<glyph unicode="^" d="M88 561l465 912h68l460 -912h-100l-395 791l-398 -791h-100z" />
+<glyph unicode="_" horiz-adv-x="842" d="M-4 -184h850v-82h-850v82z" />
+<glyph unicode="`" horiz-adv-x="1182" d="M393 1552v17h142q26 -48 98.5 -142t142.5 -170v-16h-69q-96 79 -188.5 171.5t-125.5 139.5z" />
+<glyph unicode="a" horiz-adv-x="1085" d="M98 289q0 159 132.5 247t383.5 93l207 6v72q0 155 -63 234t-203 79q-151 0 -313 -84l-37 86q179 84 354 84q179 0 267.5 -93t88.5 -290v-723h-73l-25 172h-8q-82 -105 -168.5 -148.5t-204.5 -43.5q-160 0 -249 82t-89 227zM203 285q0 -102 62.5 -158.5t176.5 -56.5 q174 0 274.5 99.5t100.5 276.5v107l-190 -8q-229 -11 -326.5 -71.5t-97.5 -188.5z" />
+<glyph unicode="b" horiz-adv-x="1219" d="M182 0v1556h99v-391q0 -88 -4 -162l-3 -85h7q62 98 149.5 144t210.5 46q228 0 343.5 -143.5t115.5 -419.5q0 -271 -121.5 -418t-341.5 -147q-116 0 -209 48t-147 136h-9l-28 -164h-62zM281 528q0 -246 86.5 -353t269.5 -107q178 0 268 124.5t90 354.5q0 471 -356 471 q-192 0 -275 -110t-83 -363v-17z" />
+<glyph unicode="c" horiz-adv-x="973" d="M119 537q0 270 137 420.5t375 150.5q141 0 270 -49l-27 -88q-141 47 -245 47q-200 0 -303 -123.5t-103 -355.5q0 -220 103 -344.5t288 -124.5q148 0 275 53v-92q-104 -51 -273 -51q-233 0 -365 147t-132 410z" />
+<glyph unicode="d" horiz-adv-x="1219" d="M119 528q0 282 118 431t343 149q118 0 204 -43t154 -147h6q-6 126 -6 247v391h98v-1556h-65l-25 166h-8q-124 -186 -356 -186q-225 0 -344 140t-119 408zM223 530q0 -462 359 -462q184 0 270 107t86 353v17q0 252 -84.5 362.5t-273.5 110.5q-178 0 -267.5 -125 t-89.5 -363z" />
+<glyph unicode="e" horiz-adv-x="1124" d="M119 535q0 260 128 416.5t345 156.5q192 0 303 -134t111 -364v-80h-783q2 -224 104.5 -342t293.5 -118q93 0 163.5 13t178.5 56v-90q-92 -40 -170 -54.5t-172 -14.5q-237 0 -369.5 146t-132.5 409zM229 618h672q0 189 -82 295.5t-227 106.5q-157 0 -252 -103.5 t-111 -298.5z" />
+<glyph unicode="f" horiz-adv-x="614" d="M29 1001v58l202 37v84q0 200 73.5 293.5t240.5 93.5q90 0 180 -27l-23 -86q-80 25 -159 25q-116 0 -164.5 -68.5t-48.5 -222.5v-101h256v-86h-256v-1001h-99v1001h-202z" />
+<glyph unicode="g" horiz-adv-x="1071" d="M45 -193q0 112 69.5 186t188.5 101q-49 21 -78.5 59.5t-29.5 88.5q0 109 139 192q-95 39 -148 122.5t-53 191.5q0 163 103.5 261.5t279.5 98.5q107 0 166 -21h348v-69l-225 -14q90 -112 90 -246q0 -157 -104.5 -254.5t-280.5 -97.5q-74 0 -104 6q-59 -31 -90 -73t-31 -89 q0 -52 39.5 -76t132.5 -24h190q177 0 271 -71.5t94 -211.5q0 -172 -139.5 -265.5t-397.5 -93.5q-205 0 -317.5 79t-112.5 220zM150 -184q0 -224 333 -224q428 0 428 273q0 98 -67 142t-217 44h-178q-299 0 -299 -235zM233 748q0 -126 76.5 -195.5t204.5 -69.5 q136 0 208.5 69t72.5 200q0 139 -74.5 208.5t-208.5 69.5q-130 0 -204.5 -74.5t-74.5 -207.5z" />
+<glyph unicode="h" horiz-adv-x="1208" d="M182 0v1556h99v-495l-5 -139h7q61 98 154 142t231 44q370 0 370 -397v-711h-98v705q0 164 -69 238.5t-214 74.5q-195 0 -285.5 -98.5t-90.5 -319.5v-600h-99z" />
+<glyph unicode="i" horiz-adv-x="463" d="M168 1389q0 96 63 96q31 0 48.5 -25t17.5 -71q0 -45 -17.5 -71t-48.5 -26q-63 0 -63 97zM182 0v1087h99v-1087h-99z" />
+<glyph unicode="j" horiz-adv-x="463" d="M-98 -381q69 -20 129 -20q151 0 151 176v1312h99v-1298q0 -135 -63.5 -208t-180.5 -73q-80 0 -135 25v86zM168 1389q0 96 63 96q31 0 48.5 -25t17.5 -71q0 -45 -17.5 -71t-48.5 -26q-63 0 -63 97z" />
+<glyph unicode="k" horiz-adv-x="991" d="M182 0v1556h99v-780l-7 -299h5l555 610h120l-428 -464l465 -623h-119l-413 549l-178 -162v-387h-99z" />
+<glyph unicode="l" horiz-adv-x="463" d="M182 0v1556h99v-1556h-99z" />
+<glyph unicode="m" horiz-adv-x="1808" d="M182 0v1087h82l21 -149h6q45 81 128 125.5t183 44.5q257 0 330 -193h4q53 93 142.5 143t203.5 50q178 0 267 -95t89 -302v-711h-98v713q0 159 -62 232t-190 73q-167 0 -247 -92t-80 -289v-637h-101v743q0 275 -252 275q-171 0 -249 -99.5t-78 -318.5v-600h-99z" />
+<glyph unicode="n" horiz-adv-x="1208" d="M182 0v1087h84l19 -149h6q106 170 377 170q370 0 370 -397v-711h-98v705q0 164 -69 238.5t-214 74.5q-195 0 -285.5 -98.5t-90.5 -319.5v-600h-99z" />
+<glyph unicode="o" horiz-adv-x="1200" d="M119 545q0 266 129 414.5t354 148.5q224 0 351.5 -150.5t127.5 -412.5q0 -266 -129 -415.5t-356 -149.5q-143 0 -252 69t-167 198t-58 298zM223 545q0 -224 98.5 -349.5t278.5 -125.5t278.5 125.5t98.5 349.5q0 225 -99.5 349t-279.5 124t-277.5 -123.5t-97.5 -349.5z " />
+<glyph unicode="p" horiz-adv-x="1219" d="M182 -492v1579h84l19 -155h6q112 176 358 176q220 0 335.5 -144.5t115.5 -420.5q0 -268 -121.5 -415.5t-331.5 -147.5q-251 0 -366 188h-7l3 -84q4 -74 4 -162v-414h-99zM281 541q0 -255 85.5 -364t278.5 -109q167 0 258.5 124t91.5 347q0 479 -346 479 q-190 0 -279 -104.5t-89 -340.5v-32z" />
+<glyph unicode="q" horiz-adv-x="1219" d="M119 532q0 275 118 425.5t338 150.5q236 0 353 -174h6l18 153h84v-1579h-98v414q0 122 6 248h-6q-118 -190 -369 -190q-214 0 -332 142t-118 410zM223 530q0 -229 89.5 -345.5t258.5 -116.5q198 0 282.5 109t84.5 366v12q0 245 -85 354t-271 109q-176 0 -267.5 -124 t-91.5 -364z" />
+<glyph unicode="r" horiz-adv-x="797" d="M182 0v1087h84l10 -196h7q67 120 143 168.5t184 48.5q69 0 148 -14l-19 -95q-68 17 -141 17q-139 0 -228 -118t-89 -298v-600h-99z" />
+<glyph unicode="s" horiz-adv-x="954" d="M84 47v107q164 -82 346 -82q161 0 244.5 53.5t83.5 142.5q0 82 -66.5 138t-218.5 110q-163 59 -229 101.5t-99.5 96t-33.5 130.5q0 122 102.5 193t286.5 71q176 0 334 -66l-37 -90q-160 66 -297 66q-133 0 -211 -44t-78 -122q0 -85 60.5 -136t236.5 -114 q147 -53 214 -95.5t100.5 -96.5t33.5 -127q0 -146 -111 -224.5t-315 -78.5q-218 0 -346 67z" />
+<glyph unicode="t" horiz-adv-x="686" d="M25 1001v58l161 45l50 246h51v-263h319v-86h-319v-688q0 -125 44 -185t138 -60t164 16v-80q-72 -24 -166 -24q-144 0 -212.5 77t-68.5 242v702h-161z" />
+<glyph unicode="u" horiz-adv-x="1208" d="M170 377v710h98v-704q0 -164 69 -238.5t214 -74.5q194 0 285.5 98t91.5 319v600h98v-1087h-84l-18 150h-6q-106 -170 -377 -170q-371 0 -371 397z" />
+<glyph unicode="v" horiz-adv-x="940" d="M0 1087h102l281 -739q56 -142 84 -248h6q41 136 84 250l281 737h102l-420 -1087h-100z" />
+<glyph unicode="w" horiz-adv-x="1481" d="M31 1087h106l174 -630q61 -234 80 -344h6q59 234 86 311l224 663h90l213 -661q72 -235 88 -311h6q8 65 80 348l166 624h100l-295 -1087h-104l-238 727q-23 74 -59 217h-6l-21 -74l-45 -145l-242 -725h-98z" />
+<glyph unicode="x" horiz-adv-x="1020" d="M55 0l394 559l-379 528h114l324 -458l321 458h109l-373 -528l400 -559h-115l-342 485l-344 -485h-109z" />
+<glyph unicode="y" horiz-adv-x="940" d="M0 1087h102l230 -610q105 -281 133 -379h6q42 129 137 385l230 604h102l-487 -1263q-59 -154 -99 -208t-93.5 -81t-129.5 -27q-57 0 -127 21v86q58 -16 125 -16q51 0 90 24t70.5 74.5t73 160t53.5 142.5z" />
+<glyph unicode="z" horiz-adv-x="944" d="M82 0v63l645 936h-598v88h727v-63l-649 -936h651v-88h-776z" />
+<glyph unicode="{" horiz-adv-x="723" d="M61 528v80q122 2 176 51t54 148v350q0 299 360 305v-90q-138 -5 -200 -58t-62 -157v-305q0 -130 -44 -194t-142 -85v-8q97 -20 141.5 -83.5t44.5 -186.5v-322q0 -102 59.5 -152.5t202.5 -53.5v-91q-195 0 -277.5 75t-82.5 231v337q0 205 -230 209z" />
+<glyph unicode="|" horiz-adv-x="1108" d="M508 -506v2067h92v-2067h-92z" />
+<glyph unicode="}" horiz-adv-x="723" d="M72 -233q141 2 201.5 52.5t60.5 153.5v322q0 123 44.5 186.5t141.5 83.5v8q-97 20 -141.5 84t-44.5 195v305q0 103 -61.5 156.5t-200.5 58.5v90q174 0 267 -77.5t93 -227.5v-350q0 -100 54.5 -148.5t175.5 -50.5v-80q-230 -4 -230 -209v-337q0 -155 -82.5 -230.5 t-277.5 -75.5v91z" />
+<glyph unicode="~" d="M111 625v94q108 110 233 110q61 0 115 -13.5t155 -57.5q126 -58 220 -58q56 0 109.5 30.5t115.5 94.5v-96q-48 -49 -104.5 -81t-129.5 -32q-116 0 -270 72q-124 57 -221 57q-49 0 -108 -30.5t-115 -89.5z" />
+<glyph unicode="&#xa2;" d="M211 745q0 232 102.5 381.5t288.5 182.5v174h82v-166h14q131 0 275 -55l-31 -84q-134 51 -237 51q-187 0 -288.5 -122.5t-101.5 -358.5q0 -225 100.5 -349.5t280.5 -124.5q131 0 267 58v-92q-110 -56 -267 -56h-12v-204h-82v210q-186 30 -288.5 175t-102.5 380z" />
+<glyph unicode="&#xa3;" d="M78 0v84q110 21 171.5 110t61.5 224v258h-211v82h211v297q0 204 98 315t281 111q175 0 330 -68l-35 -86q-157 66 -295 66q-141 0 -209.5 -81t-68.5 -253v-301h411v-82h-411v-256q0 -116 -35 -196t-113 -128h809v-96h-995z" />
+<glyph unicode="&#xa5;" d="M43 1462h117l426 -796l428 796h110l-432 -788h283v-82h-338v-205h338v-82h-338v-305h-105v305h-337v82h337v205h-337v82h278z" />
+<glyph unicode="&#xa9;" horiz-adv-x="1704" d="M100 731q0 200 100 375t275 276t377 101q200 0 375 -100t276 -275t101 -377q0 -197 -97 -370t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM193 731q0 -178 88.5 -329.5t240.5 -240.5t330 -89t329.5 88.5t240.5 240.5t89 330q0 174 -85.5 325 t-239 243t-334.5 92q-176 0 -328.5 -88.5t-241.5 -242.5t-89 -329zM489 725q0 208 111 332.5t297 124.5q119 0 227 -52l-37 -83q-98 45 -190 45q-142 0 -222.5 -94.5t-80.5 -264.5q0 -186 74.5 -275t220.5 -89q84 0 198 43v-88q-102 -45 -208 -45q-187 0 -288.5 115 t-101.5 331z" />
+<glyph unicode="&#xad;" horiz-adv-x="659" d="M92 512v82h475v-82h-475z" />
+<glyph unicode="&#xae;" horiz-adv-x="1704" d="M100 731q0 200 100 375t275 276t377 101q200 0 375 -100t276 -275t101 -377q0 -197 -97 -370t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM193 731q0 -178 88.5 -329.5t240.5 -240.5t330 -89t329.5 88.5t240.5 240.5t89 330q0 174 -85.5 325 t-239 243t-334.5 92q-176 0 -328.5 -88.5t-241.5 -242.5t-89 -329zM608 291v880h211q143 0 222 -62t79 -191q0 -79 -38.5 -139.5t-110.5 -94.5l237 -393h-121l-210 360h-168v-360h-101zM709 731h112q91 0 143 46.5t52 135.5q0 172 -197 172h-110v-354z" />
+<glyph unicode="&#xb4;" horiz-adv-x="1182" d="M393 1241v16q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70z" />
+<glyph unicode="&#x2000;" horiz-adv-x="784" />
+<glyph unicode="&#x2001;" horiz-adv-x="1569" />
+<glyph unicode="&#x2002;" horiz-adv-x="784" />
+<glyph unicode="&#x2003;" horiz-adv-x="1569" />
+<glyph unicode="&#x2004;" horiz-adv-x="523" />
+<glyph unicode="&#x2005;" horiz-adv-x="392" />
+<glyph unicode="&#x2006;" horiz-adv-x="261" />
+<glyph unicode="&#x2007;" horiz-adv-x="261" />
+<glyph unicode="&#x2008;" horiz-adv-x="196" />
+<glyph unicode="&#x2009;" horiz-adv-x="313" />
+<glyph unicode="&#x200a;" horiz-adv-x="87" />
+<glyph unicode="&#x2010;" horiz-adv-x="659" d="M92 512v82h475v-82h-475z" />
+<glyph unicode="&#x2011;" horiz-adv-x="659" d="M92 512v82h475v-82h-475z" />
+<glyph unicode="&#x2012;" horiz-adv-x="659" d="M92 512v82h475v-82h-475z" />
+<glyph unicode="&#x2013;" horiz-adv-x="1024" d="M82 512v82h860v-82h-860z" />
+<glyph unicode="&#x2014;" horiz-adv-x="2048" d="M82 512v82h1884v-82h-1884z" />
+<glyph unicode="&#x2018;" horiz-adv-x="297" d="M29 981q32 112 81.5 251t92.5 230h65q-30 -101 -64.5 -257t-45.5 -244h-117z" />
+<glyph unicode="&#x2019;" horiz-adv-x="297" d="M29 961q29 96 61 241.5t49 259.5h117l12 -20q-75 -265 -174 -481h-65z" />
+<glyph unicode="&#x201c;" horiz-adv-x="614" d="M29 981q32 112 81.5 251t92.5 230h65q-30 -101 -64.5 -257t-45.5 -244h-117zM346 981q34 120 83 255t91 226h66q-30 -98 -63 -248.5t-48 -252.5h-117z" />
+<glyph unicode="&#x201d;" horiz-adv-x="614" d="M29 961q29 96 61 241.5t49 259.5h117l12 -20q-75 -265 -174 -481h-65zM346 961q30 98 63 248.5t48 252.5h116l13 -20q-36 -128 -85 -261t-89 -220h-66z" />
+<glyph unicode="&#x2022;" horiz-adv-x="770" d="M231 748q0 89 40.5 134.5t113.5 45.5t113.5 -47t40.5 -133q0 -85 -41 -133t-113 -48t-113 47t-41 134z" />
+<glyph unicode="&#x2026;" horiz-adv-x="1466" d="M162 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98zM651 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98zM1141 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98z" />
+<glyph unicode="&#x202f;" horiz-adv-x="313" />
+<glyph unicode="&#x205f;" horiz-adv-x="392" />
+<glyph unicode="&#x20ac;" d="M74 528v82h172q-4 38 -4 113l4 102h-172v82h184q39 272 183 425t362 153q88 0 161 -17t148 -57l-39 -86q-132 72 -270 72q-174 0 -288 -125.5t-155 -364.5h502v-82h-510l-4 -104v-24q0 -65 4 -87h449v-82h-443q30 -217 147.5 -338.5t301.5 -121.5q148 0 287 65v-94 q-81 -34 -150.5 -46.5t-140.5 -12.5q-228 0 -367.5 140t-181.5 408h-180z" />
+<glyph unicode="&#x2122;" horiz-adv-x="1485" d="M10 1384v78h522v-78h-219v-643h-86v643h-217zM608 741v721h125l221 -606l224 606h125v-721h-86v398l4 207h-7l-227 -605h-74l-221 609h-6l4 -201v-408h-82z" />
+<glyph unicode="&#xe000;" horiz-adv-x="1085" d="M0 1085h1085v-1085h-1085v1085z" />
+</font>
+</defs></svg>
BIN  app/assets/fonts/OpenSans-Light.ttf
Binary file not shown
BIN  app/assets/fonts/OpenSans-Light.woff
Binary file not shown
BIN  app/assets/images/1x/favicon-feed.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  app/assets/images/1x/logo-stripe.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  app/assets/images/2x/favicon-feed.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  app/assets/images/2x/logo-stripe.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  app/assets/images/apple-touch-icon-precomposed.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  app/assets/images/apple-touch-startup-image-iphone-large.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  app/assets/images/apple-touch-startup-image-iphone.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  app/assets/images/border.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 app/assets/images/favicon-all.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="16px" height="16px" viewBox="0 8 16 16" enable-background="new 0 8 16 16" xml:space="preserve">
+<g>
+ <rect y="9" fill="#999999" width="2" height="2"/>
+ <rect x="4" y="9" fill="#999999" width="12" height="2"/>
+ <rect y="13" fill="#999999" width="2" height="2"/>
+ <rect x="4" y="13" fill="#999999" width="12" height="2"/>
+ <rect y="17" fill="#999999" width="2" height="2"/>
+ <rect x="4" y="17" fill="#999999" width="12" height="2"/>
+ <rect y="21" fill="#999999" width="2" height="2"/>
+ <rect x="4" y="21" fill="#999999" width="12" height="2"/>
+</g>
+</svg>
10 app/assets/images/favicon-star.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="17px" height="16px" viewBox="0 0 17 16" enable-background="new 0 0 17 16" xml:space="preserve">
+<g>
+ <path fill="#999999" d="M16.91,6.113l-4.287,4.061L13.689,16L8.5,13.169L3.311,16l1.066-5.826L0.09,6.113l5.867-0.78L8.5,0
+ l2.543,5.333L16.91,6.113z"/>
+</g>
+</svg>
10 app/assets/images/favicon-tag.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
+<g>
+ <path fill="#999999" d="M7.596,0L0.81,0.809L0,7.596L8.405,16L16,8.405L7.596,0z M5.15,5.15c-0.45,0.45-1.178,0.448-1.627,0
+ c-0.449-0.45-0.599-1.029,0-1.627c0.45-0.45,1.177-0.448,1.627,0C5.599,3.972,5.718,4.582,5.15,5.15z"/>
+</g>
+</svg>
7 app/assets/images/favicon-unread.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
+<circle fill="#999999" cx="8" cy="8" r="6"/>
+</svg>
BIN  app/assets/images/icon-credit-card.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 app/assets/images/logo.svg
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="120px" height="101px" viewBox="0 0 120 101" enable-background="new 0 0 120 101" xml:space="preserve">
+<path fill="#CCCCCC" d="M116.04,77.741c-22.547-0.083-96.91-0.083-112.416,0c-4.86,0.027-4.803-22.493,0-23.252
+ c15.623-2.472,60.339,0,60.339,0s16.103,16.289,20.835,16.31c4.796,0.021,16.062-16.31,16.062-16.31s12.829-2.347,15.181,0
+ C119.917,58.359,120.908,77.761,116.04,77.741z"/>
+<path fill="#CCCCCC" d="M110.558,99.329c-19.071,2.529-83.599,1.905-102.981,0C3.25,98.903,6.039,85.729,6.039,85.729h108.062
+ C114.102,85.729,115.994,98.607,110.558,99.329z"/>
+<path fill="#CCCCCC" d="M57.773,0.399C30.301-3.32,7.577,19.617,7.577,41.792l102.648,1.049
+ C110.225,20.665,85.028,4.09,57.773,0.399z M24.945,29.273c-2.143,0-3.877-1.737-3.877-3.876c0-2.143,1.734-3.877,3.877-3.877
+ c2.142,0,3.876,1.734,3.876,3.877C28.821,27.536,27.087,29.273,24.945,29.273z M32.697,35.102c-1.071,0-1.938-0.869-1.938-1.938
+ c0-1.071,0.867-1.938,1.938-1.938s1.938,0.867,1.938,1.938C34.635,34.233,33.769,35.102,32.697,35.102z M34.635,19.583
+ c-2.142,0-3.876-1.738-3.876-3.877c0-2.143,1.734-3.876,3.876-3.876c2.143,0,3.877,1.733,3.877,3.876
+ C38.512,17.845,36.778,19.583,34.635,19.583z M42.388,31.212c-2.142,0-3.876-1.737-3.876-3.876c0-2.143,1.734-3.876,3.876-3.876
+ c2.143,0,3.876,1.734,3.876,3.876C46.265,29.475,44.531,31.212,42.388,31.212z M50.141,15.706c-2.143,0-3.876-1.737-3.876-3.876
+ c0-2.143,1.734-3.877,3.876-3.877s3.876,1.734,3.876,3.877C54.018,13.969,52.284,15.706,50.141,15.706z M55.956,27.349
+ c-1.072,0-1.938-0.869-1.938-1.938c0-1.071,0.867-1.938,1.938-1.938c1.071,0,1.938,0.867,1.938,1.938
+ C57.894,26.48,57.027,27.349,55.956,27.349z"/>
+</svg>
453 app/assets/javascripts/_site.js.coffee
@@ -0,0 +1,453 @@
+window.feedbin ?= {}
+
+window.addEventListener "load", (->
+ new FastClick(document.body)
+), false
+
+$.extend feedbin,
+
+ subscribeStatus: (text) ->
+ button = $('[data-behavior~=subscription_form] input[type=submit]')
+ originalText = button.val()
+ button.val(text)
+ setTimeout ( ->
+ button.val(originalText)
+ ), 3000
+
+ updateEntries: (html) ->
+ $('.entries ul').html(html)
+
+ appendEntries: (html) ->
+ $('.entries ul').append(html)
+
+ updatePager: (html) ->
+ $('[data-behavior~=pagination]').html(html)
+
+ updateEntryContent: (html) ->
+ $('[data-behavior~=entry_content_target]').html(html)
+
+ modalBox: (html) ->
+ $('.modal-target').html(html)
+ $('.modal').modal
+ backdrop: false
+ feedbin.modalShowing = true
+
+ updateFeeds: (feeds) ->
+ $('[data-behavior~=feeds_target]').html(feeds)
+
+ clearEntries: ->
+ $('[data-behavior~=entries_target]').html('')
+
+ clearEntry: ->
+ $('[data-behavior~=toolbar_target_entry], [data-behavior~=entry_content_target]' ).html('')
+
+ syntaxHighlight: ->
+ $('[data-behavior~=entry_content_target] pre').each (i, e) ->
+ hljs.highlightBlock(e)
+
+ surface: (panel, clear) ->
+ if feedbin.data.mobile
+ if clear
+ if 'entries' == panel
+ feedbin.clearEntries()
+ else if 'entry-wrap' == panel
+ feedbin.clearEntry()
+ $(".panel-nav").removeClass('active')
+ $(".button-panel-#{panel}").addClass('active')
+ $(".mobile .panel").css
+ display: 'none'
+ $(".mobile .#{panel}").css
+ display: 'block'
+
+ hideTagsForm: ->
+ $('.tags-form-wrap').animate
+ height: 0
+
+ blogContent: (content) ->
+ content = $.parseJSON(content)
+ $('.blog-post').text(content.title);
+ $('.blog-post').attr('href', content.url);
+
+ precacheImages: (data) ->
+ if feedbin.data.precacheImages == true && feedbin.data.mobile == false
+ entries = []
+ $.each data, (index, entry) ->
+ if entry.read == false
+ entries.push(entry.content)
+ $(entries.join())
+
+ localizeTime: (container) ->
+ $('time', container).each ->
+ date = $(@).attr('datetime')
+ if date
+ date = new Date(date)
+ $(@).text(date.format("%B %d, %Y - %l:%M %p"))
+
+ applyUserTitles: ->
+ $('[data-behavior~=user_title]').each ->
+ index = $(@).data('feed-id')
+ newTitle = feedbin.data.userTitles[index]
+ $(@).text(newTitle)
+
+ queryString: (name) ->
+ name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]")
+ regexS = "[\\?&]" + name + "=([^&#]*)"
+ regex = new RegExp(regexS)
+ results = regex.exec(window.location.search)
+ if results?
+ decodeURIComponent results[1].replace(/\+/g, " ")
+ else
+ null
+
+ openLinkInBackground: (href) ->
+ anchor = document.createElement("a")
+ anchor.href = href
+ event = document.createEvent("MouseEvents")
+ event.initMouseEvent "click", true, true, window, 0, 0, 0, 0, 0, true, false, false, true, 0, null
+ anchor.dispatchEvent event
+
+ updateTitle: (title) ->
+ $('title').text(title)
+
+ autocomplete: ->
+ $("#feed_tag_list").autocomplete
+ serviceUrl: feedbin.data.tagsPath
+ appendTo: "[data-behavior=tag_completions]"
+ delimiter: /(,)\s*/
+
+ autoHeight: ->
+ $('.collection-edit-wrapper').height($(window).height() - 210)
+
+ entries: {}
+
+ preloadEntries: (entry_ids) ->
+ $.getJSON feedbin.data.preloadEntriesPath, {ids: entry_ids.join(',')}, (data) ->
+ $.extend feedbin.entries, data
+ feedbin.precacheImages(data)
+
+ updateReadCount: (id, entry, target) ->
+ if entry.read == false
+ $.post $(target).data('mark-as-read-path')
+ feedbin.CountInstance.updateCount(entry.feed_id, entry.tags, 'decrement')
+ $("[data-entry-id=#{id}]").addClass('read')
+ feedbin.entries[id].read = true
+
+ if feedbin.data.showUnreadCount
+ count = $('[data-behavior~=all_unread]').find('.count').text() * 1
+ if count == 0
+ title = "Feedbin"
+ else if count >= 1000
+ title = "Feedbin (1,000+)"
+ else
+ title = "Feedbin (#{count})"
+
+ $('title').text(title)
+
+ readability: (target) ->
+ feedId = $('[data-feed-id]', target).data('feed-id')
+ if feedbin.data.readabilitySettings[feedId] == true && feedbin.data.stickyReadability
+ $('.button-toggle-content').find('span').addClass('active')
+ $('[data-behavior~=entry_content_wrap]').html('Loading Readability&hellip;')
+ $('[data-behavior~=toggle_content_view]').submit()
+
+ formatEntryContent: (resetScroll = true) ->
+ if resetScroll
+ $('.entry-content').prop('scrollTop', 0)
+ $('[data-behavior~=entry_content_target]').fitVids({ customSelector: "iframe[src*='youtu.be'], iframe[src*='view.vzaar.com']"});
+ feedbin.syntaxHighlight()
+
+ refresh: ->
+ if feedbin.data != null
+ $.get(feedbin.data.autoUpdatePath)
+
+ hideQueue: []
+
+ feedCandidates: []
+
+ modalShowing: false
+
+ images: []
+
+ feedXhr: null
+
+$.extend feedbin,
+ init:
+ setData: ->
+ feedbin.data = $('#feedbin-data').data()
+
+ selectable: ->
+ $(document).on 'click', '[data-behavior~=selectable]', ->
+ $(@).parents('ul').find('.selected').removeClass('selected')
+ $(@).parent('li').addClass('selected')
+
+ panelNav: ->
+ $(document).on 'click', '[data-behavior~=panel_nav]', ->
+ panel = $(@).data('panel')
+ feedbin.surface(panel, false)
+
+ choicesSubmit: ->
+ $(document).on 'ajax:beforeSend', '[data-choice-form]', ->
+ $('.modal').modal('hide')
+
+ subscribeSubmit: ->
+ form = $('[data-behavior~=subscription_form]')
+ textField = form.find('[name="subscription[feeds][feed_url]"]')
+ submit = form.find('[name="commit"]')
+
+ $(document).on 'ajax:beforeSend', '[data-behavior~=subscription_form]', ->
+ textField.attr('disabled', 'disabled')
+ submit.attr('disabled', 'disabled')
+ textField.blur()
+
+ $(document).on 'ajax:complete', '[data-behavior~=subscription_form]', ->
+ textField.val('').removeAttr('disabled')
+ submit.removeAttr('disabled')
+
+ resetEntryPostion: ->
+ $(document).on 'ajax:complete', '[data-behavior~=reset_entry_position]', ->
+ $('.entries').prop('scrollTop', 0)
+
+ openEntry: ->
+ $(document).on 'ajax:complete', '[data-behavior~=reset_entry_content_position]', ->
+ feedbin.formatEntryContent()
+
+ entryLinks: ->
+ $(document).on 'click', '[data-behavior~=entry_content_wrap] a', ->
+ $(this).attr('target', '_blank')
+
+ markAsRead: ->
+ $(document).on 'click', '[data-behavior~=mark_all_as_read]', (event)->
+ unless $(event.target).hasClass('hide')
+ $(@).find('input[type="submit"]').click()
+
+ $(document).on 'ajax:beforeSend', '[data-behavior~=mark_all_as_read]', ->
+ $('.entries li').addClass('read')
+
+ $(document).on 'ajax:complete', '[data-behavior~=mark_all_as_read]', ->
+ feedbin.surface('feeds', false)
+
+ clearEntry: ->
+ $(document).on 'ajax:beforeSend', '[data-behavior~=show_entries]', (event) ->
+ unless $(event.target).is('.toggle-drawer')
+ feedbin.clearEntry()
+
+ cancelFeedRequest: ->
+ $(document).on 'ajax:beforeSend', '[data-behavior~=show_entries]', (event, xhr) ->
+ if feedbin.feedXhr
+ feedbin.feedXhr.abort()
+ feedbin.feedXhr = xhr
+
+ tooltips: ->
+ $(document).on 'mouseenter mouseleave', '[data-behavior~=tooltip]', (event) ->
+ tooltip = $(this).tooltip
+ delay: 0
+ animation: false
+ if 'mouseenter' == event.type
+ tooltip.tooltip('show')
+ else
+ tooltip.tooltip('hide')
+
+ loadEntries: ->
+ $('[data-behavior~=feeds_target] > li:first-child [data-behavior~=open_item]').click() unless $('body').hasClass('mobile')
+
+ tagsForm: ->
+ $(document).on 'click', (event) ->
+ isForm = ($(event.target).parents('.tags-form-wrap').length > 0)
+ unless isForm
+ feedbin.hideTagsForm()
+
+ $(document).on 'click', '[data-behavior~=show_tags_form]', (event) ->
+ isForm = ($(event.target).parents('.tags-form-wrap').length > 0)
+ unless isForm || $(@).attr('disabled') == 'disabled'
+ wrap = $('.tags-form-wrap')
+ if '0px' == wrap.css('height')
+ wrap.animate
+ height: '138px'
+ field = $('#feed_tag_list')
+ field.focus()
+ value = field.val()
+ field.val(value)
+ feedbin.autocomplete()
+ else
+ feedbin.hideTagsForm()
+ event.stopPropagation()
+
+ resize: () ->
+ if !(navigator.userAgent.toLowerCase().indexOf('firefox') > -1)
+ $('.feeds-column, .entries-column').resizable
+ handles: "e"
+ minWidth: 200
+ stop: (event, ui) ->
+ form = $('[data-behavior~=resizable_form]')
+ $('[name=column]', form).val($(ui.element).data('resizable-name'))
+ $('[name=width]', form).val(ui.size.width)
+ form.submit()
+
+ processHideQueue: ->
+ $(document).on 'click', '[data-behavior~=show_entries]', ->
+ $.each feedbin.hideQueue, (i, feed_id) ->
+ if feed_id != undefined && feed_id != "collection_all" && feed_id != "collection_unread"
+ item = $("[data-feed-id=#{feed_id}]", '.feeds')
+ $(item).hide 'fast', () ->
+ $(item).remove()
+ feedbin.hideQueue.remove(i)
+ feedbin.hideQueue = []
+
+ feedCandidates: ->
+ $(document).on 'click', '[data-behavior~=show_entries]', ->
+ clickedItem = $(@).parents 'li'
+ feedbin.feedCandidates = []
+ feedbin.feedCandidates.push clickedItem.next().data('feed-id') if clickedItem.next().length
+ feedbin.feedCandidates.push clickedItem.prev().data('feed-id') if clickedItem.prev().length
+
+ unauthorizedResponse: ->
+ $(document).on 'ajax:complete', (event, response, status) ->
+ if response.status == 401
+ document.location = feedbin.data.loginUrl
+
+ screenshotTabs: ->
+ $('[data-behavior~=screenshot_nav] li').first().addClass('active')
+ $(document).on 'click', '[data-behavior~=screenshot_nav] a', (event) ->
+ $('[data-behavior~=screenshot_nav] li').removeClass('active')
+ $(@).parent('li').addClass('active')
+ src = $(@).find('img').attr('src')
+ $("[data-behavior~=screenshots] img").addClass('hide')
+ $("[data-behavior~=screenshots] img[src='#{src}']").removeClass('hide')
+ event.preventDefault()
+
+ feedSelected: ->
+ $(document).on 'click', '[data-behavior~=show_entries]', ->
+ feedbin.surface('entries', true)
+
+ $(document).on 'click', '[data-behavior~=show_entry_content]', ->
+ feedbin.surface('entry-wrap', true)
+
+ addFields: ->
+ $(document).on 'click', '[data-behavior~=add_fields]', (event) ->
+ time = new Date().getTime() + '_insert'
+ regexp = new RegExp($(@).data('id'), 'g')
+ $(@).parents('[data-behavior~=add_fields_target]').find('tr:last').before($(@).data('fields').replace(regexp, time))
+ event.preventDefault()
+
+ removeFields: ->
+ $(document).on 'click', '[data-behavior~=remove_fields]', (event) ->
+ $(@).prev('input[type=hidden]').val(1)
+ $(@).closest('tr').addClass('hide')
+ event.preventDefault()
+
+ dropdown: ->
+ $(document).on 'click', (event) ->
+ dropdown = $('.dropdown-wrap')
+ if dropdown.hasClass('open')
+ dropdown.removeClass('open')
+
+ $(document).on 'click', '[data-behavior~=toggle_share_menu]', (event) ->
+ parent = $(@).closest('.dropdown-wrap')
+ if parent.hasClass('open')
+ parent.removeClass('open')
+ else
+ parent.addClass('open')
+ return false
+ event.preventDefault()
+
+ drawer: ->
+ $(document).on 'click', '[data-behavior~=toggle_drawer]', (event) =>
+ button = $(event.currentTarget)
+ drawer = button.parents('li').find('.drawer')
+
+ if drawer.data('hidden') == true
+ height = $('ul', drawer).height() + 2
+ hidden = false
+ text = 'hide'
+ else
+ height = 0
+ hidden = true
+ text = 'show'
+
+ drawer.animate {
+ height: height
+ }, 300, ->
+ if height > 0
+ drawer.css
+ height: 'auto'
+
+ drawer.data('hidden', hidden)
+ button.text(text)
+
+ button.parent('form').submit()
+ return false
+
+ subscribe: ->
+ subscription = feedbin.queryString('subscribe')
+ if subscription?
+ field = $('#subscription_feeds_feed_url').val(subscription)
+ field.closest('form').submit()
+
+ checkBoxToggle: ->
+ $(document).on 'click', '[data-behavior~=check_all]', (event) =>
+ $('[type="checkbox"]').prop('checked', true)
+ event.preventDefault()
+
+ $(document).on 'click', '[data-behavior~=check_none]', (event) =>
+ $('[type="checkbox"]').prop('checked', false)
+ event.preventDefault()
+
+ validateFile: ->
+ form = $('.new_import_uploader')
+ input = form.find("input:file")
+ unless input.val()
+ form.find('[type=submit]').attr('disabled','disabled')
+
+ input.on 'change', ()->
+ if $(this).val()
+ form.find('[type=submit]').removeAttr('disabled')
+
+ autoHeight: ->
+ if $('.collection-edit-wrapper').length
+ feedbin.autoHeight()
+ $(window).on 'resize', () ->
+ feedbin.autoHeight()
+
+ usePreloadContent: ->
+ $(document).on 'ajax:beforeSend', '[data-behavior~=open_item]', (event, xhr) ->
+ id = $(@).parents('li').data('entry-id')
+ entry = feedbin.entries[id]
+ if entry && false == feedbin.data.mobile
+ xhr.abort()
+ feedbin.updateEntryContent(entry.content)
+ feedbin.formatEntryContent()
+ feedbin.localizeTime($('[data-behavior~=entry_content_target]'))
+ feedbin.applyUserTitles()
+ feedbin.updateReadCount(id, entry, @)
+ feedbin.readability(@)
+
+ updateReadability: ->
+ $(document).on 'ajax:beforeSend', '[data-behavior~=toggle_content_view]', (event, xhr) ->
+ feedId = $(event.currentTarget).data('feed-id')
+ if feedbin.data.stickyReadability && feedbin.data.readabilitySettings[feedId] != "undefined"
+ unless $("#content_view").val() == "true" && feedbin.data.readabilitySettings[feedId] == true
+ feedbin.data.readabilitySettings[feedId] = !feedbin.data.readabilitySettings[feedId]
+ true
+
+ removePreload: ->
+ # Just delete the preloaded entry when something gets starred
+ $(document).on 'ajax:beforeSend', '[data-behavior~=toggle_starred]', (event, xhr) ->
+ entryId = $(event.currentTarget).data('entry-id')
+ delete feedbin.entries[entryId]
+ true
+
+ updateRead: ->
+ $(document).on 'ajax:beforeSend', '[data-behavior~=toggle_read]', (event, xhr) ->
+ entryId = $(event.currentTarget).data('entry-id')
+ if feedbin.entries[entryId]
+ feedbin.entries[entryId].read = !feedbin.entries[entryId].read
+ true
+
+ autoUpdate: ->
+ setInterval ( ->
+ feedbin.refresh()
+ ), 300000
+
+jQuery ->
+ $.each feedbin.init, (i, item) ->
+ item()
16 app/assets/javascripts/application.js
@@ -0,0 +1,16 @@
+// This is a manifest file that'll be compiled into application.js, which will include all the files
+// listed below.
+//
+// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
+// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
+//
+// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
+// the compiled file.
+//
+// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
+// GO AFTER THE REQUIRES BELOW.
+//
+//= require jquery
+//= require jquery_ujs
+//= require_tree ../../../vendor/assets/javascripts/.
+//= require_tree .
55 app/assets/javascripts/entries.js.coffee
@@ -0,0 +1,55 @@
+window.feedbin ?= {}
+
+jQuery ->
+ new feedbin.EntriesPager()
+ feedbin.CountInstance = new feedbin.Count()
+
+class feedbin.EntriesPager
+ constructor: ->
+ @container = $('.entries')
+ @container.on('scroll', @check)
+
+ check: =>
+ url = $('.pagination .next_page').attr('href')
+ if @nearBottom() && url
+ @container.unbind('scroll', @check)
+ $.getScript url, =>
+ @container.on('scroll', @check)
+
+ nearBottom: =>
+ height = @container.prop('scrollHeight') - @container.prop('offsetHeight')
+ height - @container.scrollTop() < 1500
+
+class feedbin.Count
+ updateCount: (feed, tags, action = 'decrement') ->
+ @action = action
+ selectors = ['[data-behavior~=all_unread]', "[data-feed-id=#{feed}]"]
+ $.each tags, (index, tag_id) =>
+ selectors.push "[data-tag-id=#{tag_id}]"
+ targets = $(selectors.join(', '))
+ @performUpdate target for target in targets
+
+ updateStarredCount: (action) ->
+ @action = action
+ @performUpdate '[data-behavior~=starred]'
+
+ performUpdate: (target) ->
+ countWrap = $(target).find('.count').first()
+ previousCount = countWrap.text() * 1
+ if @action == 'increment'
+ newCount = previousCount + 1
+ else
+ newCount = previousCount - 1
+ if newCount >= 0
+ countWrap.text(newCount)
+ if newCount == 0
+ if feedbin.data.viewMode == 'view_unread'
+ feedbin.hideQueue.push $(target).data('feed-id')
+ countWrap.addClass('hide')
+ else
+ countWrap.removeClass('hide')
+ # Remove from hidequeue if number goes back up
+ $.each feedbin.hideQueue, (index, feed_id) ->
+ if $(target).data('feed-id') == feed_id
+ feedbin.hideQueue.remove(index)
+