├── .gitignore ├── .gpig ├── Gemfile ├── Gemfile.lock ├── MIT-LICENSE ├── README.md ├── Rakefile ├── app ├── assets │ ├── fonts │ │ ├── caboose │ │ │ ├── caboose-admin-menu.eot │ │ │ ├── caboose-admin-menu.svg │ │ │ ├── caboose-admin-menu.ttf │ │ │ └── caboose-admin-menu.woff │ │ ├── icomoon.eot │ │ ├── icomoon.svg │ │ ├── icomoon.ttf │ │ └── icomoon.woff │ ├── images │ │ └── caboose │ │ │ ├── .gitkeep │ │ │ ├── caboose_logo.png │ │ │ ├── caboose_logo_small.png │ │ │ ├── caboose_nav.png │ │ │ ├── caboose_nav_black.png │ │ │ ├── credit_cards.png │ │ │ ├── default_user_pic.png │ │ │ ├── file_types │ │ │ ├── doc.png │ │ │ ├── docx.png │ │ │ ├── gif.png │ │ │ ├── jpeg.png │ │ │ ├── jpg.png │ │ │ ├── mp3.png │ │ │ ├── mp4.png │ │ │ ├── pdf.png │ │ │ ├── png.png │ │ │ ├── pps.png │ │ │ ├── ppt.png │ │ │ ├── pptx.png │ │ │ ├── psd.png │ │ │ ├── rtf.png │ │ │ ├── tiff.png │ │ │ ├── xls.png │ │ │ ├── xlsx.png │ │ │ └── zip.png │ │ │ ├── grid.png │ │ │ ├── icons │ │ │ ├── copy.png │ │ │ ├── delete.png │ │ │ ├── down.png │ │ │ ├── left.png │ │ │ ├── right.png │ │ │ └── up.png │ │ │ ├── loading2.gif │ │ │ ├── loading_black_on_white.gif │ │ │ ├── loading_black_on_yellow.gif │ │ │ ├── loading_green.gif │ │ │ ├── loading_small_black_on_white.gif │ │ │ ├── loading_small_white_on_black.gif │ │ │ ├── loading_white_on_black.gif │ │ │ ├── lock.png │ │ │ ├── login_image.png │ │ │ ├── modal_overlay.png │ │ │ ├── password_image.png │ │ │ └── search.png │ ├── javascripts │ │ ├── caboose │ │ │ ├── admin.js │ │ │ ├── admin │ │ │ │ └── application.js │ │ │ ├── admin_block_edit.js │ │ │ ├── admin_block_type_parser_controller.js │ │ │ ├── admin_edit_invoice.js │ │ │ ├── admin_edit_modifications.js │ │ │ ├── admin_main.js │ │ │ ├── admin_media_index.js │ │ │ ├── admin_media_index_new.js │ │ │ ├── admin_page_new_blocks.js │ │ │ ├── admin_post_edit_content.js │ │ │ ├── admin_products.js │ │ │ ├── application.js │ │ │ ├── assets_controller.js │ │ │ ├── authorize.net.js │ │ │ ├── block_content_controller.js │ │ │ ├── block_content_controller_dragdrop.js │ │ │ ├── block_media_controller.js │ │ │ ├── block_modal_controllers │ │ │ │ ├── block_dd_modal_controller.js │ │ │ │ ├── block_modal_controller.js │ │ │ │ ├── button_modal_controller.js │ │ │ │ ├── media_modal_controller.js │ │ │ │ └── richtext_modal_controller.js │ │ │ ├── card.js │ │ │ ├── cart.js │ │ │ ├── cart_old.js │ │ │ ├── checkout.js │ │ │ ├── checkout │ │ │ │ ├── .checkout_stripe.js.marks │ │ │ │ ├── authnet_payment_method_controller.js │ │ │ │ ├── billing_address_controller.js │ │ │ │ ├── cart_controller.js │ │ │ │ ├── checkout_controller.js │ │ │ │ ├── gift_cards_controller.js │ │ │ │ ├── shipping_address_controller.js │ │ │ │ ├── shipping_method_controller.js │ │ │ │ └── stripe_payment_method_controller.js │ │ │ ├── checkout_addresses.js │ │ │ ├── checkout_confirm_without_payment.js │ │ │ ├── checkout_gift_cards.js │ │ │ ├── checkout_login_register.js │ │ │ ├── checkout_module.js │ │ │ ├── checkout_payment_authnet.js │ │ │ ├── checkout_payment_stripe.js │ │ │ ├── checkout_shipping.js │ │ │ ├── class.js │ │ │ ├── clipboard.js │ │ │ ├── date_format.js │ │ │ ├── google_spreadsheets.js │ │ │ ├── imageZoom.js │ │ │ ├── jquery-ui.drag-multiple.min.js │ │ │ ├── jquery.datetimepicker.js │ │ │ ├── jquery.detect.js │ │ │ ├── jquery.fileupload.js │ │ │ ├── jquery.iframe-transport.js │ │ │ ├── jquery.nestable.js │ │ │ ├── jquery.payment.js │ │ │ ├── jquery.placeholder.js │ │ │ ├── jquery.timepicker.js │ │ │ ├── lodash.min.js │ │ │ ├── main.js │ │ │ ├── media_browser.js │ │ │ ├── modal.js │ │ │ ├── modal_controller.js │ │ │ ├── modal_integration.js │ │ │ ├── model.form.page.js │ │ │ ├── model.form.user.js │ │ │ ├── model │ │ │ │ ├── all.js │ │ │ │ ├── attribute.js │ │ │ │ ├── bound_checkbox.js │ │ │ │ ├── bound_checkbox_multiple.js │ │ │ │ ├── bound_code.js │ │ │ │ ├── bound_color.js │ │ │ │ ├── bound_control.js │ │ │ │ ├── bound_date.js │ │ │ │ ├── bound_date_time.js │ │ │ │ ├── bound_file.js │ │ │ │ ├── bound_image.js │ │ │ │ ├── bound_image_bak.js │ │ │ │ ├── bound_media_image.js │ │ │ │ ├── bound_richtext.js │ │ │ │ ├── bound_s3_image.js │ │ │ │ ├── bound_select.js │ │ │ │ ├── bound_select_simple.js │ │ │ │ ├── bound_text.js │ │ │ │ ├── bound_textarea.js │ │ │ │ ├── bound_time.js │ │ │ │ ├── class.js │ │ │ │ ├── index_table.js │ │ │ │ ├── index_table_bak.js │ │ │ │ ├── model.js │ │ │ │ ├── model_binder.js │ │ │ │ ├── pager.js │ │ │ │ └── s3.js │ │ │ ├── my_account_edit_invoice.js │ │ │ ├── my_account_payment_method_controller.js │ │ │ ├── product.js │ │ │ ├── s3upload.js │ │ │ ├── shortcut.js │ │ │ ├── sidebar_controller.js │ │ │ ├── spectrum.js │ │ │ ├── station.js │ │ │ ├── tinymce_init.js │ │ │ ├── united_states.js │ │ │ └── variant_children_controller.js │ │ ├── chartjs │ │ │ ├── Chart.min.js │ │ │ └── gulpfile.js │ │ └── tinymce │ │ │ └── plugins │ │ │ └── caboose │ │ │ └── plugin.js │ ├── stylesheets │ │ └── caboose │ │ │ ├── admin.css │ │ │ ├── admin │ │ │ ├── _config.scss │ │ │ ├── application.css │ │ │ ├── component.css │ │ │ ├── froala.min.css │ │ │ ├── ie.scss │ │ │ ├── integrations │ │ │ │ ├── main.scss │ │ │ │ └── shopify.scss │ │ │ ├── jquery-ui-subnav-theme.min.css │ │ │ ├── layout.scss │ │ │ ├── main.scss │ │ │ ├── modules │ │ │ │ ├── body.scss │ │ │ │ ├── buttons.scss │ │ │ │ ├── countdown.css │ │ │ │ ├── crumbtrail.scss │ │ │ │ ├── data_table.scss │ │ │ │ ├── footer.scss │ │ │ │ ├── forms.scss │ │ │ │ ├── functions.scss │ │ │ │ ├── grid.scss │ │ │ │ ├── header.scss │ │ │ │ ├── headings.scss │ │ │ │ ├── main_nav.scss │ │ │ │ ├── message_boxes.scss │ │ │ │ ├── model_binder.scss │ │ │ │ ├── navigation.scss │ │ │ │ ├── order_bumps.scss │ │ │ │ ├── pager.scss │ │ │ │ ├── product_images.scss │ │ │ │ ├── products.css │ │ │ │ ├── search.scss │ │ │ │ ├── selects.scss │ │ │ │ ├── subnav_tabs.scss │ │ │ │ └── tabs.scss │ │ │ ├── page_edit │ │ │ │ ├── block_anchors.scss │ │ │ │ ├── block_overlays.scss │ │ │ │ ├── device_selector.scss │ │ │ │ ├── froala.scss │ │ │ │ ├── group_overlay.scss │ │ │ │ ├── layout.scss │ │ │ │ ├── main.scss │ │ │ │ ├── modal.scss │ │ │ │ ├── preview.scss │ │ │ │ ├── publish.scss │ │ │ │ ├── revisions.scss │ │ │ │ ├── subnav.scss │ │ │ │ └── top_nav.scss │ │ │ ├── pages │ │ │ │ ├── .page_edit.scss.marks │ │ │ │ ├── assets_index.css │ │ │ │ ├── block_edit_image.css.scss │ │ │ │ ├── media_index.css.scss │ │ │ │ ├── new_block.css │ │ │ │ ├── page_edit.scss │ │ │ │ ├── page_edit_content.scss │ │ │ │ ├── pages_index.scss │ │ │ │ └── post_edit_content.css │ │ │ ├── print.css │ │ │ └── slack.scss │ │ │ ├── admin_assets_index.css │ │ │ ├── admin_block_edit_image.css.scss │ │ │ ├── admin_crumbtrail.css.scss │ │ │ ├── admin_edit_page_content.scss │ │ │ ├── admin_edit_page_content_dragdrop.scss │ │ │ ├── admin_main.css.scss │ │ │ ├── admin_media_index.css.scss │ │ │ ├── admin_menu_icons.css │ │ │ ├── admin_new_block.css │ │ │ ├── admin_page_edit_content.css │ │ │ ├── admin_post_edit_content.css │ │ │ ├── admin_products.css │ │ │ ├── application.css │ │ │ ├── bound_input.css │ │ │ ├── caboose.css │ │ │ ├── cart.css.scss │ │ │ ├── checkout.css.scss │ │ │ ├── fonts.css │ │ │ ├── icomoon_fonts.css │ │ │ ├── icons.txt │ │ │ ├── jquery.datetimepicker.css │ │ │ ├── jquery.timepicker.css │ │ │ ├── login.scss │ │ │ ├── message_boxes.css.scss │ │ │ ├── modal.css │ │ │ ├── modal_inline.css │ │ │ ├── modal_main.css │ │ │ ├── model_binder.css │ │ │ ├── my_account.scss │ │ │ ├── my_account_edit_invoice.css.scss │ │ │ ├── nestable.css │ │ │ ├── page_bar_generator.css │ │ │ ├── print.css │ │ │ ├── product_images.css.scss │ │ │ ├── product_options.css.scss │ │ │ ├── register.css │ │ │ ├── responsive.css.scss │ │ │ ├── spectrum.css │ │ │ ├── station_modal.css │ │ │ ├── station_sidebar.css │ │ │ └── tinymce.css │ └── templates │ │ └── caboose │ │ ├── cart │ │ ├── add_to_cart.jst.ejs │ │ └── line_items.jst.ejs │ │ ├── checkout │ │ ├── address.jst.ejs │ │ ├── forms │ │ │ ├── guest.jst.ejs │ │ │ ├── register.jst.ejs │ │ │ └── signin.jst.ejs │ │ ├── line_items.jst.ejs │ │ ├── login.jst.ejs │ │ ├── payment.jst.ejs │ │ └── shipping.jst.ejs │ │ ├── messages │ │ └── error.jst.ejs │ │ └── product │ │ ├── images.jst.ejs │ │ ├── images_old.jst.ejs │ │ └── options.jst.ejs ├── controllers │ └── caboose │ │ ├── ab_options_controller.rb │ │ ├── ab_variants_controller.rb │ │ ├── admin_controller.rb │ │ ├── application_controller.rb │ │ ├── assets_controller.rb │ │ ├── billing_addresses_controller.rb │ │ ├── block_type_categories_controller.rb │ │ ├── block_type_sources_controller.rb │ │ ├── block_type_store_controller.rb │ │ ├── block_types_controller.rb │ │ ├── blocks_controller.rb │ │ ├── calendars_controller.rb │ │ ├── cart_controller.rb │ │ ├── categories_controller.rb │ │ ├── checkout_controller.rb │ │ ├── checkout_controller_bak.rb │ │ ├── domains_controller.rb │ │ ├── event_custom_field_values_controller.rb │ │ ├── event_custom_fields_controller.rb │ │ ├── event_groups_controller.rb │ │ ├── events_controller.rb │ │ ├── fonts_controller.rb │ │ ├── gift_cards_controller.rb │ │ ├── google_spreadsheets_controller.rb │ │ ├── inbox_controller.rb │ │ ├── invoice_packages_controller.rb │ │ ├── invoice_reports_controller.rb │ │ ├── invoice_transactions_controller.rb │ │ ├── invoices_controller.rb │ │ ├── line_items_controller.rb │ │ ├── login_controller.rb │ │ ├── login_logs_controller.rb │ │ ├── logout_controller.rb │ │ ├── media_categories_controller.rb │ │ ├── media_controller.rb │ │ ├── modal_controller.rb │ │ ├── modification_value_input_fields_controller.rb │ │ ├── modification_values_controller.rb │ │ ├── modifications_controller.rb │ │ ├── my_account_controller.rb │ │ ├── my_account_invoices_controller.rb │ │ ├── my_account_line_items_controller.rb │ │ ├── page_custom_field_values_controller.rb │ │ ├── page_custom_fields_controller.rb │ │ ├── page_permissions_controller.rb │ │ ├── page_templates_controller.rb │ │ ├── pages_controller.rb │ │ ├── permissions_controller.rb │ │ ├── post_categories_controller.rb │ │ ├── post_custom_field_values_controller.rb │ │ ├── post_custom_fields_controller.rb │ │ ├── posts_controller.rb │ │ ├── product_images_controller.rb │ │ ├── products_controller.rb │ │ ├── redirects_controller.rb │ │ ├── register_controller.rb │ │ ├── retargeting_controller.rb │ │ ├── reviews_controller.rb │ │ ├── roles_controller.rb │ │ ├── settings_controller.rb │ │ ├── shipping_addresses_controller.rb │ │ ├── shipping_packages_controller.rb │ │ ├── sites_controller.rb │ │ ├── smtp_controller.rb │ │ ├── sns_controller.rb │ │ ├── social_controller.rb │ │ ├── stackable_groups_controller.rb │ │ ├── station_controller.rb │ │ ├── store_controller.rb │ │ ├── subscriptions_controller.rb │ │ ├── theme_files_controller.rb │ │ ├── themes_controller.rb │ │ ├── users_controller.rb │ │ ├── variant_children_controller.rb │ │ ├── variant_limits_controller.rb │ │ ├── variants_controller.rb │ │ └── vendors_controller.rb ├── helpers │ └── caboose │ │ ├── application_helper.rb │ │ ├── categories_helper.rb │ │ ├── checkout_helper.rb │ │ ├── pages_helper.rb │ │ ├── permissions_helper.rb │ │ └── products_helper.rb ├── mailers │ └── caboose │ │ ├── caboose_mailer.rb │ │ ├── invoices_mailer.rb │ │ └── login_mailer.rb ├── models │ └── caboose │ │ ├── ab_option.rb │ │ ├── ab_testing.rb │ │ ├── ab_value.rb │ │ ├── ab_variant.rb │ │ ├── address.rb │ │ ├── approval_request.rb │ │ ├── asset.rb │ │ ├── asset_manager.rb │ │ ├── asset_manifest.rb │ │ ├── authenticator.rb │ │ ├── authnet.rb │ │ ├── block.rb │ │ ├── block_cache.rb │ │ ├── block_cache_file.rb │ │ ├── block_cache_image.rb │ │ ├── block_type.rb │ │ ├── block_type_category.rb │ │ ├── block_type_icons.rb │ │ ├── block_type_parser.rb │ │ ├── block_type_site_membership.rb │ │ ├── block_type_source.rb │ │ ├── block_type_summary.rb │ │ ├── caboose_plugin.rb │ │ ├── calendar.rb │ │ ├── calendar_event.rb │ │ ├── calendar_event_group.rb │ │ ├── category.rb │ │ ├── category_membership.rb │ │ ├── comment_routes.rb │ │ ├── core_plugin.rb │ │ ├── crumbtrail.rb │ │ ├── customization_membership.rb │ │ ├── database_session.rb │ │ ├── discount.rb │ │ ├── domain.rb │ │ ├── domain_constraint.rb │ │ ├── event_custom_field.rb │ │ ├── event_custom_field_value.rb │ │ ├── export.rb │ │ ├── font.rb │ │ ├── font_family.rb │ │ ├── font_variant.rb │ │ ├── form_submission.rb │ │ ├── ga.rb │ │ ├── gift_card.rb │ │ ├── invoice.rb │ │ ├── invoice_discount.rb │ │ ├── invoice_log.rb │ │ ├── invoice_package.rb │ │ ├── invoice_package_calculator.rb │ │ ├── invoice_pdf.rb │ │ ├── invoice_reporter.rb │ │ ├── invoice_transaction.rb │ │ ├── letsencrypt_plugin_challenge.rb │ │ ├── letsencrypt_plugin_setting.rb │ │ ├── line_item.rb │ │ ├── line_item_modification.rb │ │ ├── login_log.rb │ │ ├── media.rb │ │ ├── media_category.rb │ │ ├── menu_block.rb │ │ ├── message.rb │ │ ├── mimetype.rb │ │ ├── model_binder.rb │ │ ├── modification.rb │ │ ├── modification_value.rb │ │ ├── modification_value_input_field.rb │ │ ├── page.rb │ │ ├── page_bar_generator.rb │ │ ├── page_cache.rb │ │ ├── page_cacher.rb │ │ ├── page_custom_field.rb │ │ ├── page_custom_field_value.rb │ │ ├── page_permission.rb │ │ ├── page_tag.rb │ │ ├── page_template.rb │ │ ├── page_template_category.rb │ │ ├── pager.rb │ │ ├── payment_processors │ │ ├── authorizenet.rb │ │ └── base.rb │ │ ├── pending_invoices_pdf.rb │ │ ├── permanent_redirect.rb │ │ ├── permission.rb │ │ ├── post.rb │ │ ├── post_category.rb │ │ ├── post_category_membership.rb │ │ ├── post_custom_field.rb │ │ ├── post_custom_field_value.rb │ │ ├── product.rb │ │ ├── product_category_sort.rb │ │ ├── product_default.rb │ │ ├── product_image.rb │ │ ├── product_image_variant.rb │ │ ├── retargeting_config.rb │ │ ├── review.rb │ │ ├── rich_text_block_parser.rb │ │ ├── role.rb │ │ ├── role_membership.rb │ │ ├── role_permission.rb │ │ ├── schema.rb │ │ ├── search_filter.rb │ │ ├── setting.rb │ │ ├── shipping_calculator.rb │ │ ├── shipping_method.rb │ │ ├── shipping_method_loader.rb │ │ ├── shipping_package.rb │ │ ├── shipping_package_method.rb │ │ ├── site.rb │ │ ├── site_membership.rb │ │ ├── smtp_config.rb │ │ ├── social_config.rb │ │ ├── stackable_group.rb │ │ ├── states.rb │ │ ├── std_class.rb │ │ ├── store_config.rb │ │ ├── subscription.rb │ │ ├── tax_calculator.rb │ │ ├── tax_line.rb │ │ ├── theme.rb │ │ ├── theme_file.rb │ │ ├── theme_file_membership.rb │ │ ├── user.rb │ │ ├── utilities │ │ └── schema.rb │ │ ├── variant.rb │ │ ├── variant_child.rb │ │ ├── variant_default.rb │ │ ├── variant_limit.rb │ │ ├── vendor.rb │ │ ├── wish_list.rb │ │ └── wish_list_line_item.rb └── views │ ├── caboose │ ├── ab_variants │ │ ├── admin_edit.html.erb │ │ ├── admin_index.html.erb │ │ └── admin_new.html.erb │ ├── admin │ │ ├── _content.html.erb │ │ ├── _fonts.html.erb │ │ ├── _footer.html.erb │ │ ├── _header.html.erb │ │ ├── _icons.html.erb │ │ ├── _mobile_navigation.html.erb │ │ ├── _post.html.erb │ │ └── index.html.erb │ ├── application │ │ ├── show.html.erb │ │ └── under_construction.html.erb │ ├── assets │ │ ├── admin_ace.html.erb │ │ └── admin_index.html.erb │ ├── block_type_categories │ │ ├── admin_edit.html.erb │ │ ├── admin_index.html.erb │ │ └── admin_new.html.erb │ ├── block_type_sources │ │ ├── admin_edit.html.erb │ │ ├── admin_index.html.erb │ │ └── admin_new.html.erb │ ├── block_type_store │ │ ├── admin_details.html.erb │ │ └── admin_index.html.erb │ ├── block_types │ │ ├── admin_edit.html.erb │ │ ├── admin_edit_btsm_css.html.erb │ │ ├── admin_edit_btsm_html.html.erb │ │ ├── admin_edit_icon.html.erb │ │ ├── admin_edit_render_function.html.erb │ │ ├── admin_edit_sass.html.erb │ │ ├── admin_error_log.html.erb │ │ ├── admin_index.html.erb │ │ ├── admin_new.html.erb │ │ └── admin_parse_form.html.erb │ ├── blocks │ │ ├── ._post.html.erb.marks │ │ ├── _block.html.erb │ │ ├── _checkbox.html.erb │ │ ├── _controller_view_content.html.erb │ │ ├── _file.html.erb │ │ ├── _ga.html.erb │ │ ├── _ga_events.html.erb │ │ ├── _ga_old.html.erb │ │ ├── _google_spreadsheet_cell_value.html.erb │ │ ├── _heading.html.erb │ │ ├── _html.html.erb │ │ ├── _image.html.erb │ │ ├── _image2.html.erb │ │ ├── _layout_basic.html.erb │ │ ├── _layout_basic_content.html.erb │ │ ├── _layout_basic_footer.html.erb │ │ ├── _layout_basic_header.html.erb │ │ ├── _layout_left_sidebar.html.erb │ │ ├── _layout_left_sidebar_content.html.erb │ │ ├── _layout_left_sidebar_footer.html.erb │ │ ├── _layout_left_sidebar_header.html.erb │ │ ├── _layout_left_sidebar_sidebar.html.erb │ │ ├── _layout_post.html.erb │ │ ├── _layout_post_content.html.erb │ │ ├── _layout_post_footer.html.erb │ │ ├── _layout_post_header.html.erb │ │ ├── _layout_right_sidebar.html.erb │ │ ├── _layout_right_sidebar_content.html.erb │ │ ├── _layout_right_sidebar_footer.html.erb │ │ ├── _layout_right_sidebar_header.html.erb │ │ ├── _layout_right_sidebar_sidebar.html.erb │ │ ├── _post.html.erb │ │ ├── _product_category.html.erb │ │ ├── _product_crumbtrail.html.erb │ │ ├── _product_details.html.erb │ │ ├── _product_sales.html.erb │ │ ├── _products.html.erb │ │ ├── _render_function.html.erb │ │ ├── _retargeting.html.erb │ │ ├── _richtext.html.erb │ │ ├── _ruby_block.html.erb │ │ ├── _select.html.erb │ │ ├── _selector_switch_one.html.erb │ │ ├── _selector_switch_three.html.erb │ │ ├── _selector_switch_two.html.erb │ │ ├── _text.html.erb │ │ ├── admin_edit.html.erb │ │ ├── admin_edit_advanced.html.erb │ │ ├── admin_edit_custom.html.erb │ │ ├── admin_edit_file.html.erb │ │ ├── admin_edit_h1.html.erb │ │ ├── admin_edit_h2.html.erb │ │ ├── admin_edit_h3.html.erb │ │ ├── admin_edit_h4.html.erb │ │ ├── admin_edit_h5.html.erb │ │ ├── admin_edit_h6.html.erb │ │ ├── admin_edit_heading_old.html │ │ ├── admin_edit_image.html.erb │ │ ├── admin_edit_richtextold.html.erb │ │ ├── admin_new.html.erb │ │ ├── admin_render_second_level.json.erb │ │ └── tinymce.js.erb │ ├── calendars │ │ ├── admin_edit.html.erb │ │ ├── admin_edit_old.html.erb │ │ └── admin_index.html.erb │ ├── cart │ │ └── index.html.erb │ ├── categories │ │ ├── admin_edit.html.erb │ │ ├── admin_index.html.erb │ │ ├── admin_new.html.erb │ │ └── admin_sort_children.html.erb │ ├── checkout │ │ ├── _address_form.html.erb │ │ ├── _billing_form.html.erb │ │ ├── _cart.html.erb │ │ ├── _cart_old.html.erb │ │ ├── _confirm.html.erb │ │ ├── _confirm_table.html.erb │ │ ├── _order_discount.html.erb │ │ ├── _shipping_address.html.erb │ │ ├── _shipping_method.html.erb │ │ ├── _shipping_method_form.html.erb │ │ ├── addresses.html.erb │ │ ├── authnet.html.erb │ │ ├── authnet_profile_form.html.erb │ │ ├── authnet_relay.html.erb │ │ ├── authnet_response.html.erb │ │ ├── authnet_response_handler.html.erb │ │ ├── billing.html.erb │ │ ├── checkout.html.erb │ │ ├── confirm_without_payment.html.erb │ │ ├── discount.html.erb │ │ ├── empty.html.erb │ │ ├── error.html.erb │ │ ├── gift_cards.html.erb │ │ ├── index.html.erb │ │ ├── login.html.erb │ │ ├── payment_authnet.html.erb │ │ ├── payment_stripe.html.erb │ │ ├── payscape_relay.html.erb │ │ ├── relay_old.html.erb │ │ ├── relay_postMessage.html.erb │ │ ├── shipping.html.erb │ │ └── thanks.html.erb │ ├── event_custom_fields │ │ ├── admin_edit.html.erb │ │ └── admin_index.html.erb │ ├── events │ │ ├── admin_edit.html.erb │ │ ├── admin_index.html.erb │ │ ├── admin_new.html.erb │ │ └── show.html.erb │ ├── extras │ │ ├── error.html.erb │ │ ├── error404.html.erb │ │ └── error_invalid_site.html.erb │ ├── fonts │ │ └── admin_index.html.erb │ ├── gift_cards │ │ ├── admin_edit.html.erb │ │ └── admin_index.html.erb │ ├── inbox │ │ ├── admin_index.html.erb │ │ ├── admin_show.html.erb │ │ └── admin_spam.html.erb │ ├── invoices │ │ ├── _admin_footer.html.erb │ │ ├── _admin_header.html.erb │ │ ├── _quickbooks_invoice.html.erb │ │ ├── admin_city_report.html.erb │ │ ├── admin_delete_form.html.erb │ │ ├── admin_edit.html.erb │ │ ├── admin_index.html.erb │ │ ├── admin_invalid_order.html.erb │ │ ├── admin_new.html.erb │ │ ├── admin_print.html.erb │ │ ├── admin_summary_report.html.erb │ │ └── admin_user_edit.html.erb │ ├── invoices_mailer │ │ ├── customer_new_invoice.html.erb │ │ ├── customer_payment_authorization.html.erb │ │ ├── customer_receipt.html.erb │ │ ├── customer_status_updated.html.erb │ │ ├── fulfillment_new_invoice.html.erb │ │ ├── shipping_invoice_ready.html.erb │ │ └── test_email.html.erb │ ├── line_items │ │ └── admin_new.html.erb │ ├── login │ │ ├── forgot_password_form.html.erb │ │ ├── index.html.erb │ │ └── reset_password_form.html.erb │ ├── login_logs │ │ ├── admin_index.html.erb │ │ └── admin_index_for_user.html.erb │ ├── login_mailer │ │ ├── forgot_password_email.html.erb │ │ └── locked_account.html.erb │ ├── media │ │ ├── admin_edit.html.erb │ │ ├── admin_edit_description.html.erb │ │ └── admin_index.html.erb │ ├── modal │ │ └── index.html.erb │ ├── modification_value_input_fields │ │ └── admin_edit.html.erb │ ├── my_account │ │ ├── index.html.erb │ │ └── index_old.html.erb │ ├── my_account_invoices │ │ ├── authnet_relay.html.erb │ │ ├── authnet_response.html.erb │ │ ├── edit.html.erb │ │ ├── index.html.erb │ │ └── payment_form.html.erb │ ├── page_custom_fields │ │ ├── admin_edit.html.erb │ │ └── admin_index.html.erb │ ├── page_templates │ │ ├── admin_edit.html.erb │ │ ├── admin_index.html.erb │ │ └── admin_new.html.erb │ ├── pages │ │ ├── _admin_footer.html.erb │ │ ├── _admin_header.html.erb │ │ ├── _content.html.erb │ │ ├── _new_block_header.html.erb │ │ ├── admin_delete_form.html.erb │ │ ├── admin_duplicate_form.html.erb │ │ ├── admin_edit_child_sort_order.html.erb │ │ ├── admin_edit_content.html.erb │ │ ├── admin_edit_css.html.erb │ │ ├── admin_edit_custom_fields.html.erb │ │ ├── admin_edit_general.html.erb │ │ ├── admin_edit_js.html.erb │ │ ├── admin_edit_layout.html.erb │ │ ├── admin_edit_permissions.html.erb │ │ ├── admin_edit_seo.html.erb │ │ ├── admin_index.html.erb │ │ ├── admin_new.html.erb │ │ ├── admin_new_old.html.erb │ │ ├── admin_sitemap.html.erb │ │ ├── preview.html.erb │ │ ├── show.html.erb │ │ ├── test.html.erb │ │ ├── update_pic.html.erb │ │ └── update_resume.html.erb │ ├── permissions │ │ ├── edit.html.erb │ │ ├── index.html.erb │ │ └── new.html.erb │ ├── post_categories │ │ ├── admin_edit.html.erb │ │ ├── admin_index.html.erb │ │ └── admin_new.html.erb │ ├── post_custom_fields │ │ ├── admin_edit.html.erb │ │ └── admin_index.html.erb │ ├── posts │ │ ├── _admin_footer.html.erb │ │ ├── _admin_header.html.erb │ │ ├── admin_delete_form.html.erb │ │ ├── admin_edit_categories.html.erb │ │ ├── admin_edit_content.html.erb │ │ ├── admin_edit_content_old.html.erb │ │ ├── admin_edit_general.html.erb │ │ ├── admin_edit_layout.html.erb │ │ ├── admin_edit_preview.html.erb │ │ ├── admin_index.html.erb │ │ ├── admin_new.html.erb │ │ ├── admin_preview_post.html.erb │ │ ├── detail.html.erb │ │ ├── index.html.erb │ │ └── show.html.erb │ ├── products │ │ ├── _admin_footer.html.erb │ │ ├── _admin_header.html.erb │ │ ├── _sort_options.html.erb │ │ ├── admin_add_upcs.html.erb │ │ ├── admin_alternate_ids.html.erb │ │ ├── admin_delete_form.html.erb │ │ ├── admin_edit_categories.html.erb │ │ ├── admin_edit_category_images.html.erb │ │ ├── admin_edit_description.html.erb │ │ ├── admin_edit_general.html.erb │ │ ├── admin_edit_images.html.erb │ │ ├── admin_edit_options.html.erb │ │ ├── admin_edit_seo.html.erb │ │ ├── admin_group_variants.html.erb │ │ ├── admin_index.html.erb │ │ ├── admin_new.html.erb │ │ ├── admin_sort.html copy.erb │ │ ├── admin_sort.html.erb │ │ ├── details.html.erb │ │ ├── index.html.erb │ │ ├── not_available.html.erb │ │ └── sales.html.erb │ ├── redirects │ │ ├── admin_edit.html.erb │ │ ├── admin_index.html.erb │ │ └── admin_new.html.erb │ ├── register │ │ └── index.html.erb │ ├── retargeting │ │ └── admin_edit.html.erb │ ├── roles │ │ ├── edit.html.erb │ │ ├── index.html.erb │ │ └── new.html.erb │ ├── settings │ │ ├── edit.html.erb │ │ ├── index.html.erb │ │ └── new.html.erb │ ├── shipping_packages │ │ ├── admin_edit.html.erb │ │ └── admin_index.html.erb │ ├── sites │ │ ├── _admin_footer.html.erb │ │ ├── _admin_header.html.erb │ │ ├── admin_delete_form.html.erb │ │ ├── admin_edit.html.erb │ │ ├── admin_edit_block_types.html.erb │ │ ├── admin_edit_code.html.erb │ │ ├── admin_edit_codes.html.erb │ │ ├── admin_edit_contact.html.erb │ │ ├── admin_edit_css.html.erb │ │ ├── admin_edit_js.html.erb │ │ ├── admin_index.html.erb │ │ ├── admin_new.html.erb │ │ ├── robots.text.erb │ │ └── sitemap.xml.erb │ ├── smtp │ │ └── admin_edit.html.erb │ ├── social │ │ ├── admin_edit.html.erb │ │ └── analytics.html.erb │ ├── stackable_groups │ │ └── admin_index.html.erb │ ├── station │ │ └── index.html.erb │ ├── store │ │ ├── _admin_footer.html.erb │ │ ├── _admin_header.html.erb │ │ ├── admin_edit_defaults.html.erb │ │ ├── admin_edit_general.html.erb │ │ ├── admin_edit_packages.html.erb │ │ ├── admin_edit_payment.html.erb │ │ ├── admin_edit_shipping.html.erb │ │ └── admin_edit_tax.html.erb │ ├── subscriptions │ │ ├── admin_edit.html.erb │ │ ├── admin_index.html.erb │ │ └── admin_user_index.html.erb │ ├── theme_files │ │ ├── admin_edit.html.erb │ │ └── admin_index.html.erb │ ├── themes │ │ ├── admin_edit.html.erb │ │ └── admin_sass.html.erb │ ├── users │ │ ├── _admin_footer.html.erb │ │ ├── _admin_header.html.erb │ │ ├── admin_delete_form.html.erb │ │ ├── admin_edit.html.erb │ │ ├── admin_edit_password.html.erb │ │ ├── admin_edit_payment_method.html.erb │ │ ├── admin_edit_roles.html.erb │ │ ├── admin_import_form.html.erb │ │ ├── admin_index.html.erb │ │ ├── admin_new.html.erb │ │ └── admin_update_pic.html.erb │ ├── variant_limits │ │ ├── admin_edit.html.erb │ │ └── admin_user_index.html.erb │ ├── variants │ │ ├── admin_edit.html.erb │ │ ├── admin_edit_option1_media.html.erb │ │ ├── admin_edit_option2_media.html.erb │ │ ├── admin_edit_option3_media.html.erb │ │ ├── admin_edit_sort_order.html.erb │ │ ├── admin_group.html.erb │ │ ├── admin_index.html.erb │ │ └── admin_new.html.erb │ └── vendors │ │ ├── admin_edit.html.erb │ │ ├── admin_index.html.erb │ │ └── admin_new.html.erb │ └── layouts │ └── caboose │ ├── _content.html.erb │ ├── _station.html.erb │ ├── _station_link.html.erb │ ├── _top_nav.html.erb │ ├── admin.html.erb │ ├── admin_empty.html.erb │ ├── application.html.erb │ ├── empty.html.erb │ ├── error404.html.erb │ ├── modal.html.erb │ ├── no_layout.html.erb │ └── store │ ├── _banner.html.erb │ ├── _banner2.html.erb │ ├── _footer.html.erb │ ├── _header.html.erb │ ├── _sidebar.html.erb │ ├── application.html.erb │ ├── authorize_net.erb │ ├── layout_about.html.erb │ ├── layout_blog.html.erb │ ├── layout_confirm.html.erb │ ├── layout_contact.html.erb │ ├── layout_default.html.erb │ ├── layout_detail.html.erb │ ├── layout_order.html.erb │ ├── layout_pricing.html.erb │ ├── layout_product.html.erb │ ├── layout_profile.html.erb │ ├── layout_single.html.erb │ ├── layout_testimonial.html.erb │ └── layout_testing.html.erb ├── bin └── caboose ├── caboose-cms.gemspec ├── changelog.txt ├── config ├── routes.rb ├── routes_old.rb └── tinymce.yml ├── db └── migrate │ └── 000_add_linked_resources_to_page.rb ├── eval_test.rb ├── lib ├── caboose.rb ├── caboose │ ├── caboose_helper.rb │ ├── engine.rb │ └── version.rb └── tasks │ ├── caboose.rake │ └── caboose_sync.rake ├── psd ├── magnifying_glass.psd └── search.png ├── script └── rails ├── spec ├── factories │ ├── caboose_blocks.rb │ └── caboose_users.rb └── models │ ├── block_spec.rb │ └── user_spec.rb └── test ├── caboose_test.rb ├── dummy ├── README.rdoc ├── Rakefile ├── app │ ├── assets │ │ ├── javascripts │ │ │ └── application.js │ │ └── stylesheets │ │ │ └── application.css │ ├── controllers │ │ └── application_controller.rb │ ├── helpers │ │ └── application_helper.rb │ ├── mailers │ │ └── .gitkeep │ ├── models │ │ └── .gitkeep │ └── views │ │ └── layouts │ │ └── application.html.erb ├── config.ru ├── config │ ├── application.rb │ ├── boot.rb │ ├── database.yml │ ├── environment.rb │ ├── environments │ │ ├── development.rb │ │ ├── production.rb │ │ └── test.rb │ ├── initializers │ │ ├── backtrace_silencers.rb │ │ ├── inflections.rb │ │ ├── mime_types.rb │ │ ├── secret_token.rb │ │ ├── session_store.rb │ │ └── wrap_parameters.rb │ ├── locales │ │ └── en.yml │ └── routes.rb ├── db │ └── test.sqlite3 ├── lib │ └── assets │ │ └── .gitkeep ├── log │ ├── .gitkeep │ └── test.log ├── public │ ├── 404.html │ ├── 422.html │ ├── 500.html │ └── favicon.ico └── script │ └── rails ├── integration └── navigation_test.rb └── test_helper.rb /.gitignore: -------------------------------------------------------------------------------- 1 | *.rbc 2 | *.sassc 3 | .sass-cache 4 | capybara-*.html 5 | .rspec 6 | /.bundle 7 | /vendor/bundle 8 | /log/* 9 | /tmp/* 10 | /db/*.sqlite3 11 | /public/system/* 12 | /coverage/ 13 | /spec/tmp/* 14 | /chester 15 | **.orig 16 | rerun.txt 17 | pickle-email-*.html 18 | *.gem 19 | .DS_Store 20 | -------------------------------------------------------------------------------- /.gpig: -------------------------------------------------------------------------------- 1 | 2 | version_file: lib/caboose/version.rb 3 | repo_url: https://github.com/williambarry007/caboose-cms.git 4 | 5 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | # Caboose CMS 2 | 3 | source "http://rubygems.org" 4 | 5 | # Declare your gem's dependencies in caboose.gemspec. 6 | # Bundler will treat runtime dependencies like base dependencies, and 7 | # development dependencies will be added by default to the :development group. 8 | gemspec 9 | -------------------------------------------------------------------------------- /MIT-LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2013 William Barry 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | begin 3 | require 'bundler/setup'; Bundler.setup(:default, :development) 4 | rescue LoadError 5 | puts 'You must `gem install bundler` and `bundle install` to run rake tasks' 6 | end 7 | 8 | APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__) 9 | load 'rails/tasks/engine.rake' 10 | 11 | Bundler::GemHelper.install_tasks 12 | 13 | Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f } 14 | 15 | require 'rspec/core' 16 | require 'rspec/core/rake_task' 17 | 18 | desc "Run all specs in spec directory (excluding plugin specs)" 19 | RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare') 20 | 21 | #task :default => :test 22 | task :default => :spec 23 | task :test => :spec -------------------------------------------------------------------------------- /app/assets/fonts/caboose/caboose-admin-menu.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/fonts/caboose/caboose-admin-menu.eot -------------------------------------------------------------------------------- /app/assets/fonts/caboose/caboose-admin-menu.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/fonts/caboose/caboose-admin-menu.ttf -------------------------------------------------------------------------------- /app/assets/fonts/caboose/caboose-admin-menu.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/fonts/caboose/caboose-admin-menu.woff -------------------------------------------------------------------------------- /app/assets/fonts/icomoon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/fonts/icomoon.eot -------------------------------------------------------------------------------- /app/assets/fonts/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/fonts/icomoon.ttf -------------------------------------------------------------------------------- /app/assets/fonts/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/fonts/icomoon.woff -------------------------------------------------------------------------------- /app/assets/images/caboose/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/.gitkeep -------------------------------------------------------------------------------- /app/assets/images/caboose/caboose_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/caboose_logo.png -------------------------------------------------------------------------------- /app/assets/images/caboose/caboose_logo_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/caboose_logo_small.png -------------------------------------------------------------------------------- /app/assets/images/caboose/caboose_nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/caboose_nav.png -------------------------------------------------------------------------------- /app/assets/images/caboose/caboose_nav_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/caboose_nav_black.png -------------------------------------------------------------------------------- /app/assets/images/caboose/credit_cards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/credit_cards.png -------------------------------------------------------------------------------- /app/assets/images/caboose/default_user_pic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/default_user_pic.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/doc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/doc.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/docx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/docx.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/gif.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/gif.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/jpeg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/jpeg.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/jpg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/jpg.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/mp3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/mp3.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/mp4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/mp4.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/pdf.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/png.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/png.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/pps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/pps.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/ppt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/ppt.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/pptx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/pptx.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/psd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/psd.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/rtf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/rtf.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/tiff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/tiff.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/xls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/xls.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/xlsx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/xlsx.png -------------------------------------------------------------------------------- /app/assets/images/caboose/file_types/zip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/file_types/zip.png -------------------------------------------------------------------------------- /app/assets/images/caboose/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/grid.png -------------------------------------------------------------------------------- /app/assets/images/caboose/icons/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/icons/copy.png -------------------------------------------------------------------------------- /app/assets/images/caboose/icons/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/icons/delete.png -------------------------------------------------------------------------------- /app/assets/images/caboose/icons/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/icons/down.png -------------------------------------------------------------------------------- /app/assets/images/caboose/icons/left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/icons/left.png -------------------------------------------------------------------------------- /app/assets/images/caboose/icons/right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/icons/right.png -------------------------------------------------------------------------------- /app/assets/images/caboose/icons/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/icons/up.png -------------------------------------------------------------------------------- /app/assets/images/caboose/loading2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/loading2.gif -------------------------------------------------------------------------------- /app/assets/images/caboose/loading_black_on_white.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/loading_black_on_white.gif -------------------------------------------------------------------------------- /app/assets/images/caboose/loading_black_on_yellow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/loading_black_on_yellow.gif -------------------------------------------------------------------------------- /app/assets/images/caboose/loading_green.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/loading_green.gif -------------------------------------------------------------------------------- /app/assets/images/caboose/loading_small_black_on_white.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/loading_small_black_on_white.gif -------------------------------------------------------------------------------- /app/assets/images/caboose/loading_small_white_on_black.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/loading_small_white_on_black.gif -------------------------------------------------------------------------------- /app/assets/images/caboose/loading_white_on_black.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/loading_white_on_black.gif -------------------------------------------------------------------------------- /app/assets/images/caboose/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/lock.png -------------------------------------------------------------------------------- /app/assets/images/caboose/login_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/login_image.png -------------------------------------------------------------------------------- /app/assets/images/caboose/modal_overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/modal_overlay.png -------------------------------------------------------------------------------- /app/assets/images/caboose/password_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/password_image.png -------------------------------------------------------------------------------- /app/assets/images/caboose/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/images/caboose/search.png -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/admin.js: -------------------------------------------------------------------------------- 1 | // This is a manifest file that'll be compiled into application.js, which will include all the files 2 | // listed below. 3 | // 4 | // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, 5 | // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. 6 | // 7 | // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the 8 | // the compiled file. 9 | // 10 | // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD 11 | // GO AFTER THE REQUIRES BELOW. 12 | // 13 | //= require jquery 14 | //= require jquery_ujs 15 | //= require jquery-ui 16 | //= require colorbox-rails 17 | //= require caboose/jquery.datetimepicker 18 | //= require caboose/jquery.placeholder 19 | //= require caboose/modal_integration 20 | //= require caboose/admin_main -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/admin/application.js: -------------------------------------------------------------------------------- 1 | // This is a manifest file that'll be compiled into application.js, which will include all the files 2 | // listed below. 3 | // 4 | // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, 5 | // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. 6 | // 7 | // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the 8 | // the compiled file. 9 | // 10 | // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD 11 | // GO AFTER THE REQUIRES BELOW. 12 | // 13 | //= require jquery 14 | //= require jquery_ujs 15 | //= require jquery-ui 16 | //= require colorbox-rails 17 | //= require caboose/jquery.datetimepicker 18 | //= require caboose/jquery.placeholder 19 | //= require caboose/modal_integration 20 | //= require caboose/admin_main -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/admin_main.js: -------------------------------------------------------------------------------- 1 | 2 | function curr(x) 3 | { 4 | if (!x) return '0.00' 5 | var t = typeof x; 6 | if (t == 'boolean') return '0.00'; 7 | if (t == 'number') return x.toFixed(2); 8 | if (t == 'string') return parseFloat(x).toFixed(2); 9 | console.log("curr doesn't know what this is:"); 10 | console.log(x); 11 | console.log(t); 12 | return 'STAHP' 13 | } 14 | 15 | function add_to_crumbtrail(href, text) 16 | { 17 | var c = $('#crumbtrail'); 18 | c.append($('').attr('href', href).html(text)); 19 | } 20 | 21 | $(window).load(function() { 22 | $("#top_nav ul.quick > li").mouseenter(function() { 23 | $(this).find("ul").show(); 24 | $(this).children('a, span').addClass('hovered'); 25 | }); 26 | $("#top_nav ul.quick > li").mouseleave(function() { 27 | $(this).find("ul").hide(); 28 | $(this).children('a, span').removeClass('hovered'); 29 | }); 30 | }); -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/admin_page_new_blocks.js: -------------------------------------------------------------------------------- 1 | 2 | var PageContentEditor = function(page_id, auth_token) { 3 | this.page_id = page_id; 4 | this.auth_token = auth_token; 5 | this.add_controls(); 6 | this.render_blocks(); 7 | }; 8 | 9 | PageContentEditor.prototype = { 10 | 11 | page_id: false, 12 | current_block_id: false, 13 | block_types: { h1: 'Heading 1', h2: 'Heading 2', h3: 'Heading 3', h4: 'Heading 4', h5: 'Heading 5', h6: 'Heading 6', richtext: 'Rich Text'}, 14 | 15 | add_controls: function(id) 16 | { 17 | var that = this; 18 | //$('#block_controls').empty(); 19 | //$('#block_controls') 20 | // .append($('

').attr('id', 'edit_blocks_header').html('Edit Blocks')) 21 | // .append($('
').addClass('content').append($('

').html('Select a block to edit.'))); 22 | $('#blocks').selectable({ 23 | filter: "li", 24 | cancel: ".handle", 25 | selected: function(e, ui) { 26 | var block_id = ui.selected.id.replace("block_container_", ""); 27 | that.edit_block(block_id); 28 | } 29 | }); 30 | }, 31 | }; 32 | -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/application.js: -------------------------------------------------------------------------------- 1 | // /app/assets/caboose/application.js 2 | // Caboose Javascript 3 | // 4 | //= require jquery 5 | //= require jquery_ujs 6 | //= require colorbox-rails 7 | //= require underscore 8 | //= require caboose/jquery.detect 9 | //= require caboose/jquery.placeholder 10 | //= require caboose/modal_integration 11 | //= require caboose/main 12 | //= require_tree ../../templates 13 | -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/checkout/.checkout_stripe.js.marks: -------------------------------------------------------------------------------- 1 | !d;1609;1609 2 | -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/checkout_confirm_without_payment.js: -------------------------------------------------------------------------------- 1 | 2 | Caboose.Store.Modules.CheckoutPayment = (function() { 3 | 4 | self = { 5 | is_confirm: false 6 | }; 7 | 8 | self.initialize = function() { 9 | $('#checkout-continue button').click(self.continue_handler); 10 | }; 11 | 12 | self.continue_handler = function(event) { 13 | $('#message').html("

Processing...

"); 14 | $.ajax({ 15 | url: '/checkout/confirm', 16 | type: 'post', 17 | success: function(resp) 18 | { 19 | if (resp.success == true) 20 | { 21 | if (resp.redirect) 22 | window.location = resp.redirect; 23 | else 24 | window.location = '/checkout/thanks'; 25 | } 26 | else if (resp.error) 27 | $('#message').html("

" + resp.error + "

"); 28 | else 29 | $('#message').html("

There was an error processing your payment.

"); 30 | } 31 | }); 32 | }; 33 | 34 | return self 35 | }).call(Caboose.Store); 36 | 37 | -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/google_spreadsheets.js: -------------------------------------------------------------------------------- 1 | 2 | var google_spreadsheets = false; 3 | 4 | function google_csv_data(spreadsheet_id, col, row) 5 | { 6 | var csv_array = false; 7 | if (!google_spreadsheets) google_spreadsheets = {}; 8 | if (!google_spreadsheets[spreadsheet_id]) 9 | { 10 | $.ajax({ 11 | url: "/google-spreadsheets/" + spreadsheet_id + "/csv", 12 | type: 'get', 13 | success: function(arr){ google_spreadsheets[spreadsheet_id] = arr; }, 14 | async: false 15 | }); 16 | } 17 | var arr = google_spreadsheets[spreadsheet_id]; 18 | var c = column_name_to_int(col); 19 | return arr[parseInt(row)-1][c]; 20 | } 21 | 22 | function column_name_to_int(col) 23 | { 24 | var c = 0; 25 | if (col.length > 0) 26 | { 27 | var l = col.length; 28 | for (var i=l-1; i >=0; i--) 29 | c += Math.pow(25, l-i-1) * (col.charCodeAt(i) - 65); 30 | } 31 | return c; 32 | } 33 | -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/jquery.placeholder.js: -------------------------------------------------------------------------------- 1 | // Placeholder IE Fix 2 | 3 | $(document).ready(function() { 4 | $('[placeholder]').focus(function() { 5 | var input = $(this); 6 | if (input.val() == input.attr('placeholder')) { 7 | input.val(''); 8 | input.removeClass('placeholder_js'); 9 | } 10 | }).blur(function() { 11 | var input = $(this); 12 | if (input.val() == '' || input.val() == input.attr('placeholder')) { 13 | input.addClass('placeholder_js'); 14 | input.val(input.attr('placeholder')); 15 | } 16 | }).blur().parents('form').submit(function() { 17 | $(this).find('[placeholder]').each(function() { 18 | var input = $(this); 19 | if (input.val() == input.attr('placeholder')) { 20 | input.val(''); 21 | } 22 | }) 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/modal.js: -------------------------------------------------------------------------------- 1 | // This is a manifest file that'll be compiled into application.js, which will include all the files 2 | // listed below. 3 | // 4 | // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, 5 | // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. 6 | // 7 | // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the 8 | // the compiled file. 9 | // 10 | // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD 11 | // GO AFTER THE REQUIRES BELOW. 12 | // 13 | //= require_tree ../../templates 14 | //= require jquery 15 | //= require jquery_ujs 16 | //= require jquery-ui 17 | //= require colorbox-rails 18 | //= require caboose/jquery.datetimepicker 19 | //= require caboose/jquery.placeholder 20 | //= require caboose/jquery.detect 21 | //= require caboose/modal_integration 22 | //= require caboose/admin_main 23 | -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/model.form.page.js: -------------------------------------------------------------------------------- 1 | 2 | Model.Form.Page = Model.Form.extend({ 3 | 4 | class_name: 'Model.Form.Page', 5 | 6 | // Returns the form for editing a model or false for an embedded form. 7 | edit: function() 8 | { 9 | var m = this.model; 10 | 11 | var this2 = this; 12 | var div = $('
'); 13 | $(m.attributes).each(function(i, a) { 14 | if (a.type == 'hidden') 15 | return; 16 | div.append( 17 | $('
').attr('id', m.name + '_' + m.id + '_' + a.name + '_container') 18 | ); 19 | }); 20 | 21 | div.append($('
').attr('id', this.message)) 22 | .append($('

') 23 | .append($('').attr('type', 'button').val('Back').click(function() { caboose_station.close_url('/pages/'+m.id+'/redirect'); })) 24 | .append(' ') 25 | .append($('').attr('type', 'button').val('Delete ' + m.name).click(function() { m.ajax_delete(); })) 26 | ); 27 | return div; 28 | } 29 | 30 | }); 31 | -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/model/all.js: -------------------------------------------------------------------------------- 1 | //= require caboose/spectrum 2 | //= require caboose/model/class 3 | //= require caboose/model/model 4 | //= require caboose/model/s3 5 | //= require caboose/model/attribute 6 | //= require caboose/model/index_table 7 | //= require caboose/model/model_binder 8 | //= require caboose/model/bound_control 9 | //= require caboose/model/bound_color 10 | //= require caboose/model/bound_checkbox 11 | //= require caboose/model/bound_checkbox_multiple 12 | //= require caboose/model/bound_date 13 | //= require caboose/model/bound_time 14 | //= require caboose/model/bound_date_time 15 | //= require caboose/model/bound_image 16 | //= require caboose/model/bound_s3_image 17 | //= require caboose/model/bound_file 18 | //= require caboose/model/bound_select 19 | //= require caboose/model/bound_text 20 | //= require caboose/model/bound_textarea 21 | //= require caboose/model/bound_richtext 22 | -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/model/pager.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/javascripts/caboose/model/pager.js -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/model/s3.js: -------------------------------------------------------------------------------- 1 | 2 | var S3 = function(params) { 3 | for (var thing in params) 4 | this[thing] = params[thing]; 5 | }; 6 | 7 | S3.prototype = { 8 | bucket: '', 9 | access_key_id: '', 10 | acl: 'public-read', 11 | policy: '', 12 | signature: '', 13 | key: '' 14 | }; 15 | -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/shortcut.js: -------------------------------------------------------------------------------- 1 | 2 | lastkeys = ""; 3 | $(document).keyup(function(e) { 4 | if (e.keyCode == 13 && lastkeys == "caboose") // Enter 5 | { 6 | 7 | } 8 | if (lastkeys.length > 7) 9 | lastkeys = ""; 10 | lastkeys += String.fromCharCode(e.keyCode); 11 | }); 12 | -------------------------------------------------------------------------------- /app/assets/javascripts/caboose/tinymce_init.js: -------------------------------------------------------------------------------- 1 | 2 | tinymce.init({ 3 | selector: 'textarea.tinymce', 4 | width: '800px', 5 | height: '300px', 6 | convert_urls: false, 7 | plugins: 'advlist autolink lists link image charmap print preview hr anchor pagebreak searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking table contextmenu directionality emoticons template paste textcolor caboose', 8 | toolbar1: 'caboose_save caboose_cancel | bold italic forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image', 9 | image_advtab: true, 10 | external_plugins: { 'caboose': '//d9hjv462jiw15.cloudfront.net/assets/tinymce/plugins/caboose/plugin.js' }, 11 | setup: function(editor) { 12 | var control = ModelBinder.tinymce_control(editor.id); 13 | editor.on('keyup', function(e) { control.tinymce_change(editor); }); 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin.css: -------------------------------------------------------------------------------- 1 | /* 2 | * This is a manifest file that'll be compiled into application.css, which will include all the files 3 | * listed below. 4 | * 5 | * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, 6 | * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. 7 | * 8 | * You're free to add application-wide styles to this file and they'll appear at the top of the 9 | * compiled file, but it's generally better to create a new file per style scope. 10 | * 11 | *= require colorbox-rails 12 | *= require jquery-ui 13 | *= require caboose/jquery.datetimepicker 14 | *= require caboose/fonts 15 | *= require caboose/caboose 16 | *= require caboose/message_boxes 17 | *= require caboose/model_binder 18 | *= require caboose/admin_main 19 | *= require caboose/admin_crumbtrail 20 | */ -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/application.css: -------------------------------------------------------------------------------- 1 | /* 2 | * /app/assets/stylsheets/caboose/admin/application.css 3 | * 4 | *= require_self 5 | *= require colorbox-rails 6 | *= require jquery-ui 7 | *= require caboose/jquery.datetimepicker 8 | *= require caboose/admin/jquery-ui-subnav-theme.min 9 | *= require caboose/admin/main 10 | *= require caboose/admin/component 11 | */ -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/integrations/main.scss: -------------------------------------------------------------------------------- 1 | .integration-selector { 2 | select { 3 | width: 100%; 4 | font-size: 12pt; 5 | } 6 | } -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/modules/countdown.css: -------------------------------------------------------------------------------- 1 | .countdown { 2 | text-align: center; 3 | } 4 | .countdown ul { 5 | width: 100%; 6 | height: 100%; 7 | } 8 | .countdown ul li { 9 | display: inline-block; 10 | font-weight: bold; 11 | position: relative; 12 | margin: 0; 13 | height: 100%; 14 | overflow: hidden; 15 | } 16 | 17 | .countdown ul li.date_part span { 18 | display: block; 19 | justify-content: center; 20 | align-content: center; 21 | } 22 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/modules/functions.scss: -------------------------------------------------------------------------------- 1 | @import "caboose/admin/config"; 2 | 3 | .conceal { 4 | @include big { 5 | display: none !important; 6 | } 7 | @include small { 8 | display: inherit; 9 | } 10 | } 11 | 12 | .reveal { 13 | @include big { 14 | display: inherit; 15 | } 16 | @include small { 17 | display: none !important; 18 | } 19 | } 20 | 21 | .reveal-m { 22 | @include big { 23 | display: inherit; 24 | } 25 | @include small { 26 | display: none !important; 27 | } 28 | @include medium { 29 | display: none !important; 30 | } 31 | } -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/modules/headings.scss: -------------------------------------------------------------------------------- 1 | @import "caboose/admin/config"; 2 | 3 | h1,h2,h3,h4,h5,h6 { 4 | font: $heading-font; 5 | line-height: 1em; 6 | margin-bottom: $font-size * 0.8; 7 | &.heading-block { 8 | color: $color-main; 9 | clear: both; 10 | } 11 | } 12 | h1 { 13 | font-size: 2em; 14 | } 15 | h2 { 16 | font-size: 1.8em; 17 | } 18 | h3 { 19 | font-size: 1.6em; 20 | } 21 | h4 { 22 | font-size: 1.4em; 23 | } 24 | h5 { 25 | font-size: 1.2em; 26 | } 27 | h6 { 28 | font-size: 1em; 29 | } 30 | em, i { 31 | font-style: italic; 32 | } 33 | b, strong { 34 | font-weight: bold; 35 | } 36 | span.bold { 37 | font-weight: bold; 38 | } -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/modules/pager.scss: -------------------------------------------------------------------------------- 1 | 2 | .page_links { 3 | 4 | } 5 | 6 | .page_links a { 7 | display: inline-block; 8 | margin: 0 2px; 9 | padding: 5px 8px 3px 8px; 10 | 11 | border: #333 1px solid; 12 | background: #333; 13 | color: #fff; 14 | text-decoration: none; 15 | } 16 | 17 | .page_links a:hover { 18 | background: #505050; 19 | color: #fff; 20 | } 21 | 22 | .page_links .middle_links a { 23 | 24 | } 25 | 26 | .page_links span.current_page { 27 | display: inline-block; 28 | padding: 5px 8px 3px 8px; 29 | 30 | border: #333 1px solid; 31 | background: #ccc; 32 | color: #000; 33 | text-decoration: none; 34 | } 35 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/modules/product_images.scss: -------------------------------------------------------------------------------- 1 | 2 | .product_images { 3 | .large_image img { width: 400px; } 4 | .thumbnails img { width: 100px; } 5 | .spacer { line-height: 0; clear: left; } 6 | } 7 | 8 | .product_images_edit_thumbs { 9 | div { 10 | width: 72px; 11 | height: 72px; 12 | background-size: contain; 13 | background-repeat: no-repeat; 14 | background-position: center center; 15 | margin: 0 4px 4px 0; 16 | float: left; 17 | } 18 | .selected { 19 | border: #ff0000 2px solid; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/modules/search.scss: -------------------------------------------------------------------------------- 1 | @import "caboose/admin/config"; 2 | 3 | .search-results-container { 4 | max-width: $max-width; 5 | margin: 0 auto; 6 | padding: 20px 2%; 7 | .intro { 8 | font-size: 1.1em; 9 | margin-bottom: 20px; 10 | } 11 | .results { 12 | list-style-type: none; 13 | li { 14 | display: block; 15 | padding: 10px 2%; 16 | color: $color-dark; 17 | &:nth-of-type(odd) { 18 | background: rgb(240, 240, 240); 19 | } 20 | a, .event-title { 21 | color: $color-main; 22 | } 23 | .post-meta { 24 | font-size: 0.95em; 25 | margin-top: 2px; 26 | padding-left: 18px; 27 | color: #5A5A5A; 28 | .author { 29 | font-style: italic; 30 | font-size: 14px; 31 | } 32 | } 33 | .result-text { 34 | margin-top: 4px; 35 | font-size: 0.9em; 36 | } 37 | .date { 38 | margin-top: 3px; 39 | font-size: 0.85em; 40 | color: rgb(121, 121, 121); 41 | } 42 | .highlight { 43 | background: rgb(249, 249, 176); 44 | display: inline-block; 45 | padding: 1px; 46 | } 47 | } 48 | } 49 | } -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/modules/selects.scss: -------------------------------------------------------------------------------- 1 | @import "caboose/admin/config"; 2 | 3 | .admin_container select { 4 | background: #fff none repeat scroll 0 0; 5 | border-color: #2475a5; 6 | border-radius: 2px; 7 | border-style: solid; 8 | border-width: 1px; 9 | color: #505050; 10 | font: 1em "body-font",sans-serif; 11 | padding: 9px 0px; 12 | } 13 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/modules/subnav_tabs.scss: -------------------------------------------------------------------------------- 1 | 2 | #admin_subnav_content { 3 | #tabs { 4 | list-style: none; 5 | margin: 0; 6 | padding: 0; 7 | 8 | li { 9 | list-style: none; 10 | margin: 0; 11 | padding: 0; 12 | 13 | a { 14 | display: block; 15 | text-decoration: none; 16 | color: #7b7d7f; 17 | margin: 0 -20px 0 -10px; 18 | padding: 8px 20px 8px 10px; 19 | } 20 | 21 | &.selected { 22 | background: #f9f9fb; 23 | a { 24 | background: #f9f9fb; 25 | color: #000; 26 | border-left: #dededf 1px solid; 27 | border-top: #dededf 1px solid; 28 | border-bottom: #dededf 1px solid; 29 | } 30 | } 31 | } 32 | } 33 | } 34 | 35 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/page_edit/main.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * /app/assets/stylsheets/caboose/admin/page_edit/main.scss 3 | * 4 | *= require_self 5 | *= require caboose/admin/page_edit/block_overlays 6 | *= require caboose/admin/page_edit/block_anchors 7 | *= require caboose/admin/page_edit/device_selector 8 | *= require caboose/admin/page_edit/froala 9 | *= require caboose/admin/page_edit/group_overlay 10 | *= require caboose/admin/page_edit/layout 11 | *= require caboose/admin/page_edit/preview 12 | *= require caboose/admin/page_edit/publish 13 | *= require caboose/admin/page_edit/revisions 14 | *= require caboose/admin/page_edit/subnav 15 | *= require caboose/admin/page_edit/top_nav 16 | *= require caboose/admin/page_edit/modal 17 | */ 18 | @import url('https://fonts.googleapis.com/css?family=Open+Sans'); 19 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/page_edit/modal.scss: -------------------------------------------------------------------------------- 1 | #the_modal { 2 | text-align: left; 3 | p { 4 | margin-bottom: 10px; 5 | } 6 | .note { 7 | input { 8 | text-align: left; 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/page_edit/preview.scss: -------------------------------------------------------------------------------- 1 | #preview_confirm { 2 | position: absolute; 3 | top: 48px; 4 | right: 10px; 5 | z-index: 1000; 6 | width: 300px; 7 | padding: 10px; 8 | border-radius: 6px 6px 6px 6px; 9 | border-color: #EDEEF0; 10 | border-width: 0 2px 2px 2px; 11 | border-style: solid; 12 | background: #3893e5; 13 | font-size: 14px; 14 | color: #fff; 15 | text-align: center; 16 | p { margin-bottom: 8px; } 17 | 18 | select, input[type=text] { 19 | margin: 0; 20 | padding: 4px 8px; 21 | border: #ccc 1px solid; 22 | font-size: 14px; 23 | width: 250px; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/page_edit/publish.scss: -------------------------------------------------------------------------------- 1 | #publish_confirm { 2 | position: absolute; 3 | top: 48px; 4 | right: 10px; 5 | z-index: 1000; 6 | width: 300px; 7 | padding: 10px; 8 | border-radius: 6px 0 6px 6px; 9 | border-color: #EDEEF0; 10 | border-width: 0 2px 2px 2px; 11 | border-style: solid; 12 | background: #6cb049; 13 | font-size: 14px; 14 | color: #fff; 15 | text-align: center; 16 | p { margin-bottom: 8px; } 17 | 18 | select, input[type=text] { 19 | margin: 0; 20 | padding: 4px 8px; 21 | border: #ccc 1px solid; 22 | font-size: 14px; 23 | width: 250px; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/pages/.page_edit.scss.marks: -------------------------------------------------------------------------------- 1 | !t;2021;2021 2 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/pages/assets_index.css: -------------------------------------------------------------------------------- 1 | 2 | #manifest { 3 | position: absolute; 4 | top: 0; 5 | left: 0; 6 | width: 280px; 7 | height: 100px; 8 | overflow-y: scroll; 9 | } 10 | 11 | #manifest ul { 12 | list-style: none; 13 | margin: 0; 14 | padding: 0; 15 | } 16 | 17 | #manifest ul ul { 18 | padding-left: 4px; 19 | } 20 | 21 | #manifest li { 22 | list-style: none; 23 | margin: 0; 24 | padding: 0; 25 | } 26 | 27 | #manifest a { 28 | display: block; 29 | margin: 0; 30 | padding: 4px 8px; 31 | border: #999 1px solid; 32 | background: #ccc; 33 | } 34 | 35 | #editor { 36 | margin: 0; 37 | padding-top: 20px; 38 | padding-left: 280px; 39 | } 40 | 41 | #editor p { 42 | margin-top: 0; 43 | padding-top: 0; 44 | } 45 | 46 | #editor textarea { 47 | margin: 0; 48 | } -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/pages/new_block.css: -------------------------------------------------------------------------------- 1 | 2 | #modal_content div.icons { height: 400px; overflow-y: scroll; } 3 | #modal_content div.icons h2 { clear: both; padding: 20px 0px 10px 0; text-align: center; } 4 | #modal_content div.icons a { display: block; float: left; margin: 4px; border: #fff 0px solid; width: 120px; height: 100px; text-align: center; vertical-align: middle; border: #666 4px solid; } 5 | #modal_content div.icons a span.icon { display: block; padding: 10px 20px; font-size: 24pt; color: #fff; } 6 | #modal_content div.icons a span.name { display: block; } 7 | #modal_content div.icons a:hover { background: #fff69f; color: #000; border: #666 0px solid; border: #666 4px solid; } 8 | #modal_content div.icons a:hover span.icon { color: #000; } 9 | #modal_content div.icons a:hover span.name { color: #000; } 10 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin/print.css: -------------------------------------------------------------------------------- 1 | body { 2 | 3 | } -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin_assets_index.css: -------------------------------------------------------------------------------- 1 | 2 | #manifest { 3 | position: absolute; 4 | top: 0; 5 | left: 0; 6 | width: 280px; 7 | height: 100px; 8 | overflow-y: scroll; 9 | } 10 | 11 | #manifest ul { 12 | list-style: none; 13 | margin: 0; 14 | padding: 0; 15 | } 16 | 17 | #manifest ul ul { 18 | padding-left: 4px; 19 | } 20 | 21 | #manifest li { 22 | list-style: none; 23 | margin: 0; 24 | padding: 0; 25 | } 26 | 27 | #manifest a { 28 | display: block; 29 | margin: 0; 30 | padding: 4px 8px; 31 | border: #999 1px solid; 32 | background: #ccc; 33 | } 34 | 35 | #editor { 36 | margin: 0; 37 | padding-top: 20px; 38 | padding-left: 280px; 39 | } 40 | 41 | #editor p { 42 | margin-top: 0; 43 | padding-top: 0; 44 | } 45 | 46 | #editor textarea { 47 | margin: 0; 48 | } -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/admin_new_block.css: -------------------------------------------------------------------------------- 1 | 2 | #modal_content div.icons { height: 400px; overflow-y: scroll; } 3 | #modal_content div.icons h2 { clear: both; padding: 20px 0px 10px 0; text-align: center; } 4 | #modal_content div.icons a { display: block; float: left; margin: 4px; border: #fff 0px solid; width: 120px; height: 100px; text-align: center; vertical-align: middle; border: #666 4px solid; } 5 | #modal_content div.icons a span.icon { display: block; padding: 10px 20px; font-size: 24pt; color: #fff; } 6 | #modal_content div.icons a span.name { display: block; } 7 | #modal_content div.icons a:hover { background: #fff69f; color: #000; border: #666 0px solid; border: #666 4px solid; } 8 | #modal_content div.icons a:hover span.icon { color: #000; } 9 | #modal_content div.icons a:hover span.name { color: #000; } 10 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/application.css: -------------------------------------------------------------------------------- 1 | /* 2 | * This is a manifest file that'll be compiled into application.css, which will include all the files 3 | * listed below. 4 | * 5 | * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, 6 | * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. 7 | * 8 | * You're free to add application-wide styles to this file and they'll appear at the top of the 9 | * compiled file, but it's generally better to create a new file per style scope. 10 | * 11 | *= require colorbox-rails 12 | *= require caboose/page_bar_generator 13 | *= require caboose/model_binder 14 | */ 15 | 16 | #cboxLoadedContent { margin-bottom: 0; } 17 | 18 | #cboxTopLeft, 19 | #cboxTopRight, 20 | #cboxBottomLeft, 21 | #cboxBottomRight, 22 | #cboxMiddleLeft, 23 | #cboxMiddleRight, 24 | #cboxTopCenter, 25 | #cboxBottomCenter, 26 | #cboxClose { background: #111; } 27 | #cboxWrapper { border-radius: 7px !important; } -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/bound_input.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/caboose.css: -------------------------------------------------------------------------------- 1 | 2 | body { 3 | font-family: 'Roboto', Tahoma, Arial; 4 | } 5 | 6 | input[type='text'].placeholder_js { 7 | color: #757575; 8 | } -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/fonts.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css?family=Roboto:400,400i,700,700i'); -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/modal.css: -------------------------------------------------------------------------------- 1 | /* 2 | * /app/assets/stylesheets/caboose/modal.css 3 | * 4 | *= require jquery-ui 5 | *= require caboose/jquery.datetimepicker 6 | *= require colorbox-rails 7 | *= require caboose/fonts 8 | *= require caboose/caboose 9 | *= require caboose/model_binder 10 | *= require caboose/modal_main 11 | */ 12 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/page_bar_generator.css: -------------------------------------------------------------------------------- 1 | 2 | .page_links { 3 | 4 | } 5 | 6 | .page_links a { 7 | display: inline-block; 8 | margin: 0 2px; 9 | padding: 5px 8px 3px 8px; 10 | 11 | border: #505050 1px solid; 12 | background: #e1e1e1; 13 | color: #505050; 14 | text-decoration: none; 15 | } 16 | 17 | .page_links a:hover { 18 | background: #505050; 19 | color: #fff; 20 | } 21 | 22 | .page_links .middle_links a { 23 | 24 | } 25 | 26 | .page_links span.current_page { 27 | display: inline-block; 28 | padding: 5px 8px 3px 8px; 29 | 30 | border: #941403 1px solid; 31 | background: #941403; 32 | color: #fff; 33 | text-decoration: none; 34 | } 35 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/print.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/stylesheets/caboose/print.css -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/product_images.css.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Product Images 3 | // 4 | 5 | #product-images { 6 | width: 40%; 7 | float: left; 8 | } 9 | 10 | #product-images figure { 11 | background-position: center center; 12 | background-repeat: no-repeat; 13 | background-size: cover; 14 | cursor: pointer; 15 | height: 100%; 16 | width: 100%; 17 | } 18 | 19 | #product-images > figure { height: 350px } 20 | 21 | #product-images ul { 22 | overflow: hidden; 23 | padding: 6px 0 24px; 24 | } 25 | #product-images ul li { 26 | float: left; 27 | height: 115px; 28 | margin: 0 6px 6px 0; 29 | width: 115px; 30 | } 31 | 32 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/product_options.css.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Product Options 3 | // 4 | 5 | #product-options { margin: 0 0 24px } 6 | 7 | #product-options h1, 8 | #product-options h2, 9 | #product-options h3, 10 | #product-options h4, 11 | #product-options h5, 12 | #product-options h6 { line-height: 60px } 13 | 14 | #product-options ul { overflow: hidden } 15 | 16 | #product-options ul li { 17 | background: #d0d0d0; 18 | cursor: pointer; 19 | display: block; 20 | float: left; 21 | font-family: 'Roboto'; 22 | font-weight: 400; 23 | padding: 6px 12px; 24 | margin: 0 6px 6px 0; 25 | &.selected { 26 | background: #981919; 27 | color: #fff; 28 | } 29 | &.unavailable { 30 | background: lighten(#d0d0d0, 6%); 31 | color: darken(#d0d0d0, 12%); 32 | text-decoration: line-through; 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/register.css: -------------------------------------------------------------------------------- 1 | 2 | #register_form .other_options { 3 | position: absolute; 4 | top: -4px; 5 | right: 0; 6 | } 7 | 8 | input#first_name, 9 | input#last_name, 10 | input#email, 11 | input#phone, 12 | input#pass1, 13 | input#pass2 { 14 | font-size: 18px; 15 | width: 95%; 16 | margin: 0 0 8px 0; 17 | padding: 7px; 18 | } 19 | 20 | input#btn_register { 21 | font-size: 18px; 22 | } 23 | 24 | input#btn_cancel { 25 | font-size: 18px; 26 | } 27 | -------------------------------------------------------------------------------- /app/assets/stylesheets/caboose/tinymce.css: -------------------------------------------------------------------------------- 1 | 2 | body, td, pre { 3 | color: #000000; 4 | font-family: Verdana,Arial,Helvetica,sans-serif; 5 | font-size: inherit; 6 | } 7 | body { 8 | background: none repeat scroll 0 0 #FFFFFF; 9 | } 10 | body.mceForceColors { 11 | background: none repeat scroll 0 0 #FFFFFF; 12 | color: #000000; 13 | } 14 | body.mceBrowserDefaults { 15 | background: none repeat scroll 0 0 transparent; 16 | color: inherit; 17 | font-family: inherit; 18 | font-size: inherit; 19 | } 20 | h1 { font-size: inherit; } 21 | h2 { font-size: inherit; } 22 | h3 { font-size: inherit; } 23 | h4 { font-size: inherit; } 24 | h5 { font-size: inherit; } 25 | h6 { font-size: inherit; } 26 | 27 | body.dirty { 28 | background: #fff799; 29 | } 30 | -------------------------------------------------------------------------------- /app/assets/templates/caboose/cart/add_to_cart.jst.ejs: -------------------------------------------------------------------------------- 1 |

2 | 3 | 4 | 5 |
6 | 7 | -------------------------------------------------------------------------------- /app/assets/templates/caboose/checkout/forms/guest.jst.ejs: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 |
7 |
8 | 9 | -------------------------------------------------------------------------------- /app/assets/templates/caboose/checkout/forms/register.jst.ejs: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
12 | -------------------------------------------------------------------------------- /app/assets/templates/caboose/checkout/forms/signin.jst.ejs: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 |
7 |
8 | -------------------------------------------------------------------------------- /app/assets/templates/caboose/checkout/login.jst.ejs: -------------------------------------------------------------------------------- 1 |
2 |
    3 |
  • 4 |

    Already a member

    5 | 6 |

  • 7 | 8 |
  • 9 |

    Sign up for all of our member benefits

    10 | 11 |
  • 12 | 13 |
  • 14 |

    No thanks

    15 | 16 |
  • 17 |
18 |
19 | 20 |
21 | 22 | -------------------------------------------------------------------------------- /app/assets/templates/caboose/checkout/payment.jst.ejs: -------------------------------------------------------------------------------- 1 |
2 |

Complete my purchase

3 | <%= form %> 4 |
5 | 6 | -------------------------------------------------------------------------------- /app/assets/templates/caboose/checkout/shipping.jst.ejs: -------------------------------------------------------------------------------- 1 | <% if (rates) { %> 2 |
3 |
4 |

Shipping Method

5 |

Please select how you would like your products to be delivered

6 | 7 | 16 |
17 |
18 | <% } %> 19 | -------------------------------------------------------------------------------- /app/assets/templates/caboose/messages/error.jst.ejs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/assets/templates/caboose/messages/error.jst.ejs -------------------------------------------------------------------------------- /app/assets/templates/caboose/product/images.jst.ejs: -------------------------------------------------------------------------------- 1 |
2 | 3 |
    4 | <% _.each(images, function(image) { %> 5 |
  • 6 | <% }); %> 7 |
8 | -------------------------------------------------------------------------------- /app/assets/templates/caboose/product/images_old.jst.ejs: -------------------------------------------------------------------------------- 1 |
2 | 3 |
    4 | <% _.each(images, function(image) { %> 5 |
  • 6 | <% }); %> 7 |
8 | -------------------------------------------------------------------------------- /app/assets/templates/caboose/product/options.jst.ejs: -------------------------------------------------------------------------------- 1 | <% _.each(options, function(option, index) { %> 2 |

<%= option.name %>

3 |
    4 | <% 5 | for (var k in option.values) { 6 | var url = option.values[k] 7 | if (url) { %>
  • <% } 8 | else { %>
  • <%= k %>
  • <% } 9 | } 10 | %> 11 |
12 | <% }); %> 13 | 14 | -------------------------------------------------------------------------------- /app/controllers/caboose/admin_controller.rb: -------------------------------------------------------------------------------- 1 | 2 | module Caboose 3 | class AdminController < ApplicationController 4 | 5 | # @route GET /admin 6 | def index 7 | return if !user_is_allowed('admin', 'view') 8 | @return_url = params[:return_url].nil? ? '/admin/pages' : params[:return_url] 9 | end 10 | 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /app/controllers/caboose/event_custom_field_values_controller.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class EventCustomFieldValuesController < ApplicationController 3 | 4 | # @route PUT /admin/event-custom-field-values/:id 5 | def admin_update 6 | return if !user_is_allowed('eventcustomfieldvalues', 'edit') 7 | 8 | resp = Caboose::StdClass.new 9 | fv = EventCustomFieldValue.find(params[:id]) 10 | 11 | save = true 12 | params.each do |k, v| 13 | case k 14 | when 'value' then fv.value = v 15 | end 16 | end 17 | resp.success = save && fv.save 18 | render :json => resp 19 | end 20 | 21 | end 22 | end -------------------------------------------------------------------------------- /app/controllers/caboose/google_spreadsheets_controller.rb: -------------------------------------------------------------------------------- 1 | require 'httparty' 2 | 3 | module Caboose 4 | class GoogleSpreadsheetsController < Caboose::ApplicationController 5 | 6 | # @route GET /google-spreadsheets/:spreadsheet_id/csv 7 | def csv_data 8 | spreadsheet_id = params[:spreadsheet_id] 9 | #url = "https://docs.google.com/spreadsheets/d/#{spreadsheet_id}/export?format=csv&id=#{spreadsheet_id}&gid=0" 10 | url = "https://docs.google.com/spreadsheets/d/#{spreadsheet_id}/pub?output=csv&single=true&gid=0" 11 | resp = HTTParty.get(url) 12 | arr = nil 13 | begin 14 | arr = CSV.parse(resp.body) 15 | rescue 16 | Caboose.log("Error parsing CSV in spreadsheet #{spreadsheet_id}:\n\n#{resp.body}") 17 | end 18 | render :json => arr 19 | end 20 | 21 | end 22 | end 23 | -------------------------------------------------------------------------------- /app/controllers/caboose/logout_controller.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class LogoutController < ApplicationController 3 | 4 | # @route GET /logout 5 | def index 6 | Caboose.plugin_hook('before_logout') 7 | logout_user 8 | elo = User.logged_out_user(@site.id) 9 | login_user(elo) 10 | redirect_to params[:return_url] ? params[:return_url] : "/" 11 | end 12 | 13 | end 14 | end -------------------------------------------------------------------------------- /app/controllers/caboose/modal_controller.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class ModalController < Caboose::ApplicationController 3 | layout 'caboose/application' 4 | 5 | # @route GET /modal 6 | def layout 7 | render 'layouts/caboose/modal', layout: false 8 | end 9 | 10 | # @route GET /modal/:url 11 | # @route_constraints {:url => /.*/} 12 | def index 13 | @url = "/#{params[:url]}" 14 | @url << "?#{request.query_string}" if request.query_string 15 | end 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /app/controllers/caboose/page_custom_field_values_controller.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class PageCustomFieldValuesController < ApplicationController 3 | 4 | # @route PUT /admin/page-custom-field-values/:id 5 | def admin_update 6 | return if !user_is_allowed('pagecustomfieldvalues', 'edit') 7 | 8 | resp = Caboose::StdClass.new 9 | fv = PageCustomFieldValue.find(params[:id]) 10 | 11 | save = true 12 | params.each do |k, v| 13 | case k 14 | when 'value' then fv.value = v 15 | end 16 | end 17 | resp.success = save && fv.save 18 | render :json => resp 19 | end 20 | 21 | end 22 | end 23 | -------------------------------------------------------------------------------- /app/controllers/caboose/post_custom_field_values_controller.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class PostCustomFieldValuesController < ApplicationController 3 | 4 | # @route PUT /admin/post-custom-field-values/:id 5 | def admin_update 6 | return if !user_is_allowed('postcustomfieldvalues', 'edit') 7 | 8 | resp = Caboose::StdClass.new 9 | fv = PostCustomFieldValue.find(params[:id]) 10 | 11 | save = true 12 | params.each do |k, v| 13 | case k 14 | when 'value' then fv.value = v 15 | end 16 | end 17 | resp.success = save && fv.save 18 | render :json => resp 19 | end 20 | 21 | end 22 | end 23 | -------------------------------------------------------------------------------- /app/controllers/caboose/reviews_controller.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class ReviewsController < Caboose::ApplicationController 3 | 4 | # @route POST /reviews/add 5 | def add 6 | content = params[:content] 7 | product_id = params[:product_id] 8 | rating = params[:rating] 9 | name = params[:name] 10 | r = Review.new(:content => content, :product_id => product_id, :rating => rating, :name => name) 11 | r.save 12 | render :json => true 13 | end 14 | 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /app/controllers/caboose/station_controller.rb: -------------------------------------------------------------------------------- 1 | 2 | module Caboose 3 | class StationController < ApplicationController 4 | layout 'caboose/modal' 5 | 6 | # @route GET /station 7 | def index 8 | @user = logged_in_user 9 | page_id = params['page_id'].nil? ? Page.index_page(@site.id).id : params['page_id'] 10 | @page = Page.find(page_id) 11 | @tab = params['tab'] 12 | 13 | if @user.nil? || @user.id == Caboose::User.logged_out_user_id(@site.id) 14 | redirect_to "/login" 15 | end 16 | end 17 | 18 | # @route GET /station/plugin-count 19 | def plugin_count 20 | render :json => Caboose::plugins.count 21 | end 22 | 23 | # @route PUT /admin/station 24 | def index_admin 25 | session[:caboose_station_state] = params[:state] 26 | session[:caboose_station_open_tabs] = params[:open_tabs] 27 | session[:caboose_station_return_url] = params[:return_url] 28 | render :json => true 29 | end 30 | end 31 | end 32 | -------------------------------------------------------------------------------- /app/helpers/caboose/permissions_helper.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | module PermissionsHelper 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /app/helpers/caboose/products_helper.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | module ProductsHelper 3 | 4 | def average_review(product_id) 5 | all_reviews = Review.where(:product_id => product_id) 6 | score = 0 7 | count = 0 8 | all_reviews.each do |r| 9 | if r.rating && r.rating != 0 10 | score += r.rating 11 | count += 1 12 | end 13 | end 14 | return score/count if count > 0 15 | return 0 16 | end 17 | 18 | def active_products 19 | Caboose::Product.active 20 | end 21 | 22 | def caboose_sort_options 23 | render :partial => '/caboose/products/sort_options' 24 | end 25 | 26 | end 27 | end 28 | -------------------------------------------------------------------------------- /app/mailers/caboose/caboose_mailer.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class CabooseMailer < ActionMailer::Base 3 | include AbstractController::Callbacks 4 | 5 | default :from => Caboose::email_from 6 | 7 | cattr_accessor :site 8 | @@site = nil 9 | 10 | before_filter do |mailer| 11 | puts "Configuring mailer..." 12 | config = SmtpConfig.where(:site_id => @@site.id).first 13 | self.smtp_settings['user_name'] = config.user_name 14 | self.smtp_settings['password'] = config.password 15 | self.smtp_settings['address'] = config.address 16 | self.smtp_settings['port'] = config.port 17 | self.smtp_settings['domain'] = config.domain 18 | self.smtp_settings['authentication'] = config.authentication 19 | self.smtp_settings['enable_starttls_auto'] = config.enable_starttls_auto 20 | end 21 | 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /app/mailers/caboose/login_mailer.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class LoginMailer < CabooseMailer #ActionMailer::Base 3 | 4 | def forgot_password_email(user) 5 | @user = user 6 | mail(:to => user.email, :subject => "#{user.site.description} Forgot Password") 7 | end 8 | 9 | def locked_account(user) 10 | @user = user 11 | admin_email = user.site.contact_email 12 | mail(:to => admin_email, :subject => "#{user.site.description} Locked Account") if !admin_email.blank? 13 | end 14 | 15 | end 16 | end -------------------------------------------------------------------------------- /app/models/caboose/ab_option.rb: -------------------------------------------------------------------------------- 1 | class Caboose::AbOption < ActiveRecord::Base 2 | 3 | self.table_name = "ab_options" 4 | belongs_to :ab_variant 5 | has_many :ab_values, :dependent => :destroy 6 | attr_accessible :value, :ab_variant_id 7 | 8 | end 9 | -------------------------------------------------------------------------------- /app/models/caboose/ab_value.rb: -------------------------------------------------------------------------------- 1 | class Caboose::AbValue < ActiveRecord::Base 2 | 3 | self.table_name = "ab_values" 4 | belongs_to :ab_variant 5 | belongs_to :ab_option 6 | attr_accessible :session_id, :ab_variant_id, :ab_option_id 7 | 8 | def keyval 9 | return "#{ab_variant.analytics_name}=#{ab_option_id}" 10 | end 11 | 12 | end 13 | -------------------------------------------------------------------------------- /app/models/caboose/ab_variant.rb: -------------------------------------------------------------------------------- 1 | # Class for A-B testing variants. A variant is a set of changes 2 | # to the same element on a page. For example, a variant can be used 3 | # to change the button text, or images displayed, or even more 4 | # complicated behavior 5 | class Caboose::AbVariant < ActiveRecord::Base 6 | self.table_name = "ab_variants" 7 | 8 | has_many :ab_options, -> { order(:id) }, :dependent => :destroy 9 | has_many :ab_values, :dependent => :destroy 10 | attr_accessible :name, :analytics_name 11 | 12 | def random_option 13 | return nil if self.ab_options.nil? || self.ab_options.count == 0 14 | return self.ab_options.sample 15 | end 16 | 17 | end 18 | -------------------------------------------------------------------------------- /app/models/caboose/address.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class Address < ActiveRecord::Base 3 | self.table_name = 'store_addresses' 4 | 5 | attr_accessible :id, 6 | :name, 7 | :first_name, 8 | :last_name, 9 | :street, 10 | :address1, 11 | :address2, 12 | :company, 13 | :city, 14 | :state, 15 | :province, 16 | :province_code, 17 | :zip, 18 | :country, 19 | :country_code, 20 | :phone 21 | 22 | def name_and_address 23 | str = "#{self.first_name} #{self.last_name}" 24 | str << "
#{self.address1}" 25 | str << "
#{self.address2}" if self.address2 && self.address2.length > 0 26 | str << "
#{self.city}, #{self.state} #{self.zip}" 27 | return str 28 | end 29 | 30 | end 31 | end 32 | 33 | -------------------------------------------------------------------------------- /app/models/caboose/approval_request.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::ApprovalRequest < ActiveRecord::Base 3 | self.table_name = "approval_reqests" 4 | belongs_to :page 5 | belongs_to :user 6 | belongs_to :reviewer, :class_name => 'User', :foreign_key => 'reviewer_id' 7 | attr_accessible :page_id, :user_id, :reviewer_id, :date_requested, :date_reviewed, :notes, :reviewer_notes, :status 8 | 9 | #const STATUS_APPROVED = 'approved'; 10 | #const STATUS_DENIED = 'denied'; 11 | #const STATUS_PENDING = 'pending'; 12 | 13 | end 14 | -------------------------------------------------------------------------------- /app/models/caboose/asset.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::Asset < ActiveRecord::Base 3 | self.table_name = "assets" 4 | belongs_to :page 5 | attr_accessible :page_id, :uploaded_by_id, :date_uploaded, :name, :filename, :description, :extension 6 | 7 | def sanitize_name(str) 8 | return str.gsub(' ', '_').downcase 9 | end 10 | 11 | def assets_with_uri(host_with_port, uri) 12 | uri[0] = '' if uri.start_with? '/' 13 | 14 | page = Page.page_with_uri(host_with_port, File.dirname(uri), false) 15 | return false if page.nil? 16 | 17 | asset = Asset.where(:page_id => page.id,:filename => File.basename(uri)).first 18 | return false if asset.nil? 19 | 20 | return asset 21 | end 22 | 23 | end 24 | -------------------------------------------------------------------------------- /app/models/caboose/block_cache_file.rb: -------------------------------------------------------------------------------- 1 | 2 | module Caboose 3 | class BlockCacheFile 4 | 5 | def initialize(file) 6 | @_url = file.url 7 | end 8 | 9 | def url(style = nil) 10 | return @_url 11 | end 12 | 13 | def marshal_dump 14 | [@_url] 15 | end 16 | 17 | def marshal_load array 18 | @url = array.first 19 | end 20 | 21 | end 22 | end 23 | -------------------------------------------------------------------------------- /app/models/caboose/block_type_site_membership.rb: -------------------------------------------------------------------------------- 1 | class Caboose::BlockTypeSiteMembership < ActiveRecord::Base 2 | self.table_name = "block_type_site_memberships" 3 | belongs_to :site 4 | belongs_to :block_type 5 | attr_accessible :id, :site_id, :block_type_id, :custom_css, :custom_html 6 | end 7 | -------------------------------------------------------------------------------- /app/models/caboose/block_type_summary.rb: -------------------------------------------------------------------------------- 1 | require 'httparty' 2 | 3 | class Caboose::BlockTypeSummary < ActiveRecord::Base 4 | self.table_name = "block_type_summaries" 5 | 6 | belongs_to :block_type_source 7 | attr_accessible :id, 8 | :block_type_source_id, 9 | :name, 10 | :description 11 | 12 | def source 13 | self.block_type_source 14 | end 15 | 16 | def parse_api_hash(h) 17 | self.name = h['name'] 18 | self.description = h['description'] 19 | end 20 | 21 | end 22 | -------------------------------------------------------------------------------- /app/models/caboose/caboose_plugin.rb: -------------------------------------------------------------------------------- 1 | class Caboose::CaboosePlugin 2 | 3 | def self.page_content(str) 4 | return str 5 | end 6 | 7 | def self.post_content(post) 8 | return post 9 | end 10 | 11 | def self.event_content(event) 12 | return event 13 | end 14 | 15 | def self.admin_nav(nav, user, page, site) 16 | return nav 17 | end 18 | 19 | def self.login_success(return_url, user_id) 20 | return return_url 21 | end 22 | 23 | end 24 | -------------------------------------------------------------------------------- /app/models/caboose/calendar.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class Calendar < ActiveRecord::Base 3 | self.table_name = "calendars" 4 | has_many :calendar_events, :dependent => :destroy 5 | attr_accessible :id, :site_id, :name, :description, :color 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /app/models/caboose/category_membership.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class CategoryMembership < ActiveRecord::Base 3 | self.table_name = 'store_category_memberships' 4 | 5 | belongs_to :category 6 | belongs_to :product 7 | 8 | attr_accessible :category_id, :product_id 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /app/models/caboose/crumbtrail.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class Crumbtrail 3 | 4 | @_crumbtrail = nil 5 | 6 | def add(url, text = nil) 7 | @_crumbtrail = [] if @_crumbtrail.nil? 8 | if url.is_a?(Hash) 9 | url.each do |url2, text2| 10 | @_crumbtrail << [url2, text2] 11 | end 12 | else 13 | @_crumbtrail << [url, text] 14 | end 15 | end 16 | 17 | def print(url = nil, text = nil) 18 | if url 19 | self.add(url, text) 20 | end 21 | 22 | str = "
" 29 | return str 30 | end 31 | 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /app/models/caboose/customization_membership.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class CustomizationMembership < ActiveRecord::Base 3 | self.table_name = 'store_customization_memberships' 4 | 5 | belongs_to :product 6 | belongs_to :customization, :class_name => 'Caboose::Product' 7 | 8 | attr_accessible :product_id, :customization_id 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /app/models/caboose/database_session.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::DatabaseSession < ActiveRecord::Base 3 | self.table_name = "sessions" 4 | attr_accessible :session_id, :data, :created_at, :updated_at 5 | end 6 | -------------------------------------------------------------------------------- /app/models/caboose/discount.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class Discount < ActiveRecord::Base 3 | self.table_name = 'store_invoice_discounts' 4 | self.primary_key = 'id' 5 | 6 | belongs_to :gift_card 7 | belongs_to :invoice 8 | attr_accessible :id, 9 | :gift_card_id, 10 | :invoice_id, 11 | :amount 12 | 13 | after_find do |d| 14 | d.amount = 0.00 if d.amount.nil? 15 | end 16 | 17 | def calculate_amount 18 | gc = self.gift_card 19 | self.amount = case self.gift_card.card_type 20 | when GiftCard::CARD_TYPE_AMOUNT then (self.invoice.total >= gc.balance ? gc.balance : self.invoice.total) 21 | when GiftCard::CARD_TYPE_PERCENTAGE then self.invoice.subtotal * gc.total 22 | when GiftCard::CARD_TYPE_NO_SHIPPING then self.invoice.shipping 23 | when GiftCard::CARD_TYPE_NO_TAX then self.invoice.tax 24 | end 25 | self.save 26 | end 27 | 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /app/models/caboose/domain.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::Domain < ActiveRecord::Base 3 | self.table_name = "domains" 4 | 5 | belongs_to :site, :class_name => 'Caboose::Site' 6 | attr_accessible :id, :site_id, :domain, :primary, :under_construction, :forward_to_primary, :forward_to_uri, :force_ssl 7 | 8 | end 9 | -------------------------------------------------------------------------------- /app/models/caboose/domain_constraint.rb: -------------------------------------------------------------------------------- 1 | class Caboose::DomainConstraint 2 | def initialize(domains) 3 | @domains = domains.is_a?(Array) ? domains.flatten : [domains].flatten 4 | end 5 | 6 | def matches?(request) 7 | m = false 8 | @domains.each do |d| 9 | if request.host =~ /#{d.gsub("\\","\\\\")}/ 10 | m = true 11 | break 12 | end 13 | end 14 | return m 15 | #return @domains.include?(request.host) 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /app/models/caboose/event_custom_field.rb: -------------------------------------------------------------------------------- 1 | class Caboose::EventCustomField < ActiveRecord::Base 2 | self.table_name = "event_custom_fields" 3 | 4 | belongs_to :site 5 | attr_accessible :id , 6 | :site_id , 7 | :key , 8 | :name , 9 | :field_type , 10 | :default_value , 11 | :options , 12 | :options_url , 13 | :sort_order 14 | 15 | FIELD_TYPE_TEXT = 'text' 16 | FIELD_TYPE_SELECT = 'select' 17 | FIELD_TYPE_CHECKBOX = 'checkbox' 18 | FIELD_TYPE_DATE = 'date' 19 | FIELD_TYPE_DATETIME = 'datetime' 20 | 21 | end -------------------------------------------------------------------------------- /app/models/caboose/event_custom_field_value.rb: -------------------------------------------------------------------------------- 1 | class Caboose::EventCustomFieldValue < ActiveRecord::Base 2 | self.table_name = "event_custom_field_values" 3 | 4 | belongs_to :calendar_event 5 | belongs_to :event_custom_field 6 | attr_accessible :id , 7 | :calendar_event_id , 8 | :event_custom_field_id , 9 | :key , 10 | :value , 11 | :sort_order 12 | 13 | end -------------------------------------------------------------------------------- /app/models/caboose/font.rb: -------------------------------------------------------------------------------- 1 | class Caboose::Font < ActiveRecord::Base 2 | self.table_name = "fonts" 3 | 4 | belongs_to :site, :class_name => 'Caboose::Site' 5 | attr_accessible :id, :site_id, :name, :family, :variant, :url 6 | 7 | end -------------------------------------------------------------------------------- /app/models/caboose/font_family.rb: -------------------------------------------------------------------------------- 1 | class Caboose::FontFamily < ActiveRecord::Base 2 | self.table_name = "font_families" 3 | has_many :font_variants, :class_name => 'Caboose::FontVariant', :dependent => :delete_all 4 | attr_accessible :id, :name 5 | end -------------------------------------------------------------------------------- /app/models/caboose/font_variant.rb: -------------------------------------------------------------------------------- 1 | class Caboose::FontVariant < ActiveRecord::Base 2 | self.table_name = "font_variants" 3 | belongs_to :font_family, :class_name => 'Caboose::FontFamily' 4 | attr_accessible :id, :ttf_url, :font_family_id, :variant, :weight, :style, :sort_order 5 | end -------------------------------------------------------------------------------- /app/models/caboose/ga.rb: -------------------------------------------------------------------------------- 1 | require 'httparty' 2 | 3 | module Caboose 4 | class GA # Google Analytics 5 | 6 | def self.event(site_id, category, action, label = nil, value = nil) 7 | 8 | site = Site.where(:id => site_id).first 9 | return if site.nil? 10 | sc = site.social_config 11 | ga_id = sc.google_analytics_id 12 | return if ga_id.nil? || ga_id.strip.length == 0 13 | 14 | params = { 15 | 'v' => 1, 16 | 'tid' => ga_id, 17 | 'cid' => site.id, 18 | 't' => "event", 19 | 'ec' => category, 20 | 'ea' => action 21 | } 22 | params['el'] = label if label 23 | params['ev'] = value if value 24 | 25 | HTTParty.post('http://www.google-analytics.com/collect', :body => params) 26 | end 27 | 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /app/models/caboose/invoice_discount.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class InvoiceDiscount < ActiveRecord::Base 3 | self.table_name = 'store_invoice_discounts' 4 | 5 | belongs_to :invoice 6 | belongs_to :discount 7 | 8 | attr_accessible :invoice_id, :discount_id 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /app/models/caboose/invoice_log.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class InvoiceLog < ActiveRecord::Base 3 | self.table_name = 'store_invoice_logs' 4 | 5 | belongs_to :invoice 6 | belongs_to :user 7 | attr_accessible :id , 8 | :invoice_id , 9 | :invoice_package_id , 10 | :line_item_id , 11 | :user_id , 12 | :date_logged , 13 | :invoice_action , 14 | :field , 15 | :old_value , 16 | :new_value 17 | 18 | ACTION_INVOICE_CREATED = 'invoice created' 19 | ACTION_INVOICE_UPDATED = 'invoice updated' 20 | ACTION_INVOICE_DELETED = 'invoice deleted' 21 | ACTION_INVOICE_PACKAGE_CREATED = 'invoice package created' 22 | ACTION_INVOICE_PACKAGE_UPDATED = 'invoice package updated' 23 | ACTION_INVOICE_PACKAGE_DELETED = 'invoice package deleted' 24 | ACTION_LINE_ITEM_CREATED = 'line item created' 25 | ACTION_LINE_ITEM_UPDATED = 'line item updated' 26 | ACTION_LINE_ITEM_DELETED = 'line item deleted' 27 | 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /app/models/caboose/letsencrypt_plugin_challenge.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class LetsencryptPluginChallenge < ActiveRecord::Base 3 | self.table_name = 'letsencrypt_plugin_challenges' 4 | # t.text :response 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /app/models/caboose/letsencrypt_plugin_setting.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class LetsencryptPluginSetting < ActiveRecord::Base 3 | self.table_name = 'letsencrypt_plugin_settings' 4 | # t.text :private_key 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /app/models/caboose/line_item_modification.rb: -------------------------------------------------------------------------------- 1 | 2 | module Caboose 3 | class LineItemModification < ActiveRecord::Base 4 | self.table_name = 'store_line_item_modifications' 5 | self.primary_key = 'id' 6 | 7 | belongs_to :line_item, :class_name => 'Caboose::LineItem' 8 | belongs_to :modification, :class_name => 'Caboose::Modification' 9 | belongs_to :modification_value, :class_name => 'Caboose::ModificationValue' 10 | attr_accessible :id, 11 | :line_item_id, 12 | :modification_id, 13 | :modification_value_id, 14 | :input 15 | 16 | end 17 | end 18 | 19 | -------------------------------------------------------------------------------- /app/models/caboose/login_log.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::LoginLog < ActiveRecord::Base 3 | self.table_name = "login_logs" 4 | 5 | belongs_to :site, :class_name => 'Caboose::Site' 6 | belongs_to :user, :class_name => 'Caboose::User' 7 | 8 | attr_accessible :id, 9 | :site_id , 10 | :username , 11 | :user_id , 12 | :date_attempted , 13 | :ip , 14 | :success 15 | 16 | def self.fail_count(user) 17 | last_successful_login = Caboose::LoginLog.where(:user_id => user.id, :success => true).reorder("date_attempted desc").first 18 | id = last_successful_login ? last_successful_login.id : 1 19 | return Caboose::LoginLog.where("user_id = ? and success = ? and id > ?", user.id, false, id).count 20 | end 21 | 22 | end 23 | -------------------------------------------------------------------------------- /app/models/caboose/menu_block.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::MenuBlock 3 | 4 | attr_accessor :title, :title_id, :links 5 | 6 | end 7 | -------------------------------------------------------------------------------- /app/models/caboose/message.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class Message 3 | include ActiveModel::Validations 4 | include ActiveModel::Conversion 5 | extend ActiveModel::Naming 6 | 7 | attr_accessor :name, :email, :body 8 | 9 | validates :name, :email, :body, presence: true 10 | validates :email, format: { :with => %r{.+@.+\..+} }, allow_blank: false 11 | 12 | def initialize(attributes={}) 13 | attributes.each { |name, value| send("#{name}=", value) } 14 | end 15 | 16 | def persisted? 17 | false 18 | end 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /app/models/caboose/modification.rb: -------------------------------------------------------------------------------- 1 | 2 | module Caboose 3 | class Modification < ActiveRecord::Base 4 | self.table_name = 'store_modifications' 5 | self.primary_key = 'id' 6 | 7 | belongs_to :product, :class_name => 'Caboose::Product' 8 | has_many :modification_values, -> { order(:sort_order) }, :class_name => 'Caboose::ModificationValue' 9 | attr_accessible :id, 10 | :product_id, 11 | :sort_order, 12 | :name 13 | 14 | def values 15 | return self.modification_values 16 | end 17 | 18 | end 19 | end 20 | 21 | -------------------------------------------------------------------------------- /app/models/caboose/modification_value.rb: -------------------------------------------------------------------------------- 1 | 2 | module Caboose 3 | class ModificationValue < ActiveRecord::Base 4 | self.table_name = 'store_modification_values' 5 | self.primary_key = 'id' 6 | 7 | belongs_to :modification, :class_name => 'Caboose::Modification' 8 | attr_accessible :id, 9 | :modification_id, 10 | :sort_order, 11 | :value, 12 | :is_default, 13 | :price, 14 | :requires_input, 15 | :input_description 16 | 17 | end 18 | end 19 | 20 | -------------------------------------------------------------------------------- /app/models/caboose/modification_value_input_field.rb: -------------------------------------------------------------------------------- 1 | 2 | module Caboose 3 | class ModificationValueInputField < ActiveRecord::Base 4 | self.table_name = 'store_modification_value_input_fields' 5 | self.primary_key = 'id' 6 | 7 | belongs_to :modification_value, :class_name => 'Caboose::ModificationValue' 8 | attr_accessible :id, 9 | :modification_value_id, 10 | :sort_order, 11 | :name, 12 | :description, 13 | :field_type, 14 | :default_value, 15 | :width, 16 | :height, 17 | :options, 18 | :options_url 19 | 20 | end 21 | end 22 | -------------------------------------------------------------------------------- /app/models/caboose/page_cache.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class PageCache < ActiveRecord::Base 3 | self.table_name = "page_cache" 4 | 5 | belongs_to :page 6 | attr_accessible :id, 7 | :page_id, 8 | :render_function, 9 | :block 10 | 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /app/models/caboose/page_custom_field_value.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::PageCustomFieldValue < ActiveRecord::Base 3 | self.table_name = "page_custom_field_values" 4 | 5 | belongs_to :page 6 | belongs_to :page_custom_field 7 | attr_accessible :id , 8 | :page_id , 9 | :page_custom_field_id , 10 | :key , 11 | :value , 12 | :sort_order 13 | 14 | def duplicate(page_id, page_custom_field_id) 15 | v = Caboose::PageCustomFieldValue.create( 16 | :page_id => page_id, 17 | :page_custom_field_id => page_custom_field_id, 18 | :key => self.key, 19 | :value => self.value, 20 | :sort_order => self.sort_order 21 | ) 22 | return v 23 | end 24 | 25 | end 26 | -------------------------------------------------------------------------------- /app/models/caboose/page_permission.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::PagePermission < ActiveRecord::Base 3 | self.table_name = "page_permissions" 4 | belongs_to :page 5 | belongs_to :role 6 | attr_accessible :page_id, :role_id, :action 7 | end 8 | -------------------------------------------------------------------------------- /app/models/caboose/page_tag.rb: -------------------------------------------------------------------------------- 1 | class Caboose::PageTag < ActiveRecord::Base 2 | self.table_name = "page_tags" 3 | belongs_to :page 4 | attr_accessible :id, :page_id, :tag 5 | end 6 | -------------------------------------------------------------------------------- /app/models/caboose/page_template.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class PageTemplate < ActiveRecord::Base 3 | self.table_name = "page_templates" 4 | belongs_to :page 5 | belongs_to :category, :class_name => "Caboose::PageTemplateCategory" 6 | attr_accessible :page_id, :site_id, :title, :description, :created_at, :updated_at, :category_id, :sort_order 7 | has_attached_file :screenshot, 8 | :path => ':caboose_prefixpage_templates/:id_screenshot_:style.:extension', 9 | :default_url => "https://cabooseit.s3.amazonaws.com/assets/shared/template.png", 10 | :styles => { 11 | :small => '300x300>', 12 | :medium => '600x600>', 13 | :large => '1000x1000>' 14 | } 15 | do_not_validate_attachment_file_type :screenshot 16 | end 17 | end -------------------------------------------------------------------------------- /app/models/caboose/page_template_category.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class PageTemplateCategory < ActiveRecord::Base 3 | self.table_name = "page_template_categories" 4 | has_many :page_templates, :foreign_key => "category_id" 5 | attr_accessible :title, :description, :sort_order, :superadmin_only 6 | 7 | def self.all_options(blank) 8 | if blank 9 | options = [{'value' => '','text' => ''}] 10 | else 11 | options = [] 12 | end 13 | PageTemplateCategory.order(:title).all.each do |s| 14 | options << { 'value' => s.id, 'text' => s.title } 15 | end 16 | return options.to_json 17 | end 18 | 19 | end 20 | end -------------------------------------------------------------------------------- /app/models/caboose/pager.rb: -------------------------------------------------------------------------------- 1 | class Caboose::Pager < Caboose::PageBarGenerator 2 | end 3 | -------------------------------------------------------------------------------- /app/models/caboose/permanent_redirect.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::PermanentRedirect < ActiveRecord::Base 3 | self.table_name = "permanent_redirects" 4 | 5 | attr_accessible :id, 6 | :site_id, 7 | :priority, 8 | :is_regex, 9 | :old_url, 10 | :new_url 11 | 12 | validates :old_url, :presence => { :message => 'The old URL is required.' } 13 | validates :new_url, :presence => { :message => 'The new URL is required.' } 14 | 15 | def self.match(site_id, uri) 16 | Caboose::PermanentRedirect.where(:site_id => site_id).reorder(:priority).all.each do |pr| 17 | if pr.is_regex 18 | return uri.gsub(/#{pr.old_url}/, pr.new_url) if uri =~ /#{pr.old_url}/ 19 | else 20 | return pr.new_url if uri == pr.old_url 21 | end 22 | end 23 | return false 24 | end 25 | 26 | end 27 | -------------------------------------------------------------------------------- /app/models/caboose/permission.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::Permission < ActiveRecord::Base 3 | self.table_name = "permissions" 4 | 5 | belongs_to :site 6 | has_many :role_permissions 7 | has_many :roles, :through => :role_permissions 8 | attr_accessible :action, :resource, :site_id 9 | 10 | def self.allow(role_id, resource, action) 11 | role = Role.find(role_id) 12 | perm = Permission.where(:resource => resource, :action => action).first 13 | return if role.nil? || perm.nil? 14 | role.permissions.push(perm) 15 | role.save 16 | end 17 | end -------------------------------------------------------------------------------- /app/models/caboose/post_category.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::PostCategory < ActiveRecord::Base 3 | self.table_name = "post_categories" 4 | 5 | has_many :post_category_memberships 6 | has_many :posts, :through => :post_category_memberships 7 | 8 | attr_accessible :id, :site_id, :name 9 | 10 | end 11 | -------------------------------------------------------------------------------- /app/models/caboose/post_category_membership.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::PostCategoryMembership < ActiveRecord::Base 3 | self.table_name = "post_category_memberships" 4 | 5 | belongs_to :post_category 6 | belongs_to :post 7 | attr_accessible :post_id, :post_category_id 8 | 9 | end 10 | -------------------------------------------------------------------------------- /app/models/caboose/post_custom_field.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::PostCustomField < ActiveRecord::Base 3 | self.table_name = "post_custom_fields" 4 | 5 | belongs_to :site 6 | attr_accessible :id , 7 | :site_id , 8 | :key , 9 | :name , 10 | :field_type , 11 | :default_value , 12 | :options , 13 | :options_url , 14 | :sort_order 15 | 16 | FIELD_TYPE_TEXT = 'text' 17 | FIELD_TYPE_SELECT = 'select' 18 | FIELD_TYPE_CHECKBOX = 'checkbox' 19 | FIELD_TYPE_DATE = 'date' 20 | FIELD_TYPE_DATETIME = 'datetime' 21 | 22 | end 23 | -------------------------------------------------------------------------------- /app/models/caboose/post_custom_field_value.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::PostCustomFieldValue < ActiveRecord::Base 3 | self.table_name = "post_custom_field_values" 4 | 5 | belongs_to :post 6 | belongs_to :post_custom_field 7 | attr_accessible :id , 8 | :post_id , 9 | :post_custom_field_id , 10 | :key , 11 | :value , 12 | :sort_order 13 | 14 | end 15 | -------------------------------------------------------------------------------- /app/models/caboose/product_category_sort.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class ProductCategorySort < ActiveRecord::Base 3 | self.table_name = 'store_product_category_sorts' 4 | self.primary_key = 'id' 5 | 6 | belongs_to :product 7 | belongs_to :category 8 | attr_accessible :id, 9 | :product_id, 10 | :category_id, 11 | :sort_order 12 | 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /app/models/caboose/product_default.rb: -------------------------------------------------------------------------------- 1 | # 2 | # ProductDefault 3 | # 4 | # :: Class Methods 5 | # :: Instance Methods 6 | 7 | module Caboose 8 | class ProductDefault < ActiveRecord::Base 9 | self.table_name = 'store_product_defaults' 10 | 11 | belongs_to :site 12 | belongs_to :vendor 13 | attr_accessible :id , 14 | :site_id , 15 | :vendor_id , 16 | :option1 , 17 | :option2 , 18 | :option3 , 19 | :status , 20 | :on_sale , 21 | :allow_gift_wrap , 22 | :gift_wrap_price 23 | 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /app/models/caboose/product_image_variant.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class ProductImageVariant < ActiveRecord::Base 3 | self.table_name = 'store_product_image_variants' 4 | 5 | belongs_to :product_image 6 | belongs_to :variant 7 | 8 | attr_accessible :product_image_id, :variant_id 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /app/models/caboose/review.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class Review < ActiveRecord::Base 3 | self.table_name = 'store_reviews' 4 | 5 | belongs_to :product 6 | 7 | attr_accessible :id, 8 | :product_id, 9 | :name, 10 | :rating, 11 | :content 12 | end 13 | end -------------------------------------------------------------------------------- /app/models/caboose/role_membership.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::RoleMembership < ActiveRecord::Base 3 | self.table_name = "role_memberships" 4 | 5 | belongs_to :user 6 | belongs_to :role 7 | attr_accessible :user_id, :role_id 8 | 9 | end 10 | -------------------------------------------------------------------------------- /app/models/caboose/role_permission.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::RolePermission < ActiveRecord::Base 3 | self.table_name = "role_permissions" 4 | 5 | belongs_to :permission 6 | belongs_to :role 7 | attr_accessible :permission_id, :role_id 8 | 9 | end 10 | -------------------------------------------------------------------------------- /app/models/caboose/setting.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::Setting < ActiveRecord::Base 3 | self.table_name = "settings" 4 | attr_accessible :id, :site_id, :name, :value 5 | 6 | def self.value_for(name) 7 | s = self.where(:name => name).first 8 | return '' if s.nil? 9 | return s.value 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /app/models/caboose/shipping_method.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class ShippingMethod < ActiveRecord::Base 3 | self.table_name = 'store_shipping_methods' 4 | 5 | attr_accessible :id, 6 | :carrier, 7 | :service_code, 8 | :service_name 9 | 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /app/models/caboose/shipping_package_method.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class ShippingPackageMethod < ActiveRecord::Base 3 | self.table_name = 'store_shipping_package_methods' 4 | 5 | belongs_to :shipping_package 6 | belongs_to :shipping_method 7 | attr_accessible :id, 8 | :shipping_package_id, 9 | :shipping_method_id 10 | 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /app/models/caboose/site_membership.rb: -------------------------------------------------------------------------------- 1 | 2 | class Caboose::SiteMembership < ActiveRecord::Base 3 | self.table_name = "site_membership" 4 | 5 | belongs_to :site, :class_name => 'Caboose::Site' 6 | belongs_to :user, :class_name => 'Caboose::User' 7 | attr_accessible :id, :site_id, :user_id, :role 8 | 9 | ROLE_ADMIN = 'Admin' 10 | ROLE_USER = 'User' 11 | 12 | end 13 | -------------------------------------------------------------------------------- /app/models/caboose/social_config.rb: -------------------------------------------------------------------------------- 1 | class Caboose::SocialConfig < ActiveRecord::Base 2 | self.table_name = "social_configs" 3 | 4 | belongs_to :site, :class_name => "Caboose::Site" 5 | 6 | attr_accessible :id, 7 | :site_id , 8 | :facebook_page_id , 9 | :twitter_username , 10 | :instagram_username , 11 | :instagram_user_id , 12 | :instagram_access_token, 13 | :youtube_url , 14 | :pinterest_url , 15 | :vimeo_url , 16 | :rss_url , 17 | :google_plus_url , 18 | :linkedin_url , 19 | :google_analytics_id , 20 | :facebook_pixel 21 | 22 | has_attached_file :share_image, 23 | :path => 'share_images/:id_:style.:extension', 24 | :default_url => 'http://placehold.it/800x500', 25 | :s3_protocol => :https, 26 | :styles => { 27 | large: '1200x1200>' 28 | } 29 | do_not_validate_attachment_file_type :share_image 30 | 31 | end -------------------------------------------------------------------------------- /app/models/caboose/stackable_group.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class StackableGroup < ActiveRecord::Base 3 | self.table_name = 'store_stackable_groups' 4 | 5 | has_many :products 6 | attr_accessible :id, 7 | :name, 8 | :extra_length, 9 | :extra_width, 10 | :extra_height, 11 | :max_length, 12 | :max_width, 13 | :max_height 14 | 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /app/models/caboose/std_class.rb: -------------------------------------------------------------------------------- 1 | require "ostruct" 2 | module Caboose 3 | class StdClass < OpenStruct 4 | def as_json(options = nil) 5 | @table.as_json(options) 6 | end 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /app/models/caboose/tax_line.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class TaxLine < ActiveRecord::Base 3 | attr_accessible :id, 4 | :title, # The name of the tax, eg. QST or VAT 5 | :price, # The amount 6 | :rate, # The rate. It will return 0.175 if it is 17.5% 7 | :rate_percentage # The tax rate in human readable form. It will return 17.5 if the rate is 0.175 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /app/models/caboose/theme_file.rb: -------------------------------------------------------------------------------- 1 | class Caboose::ThemeFile < ActiveRecord::Base 2 | self.table_name = "theme_files" 3 | 4 | attr_accessible :filename, :nice_name, :default_included, :code 5 | 6 | end -------------------------------------------------------------------------------- /app/models/caboose/theme_file_membership.rb: -------------------------------------------------------------------------------- 1 | class Caboose::ThemeFileMembership < ActiveRecord::Base 2 | self.table_name = "theme_file_memberships" 3 | 4 | belongs_to :theme 5 | belongs_to :theme_file 6 | attr_accessible :theme_id, :theme_file_id 7 | 8 | end -------------------------------------------------------------------------------- /app/models/caboose/variant_child.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | class VariantChild < ActiveRecord::Base 3 | self.table_name = 'store_variant_children' 4 | 5 | belongs_to :parent , :class_name => 'Caboose::Variant', :foreign_key => 'parent_id' 6 | belongs_to :variant , :class_name => 'Caboose::Variant', :foreign_key => 'variant_id' 7 | attr_accessible :id, 8 | :parent_id, 9 | :variant_id, 10 | :quantity 11 | 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /app/models/caboose/vendor.rb: -------------------------------------------------------------------------------- 1 | 2 | module Caboose 3 | class Vendor < ActiveRecord::Base 4 | self.table_name = 'store_vendors' 5 | 6 | belongs_to :site 7 | has_many :products 8 | has_attached_file :image, 9 | :path => ':caboose_prefixvendors/:id_:style.:extension', 10 | :default_url => 'http://placehold.it/300x300', 11 | :styles => { 12 | :tiny => '150x200>', 13 | :thumb => '300x400>', 14 | :large => '600x800>' 15 | } 16 | do_not_validate_attachment_file_type :image 17 | attr_accessible :id, 18 | :site_id, 19 | :alternate_id, 20 | :name, 21 | :status, 22 | :sort_order, 23 | :email 24 | after_save :clear_filters 25 | 26 | def self.active 27 | where(:status => 'Active') 28 | end 29 | 30 | def update_products 31 | self.products.each { |product| product.update_attribute(:vendor_status, self.status) } 32 | end 33 | 34 | def clear_filters 35 | SearchFilter.delete_all 36 | end 37 | end 38 | end 39 | -------------------------------------------------------------------------------- /app/models/caboose/wish_list.rb: -------------------------------------------------------------------------------- 1 | 2 | module Caboose 3 | class WishList < ActiveRecord::Base 4 | self.table_name = "wish_lists" 5 | 6 | belongs_to :user, :class_name => 'Caboose::User' 7 | has_many :wish_list_line_items, :class_name => 'Caboose::WishListLineItem' 8 | attr_accessible :id, 9 | :user_id, 10 | :name, 11 | :date_created 12 | 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /app/models/caboose/wish_list_line_item.rb: -------------------------------------------------------------------------------- 1 | 2 | module Caboose 3 | class WishListLineItem < ActiveRecord::Base 4 | self.table_name = "wish_list_line_item" 5 | 6 | belongs_to :wish_list, :class_name => 'Caboose::WishList' 7 | belongs_to :variant, :class_name => 'Caboose::Variant' 8 | attr_accessible :id, 9 | :variant_id, 10 | :quantity 11 | 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /app/views/caboose/ab_variants/admin_index.html.erb: -------------------------------------------------------------------------------- 1 |

A/B Test Variants

2 | 3 |

New Variant

4 | <% if (@variants.count > 0) %> 5 | 6 | <%= raw @gen.sortable_table_headings({'name' => 'Variant Name', 'analytics_name' => 'Analytics Name'}) %> 7 | <% @variants.each do |v| %> 8 | 9 | 10 | 11 | 12 | <% end %> 13 |
<%= v.name %><%= v.analytics_name %>
14 |

<%= raw @gen.generate %>

15 | <% else %> 16 |

No A/B variants found.

17 | <% end %> 18 | -------------------------------------------------------------------------------- /app/views/caboose/admin/_footer.html.erb: -------------------------------------------------------------------------------- 1 |
-------------------------------------------------------------------------------- /app/views/caboose/admin/_header.html.erb: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 12 |
13 | -------------------------------------------------------------------------------- /app/views/caboose/admin/_icons.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/views/caboose/admin/_mobile_navigation.html.erb: -------------------------------------------------------------------------------- 1 |
2 | 22 |
-------------------------------------------------------------------------------- /app/views/caboose/application/show.html.erb: -------------------------------------------------------------------------------- 1 | <% content_for :page_title do %><%= @page.title %><% end %> 2 | <% content_for :page_content do %><%= @page.content %><% end %> 3 | -------------------------------------------------------------------------------- /app/views/caboose/application/under_construction.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Under Construction 5 | 9 | 10 | 11 |
12 |

We apologize for the inconvenience, but we're in the process of upgrading our site. We'll be finished very soon!

13 |
14 | 15 | 16 | -------------------------------------------------------------------------------- /app/views/caboose/assets/admin_index.html.erb: -------------------------------------------------------------------------------- 1 |
2 | Admin > 3 | Assets 4 |
5 | 6 |

<%= raw asset_path('test.gif') %>

7 | 8 |
9 |
10 | 11 | <% content_for :caboose_js do %> 12 | <%= javascript_include_tag 'caboose/class' %> 13 | <%= javascript_include_tag 'caboose/model/all' %> 14 | <%= javascript_include_tag 'caboose/assets_controller' %> 15 | 16 | 27 | <% end %> 28 | 29 | <% content_for :caboose_js do %> 30 | <%= stylesheet_link_tag 'caboose/admin_assets_index' %> 31 | <% end %> 32 | -------------------------------------------------------------------------------- /app/views/caboose/block_type_categories/admin_index.html.erb: -------------------------------------------------------------------------------- 1 |

Block Type Categories

2 | 3 |
    4 | <% @btc.each do |btc| %> 5 |
  • 6 | <%= btc.name %> 7 |
      8 | <% btc.children.each do |btc2| %> 9 |
    • 10 | <%= btc2.name %> 11 |
        12 | <% btc2.children.each do |btc3| %> 13 |
      • 14 | <%= btc3.name %> 15 |
      • 16 | <% end %> 17 |
      18 |
    • 19 | <% end %> 20 |
    21 |
  • 22 | <% end %> 23 |
24 |

25 | New Category -------------------------------------------------------------------------------- /app/views/caboose/block_type_categories/admin_new.html.erb: -------------------------------------------------------------------------------- 1 | 2 |

New Block Type Category

3 | 4 |

5 |
6 |

7 | 8 | <% content_for :caboose_js do %> 9 | <%= javascript_include_tag "caboose/model/all" %> 10 | 32 | <% end %> 33 | -------------------------------------------------------------------------------- /app/views/caboose/block_type_sources/admin_index.html.erb: -------------------------------------------------------------------------------- 1 |
2 | Admin > 3 | Block Types > 4 | Store 5 |
6 | 7 |

Block Type Sources

8 | 9 |

New Source

10 | 11 | <% if (@block_type_sources.count > 0) %> 12 | 13 | 14 | 15 | 16 | 17 | 18 | <% @block_type_sources.each do |bts| %> 19 | 20 | 21 | 22 | 23 | <% end %> 24 |
NameURL
<%= bts.name %><%= bts.url %>
25 | 26 | <% else %> 27 | 28 |

There are no sources.

29 | 30 | <% end %> -------------------------------------------------------------------------------- /app/views/caboose/block_types/admin_error_log.html.erb: -------------------------------------------------------------------------------- 1 |

Error Log

2 | 3 | Back 4 | 5 | <% if !@block_type.latest_error.blank? %> 6 |
7 | <%== @block_type.latest_error.gsub("\n","
") %> 8 |
9 | <% end %> -------------------------------------------------------------------------------- /app/views/caboose/block_types/admin_parse_form.html.erb: -------------------------------------------------------------------------------- 1 |
2 | Admin > 3 | Block Types > 4 | Parser 5 |
6 | 7 |

Block Type Parser

8 | 9 |
10 | 11 | <% content_for :caboose_js do %> 12 | <%= javascript_include_tag 'caboose/model/all' %> 13 | <%= javascript_include_tag 'caboose/admin_block_type_parser_controller' %> 14 | 25 | <% end %> 26 | <% content_for :caboose_css do %> 27 | 32 | <% end %> -------------------------------------------------------------------------------- /app/views/caboose/blocks/._post.html.erb.marks: -------------------------------------------------------------------------------- 1 | !r;936;936 2 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_block.html.erb: -------------------------------------------------------------------------------- 1 |
2 | <% if block.children.count > 0 %> 3 | <% block.children.each do |b| %><%= raw block.render(b, local_assigns) %><% end %> 4 | <% elsif editing %> 5 | <%= raw empty_text %> 6 | <% end %> 7 |
-------------------------------------------------------------------------------- /app/views/caboose/blocks/_checkbox.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | checked = block.value 3 | checked = 0 if checked.nil? 4 | checked = checked == 1 || checked == '1' ? true : false 5 | %> 6 | <% if editing %> 7 |
<%= raw block.block_type.description %> = <%= (checked ? "Yes" : "No") %>
8 | <% else %> 9 | <%= raw block.block_type.description %> 10 | <% end %> 11 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_controller_view_content.html.erb: -------------------------------------------------------------------------------- 1 |
2 | <% if editing %> 3 |

Controller view content

4 | <% else %> 5 | <%= raw controller_view_content %> 6 | <% end %> 7 |
-------------------------------------------------------------------------------- /app/views/caboose/blocks/_file.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | url = nil 3 | name = nil 4 | if block.media 5 | url = block.media.file_url 6 | name = block.media.file_file_name 7 | name = block.media.image_file_name if name.nil? 8 | elsif block.file 9 | url = block.file.url 10 | name = block.file_file_name 11 | end 12 | 13 | if editing 14 | if url.nil? || url.starts_with?('http://placehold.it') || url.include?('missing') 15 | %>

Click to select a file.

<% 16 | else 17 | %>

<%= name %>

<% 18 | end 19 | elsif url 20 | %><% 21 | end 22 | %> -------------------------------------------------------------------------------- /app/views/caboose/blocks/_ga.html.erb: -------------------------------------------------------------------------------- 1 | <% sc = site.social_config %> 2 | 3 | <% if sc.auto_ga_js && !sc.google_analytics_id.blank? %> 4 | 5 | 14 | <% end %> -------------------------------------------------------------------------------- /app/views/caboose/blocks/_ga_events.html.erb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/views/caboose/blocks/_ga_events.html.erb -------------------------------------------------------------------------------- /app/views/caboose/blocks/_google_spreadsheet_cell_value.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | spreadsheet_id = block.child_value('spreadsheet_id') 3 | row = block.child_value('row') 4 | col = block.child_value('column') 5 | %> 6 |
7 | <% if editing && (spreadsheet_id.nil? || spreadsheet_id.strip.length == 0) %> 8 | [Empty spreadsheet ID] 9 | <% elsif editing && (row.nil? || row.strip.length == 0) %> 10 | [Empty spreadsheet row] 11 | <% elsif editing && (col.nil? || col.strip.length == 0) %> 12 | [Empty spreadsheet column] 13 | <% elsif !editing && spreadsheet_id && row && col %><% end %> 14 |
15 | <% if spreadsheet_id && row && col %> 16 | <%= content_for :js do %> 17 | <%= javascript_include_tag('caboose/google_spreadsheets') %> 18 | 24 | <% end %> 25 | <% end %> 26 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_heading.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | size = block.child_value('size') 3 | text = block.child_value('text') 4 | style = block.child_value('style') 5 | size = 1 if size.nil? 6 | text = (empty_text ? empty_text : "") if text.nil? || text == "" 7 | 8 | if editing %>
style='<%= style %>'><%= raw text %>>
<% 9 | else %> id='block_<%= block.id %>' style='<%= style %>'><%= raw text %>><% end %> -------------------------------------------------------------------------------- /app/views/caboose/blocks/_html.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | html = block.value 3 | if html.nil? || html == "" 4 | html = (empty_text ? "

#{empty_text}

" : "") 5 | end 6 | 7 | %><%= raw html %> -------------------------------------------------------------------------------- /app/views/caboose/blocks/_layout_basic_content.html.erb: -------------------------------------------------------------------------------- 1 |
2 |
3 | <% if controller_view_content && controller_view_content.strip.length > 0 %> 4 | <%= raw controller_view_content %> 5 | <% elsif block.children.count > 0 %> 6 | <% block.children.each do |b| %><%= raw block.render(b, local_assigns) %><% end %> 7 | <% end %> 8 |
9 |
10 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_layout_basic_footer.html.erb: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_layout_basic_header.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Please edit /app/views/caboose/blocks/_layout_basic_header.html.erb

3 |
-------------------------------------------------------------------------------- /app/views/caboose/blocks/_layout_left_sidebar_content.html.erb: -------------------------------------------------------------------------------- 1 |
2 |
3 | <% if editing %>
<% end %> 4 | <% block.children.each do |b| %><%= raw block.render(b, local_assigns) %><% end %> 5 | <% if editing %>
<% end %> 6 |
7 |
-------------------------------------------------------------------------------- /app/views/caboose/blocks/_layout_left_sidebar_footer.html.erb: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_layout_left_sidebar_header.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Please edit /app/views/caboose/blocks/_layout_left_sidebar_header.html.erb

3 |
-------------------------------------------------------------------------------- /app/views/caboose/blocks/_layout_left_sidebar_sidebar.html.erb: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_layout_post_content.html.erb: -------------------------------------------------------------------------------- 1 |
2 |
3 | <% if post.body %> 4 |

<%= raw post.title %>

5 | <%= raw post.body %> 6 | <% else %> 7 | <% block.children.each do |b| %><%= raw block.render(b, local_assigns) %><% end %> 8 | <% end %> 9 |
10 |
11 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_layout_post_footer.html.erb: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_layout_post_header.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Please edit /app/views/caboose/blocks/_layout_post_header.html.erb

3 |
-------------------------------------------------------------------------------- /app/views/caboose/blocks/_layout_right_sidebar_content.html.erb: -------------------------------------------------------------------------------- 1 |
2 |
3 | <% if block.children.count > 0 %> 4 | <% block.children.each do |b| %><%= raw block.render(b, local_assigns) %><% end %> 5 | <% end %> 6 |
7 |
-------------------------------------------------------------------------------- /app/views/caboose/blocks/_layout_right_sidebar_footer.html.erb: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_layout_right_sidebar_header.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Please edit /app/views/caboose/blocks/_layout_right_sidebar_header.html.erb

3 |
-------------------------------------------------------------------------------- /app/views/caboose/blocks/_layout_right_sidebar_sidebar.html.erb: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_product_category.html.erb: -------------------------------------------------------------------------------- 1 |

This is a category.

2 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_product_crumbtrail.html.erb: -------------------------------------------------------------------------------- 1 |

Product crumbtrail.

2 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_product_details.html.erb: -------------------------------------------------------------------------------- 1 |

This is a product.

2 | 3 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_product_sales.html.erb: -------------------------------------------------------------------------------- 1 |

These are the product sales.

2 | 3 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_products.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | # Note: This block is in the content area for the /products pages. 3 | # It's set up like this so that each site can have custom views. 4 | 5 | if editing %>

Products block, click to edit

<% # Something to click on when we're editing the page 6 | elsif @sale_categories %><%= block.partial('product_sales' , local_assigns) %><% # Products on sale 7 | elsif @product %><%= block.partial('product_details' , local_assigns) %><% # Single product 8 | elsif @category && params[:vendor_id] %><%= block.partial('vendor_products' , local_assigns) %><% # Products for vendor 9 | elsif @category && params[:query] %><%= block.partial('search_results' , local_assigns) %><% # Products for search query 10 | elsif @category %><%= block.partial('product_index' , local_assigns) %><% # Products for category 11 | else %>

Invalid product.

<% # Invalid product 12 | end 13 | %> -------------------------------------------------------------------------------- /app/views/caboose/blocks/_render_function.html.erb: -------------------------------------------------------------------------------- 1 | <%== ERB.new(render_function).result(self.instance_eval { binding }) %> 2 | 3 | <% if caboose_js && caboose_js.length > 1 %> 4 | <% caboose_js.to_a.each_with_index do |js, ind| %> 5 | <% next if ind == 0 %> 6 | <% content_for :js do %> 7 | <% begin %> 8 | <% erb = ERB.new(js).result(self.instance_eval { binding }) %> 9 | <%== erb %> 10 | <% rescue %> 11 | <% Caboose.log("JS ERROR for block #{block.id}") %> 12 | <% end %> 13 | <% end %> 14 | <% end %> 15 | <% end %> 16 | <% if caboose_css && caboose_css.length > 1 %> 17 | <% caboose_css.to_a.each_with_index do |css, ind| %> 18 | <% next if ind == 0 %> 19 | <% content_for :css do %> 20 | <% begin %> 21 | <% erb = ERB.new(css).result(self.instance_eval { binding }) %> 22 | <%== erb %> 23 | <% rescue %> 24 | <% Caboose.log("CSS ERROR for block #{block.id}") %> 25 | <% end %> 26 | <% end %> 27 | <% end %> 28 | <% end %> -------------------------------------------------------------------------------- /app/views/caboose/blocks/_richtext.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | text = block.value 3 | text = "

#{empty_text}

" if editing && (text.nil? || text.strip.length == 0) 4 | %> 5 |
<%= raw text %>
-------------------------------------------------------------------------------- /app/views/caboose/blocks/_ruby_block.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | # This block should only be available to technical admins 3 | %>
<% 4 | if block.value && block.value.strip.length > 0 5 | %><%= ERB.new(block.value).result(self.instance_eval { binding }) %><% 6 | elsif editing 7 | %>

[Empty ruby block]

<% 8 | end 9 | %>
10 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_select.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | text = block.value 3 | if text.nil? || text.strip.length == 0 4 | text = empty_text ? "

#{empty_text}

" : "" 5 | end 6 | 7 | %> 8 | <% if editing %> 9 |
<%= raw text %>
10 | <% else %> 11 | <%= raw text %> 12 | <% end %> 13 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/_selector_switch_one.html.erb: -------------------------------------------------------------------------------- 1 |
2 | <% if block.children.count > 0 %> 3 | <% block.children.each do |b| %><%= raw block.render(b, local_assigns) %><% end %> 4 | <% elsif editing %> 5 | <%= raw empty_text %> 6 | <% end %> 7 | <% if editing && modal %> 8 |
9 |

Add a child block!

10 | <% end %> 11 |
-------------------------------------------------------------------------------- /app/views/caboose/blocks/_selector_switch_three.html.erb: -------------------------------------------------------------------------------- 1 |
2 | <% if block.children.count > 0 %> 3 | <% block.children.each do |b| %><%= raw block.render(b, local_assigns) %><% end %> 4 | <% elsif editing %> 5 | <%= raw empty_text %> 6 | <% end %> 7 | <% if editing && modal %> 8 |
9 |

Add a child block!

10 | <% end %> 11 |
-------------------------------------------------------------------------------- /app/views/caboose/blocks/_selector_switch_two.html.erb: -------------------------------------------------------------------------------- 1 |
2 | <% if block.children.count > 0 %> 3 | <% block.children.each do |b| %><%= raw block.render(b, local_assigns) %><% end %> 4 | <% elsif editing %> 5 | <%= raw empty_text %> 6 | <% end %> 7 | <% if editing && modal %> 8 |
9 |

Add a child block!

10 | <% end %> 11 |
-------------------------------------------------------------------------------- /app/views/caboose/blocks/_text.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | text = block.value 3 | if text.nil? || text.strip.length == 0 4 | text = empty_text ? "

#{empty_text}

" : "" 5 | end 6 | 7 | %> 8 | <% if editing %> 9 |
<%= raw text %>
10 | <% else %> 11 | <%= raw text %> 12 | <% end %> 13 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/admin_edit_custom.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | obj = block.value && block.value != "" ? JSON.parse(block.value) : nil 3 | %> 4 |
5 | 6 | <% content_for :caboose_js do %> 7 | <%= javascript_include_tag "caboose/model/all" %> 8 | 35 | <% end %> 36 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/admin_edit_h1.html.erb: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | <% content_for :caboose_js do %> 5 | <%= javascript_include_tag "caboose/model/all" %> 6 | 33 | <% end %> 34 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/admin_edit_h2.html.erb: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | <% content_for :caboose_js do %> 5 | <%= javascript_include_tag "caboose/model/all" %> 6 | 33 | <% end %> 34 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/admin_edit_h3.html.erb: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | <% content_for :caboose_js do %> 5 | <%= javascript_include_tag "caboose/model/all" %> 6 | 33 | <% end %> 34 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/admin_edit_h4.html.erb: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | <% content_for :caboose_js do %> 5 | <%= javascript_include_tag "caboose/model/all" %> 6 | 33 | <% end %> 34 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/admin_edit_h5.html.erb: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | <% content_for :caboose_js do %> 5 | <%= javascript_include_tag "caboose/model/all" %> 6 | 33 | <% end %> 34 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/admin_edit_h6.html.erb: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | <% content_for :caboose_js do %> 5 | <%= javascript_include_tag "caboose/model/all" %> 6 | 33 | <% end %> 34 | -------------------------------------------------------------------------------- /app/views/caboose/blocks/admin_render_second_level.json.erb: -------------------------------------------------------------------------------- 1 | <% 2 | blocks = @p.block.children.collect do |b| 3 | { 4 | :id => b.id, 5 | :block_type_id => b.block_type.id, 6 | :sort_order => b.sort_order, 7 | :html => b.render(b, { 8 | :view => self, 9 | #:controller_view_content => yield, 10 | :modal => false, 11 | :empty_text => @empty_text, 12 | :editing => true 13 | }) 14 | } 15 | end 16 | %><%= raw blocks.to_json %> -------------------------------------------------------------------------------- /app/views/caboose/blocks/tinymce.js.erb: -------------------------------------------------------------------------------- 1 | <%= raw caboose_tinymce %> 2 | -------------------------------------------------------------------------------- /app/views/caboose/cart/index.html.erb: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | 5 | 6 |

7 |
8 | 9 | <% content_for :caboose_css do %> 10 | <%= stylesheet_link_tag 'caboose/message_boxes' %> 11 | <%= stylesheet_link_tag 'caboose/model_binder' %> 12 | <%= stylesheet_link_tag 'caboose/cart' %> 13 | <% end %> 14 | 15 | <% content_for :caboose_js do %> 16 | <%= javascript_include_tag 'caboose/model/all' %> 17 | <%= javascript_include_tag 'caboose/cart' %> 18 | 31 | <% end %> 32 | -------------------------------------------------------------------------------- /app/views/caboose/categories/admin_index.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | 3 | def category_list(cat) 4 | str = "
    " 5 | str << category_list_items(cat) 6 | str << "
" 7 | return str 8 | end 9 | 10 | def category_list_items(cat) 11 | str = "
  • #{cat.name}" 12 | cat.children.each{ |kid| str << category_list(kid) } if cat.children && cat.children.count > 0 13 | str << "
  • " 14 | return str 15 | end 16 | 17 | %> 18 | 19 |

    Categories

    20 | New Category 21 | <%= category_list(@top_cat) %> 22 | 23 | <% content_for :caboose_js do %> 24 | 27 | <% end %> -------------------------------------------------------------------------------- /app/views/caboose/checkout/_confirm_table.html.erb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/views/caboose/checkout/_confirm_table.html.erb -------------------------------------------------------------------------------- /app/views/caboose/checkout/_shipping_address.html.erb: -------------------------------------------------------------------------------- 1 | <% @shipping_address ||= @invoice.shipping_address %> 2 | 3 |
    4 | <%= "#{@shipping_address.first_name} #{@shipping_address.last_name}" %>
    5 | <%= @shipping_address.address1 %>
    6 | <%= "#{@shipping_address.address2}" if @shipping_address.address2 and not @shipping_address.address2.empty? %>
    7 | <%= "#{@shipping_address.city}, #{@shipping_address.state} #{@shipping_address.zip}" %> 8 |
    9 | 10 |

    Edit shipping address

    11 | -------------------------------------------------------------------------------- /app/views/caboose/checkout/_shipping_method.html.erb: -------------------------------------------------------------------------------- 1 |
    <%= @invoice.shipping_method %> - <%= number_to_currency(@invoice.shipping) %>
    2 |

    Edit shipping method

    -------------------------------------------------------------------------------- /app/views/caboose/checkout/_shipping_method_form.html.erb: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | <% @shipping_rates.each do |rate| %> 4 |
    5 | 6 | 7 | 8 | 9 | 13 |
    14 | <% end %> 15 |
    16 | 17 |
    18 | 19 | 20 | 21 |
    22 | -------------------------------------------------------------------------------- /app/views/caboose/checkout/authnet_profile_form.html.erb: -------------------------------------------------------------------------------- 1 | <% if @logged_in_user.payment_profile_id %> 2 |
    3 | 4 | 5 |
    6 | <% else %> 7 |
    8 | 9 | 10 |
    11 | <% end %> 12 | 15 | -------------------------------------------------------------------------------- /app/views/caboose/checkout/authnet_relay.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | # This relay page is rendered from the authorize.net server in a hidden iframe 3 | # on the host application's checkout page. 4 | # 5 | # Since security rules in browsers disallow javascript access to and from 6 | # iframes with pages in different domains, we need to send things back to 7 | # a page on our own domain so we can bubble up the response. 8 | # 9 | %> 10 | 11 | 12 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/views/caboose/checkout/authnet_response.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | # This page is rendered from the host application's domain, and thus is allowed 3 | # to access the parent's DOM via javascript. 4 | # 5 | %> 6 | 7 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/views/caboose/checkout/authnet_response_handler.html.erb: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/caboose/checkout/billing.html.erb: -------------------------------------------------------------------------------- 1 |

    Checkout

    2 | <%= render :partial => '/caboose/checkout/cart' %> 3 | 4 |

    Shipping Address

    5 | <%= render :partial => '/caboose/checkout/shipping_address' %> 6 | 7 |

    Shipping Method

    8 | <%= render :partial => '/caboose/checkout/shipping_method' %> 9 | 10 |

    Billing Information

    11 | <%= render :partial => '/caboose/checkout/billing_form' %> 12 | -------------------------------------------------------------------------------- /app/views/caboose/checkout/discount.html.erb: -------------------------------------------------------------------------------- 1 |

    Checkout

    2 | <%= render :partial => '/caboose/checkout/cart' %> 3 | 4 |

    Shipping Address

    5 | <%= render :partial => '/caboose/checkout/shipping_address' %> 6 | 7 |

    Shipping Method

    8 | <%= render :partial => '/caboose/checkout/shipping_method' %> 9 | 10 |

    Discount

    11 | <%= render :partial => '/caboose/checkout/invoice_discount' %> 12 | -------------------------------------------------------------------------------- /app/views/caboose/checkout/empty.html.erb: -------------------------------------------------------------------------------- 1 | 2 |
    3 |

     

    4 |

    Your cart is empty. Go back to the store

    5 |
    6 | 7 | <% content_for :caboose_css do %> 8 | <%= stylesheet_link_tag 'caboose/message_boxes' %> 9 | <% end %> -------------------------------------------------------------------------------- /app/views/caboose/checkout/error.html.erb: -------------------------------------------------------------------------------- 1 |

    Sorry, there was an error processing your transaction.

    2 |

    Try Again

    3 | -------------------------------------------------------------------------------- /app/views/caboose/checkout/gift_cards.html.erb: -------------------------------------------------------------------------------- 1 | 2 |
    3 |

    Gift Cards

    4 | 5 |

    6 | 7 | 8 |

    9 |

    10 |
    11 | 12 |
    13 | 14 | or 15 | return to the store 16 |
    17 |
    18 | 19 | <%= content_for :caboose_js do %> 20 | <%= javascript_include_tag 'caboose/model/all' %> 21 | <%= javascript_include_tag 'caboose/cart' %> 22 | <%= javascript_include_tag 'caboose/checkout_gift_cards' %> 23 | 34 | <% end %> 35 | <%= content_for :caboose_css do %> 36 | <%= stylesheet_link_tag 'caboose/cart' %> 37 | <%= stylesheet_link_tag 'caboose/checkout' %> 38 | <% end %> 39 | -------------------------------------------------------------------------------- /app/views/caboose/checkout/login.html.erb: -------------------------------------------------------------------------------- 1 |

    Login or Signup

    2 | 3 | -------------------------------------------------------------------------------- /app/views/caboose/checkout/payscape_relay.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <% if Caboose::payment_processor == 'payscape' %> 5 | 11 | <% end %> 12 | 13 | <% if Caboose::payment_processor == 'authorize.net' %> 14 | 20 | <% end %> 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/views/caboose/checkout/relay_old.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/views/caboose/checkout/relay_postMessage.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/views/caboose/events/show.html.erb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/views/caboose/events/show.html.erb -------------------------------------------------------------------------------- /app/views/caboose/extras/error.html.erb: -------------------------------------------------------------------------------- 1 |

    Error

    2 |

    <%= @error %>

    3 |

    Login as a different user

    -------------------------------------------------------------------------------- /app/views/caboose/extras/error404.html.erb: -------------------------------------------------------------------------------- 1 |
    2 | 3 |

    Oops!

    4 |

    The page you are looking for could not be found.

    5 |
    -------------------------------------------------------------------------------- /app/views/caboose/extras/error_invalid_site.html.erb: -------------------------------------------------------------------------------- 1 |

    Invalid Site

    2 | 3 |

    It doesn't look like this site is configured for the current domain. Please configure your sites.

    4 | -------------------------------------------------------------------------------- /app/views/caboose/invoices/_admin_footer.html.erb: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | -------------------------------------------------------------------------------- /app/views/caboose/invoices/_quickbooks_invoice.html.erb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/views/caboose/invoices/_quickbooks_invoice.html.erb -------------------------------------------------------------------------------- /app/views/caboose/invoices/admin_delete_form.html.erb: -------------------------------------------------------------------------------- 1 | <%= render :partial => 'invoices/admin_header' %> 2 | 3 |
    4 |

    5 |
    6 | 7 | <%= render :partial => 'invoices/admin_footer' %> 8 | 9 | <% content_for :caboose_js do %> 10 | 18 | <% end %> 19 | -------------------------------------------------------------------------------- /app/views/caboose/invoices/admin_invalid_order.html.erb: -------------------------------------------------------------------------------- 1 | 2 |

    Invalid Invoice Number

    3 |

    4 | -------------------------------------------------------------------------------- /app/views/caboose/invoices_mailer/shipping_invoice_ready.html.erb: -------------------------------------------------------------------------------- 1 |

    Order is ready for shipping

    2 | -------------------------------------------------------------------------------- /app/views/caboose/invoices_mailer/test_email.html.erb: -------------------------------------------------------------------------------- 1 |

    Test <%= DateTime.now.strftime('%H:%M:%S') %>

    -------------------------------------------------------------------------------- /app/views/caboose/login_mailer/forgot_password_email.html.erb: -------------------------------------------------------------------------------- 1 | <% if @user && @user.site %> 2 | <% 3 | site = @user.site 4 | pd = site.primary_domain 5 | url = "http://#{pd.domain}/login/reset-password/#{@user.password_reset_id}" 6 | %> 7 |

    To reset your password for <%= site.description %>, click the link below:

    8 |

    <%= url %>

    9 | <% end %> -------------------------------------------------------------------------------- /app/views/caboose/login_mailer/locked_account.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | d = @user.site.primary_domain 3 | d = @user.site.domains.first if d.nil? 4 | %> 5 | 6 |

    Account Locked

    7 |

    The account for <%= @user.email %> on the site "<%= @user.site.description %>" has been locked due to too many failed login attempts.

    8 |

    Manage this user

    9 | -------------------------------------------------------------------------------- /app/views/caboose/media/admin_edit_description.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | m = @media 3 | %> 4 |

    Edit Description

    5 |

    6 | 7 |
    8 |

    9 | 10 | <% content_for :caboose_js do %> 11 | <%= javascript_include_tag "caboose/model/all" %> 12 | 32 | <% end %> 33 | -------------------------------------------------------------------------------- /app/views/caboose/modal/index.html.erb: -------------------------------------------------------------------------------- 1 | <%= content_for :caboose_js do %> 2 | 9 | <% end %> -------------------------------------------------------------------------------- /app/views/caboose/my_account_invoices/authnet_relay.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | # This relay page is rendered from the authorize.net server in a hidden iframe 3 | # on the host application's checkout page. 4 | # 5 | # Since security rules in browsers disallow javascript access to and from 6 | # iframes with pages in different domains, we need to send things back to 7 | # a page on our own domain so we can bubble up the response. 8 | # 9 | %> 10 | 11 | 12 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/views/caboose/my_account_invoices/authnet_response.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | # This page is rendered from the host application's domain, and thus is allowed 3 | # to access the parent's DOM via javascript. 4 | # 5 | %> 6 | 7 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/views/caboose/page_templates/admin_index.html.erb: -------------------------------------------------------------------------------- 1 |

    Page Templates

    2 | 3 |
    4 | <% @categories.each do |cat| %> 5 |
    6 |

    <%= cat.title %>

    7 |

    <%= cat.description %>

    8 | 19 |
    20 | New Page Template 21 |
    22 |
    23 | <% end %> 24 |
    -------------------------------------------------------------------------------- /app/views/caboose/pages/_admin_footer.html.erb: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | -------------------------------------------------------------------------------- /app/views/caboose/pages/_content.html.erb: -------------------------------------------------------------------------------- 1 | <% page.blocks.each do |b| %> 2 | <%= render :partial => "caboose/blocks/#{b.block_type}", :locals => { :block => b, :empty_text => empty_text } %> 3 | <% end %> -------------------------------------------------------------------------------- /app/views/caboose/pages/admin_delete_form.html.erb: -------------------------------------------------------------------------------- 1 | 2 | <%= render :partial => 'caboose/pages/admin_header' %> 3 | 4 |
    5 |

    6 | Are you sure you want to delete the page? This can't be undone. 7 | 8 | 9 |

    10 |
    11 | 12 | <%= render :partial => 'caboose/pages/admin_footer' %> 13 | <% content_for :caboose_js do %> 14 | <%= javascript_include_tag "caboose/model/all" %> 15 | 31 | <% end %> 32 | -------------------------------------------------------------------------------- /app/views/caboose/pages/admin_sitemap.html.erb: -------------------------------------------------------------------------------- 1 | 2 | <%= render :partial => 'caboose/pages/admin_header' %> 3 | 4 |

    <%= raw pages_list(@page) %>

    5 | 6 | <%= render :partial => 'caboose/pages/admin_footer' %> 7 | -------------------------------------------------------------------------------- /app/views/caboose/pages/preview.html.erb: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/caboose/pages/show.html.erb: -------------------------------------------------------------------------------- 1 | 2 | <% if params[:edit] %> 3 | <% content_for :caboose_js do %> 4 | <%= javascript_include_tag "caboose/admin" %> 5 | <%= javascript_include_tag "caboose/model/all" %> 6 | <% 7 | #= javascript_include_tag 'caboose/admin_page_edit_content' 8 | %> 9 | 17 | <% end %> 18 | <% end %> 19 | -------------------------------------------------------------------------------- /app/views/caboose/pages/update_pic.html.erb: -------------------------------------------------------------------------------- 1 | <% content_for :caboose_js do %> 2 | 16 | <% end %> 17 | -------------------------------------------------------------------------------- /app/views/caboose/pages/update_resume.html.erb: -------------------------------------------------------------------------------- 1 | <% content_for :caboose_js do %> 2 | 14 | <% end %> 15 | -------------------------------------------------------------------------------- /app/views/caboose/permissions/edit.html.erb: -------------------------------------------------------------------------------- 1 | 2 |

    Edit Permission

    3 |
    4 |
    5 | 6 | <% content_for :caboose_js do %> 7 | <%= javascript_include_tag "caboose/model/all" %> 8 | 31 | <% end %> 32 | -------------------------------------------------------------------------------- /app/views/caboose/permissions/index.html.erb: -------------------------------------------------------------------------------- 1 |

    Permissions

    2 | 3 |
    4 | 5 | 6 |
    Resource: ' style='width: 200px;' />
    7 |

    8 |
    9 | 10 | <% if (@permissions.count > 0) %> 11 | 12 | 13 | 14 | <%= raw @gen.sortable_table_headings({ 15 | 'resource' => 'Resource', 16 | 'action' => 'Action' 17 | }) 18 | %> 19 | 20 | <% @permissions.each do |perm| %> 21 | 22 | 23 | 24 | 25 | <% end %> 26 |
    <%= perm.resource %><%= perm.action %>
    27 |

    <%= raw @gen.generate %>

    28 | 29 | <% else %> 30 | 31 |

    There are no permissions.

    32 | 33 | <% end %> -------------------------------------------------------------------------------- /app/views/caboose/permissions/new.html.erb: -------------------------------------------------------------------------------- 1 | 2 |

    New permission

    3 |
    4 | 5 | <% content_for :caboose_js do %> 6 | 25 | <% end %> 26 | -------------------------------------------------------------------------------- /app/views/caboose/post_categories/admin_index.html.erb: -------------------------------------------------------------------------------- 1 |

    Post Categories

    2 | New Category 3 | 4 | <% cats = Caboose::PostCategory.where(:site_id => @site.id).reorder(:name).all %> 5 | 10 | 11 | 12 | <% content_for :caboose_js do %> 13 | 16 | <% end %> 17 | -------------------------------------------------------------------------------- /app/views/caboose/posts/_admin_footer.html.erb: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | -------------------------------------------------------------------------------- /app/views/caboose/posts/_admin_header.html.erb: -------------------------------------------------------------------------------- 1 | <% content_for :caboose_css do %> 2 | <% end %> 3 | <% content_for :caboose_js do %> 4 | <%= javascript_include_tag "caboose/model/all" %> 5 | <% end %> 6 | 7 |

    Edit Post

    8 | 24 |
    25 | -------------------------------------------------------------------------------- /app/views/caboose/posts/admin_delete_form.html.erb: -------------------------------------------------------------------------------- 1 | 2 | <%= render :partial => 'caboose/posts/admin_header' %> 3 | 4 |
    5 |

    Are you sure you want to delete the post? This can't be undone.

    6 | 7 | 8 |

    9 |
    10 | 11 | <%= render :partial => 'caboose/posts/admin_footer' %> 12 | <% content_for :caboose_js do %> 13 | <%= javascript_include_tag "caboose/model/all" %> 14 | 30 | <% end %> 31 | -------------------------------------------------------------------------------- /app/views/caboose/posts/admin_edit_content_old.html.erb: -------------------------------------------------------------------------------- 1 | 2 | <%= render :partial => 'caboose/posts/admin_header' %> 3 | 4 |

    5 | 6 | <%= render :partial => 'caboose/posts/admin_footer' %> 7 | 8 | <% content_for :caboose_js do %> 9 | <%= javascript_include_tag "caboose/model/all" %> 10 | 30 | 31 | <%= raw caboose_tinymce %> 32 | <% end %> 33 | -------------------------------------------------------------------------------- /app/views/caboose/posts/admin_edit_preview.html.erb: -------------------------------------------------------------------------------- 1 | <%= render :partial => 'caboose/posts/admin_header' %> 2 | 3 |

    4 | 5 | <%= render :partial => 'caboose/posts/admin_footer' %> 6 | 7 | <% content_for :caboose_js do %> 8 | <%= javascript_include_tag "caboose/model/all" %> 9 | 24 | <%= raw caboose_tinymce %> 25 | <% end %> 26 | -------------------------------------------------------------------------------- /app/views/caboose/posts/admin_new.html.erb: -------------------------------------------------------------------------------- 1 | 2 |

    New Post

    3 | 4 |

    5 |
    6 |

    7 | 8 | <% content_for :caboose_js do %> 9 | <%= javascript_include_tag "caboose/model/all" %> 10 | 37 | <% end %> 38 | -------------------------------------------------------------------------------- /app/views/caboose/posts/admin_preview_post.html.erb: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/caboose/posts/detail.html.erb: -------------------------------------------------------------------------------- 1 | 2 |
    3 |

    <%= raw @post[:title] %>

    4 |
    5 |
    <%= raw @article[:body] %>
    6 |
    7 | -------------------------------------------------------------------------------- /app/views/caboose/posts/index.html.erb: -------------------------------------------------------------------------------- 1 | 2 |
    3 | <% if @posts && @posts.count > 0 %> 4 |
      5 | <% @posts.each do |p| %> 6 |
    • 7 | <% if p.image && !p.image.url.include?('placehold.it') %> 8 |
      9 | <% end %> 10 |
      <%= raw p[:title] %>
      11 |

      <%= p[:created_at].strftime("%m/%d/%Y") %>

      12 |

      <%= raw Caboose.teaser_text(p[:body], 200) %>

      13 | Read More 14 |
    • 15 | <% end %> 16 |
    17 | <% else %> 18 |

    There are no posts right now.

    19 | <% end %> 20 |
    21 | 22 | <% content_for :caboose_css do %> 23 | 29 | <% end %> -------------------------------------------------------------------------------- /app/views/caboose/posts/show.html.erb: -------------------------------------------------------------------------------- 1 | 2 | <% if params[:edit] %> 3 | <% content_for :caboose_js do %> 4 | <%= javascript_include_tag "caboose/admin" %> 5 | <%= javascript_include_tag "caboose/model/all" %> 6 | <%= javascript_include_tag 'caboose/admin_post_edit_content' %> 7 | 15 | <% end %> 16 | <% end %> 17 | -------------------------------------------------------------------------------- /app/views/caboose/products/_admin_footer.html.erb: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | -------------------------------------------------------------------------------- /app/views/caboose/products/_sort_options.html.erb: -------------------------------------------------------------------------------- 1 | 10 | 11 | <% content_for :caboose_js do %> 12 | 19 | <% end %> 20 | -------------------------------------------------------------------------------- /app/views/caboose/products/admin_delete_form.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | p = @product 3 | %> 4 | <%= render :partial => 'caboose/products/admin_header' %> 5 | 6 |
    7 |

    8 |
    9 | 10 | <%= render :partial => 'caboose/products/admin_footer' %> 11 | 12 | <% content_for :caboose_js do %> 13 | 21 | <% end %> 22 | -------------------------------------------------------------------------------- /app/views/caboose/products/details.html.erb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/views/caboose/products/details.html.erb -------------------------------------------------------------------------------- /app/views/caboose/products/index.html.erb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/views/caboose/products/index.html.erb -------------------------------------------------------------------------------- /app/views/caboose/products/sales.html.erb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/app/views/caboose/products/sales.html.erb -------------------------------------------------------------------------------- /app/views/caboose/redirects/admin_index.html.erb: -------------------------------------------------------------------------------- 1 |

    Permanent Redirects

    2 | 3 |

    New Redirect

    4 | 5 | <% if @redirects && @redirects.count > 0 %> 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | <% @redirects.each do |pr| %> 14 | 15 | 16 | 17 | 18 | 19 | 20 | <% end %> 21 |
    PriorityIs RegexOld URLNew URL
    <%= pr.priority %><%= pr.is_regex ? 'Yes' : 'No' %><%= raw pr.old_url %><%= raw pr.new_url %>
    22 | <% else %> 23 |

    There are no redirects right now.

    24 | <% end %> 25 | -------------------------------------------------------------------------------- /app/views/caboose/roles/index.html.erb: -------------------------------------------------------------------------------- 1 |

    Roles

    2 |

    New Role

    3 | 4 | 5 | 6 | 7 | 8 | <% @roles.each do |r| %> 9 | 10 | 11 | 12 | <% end %> 13 |
    Name
    <%= r['text'] %>
    14 | 15 |
    16 | 17 | -------------------------------------------------------------------------------- /app/views/caboose/settings/edit.html.erb: -------------------------------------------------------------------------------- 1 | 2 |

    Edit Setting

    3 |

    4 |

    5 | 6 |

    7 | 8 | <% content_for :caboose_js do %> 9 | <%= javascript_include_tag "caboose/model/all" %> 10 | 26 | <% end %> 27 | -------------------------------------------------------------------------------- /app/views/caboose/settings/index.html.erb: -------------------------------------------------------------------------------- 1 |

    Settings

    2 | 3 |
    4 | 5 | 6 |
    Name: ' style='width: 200px;' />
    7 |

    8 |
    9 | 10 | <% if (@settings.count > 0) %> 11 | 12 | 13 | 14 | <%= raw @gen.sortable_table_headings({ 15 | 'name' => 'Name', 16 | 'value' => 'Value' 17 | }) 18 | %> 19 | 20 | <% @settings.each do |setting| %> 21 | 22 | 23 | 24 | 25 | <% end %> 26 |
    <%= setting.name %><%= setting.value %>
    27 |

    <%= raw @gen.generate %>

    28 | 29 | <% else %> 30 | 31 |

    There are no settings.

    32 | 33 | <% end %> -------------------------------------------------------------------------------- /app/views/caboose/settings/new.html.erb: -------------------------------------------------------------------------------- 1 | 2 |

    New Setting

    3 |
    4 | 5 | <% content_for :caboose_js do %> 6 | 25 | <% end %> 26 | -------------------------------------------------------------------------------- /app/views/caboose/sites/_admin_footer.html.erb: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | -------------------------------------------------------------------------------- /app/views/caboose/sites/admin_new.html.erb: -------------------------------------------------------------------------------- 1 | 2 |

    New Site

    3 | 4 |
    5 | 6 |

    7 |
    8 |

    9 |
    10 | 11 | <% content_for :caboose_js do %> 12 | 33 | <% end %> 34 | -------------------------------------------------------------------------------- /app/views/caboose/sites/robots.text.erb: -------------------------------------------------------------------------------- 1 | <% if @site && !@site.robots_txt.blank? %><%== @site.robots_txt %> 2 | <% else %> 3 | User-agent: * 4 | Disallow: /admin 5 | <% end %> -------------------------------------------------------------------------------- /app/views/caboose/store/_admin_footer.html.erb: -------------------------------------------------------------------------------- 1 |
    2 | 3 | -------------------------------------------------------------------------------- /app/views/caboose/store/_admin_header.html.erb: -------------------------------------------------------------------------------- 1 | 2 | <% content_for :caboose_css do %> 3 | 6 | <% end %> 7 | 8 | <% content_for :caboose_js do %> 9 | <%= javascript_include_tag "caboose/model/all" %> 10 | <% end %> 11 | 12 |

    Edit Store

    13 | 29 |
    30 | -------------------------------------------------------------------------------- /app/views/caboose/users/_admin_footer.html.erb: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | -------------------------------------------------------------------------------- /app/views/caboose/users/admin_update_pic.html.erb: -------------------------------------------------------------------------------- 1 | <% content_for :caboose_js do %> 2 | 16 | <% end %> 17 | -------------------------------------------------------------------------------- /app/views/layouts/caboose/_content.html.erb: -------------------------------------------------------------------------------- 1 | <% if (yield && yield.strip.length > 0) %> 2 | <%= yield %> 3 | <% elsif (!@page.nil?) %> 4 |

    <%= @page.title %>

    5 | <%= raw @page.content %> 6 | <% end %> -------------------------------------------------------------------------------- /app/views/layouts/caboose/_station_link.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | if (@user.nil? || @user == Caboose::User.logged_out_user) 3 | %>Login<% 4 | else 5 | %>Control Panel<% 6 | end 7 | %> -------------------------------------------------------------------------------- /app/views/layouts/caboose/_top_nav.html.erb: -------------------------------------------------------------------------------- 1 | 2 |
    3 | 4 | 7 |
    8 | -------------------------------------------------------------------------------- /app/views/layouts/caboose/admin_empty.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Caboose Admin 6 | <%= stylesheet_link_tag "caboose/admin", :media => "all" %> 7 | <% if File.exists?("#{Rails.root}/app/assets/stylesheets/admin.css") %> 8 | <%= stylesheet_link_tag "admin", :media => "all" %> 9 | <% end %> 10 | <%= yield :caboose_css %> 11 | <%= csrf_meta_tags %> 12 | 13 | 14 |
    <%= yield %>
    15 | <%= javascript_include_tag "caboose/admin" %> 16 | <%= yield :caboose_js %> 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/views/layouts/caboose/empty.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Empty Page 6 | 7 | 8 | <%= yield %> 9 | 10 | -------------------------------------------------------------------------------- /app/views/layouts/caboose/error404.html.erb: -------------------------------------------------------------------------------- 1 |

    Error: File not found

    2 | <%= yield %> -------------------------------------------------------------------------------- /app/views/layouts/caboose/no_layout.html.erb: -------------------------------------------------------------------------------- 1 | <%= yield %> 2 | -------------------------------------------------------------------------------- /app/views/layouts/caboose/store/_banner.html.erb: -------------------------------------------------------------------------------- 1 | 2 |
    3 |
    4 |
    5 |
    6 |

    // <%= @page.title %>

    7 |
    8 |
    9 |
    10 |
    -------------------------------------------------------------------------------- /app/views/layouts/caboose/store/_banner2.html.erb: -------------------------------------------------------------------------------- 1 | 2 |
    3 |
    4 |
    5 |
    6 |

    // <%= @page.title %>

    7 |
    8 |
    9 |
    10 |
    -------------------------------------------------------------------------------- /app/views/layouts/caboose/store/_sidebar.html.erb: -------------------------------------------------------------------------------- 1 |
    2 | 27 |
    -------------------------------------------------------------------------------- /app/views/layouts/caboose/store/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Tuskwear 5 | <%= stylesheet_link_tag "application", :media => "all" %> 6 | <%= javascript_include_tag "application" %> 7 | <%= csrf_meta_tags %> 8 | 27 | 28 | 29 | 30 | <%= yield %> 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /app/views/layouts/caboose/store/authorize_net.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Direct Post Sample App 5 | 14 | 15 | 16 | <%= yield %> 17 | 18 | -------------------------------------------------------------------------------- /app/views/layouts/caboose/store/layout_default.html.erb: -------------------------------------------------------------------------------- 1 | <%= render 'layouts/header' %> 2 | 3 | 4 | <% if (yield && yield.strip.length > 0) %> 5 | <%= yield %> 6 | <% elsif (!@page.nil?) %> 7 | <%= raw @page.content %> 8 | <% end %> 9 | 10 | <%= render 'layouts/footer' %> -------------------------------------------------------------------------------- /app/views/layouts/caboose/store/layout_single.html.erb: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/layouts/caboose/store/layout_testing.html.erb: -------------------------------------------------------------------------------- 1 | 2 | <%= foo %> 3 | 4 | <%= raw @page.content %> 5 | -------------------------------------------------------------------------------- /changelog.txt: -------------------------------------------------------------------------------- 1 | Version 0.2.1 2 | 3 | 0.2.1 Changed to modal dialogs for admin pages. 4 | 5 | 6 | -------------------------------------------------------------------------------- /config/routes.rb: -------------------------------------------------------------------------------- 1 | Caboose::Engine.routes.draw do 2 | 3 | # Note: this needs to be at the top of the application routes file for caboose routes to work 4 | #if Caboose::use_comment_routes 5 | # eval(Caboose::CommentRoutes.controller_routes) 6 | #end 7 | 8 | get '*path' => 'pages#show' 9 | root :to => 'pages#show' 10 | 11 | end 12 | -------------------------------------------------------------------------------- /config/tinymce.yml: -------------------------------------------------------------------------------- 1 | 2 | caboose: 3 | theme_advanced_toolbar_location: top 4 | theme_advanced_toolbar_align: left 5 | theme_advanced_statusbar_location: bottom 6 | theme_advanced_buttons3_add: 7 | - tablecontrols 8 | - fullscreen 9 | plugins: 10 | - table 11 | - fullscreen -------------------------------------------------------------------------------- /db/migrate/000_add_linked_resources_to_page.rb: -------------------------------------------------------------------------------- 1 | class AddLinkedResourcesToPage 2 | def up(c) 3 | c.add_column :pages, :linked_resources, :text, :default => '' 4 | end 5 | 6 | def down(c) 7 | c.remove_column :pages, :linked_resources 8 | end 9 | end -------------------------------------------------------------------------------- /eval_test.rb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/eval_test.rb -------------------------------------------------------------------------------- /lib/caboose/version.rb: -------------------------------------------------------------------------------- 1 | module Caboose 2 | VERSION = '1.0.2' 3 | end 4 | -------------------------------------------------------------------------------- /psd/magnifying_glass.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/psd/magnifying_glass.psd -------------------------------------------------------------------------------- /psd/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/psd/search.png -------------------------------------------------------------------------------- /script/rails: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. 3 | 4 | ENGINE_ROOT = File.expand_path('../..', __FILE__) 5 | ENGINE_PATH = File.expand_path('../../lib/caboose/engine', __FILE__) 6 | 7 | require 'rails/all' 8 | require 'rails/engine/commands' 9 | -------------------------------------------------------------------------------- /spec/factories/caboose_blocks.rb: -------------------------------------------------------------------------------- 1 | require 'faker' 2 | 3 | FactoryGirl.define do 4 | factory :caboose_block, :class => Caboose::Block do |f| 5 | f.page_id { nil } 6 | f.parent_id { nil } 7 | f.block_type_id { nil } 8 | f.sort_order { rand(0..10) } 9 | f.name { Faker::Internet.user_name } 10 | f.value { Faker::Lorem.sentence } 11 | f.file_file_name { "#{Faker::Lorem.word}.#{['pdf','xls','csv'].sample}" } 12 | f.file_content_type { ['application/pdf','application/xls'].sample } 13 | f.file_file_size { rand(100..100000) } 14 | f.file_updated_at { Faker::Time.between(1.month.ago, Time.now, :all) } 15 | f.image_file_name { "#{Faker::Lorem.word}.#{['gif','jpg','png'].sample}" } 16 | f.image_content_type { ['image/gif','image/jpeg','image/png'].sample } 17 | f.image_file_size { rand(100..100000) } 18 | f.image_updated_at { Faker::Time.between(1.month.ago, Time.now, :all) } 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /spec/factories/caboose_users.rb: -------------------------------------------------------------------------------- 1 | require 'faker' 2 | 3 | FactoryGirl.define do 4 | factory :caboose_user, :class => Caboose::User do |f| 5 | f.first_name { Faker::Name.first_name } 6 | f.last_name { Faker::Name.last_name } 7 | f.username { Faker::Internet.user_name } 8 | f.email { Faker::Internet.email } 9 | f.address { Faker::Address.street_address } 10 | f.address2 { Faker::Address.secondary_address } 11 | f.city { Faker::Address.city } 12 | f.state { Faker::Address.state } 13 | f.zip { Faker::Address.zip } 14 | f.phone { Faker::PhoneNumber.phone_number } 15 | f.fax { Faker::PhoneNumber.phone_number } 16 | f.password { Faker::Internet.password(20) } 17 | f.date_created { Faker::Time.between(1.year.ago, Time.now, :all) } 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /spec/models/user_spec.rb: -------------------------------------------------------------------------------- 1 | 2 | describe Caboose::User do 3 | it "has a valid factory" do 4 | expect(FactoryGirl.create(:caboose_user)).to be_valid 5 | end 6 | it "is invalid without an email" do 7 | expect(FactoryGirl.build(:caboose_user, :email => nil)).to_not be_valid 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /test/caboose_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class CabooseTest < ActiveSupport::TestCase 4 | test "truth" do 5 | assert_kind_of Module, Caboose 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /test/dummy/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # Add your own tasks in files placed in lib/tasks ending in .rake, 3 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. 4 | 5 | require File.expand_path('../config/application', __FILE__) 6 | 7 | Dummy::Application.load_tasks 8 | -------------------------------------------------------------------------------- /test/dummy/app/assets/javascripts/application.js: -------------------------------------------------------------------------------- 1 | // This is a manifest file that'll be compiled into application.js, which will include all the files 2 | // listed below. 3 | // 4 | // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, 5 | // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. 6 | // 7 | // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the 8 | // the compiled file. 9 | // 10 | // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD 11 | // GO AFTER THE REQUIRES BELOW. 12 | // 13 | //= require jquery 14 | //= require jquery_ujs 15 | //= require_tree . 16 | -------------------------------------------------------------------------------- /test/dummy/app/assets/stylesheets/application.css: -------------------------------------------------------------------------------- 1 | /* 2 | * This is a manifest file that'll be compiled into application.css, which will include all the files 3 | * listed below. 4 | * 5 | * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, 6 | * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. 7 | * 8 | * You're free to add application-wide styles to this file and they'll appear at the top of the 9 | * compiled file, but it's generally better to create a new file per style scope. 10 | * 11 | *= require_self 12 | *= require_tree . 13 | */ 14 | -------------------------------------------------------------------------------- /test/dummy/app/controllers/application_controller.rb: -------------------------------------------------------------------------------- 1 | class ApplicationController < ActionController::Base 2 | protect_from_forgery 3 | end 4 | -------------------------------------------------------------------------------- /test/dummy/app/helpers/application_helper.rb: -------------------------------------------------------------------------------- 1 | module ApplicationHelper 2 | end 3 | -------------------------------------------------------------------------------- /test/dummy/app/mailers/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/test/dummy/app/mailers/.gitkeep -------------------------------------------------------------------------------- /test/dummy/app/models/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/test/dummy/app/models/.gitkeep -------------------------------------------------------------------------------- /test/dummy/app/views/layouts/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Dummy 5 | <%= stylesheet_link_tag "application", :media => "all" %> 6 | <%= javascript_include_tag "application" %> 7 | <%= csrf_meta_tags %> 8 | 9 | 10 | 11 | <%= yield %> 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/dummy/config.ru: -------------------------------------------------------------------------------- 1 | # This file is used by Rack-based servers to start the application. 2 | 3 | require ::File.expand_path('../config/environment', __FILE__) 4 | run Dummy::Application 5 | -------------------------------------------------------------------------------- /test/dummy/config/boot.rb: -------------------------------------------------------------------------------- 1 | require 'rubygems' 2 | gemfile = File.expand_path('../../../../Gemfile', __FILE__) 3 | 4 | if File.exist?(gemfile) 5 | ENV['BUNDLE_GEMFILE'] = gemfile 6 | require 'bundler' 7 | Bundler.setup 8 | end 9 | 10 | $:.unshift File.expand_path('../../../../lib', __FILE__) -------------------------------------------------------------------------------- /test/dummy/config/database.yml: -------------------------------------------------------------------------------- 1 | # SQLite version 3.x 2 | # gem install sqlite3 3 | # 4 | # Ensure the SQLite 3 gem is defined in your Gemfile 5 | # gem 'sqlite3' 6 | development: 7 | adapter: sqlite3 8 | database: db/development.sqlite3 9 | pool: 5 10 | timeout: 5000 11 | 12 | # Warning: The database defined as "test" will be erased and 13 | # re-generated from your development database when you run "rake". 14 | # Do not set this db to the same as development or production. 15 | test: 16 | adapter: sqlite3 17 | database: db/test.sqlite3 18 | pool: 5 19 | timeout: 5000 20 | 21 | production: 22 | adapter: sqlite3 23 | database: db/production.sqlite3 24 | pool: 5 25 | timeout: 5000 26 | -------------------------------------------------------------------------------- /test/dummy/config/environment.rb: -------------------------------------------------------------------------------- 1 | # Load the rails application 2 | require File.expand_path('../application', __FILE__) 3 | 4 | # Initialize the rails application 5 | Dummy::Application.initialize! 6 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/backtrace_silencers.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. 4 | # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } 5 | 6 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. 7 | # Rails.backtrace_cleaner.remove_silencers! 8 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/inflections.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new inflection rules using the following format 4 | # (all these examples are active by default): 5 | # ActiveSupport::Inflector.inflections do |inflect| 6 | # inflect.plural /^(ox)$/i, '\1en' 7 | # inflect.singular /^(ox)en/i, '\1' 8 | # inflect.irregular 'person', 'people' 9 | # inflect.uncountable %w( fish sheep ) 10 | # end 11 | # 12 | # These inflection rules are supported but not enabled by default: 13 | # ActiveSupport::Inflector.inflections do |inflect| 14 | # inflect.acronym 'RESTful' 15 | # end 16 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/mime_types.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new mime types for use in respond_to blocks: 4 | # Mime::Type.register "text/richtext", :rtf 5 | # Mime::Type.register_alias "text/html", :iphone 6 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/secret_token.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Your secret key for verifying the integrity of signed cookies. 4 | # If you change this key, all old signed cookies will become invalid! 5 | # Make sure the secret is at least 30 characters and all random, 6 | # no regular words or you'll be exposed to dictionary attacks. 7 | Dummy::Application.config.secret_token = '80d8133eb1abe7ca94719bcbff9222b7043a4d156aeccf6a66be20bd2cab6491265a2efc566e26642e4b8e1a6da418ef15b2673d48d32db2c253ecbb1875f375' 8 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/session_store.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | Dummy::Application.config.session_store :cookie_store, key: '_dummy_session' 4 | 5 | # Use the database for sessions instead of the cookie-based default, 6 | # which shouldn't be used to store highly confidential information 7 | # (create the session table with "rails generate session_migration") 8 | # Dummy::Application.config.session_store :active_record_store 9 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/wrap_parameters.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | # 3 | # This file contains settings for ActionController::ParamsWrapper which 4 | # is enabled by default. 5 | 6 | # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. 7 | ActiveSupport.on_load(:action_controller) do 8 | wrap_parameters format: [:json] 9 | end 10 | 11 | # Disable root element in JSON by default. 12 | ActiveSupport.on_load(:active_record) do 13 | self.include_root_in_json = false 14 | end 15 | -------------------------------------------------------------------------------- /test/dummy/config/locales/en.yml: -------------------------------------------------------------------------------- 1 | # Sample localization file for English. Add more files in this directory for other locales. 2 | # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. 3 | 4 | en: 5 | hello: "Hello world" 6 | -------------------------------------------------------------------------------- /test/dummy/config/routes.rb: -------------------------------------------------------------------------------- 1 | Rails.application.routes.draw do 2 | 3 | mount Caboose::Engine => "/caboose" 4 | end 5 | -------------------------------------------------------------------------------- /test/dummy/db/test.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/test/dummy/db/test.sqlite3 -------------------------------------------------------------------------------- /test/dummy/lib/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/test/dummy/lib/assets/.gitkeep -------------------------------------------------------------------------------- /test/dummy/log/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/test/dummy/log/.gitkeep -------------------------------------------------------------------------------- /test/dummy/public/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The page you were looking for doesn't exist (404) 5 | 17 | 18 | 19 | 20 | 21 |
    22 |

    The page you were looking for doesn't exist.

    23 |

    You may have mistyped the address or the page may have moved.

    24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /test/dummy/public/422.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The change you wanted was rejected (422) 5 | 17 | 18 | 19 | 20 | 21 |
    22 |

    The change you wanted was rejected.

    23 |

    Maybe you tried to change something you didn't have access to.

    24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /test/dummy/public/500.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | We're sorry, but something went wrong (500) 5 | 17 | 18 | 19 | 20 | 21 |
    22 |

    We're sorry, but something went wrong.

    23 |
    24 | 25 | 26 | -------------------------------------------------------------------------------- /test/dummy/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williambarry007/caboose-cms/7c112911318f94cc89dba86091903a3acaf0a833/test/dummy/public/favicon.ico -------------------------------------------------------------------------------- /test/dummy/script/rails: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. 3 | 4 | APP_PATH = File.expand_path('../../config/application', __FILE__) 5 | require File.expand_path('../../config/boot', __FILE__) 6 | require 'rails/commands' 7 | -------------------------------------------------------------------------------- /test/integration/navigation_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class NavigationTest < ActionDispatch::IntegrationTest 4 | fixtures :all 5 | 6 | # test "the truth" do 7 | # assert true 8 | # end 9 | end 10 | 11 | -------------------------------------------------------------------------------- /test/test_helper.rb: -------------------------------------------------------------------------------- 1 | # Configure Rails Environment 2 | ENV["RAILS_ENV"] = "test" 3 | 4 | require File.expand_path("../dummy/config/environment.rb", __FILE__) 5 | require "rails/test_help" 6 | 7 | Rails.backtrace_cleaner.remove_silencers! 8 | 9 | # Load support files 10 | Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } 11 | 12 | # Load fixtures from the engine 13 | if ActiveSupport::TestCase.method_defined?(:fixture_path=) 14 | ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__) 15 | end 16 | --------------------------------------------------------------------------------