releaf 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +24 -0
- data/README.md +74 -0
- data/Rakefile +62 -0
- data/app/assets/images/releaf/3rd_party/jquery-ui-1.9.2.custom/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/app/assets/images/releaf/3rd_party/jquery-ui-1.9.2.custom/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/app/assets/images/releaf/3rd_party/jquery-ui-1.9.2.custom/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/app/assets/images/releaf/3rd_party/jquery-ui-1.9.2.custom/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/app/assets/images/releaf/3rd_party/jquery-ui-1.9.2.custom/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/app/assets/images/releaf/3rd_party/jquery-ui-1.9.2.custom/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/app/assets/images/releaf/3rd_party/jquery-ui-1.9.2.custom/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/app/assets/images/releaf/3rd_party/jquery-ui-1.9.2.custom/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/app/assets/images/releaf/3rd_party/jquery-ui-1.9.2.custom/ui-icons_222222_256x240.png +0 -0
- data/app/assets/images/releaf/3rd_party/jquery-ui-1.9.2.custom/ui-icons_2e83ff_256x240.png +0 -0
- data/app/assets/images/releaf/3rd_party/jquery-ui-1.9.2.custom/ui-icons_454545_256x240.png +0 -0
- data/app/assets/images/releaf/3rd_party/jquery-ui-1.9.2.custom/ui-icons_888888_256x240.png +0 -0
- data/app/assets/images/releaf/3rd_party/jquery-ui-1.9.2.custom/ui-icons_cd0a0a_256x240.png +0 -0
- data/app/assets/images/releaf/3rd_party/lightbox/close.png +0 -0
- data/app/assets/images/releaf/3rd_party/lightbox/loading.gif +0 -0
- data/app/assets/images/releaf/3rd_party/lightbox/next.png +0 -0
- data/app/assets/images/releaf/3rd_party/lightbox/prev.png +0 -0
- data/app/assets/images/releaf/add.png +0 -0
- data/app/assets/images/releaf/background.jpg +0 -0
- data/app/assets/images/releaf/button/button_bgr.gif +0 -0
- data/app/assets/images/releaf/button/button_hover_bgr.png +0 -0
- data/app/assets/images/releaf/controllers/content/close.gif +0 -0
- data/app/assets/images/releaf/controllers/content/close_active.gif +0 -0
- data/app/assets/images/releaf/controllers/content/close_hover.gif +0 -0
- data/app/assets/images/releaf/controllers/content/global_fields_bgr.png +0 -0
- data/app/assets/images/releaf/controllers/content/open.gif +0 -0
- data/app/assets/images/releaf/controllers/content/open_2.gif +0 -0
- data/app/assets/images/releaf/controllers/content/open_active.gif +0 -0
- data/app/assets/images/releaf/controllers/content/open_hover.gif +0 -0
- data/app/assets/images/releaf/controllers/sessions/background.jpg +0 -0
- data/app/assets/images/releaf/controllers/sessions/logo.jpg +0 -0
- data/app/assets/images/releaf/expand_tool/close.png +0 -0
- data/app/assets/images/releaf/expand_tool/close_hover.png +0 -0
- data/app/assets/images/releaf/expand_tool/close_hover_shim.png +0 -0
- data/app/assets/images/releaf/expand_tool/close_shim.png +0 -0
- data/app/assets/images/releaf/expand_tool/loader.gif +0 -0
- data/app/assets/images/releaf/expand_tool/open.png +0 -0
- data/app/assets/images/releaf/expand_tool/open_hover.png +0 -0
- data/app/assets/images/releaf/expand_tool/open_hover_shim.png +0 -0
- data/app/assets/images/releaf/expand_tool/open_shim.png +0 -0
- data/app/assets/images/releaf/favicon.ico +0 -0
- data/app/assets/images/releaf/globalFieldContainerBgr.png +0 -0
- data/app/assets/images/releaf/icons/129.png +0 -0
- data/app/assets/images/releaf/icons/130.png +0 -0
- data/app/assets/images/releaf/icons/accept.png +0 -0
- data/app/assets/images/releaf/icons/add.png +0 -0
- data/app/assets/images/releaf/icons/arrow_down.png +0 -0
- data/app/assets/images/releaf/icons/arrow_left.png +0 -0
- data/app/assets/images/releaf/icons/arrow_refresh.png +0 -0
- data/app/assets/images/releaf/icons/arrow_up.png +0 -0
- data/app/assets/images/releaf/icons/bin_empty.png +0 -0
- data/app/assets/images/releaf/icons/bullet_black.png +0 -0
- data/app/assets/images/releaf/icons/bullet_connect.png +0 -0
- data/app/assets/images/releaf/icons/bullet_start.png +0 -0
- data/app/assets/images/releaf/icons/bullet_tick.png +0 -0
- data/app/assets/images/releaf/icons/chrome.png +0 -0
- data/app/assets/images/releaf/icons/control_play.png +0 -0
- data/app/assets/images/releaf/icons/date.png +0 -0
- data/app/assets/images/releaf/icons/delete.png +0 -0
- data/app/assets/images/releaf/icons/disk.png +0 -0
- data/app/assets/images/releaf/icons/drag-handle.png +0 -0
- data/app/assets/images/releaf/icons/error.png +0 -0
- data/app/assets/images/releaf/icons/eye.png +0 -0
- data/app/assets/images/releaf/icons/firefox.png +0 -0
- data/app/assets/images/releaf/icons/google-not-available.gif +0 -0
- data/app/assets/images/releaf/icons/google.gif +0 -0
- data/app/assets/images/releaf/icons/keyboard.png +0 -0
- data/app/assets/images/releaf/icons/left_16.png +0 -0
- data/app/assets/images/releaf/icons/link.png +0 -0
- data/app/assets/images/releaf/icons/magnifier.png +0 -0
- data/app/assets/images/releaf/icons/notAllowed.png +0 -0
- data/app/assets/images/releaf/icons/page_white_add.png +0 -0
- data/app/assets/images/releaf/icons/page_white_edit.png +0 -0
- data/app/assets/images/releaf/icons/page_white_put.png +0 -0
- data/app/assets/images/releaf/icons/page_white_text.png +0 -0
- data/app/assets/images/releaf/icons/pencil.png +0 -0
- data/app/assets/images/releaf/icons/picture.png +0 -0
- data/app/assets/images/releaf/icons/right_16.png +0 -0
- data/app/assets/images/releaf/icons/tick.png +0 -0
- data/app/assets/images/releaf/icons/warning.png +0 -0
- data/app/assets/images/releaf/icons/world_go.png +0 -0
- data/app/assets/images/releaf/icons/world_link.png +0 -0
- data/app/assets/images/releaf/input/autocompleteExpandIcon.png +0 -0
- data/app/assets/images/releaf/input/input_bgr.gif +0 -0
- data/app/assets/images/releaf/language_root.png +0 -0
- data/app/assets/images/releaf/loader.gif +0 -0
- data/app/assets/images/releaf/logout.png +0 -0
- data/app/assets/images/releaf/main_menu/active_bgr.png +0 -0
- data/app/assets/images/releaf/main_menu/bgr.png +0 -0
- data/app/assets/images/releaf/main_menu/hover_bgr.png +0 -0
- data/app/assets/images/releaf/module.png +0 -0
- data/app/assets/images/releaf/panel_layout/active_bgr.png +0 -0
- data/app/assets/images/releaf/panel_layout/secondary_panel_horizontal_bgr.png +0 -0
- data/app/assets/images/releaf/panel_layout/secondary_panel_vertical_bgr.png +0 -0
- data/app/assets/images/releaf/releaf_table/selected_bgr.png +0 -0
- data/app/assets/images/releaf/releaf_table/th_bgr.gif +0 -0
- data/app/assets/javascripts/releaf/3rd_party/jquery-cookie/README.md +73 -0
- data/app/assets/javascripts/releaf/3rd_party/jquery-cookie/jquery.cookie.js +47 -0
- data/app/assets/javascripts/releaf/3rd_party/jquery-cookie/server.js +24 -0
- data/app/assets/javascripts/releaf/3rd_party/jquery-cookie/test.html +19 -0
- data/app/assets/javascripts/releaf/3rd_party/jquery-cookie/test.js +80 -0
- data/app/assets/javascripts/releaf/3rd_party/jquery-ui-timepicker-addon.js +1882 -0
- data/app/assets/javascripts/releaf/3rd_party/lightbox.js.erb +379 -0
- data/app/assets/javascripts/releaf/application.js +14 -0
- data/app/assets/javascripts/releaf/controllers/base.js +170 -0
- data/app/assets/javascripts/releaf/controllers/releaf/content.js +90 -0
- data/app/assets/javascripts/releaf/controllers/releaf/translations.js +31 -0
- data/app/assets/javascripts/releaf/include/continuous_scroll.js +321 -0
- data/app/assets/javascripts/releaf/include/field.type_autocomplete.js +58 -0
- data/app/assets/javascripts/releaf/include/field.type_richtext.js +90 -0
- data/app/assets/javascripts/releaf/include/localization.js +12 -0
- data/app/assets/javascripts/releaf/include/nested_fields.js +71 -0
- data/app/assets/javascripts/releaf/include/sortable.js +27 -0
- data/app/assets/javascripts/releaf/lib/request_url.js +183 -0
- data/app/assets/stylesheets/releaf/3rd_party/jquery-ui-1.9.2.custom.css.erb +464 -0
- data/app/assets/stylesheets/releaf/3rd_party/jquery-ui-timepicker-addon.css +10 -0
- data/app/assets/stylesheets/releaf/3rd_party/lightbox.css.erb +157 -0
- data/app/assets/stylesheets/releaf/application.css.erb +122 -0
- data/app/assets/stylesheets/releaf/controllers/base.css.erb +205 -0
- data/app/assets/stylesheets/releaf/controllers/releaf/content.css.erb +416 -0
- data/app/assets/stylesheets/releaf/controllers/releaf/sessions.css.scss.erb +116 -0
- data/app/assets/stylesheets/releaf/controllers/releaf/translations.css.erb +205 -0
- data/app/assets/stylesheets/releaf/include/button.css.erb +176 -0
- data/app/assets/stylesheets/releaf/include/field.css.erb +257 -0
- data/app/assets/stylesheets/releaf/include/input.css.erb +40 -0
- data/app/assets/stylesheets/releaf/include/main_menu.css.erb +66 -0
- data/app/assets/stylesheets/releaf/include/pagination.css.erb +29 -0
- data/app/assets/stylesheets/releaf/include/panel_layout.css.erb +251 -0
- data/app/assets/stylesheets/releaf/include/releaf_table.css.erb +112 -0
- data/app/assets/stylesheets/releaf/include/sortable.css.erb +12 -0
- data/app/controllers/releaf/admins_controller.rb +48 -0
- data/app/controllers/releaf/application_controller.rb +11 -0
- data/app/controllers/releaf/base_application_controller.rb +15 -0
- data/app/controllers/releaf/base_controller.rb +310 -0
- data/app/controllers/releaf/content_controller.rb +166 -0
- data/app/controllers/releaf/roles_controller.rb +36 -0
- data/app/controllers/releaf/sessions_controller.rb +5 -0
- data/app/controllers/releaf/tinymce_assets_controller.rb +26 -0
- data/app/controllers/releaf/translations_controller.rb +121 -0
- data/app/helpers/releaf/admin_helper.rb +79 -0
- data/app/helpers/releaf/application_helper.rb +4 -0
- data/app/helpers/releaf/pagination_renderer.rb +44 -0
- data/app/helpers/releaf/releaf_devise_helper.rb +8 -0
- data/app/models/releaf/admin.rb +51 -0
- data/app/models/releaf/node.rb +221 -0
- data/app/models/releaf/node_base.rb +25 -0
- data/app/models/releaf/role.rb +119 -0
- data/app/models/releaf/tinymce_asset.rb +6 -0
- data/app/views/layouts/releaf/admin.html.haml +51 -0
- data/app/views/releaf/aliases/_edit.body.haml +50 -0
- data/app/views/releaf/aliases/_edit.header.haml +19 -0
- data/app/views/releaf/aliases/_index.row.haml +5 -0
- data/app/views/releaf/aliases/_secondary_panel.haml +13 -0
- data/app/views/releaf/base/_edit.body.haml +19 -0
- data/app/views/releaf/base/_edit.field.haml +96 -0
- data/app/views/releaf/base/_edit.field.type_autocomplete.haml +15 -0
- data/app/views/releaf/base/_edit.field.type_checkbox.haml +5 -0
- data/app/views/releaf/base/_edit.field.type_date.haml +8 -0
- data/app/views/releaf/base/_edit.field.type_datetime.haml +8 -0
- data/app/views/releaf/base/_edit.field.type_delete_nested.haml +3 -0
- data/app/views/releaf/base/_edit.field.type_file.haml +10 -0
- data/app/views/releaf/base/_edit.field.type_image.haml +14 -0
- data/app/views/releaf/base/_edit.field.type_link.haml +4 -0
- data/app/views/releaf/base/_edit.field.type_password.haml +4 -0
- data/app/views/releaf/base/_edit.field.type_richtext.haml +4 -0
- data/app/views/releaf/base/_edit.field.type_richtext_i18n.haml +27 -0
- data/app/views/releaf/base/_edit.field.type_select.haml +11 -0
- data/app/views/releaf/base/_edit.field.type_text.haml +4 -0
- data/app/views/releaf/base/_edit.field.type_text_i18n.haml +27 -0
- data/app/views/releaf/base/_edit.field.type_textarea.haml +4 -0
- data/app/views/releaf/base/_edit.field.type_textarea_i18n.haml +27 -0
- data/app/views/releaf/base/_edit.field.type_time.haml +8 -0
- data/app/views/releaf/base/_edit.footer.haml +14 -0
- data/app/views/releaf/base/_edit.form.haml +4 -0
- data/app/views/releaf/base/_edit.has_many_associations.haml +45 -0
- data/app/views/releaf/base/_edit.header.haml +3 -0
- data/app/views/releaf/base/_index.body.haml +6 -0
- data/app/views/releaf/base/_index.cell.haml +19 -0
- data/app/views/releaf/base/_index.footer.haml +22 -0
- data/app/views/releaf/base/_index.header.haml +4 -0
- data/app/views/releaf/base/_index.row.haml +6 -0
- data/app/views/releaf/base/_index.search.haml +5 -0
- data/app/views/releaf/base/_index.table.haml +8 -0
- data/app/views/releaf/base/_secondary_panel.haml +9 -0
- data/app/views/releaf/base/_show.body.haml +7 -0
- data/app/views/releaf/base/_show.field.haml +78 -0
- data/app/views/releaf/base/_show.field.type_html.haml +1 -0
- data/app/views/releaf/base/_show.footer.haml +16 -0
- data/app/views/releaf/base/_show.header.haml +3 -0
- data/app/views/releaf/base/confirm_destroy.haml +10 -0
- data/app/views/releaf/base/edit.haml +1 -0
- data/app/views/releaf/base/index.haml +3 -0
- data/app/views/releaf/base/new.haml +1 -0
- data/app/views/releaf/base/show.haml +3 -0
- data/app/views/releaf/content/_edit.body.haml +45 -0
- data/app/views/releaf/content/_edit.content_fields.haml +19 -0
- data/app/views/releaf/content/_edit.slug.haml +12 -0
- data/app/views/releaf/content/_get_content_form.haml +7 -0
- data/app/views/releaf/content/_secondary_panel.haml +3 -0
- data/app/views/releaf/content/_show.field.content.haml +11 -0
- data/app/views/releaf/content/_tree_level.haml +16 -0
- data/app/views/releaf/content/ajax.new.haml +3 -0
- data/app/views/releaf/content/index.haml +0 -0
- data/app/views/releaf/roles/_edit.field.admins.haml +0 -0
- data/app/views/releaf/roles/_edit.field.permissions.haml +5 -0
- data/app/views/releaf/roles/_show.field.default.haml +6 -0
- data/app/views/releaf/roles/_show.field.permissions.haml +11 -0
- data/app/views/releaf/sessions/new.html.haml +17 -0
- data/app/views/releaf/translations/_edit.body.haml +50 -0
- data/app/views/releaf/translations/_edit.header.haml +19 -0
- data/app/views/releaf/translations/_index.row.haml +5 -0
- data/app/views/releaf/translations/_secondary_panel.haml +13 -0
- data/bin/releaf +25 -0
- data/lib/generators/releaf/install_generator.rb +87 -0
- data/lib/generators/releaf/templates/config/common_fields.yml.example +17 -0
- data/lib/generators/releaf/templates/controllers/home_controller.rb +4 -0
- data/lib/generators/releaf/templates/images/3rd_party/jquery_ui/smoothness/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/jquery_ui/smoothness/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/jquery_ui/smoothness/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/jquery_ui/smoothness/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/jquery_ui/smoothness/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/jquery_ui/smoothness/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/jquery_ui/smoothness/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/jquery_ui/smoothness/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/jquery_ui/smoothness/ui-icons_222222_256x240.png +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/jquery_ui/smoothness/ui-icons_2e83ff_256x240.png +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/jquery_ui/smoothness/ui-icons_454545_256x240.png +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/jquery_ui/smoothness/ui-icons_888888_256x240.png +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/jquery_ui/smoothness/ui-icons_cd0a0a_256x240.png +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/lightbox/close.png +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/lightbox/loading.gif +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/lightbox/next.png +0 -0
- data/lib/generators/releaf/templates/images/3rd_party/lightbox/prev.png +0 -0
- data/lib/generators/releaf/templates/initializers/releaf.rb +59 -0
- data/lib/generators/releaf/templates/initializers/releaf_i18n.rb +8 -0
- data/lib/generators/releaf/templates/initializers/releaf_store_current_template.rb +25 -0
- data/lib/generators/releaf/templates/javascripts/3rd_party/jquery_ui.js +14850 -0
- data/lib/generators/releaf/templates/javascripts/3rd_party/lightbox.js.erb +379 -0
- data/lib/generators/releaf/templates/javascripts/application.js +15 -0
- data/lib/generators/releaf/templates/javascripts/lib/js_check.js +8 -0
- data/lib/generators/releaf/templates/javascripts/lib/request_url.js +169 -0
- data/lib/generators/releaf/templates/javascripts/lib/sortable.js +29 -0
- data/lib/generators/releaf/templates/migrations/create_releaf_admins.rb +53 -0
- data/lib/generators/releaf/templates/migrations/create_releaf_nodes.rb +25 -0
- data/lib/generators/releaf/templates/migrations/create_releaf_roles.rb +11 -0
- data/lib/generators/releaf/templates/migrations/create_releaf_tinymce_assets.rb +10 -0
- data/lib/generators/releaf/templates/migrations/create_releaf_translations.rb +31 -0
- data/lib/generators/releaf/templates/models/admin_ability.rb +51 -0
- data/lib/generators/releaf/templates/seeds.rb +64 -0
- data/lib/generators/releaf/templates/stylesheets/3rd_party/jquery_ui/smoothness.css.erb +1174 -0
- data/lib/generators/releaf/templates/stylesheets/3rd_party/lightbox.css.erb +157 -0
- data/lib/generators/releaf/templates/stylesheets/3rd_party/reset.css +48 -0
- data/lib/generators/releaf/templates/stylesheets/application.scss +15 -0
- data/lib/generators/releaf/templates/stylesheets/style.scss +45 -0
- data/lib/generators/releaf/templates/views/home/index.html.haml +1 -0
- data/lib/generators/releaf/templates/views/layouts/application.html.haml +26 -0
- data/lib/i18n/backend/releaf.rb +96 -0
- data/lib/i18n/backend/releaf/translation.rb +56 -0
- data/lib/i18n/backend/releaf/translation_data.rb +32 -0
- data/lib/i18n/backend/releaf/translation_group.rb +30 -0
- data/lib/i18n/releaf.rb +1 -0
- data/lib/releaf.rb +30 -0
- data/lib/releaf/engine.rb +4 -0
- data/lib/releaf/slug.rb +79 -0
- data/lib/releaf/version.rb +3 -0
- data/lib/tasks/releaf_tasks.rake +4 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/images/rails.png +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/models/admin_ability.rb +51 -0
- data/spec/dummy/app/models/settings.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.haml +10 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +68 -0
- data/spec/dummy/config/boot.rb +6 -0
- data/spec/dummy/config/common_fields.yml.example +17 -0
- data/spec/dummy/config/database.yml +42 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +67 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/devise.rb +232 -0
- data/spec/dummy/config/initializers/dragonfly.rb +1 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/releaf.rb +59 -0
- data/spec/dummy/config/initializers/releaf_i18n.rb +8 -0
- data/spec/dummy/config/initializers/releaf_store_current_template.rb +25 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/devise.en.yml +58 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +11 -0
- data/spec/dummy/db/migrate/20130204164516_create_settings.rb +17 -0
- data/spec/dummy/db/migrate/20130204164523_create_releaf_nodes.rb +25 -0
- data/spec/dummy/db/migrate/20130204164524_create_releaf_roles.rb +11 -0
- data/spec/dummy/db/migrate/20130204164525_create_releaf_translations.rb +31 -0
- data/spec/dummy/db/migrate/20130204164526_create_releaf_admins.rb +53 -0
- data/spec/dummy/db/schema.rb +112 -0
- data/spec/dummy/db/seeds.rb +64 -0
- data/spec/dummy/doc/README_FOR_APP +2 -0
- data/spec/dummy/log/development.log +74 -0
- data/spec/dummy/log/test.log +129 -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/script/rails +6 -0
- data/spec/dummy/tmp/cache/9C5/660/settings%3Ai18n_updated_at +1 -0
- data/spec/factories/factories.rb +24 -0
- data/spec/features/admin_spec.rb +41 -0
- data/spec/spec_helper.rb +23 -0
- data/templates/releaf/installer.rb +196 -0
- metadata +777 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
module Releaf
|
2
|
+
class NodeBase < ActiveRecord::Base
|
3
|
+
self.abstract_class = true
|
4
|
+
|
5
|
+
# returns only bottom level, not /^Releaf::/ subclasses
|
6
|
+
def self.node_classes
|
7
|
+
return _node_classes(self).reject { |n| n.name =~ /^Releaf::/ }
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def self._node_classes(klass)
|
13
|
+
return [klass] if klass.subclasses.blank?
|
14
|
+
|
15
|
+
classes = []
|
16
|
+
|
17
|
+
klass.subclasses.each do |sublcass|
|
18
|
+
classes += _node_classes(sublcass)
|
19
|
+
end
|
20
|
+
|
21
|
+
return classes
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
module Releaf
|
2
|
+
class Role < ActiveRecord::Base
|
3
|
+
self.table_name = 'releaf_roles'
|
4
|
+
|
5
|
+
validates_presence_of :name
|
6
|
+
validates_uniqueness_of :name, :case_sensitive => false
|
7
|
+
|
8
|
+
has_many :admins
|
9
|
+
|
10
|
+
before_save :update_permissions
|
11
|
+
after_save :update_default_role
|
12
|
+
|
13
|
+
alias_attribute :to_text, :name
|
14
|
+
|
15
|
+
::AdminAbility::PERMISSIONS.each do |perms|
|
16
|
+
if perms.is_a? Array
|
17
|
+
# attr_accessible :"#{perms[0]}_permissions"
|
18
|
+
define_method :"#{perms[0]}_permissions=" do |p|
|
19
|
+
return if p.nil?
|
20
|
+
raise ArgumentError, "permission must be one of: #{perms[1].join(', ')}" unless perms[1].include? p.to_s
|
21
|
+
self.instance_variable_set "@#{perms[0]}_permissions", p.to_s
|
22
|
+
end
|
23
|
+
|
24
|
+
define_method "#{perms[0]}_permissions" do
|
25
|
+
iv = self.instance_variable_get "@#{perms[0]}_permissions"
|
26
|
+
return iv unless iv.nil?
|
27
|
+
perms[1].each do |perm|
|
28
|
+
xperm = [perms[0], perm].join('__')
|
29
|
+
return perm if permissions.include? xperm
|
30
|
+
end
|
31
|
+
return perms[1].first
|
32
|
+
end
|
33
|
+
|
34
|
+
elsif perms.is_a? String
|
35
|
+
# attr_accessible :"#{perms}_permission"
|
36
|
+
define_method "#{perms}_permission=" do |p|
|
37
|
+
return if p.nil?
|
38
|
+
|
39
|
+
raise ArgumentError, "permission must be one of: true, false, '0', '1'" unless [true, false, '0', '1'].include? p
|
40
|
+
self.instance_variable_set "@#{perms}_permission", (p == true || p == '1')
|
41
|
+
end
|
42
|
+
|
43
|
+
define_method "#{perms}_permission" do
|
44
|
+
iv = self.instance_variable_get "@#{perms}_permission"
|
45
|
+
return (iv == '1' || iv == true) unless iv.nil?
|
46
|
+
permissions.include? perms
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
scope :order_by, lambda { |field=:name| order(field) }
|
52
|
+
|
53
|
+
def self.default
|
54
|
+
Role.find_by_default(true)
|
55
|
+
end
|
56
|
+
|
57
|
+
def default
|
58
|
+
return true if @set_default
|
59
|
+
self.default?
|
60
|
+
end
|
61
|
+
|
62
|
+
def default=(is_default=true)
|
63
|
+
return unless is_default == true or is_default == '1'
|
64
|
+
@set_default = true
|
65
|
+
end
|
66
|
+
|
67
|
+
def destroy
|
68
|
+
if (self.default? == false) && (!self.permissions.include?('admin') || (self.permissions.include?('admin') && Role.admin_roles_count > 1))
|
69
|
+
super
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.admin_roles_count
|
74
|
+
Role.where('permissions LIKE "%\n- admin\n%"').count
|
75
|
+
end
|
76
|
+
|
77
|
+
protected
|
78
|
+
|
79
|
+
def permissions
|
80
|
+
perm = read_attribute :permissions
|
81
|
+
return YAML::load(perm) if perm
|
82
|
+
return []
|
83
|
+
end
|
84
|
+
|
85
|
+
def permissions=(perm=[])
|
86
|
+
raise ArgumentError unless perm.is_a? Array
|
87
|
+
new_perm = perm.clone
|
88
|
+
new_perm.delete_if { |p| p.blank? }
|
89
|
+
write_attribute :permissions, YAML::dump(new_perm)
|
90
|
+
end
|
91
|
+
|
92
|
+
private
|
93
|
+
|
94
|
+
def update_default_role
|
95
|
+
if @set_default && self.id
|
96
|
+
Role.update_all 'releaf_roles.default = false', ['releaf_roles.id <> ?', self.id]
|
97
|
+
Role.update_all 'releaf_roles.default = true', ['releaf_roles.id = ?', self.id]
|
98
|
+
@set_default = false
|
99
|
+
self.reload
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def update_permissions
|
104
|
+
my_permissions = []
|
105
|
+
AdminAbility::PERMISSIONS.each do |perms|
|
106
|
+
p = nil
|
107
|
+
if perms.is_a? Array
|
108
|
+
p = [perms[0], self.send(:"#{perms[0]}_permissions")].join('__')
|
109
|
+
p = nil if p == [perms[0], perms[1].first].join('__')
|
110
|
+
elsif perms.is_a? String
|
111
|
+
p = perms if self.send(:"#{perms}_permission")
|
112
|
+
end
|
113
|
+
my_permissions.push p if p.blank? == false
|
114
|
+
end
|
115
|
+
self.permissions = my_permissions
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
!!! 5
|
2
|
+
%html
|
3
|
+
%head
|
4
|
+
%title re:leaf
|
5
|
+
= csrf_meta_tags
|
6
|
+
%link{ :rel =>"icon", :href => asset_path("releaf/favicon.ico"), :type => "image/x-icon" }
|
7
|
+
|
8
|
+
= stylesheet_link_tag "releaf/application"
|
9
|
+
|
10
|
+
- _assets_path = __FILE__.split('/')[0...-1].join('/') + "/../../../assets"
|
11
|
+
|
12
|
+
- controller_asset = params[:controller]
|
13
|
+
- ['.css.scss.erb', '.scss.erb', '.css.scss', '.scss', '.css.erb', '.css'].each do |ext|
|
14
|
+
- if File.exists?(_assets_path + "/stylesheets/releaf/controllers/#{controller_asset}" + ext)
|
15
|
+
= stylesheet_link_tag "releaf/controllers/#{controller_asset}"
|
16
|
+
%body.yui3-skin-sam
|
17
|
+
- if self.send(:"#{Releaf::ReleafDeviseHelper.devise_admin_model_name}_signed_in?")
|
18
|
+
.main_menu
|
19
|
+
.user
|
20
|
+
%a{:href => self.send(:"destroy_#{Releaf::ReleafDeviseHelper.devise_admin_model_name}_session_path"), "data-method" => "delete"}
|
21
|
+
%span.image_container
|
22
|
+
= image_tag("releaf/logout.png")
|
23
|
+
%span.name_wrap= t("logout")
|
24
|
+
%ul
|
25
|
+
- Releaf.main_menu.each do |item|
|
26
|
+
%li><
|
27
|
+
%a{:href => main_menu_item_url(item), :class => is_this_main_menu_item_active?(item) ? :active : nil}
|
28
|
+
%span.image_container
|
29
|
+
= image_tag("releaf/module.png")
|
30
|
+
%span.name_wrap= t(item, :scope => "admin.main_menu")
|
31
|
+
|
32
|
+
#body_wrap{:class => "module-#{controller.controller_name} method-#{controller.action_name} controller-#{params[:controller].tr( '/', '-' )} action-#{controller.action_name} view-#{ controller.active_template.virtual_path.split('/').pop() if controller.active_template }"}
|
33
|
+
- if self.send(:"#{Releaf::ReleafDeviseHelper.devise_admin_model_name}_signed_in?")
|
34
|
+
- if @panel_layout == true
|
35
|
+
.panel_layout
|
36
|
+
.secondary_panel
|
37
|
+
= controller.secondary_panel.html_safe
|
38
|
+
.primary_panel
|
39
|
+
= yield
|
40
|
+
- else
|
41
|
+
= yield
|
42
|
+
- else
|
43
|
+
= yield
|
44
|
+
|
45
|
+
#preload_wrap
|
46
|
+
#preload
|
47
|
+
.loading_icon
|
48
|
+
|
49
|
+
= javascript_include_tag "releaf/application"
|
50
|
+
- if File.exists?(_assets_path + "/javascripts/releaf/controllers/#{controller_asset}.js")
|
51
|
+
= javascript_include_tag "releaf/controllers/#{controller_asset}"
|
@@ -0,0 +1,50 @@
|
|
1
|
+
.body.inset_box.no_shadow
|
2
|
+
|
3
|
+
-#TODO: improve style/html
|
4
|
+
-if f.object.errors.any?
|
5
|
+
#error_explanation
|
6
|
+
%strong= "#{pluralize(f.object.errors.count, "error")} prohibited this news from being saved:"
|
7
|
+
%ul
|
8
|
+
- f.object.errors.full_messages.each do |msg|
|
9
|
+
%li= msg
|
10
|
+
|
11
|
+
.nested_wrap
|
12
|
+
%table.releaf_table.no_border.label_first_column.aliases.aliasesTable.list{:cellpadding => "0", :cellspacing => "0"}
|
13
|
+
%thead
|
14
|
+
%tr
|
15
|
+
%th.codeHeader Nosaukums
|
16
|
+
- Settings.i18n_locales.each do |locale|
|
17
|
+
%th.languageHeader{"data-locale" => locale}
|
18
|
+
%span.name= locale
|
19
|
+
%th.deleteHeader
|
20
|
+
%tbody#variables.list
|
21
|
+
- f.object.translations.each do |translation|
|
22
|
+
%tr.item{ :id => "translation_#{translation.id}" }
|
23
|
+
%td.translation_name.codeColumn
|
24
|
+
.wrap
|
25
|
+
%input{:type=>"hidden", :name=>"translations[#{translation.id}][id]", :value=>"#{translation.id}"}/
|
26
|
+
%input{:type=>"text", :name=>"translations[#{translation.id}][key]", :value=>"#{translation.plain_key}"}/
|
27
|
+
- Settings.i18n_locales.each do |locale|
|
28
|
+
|
29
|
+
%td.translationCell{"data-locale" => locale}
|
30
|
+
.wrap
|
31
|
+
%input{:type=>"text", :name=>"translations[#{translation.id}][localization][#{locale}]", :value=>translation.locales[locale]}/
|
32
|
+
%td.delete_column
|
33
|
+
%span.remove= image_tag("releaf/icons/delete.png", :alt => "delete", :title => :delete)
|
34
|
+
|
35
|
+
%table{:style => "display:none;"}
|
36
|
+
%tbody
|
37
|
+
%tr.template.item{:id => "translation__template_" }
|
38
|
+
%td.translation_name.codeColumn
|
39
|
+
.wrap
|
40
|
+
%input{:type=>"text", :name=>"translations[_template_][key]", :value=>""}/
|
41
|
+
- Settings.i18n_locales.each do |locale|
|
42
|
+
%td.translationCell{"data-locale" => locale}
|
43
|
+
.wrap
|
44
|
+
%input{:type=>"text", :name=>"translations[_template_][localization][#{locale}]", :value=>""}/
|
45
|
+
%td.delete_column
|
46
|
+
%span.remove= image_tag("releaf/icons/delete.png", :alt => "delete", :title => :delete)
|
47
|
+
|
48
|
+
%button.add.new(type='button')
|
49
|
+
= image_tag 'releaf/icons/add.png', :atl => ''
|
50
|
+
%span New
|
@@ -0,0 +1,19 @@
|
|
1
|
+
.visibleLanguagesSwitch
|
2
|
+
%button{:type => "button"}
|
3
|
+
Redzamās valodas
|
4
|
+
=image_tag("releaf/expand_tool/close_hover_shim.png", :alt => "")
|
5
|
+
%ul.block
|
6
|
+
- Settings.i18n_locales.each do |locale|
|
7
|
+
%li
|
8
|
+
%label
|
9
|
+
.header
|
10
|
+
.padding
|
11
|
+
.groupInfo
|
12
|
+
.field
|
13
|
+
%label{:for => "context"} Konteksts:
|
14
|
+
%input#context{:name => "translation_group[scope]", :size => "50", :type => "text", :value => @item.scope}/
|
15
|
+
.aliasesTable.aliasesTableHead
|
16
|
+
.th.codeHeader{:style => "width: 208px; "}>< Nosaukums
|
17
|
+
- Settings.i18n_locales.each do |locale|
|
18
|
+
.th.languageHeader.languageId-1.languageCode-lv{"data-languagecode" => locale, "data-languageid" => "1", :style => "width: 300px; "}><
|
19
|
+
%span.name= locale
|
@@ -0,0 +1,13 @@
|
|
1
|
+
.inner.standard_submenu
|
2
|
+
%ul.block
|
3
|
+
%li
|
4
|
+
.section_title= t('translations')
|
5
|
+
%ul
|
6
|
+
%li{:class=> params[:id].blank? ? "active" : ""}
|
7
|
+
%a{:href => releaf_translation_groups_path}= t('all_translations')
|
8
|
+
%li
|
9
|
+
.section_title= t('groups')
|
10
|
+
%ul
|
11
|
+
- @groups.each do |group|
|
12
|
+
%li{:class=> !params[:id].blank? && params[:id].to_i == group.id ? "active" : ""}
|
13
|
+
%a{:href => edit_releaf_translation_group_path(group.id)}= group.scope
|
@@ -0,0 +1,19 @@
|
|
1
|
+
.body.inset_box
|
2
|
+
.section
|
3
|
+
-#TODO: improve style/html
|
4
|
+
-if f.object.errors.any?
|
5
|
+
#error_explanation
|
6
|
+
%strong= "#{pluralize(f.object.errors.count, "error")} prohibited this news from being saved:"
|
7
|
+
%ul
|
8
|
+
- f.object.errors.full_messages.each do |msg|
|
9
|
+
%li= msg
|
10
|
+
|
11
|
+
-# - @controller.columns( params[:action] ).each do |name|
|
12
|
+
- @controller.columns( params[:action] ).each do |name|
|
13
|
+
- if @controller.has_template( "_edit.field.#{name}" )
|
14
|
+
= render "edit.field.#{name}", :name => name, :f => f
|
15
|
+
- else
|
16
|
+
= render 'edit.field', :name => name, :f => f
|
17
|
+
|
18
|
+
|
19
|
+
= render 'edit.has_many_associations', :f => f
|
@@ -0,0 +1,96 @@
|
|
1
|
+
- name_without_id_or_type = name.sub(/_(id|type)$/, '')
|
2
|
+
|
3
|
+
- if polymorphic_association_names(f.object).include?(name_without_id_or_type)
|
4
|
+
-# name =~ /_id$/ is required to prevent user template from being renedred 2x times:
|
5
|
+
-# first time for _id field, second time for _type field
|
6
|
+
- if name =~ /_id$/ && @controller.has_template( "_edit.field.#{name_without_id_or_type}" )
|
7
|
+
= render "_edit.field.#{name_without_id_or_type}"
|
8
|
+
|
9
|
+
- else
|
10
|
+
:ruby
|
11
|
+
collection = nil
|
12
|
+
input_type = 'text'
|
13
|
+
use_i18n = false
|
14
|
+
if f.object.class.respond_to?(:translations_table_name)
|
15
|
+
use_i18n = true if f.object.class.translates.include?(name.to_sym)
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
case name
|
20
|
+
when /_id$/
|
21
|
+
if name =~ /_id$/ && f.object.class.reflect_on_association(name.sub(/_id$/, '').to_sym)
|
22
|
+
collection = f.object.class.reflect_on_association(name.sub(/_id$/, '').to_sym).try(:klass).try(:all)
|
23
|
+
end
|
24
|
+
|
25
|
+
collection = f.object.class.reflect_on_association(name.to_sym).try(:klass).try(:all) if collection.nil?
|
26
|
+
input_type = 'select' unless collection.nil?
|
27
|
+
when /(thumbnail|image|photo|picture|avatar|logo|icon)_uid$/
|
28
|
+
# FIXME should check if it's a dragonfly field
|
29
|
+
input_type = 'image'
|
30
|
+
when /_uid$/
|
31
|
+
# FIXME should check if it's a dragonfly field
|
32
|
+
input_type = 'file'
|
33
|
+
use_i18n = false
|
34
|
+
when /password/
|
35
|
+
input_type = 'password'
|
36
|
+
use_i18n = false
|
37
|
+
when /_link$/, 'link', /_url$/, 'url'
|
38
|
+
input_type = 'link'
|
39
|
+
use_i18n = false
|
40
|
+
else
|
41
|
+
if name =~ /^#{Releaf::Node::COMMON_FIELD_NAME_PREFIX}/
|
42
|
+
column_type = f.object.common_field_field_type(name)
|
43
|
+
else
|
44
|
+
column_type = f.object.class.columns_hash[ name ].try(:type) || :string
|
45
|
+
end
|
46
|
+
|
47
|
+
case column_type.to_sym
|
48
|
+
when :boolean
|
49
|
+
input_type = 'checkbox'
|
50
|
+
use_i18n = false
|
51
|
+
when :text
|
52
|
+
if name.end_with?( '_html' )
|
53
|
+
input_type = 'richtext'
|
54
|
+
else
|
55
|
+
input_type = 'textarea'
|
56
|
+
end
|
57
|
+
when :datetime
|
58
|
+
input_type = 'datetime'
|
59
|
+
use_i18n = false
|
60
|
+
when :date
|
61
|
+
input_type = 'date'
|
62
|
+
use_i18n = false
|
63
|
+
when :time
|
64
|
+
input_type = 'time'
|
65
|
+
use_i18n = false
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
- if @controller.has_template( "_edit.field.type_#{input_type}" ) && input_type == 'select'
|
72
|
+
:ruby
|
73
|
+
text_field = :to_text unless text_field
|
74
|
+
include_blank = nil unless include_blank
|
75
|
+
|
76
|
+
if include_blank.nil?
|
77
|
+
if f.object.send(name).nil?
|
78
|
+
include_blank = true
|
79
|
+
else
|
80
|
+
include_blank = true
|
81
|
+
f.object.class.validators_on(name).each do |validator|
|
82
|
+
if validator.is_a? ActiveModel::Validations::PresenceValidator
|
83
|
+
include_blank = false
|
84
|
+
break
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
= render "edit.field.type_select#{use_i18n ? '_i18n' : ''}", :name => name, :select_options => options_from_collection_for_select(collection, :id, text_field.to_sym, f.object.send(name) ), :options => { :include_blank => include_blank }, :f => f
|
91
|
+
- elsif @controller.has_template( "_edit.field.type_#{input_type}#{use_i18n ? '_i18n' : ''}" )
|
92
|
+
= render "edit.field.type_#{input_type}#{use_i18n ? '_i18n' : ''}", :name => name, :f => f
|
93
|
+
- else
|
94
|
+
- input_type = @controller.input_type_for( 'string', name )
|
95
|
+
- use_i18n = fasle unless input_type == 'text'
|
96
|
+
= render "edit.field.type_#{input_type}#{use_i18n ? '_i18n' : ''}", :name => name, :f => f
|
@@ -0,0 +1,15 @@
|
|
1
|
+
- query_field = 'name' unless query_field
|
2
|
+
- can_create = false unless can_create
|
3
|
+
- autocomplete_url = url_for(:action => "autocomplete", :field => name, :query_field => query_field, :format => :json)
|
4
|
+
|
5
|
+
.field.type_autocomplete{ 'data-name' => name }
|
6
|
+
.label_wrap><= f.label name, name.to_s.humanize + ':'
|
7
|
+
.value><
|
8
|
+
- if can_create == true
|
9
|
+
= f.text_field :"#{name}_text", :'data-autocomplete-url' => autocomplete_url
|
10
|
+
- else
|
11
|
+
%input{:type => :text, :name => "_tmp_field_#{f.object.object_id}_#{rand(999999999)}", :'data-autocomplete-url' => autocomplete_url, :value => f.object.send(name.sub(/_id$/, '')).to_text }/
|
12
|
+
= image_tag 'releaf/input/autocompleteExpandIcon.png', :alt => '', :class => :autocomplete_expand_icon
|
13
|
+
= f.hidden_field name
|
14
|
+
|
15
|
+
.clear
|
@@ -0,0 +1,8 @@
|
|
1
|
+
.field.type_date{ 'data-name' => name }
|
2
|
+
.label_wrap><
|
3
|
+
= f.label name, name.to_s.humanize + ':'
|
4
|
+
.description= I18n.t("field.Format %{_format}", :default => "Format: %{_format}", :_format => I18n.t("format.input.date", :default => 'yyyy-mm-dd'))
|
5
|
+
-# FIXME
|
6
|
+
-# .value><= f.text_field name, l(f.object.send(name), :format => :date_picker), :class => 'date_picker', :data => {:date_format => I18n.t("format.jquery.datepicker.date", :default => 'yy-mm-dd') }
|
7
|
+
.value><= f.text_field name, :class => 'date_picker', :data => {:date_format => I18n.t("format.jquery.datepicker.date", :default => 'yy-mm-dd') }
|
8
|
+
.clear
|