qbrick 2.5.0.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +423 -0
- data/Rakefile +82 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/LICENSE.txt +674 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/README.md +62 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/dialogs/anchor.js.coffee +81 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/dialogs/link.js.coffee +1353 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/images/anchor.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/images/hidpi/anchor.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/lang/de.js +68 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/lang/en.js +68 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/plugin.js.coffee +282 -0
- data/app/assets/javascripts/kuhsaft/application.js.coffee +7 -0
- data/app/assets/javascripts/kuhsaft/cms/application.js.coffee.erb +136 -0
- data/app/assets/javascripts/kuhsaft/views/read_more_view.js.coffee +17 -0
- data/app/assets/stylesheets/kuhsaft/application.css.sass +1 -0
- data/app/assets/stylesheets/kuhsaft/cms/application.css.sass +204 -0
- data/app/assets/stylesheets/kuhsaft/modules/_text_brick.css.sass +16 -0
- data/app/controllers/kuhsaft/api/pages_controller.rb +14 -0
- data/app/controllers/kuhsaft/cms/admin_controller.rb +18 -0
- data/app/controllers/kuhsaft/cms/assets_controller.rb +38 -0
- data/app/controllers/kuhsaft/cms/bricks_controller.rb +61 -0
- data/app/controllers/kuhsaft/cms/ckimages_controller.rb +26 -0
- data/app/controllers/kuhsaft/cms/pages_controller.rb +71 -0
- data/app/controllers/kuhsaft/pages_controller.rb +38 -0
- data/app/controllers/kuhsaft/sitemaps_controller.rb +12 -0
- data/app/helpers/cms_helper.rb +27 -0
- data/app/helpers/kuhsaft/admin_helper.rb +20 -0
- data/app/helpers/kuhsaft/cms/admin_helper.rb +21 -0
- data/app/helpers/kuhsaft/cms/pages_helper.rb +17 -0
- data/app/helpers/pages_helper.rb +49 -0
- data/app/helpers/sitemaps_helper.rb +12 -0
- data/app/models/kuhsaft/accordion_brick.rb +15 -0
- data/app/models/kuhsaft/accordion_item_brick.rb +21 -0
- data/app/models/kuhsaft/anchor_brick.rb +17 -0
- data/app/models/kuhsaft/asset.rb +29 -0
- data/app/models/kuhsaft/asset_brick.rb +26 -0
- data/app/models/kuhsaft/brick.rb +137 -0
- data/app/models/kuhsaft/brick_type.rb +7 -0
- data/app/models/kuhsaft/brick_type_filter.rb +18 -0
- data/app/models/kuhsaft/ckimage.rb +5 -0
- data/app/models/kuhsaft/cms.rb +7 -0
- data/app/models/kuhsaft/column_brick.rb +22 -0
- data/app/models/kuhsaft/image_brick.rb +16 -0
- data/app/models/kuhsaft/image_size.rb +51 -0
- data/app/models/kuhsaft/link_brick.rb +21 -0
- data/app/models/kuhsaft/page.rb +160 -0
- data/app/models/kuhsaft/page_type.rb +11 -0
- data/app/models/kuhsaft/partition.rb +18 -0
- data/app/models/kuhsaft/placeholder_brick.rb +23 -0
- data/app/models/kuhsaft/publish_state.rb +24 -0
- data/app/models/kuhsaft/slider_brick.rb +18 -0
- data/app/models/kuhsaft/text_brick.rb +23 -0
- data/app/models/kuhsaft/two_column_brick.rb +46 -0
- data/app/models/kuhsaft/video_brick.rb +22 -0
- data/app/uploaders/kuhsaft/asset_brick_asset_uploader.rb +43 -0
- data/app/uploaders/kuhsaft/asset_uploader.rb +50 -0
- data/app/uploaders/kuhsaft/ckimage_uploader.rb +16 -0
- data/app/uploaders/kuhsaft/image_brick_image_uploader.rb +35 -0
- data/app/views/kuhsaft/accordion_bricks/_accordion_brick.html.haml +3 -0
- data/app/views/kuhsaft/accordion_bricks/accordion_brick/_edit.html.haml +0 -0
- data/app/views/kuhsaft/accordion_item_bricks/_accordion_item_brick.html.haml +8 -0
- data/app/views/kuhsaft/accordion_item_bricks/accordion_item_brick/_edit.html.haml +1 -0
- data/app/views/kuhsaft/anchor_bricks/_anchor_brick.html.haml +1 -0
- data/app/views/kuhsaft/anchor_bricks/anchor_brick/_edit.html.haml +1 -0
- data/app/views/kuhsaft/asset_bricks/_asset_brick.html.haml +2 -0
- data/app/views/kuhsaft/asset_bricks/asset_brick/_edit.html.haml +8 -0
- data/app/views/kuhsaft/cms/admin/_brick_type_dropdown.html.haml +14 -0
- data/app/views/kuhsaft/cms/admin/_content_language_switch.html.haml +7 -0
- data/app/views/kuhsaft/cms/admin/_empty_state.html.haml +5 -0
- data/app/views/kuhsaft/cms/admin/_flash.html.haml +7 -0
- data/app/views/kuhsaft/cms/admin/_main_navigation.html.haml +6 -0
- data/app/views/kuhsaft/cms/assets/_form.html.haml +15 -0
- data/app/views/kuhsaft/cms/assets/_list.html.haml +11 -0
- data/app/views/kuhsaft/cms/assets/edit.html.haml +2 -0
- data/app/views/kuhsaft/cms/assets/index.html.haml +3 -0
- data/app/views/kuhsaft/cms/assets/new.html.haml +2 -0
- data/app/views/kuhsaft/cms/bricks/_brick_header.html.haml +43 -0
- data/app/views/kuhsaft/cms/bricks/_brick_item.html.haml +25 -0
- data/app/views/kuhsaft/cms/bricks/_brick_list.html.haml +4 -0
- data/app/views/kuhsaft/cms/bricks/_new.html.haml +41 -0
- data/app/views/kuhsaft/cms/bricks/_sort_form.html.haml +3 -0
- data/app/views/kuhsaft/cms/bricks/create.js.erb +11 -0
- data/app/views/kuhsaft/cms/bricks/destroy.js.erb +10 -0
- data/app/views/kuhsaft/cms/bricks/new.js.erb +14 -0
- data/app/views/kuhsaft/cms/bricks/update.js.erb +8 -0
- data/app/views/kuhsaft/cms/ckimages/create.html.haml +11 -0
- data/app/views/kuhsaft/cms/ckimages/destroy.js.erb +2 -0
- data/app/views/kuhsaft/cms/ckimages/index.html.haml +13 -0
- data/app/views/kuhsaft/cms/pages/_branch.html.haml +19 -0
- data/app/views/kuhsaft/cms/pages/_form.html.haml +45 -0
- data/app/views/kuhsaft/cms/pages/edit.html.haml +16 -0
- data/app/views/kuhsaft/cms/pages/index.html.haml +14 -0
- data/app/views/kuhsaft/cms/pages/new.html.haml +1 -0
- data/app/views/kuhsaft/cms/pages/show.html.haml +0 -0
- data/app/views/kuhsaft/cms/pages/sort.js.erb +0 -0
- data/app/views/kuhsaft/column_bricks/_column_brick.html.haml +3 -0
- data/app/views/kuhsaft/column_bricks/column_brick/_edit.html.haml +0 -0
- data/app/views/kuhsaft/image_bricks/_image_brick.html.haml +11 -0
- data/app/views/kuhsaft/image_bricks/image_brick/_edit.html.haml +13 -0
- data/app/views/kuhsaft/link_bricks/_link_brick.html.haml +2 -0
- data/app/views/kuhsaft/link_bricks/link_brick/_edit.html.haml +4 -0
- data/app/views/kuhsaft/pages/index.html.haml +7 -0
- data/app/views/kuhsaft/pages/show.html.haml +11 -0
- data/app/views/kuhsaft/placeholder_bricks/_placeholder_brick.html.haml +2 -0
- data/app/views/kuhsaft/placeholder_bricks/placeholder_brick/_edit.html.haml +1 -0
- data/app/views/kuhsaft/search/_form.html.haml +2 -0
- data/app/views/kuhsaft/search/_results.html.haml +8 -0
- data/app/views/kuhsaft/search/_results_entry.html.haml +13 -0
- data/app/views/kuhsaft/sitemaps/index.xml.haml +9 -0
- data/app/views/kuhsaft/slider_bricks/_slider_brick.html.haml +10 -0
- data/app/views/kuhsaft/slider_bricks/slider_brick/_edit.html.haml +0 -0
- data/app/views/kuhsaft/text_bricks/_text_brick.html.haml +11 -0
- data/app/views/kuhsaft/text_bricks/text_brick/_edit.html.haml +2 -0
- data/app/views/kuhsaft/two_column_bricks/_two_column_brick.html.haml +3 -0
- data/app/views/kuhsaft/two_column_bricks/two_column_brick/_childs.html.haml +5 -0
- data/app/views/kuhsaft/two_column_bricks/two_column_brick/_edit.html.haml +1 -0
- data/app/views/kuhsaft/video_bricks/_video_brick.html.haml +9 -0
- data/app/views/kuhsaft/video_bricks/video_brick/_edit.html.haml +8 -0
- data/app/views/layouts/kuhsaft/cms/application.html.haml +25 -0
- data/app/views/layouts/kuhsaft/cms/ckimages.html.haml +18 -0
- data/config/initializers/simple_form.rb +142 -0
- data/config/initializers/simple_form_bootstrap.rb +45 -0
- data/config/locales/de.yml +207 -0
- data/config/locales/en.yml +211 -0
- data/config/locales/models/kuhsaft/accordion_brick/de.yml +4 -0
- data/config/locales/models/kuhsaft/accordion_brick/en.yml +4 -0
- data/config/locales/models/kuhsaft/accordion_item_brick/de.yml +7 -0
- data/config/locales/models/kuhsaft/accordion_item_brick/en.yml +7 -0
- data/config/locales/models/kuhsaft/anchor_brick/de.yml +7 -0
- data/config/locales/models/kuhsaft/anchor_brick/en.yml +7 -0
- data/config/locales/models/kuhsaft/asset_brick/de.yml +9 -0
- data/config/locales/models/kuhsaft/asset_brick/en.yml +9 -0
- data/config/locales/models/kuhsaft/brick/de.yml +5 -0
- data/config/locales/models/kuhsaft/brick/en.yml +5 -0
- data/config/locales/models/kuhsaft/column_brick/de.yml +4 -0
- data/config/locales/models/kuhsaft/column_brick/en.yml +4 -0
- data/config/locales/models/kuhsaft/image_brick/de.yml +11 -0
- data/config/locales/models/kuhsaft/image_brick/en.yml +11 -0
- data/config/locales/models/kuhsaft/image_size/de.yml +13 -0
- data/config/locales/models/kuhsaft/image_size/en.yml +13 -0
- data/config/locales/models/kuhsaft/link_brick/de.yml +10 -0
- data/config/locales/models/kuhsaft/link_brick/en.yml +10 -0
- data/config/locales/models/kuhsaft/page/de.yml +19 -0
- data/config/locales/models/kuhsaft/page/en.yml +19 -0
- data/config/locales/models/kuhsaft/placeholder_brick/de.yml +8 -0
- data/config/locales/models/kuhsaft/placeholder_brick/en.yml +8 -0
- data/config/locales/models/kuhsaft/slider_brick/de.yml +4 -0
- data/config/locales/models/kuhsaft/slider_brick/en.yml +4 -0
- data/config/locales/models/kuhsaft/text_brick/de.yml +11 -0
- data/config/locales/models/kuhsaft/text_brick/en.yml +11 -0
- data/config/locales/models/kuhsaft/two_column_brick/de.yml +7 -0
- data/config/locales/models/kuhsaft/two_column_brick/en.yml +7 -0
- data/config/locales/models/kuhsaft/video_brick/de.yml +9 -0
- data/config/locales/models/kuhsaft/video_brick/en.yml +9 -0
- data/config/locales/simple_form.en.yml +26 -0
- data/config/locales/views/kuhsaft/cms/admin/de.yml +13 -0
- data/config/locales/views/kuhsaft/cms/admin/en.yml +12 -0
- data/config/locales/views/kuhsaft/cms/bricks/de.yml +18 -0
- data/config/locales/views/kuhsaft/cms/bricks/en.yml +18 -0
- data/config/locales/views/kuhsaft/cms/pages/de.yml +31 -0
- data/config/locales/views/kuhsaft/cms/pages/en.yml +31 -0
- data/config/locales/views/kuhsaft/image_brick/de.yml +6 -0
- data/config/locales/views/kuhsaft/image_brick/en.yml +6 -0
- data/config/locales/views/kuhsaft/search/de.yml +12 -0
- data/config/locales/views/kuhsaft/search/en.yml +12 -0
- data/config/locales/views/kuhsaft/text_brick/de.yml +6 -0
- data/config/locales/views/kuhsaft/text_brick/en.yml +6 -0
- data/config/locales/views/kuhsaft/video_brick/de.yml +7 -0
- data/config/locales/views/kuhsaft/video_brick/en.yml +7 -0
- data/config/routes.rb +30 -0
- data/db/migrate/01_create_kuhsaft_pages.rb +31 -0
- data/db/migrate/02_create_kuhsaft_bricks.rb +23 -0
- data/db/migrate/03_create_kuhsaft_brick_types.rb +12 -0
- data/db/migrate/04_create_kuhsaft_assets.rb +10 -0
- data/db/migrate/05_remove_cms_admin.rb +9 -0
- data/db/migrate/06_add_template_name_to_kuhsaft_bricks.rb +7 -0
- data/db/migrate/07_add_default_value_to_brick_type_enabled.rb +6 -0
- data/db/migrate/08_add_display_styles_to_bricks.rb +5 -0
- data/db/migrate/09_add_additional_fields_to_kuhsaft_bricks.rb +6 -0
- data/db/migrate/10_add_redirect_url_to_kuhsaft_pages.rb +7 -0
- data/db/migrate/11_update_url_and_redirect_url_value.rb +45 -0
- data/db/migrate/12_regenerate_fulltext.rb +12 -0
- data/db/migrate/13_add_page_title_to_pages.rb +7 -0
- data/db/migrate/14_move_kuhsaft_assets.rb +22 -0
- data/db/migrate/15_add_alt_text_to_bricks.rb +5 -0
- data/db/migrate/16_update_default_value_for_page_type.rb +9 -0
- data/db/migrate/17_set_page_type_to_content_for_empty_fields.rb +7 -0
- data/db/migrate/18_add_identifier_to_kuhsaft_pages.rb +6 -0
- data/db/migrate/19_add_col_count_to_bricks.rb +5 -0
- data/db/migrate/20_create_kuhsaft_ckimages.rb +9 -0
- data/db/seeds.rb +20 -0
- data/lib/generators/kuhsaft/assets/install_generator.rb +25 -0
- data/lib/generators/kuhsaft/translations/add_generator.rb +41 -0
- data/lib/kuhsaft.rb +22 -0
- data/lib/kuhsaft/brick_list.rb +87 -0
- data/lib/kuhsaft/engine.rb +27 -0
- data/lib/kuhsaft/gridded.rb +20 -0
- data/lib/kuhsaft/image_uploader_mounting.rb +22 -0
- data/lib/kuhsaft/orderable.rb +71 -0
- data/lib/kuhsaft/page_tree.rb +14 -0
- data/lib/kuhsaft/partial_extractor.rb +21 -0
- data/lib/kuhsaft/searchable.rb +69 -0
- data/lib/kuhsaft/touch_placeholders.rb +31 -0
- data/lib/kuhsaft/translatable.rb +54 -0
- data/lib/kuhsaft/version.rb +3 -0
- data/lib/tasks/kuhsaft_tasks.rake +22 -0
- data/lib/templates/kuhsaft/assets/ck-config.js.coffee +48 -0
- data/lib/templates/kuhsaft/assets/customizations.css.sass +0 -0
- data/lib/templates/kuhsaft/assets/customizations.js.coffee +0 -0
- data/lib/templates/kuhsaft/translations/add_translation.erb +8 -0
- data/spec/controllers/kuhsaft/api/pages_controller_spec.rb +70 -0
- data/spec/controllers/kuhsaft/pages_controller_spec.rb +90 -0
- data/spec/controllers/kuhsaft/sitemaps_controller_spec.rb +13 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/images/spec-image.png +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/javascripts/kuhsaft/cms/ck-config.js.coffee +48 -0
- data/spec/dummy/app/assets/javascripts/kuhsaft/cms/customizations.js.coffee +0 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/assets/stylesheets/kuhsaft/cms/customizations.css.sass +0 -0
- data/spec/dummy/app/controllers/application_controller.rb +4 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +26 -0
- data/spec/dummy/config/boot.rb +3 -0
- data/spec/dummy/config/database.yml +19 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +29 -0
- data/spec/dummy/config/environments/production.rb +81 -0
- data/spec/dummy/config/environments/test.rb +36 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/kuhsaft.rb +5 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +12 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/db/.gitkeep +0 -0
- data/spec/dummy/lib/assets/.gitkeep +0 -0
- data/spec/dummy/log/.gitkeep +0 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/stylesheets/.gitkeep +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/factories.rb +26 -0
- data/spec/features/cms_pages_spec.rb +76 -0
- data/spec/features/search_spec.rb +78 -0
- data/spec/helpers/kuhsaft/cms/admin_helper_spec.rb +25 -0
- data/spec/helpers/kuhsaft/cms/pages_helper_spec.rb +46 -0
- data/spec/helpers/kuhsaft/pages_helper_spec.rb +21 -0
- data/spec/kuhsaft_spec.rb +7 -0
- data/spec/lib/brick_list_spec.rb +50 -0
- data/spec/lib/engine_spec.rb +25 -0
- data/spec/lib/gridded_spec.rb +24 -0
- data/spec/lib/image_uploader_mounting_spec.rb +14 -0
- data/spec/lib/page_tree_spec.rb +38 -0
- data/spec/lib/searchable_spec.rb +30 -0
- data/spec/lib/touch_placeholders_spec.rb +44 -0
- data/spec/lib/translatable_spec.rb +155 -0
- data/spec/models/accordion_brick_spec.rb +38 -0
- data/spec/models/accordion_item_brick_spec.rb +50 -0
- data/spec/models/anchor_brick_spec.rb +26 -0
- data/spec/models/asset_brick_spec.rb +45 -0
- data/spec/models/asset_spec.rb +41 -0
- data/spec/models/brick_spec.rb +134 -0
- data/spec/models/brick_type_filter_spec.rb +64 -0
- data/spec/models/column_brick_spec.rb +32 -0
- data/spec/models/image_brick_spec.rb +49 -0
- data/spec/models/image_size_spec.rb +36 -0
- data/spec/models/link_brick_spec.rb +51 -0
- data/spec/models/page_spec.rb +472 -0
- data/spec/models/placeholder_brick_spec.rb +46 -0
- data/spec/models/publish_state_spec.rb +33 -0
- data/spec/models/slider_brick_spec.rb +26 -0
- data/spec/models/text_brick_spec.rb +30 -0
- data/spec/models/two_column_brick_spec.rb +82 -0
- data/spec/models/video_brick_spec.rb +32 -0
- data/spec/spec_helper.rb +81 -0
- data/spec/support/kuhsaft_spec_helper.rb +8 -0
- data/spec/support/write_expectation.rb +57 -0
- data/spec/views/kuhsaft/sitemaps/index.xml.haml_spec.rb +67 -0
- data/vendor/assets/javascripts/bootstrap-modal-v2.js +376 -0
- data/vendor/assets/javascripts/bootstrap-modalmanager.js +423 -0
- data/vendor/assets/javascripts/jquery.nestable.js +485 -0
- data/vendor/assets/stylesheets/bootstrap_modal.css +214 -0
- data/vendor/assets/stylesheets/nestable.css +84 -0
- metadata +870 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'rails/generators'
|
|
2
|
+
|
|
3
|
+
module Kuhsaft
|
|
4
|
+
module Assets
|
|
5
|
+
class Install < Rails::Generators::Base
|
|
6
|
+
source_root(File.join(Kuhsaft::Engine.root, '/lib/templates/kuhsaft/assets'))
|
|
7
|
+
|
|
8
|
+
def copy_customizations
|
|
9
|
+
custom_css_folder = 'app/assets/stylesheets/kuhsaft/cms/'
|
|
10
|
+
custom_js_folder = 'app/assets/javascripts/kuhsaft/cms/'
|
|
11
|
+
|
|
12
|
+
empty_directory custom_css_folder
|
|
13
|
+
empty_directory custom_js_folder
|
|
14
|
+
|
|
15
|
+
copy_file 'customizations.css.sass', "#{custom_css_folder}/customizations.css.sass"
|
|
16
|
+
copy_file 'customizations.js.coffee', "#{custom_js_folder}/customizations.js.coffee"
|
|
17
|
+
copy_file 'ck-config.js.coffee', "#{custom_js_folder}/ck-config.js.coffee"
|
|
18
|
+
|
|
19
|
+
inject_into_file 'config/environments/production.rb', after: /config\.assets\.precompile.*$/ do
|
|
20
|
+
"\n config.assets.precompile += %w( kuhsaft/cms/customizations.css kuhsaft/cms/customizations.js )"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'rails/generators'
|
|
2
|
+
require 'rails/generators/migration'
|
|
3
|
+
require 'rails/generators/active_record'
|
|
4
|
+
|
|
5
|
+
module Kuhsaft
|
|
6
|
+
module Translations
|
|
7
|
+
class Add < Rails::Generators::Base
|
|
8
|
+
include Rails::Generators::Migration
|
|
9
|
+
|
|
10
|
+
source_root(File.join(Kuhsaft::Engine.root, '/lib/templates/kuhsaft/translations'))
|
|
11
|
+
argument :locale, type: :string
|
|
12
|
+
|
|
13
|
+
def self.next_migration_number(dirname)
|
|
14
|
+
ActiveRecord::Generators::Base.next_migration_number(dirname)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def translated_columns
|
|
18
|
+
Kuhsaft::Page.column_names.select { |attr| attr.end_with? "_#{I18n.default_locale}" }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def formatted_locale
|
|
22
|
+
locale.underscore
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def create_locale_migration_file
|
|
26
|
+
migration_template('add_translation.erb',
|
|
27
|
+
Rails.root.join('db', 'migrate', "add_#{formatted_locale}_translation.rb"))
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def get_attribute(attribute_name = '')
|
|
33
|
+
attribute_name.gsub("_#{I18n.default_locale}", "_#{formatted_locale}")
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def get_type(key = '')
|
|
37
|
+
Kuhsaft::Page.columns_hash[key].type
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
data/lib/kuhsaft.rb
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Kuhsaft
|
|
2
|
+
require 'kuhsaft/engine'
|
|
3
|
+
require 'kuhsaft/orderable'
|
|
4
|
+
require 'kuhsaft/image_uploader_mounting'
|
|
5
|
+
require 'kuhsaft/translatable'
|
|
6
|
+
require 'kuhsaft/searchable'
|
|
7
|
+
require 'kuhsaft/gridded'
|
|
8
|
+
require 'kuhsaft/brick_list'
|
|
9
|
+
require 'kuhsaft/partial_extractor'
|
|
10
|
+
require 'kuhsaft/touch_placeholders'
|
|
11
|
+
require 'simple_form'
|
|
12
|
+
require 'carrierwave'
|
|
13
|
+
require 'rdiscount'
|
|
14
|
+
require 'bourbon'
|
|
15
|
+
require 'jquery-rails'
|
|
16
|
+
require 'jquery-ui-rails'
|
|
17
|
+
require 'remotipart'
|
|
18
|
+
require 'ancestry'
|
|
19
|
+
require 'bootstrap-sass'
|
|
20
|
+
require 'haml'
|
|
21
|
+
require 'ckeditor_rails'
|
|
22
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
module Kuhsaft
|
|
2
|
+
module BrickList
|
|
3
|
+
def self.included(base)
|
|
4
|
+
def base.acts_as_brick_list
|
|
5
|
+
has_many :bricks,
|
|
6
|
+
class_name: 'Kuhsaft::Brick',
|
|
7
|
+
dependent: :destroy,
|
|
8
|
+
as: :brick_list
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def to_brick_item_id
|
|
13
|
+
"brick-item-#{id}-#{self.class.to_s.underscore.gsub('/', '_')}"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def to_brick_list_id
|
|
17
|
+
"brick-list-#{id}-#{self.class.to_s.underscore.gsub('/', '_')}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
#
|
|
21
|
+
# See TwoColumnBrick as an example, which can only have to ColumBricks
|
|
22
|
+
# and the User should not be able to add more
|
|
23
|
+
#
|
|
24
|
+
def user_can_add_childs?
|
|
25
|
+
true
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
#
|
|
29
|
+
# return true if the user should be able to delete the brick through the UI.
|
|
30
|
+
# return false if not.
|
|
31
|
+
# See ColumnBrick, which should not be deleted inside the TwoColumnBrick
|
|
32
|
+
#
|
|
33
|
+
def user_can_delete?
|
|
34
|
+
true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# Return true if the user can hit the save button
|
|
39
|
+
# Return false if not
|
|
40
|
+
# See column brick, which has no data on its own except childs, therefore no button is needed
|
|
41
|
+
#
|
|
42
|
+
def user_can_save?
|
|
43
|
+
true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
#
|
|
47
|
+
# When true, the brick must implement the rendering of its childs by itself
|
|
48
|
+
# by using the _childs partial
|
|
49
|
+
# When false, the default BrickList rendering is used
|
|
50
|
+
# See _brick_item partial
|
|
51
|
+
#
|
|
52
|
+
def renders_own_childs?
|
|
53
|
+
false
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
#
|
|
57
|
+
# Return relevant fulltext information for this brick (e.g: it's name, description etc ).
|
|
58
|
+
# It will be stored in the related Page.
|
|
59
|
+
# Implement how you see fit.
|
|
60
|
+
#
|
|
61
|
+
def collect_fulltext
|
|
62
|
+
return '' unless respond_to?(:bricks)
|
|
63
|
+
bricks.localized.reduce('') do |text, brick|
|
|
64
|
+
text << brick.collect_fulltext
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
#
|
|
69
|
+
# Return a list of classnames which can be added as childs
|
|
70
|
+
# Return an empty array if you want no constraints
|
|
71
|
+
#
|
|
72
|
+
def allowed_brick_types
|
|
73
|
+
[]
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
#
|
|
77
|
+
# Returns all possible brick types which can be added as child to this brick list instance
|
|
78
|
+
#
|
|
79
|
+
def brick_types
|
|
80
|
+
@brick_types ||= Kuhsaft::BrickTypeFilter.new(self)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def uploader?
|
|
84
|
+
self.class.ancestors.include? CarrierWave::Mount::Extension
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Kuhsaft
|
|
2
|
+
class ImageSizeDelegator
|
|
3
|
+
def method_missing(method, *args, &block)
|
|
4
|
+
Kuhsaft::ImageSize.send(method, *args, &block)
|
|
5
|
+
rescue NoMethodError
|
|
6
|
+
super
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class Engine < ::Rails::Engine
|
|
11
|
+
isolate_namespace Kuhsaft
|
|
12
|
+
|
|
13
|
+
config.i18n.fallbacks = [:de]
|
|
14
|
+
config.i18n.load_path += Dir[Kuhsaft::Engine.root.join('config', 'locales', '**', '*.{yml}').to_s]
|
|
15
|
+
|
|
16
|
+
# defaults to nil
|
|
17
|
+
config.sublime_video_token = nil
|
|
18
|
+
|
|
19
|
+
# delegate image size config to ImageSize class
|
|
20
|
+
config.image_sizes = ImageSizeDelegator.new
|
|
21
|
+
|
|
22
|
+
initializer 'kuhsaft.initialize_haml_dependency_tracker' do
|
|
23
|
+
require 'action_view/dependency_tracker'
|
|
24
|
+
ActionView::DependencyTracker.register_tracker :haml, ActionView::DependencyTracker::ERBTracker
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Kuhsaft
|
|
2
|
+
module Gridded
|
|
3
|
+
def self.included(base)
|
|
4
|
+
base.extend(ClassMethods)
|
|
5
|
+
base.send :include, InstanceMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
module InstanceMethods
|
|
9
|
+
def gridded?
|
|
10
|
+
col_count != 0
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
module ClassMethods
|
|
15
|
+
def available_grid_sizes
|
|
16
|
+
(0..12).to_a
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'carrierwave'
|
|
2
|
+
require 'active_support/concern'
|
|
3
|
+
|
|
4
|
+
module Kuhsaft
|
|
5
|
+
module ImageUploaderMounting
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
|
|
8
|
+
included do
|
|
9
|
+
extend CarrierWave::Mount
|
|
10
|
+
|
|
11
|
+
mount_uploader :image, Kuhsaft::ImageBrickImageUploader
|
|
12
|
+
|
|
13
|
+
after_save :resize_image_if_size_changed
|
|
14
|
+
|
|
15
|
+
def resize_image_if_size_changed
|
|
16
|
+
image.recreate_versions! if image_size_changed? && image_present?
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
delegate :present?, to: :image, prefix: true
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
module Kuhsaft
|
|
2
|
+
# If you use this mixin, your class must implement the following methods
|
|
3
|
+
# siblings(), returns the siblings of the same type of object
|
|
4
|
+
|
|
5
|
+
module Orderable
|
|
6
|
+
def self.included(base)
|
|
7
|
+
base.extend(ClassMethods)
|
|
8
|
+
base.send :include, InstanceMethods
|
|
9
|
+
base.after_create :set_position
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
module InstanceMethods
|
|
13
|
+
def increment_position
|
|
14
|
+
update_attribute :position, position + 1
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def decrement_position
|
|
18
|
+
update_attribute :position, position - 1
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def preceding_sibling
|
|
22
|
+
siblings.where('position = ?', position - 1).first
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def succeeding_sibling
|
|
26
|
+
siblings.where('position = ?', position + 1).first
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def preceding_siblings
|
|
30
|
+
siblings.where('position <= ?', position).where('id != ?', id)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def succeeding_siblings
|
|
34
|
+
siblings.where('position >= ?', position).where('id != ?', id)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def position_to_top
|
|
38
|
+
update_attribute :position, 1
|
|
39
|
+
recount_siblings_position_from 1
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def recount_siblings_position_from(position)
|
|
43
|
+
counter = position
|
|
44
|
+
succeeding_siblings.each do |s|
|
|
45
|
+
counter += 1
|
|
46
|
+
s.update_attribute(:position, counter)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def reposition(before_id)
|
|
51
|
+
if before_id.blank?
|
|
52
|
+
position_to_top
|
|
53
|
+
else
|
|
54
|
+
update_attribute :position, self.class.position_of(before_id) + 1
|
|
55
|
+
recount_siblings_position_from position
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def set_position
|
|
60
|
+
initial_position = siblings.blank? ? 1 : siblings.count + 1
|
|
61
|
+
update_attribute(:position, initial_position)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
module ClassMethods
|
|
66
|
+
def position_of(id)
|
|
67
|
+
find(id).position rescue 1
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Kuhsaft
|
|
2
|
+
module PageTree
|
|
3
|
+
extend self
|
|
4
|
+
|
|
5
|
+
def update(params, parent_id = nil)
|
|
6
|
+
params.each do |page_position, page_content|
|
|
7
|
+
page = Page.find(page_content['id'])
|
|
8
|
+
page.update_attributes(parent_id: parent_id, position: page_position)
|
|
9
|
+
next if page_content['children'].nil?
|
|
10
|
+
update(page_content['children'], page.id)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Kuhsaft
|
|
2
|
+
class PartialExtractor
|
|
3
|
+
def extract_filenames(partial_paths)
|
|
4
|
+
partials = []
|
|
5
|
+
partial_paths.each do |partial|
|
|
6
|
+
filename = File.basename(partial).split('.', 0).first
|
|
7
|
+
filename.slice!(0)
|
|
8
|
+
partials << filename
|
|
9
|
+
end
|
|
10
|
+
partials.map { |d| [I18n.t(d), d] }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def collect_partials(path)
|
|
14
|
+
extract_filenames(Dir.glob("#{Rails.root}#{path}"))
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def partials(path)
|
|
18
|
+
@partials = collect_partials(path)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
require 'active_support/concern'
|
|
2
|
+
require 'pg_search'
|
|
3
|
+
|
|
4
|
+
module Kuhsaft
|
|
5
|
+
module Searchable
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
|
|
8
|
+
DICTIONARIES = {
|
|
9
|
+
en: 'english',
|
|
10
|
+
de: 'german'
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
def update_fulltext
|
|
14
|
+
self.fulltext = collect_fulltext
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
included do
|
|
18
|
+
unless included_modules.include?(BrickList)
|
|
19
|
+
raise 'Kuhsaft::Searchable needs Kuhsaft::BrickList to be included'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
translate :fulltext if included_modules.include?(Translatable)
|
|
23
|
+
before_validation :update_fulltext
|
|
24
|
+
|
|
25
|
+
if ActiveRecord::Base.connection.instance_values['config'][:adapter] == 'postgresql'
|
|
26
|
+
include ::PgSearch
|
|
27
|
+
cb = lambda do |query|
|
|
28
|
+
{
|
|
29
|
+
against: {
|
|
30
|
+
locale_attr(:title) => 'A',
|
|
31
|
+
locale_attr(:page_title) => 'A',
|
|
32
|
+
locale_attr(:keywords) => 'B',
|
|
33
|
+
locale_attr(:description) => 'C',
|
|
34
|
+
locale_attr(:fulltext) => 'C'
|
|
35
|
+
},
|
|
36
|
+
query: query,
|
|
37
|
+
using: { tsearch: { dictionary: DICTIONARIES[I18n.locale] || 'simple' } }
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
pg_search_scope :search_without_excerpt, cb
|
|
41
|
+
scope :search, lambda { |query|
|
|
42
|
+
ts_headline = sanitize_sql_array([
|
|
43
|
+
"ts_headline(%s, plainto_tsquery('%s')) AS excerpt",
|
|
44
|
+
locale_attr(:fulltext),
|
|
45
|
+
query
|
|
46
|
+
])
|
|
47
|
+
search_without_excerpt(query).select(ts_headline)
|
|
48
|
+
}
|
|
49
|
+
else
|
|
50
|
+
# TODO: Tests run in this branch because dummy app uses mysql. Change it!
|
|
51
|
+
# define empty fallback excerpt attribute
|
|
52
|
+
attr_reader :excerpt
|
|
53
|
+
scope :search, lambda { |query|
|
|
54
|
+
if query.is_a? Hash
|
|
55
|
+
where("#{query.first[0]} LIKE ?", "%#{query.first[1]}%")
|
|
56
|
+
else
|
|
57
|
+
stmt = ''
|
|
58
|
+
stmt += "#{locale_attr(:keywords)} LIKE ? OR "
|
|
59
|
+
stmt += "#{locale_attr(:title)} LIKE ? OR "
|
|
60
|
+
stmt += "#{locale_attr(:page_title)} LIKE ? OR "
|
|
61
|
+
stmt += "#{locale_attr(:description)} LIKE ? OR "
|
|
62
|
+
stmt += "#{locale_attr(:fulltext)} LIKE ?"
|
|
63
|
+
where(stmt, *(["%#{query}%"] * 5))
|
|
64
|
+
end
|
|
65
|
+
}
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require_relative '../../app/models/kuhsaft/placeholder_brick'
|
|
2
|
+
|
|
3
|
+
module Kuhsaft
|
|
4
|
+
module TouchPlaceholders
|
|
5
|
+
def self.included(base)
|
|
6
|
+
base.extend(ClassMethods)
|
|
7
|
+
|
|
8
|
+
base.class_eval do
|
|
9
|
+
after_save :touch_placeholders
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def touch_placeholders
|
|
14
|
+
return unless self.class.placeholder_templates.present?
|
|
15
|
+
self.class.placeholder_templates.each do |template_name|
|
|
16
|
+
related_templates = Kuhsaft::PlaceholderBrick.where(template_name: template_name)
|
|
17
|
+
related_templates.each { |p| p.touch } if related_templates
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
module ClassMethods
|
|
22
|
+
def placeholder_templates(*attributes)
|
|
23
|
+
if attributes.empty?
|
|
24
|
+
@shoestrap_placeholder_templates
|
|
25
|
+
else
|
|
26
|
+
@shoestrap_placeholder_templates = attributes
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|