artfully_ose 1.2.0.pre.27 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +8 -8
  2. data/README.md +4 -6
  3. data/app/assets/javascripts/application.js +39 -0
  4. data/app/assets/javascripts/boxoffice.js +558 -0
  5. data/app/assets/javascripts/custom/kits-config.js +33 -0
  6. data/app/assets/javascripts/sales-console.js +29 -24
  7. data/app/assets/javascripts/store/store.js +11 -0
  8. data/app/assets/stylesheets/application.sass +66 -52
  9. data/app/assets/stylesheets/bootstrap-overrides.css +1 -1
  10. data/app/assets/stylesheets/boxoffice.css.scss +258 -0
  11. data/app/assets/stylesheets/pages/bootstrap-responsive.css +1109 -0
  12. data/app/assets/stylesheets/sass/store.sass +52 -62
  13. data/app/assets/stylesheets/storefront.css +1 -1
  14. data/app/concerns/itemable.rb +1 -1
  15. data/app/concerns/pdf_generation.rb +1 -11
  16. data/app/concerns/search_by_dates.rb +20 -0
  17. data/app/controllers/events_controller.rb +1 -0
  18. data/app/controllers/export_controller.rb +11 -1
  19. data/app/controllers/imports_controller.rb +2 -3
  20. data/app/controllers/member_cards_controller.rb +2 -3
  21. data/app/controllers/orders_controller.rb +42 -0
  22. data/app/controllers/organizations_controller.rb +1 -0
  23. data/app/controllers/passes_reports_controller.rb +21 -1
  24. data/app/controllers/regular_donation_kits_controller.rb +32 -0
  25. data/app/controllers/store/donations_controller.rb +19 -1
  26. data/app/controllers/store/orders_controller.rb +15 -5
  27. data/app/helpers/artfully_ose_helper.rb +28 -18
  28. data/app/models/database_views/item_view.rb +41 -0
  29. data/app/models/event.rb +10 -2
  30. data/app/models/ext/integrations.rb +5 -0
  31. data/app/models/fee_strategy.rb +47 -1
  32. data/app/models/imports/events_import.rb +6 -7
  33. data/app/models/item.rb +4 -3
  34. data/app/models/job/order_processor.rb +4 -3
  35. data/app/models/kit.rb +18 -0
  36. data/app/models/kits/regular_donation_kit.rb +51 -9
  37. data/app/models/member.rb +4 -3
  38. data/app/models/membership.rb +1 -2
  39. data/app/models/membership_sale_search.rb +2 -20
  40. data/app/models/membership_type.rb +1 -2
  41. data/app/models/order.rb +29 -1
  42. data/app/models/order_handler.rb +4 -3
  43. data/app/models/organization.rb +17 -9
  44. data/app/models/pass.rb +18 -17
  45. data/app/models/pass_sale_search.rb +18 -0
  46. data/app/models/pass_type.rb +7 -2
  47. data/app/models/passes_report.rb +117 -0
  48. data/app/models/sale_search.rb +3 -21
  49. data/app/models/user.rb +1 -2
  50. data/app/serializers/show_serializer.rb +15 -0
  51. data/app/views/contributions/index.html.haml +2 -2
  52. data/app/views/events/_header.html.haml +1 -0
  53. data/app/views/events/_ticket_type_fields.html.haml +31 -15
  54. data/app/views/events/edit.html.haml +6 -1
  55. data/app/views/imports/_export_links.html.haml +3 -0
  56. data/app/views/imports/donations/_pending.html.haml +24 -6
  57. data/app/views/imports/events/_pending.html.haml +16 -5
  58. data/app/views/imports/index.html.haml +6 -4
  59. data/app/views/imports/people/_pending.html.haml +20 -25
  60. data/app/views/layouts/storefront.html.haml +9 -5
  61. data/app/views/order_mailer/confirmation_for.html.haml +11 -5
  62. data/app/views/order_mailer/confirmation_for_refund.html.haml +6 -2
  63. data/app/views/order_mailer/confirmation_for_refund.text.haml +4 -3
  64. data/app/views/orders/membership.html.haml +15 -19
  65. data/app/views/orders/passes.html.haml +97 -0
  66. data/app/views/orders/sales.html.haml +2 -2
  67. data/app/views/organizations/_form.html.haml +4 -37
  68. data/app/views/pass_types/index.html.haml +1 -1
  69. data/app/views/passes_reports/index.html.haml +79 -1
  70. data/app/views/people/show.html.haml +16 -15
  71. data/app/views/regular_donation_kits/edit.html.haml +140 -0
  72. data/app/views/store/checkouts/thanks.html.haml +14 -6
  73. data/app/views/store/donations/index.html.haml +19 -2
  74. data/app/views/store/events/calendar.html.haml +1 -0
  75. data/app/views/store/events/index.html.haml +1 -0
  76. data/app/views/store/events/show.html.haml +1 -0
  77. data/app/views/store/events/single_show.html.haml +2 -0
  78. data/app/views/store/orders/show.html.haml +10 -10
  79. data/app/views/store/passes/index.html.haml +2 -2
  80. data/app/views/store/shared/_donate_form.html.haml +31 -12
  81. data/app/views/store/shared/_small_donate_form.html.haml +22 -0
  82. data/app/views/users/invitations/edit.html.haml +3 -42
  83. data/config/locales/en.yml +3 -1
  84. data/config/routes.rb +4 -1
  85. data/db/migrate/20140603200735_add_subtitle_to_events.rb +5 -0
  86. data/lib/artfully_ose/version.rb +1 -1
  87. data/spec/factories/kit_factories.rb +5 -4
  88. metadata +25 -13
  89. data/app/assets/javascripts/box-office.js +0 -262
