newsletter 3.0.2 → 3.2.0
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.
- checksums.yaml +5 -13
- data/.gitignore +6 -0
- data/.ruby-version +1 -1
- data/Gemfile +17 -5
- data/README.md +40 -0
- data/app/assets/images/newsletter/BottomRight.gif +0 -0
- data/app/assets/images/newsletter/MidRight.gif +0 -0
- data/app/assets/images/newsletter/TopCenter.gif +0 -0
- data/app/assets/images/newsletter/TopRight.gif +0 -0
- data/app/assets/images/newsletter/calendar_date_select/calendar.gif +0 -0
- data/app/assets/images/newsletter/iReach_logo.gif +0 -0
- data/app/assets/images/newsletter/spacer.gif +0 -0
- data/app/assets/images/newsletter/topMid.gif +0 -0
- data/app/assets/javascripts/newsletter/application.js +6 -0
- data/app/assets/stylesheets/newsletter/admin.css +261 -0
- data/app/assets/stylesheets/newsletter/application.css +3 -1
- data/app/assets/stylesheets/newsletter/nav.css +68 -0
- data/app/assets/stylesheets/newsletter/timepicker.css +54 -0
- data/app/controllers/newsletter/application_controller.rb +5 -26
- data/app/controllers/newsletter/areas_controller.rb +0 -38
- data/app/controllers/newsletter/designs_controller.rb +5 -2
- data/app/controllers/newsletter/elements_controller.rb +7 -7
- data/app/controllers/newsletter/fields_controller.rb +1 -46
- data/app/controllers/newsletter/newsletters_controller.rb +6 -24
- data/app/controllers/newsletter/pieces_controller.rb +8 -21
- data/app/helpers/newsletter/designs_helper.rb +1 -8
- data/app/helpers/newsletter/layout_helper.rb +43 -0
- data/app/helpers/newsletter/newsletters_helper.rb +9 -5
- data/app/models/newsletter/area.rb +1 -4
- data/app/models/newsletter/asset.rb +7 -1
- data/app/models/newsletter/design.rb +48 -34
- data/app/models/newsletter/element.rb +0 -42
- data/app/models/newsletter/field.rb +7 -10
- data/app/models/newsletter/field/inline_asset.rb +15 -2
- data/app/models/newsletter/newsletter.rb +18 -11
- data/app/models/newsletter/piece.rb +20 -24
- data/app/views/layouts/newsletter/application.html.erb +20 -116
- data/app/views/layouts/newsletter/layout.html.erb +15 -0
- data/app/views/newsletter/areas/_area.html.erb +1 -1
- data/app/views/newsletter/designs/_area_fields.html.erb +1 -1
- data/app/views/newsletter/designs/_form.html.erb +11 -29
- data/app/views/newsletter/designs/_newsletter_area.html.erb +2 -2
- data/app/views/newsletter/designs/edit.html.erb +3 -6
- data/app/views/newsletter/designs/index.html.erb +7 -6
- data/app/views/newsletter/designs/new.html.erb +2 -2
- data/app/views/newsletter/designs/show.html.erb +5 -5
- data/app/views/newsletter/elements/_field_fields.html.erb +12 -25
- data/app/views/newsletter/elements/_form.html.erb +38 -34
- data/app/views/newsletter/elements/edit.html.erb +2 -5
- data/app/views/newsletter/elements/index.html.erb +7 -7
- data/app/views/newsletter/elements/new.html.erb +2 -2
- data/app/views/newsletter/elements/show.html.erb +5 -5
- data/app/views/newsletter/fields/_inline_asset.html.erb +12 -32
- data/app/views/newsletter/fields/_text.html.erb +2 -4
- data/app/views/newsletter/fields/_text_area.html.erb +2 -7
- data/app/views/newsletter/newsletters/_form.html.erb +6 -16
- data/app/views/newsletter/newsletters/_head.html.erb +2 -3
- data/app/views/newsletter/newsletters/_newsletter.html.erb +11 -6
- data/app/views/newsletter/newsletters/archive.html.erb +1 -1
- data/app/views/newsletter/newsletters/edit.html.erb +8 -16
- data/app/views/newsletter/newsletters/index.html.erb +7 -7
- data/app/views/newsletter/newsletters/new.html.erb +2 -2
- data/app/views/newsletter/newsletters/show.html.erb +11 -6
- data/app/views/newsletter/pieces/_form.html.erb +1 -8
- data/app/views/newsletter/pieces/edit.html.erb +2 -4
- data/app/views/newsletter/pieces/new.html.erb +3 -5
- data/config/locales/newsletters.en.yml +27 -0
- data/config/routes.rb +4 -4
- data/designs/exports/Example.yml +202 -0
- data/designs/exports/example-export.yaml +481 -87
- data/lib/deleteable.rb +12 -14
- data/lib/newsletter/engine.rb +112 -6
- data/lib/newsletter/version.rb +1 -1
- data/lib/tasks/newsletter.rake +54 -41
- data/newsletter.gemspec +3 -1
- data/spec/test_app/.rspec +2 -0
- data/spec/test_app/app/controllers/application_controller.rb +5 -0
- data/spec/test_app/app/models/ability.rb +8 -0
- data/spec/test_app/app/models/user.rb +10 -0
- data/spec/test_app/app/views/layouts/application.html.erb +3 -1
- data/spec/test_app/config/database.postgres.yml +21 -0
- data/spec/test_app/config/initializers/carrierwave.rb +23 -0
- data/spec/test_app/config/newsletter.yml +6 -3
- data/spec/test_app/config/routes.rb +1 -2
- data/spec/test_app/db/migrate/20131222171230_create_users.rb +13 -0
- data/spec/test_app/db/schema.rb +13 -2
- data/spec/test_app/features/newsletter_management.feature +39 -0
- data/spec/test_app/features/piece_management.feature +20 -0
- data/spec/test_app/features/step_definitions/debugging_steps.rb +3 -0
- data/spec/test_app/features/step_definitions/design_steps.rb +3 -0
- data/spec/test_app/features/step_definitions/login_steps.rb +4 -0
- data/spec/test_app/features/step_definitions/newsletter_steps.rb +24 -0
- data/spec/test_app/features/step_definitions/piece_steps.rb +26 -0
- data/{features → spec/test_app/features}/step_definitions/webrat_steps.rb +10 -6
- data/spec/test_app/features/support/env.rb +36 -0
- data/spec/test_app/features/support/functions.rb +3 -0
- data/{features → spec/test_app/features}/support/paths.rb +10 -1
- data/spec/test_app/lib/debugging.rb +61 -0
- data/spec/test_app/script/full_suite +44 -0
- data/spec/test_app/script/rspec_multi_db +26 -0
- data/spec/test_app/spec/controllers/newsletter/pieces_controller_spec.rb +175 -0
- data/spec/test_app/spec/factories/_functions.rb +19 -0
- data/spec/test_app/spec/factories/assets.rb +8 -0
- data/spec/test_app/spec/factories/designs.rb +1 -1
- data/spec/test_app/spec/factories/newsletters.rb +68 -6
- data/spec/test_app/spec/factories/pieces.rb +8 -0
- data/spec/test_app/spec/factories/users.rb +13 -0
- data/spec/test_app/spec/features/newsletter/design_spec.rb +175 -0
- data/spec/test_app/spec/features/newsletter/element_spec.rb +53 -0
- data/spec/test_app/spec/features/newsletter/newsletter_spec.rb +99 -3
- data/spec/test_app/spec/helpers/newsletter/newsletters_helper_spec.rb +65 -0
- data/spec/test_app/spec/models/newsletter/asset_spec.rb +23 -0
- data/spec/test_app/spec/models/newsletter/design_spec.rb +23 -2
- data/spec/test_app/spec/models/newsletter/element_spec.rb +4 -0
- data/spec/test_app/spec/models/newsletter/inline_asset_spec.rb +43 -0
- data/spec/test_app/spec/models/newsletter/newsletter_spec.rb +102 -2
- data/spec/test_app/spec/models/newsletter/piece_spec.rb +33 -0
- data/spec/test_app/spec/rails_helper.rb +82 -0
- data/spec/test_app/spec/routing/newsletter/pieces_routing_spec.rb +28 -0
- data/spec/test_app/spec/spec_helper.rb +73 -64
- data/spec/test_app/spec/support/carrierwave.rb +7 -0
- data/spec/test_app/spec/support/continuances.rb +18 -0
- data/spec/test_app/spec/support/files/iReach_logo.gif +0 -0
- data/spec/test_app/spec/support/files/test.pdf +0 -0
- data/spec/test_app/spec/support/functions.rb +3 -0
- metadata +145 -726
- data/README +0 -243
- data/README.rdoc +0 -3
- data/app/views/newsletter/elements/_newsletter_field.html.erb +0 -37
- data/features/support/env.rb +0 -17
- data/lib/tasks/newsletter_tasks.rake +0 -4
- data/lib/tasks/rspec.rake +0 -158
- data/spec/spec_helper.rb +0 -55
- data/spec/test_app/db/structure.sql +0 -12
- data/spec/test_app/newsletters/designs/My_Design/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/My_Design/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/My_Design/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/Testo_Changeo/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/Testo_Changeo/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/empower_innovative_e-business/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/enable_extensible_systems/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/engage_innovative_schemas/layout.html.erb +0 -67
- data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/harness_integrated_partnerships/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/integrate_mission-critical_systems/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/integrate_mission-critical_systems/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/layout.html.erb +0 -67
- data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/iterate_strategic_architectures/layout.html.erb +0 -67
- data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/layout.html.erb +0 -67
- data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/layout.html.erb +0 -67
- data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/layout.html.erb +0 -67
- data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/target_enterprise_functionalities/layout.html.erb +0 -67
- data/spec/test_app/newsletters/designs/transition_enterprise_systems/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/transition_enterprise_systems/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/layout.html.erb +0 -66
@@ -0,0 +1,54 @@
|
|
1
|
+
.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }
|
2
|
+
.ui-timepicker-div dl { text-align: left; }
|
3
|
+
.ui-timepicker-div dl dt { float: left; clear:left; padding: 0 0 0 5px; }
|
4
|
+
.ui-timepicker-div dl dd { margin: 0 10px 10px 45%; }
|
5
|
+
.ui-timepicker-div td { font-size: 90%; }
|
6
|
+
.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }
|
7
|
+
|
8
|
+
.ui-timepicker-rtl{ direction: rtl; }
|
9
|
+
.ui-timepicker-rtl dl { text-align: right; padding: 0 5px 0 0; }
|
10
|
+
.ui-timepicker-rtl dl dt{ float: right; clear: right; }
|
11
|
+
.ui-timepicker-rtl dl dd { margin: 0 45% 10px 10px; }
|
12
|
+
.ui-tooltip, .arrow:after {
|
13
|
+
background: #285c00;
|
14
|
+
border: 2px solid #45930b;
|
15
|
+
}
|
16
|
+
.ui-tooltip {
|
17
|
+
padding: 10px 20px;
|
18
|
+
color: white;
|
19
|
+
border-radius: 20px;
|
20
|
+
font: bold 14px "Helvetica Neue", Sans-Serif;
|
21
|
+
box-shadow: 0 0 7px black;
|
22
|
+
}
|
23
|
+
.arrow {
|
24
|
+
width: 70px;
|
25
|
+
height: 16px;
|
26
|
+
overflow: hidden;
|
27
|
+
position: absolute;
|
28
|
+
left: 50%;
|
29
|
+
margin-left: -35px;
|
30
|
+
bottom: -16px;
|
31
|
+
}
|
32
|
+
.arrow.top {
|
33
|
+
top: -16px;
|
34
|
+
bottom: auto;
|
35
|
+
}
|
36
|
+
.arrow.left {
|
37
|
+
left: 20%;
|
38
|
+
}
|
39
|
+
.arrow:after {
|
40
|
+
content: "";
|
41
|
+
position: absolute;
|
42
|
+
left: 20px;
|
43
|
+
top: -20px;
|
44
|
+
width: 25px;
|
45
|
+
height: 25px;
|
46
|
+
box-shadow: 6px 5px 9px -9px black;
|
47
|
+
-webkit-transform: rotate(45deg);
|
48
|
+
-ms-transform: rotate(45deg);
|
49
|
+
transform: rotate(45deg);
|
50
|
+
}
|
51
|
+
.arrow.top:after {
|
52
|
+
bottom: -20px;
|
53
|
+
top: auto;
|
54
|
+
}
|
@@ -1,30 +1,9 @@
|
|
1
1
|
require 'dynamic_form'
|
2
2
|
require 'nested_form'
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
load_and_authorize_resource
|
3
|
+
require 'cancan'
|
4
|
+
class Newsletter::ApplicationController < ::ApplicationController
|
5
|
+
layout Newsletter.layout
|
6
|
+
load_and_authorize_resource
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
def title(value=nil)
|
11
|
-
@title = value if value.present?
|
12
|
-
@title
|
13
|
-
end
|
14
|
-
|
15
|
-
def show_title?
|
16
|
-
true
|
17
|
-
end
|
18
|
-
|
19
|
-
def use_show_for_resources?
|
20
|
-
::Newsletter.use_show_for_resources
|
21
|
-
rescue
|
22
|
-
false
|
23
|
-
end
|
24
|
-
|
25
|
-
def site_url
|
26
|
-
::Newsletter.site_url
|
27
|
-
rescue
|
28
|
-
"#{default_url_options[:protocol]||'http'}://#{default_url_options[:domain]}"
|
29
|
-
end
|
8
|
+
helper :'newsletter/layout'
|
30
9
|
end
|
@@ -12,44 +12,6 @@ module Newsletter
|
|
12
12
|
head :ok
|
13
13
|
end
|
14
14
|
|
15
|
-
def index
|
16
|
-
@areas = Area.find(:all)
|
17
|
-
end
|
18
|
-
|
19
|
-
def show
|
20
|
-
end
|
21
|
-
|
22
|
-
def new
|
23
|
-
@newsletter_area = Area.new
|
24
|
-
end
|
25
|
-
|
26
|
-
def edit
|
27
|
-
end
|
28
|
-
|
29
|
-
def create
|
30
|
-
@newsletter_area = Area.new(params[:area])
|
31
|
-
if @newsletter_area.save
|
32
|
-
flash[:notice] = 'Area was successfully created.'
|
33
|
-
redirect_to(@newsletter_area)
|
34
|
-
else
|
35
|
-
render :action => "new"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def update
|
40
|
-
if @newsletter_area.update_attributes(params[:area])
|
41
|
-
flash[:notice] = 'Area was successfully updated.'
|
42
|
-
redirect_to(@newsletter_area)
|
43
|
-
else
|
44
|
-
render :action => "edit"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def destroy
|
49
|
-
@newsletter_area.destroy
|
50
|
-
redirect_to(areas_url)
|
51
|
-
end
|
52
|
-
|
53
15
|
protected
|
54
16
|
|
55
17
|
def find_design
|
@@ -3,8 +3,11 @@ module Newsletter
|
|
3
3
|
class DesignsController < ::Newsletter::ApplicationController
|
4
4
|
before_filter :find_design, :except => [:new, :create, :index]
|
5
5
|
|
6
|
+
include DeleteableActions
|
7
|
+
|
6
8
|
def index
|
7
|
-
@designs = Design.
|
9
|
+
@designs = Design.order(:name).paginate(page: (params[:page] || 1),
|
10
|
+
per_page: (params[:per_page] || 30))
|
8
11
|
end
|
9
12
|
|
10
13
|
def show
|
@@ -38,7 +41,7 @@ module Newsletter
|
|
38
41
|
end
|
39
42
|
|
40
43
|
def destroy
|
41
|
-
@design.
|
44
|
+
@design.delete
|
42
45
|
redirect_to(designs_url)
|
43
46
|
end
|
44
47
|
|
@@ -55,21 +55,21 @@ module Newsletter
|
|
55
55
|
|
56
56
|
protected
|
57
57
|
def find_element
|
58
|
-
@element
|
58
|
+
@element ||= Element.find_by_id(params[:id])
|
59
59
|
end
|
60
60
|
|
61
61
|
def find_design
|
62
|
-
return @design
|
63
|
-
@design
|
62
|
+
return @design ||= @element.design if @element && @element.design.present?
|
63
|
+
@design ||= Design.find_by_id(params[:design_id])
|
64
64
|
end
|
65
65
|
|
66
66
|
def find_fields
|
67
|
-
return @fields
|
68
|
-
[Field.new]
|
67
|
+
return @fields ||= @element.fields if @element && @element.fields.present?
|
68
|
+
@fields ||= [Field.new]
|
69
69
|
end
|
70
70
|
|
71
71
|
def find_field_types
|
72
|
-
@field_types
|
72
|
+
@field_types ||= Field.valid_types
|
73
73
|
end
|
74
74
|
end
|
75
|
-
end
|
75
|
+
end
|
@@ -1,49 +1,4 @@
|
|
1
1
|
module Newsletter
|
2
2
|
class FieldsController < ::Newsletter::ApplicationController
|
3
|
-
before_filter :find_field, :except => [:index, :new, :create]
|
4
|
-
|
5
|
-
def index
|
6
|
-
@fields = NewsletterField.find(:all)
|
7
|
-
end
|
8
|
-
|
9
|
-
def show
|
10
|
-
end
|
11
|
-
|
12
|
-
def new
|
13
|
-
@field = NewsletterField.new
|
14
|
-
end
|
15
|
-
|
16
|
-
def edit
|
17
|
-
end
|
18
|
-
|
19
|
-
def create
|
20
|
-
@field = Field.new(params[:field])
|
21
|
-
if @field.save
|
22
|
-
flash[:notice] = 'NewsletterField was successfully created.'
|
23
|
-
redirect_to(@field)
|
24
|
-
else
|
25
|
-
render :action => "new"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def update
|
30
|
-
if @field.update_attributes(params[:field])
|
31
|
-
flash[:notice] = 'Field was successfully updated.'
|
32
|
-
redirect_to(@field)
|
33
|
-
else
|
34
|
-
render :action => "edit"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def destroy
|
39
|
-
@field.destroy
|
40
|
-
redirect_to(fields_url)
|
41
|
-
end
|
42
|
-
|
43
|
-
protected
|
44
|
-
|
45
|
-
def find_field
|
46
|
-
@field = Field.find(params[:id])
|
47
|
-
end
|
48
3
|
end
|
49
|
-
end
|
4
|
+
end
|
@@ -1,11 +1,7 @@
|
|
1
1
|
module Newsletter
|
2
2
|
class NewslettersController < ::Newsletter::ApplicationController
|
3
|
-
|
4
|
-
|
5
|
-
#FIXME: why do we need to place this custom code here instead of reopening the class?
|
6
|
-
skip_before_filter :authenticate, :only => [:archive,:show]
|
7
|
-
|
8
|
-
|
3
|
+
helper_method :newsletter
|
4
|
+
|
9
5
|
def sort
|
10
6
|
Newsletter.all.each do | newsletter |
|
11
7
|
newsletter.sequence = params["newsletters"].index(newsletter.id.to_s)+1
|
@@ -43,26 +39,16 @@ module Newsletter
|
|
43
39
|
|
44
40
|
def show
|
45
41
|
return redirect_to(main_app.newsletter_archive_path) unless @newsletter.present?
|
46
|
-
|
47
|
-
:locals => @newsletter.locals
|
48
|
-
if params[:mode].eql?('email')
|
49
|
-
#mailer handles substitutions
|
50
|
-
render :text => newsletter_html
|
51
|
-
else
|
52
|
-
#no substitutions
|
53
|
-
render :text => newsletter_html
|
54
|
-
end
|
42
|
+
render layout: false
|
55
43
|
end
|
56
44
|
|
57
45
|
def editor
|
58
46
|
params[:editor] = '1'
|
59
|
-
|
60
|
-
:locals => @newsletter.locals
|
61
|
-
render :text => newsletter_html
|
47
|
+
render :show, layout: false
|
62
48
|
end
|
63
49
|
|
64
50
|
def new
|
65
|
-
@
|
51
|
+
@newsleter = Newsletter.new
|
66
52
|
@designs = Design.active
|
67
53
|
end
|
68
54
|
|
@@ -95,10 +81,6 @@ module Newsletter
|
|
95
81
|
@newsletter.destroy
|
96
82
|
redirect_to(newsletters_url)
|
97
83
|
end
|
98
|
-
|
99
|
-
protected
|
100
|
-
def find_newsletter
|
101
|
-
@newsletter = Newsletter.find_by_id(params[:id])
|
102
|
-
end
|
84
|
+
|
103
85
|
end
|
104
86
|
end
|
@@ -1,17 +1,9 @@
|
|
1
1
|
module Newsletter
|
2
2
|
class PiecesController < ::Newsletter::ApplicationController
|
3
|
-
before_filter :find_piece, :except => [:new,:create,:index]
|
4
3
|
before_filter :find_newsletter
|
5
4
|
before_filter :find_element
|
6
5
|
before_filter :find_area
|
7
6
|
|
8
|
-
def index
|
9
|
-
@pieces = @newsletter.pieces.active
|
10
|
-
end
|
11
|
-
|
12
|
-
def show
|
13
|
-
end
|
14
|
-
|
15
7
|
def new
|
16
8
|
@piece = Piece.new({
|
17
9
|
:area_id => @area.id,
|
@@ -44,30 +36,25 @@ module Newsletter
|
|
44
36
|
|
45
37
|
def destroy
|
46
38
|
@piece.destroy
|
47
|
-
redirect_to(
|
39
|
+
redirect_to(edit_newsletter_path(@newsletter))
|
48
40
|
end
|
49
41
|
|
50
42
|
protected
|
51
43
|
|
52
|
-
def find_piece
|
53
|
-
return @piece if @piece.try(:newsletter_id).present?
|
54
|
-
return nil unless params[:id].present?
|
55
|
-
@piece ||= Piece.find_by_id(params[:id])
|
56
|
-
end
|
57
|
-
|
58
44
|
def find_newsletter
|
59
|
-
|
60
|
-
|
45
|
+
@newsletter ||= (@piece.try(:newsletter) ||
|
46
|
+
::Newsletter::Newsletter.find(params[:newsletter_id] ||
|
47
|
+
params[:piece][:newsletter_id]))
|
61
48
|
end
|
62
49
|
|
63
50
|
def find_element
|
64
|
-
|
65
|
-
|
51
|
+
@element ||= (@piece.try(:element) ||
|
52
|
+
Element.find(params[:element_id] || params[:piece][:element_id]))
|
66
53
|
end
|
67
54
|
|
68
55
|
def find_area
|
69
|
-
|
70
|
-
|
56
|
+
@area ||= (@piece.try(:area) ||
|
57
|
+
Area.find(params[:area_id] || params[:piece][:area_id]))
|
71
58
|
end
|
72
59
|
end
|
73
60
|
end
|
@@ -1,11 +1,4 @@
|
|
1
1
|
module Newsletter
|
2
2
|
module DesignsHelper
|
3
|
-
#left 'newsletter' in function name for helper scoping
|
4
|
-
def add_newsletter_area_link(name)
|
5
|
-
link_to_function name, {:class => "button"} do |page|
|
6
|
-
page.insert_html :bottom, :areas, :partial => 'newsletter_area',
|
7
|
-
:object => Area.new
|
8
|
-
end
|
9
|
-
end
|
10
3
|
end
|
11
|
-
end
|
4
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Newsletter
|
2
|
+
module LayoutHelper
|
3
|
+
def title(value=nil, locals={})
|
4
|
+
if value.nil?
|
5
|
+
@page_title
|
6
|
+
else
|
7
|
+
@page_title = translate( value, locals)
|
8
|
+
"<h1>#{@page_title}</h1>".html_safe
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def use_show_for_resources?
|
13
|
+
::Newsletter.use_show_for_resources
|
14
|
+
rescue
|
15
|
+
# :nocov: shouldn't happen
|
16
|
+
false
|
17
|
+
# :nocov:
|
18
|
+
end
|
19
|
+
|
20
|
+
def show_title?
|
21
|
+
return @show_title if defined? @show_title
|
22
|
+
true
|
23
|
+
rescue
|
24
|
+
# :nocov: shouldn't happen
|
25
|
+
false
|
26
|
+
# :nocov:
|
27
|
+
end
|
28
|
+
|
29
|
+
def site_url
|
30
|
+
::Newsletter.site_url
|
31
|
+
rescue
|
32
|
+
# :nocov: shouldn't happen
|
33
|
+
"#{default_url_options[:protocol]||'http'}://#{default_url_options[:domain]}"
|
34
|
+
# :nocov:
|
35
|
+
end
|
36
|
+
|
37
|
+
def translate(key, options={})
|
38
|
+
super(key, options.merge(raise: true))
|
39
|
+
rescue I18n::MissingTranslationData
|
40
|
+
key
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -1,9 +1,5 @@
|
|
1
1
|
module Newsletter
|
2
2
|
module NewslettersHelper
|
3
|
-
def render_area
|
4
|
-
render @newsletter.design.areas.by_newsletter(@newsletter)
|
5
|
-
end
|
6
|
-
|
7
3
|
def is_email?
|
8
4
|
params[:mode].eql?('email')
|
9
5
|
end
|
@@ -15,10 +11,18 @@ module Newsletter
|
|
15
11
|
new_text.html_safe
|
16
12
|
end
|
17
13
|
|
14
|
+
def design_image(image_filename, options={})
|
15
|
+
options_text = ''
|
16
|
+
options.each_pair do |key,value|
|
17
|
+
options_text << %Q| #{key}="#{ERB::Util.html_escape value}"|
|
18
|
+
end
|
19
|
+
%Q|<img src="#{ERB::Util.html_escape @newsletter.image_uri(image_filename)}"#{options_text}/>|.html_safe
|
20
|
+
end
|
21
|
+
|
18
22
|
protected
|
19
23
|
def filter_eols_to_brs(text,orig_text)
|
20
24
|
return '' if text.blank?
|
21
|
-
return
|
25
|
+
return text if orig_text =~ /<br\s*\/>/i
|
22
26
|
text.gsub(/(\r\n|\r|\n)/,'<br/>')
|
23
27
|
end
|
24
28
|
|