sum 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Capfile +3 -0
- data/MIT-LICENSE +18 -0
- data/README.markdown +69 -0
- data/Rakefile +56 -0
- data/config.ru +3 -0
- data/config/database.example.yml +10 -0
- data/config/deploy.example.rb +36 -0
- data/config/externals.yml +18 -0
- data/config/mail.example.yml +32 -0
- data/config/schedule.rb +20 -0
- data/db/migrate/001_users.rb +22 -0
- data/db/migrate/002_user_emails.rb +15 -0
- data/features/front_page.feature +15 -0
- data/features/read_email.feature +445 -0
- data/features/receive_email.feature +59 -0
- data/features/step_definitions/email.rb +52 -0
- data/features/step_definitions/given.rb +60 -0
- data/features/step_definitions/then.rb +36 -0
- data/features/step_definitions/when.rb +46 -0
- data/features/support/env.rb +38 -0
- data/features/support/helpers.rb +50 -0
- data/features/support/rspec.rb +11 -0
- data/features/support/webrat.rb +3 -0
- data/features/update_user.feature +83 -0
- data/gemspec.rb +45 -0
- data/lib/sum.rb +30 -0
- data/lib/sum/boot.rb +29 -0
- data/lib/sum/controller/cron.rb +12 -0
- data/lib/sum/controller/front.rb +6 -0
- data/lib/sum/controller/new.rb +15 -0
- data/lib/sum/helper/application.rb +8 -0
- data/lib/sum/helper/cron.rb +12 -0
- data/lib/sum/helper/new.rb +27 -0
- data/lib/sum/model/incoming_mail.rb +89 -0
- data/lib/sum/model/user.rb +298 -0
- data/lib/sum/model/user_email.rb +31 -0
- data/lib/sum/view/email.haml +70 -0
- data/lib/sum/view/field.haml +23 -0
- data/lib/sum/view/form.haml +13 -0
- data/lib/sum/view/front.haml +29 -0
- data/lib/sum/view/layout.haml +26 -0
- data/lib/sum/view/new.haml +5 -0
- data/lib/sum/view/success.haml +14 -0
- data/lib/sum/view/tos.haml +3 -0
- data/public/image/1.png +0 -0
- data/public/image/2.png +0 -0
- data/public/image/3.png +0 -0
- data/public/image/bg.png +0 -0
- data/public/image/bot.png +0 -0
- data/public/image/facebox/b.png +0 -0
- data/public/image/facebox/bl.png +0 -0
- data/public/image/facebox/br.png +0 -0
- data/public/image/facebox/closelabel.gif +0 -0
- data/public/image/facebox/loading.gif +0 -0
- data/public/image/facebox/tl.png +0 -0
- data/public/image/facebox/tr.png +0 -0
- data/public/image/favicon.png +0 -0
- data/public/image/field_off.png +0 -0
- data/public/image/field_on.png +0 -0
- data/public/image/ribbon.png +0 -0
- data/public/image/screenshot_receive.png +0 -0
- data/public/image/screenshot_send.png +0 -0
- data/public/image/submit.png +0 -0
- data/public/image/top.png +0 -0
- data/public/javascript/facebox.js +319 -0
- data/public/javascript/jquery-1.3.2.js +19 -0
- data/public/javascript/sum.js +13 -0
- data/public/style/facebox.css +95 -0
- data/public/style/ie.css +35 -0
- data/public/style/print.css +30 -0
- data/public/style/screen.css +256 -0
- data/public/style/sum.css +119 -0
- data/public/style/sum.less +159 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +59 -0
- data/spec/sum/model/incoming_mail_spec.rb +106 -0
- data/spec/sum/model/user_spec.rb +172 -0
- data/sum.gemspec +69 -0
- data/vendor/webrat/History.txt +358 -0
- data/vendor/webrat/MIT-LICENSE.txt +19 -0
- data/vendor/webrat/README.rdoc +85 -0
- data/vendor/webrat/Rakefile +200 -0
- data/vendor/webrat/install.rb +1 -0
- data/vendor/webrat/lib/webrat.rb +31 -0
- data/vendor/webrat/lib/webrat/core.rb +14 -0
- data/vendor/webrat/lib/webrat/core/configuration.rb +102 -0
- data/vendor/webrat/lib/webrat/core/elements/area.rb +31 -0
- data/vendor/webrat/lib/webrat/core/elements/element.rb +33 -0
- data/vendor/webrat/lib/webrat/core/elements/field.rb +409 -0
- data/vendor/webrat/lib/webrat/core/elements/form.rb +103 -0
- data/vendor/webrat/lib/webrat/core/elements/label.rb +31 -0
- data/vendor/webrat/lib/webrat/core/elements/link.rb +93 -0
- data/vendor/webrat/lib/webrat/core/elements/select_option.rb +35 -0
- data/vendor/webrat/lib/webrat/core/locators.rb +20 -0
- data/vendor/webrat/lib/webrat/core/locators/area_locator.rb +38 -0
- data/vendor/webrat/lib/webrat/core/locators/button_locator.rb +54 -0
- data/vendor/webrat/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
- data/vendor/webrat/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
- data/vendor/webrat/lib/webrat/core/locators/field_locator.rb +25 -0
- data/vendor/webrat/lib/webrat/core/locators/field_named_locator.rb +41 -0
- data/vendor/webrat/lib/webrat/core/locators/form_locator.rb +19 -0
- data/vendor/webrat/lib/webrat/core/locators/label_locator.rb +34 -0
- data/vendor/webrat/lib/webrat/core/locators/link_locator.rb +74 -0
- data/vendor/webrat/lib/webrat/core/locators/locator.rb +20 -0
- data/vendor/webrat/lib/webrat/core/locators/select_option_locator.rb +59 -0
- data/vendor/webrat/lib/webrat/core/logging.rb +24 -0
- data/vendor/webrat/lib/webrat/core/matchers.rb +4 -0
- data/vendor/webrat/lib/webrat/core/matchers/have_content.rb +73 -0
- data/vendor/webrat/lib/webrat/core/matchers/have_selector.rb +74 -0
- data/vendor/webrat/lib/webrat/core/matchers/have_tag.rb +21 -0
- data/vendor/webrat/lib/webrat/core/matchers/have_xpath.rb +147 -0
- data/vendor/webrat/lib/webrat/core/methods.rb +63 -0
- data/vendor/webrat/lib/webrat/core/mime.rb +29 -0
- data/vendor/webrat/lib/webrat/core/save_and_open_page.rb +48 -0
- data/vendor/webrat/lib/webrat/core/scope.rb +350 -0
- data/vendor/webrat/lib/webrat/core/session.rb +299 -0
- data/vendor/webrat/lib/webrat/core/xml.rb +115 -0
- data/vendor/webrat/lib/webrat/core/xml/hpricot.rb +19 -0
- data/vendor/webrat/lib/webrat/core/xml/nokogiri.rb +76 -0
- data/vendor/webrat/lib/webrat/core/xml/rexml.rb +24 -0
- data/vendor/webrat/lib/webrat/core_extensions/blank.rb +58 -0
- data/vendor/webrat/lib/webrat/core_extensions/deprecate.rb +8 -0
- data/vendor/webrat/lib/webrat/core_extensions/detect_mapped.rb +12 -0
- data/vendor/webrat/lib/webrat/core_extensions/meta_class.rb +6 -0
- data/vendor/webrat/lib/webrat/core_extensions/nil_to_param.rb +5 -0
- data/vendor/webrat/lib/webrat/core_extensions/tcp_socket.rb +27 -0
- data/vendor/webrat/lib/webrat/mechanize.rb +74 -0
- data/vendor/webrat/lib/webrat/merb.rb +9 -0
- data/vendor/webrat/lib/webrat/merb_multipart_support.rb +27 -0
- data/vendor/webrat/lib/webrat/merb_session.rb +82 -0
- data/vendor/webrat/lib/webrat/rack.rb +25 -0
- data/vendor/webrat/lib/webrat/rails.rb +106 -0
- data/vendor/webrat/lib/webrat/rspec-rails.rb +10 -0
- data/vendor/webrat/lib/webrat/selenium.rb +81 -0
- data/vendor/webrat/lib/webrat/selenium/application_server_factory.rb +40 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers.rb +5 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers/base.rb +46 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers/external.rb +26 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers/merb.rb +50 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers/rails.rb +44 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/label.js +16 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webratlink.js +12 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
- data/vendor/webrat/lib/webrat/selenium/matchers.rb +4 -0
- data/vendor/webrat/lib/webrat/selenium/matchers/have_content.rb +66 -0
- data/vendor/webrat/lib/webrat/selenium/matchers/have_selector.rb +49 -0
- data/vendor/webrat/lib/webrat/selenium/matchers/have_tag.rb +72 -0
- data/vendor/webrat/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
- data/vendor/webrat/lib/webrat/selenium/selenium_extensions.js +6 -0
- data/vendor/webrat/lib/webrat/selenium/selenium_rc_server.rb +84 -0
- data/vendor/webrat/lib/webrat/selenium/selenium_session.rb +248 -0
- data/vendor/webrat/lib/webrat/selenium/silence_stream.rb +18 -0
- data/vendor/webrat/lib/webrat/sinatra.rb +11 -0
- data/vendor/webrat/spec/fakes/test_session.rb +34 -0
- data/vendor/webrat/spec/integration/merb/Rakefile +35 -0
- data/vendor/webrat/spec/integration/merb/app/controllers/application.rb +2 -0
- data/vendor/webrat/spec/integration/merb/app/controllers/exceptions.rb +13 -0
- data/vendor/webrat/spec/integration/merb/app/controllers/testing.rb +27 -0
- data/vendor/webrat/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
- data/vendor/webrat/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
- data/vendor/webrat/spec/integration/merb/app/views/layout/application.html.erb +12 -0
- data/vendor/webrat/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
- data/vendor/webrat/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
- data/vendor/webrat/spec/integration/merb/config/environments/development.rb +15 -0
- data/vendor/webrat/spec/integration/merb/config/environments/rake.rb +11 -0
- data/vendor/webrat/spec/integration/merb/config/environments/test.rb +14 -0
- data/vendor/webrat/spec/integration/merb/config/init.rb +25 -0
- data/vendor/webrat/spec/integration/merb/config/rack.rb +11 -0
- data/vendor/webrat/spec/integration/merb/config/router.rb +34 -0
- data/vendor/webrat/spec/integration/merb/spec/spec.opts +1 -0
- data/vendor/webrat/spec/integration/merb/spec/spec_helper.rb +24 -0
- data/vendor/webrat/spec/integration/merb/spec/webrat_spec.rb +39 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
- data/vendor/webrat/spec/integration/rack/Rakefile +5 -0
- data/vendor/webrat/spec/integration/rack/app.rb +73 -0
- data/vendor/webrat/spec/integration/rack/test/helper.rb +20 -0
- data/vendor/webrat/spec/integration/rack/test/webrat_rack_test.rb +62 -0
- data/vendor/webrat/spec/integration/rails/Rakefile +30 -0
- data/vendor/webrat/spec/integration/rails/app/controllers/application.rb +15 -0
- data/vendor/webrat/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
- data/vendor/webrat/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
- data/vendor/webrat/spec/integration/rails/app/controllers/links_controller.rb +7 -0
- data/vendor/webrat/spec/integration/rails/app/controllers/webrat_controller.rb +43 -0
- data/vendor/webrat/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
- data/vendor/webrat/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
- data/vendor/webrat/spec/integration/rails/app/helpers/links_helper.rb +2 -0
- data/vendor/webrat/spec/integration/rails/app/views/buttons/show.html.erb +11 -0
- data/vendor/webrat/spec/integration/rails/app/views/fields/show.html.erb +9 -0
- data/vendor/webrat/spec/integration/rails/app/views/links/show.html.erb +5 -0
- data/vendor/webrat/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
- data/vendor/webrat/spec/integration/rails/app/views/webrat/buttons.html.erb +11 -0
- data/vendor/webrat/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
- data/vendor/webrat/spec/integration/rails/config/boot.rb +109 -0
- data/vendor/webrat/spec/integration/rails/config/environment.rb +12 -0
- data/vendor/webrat/spec/integration/rails/config/environments/development.rb +17 -0
- data/vendor/webrat/spec/integration/rails/config/environments/selenium.rb +22 -0
- data/vendor/webrat/spec/integration/rails/config/environments/test.rb +22 -0
- data/vendor/webrat/spec/integration/rails/config/initializers/inflections.rb +10 -0
- data/vendor/webrat/spec/integration/rails/config/initializers/mime_types.rb +5 -0
- data/vendor/webrat/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
- data/vendor/webrat/spec/integration/rails/config/locales/en.yml +5 -0
- data/vendor/webrat/spec/integration/rails/config/routes.rb +18 -0
- data/vendor/webrat/spec/integration/rails/public/404.html +30 -0
- data/vendor/webrat/spec/integration/rails/public/422.html +30 -0
- data/vendor/webrat/spec/integration/rails/public/500.html +33 -0
- data/vendor/webrat/spec/integration/rails/script/about +4 -0
- data/vendor/webrat/spec/integration/rails/script/console +3 -0
- data/vendor/webrat/spec/integration/rails/script/dbconsole +3 -0
- data/vendor/webrat/spec/integration/rails/script/destroy +3 -0
- data/vendor/webrat/spec/integration/rails/script/generate +3 -0
- data/vendor/webrat/spec/integration/rails/script/performance/benchmarker +3 -0
- data/vendor/webrat/spec/integration/rails/script/performance/profiler +3 -0
- data/vendor/webrat/spec/integration/rails/script/performance/request +3 -0
- data/vendor/webrat/spec/integration/rails/script/plugin +3 -0
- data/vendor/webrat/spec/integration/rails/script/process/inspector +3 -0
- data/vendor/webrat/spec/integration/rails/script/process/reaper +3 -0
- data/vendor/webrat/spec/integration/rails/script/process/spawner +3 -0
- data/vendor/webrat/spec/integration/rails/script/runner +3 -0
- data/vendor/webrat/spec/integration/rails/script/server +3 -0
- data/vendor/webrat/spec/integration/rails/test/integration/button_click_test.rb +80 -0
- data/vendor/webrat/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
- data/vendor/webrat/spec/integration/rails/test/integration/link_click_test.rb +27 -0
- data/vendor/webrat/spec/integration/rails/test/integration/webrat_test.rb +97 -0
- data/vendor/webrat/spec/integration/rails/test/test_helper.rb +25 -0
- data/vendor/webrat/spec/integration/sinatra/Rakefile +5 -0
- data/vendor/webrat/spec/integration/sinatra/classic_app.rb +64 -0
- data/vendor/webrat/spec/integration/sinatra/modular_app.rb +16 -0
- data/vendor/webrat/spec/integration/sinatra/test/classic_app_test.rb +37 -0
- data/vendor/webrat/spec/integration/sinatra/test/modular_app_test.rb +18 -0
- data/vendor/webrat/spec/integration/sinatra/test/test_helper.rb +16 -0
- data/vendor/webrat/spec/private/core/configuration_spec.rb +116 -0
- data/vendor/webrat/spec/private/core/field_spec.rb +85 -0
- data/vendor/webrat/spec/private/core/link_spec.rb +24 -0
- data/vendor/webrat/spec/private/core/logging_spec.rb +10 -0
- data/vendor/webrat/spec/private/core/session_spec.rb +195 -0
- data/vendor/webrat/spec/private/mechanize/mechanize_session_spec.rb +81 -0
- data/vendor/webrat/spec/private/merb/attaches_file_spec.rb +93 -0
- data/vendor/webrat/spec/private/merb/merb_session_spec.rb +61 -0
- data/vendor/webrat/spec/private/nokogiri_spec.rb +77 -0
- data/vendor/webrat/spec/private/rails/attaches_file_spec.rb +81 -0
- data/vendor/webrat/spec/private/rails/rails_session_spec.rb +112 -0
- data/vendor/webrat/spec/private/selenium/application_servers/rails_spec.rb +26 -0
- data/vendor/webrat/spec/public/basic_auth_spec.rb +24 -0
- data/vendor/webrat/spec/public/check_spec.rb +191 -0
- data/vendor/webrat/spec/public/choose_spec.rb +118 -0
- data/vendor/webrat/spec/public/click_area_spec.rb +106 -0
- data/vendor/webrat/spec/public/click_button_spec.rb +496 -0
- data/vendor/webrat/spec/public/click_link_spec.rb +511 -0
- data/vendor/webrat/spec/public/fill_in_spec.rb +209 -0
- data/vendor/webrat/spec/public/locators/field_by_xpath_spec.rb +19 -0
- data/vendor/webrat/spec/public/locators/field_labeled_spec.rb +172 -0
- data/vendor/webrat/spec/public/locators/field_with_id_spec.rb +16 -0
- data/vendor/webrat/spec/public/matchers/contain_spec.rb +114 -0
- data/vendor/webrat/spec/public/matchers/have_selector_spec.rb +142 -0
- data/vendor/webrat/spec/public/matchers/have_tag_spec.rb +39 -0
- data/vendor/webrat/spec/public/matchers/have_xpath_spec.rb +136 -0
- data/vendor/webrat/spec/public/reload_spec.rb +10 -0
- data/vendor/webrat/spec/public/save_and_open_spec.rb +70 -0
- data/vendor/webrat/spec/public/select_date_spec.rb +112 -0
- data/vendor/webrat/spec/public/select_datetime_spec.rb +137 -0
- data/vendor/webrat/spec/public/select_spec.rb +249 -0
- data/vendor/webrat/spec/public/select_time_spec.rb +100 -0
- data/vendor/webrat/spec/public/selenium/application_server_factory_spec.rb +49 -0
- data/vendor/webrat/spec/public/selenium/application_servers/external_spec.rb +12 -0
- data/vendor/webrat/spec/public/selenium/selenium_session_spec.rb +37 -0
- data/vendor/webrat/spec/public/set_hidden_field_spec.rb +5 -0
- data/vendor/webrat/spec/public/submit_form_spec.rb +5 -0
- data/vendor/webrat/spec/public/visit_spec.rb +58 -0
- data/vendor/webrat/spec/public/within_spec.rb +177 -0
- data/vendor/webrat/spec/rcov.opts +1 -0
- data/vendor/webrat/spec/spec.opts +2 -0
- data/vendor/webrat/spec/spec_helper.rb +50 -0
- metadata +474 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
class UserEmail < ActiveRecord::Base
|
|
2
|
+
|
|
3
|
+
belongs_to :user
|
|
4
|
+
validates_uniqueness_of :email
|
|
5
|
+
|
|
6
|
+
def activate!
|
|
7
|
+
self.update_attribute(:active, true)
|
|
8
|
+
self.user.flash = "Successfully re-activated #{self.email}."
|
|
9
|
+
self.user.send_now = true
|
|
10
|
+
self.user.save
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def deactivate!
|
|
14
|
+
self.update_attribute(:active, false)
|
|
15
|
+
begin
|
|
16
|
+
$mail.deliver(
|
|
17
|
+
:from => 'sum@sumapp.com',
|
|
18
|
+
:to => self.email,
|
|
19
|
+
:subject => 'Sum deactivated',
|
|
20
|
+
:body => 'Reply with the word "start" to begin receiving emails again.'
|
|
21
|
+
)
|
|
22
|
+
self.sent!
|
|
23
|
+
rescue Exception
|
|
24
|
+
self.increment!(:failures)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def sent!
|
|
29
|
+
self.update_attribute :failures, 0
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
- unless u.flash.blank?
|
|
2
|
+
= u.flash
|
|
3
|
+
~ "\n------"
|
|
4
|
+
~ "\n"
|
|
5
|
+
|
|
6
|
+
- if u.surplus > 0
|
|
7
|
+
- if u.spending_goal_today == 0
|
|
8
|
+
= "You have spent your budget for today."
|
|
9
|
+
- elsif u.spending_goal_today > 0
|
|
10
|
+
= "You can spend #{money(u.spending_goal_today)} today."
|
|
11
|
+
- elsif u.spending_goal_today < 0
|
|
12
|
+
= "You have spent your budget for today, plus an additional #{money(u.spending_goal_today * -1)}."
|
|
13
|
+
|
|
14
|
+
- if u.days_left > 1
|
|
15
|
+
~ "\n"
|
|
16
|
+
= "If you #{u.spent_today <= 0 ? "don't spend anything" : "only spend #{money(u.spent_today)}"} today, you will have"
|
|
17
|
+
= " #{money(u.surplus / u.days_left)} to spend each day."
|
|
18
|
+
= " #{money((u.surplus / u.days_left) * 7)} to spend each week."
|
|
19
|
+
= " #{money(u.surplus)} to spend over the next #{days(u.days_left)}."
|
|
20
|
+
|
|
21
|
+
- elsif u.total_left > 0
|
|
22
|
+
= "You should not spend any money #{"for the next #{days(u.days_left)} " if u.days_left > 0}if you want to continue to save #{money(u.total_left)}."
|
|
23
|
+
- if u.days_left > 1
|
|
24
|
+
~ "\n"
|
|
25
|
+
= "If you wish to spend into your savings this month, you can afford to spend"
|
|
26
|
+
= " #{money(u.total_left / u.days_left)} each day."
|
|
27
|
+
= " #{money((u.total_left / u.days_left) * 7)} each week."
|
|
28
|
+
= " #{money(u.total_left)} over the next #{days(u.days_left)}."
|
|
29
|
+
|
|
30
|
+
- elsif u.total_left == 0
|
|
31
|
+
= "You should not spend any money #{"for the next #{days(u.days_left)} " if u.days_left > 0}if you want to avoid going into debt."
|
|
32
|
+
- else
|
|
33
|
+
= "You need to earn #{money(u.total_left / u.days_left_including_today * -1)} today."
|
|
34
|
+
- if u.days_left > 0
|
|
35
|
+
~ "\n"
|
|
36
|
+
= "Continue to do so for the next #{days(u.days_left)} to avoid going into debt."
|
|
37
|
+
~ "\n"
|
|
38
|
+
If you do not, Sum will temporarily decrease your spending money for next month to account for the debt.
|
|
39
|
+
|
|
40
|
+
- if u.surplus_for_period > 0
|
|
41
|
+
~ "\n"
|
|
42
|
+
= "You have saved #{money(u.surplus_for_period)} more than expected for a #{u.days_passed_including_today} day period."
|
|
43
|
+
|
|
44
|
+
- elsif u.surplus_for_period < 0
|
|
45
|
+
~ "\n"
|
|
46
|
+
= "You have spent #{money(u.surplus_for_period * -1)} more than expected for a #{u.days_passed_including_today} day period."
|
|
47
|
+
|
|
48
|
+
- else
|
|
49
|
+
~ "\n"
|
|
50
|
+
= "You have spent exactly as expected for a #{u.days_passed_including_today} day period."
|
|
51
|
+
|
|
52
|
+
~ "\n------"
|
|
53
|
+
~ "\n"
|
|
54
|
+
|
|
55
|
+
= "Fiscal month: #{u.beginning_of_month.strftime("%m/%d/%y")} to #{u.reset_at.strftime("%m/%d/%y")} (#{u.days_in_month} days)"
|
|
56
|
+
|
|
57
|
+
- if u.recent_transactions
|
|
58
|
+
~ "\n"
|
|
59
|
+
= "Last #{u.recent_transactions.length == 1 ? "transaction" : "#{u.recent_transactions.length} transactions"}:"
|
|
60
|
+
- u.recent_transactions.compact.each do |amount|
|
|
61
|
+
= " #{money(amount * -1)}"
|
|
62
|
+
|
|
63
|
+
~ "\n------"
|
|
64
|
+
~ "\n"
|
|
65
|
+
|
|
66
|
+
Reply to this email with the word "stop" to stop receiving emails, or "start" to begin receiving them again.
|
|
67
|
+
~ "\n"
|
|
68
|
+
Every time you spend money or use the ATM, don't forget to email the dollar amount to sum@sumapp.com.
|
|
69
|
+
~ "\n"
|
|
70
|
+
Use the form at http://sumapp.com to update the values used to calculate this budget.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
- if valid?(attribute)
|
|
2
|
+
%input{ :name => "user[#{attribute}]", :type => "hidden", :value => @user.send(attribute) }
|
|
3
|
+
|
|
4
|
+
- else
|
|
5
|
+
.field
|
|
6
|
+
%label{ :for => "user_#{attribute}" }
|
|
7
|
+
- unless checkbox
|
|
8
|
+
= question
|
|
9
|
+
- unless checkbox
|
|
10
|
+
- if errors_on(attribute)
|
|
11
|
+
.validation
|
|
12
|
+
= errors_on(attribute)
|
|
13
|
+
- if checkbox
|
|
14
|
+
.checkbox
|
|
15
|
+
%input{ :id => "user_#{attribute}", :name => "user[#{attribute}]", :value => "1", :type => "checkbox" }
|
|
16
|
+
%label{ :for => "user_#{attribute}" }
|
|
17
|
+
= question
|
|
18
|
+
- if errors_on(attribute)
|
|
19
|
+
.validation
|
|
20
|
+
= errors_on(attribute)
|
|
21
|
+
- else
|
|
22
|
+
.text
|
|
23
|
+
%input{ :id => "user_#{attribute}", :name => "user[#{attribute}]", :type => "text" }
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
%form{ :action => '/new', :method => 'post' }
|
|
2
|
+
|
|
3
|
+
%img{ :src => '/image/field_on.png', :style => 'display:none' }
|
|
4
|
+
%input{ :id => "timezone_offset", :name => "user[timezone_offset]", :type => "hidden" }
|
|
5
|
+
|
|
6
|
+
= field :text, :savings, "How much do you want to save each month?"
|
|
7
|
+
= field :text, :income, "How much money do you receive each month?"
|
|
8
|
+
= field :text, :bills, "How much do you spend on bills each month?"
|
|
9
|
+
= field :text, :email, "What is your email address?"
|
|
10
|
+
= field :checkbox, :tos, partial(:tos)
|
|
11
|
+
|
|
12
|
+
.submit
|
|
13
|
+
%input{ :src => '/image/submit.png', :type => 'image' }
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
.number
|
|
2
|
+
.span-1
|
|
3
|
+
%img{ :src => 'image/1.png', :height => 25, :width => 25 }
|
|
4
|
+
.span-9
|
|
5
|
+
Fill out the form below.
|
|
6
|
+
|
|
7
|
+
.number
|
|
8
|
+
.span-1
|
|
9
|
+
%img{ :src => 'image/2.png', :height => 25, :width => 25 }
|
|
10
|
+
.span-9
|
|
11
|
+
When you use your credit card or the ATM, send an email to
|
|
12
|
+
%a{ :href => "sum@sumapp.com" } sum@sumapp.com
|
|
13
|
+
with the
|
|
14
|
+
= '<a href="image/screenshot_send.png" rel="facebox">dollar amount</a>.'
|
|
15
|
+
|
|
16
|
+
.number
|
|
17
|
+
.span-1
|
|
18
|
+
%img{ :src => 'image/3.png', :height => 25, :width => 25 }
|
|
19
|
+
.span-9
|
|
20
|
+
Every midnight, you will receive an email with
|
|
21
|
+
%a{ :href => 'image/screenshot_receive.png', :rel => 'facebox' } budgeting metrics
|
|
22
|
+
for the day.
|
|
23
|
+
|
|
24
|
+
.spacer
|
|
25
|
+
= partial :form
|
|
26
|
+
|
|
27
|
+
%h2
|
|
28
|
+
%a{ :href => 'http://faq.sumapp.com', :target => '_new' }
|
|
29
|
+
Frequently Asked Questions
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
!!! 1.1
|
|
2
|
+
%html
|
|
3
|
+
%head
|
|
4
|
+
%title
|
|
5
|
+
Sum -
|
|
6
|
+
= @title || "Simple budgeting"
|
|
7
|
+
%link{ :href => "/image/favicon.png", :rel => "shortcut icon", :type => "image/png" }
|
|
8
|
+
%link{ :href => "/style/facebox.css", :media => "screen, projection", :rel => "stylesheet", :type => "text/css" }
|
|
9
|
+
%link{ :href => "/style/print.css", :media => "print", :rel => "stylesheet", :type => "text/css" }
|
|
10
|
+
%link{ :href => "/style/screen.css", :media => "screen, projection", :rel => "stylesheet", :type => "text/css" }
|
|
11
|
+
%link{ :href => "/style/sum.css?1", :media => "screen, projection", :rel => "stylesheet", :type => "text/css" }
|
|
12
|
+
/[if lt IE 8]
|
|
13
|
+
%link{ :href => "/style/ie.css", :media => "screen, projection", :rel => "stylesheet", :type => "text/css" }
|
|
14
|
+
%body
|
|
15
|
+
%a{ :href => 'http://github.com/winton/sum' }
|
|
16
|
+
#ribbon
|
|
17
|
+
#top
|
|
18
|
+
%a{ :href => "/" }
|
|
19
|
+
%img{ :border => 0, :src => '/image/top.png' }
|
|
20
|
+
#body
|
|
21
|
+
%div= yield
|
|
22
|
+
#bot
|
|
23
|
+
%img{ :src => '/image/bot.png' }
|
|
24
|
+
%script{ :src => "/javascript/jquery-1.3.2.js", :type => "text/javascript" }
|
|
25
|
+
%script{ :src => "/javascript/facebox.js", :type => "text/javascript" }
|
|
26
|
+
%script{ :src => "/javascript/sum.js", :type => "text/javascript" }
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
%h1 Success!
|
|
2
|
+
%p
|
|
3
|
+
Soon you will receive an email with today's budget.
|
|
4
|
+
%p
|
|
5
|
+
When you spend money, don't forget to email
|
|
6
|
+
%a{ :href => "sum@sumapp.com" } sum@sumapp.com
|
|
7
|
+
with the amount you spent.
|
|
8
|
+
%p.last
|
|
9
|
+
If your budget changes, use the same form at
|
|
10
|
+
%a{ :href => "/" } sumapp.com
|
|
11
|
+
to update the numbers.
|
|
12
|
+
%h2
|
|
13
|
+
%a{ :href => 'http://faq.sumapp.com' }
|
|
14
|
+
Frequently Asked Questions
|
data/public/image/1.png
ADDED
|
Binary file
|
data/public/image/2.png
ADDED
|
Binary file
|
data/public/image/3.png
ADDED
|
Binary file
|
data/public/image/bg.png
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Facebox (for jQuery)
|
|
3
|
+
* version: 1.2 (05/05/2008)
|
|
4
|
+
* @requires jQuery v1.2 or later
|
|
5
|
+
*
|
|
6
|
+
* Examples at http://famspam.com/facebox/
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the MIT:
|
|
9
|
+
* http://www.opensource.org/licenses/mit-license.php
|
|
10
|
+
*
|
|
11
|
+
* Copyright 2007, 2008 Chris Wanstrath [ chris@ozmm.org ]
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
*
|
|
15
|
+
* jQuery(document).ready(function() {
|
|
16
|
+
* jQuery('a[rel*=facebox]').facebox()
|
|
17
|
+
* })
|
|
18
|
+
*
|
|
19
|
+
* <a href="#terms" rel="facebox">Terms</a>
|
|
20
|
+
* Loads the #terms div in the box
|
|
21
|
+
*
|
|
22
|
+
* <a href="terms.html" rel="facebox">Terms</a>
|
|
23
|
+
* Loads the terms.html page in the box
|
|
24
|
+
*
|
|
25
|
+
* <a href="terms.png" rel="facebox">Terms</a>
|
|
26
|
+
* Loads the terms.png image in the box
|
|
27
|
+
*
|
|
28
|
+
*
|
|
29
|
+
* You can also use it programmatically:
|
|
30
|
+
*
|
|
31
|
+
* jQuery.facebox('some html')
|
|
32
|
+
*
|
|
33
|
+
* The above will open a facebox with "some html" as the content.
|
|
34
|
+
*
|
|
35
|
+
* jQuery.facebox(function($) {
|
|
36
|
+
* $.get('blah.html', function(data) { $.facebox(data) })
|
|
37
|
+
* })
|
|
38
|
+
*
|
|
39
|
+
* The above will show a loading screen before the passed function is called,
|
|
40
|
+
* allowing for a better ajaxy experience.
|
|
41
|
+
*
|
|
42
|
+
* The facebox function can also display an ajax page or image:
|
|
43
|
+
*
|
|
44
|
+
* jQuery.facebox({ ajax: 'remote.html' })
|
|
45
|
+
* jQuery.facebox({ image: 'dude.jpg' })
|
|
46
|
+
*
|
|
47
|
+
* Want to close the facebox? Trigger the 'close.facebox' document event:
|
|
48
|
+
*
|
|
49
|
+
* jQuery(document).trigger('close.facebox')
|
|
50
|
+
*
|
|
51
|
+
* Facebox also has a bunch of other hooks:
|
|
52
|
+
*
|
|
53
|
+
* loading.facebox
|
|
54
|
+
* beforeReveal.facebox
|
|
55
|
+
* reveal.facebox (aliased as 'afterReveal.facebox')
|
|
56
|
+
* init.facebox
|
|
57
|
+
*
|
|
58
|
+
* Simply bind a function to any of these hooks:
|
|
59
|
+
*
|
|
60
|
+
* $(document).bind('reveal.facebox', function() { ...stuff to do after the facebox and contents are revealed... })
|
|
61
|
+
*
|
|
62
|
+
*/
|
|
63
|
+
(function($) {
|
|
64
|
+
$.facebox = function(data, klass) {
|
|
65
|
+
$.facebox.loading()
|
|
66
|
+
|
|
67
|
+
if (data.ajax) fillFaceboxFromAjax(data.ajax)
|
|
68
|
+
else if (data.image) fillFaceboxFromImage(data.image)
|
|
69
|
+
else if (data.div) fillFaceboxFromHref(data.div)
|
|
70
|
+
else if ($.isFunction(data)) data.call($)
|
|
71
|
+
else $.facebox.reveal(data, klass)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
* Public, $.facebox methods
|
|
76
|
+
*/
|
|
77
|
+
|
|
78
|
+
$.extend($.facebox, {
|
|
79
|
+
settings: {
|
|
80
|
+
opacity : 0,
|
|
81
|
+
overlay : true,
|
|
82
|
+
loadingImage : '/facebox/loading.gif',
|
|
83
|
+
closeImage : '/facebox/closelabel.gif',
|
|
84
|
+
imageTypes : [ 'png', 'jpg', 'jpeg', 'gif' ],
|
|
85
|
+
faceboxHtml : '\
|
|
86
|
+
<div id="facebox" style="display:none;"> \
|
|
87
|
+
<div class="popup"> \
|
|
88
|
+
<table> \
|
|
89
|
+
<tbody> \
|
|
90
|
+
<tr> \
|
|
91
|
+
<td class="tl"/><td class="b"/><td class="tr"/> \
|
|
92
|
+
</tr> \
|
|
93
|
+
<tr> \
|
|
94
|
+
<td class="b"/> \
|
|
95
|
+
<td class="body"> \
|
|
96
|
+
<div class="content"> \
|
|
97
|
+
</div> \
|
|
98
|
+
<div class="footer"> \
|
|
99
|
+
<a href="#" class="close"> \
|
|
100
|
+
<img src="/facebox/closelabel.gif" title="close" class="close_image" /> \
|
|
101
|
+
</a> \
|
|
102
|
+
</div> \
|
|
103
|
+
</td> \
|
|
104
|
+
<td class="b"/> \
|
|
105
|
+
</tr> \
|
|
106
|
+
<tr> \
|
|
107
|
+
<td class="bl"/><td class="b"/><td class="br"/> \
|
|
108
|
+
</tr> \
|
|
109
|
+
</tbody> \
|
|
110
|
+
</table> \
|
|
111
|
+
</div> \
|
|
112
|
+
</div>'
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
loading: function() {
|
|
116
|
+
init()
|
|
117
|
+
if ($('#facebox .loading').length == 1) return true
|
|
118
|
+
showOverlay()
|
|
119
|
+
|
|
120
|
+
$('#facebox .content').empty()
|
|
121
|
+
$('#facebox .body').children().hide().end().
|
|
122
|
+
append('<div class="loading"><img src="'+$.facebox.settings.loadingImage+'"/></div>')
|
|
123
|
+
|
|
124
|
+
$('#facebox').css({
|
|
125
|
+
top: getPageScroll()[1] + (getPageHeight() / 10),
|
|
126
|
+
left: 385.5
|
|
127
|
+
}).show()
|
|
128
|
+
|
|
129
|
+
$(document).bind('keydown.facebox', function(e) {
|
|
130
|
+
if (e.keyCode == 27) $.facebox.close()
|
|
131
|
+
return true
|
|
132
|
+
})
|
|
133
|
+
$(document).trigger('loading.facebox')
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
reveal: function(data, klass) {
|
|
137
|
+
$(document).trigger('beforeReveal.facebox')
|
|
138
|
+
if (klass) $('#facebox .content').addClass(klass)
|
|
139
|
+
$('#facebox .content').append(data)
|
|
140
|
+
$('#facebox .loading').remove()
|
|
141
|
+
$('#facebox .body').children().fadeIn('normal')
|
|
142
|
+
$('#facebox').css('left', $(window).width() / 2 - ($('#facebox table').width() / 2))
|
|
143
|
+
$(document).trigger('reveal.facebox').trigger('afterReveal.facebox')
|
|
144
|
+
},
|
|
145
|
+
|
|
146
|
+
close: function() {
|
|
147
|
+
$(document).trigger('close.facebox')
|
|
148
|
+
return false
|
|
149
|
+
}
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
/*
|
|
153
|
+
* Public, $.fn methods
|
|
154
|
+
*/
|
|
155
|
+
|
|
156
|
+
$.fn.facebox = function(settings) {
|
|
157
|
+
init(settings)
|
|
158
|
+
|
|
159
|
+
function clickHandler() {
|
|
160
|
+
$.facebox.loading(true)
|
|
161
|
+
|
|
162
|
+
// support for rel="facebox.inline_popup" syntax, to add a class
|
|
163
|
+
// also supports deprecated "facebox[.inline_popup]" syntax
|
|
164
|
+
var klass = this.rel.match(/facebox\[?\.(\w+)\]?/)
|
|
165
|
+
if (klass) klass = klass[1]
|
|
166
|
+
|
|
167
|
+
fillFaceboxFromHref(this.href, klass)
|
|
168
|
+
return false
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
return this.click(clickHandler)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/*
|
|
175
|
+
* Private methods
|
|
176
|
+
*/
|
|
177
|
+
|
|
178
|
+
// called one time to setup facebox on this page
|
|
179
|
+
function init(settings) {
|
|
180
|
+
if ($.facebox.settings.inited) return true
|
|
181
|
+
else $.facebox.settings.inited = true
|
|
182
|
+
|
|
183
|
+
$(document).trigger('init.facebox')
|
|
184
|
+
makeCompatible()
|
|
185
|
+
|
|
186
|
+
var imageTypes = $.facebox.settings.imageTypes.join('|')
|
|
187
|
+
$.facebox.settings.imageTypesRegexp = new RegExp('\.' + imageTypes + '$', 'i')
|
|
188
|
+
|
|
189
|
+
if (settings) $.extend($.facebox.settings, settings)
|
|
190
|
+
$('body').append($.facebox.settings.faceboxHtml)
|
|
191
|
+
|
|
192
|
+
var preload = [ new Image(), new Image() ]
|
|
193
|
+
preload[0].src = $.facebox.settings.closeImage
|
|
194
|
+
preload[1].src = $.facebox.settings.loadingImage
|
|
195
|
+
|
|
196
|
+
$('#facebox').find('.b:first, .bl, .br, .tl, .tr').each(function() {
|
|
197
|
+
preload.push(new Image())
|
|
198
|
+
preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1')
|
|
199
|
+
})
|
|
200
|
+
|
|
201
|
+
$('#facebox .close').click($.facebox.close)
|
|
202
|
+
$('#facebox .close_image').attr('src', $.facebox.settings.closeImage)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// getPageScroll() by quirksmode.com
|
|
206
|
+
function getPageScroll() {
|
|
207
|
+
var xScroll, yScroll;
|
|
208
|
+
if (self.pageYOffset) {
|
|
209
|
+
yScroll = self.pageYOffset;
|
|
210
|
+
xScroll = self.pageXOffset;
|
|
211
|
+
} else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
|
|
212
|
+
yScroll = document.documentElement.scrollTop;
|
|
213
|
+
xScroll = document.documentElement.scrollLeft;
|
|
214
|
+
} else if (document.body) {// all other Explorers
|
|
215
|
+
yScroll = document.body.scrollTop;
|
|
216
|
+
xScroll = document.body.scrollLeft;
|
|
217
|
+
}
|
|
218
|
+
return new Array(xScroll,yScroll)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Adapted from getPageSize() by quirksmode.com
|
|
222
|
+
function getPageHeight() {
|
|
223
|
+
var windowHeight
|
|
224
|
+
if (self.innerHeight) { // all except Explorer
|
|
225
|
+
windowHeight = self.innerHeight;
|
|
226
|
+
} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
|
|
227
|
+
windowHeight = document.documentElement.clientHeight;
|
|
228
|
+
} else if (document.body) { // other Explorers
|
|
229
|
+
windowHeight = document.body.clientHeight;
|
|
230
|
+
}
|
|
231
|
+
return windowHeight
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Backwards compatibility
|
|
235
|
+
function makeCompatible() {
|
|
236
|
+
var $s = $.facebox.settings
|
|
237
|
+
|
|
238
|
+
$s.loadingImage = $s.loading_image || $s.loadingImage
|
|
239
|
+
$s.closeImage = $s.close_image || $s.closeImage
|
|
240
|
+
$s.imageTypes = $s.image_types || $s.imageTypes
|
|
241
|
+
$s.faceboxHtml = $s.facebox_html || $s.faceboxHtml
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// Figures out what you want to display and displays it
|
|
245
|
+
// formats are:
|
|
246
|
+
// div: #id
|
|
247
|
+
// image: blah.extension
|
|
248
|
+
// ajax: anything else
|
|
249
|
+
function fillFaceboxFromHref(href, klass) {
|
|
250
|
+
// div
|
|
251
|
+
if (href.match(/#/)) {
|
|
252
|
+
var url = window.location.href.split('#')[0]
|
|
253
|
+
var target = href.replace(url,'')
|
|
254
|
+
$.facebox.reveal($(target).clone().show(), klass)
|
|
255
|
+
|
|
256
|
+
// image
|
|
257
|
+
} else if (href.match($.facebox.settings.imageTypesRegexp)) {
|
|
258
|
+
fillFaceboxFromImage(href, klass)
|
|
259
|
+
// ajax
|
|
260
|
+
} else {
|
|
261
|
+
fillFaceboxFromAjax(href, klass)
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
function fillFaceboxFromImage(href, klass) {
|
|
266
|
+
var image = new Image()
|
|
267
|
+
image.onload = function() {
|
|
268
|
+
$.facebox.reveal('<div class="image"><img src="' + image.src + '" /></div>', klass)
|
|
269
|
+
}
|
|
270
|
+
image.src = href
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
function fillFaceboxFromAjax(href, klass) {
|
|
274
|
+
$.get(href, function(data) { $.facebox.reveal(data, klass) })
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function skipOverlay() {
|
|
278
|
+
return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
function showOverlay() {
|
|
282
|
+
if (skipOverlay()) return
|
|
283
|
+
|
|
284
|
+
if ($('facebox_overlay').length == 0)
|
|
285
|
+
$("body").append('<div id="facebox_overlay" class="facebox_hide"></div>')
|
|
286
|
+
|
|
287
|
+
$('#facebox_overlay').hide().addClass("facebox_overlayBG")
|
|
288
|
+
.css('opacity', $.facebox.settings.opacity)
|
|
289
|
+
.click(function() { $(document).trigger('close.facebox') })
|
|
290
|
+
.fadeIn(200)
|
|
291
|
+
return false
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
function hideOverlay() {
|
|
295
|
+
if (skipOverlay()) return
|
|
296
|
+
|
|
297
|
+
$('#facebox_overlay').fadeOut(200, function(){
|
|
298
|
+
$("#facebox_overlay").removeClass("facebox_overlayBG")
|
|
299
|
+
$("#facebox_overlay").addClass("facebox_hide")
|
|
300
|
+
$("#facebox_overlay").remove()
|
|
301
|
+
})
|
|
302
|
+
|
|
303
|
+
return false
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/*
|
|
307
|
+
* Bindings
|
|
308
|
+
*/
|
|
309
|
+
|
|
310
|
+
$(document).bind('close.facebox', function() {
|
|
311
|
+
$(document).unbind('keydown.facebox')
|
|
312
|
+
$('#facebox').fadeOut(function() {
|
|
313
|
+
$('#facebox .content').removeClass().addClass('content')
|
|
314
|
+
hideOverlay()
|
|
315
|
+
$('#facebox .loading').remove()
|
|
316
|
+
})
|
|
317
|
+
})
|
|
318
|
+
|
|
319
|
+
})(jQuery);
|