@@ -0,0 +1,97 @@
1
+ - in_section :transactions
2
+ - content_for :header do
3
+ %h1 Pass Orders
4
+
5
+ #donations-search
6
+
7
+ .control-group.well
8
+ = form_tag passes_orders_path, :method => :get, :id => 'passes-date-search-form', :class => 'form-inline' do
9
+ .pull-left
10
+ = label_tag :start, "From", :class => "control-label"
11
+ = text_field_tag :start,"#{l @search.start, :format => :date_for_input}", :class => 'datepicker input-small'
12
+
13
+ = label_tag :stop, "To", :class => "control-label"
14
+ = text_field_tag :stop, "#{l @search.stop, :format => :date_for_input}", :class => 'datepicker input-small'
15
+
16
+ - if @pass_types.present?
17
+ = label_tag :pass_type_id, nil, :class => "control-label"
18
+ = raw select_pass_type_for_sales_search @pass_types, :pass_type_id, params[:pass_type_id]
19
+
20
+ = submit_tag "Search", :class => "btn"
21
+
22
+
23
+ - if @search.results.present?
24
+ .pull-right
25
+
26
+ %ul.in-table
27
+ %li.dropdown#bulkactions
28
+ =icon_link_to('Work with...', "#menu#bulkactions", 'fa-asterisk', 'dropdown-toggle dropdown btn', '')
29
+ %ul.dropdown-menu
30
+ %li
31
+ = link_to 'Export to CSV', params.merge(:format => 'csv').delete_if {|k,v| :commit == k.to_sym }
32
+
33
+
34
+ - if @search.results.present?
35
+
36
+ #tickets
37
+ %table.standalone.zebra.table
38
+ %thead
39
+ %tr
40
+ %th Order
41
+ %th Time
42
+ %th Person
43
+ %th Method
44
+ %th Membership Type
45
+ %th Amount
46
+ %tbody
47
+ - @search.results.each do |order|
48
+ - order.items.select(&:pass?).each_with_index do |item, index|
49
+ - if index == 0
50
+ %tr{:id => "order_#{order.id}"}
51
+ - rowspan = order.items.select(&:pass?).size
52
+ %td{:rowspan => rowspan}= link_to order.id, order_path(order.id)
53
+ %td{:rowspan => rowspan}= l(order.created_at_local_to_organization, :format => :short)
54
+ %td{:rowspan => rowspan}= link_to_person(order.person)
55
+ %td{:rowspan => rowspan}= (order.payment_method || "")
56
+ %td
57
+ ="#{item.product.pass_type.name}"
58
+ %td= number_as_cents item.price
59
+ - else
60
+ %tr
61
+ %td
62
+ ="#{item.product.pass_type.name}"
63
+ %td= number_as_cents item.price
64
+
65
+ = will_paginate(@search.results)
66
+
67
+ - else
68
+
69
+ %h4= "No sales found."
70
+
71
+ - content_for :custom_js do
72
+ :javascript
73
+ var printCardInterval;
74
+
75
+ $('#print-cards').on('show', function (show) {
76
+ // Remove any existing intervals
77
+ clearInterval(printCardInterval);
78
+
79
+ // Initial hurry to 90%
80
+ var bar = $('#print-cards .bar');
81
+ $(bar).css('width', '1%').animate({width: '90%'}, 1500, function() {
82
+
83
+ // Progress to 100% from there
84
+ var times = 0;
85
+ printCardInterval = setInterval(function() {
86
+ // Count this run
87
+ times = times + 1;
88
+
89
+ // Update the progress bar
90
+ $(bar).css('width', (90 + times) + '%');
91
+
92
+ // Clear the interval on the last run
93
+ if (times > 9) { clearInterval(printCardInterval); }
94
+ }, 1000);
95
+
96
+ });
97
+ });
@@ -7,10 +7,10 @@
7
7
  .control-group.well
8
8
  .pull-left
9
9
  = label_tag :start, "From", :class => "control-label"
10
- = text_field_tag :start,"#{l @search.start, :format => :date_for_input}", :readonly => true, :class => 'datepicker input-small'
10
+ = text_field_tag :start,"#{l @search.start, :format => :date_for_input}", :class => 'datepicker input-small'
11
11
 
12
12
  = label_tag :stop, "To", :class => "control-label"
13
- = text_field_tag :stop, "#{l @search.stop, :format => :date_for_input}", :readonly => true, :class => 'datepicker input-small'
13
+ = text_field_tag :stop, "#{l @search.stop, :format => :date_for_input}", :class => 'datepicker input-small'
14
14
 
15
15
  - if @events.present?
16
16
  = label_tag :event_id, nil, :class => "control-label"
@@ -1,10 +1,8 @@
1
- %fieldset.ng-cloak
2
- %legend Required Info
3
- .control-group{"ng-class" => "{error: ! data.organization.valid_name}"}
1
+ %fieldset
2
+ .control-group
4
3
  = form.label :name, "Organization Name", :class => 'control-label'
5
4
  .controls
6
5
  = form.text_field :name, :value => @organization.name, :required => true, :class => 'input-xlarge no-fa'
7
- %p.text-error{"ng-hide" => "data.organization.valid_name"} Artful.ly already has an organization with this name and zip code. If you forgot your password or would like to be added to the existing organization please email #{mail_to "support@artful.ly"}.
8
6
 
9
7
  .control-group
10
8
  = form.label :email, 'Organization Email', :class=>'control-label'
@@ -12,41 +10,10 @@
12
10
  = form.email_field :email, :placeholder => 'contact@organization.org', :required => true, :class => 'input-xlarge email-popup', "data-content" => "Your patrons will be able to respond to this email address when receiving ticket/donation receipts. You can change this at any time."
13
11
  %span.help-inline (default contact for your patrons)
14
12
 
15
- - unless @organization.new_record?
16
- .control-group
17
- = form.label :cached_slug, 'Storefront URL', :class=>'control-label'
18
- .controls
19
- = form.text_field :cached_slug, :placeholder => @organization.cached_slug, :required => true, :class => 'input-xlarge'
20
-
21
- %fieldset
22
- %legend Details
23
13
  .control-group
24
- = form.label :country, :class => 'control-label'
25
- .controls= form.select :country, [(h form.object.country || "United States")], selected: (form.object.country || "United States"), :required => true
26
-
27
- .control-group
28
- .control-label.form-inline
29
- = form.label :state, 'State'
30
- &
31
- = form.label :zip, 'Zip'
14
+ = form.label :cached_slug, 'Storefront URL', :class=>'control-label'
32
15
  .controls
33
- = form.select :state, [nil, (h form.object.state || "New York")], selected: (form.object.state), :required => true
34
- = form.text_field :zip, :placeholder => '10001', :class => 'span1', :required => true, "ng-model" => "data.organization.zip", "ng-init" => "data.organization.zip = '#{form.object.zip}'"
35
-
36
- .control-group
37
- = form.label :phone_number, 'Phone Number', :class => 'control-label'
38
- .controls= form.text_field :phone_number, :placeholder => '(888) 692-7878', :required => true
39
-
40
- .control-group
41
- = form.label :website, :class => 'control-label'
42
- .controls
43
- .input-prepend
44
- %span.add-on http://
45
- = form.text_field :website, :placeholder => 'example.com'
46
-
47
- .control-group
48
- = form.label :discipline, :class => 'control-label hidden'
49
- .controls= form.select :discipline, ['Dance', 'Film & Electronic Media', 'Literary Arts', 'Music', 'Theater', 'Visual Arts', 'Other'], {:include_blank => 'What kind of work does your organization primarily do?'}, {:class => 'span5', :required => true}
16
+ = form.text_field :cached_slug, :placeholder => @organization.cached_slug, :required => true, :class => 'input-xlarge'
50
17
 
51
18
  .control-group
52
19
  = form.label :time_zone, "Time Zone", :class => 'control-label'
@@ -21,7 +21,7 @@
21
21
  %td=link_to pass_type.name, edit_pass_type_path(pass_type)
22
22
  %td=l pass_type.starts_at, :format => :slashed_date
23
23
  %td=l pass_type.ends_at, :format => :slashed_date
24
- %td.right=pass_type.passes.count
24
+ %td.right=pass_type.sold.count
25
25
  %td.right=pass_type.tickets_allowed
26
26
  %td.right=number_as_cents pass_type.price
27
27
  %td.right
@@ -1,2 +1,80 @@
1
1
  -content_for :header do
2
- %h1 Passes
2
+ %h1 Pass Usage
3
+
4
+ = form_tag passes_reports_path, :method => :get, :class => 'well form-inline' do
5
+ = label_tag :pass_type, "Pass", :class => "control-label"
6
+ = select_tag :pass_type, options_for_select(@options_for_select, @report.pass_type.try(:id))
7
+
8
+
9
+ = label_tag :start_date, "From", :class => "control-label"
10
+ = text_field_tag :start_date, @start_date, :readonly => true, :class => 'datepicker input-small'
11
+
12
+ = label_tag :end_date, "To", :class => "control-label"
13
+ = text_field_tag :end_date, @end_date, :readonly => true, :class => 'datepicker input-small'
14
+
15
+ .pull-right
16
+ = submit_tag "Search", :class => "btn"
17
+
18
+ - unless @report.nil?
19
+
20
+ .row-fluid.botton-room
21
+ .span9
22
+ %h3=@report.header
23
+ .span3
24
+ .pull-right
25
+ =link_to "Download CSV", passes_reports_path(code: @report.pass_type, start_date: @report.start_date, end_date: @report.end_date, format: "csv"), :class => "btn"
26
+
27
+ #statement-summary.bottom-room.well
28
+ .row-fluid
29
+ .span4
30
+ .center.headline-stat#passes-sold-stat
31
+ =@report.passes_sold
32
+ .center.headline-caption
33
+ %h6 PASSES SOLD
34
+ .span4
35
+ .center.headline-stat#tickets-sold-stat
36
+ =@report.tickets_sold
37
+ .center.headline-caption
38
+ %h6 TICKETS SOLD
39
+ .span4
40
+ .center.headline-stat#tickets-remaining-stat
41
+ =@report.tickets_remaining
42
+ .center.headline-caption
43
+ %h6 TICKETS REMAINING
44
+
45
+ .row
46
+ .span12
47
+ %table.table.zebra#order-table
48
+ %thead
49
+ %tr
50
+ %th{:style=>'width:200px'} Pass
51
+ %th Order/Date
52
+ %th{:style=>'width:200px'} Person
53
+ %th Event
54
+ %th.right Tickets
55
+ %th.right Orig. Price
56
+ %th.right Gross
57
+ %tbody
58
+ -if @rows.empty?
59
+ %tr
60
+ %td{:colspan => 7}
61
+ .no-image#no-pass-sales
62
+ #text
63
+ =icon_tag '299-ticket'
64
+ %br
65
+ This pass hasn't been used to buy any tickets.
66
+ -@rows.each do |row|
67
+ %tr
68
+ %td=row.pass_type
69
+ %td
70
+ =link_to row.order.id, order_path(row.order)
71
+ %br
72
+ =l row.order.created_at, :format => :slashed_date
73
+ %td
74
+ =link_to row.order.person, person_path(row.order.person)
75
+ %td=link_to row.show.event.name, event_path(row.show.event)
76
+ %td.right=row.ticket_count
77
+ %td.right=number_as_cents row.original_price
78
+ %td.right=number_as_cents row.gross
79
+
80
+ = will_paginate(@rows)
@@ -68,10 +68,10 @@
68
68
  %span Do Not Email
69
69
  = form.submit "Save", :class => 'btn btn-primary hidden'
70
70
 
71
- %h5 Email Lists
72
- %section#subscription-listing
73
- = form_for @person do |form|
74
- - if @person.organization.kits.mailchimp
71
+ - with_kit(:mailchimp) do
72
+ %h5 Email Lists
73
+ %section#subscription-listing
74
+ = form_for @person do |form|
75
75
  .mailchimp-list
76
76
  - mailchimp_kit = @person.organization.kits.mailchimp
77
77
  = hidden_field_tag "person[subscribed_lists][]", nil, :id => "person_subscribed_lists_empty"
@@ -79,7 +79,7 @@
79
79
  = label_tag "", :class => "checkbox" do
80
80
  = check_box_tag "person[subscribed_lists][]", list[:list_id], @person.subscribed_lists.include?(list[:list_id]), :class => "mail-chimp-list", :disabled => @person.do_not_email
81
81
  %span= list[:list_name]
82
- = form.submit "Save", :class => 'btn btn-primary hidden'
82
+ = form.submit "Save", :class => 'btn btn-primary hidden'
83
83
 
84
84
  .span8
85
85
  #notes
@@ -146,13 +146,14 @@
146
146
  = render 'convert_to_company_modal'
147
147
  #edit-order-popup.modal
148
148
 
149
- - if current_user.current_organization.kits.mailchimp
150
- .modal#subscribe-modal(role="dialog")
151
- .modal-header
152
- %button(type="button" class="close" data-dismiss="modal" aria-hidden="true") ×
153
- %h3 MailChimp List Subscription
154
- .modal-body
155
- %p #{@person} will receive an email from MailChimp confirming their addition to this list
156
- .modal-footer
157
- %button(class="btn" data-dismiss="modal" aria-hidden="true") Cancel
158
- %button(class="btn btn-primary") OK
149
+ -with_kit(:mailchimp) do
150
+ - if current_user.current_organization.kits.mailchimp
151
+ .modal#subscribe-modal(role="dialog")
152
+ .modal-header
153
+ %button(type="button" class="close" data-dismiss="modal" aria-hidden="true") ×
154
+ %h3 MailChimp List Subscription
155
+ .modal-body
156
+ %p #{@person} will receive an email from MailChimp confirming their addition to this list
157
+ .modal-footer
158
+ %button(class="btn" data-dismiss="modal" aria-hidden="true") Cancel
159
+ %button(class="btn btn-primary") OK
@@ -0,0 +1,140 @@
1
+ - content_for :header do
2
+ %h1 Configure 501(c)(3) Donation Kit
3
+
4
+ #edit-donation-kit
5
+ = form_for @kit do |f|
6
+ .row-fluid.bottom-room
7
+ .span3
8
+ = f.label :about_organization_text, 'About Your Organization', :class => 'control-label'
9
+ .guide
10
+ %p
11
+ Briefly describe your organization's activities and goals to a potential patron.
12
+ .span9
13
+ = f.text_area :about_organization_text, :class => 'input-xxlarge wysihtml5', :rows => 8
14
+
15
+ .row-fluid.bottom-room
16
+ .span3
17
+ = f.label :donation_ask_text, 'Donation Ask for Storefront', :class => 'control-label'
18
+ .guide
19
+ %p
20
+ Why should someone donate to your organization? This appeal appears on your Donation Storefront.
21
+ .span9
22
+ = f.text_area :donation_ask_text, :class => 'input-xxlarge wysihtml5', :rows => 8
23
+
24
+ .row-fluid.bottom-room
25
+ .span3
26
+ = f.label :donate_now_text, 'Navigation Button Name', :class => 'control-label'
27
+ .guide
28
+ %p
29
+ Customize the name of orange donate button on your Storefront navigation bar.
30
+ .span9
31
+ = f.text_field :donate_now_text, :class => 'input-xxlarge'
32
+
33
+ .row-fluid.bottom-room
34
+ .span3
35
+ = f.label :donation_nudge_text, 'Donation Nudge for Cart', :class => 'control-label'
36
+ .guide
37
+ %p
38
+ This short appeal appears in the shopping cart to encourage patrons to add a donation to their order.
39
+ .span9
40
+ = f.text_field :donation_nudge_text, :class => 'input-xxlarge'
41
+
42
+ .row-fluid.bottom-room
43
+ %hr
44
+
45
+ .row-fluid.bottom-room
46
+ .span3
47
+ = f.label :suggested_gifts, 'Suggested Gifts', :class => 'control-label'
48
+ .span9
49
+ - idx = 0
50
+ - Array(@kit.suggested_gifts).each do |s|
51
+ .suggested-gift-container
52
+ = f.text_field "suggested_gift_#{idx}_level_name", :name => "regular_donation_kit[suggested_gifts][#{idx}][level_name]",
53
+ :placeholder => 'Level Name (optional)',
54
+ :value => s['level_name'].present? ? s['level_name'] : ''
55
+ = f.text_field "suggested_gift_#{idx}_amount", :name => "regular_donation_kit[suggested_gifts][#{idx}][amount]",
56
+ :placeholder => '$ Amount',
57
+ :value => s['amount'].present? ? s['amount'] : ''
58
+ %a{ href: 'javascript:;', :class => 'suggested-gift-remove' }
59
+ Remove
60
+ - idx = idx + 1
61
+ .suggested-gift-container.new-suggested-gift-container
62
+ = f.text_field "suggested_gift_#{idx}_level_name", :name => "regular_donation_kit[suggested_gifts][#{idx}][level_name]",
63
+ :placeholder => 'Level Name (optional)',
64
+ :value => ''
65
+ = f.text_field "suggested_gift_#{idx}_amount", :name => "regular_donation_kit[suggested_gifts][#{idx}][amount]",
66
+ :placeholder => '$ Amount',
67
+ :value => ''
68
+ %a{ href: 'javascript:;', :class => 'suggested-gift-add' }
69
+ Add
70
+
71
+ .row-fluid.bottom-room
72
+ .span3
73
+ = f.label :open_gift_field, 'Display open gift field', :class => 'control-label'
74
+ .span9
75
+ = f.check_box :open_gift_field, :checked => @kit.open_gift_field.nil? || @kit.open_gift_field == '1'
76
+
77
+ .row-fluid.bottom-room
78
+ %hr
79
+
80
+ .row-fluid.bottom-room
81
+ .span3
82
+ = f.label :thanks_msg_text, 'Thanks Message', :class => 'control-label'
83
+ .guide
84
+ %p
85
+ This appears on the confirmation page after your patron makes a donation.
86
+ .span9
87
+ = f.text_area :thanks_msg_text, :class => 'input-xxlarge', :rows => 8
88
+
89
+ .row-fluid.bottom-room
90
+ .span3
91
+ = f.label :email_msg_text, 'Email Message', :class => 'control-label'
92
+ .guide
93
+ %p
94
+ This appears in the email order confirmation your patron receives after making a donation.
95
+ .span9
96
+ = f.text_area :email_msg_text, :class => 'input-xxlarge', :rows => 8
97
+
98
+ .row-fluid.bottom-room
99
+ %hr
100
+
101
+ .row-fluid.bottom-room
102
+ .span3
103
+ = f.label :donation_only_storefront, 'Donation-Only Storefront Link'
104
+ .span9
105
+ = link_to store_donate_url(@kit.organization.cached_slug).gsub(/^https?:\/+/, ''), store_donate_url(@kit.organization.cached_slug), :target => '_blank'
106
+
107
+ .row-fluid.bottom-room
108
+ .span3
109
+ = f.label :open_gift_field, 'Display Donation-Only Storefront', :class => 'control-label'
110
+ .span9
111
+ = f.check_box :donation_only_storefront
112
+
113
+ .row-fluid.bottom-room
114
+ .span3
115
+ &nbsp
116
+ .span9
117
+ =f.submit 'Save', :class => 'btn btn-primary'
118
+
119
+
120
+ #about_organization_text-preview-modal.modal
121
+ .modal-header
122
+ .close{'data-dismiss' => 'modal'} x
123
+ %h3 About Organization Text Preview
124
+
125
+ .modal-body
126
+ #about_organization_text-preview
127
+ (About Organization Text Preview)
128
+ .modal-footer
129
+ = link_to 'Close', '#', :class => 'btn', 'data-dismiss' => 'modal'
130
+
131
+ #donation_ask_text-preview-modal.modal
132
+ .modal-header
133
+ .close{'data-dismiss' => 'modal'} x
134
+ %h3 Donation Ask Preview
135
+
136
+ .modal-body
137
+ #donation_ask_text-preview
138
+ (Donation Ask Preview)
139
+ .modal-footer
140
+ = link_to 'Close', '#', :class => 'btn', 'data-dismiss' => 'modal'