redde 0.1.18 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/.hound.yml +2 -0
- data/.rubocop.yml +19 -0
- data/.travis.yml +5 -4
- data/Gemfile +8 -5
- data/MIT-LICENSE +20 -0
- data/README.md +96 -105
- data/Rakefile +20 -1
- data/app/assets/fonts/redde-admin.eot +0 -0
- data/app/assets/fonts/redde-admin.svg +12 -0
- data/app/assets/fonts/redde-admin.ttf +0 -0
- data/app/assets/fonts/redde-admin.woff +0 -0
- data/app/assets/images/redde/close-hover.svg +4 -0
- data/app/assets/images/redde/close.svg +6 -0
- data/app/assets/images/redde/enter.svg +4 -0
- data/app/assets/images/redde/eye.svg +5 -0
- data/app/assets/images/redde/eye_disactive.svg +5 -0
- data/app/assets/images/redde/main-menu/cog.svg +8 -0
- data/app/assets/images/redde/main-menu/cog_active.svg +8 -0
- data/app/assets/images/redde/main-menu/folder.svg +4 -0
- data/app/assets/images/redde/main-menu/folder_active.svg +4 -0
- data/app/assets/images/redde/main-menu/home.svg +4 -0
- data/app/assets/images/redde/main-menu/home_active.svg +4 -0
- data/app/assets/images/redde/main-menu/list.svg +4 -0
- data/app/assets/images/redde/main-menu/list_active.svg +4 -0
- data/app/assets/images/redde/next.svg +7 -0
- data/app/assets/images/redde/plus.svg +3 -0
- data/app/assets/images/redde/sel.svg +6 -0
- data/app/assets/images/redde/user.svg +12 -0
- data/app/assets/javascripts/redde/fileapi.js.coffee +17 -0
- data/app/assets/javascripts/redde/index.js.coffee +12 -0
- data/app/assets/javascripts/redde/redactor/index.coffee +8 -0
- data/{lib/generators/redde/layout/templates/assets/redactor/javascripts/jquery-migrate-1.2.1.js → app/assets/javascripts/redde/redactor/jquery-migrate-1.3.0.js} +215 -34
- data/{lib/generators/redde/layout/templates/assets/redactor/javascripts → app/assets/javascripts/redde}/redactor/redactor.js.erb +250 -250
- data/app/assets/javascripts/redde/sortTree/index.js.coffee +47 -0
- data/app/assets/javascripts/redde/sortable.coffee +47 -0
- data/{spec/dummy/app/assets/stylesheets/admin → app/assets/stylesheets/redde}/blocks/error-msg.sass +4 -2
- data/app/assets/stylesheets/redde/blocks/flash-msg.sass +22 -0
- data/app/assets/stylesheets/redde/blocks/list-v2.sass +96 -0
- data/app/assets/stylesheets/redde/blocks/photos-uploader.sass +21 -0
- data/app/assets/stylesheets/redde/blocks/photos.sass +56 -0
- data/app/assets/stylesheets/redde/blocks/redde-form.sass +55 -0
- data/app/assets/stylesheets/redde/blocks/sort-tree.sass +46 -0
- data/app/assets/stylesheets/redde/defaults/btn.sass +30 -0
- data/app/assets/stylesheets/redde/defaults/del.sass +23 -0
- data/app/assets/stylesheets/redde/defaults/index.sass +87 -0
- data/app/assets/stylesheets/redde/defaults/inp.sass +20 -0
- data/app/assets/stylesheets/redde/defaults/reset.sass +25 -0
- data/app/assets/stylesheets/redde/defaults/sbm.sass +32 -0
- data/app/assets/stylesheets/redde/defaults/sel.sass +29 -0
- data/app/assets/stylesheets/redde/fonts.sass +42 -0
- data/app/assets/stylesheets/redde/index.scss +5 -0
- data/app/assets/stylesheets/redde/layouts/header.sass +63 -0
- data/app/assets/stylesheets/redde/layouts/main-menu.sass +63 -0
- data/app/assets/stylesheets/redde/layouts/main.sass +48 -0
- data/app/assets/stylesheets/redde/layouts/page-header.sass +34 -0
- data/app/assets/stylesheets/redde/layouts/page-sidebar.sass +9 -0
- data/app/assets/stylesheets/redde/mixins.sass +10 -0
- data/{spec/dummy/app/assets/stylesheets → app/assets/stylesheets/redde}/redactor/index.scss +46 -49
- data/app/assets/stylesheets/redde-admin/blocks/list-v2.sass +96 -0
- data/app/assets/stylesheets/redde-admin/defaults/del.sass +23 -0
- data/app/controllers/admin/base_controller.rb +81 -0
- data/{lib/generators/redde/layout/templates/controllers → app/controllers/admin}/managers_controller.rb +10 -6
- data/app/controllers/admin/redde_photos_controller.rb +31 -0
- data/app/controllers/admin/system_commands_controller.rb +11 -0
- data/app/form_builders/redde_form_builder.rb +106 -0
- data/app/helpers/redde/admin_helper.rb +33 -0
- data/app/helpers/redde/form_helper.rb +59 -0
- data/app/helpers/redde/index_helper.rb +61 -0
- data/{lib/redde/concerns/layout.rb → app/models/concerns/redde/layouts.rb} +1 -1
- data/app/models/concerns/redde/photoable.rb +5 -0
- data/{lib/redde/concerns → app/models/concerns/redde}/sluggable.rb +6 -3
- data/app/models/concerns/redde/tree_sortable.rb +40 -0
- data/{lib/redde/concerns → app/models/concerns/redde}/with_photo.rb +5 -5
- data/app/models/redde/photo.rb +16 -0
- data/app/models/redde/system_command.rb +43 -0
- data/{lib → app/models}/redde/url_generator.rb +7 -3
- data/{lib/generators/redde/photo/templates/uploader.rb → app/uploaders/photo_uploader.rb} +4 -4
- data/app/views/admin/base/_tree_item.html.haml +10 -0
- data/app/views/admin/base/edit.html.haml +21 -0
- data/app/views/admin/base/index.html.haml +68 -0
- data/app/views/admin/base/tree.html.haml +14 -0
- data/app/views/admin/managers/edit.html.haml +11 -0
- data/app/views/admin/managers/index.html.haml +17 -0
- data/{lib/generators/redde/layout/templates/base → app/views/admin/redde}/_header.html.haml +5 -6
- data/app/views/admin/redde/_main_menu.html.haml +12 -0
- data/app/views/admin/redde/_page_header.html.haml +3 -0
- data/app/views/admin/redde/_sidebar.html.haml +16 -0
- data/{lib/generators/redde/layout/templates/base → app/views/admin/redde}/_validate.haml +2 -2
- data/app/views/admin/redde_photos/_photo.haml +11 -0
- data/app/views/admin/redde_photos/_photos.haml +28 -0
- data/app/views/admin/system_commands/index.html.haml +25 -0
- data/app/views/kaminari/redde/_first_page.html.haml +9 -0
- data/app/views/kaminari/redde/_gap.html.haml +8 -0
- data/app/views/kaminari/redde/_last_page.html.haml +9 -0
- data/app/views/kaminari/redde/_next_page.html.haml +9 -0
- data/app/views/kaminari/redde/_page.html.haml +10 -0
- data/app/views/kaminari/redde/_paginator.html.haml +18 -0
- data/app/views/kaminari/redde/_prev_page.html.haml +9 -0
- data/{lib/generators/redde/layout/templates → app/views}/layouts/admin.html.haml +28 -29
- data/{lib/generators/redde/layout/templates → app/views}/layouts/login.html.haml +32 -32
- data/bin/rails +12 -0
- data/config/locales/paginate.ru.yml +9 -0
- data/config/routes.rb +8 -0
- data/db/migrate/20160121152706_create_redde_photos.rb +16 -0
- data/lib/generators/redde/layout/layout_generator.rb +3 -26
- data/lib/generators/redde/layout/templates/assets/javascripts/admin.js +1 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin.css +15 -0
- data/lib/generators/redde/scaffold/scaffold_generator.rb +45 -8
- data/lib/generators/redde/scaffold/templates/controllers/controller.rb +2 -45
- data/lib/generators/redde/scaffold/templates/edit.html.haml +4 -9
- data/lib/generators/redde/scaffold/templates/index.html.haml +2 -6
- data/lib/generators/redde/scaffold/templates/ru.yml +14 -0
- data/lib/redde/engine.rb +16 -0
- data/lib/redde/version.rb +1 -1
- data/lib/redde.rb +20 -4
- data/lib/tasks/redde_tasks.rake +4 -0
- data/redde.gemspec +44 -22
- metadata +482 -455
- data/Guardfile +0 -24
- data/LICIENSE.md +0 -21
- data/lib/generators/redde/layout/templates/assets/images/admin/del.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/folder_.png +0 -0
- data/lib/generators/redde/layout/templates/assets/javascripts/admin/index.js +0 -20
- data/lib/generators/redde/layout/templates/assets/redactor/javascripts/redactor/index.coffee +0 -4
- data/lib/generators/redde/layout/templates/assets/redactor/stylesheets/redactor/index.scss +0 -369
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/blocks/error-msg.sass +0 -47
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/blocks/notice.scss +0 -39
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/blocks/photos.scss +0 -31
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/blocks/sortable.sass +0 -44
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/custom/index.scss +0 -1
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/defaults/index.scss +0 -131
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/defaults/input.sass +0 -35
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/defaults/reset.sass +0 -33
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/defaults/table.scss +0 -24
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/index.scss +0 -6
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/layouts/header.sass +0 -50
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/layouts/launchbar.sass +0 -23
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/layouts/main.sass +0 -38
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/layouts/page-header.sass +0 -22
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/layouts/page-sidebar.sass +0 -24
- data/lib/generators/redde/layout/templates/base/_launchbar.html.haml +0 -11
- data/lib/generators/redde/layout/templates/base/_sidebar.html.haml +0 -14
- data/lib/generators/redde/layout/templates/controllers/base_controller.rb +0 -28
- data/lib/generators/redde/layout/templates/form_builders/redde_form_builder.rb +0 -63
- data/lib/generators/redde/layout/templates/helpers/admin_helper.rb +0 -94
- data/lib/generators/redde/photo/photo_generator.rb +0 -35
- data/lib/generators/redde/photo/templates/controller.rb +0 -20
- data/lib/generators/redde/photo/templates/create_photos.rb +0 -16
- data/lib/generators/redde/photo/templates/photo.rb +0 -4
- data/lib/generators/redde/photo/templates/photos/_photo.haml +0 -5
- data/lib/generators/redde/photo/templates/photos/_photos.haml +0 -19
- data/lib/generators/redde/photo/templates/photos/create.js.erb +0 -1
- data/lib/redde/concerns/photoable.rb +0 -17
- data/spec/dummy/.rspec +0 -1
- data/spec/dummy/README.rdoc +0 -28
- data/spec/dummy/Rakefile +0 -6
- data/spec/dummy/app/assets/images/admin/addphoto.png +0 -0
- data/spec/dummy/app/assets/images/admin/ajaxloader2.gif +0 -0
- data/spec/dummy/app/assets/images/admin/arrow_down.png +0 -0
- data/spec/dummy/app/assets/images/admin/arrow_enter.png +0 -0
- data/spec/dummy/app/assets/images/admin/arrow_right.png +0 -0
- data/spec/dummy/app/assets/images/admin/coins.png +0 -0
- data/spec/dummy/app/assets/images/admin/confirm.png +0 -0
- data/spec/dummy/app/assets/images/admin/del.png +0 -0
- data/spec/dummy/app/assets/images/admin/delete.png +0 -0
- data/spec/dummy/app/assets/images/admin/email.png +0 -0
- data/spec/dummy/app/assets/images/admin/error-label-triangle.png +0 -0
- data/spec/dummy/app/assets/images/admin/error.png +0 -0
- data/spec/dummy/app/assets/images/admin/favicon.png +0 -0
- data/spec/dummy/app/assets/images/admin/fio.png +0 -0
- data/spec/dummy/app/assets/images/admin/folder.png +0 -0
- data/spec/dummy/app/assets/images/admin/folder_.png +0 -0
- data/spec/dummy/app/assets/images/admin/icon_eye.gif +0 -0
- data/spec/dummy/app/assets/images/admin/lightbox/css/jquery.lightbox-0.5.css +0 -101
- data/spec/dummy/app/assets/images/admin/lightbox/images/lightbox-blank.gif +0 -0
- data/spec/dummy/app/assets/images/admin/lightbox/images/lightbox-btn-close.gif +0 -0
- data/spec/dummy/app/assets/images/admin/lightbox/images/lightbox-btn-next.gif +0 -0
- data/spec/dummy/app/assets/images/admin/lightbox/images/lightbox-btn-prev.gif +0 -0
- data/spec/dummy/app/assets/images/admin/lightbox/images/lightbox-ico-loading.gif +0 -0
- data/spec/dummy/app/assets/images/admin/lightbox/js/jquery.js +0 -32
- data/spec/dummy/app/assets/images/admin/lightbox/js/jquery.lightbox-0.5.js +0 -477
- data/spec/dummy/app/assets/images/admin/lightbox/js/jquery.lightbox-0.5.min.js +0 -42
- data/spec/dummy/app/assets/images/admin/lightbox/js/jquery.lightbox-0.5.pack.js +0 -14
- data/spec/dummy/app/assets/images/admin/logo.png +0 -0
- data/spec/dummy/app/assets/images/admin/logo_reddeshop.png +0 -0
- data/spec/dummy/app/assets/images/admin/move_handler.png +0 -0
- data/spec/dummy/app/assets/images/admin/phone.png +0 -0
- data/spec/dummy/app/assets/images/admin/photo_ico.png +0 -0
- data/spec/dummy/app/assets/images/admin/print.png +0 -0
- data/spec/dummy/app/assets/images/admin/refresh.png +0 -0
- data/spec/dummy/app/assets/images/admin/submit.png +0 -0
- data/spec/dummy/app/assets/images/admin/submit_hover.png +0 -0
- data/spec/dummy/app/assets/images/admin/view.png +0 -0
- data/spec/dummy/app/assets/images/admin/view_mk.png +0 -0
- data/spec/dummy/app/assets/images/redactor/icons.png +0 -0
- data/spec/dummy/app/assets/images/redactor/plugins/file.html +0 -3
- data/spec/dummy/app/assets/images/redactor/plugins/image.html +0 -39
- data/spec/dummy/app/assets/images/redactor/plugins/image_edit.html +0 -35
- data/spec/dummy/app/assets/images/redactor/plugins/link.html +0 -74
- data/spec/dummy/app/assets/images/redactor/plugins/table.html +0 -25
- data/spec/dummy/app/assets/images/redactor/plugins/video.html +0 -15
- data/spec/dummy/app/assets/javascripts/admin/jquery.mjs.nestedSortable.js +0 -429
- data/spec/dummy/app/assets/javascripts/admin.js +0 -21
- data/spec/dummy/app/assets/javascripts/application.js +0 -14
- data/spec/dummy/app/assets/javascripts/jquery-migrate-1.2.1.js +0 -521
- data/spec/dummy/app/assets/javascripts/redactor/langs/en.js +0 -76
- data/spec/dummy/app/assets/javascripts/redactor/langs/ru.js +0 -75
- data/spec/dummy/app/assets/javascripts/redactor/redactor.js.erb +0 -2248
- data/spec/dummy/app/assets/javascripts/redactor/toolbars/default.js +0 -219
- data/spec/dummy/app/assets/stylesheets/admin/blocks/list.scss +0 -22
- data/spec/dummy/app/assets/stylesheets/admin/blocks/notice.scss +0 -39
- data/spec/dummy/app/assets/stylesheets/admin/blocks/orders.scss +0 -22
- data/spec/dummy/app/assets/stylesheets/admin/blocks/paginate.sass +0 -28
- data/spec/dummy/app/assets/stylesheets/admin/blocks/pagination.scss +0 -28
- data/spec/dummy/app/assets/stylesheets/admin/blocks/partners.scss +0 -15
- data/spec/dummy/app/assets/stylesheets/admin/blocks/phead-tabs.sass +0 -27
- data/spec/dummy/app/assets/stylesheets/admin/blocks/photos.scss +0 -31
- data/spec/dummy/app/assets/stylesheets/admin/blocks/sortable.sass +0 -44
- data/spec/dummy/app/assets/stylesheets/admin/custom/index.scss +0 -1
- data/spec/dummy/app/assets/stylesheets/admin/defaults/index.scss +0 -131
- data/spec/dummy/app/assets/stylesheets/admin/defaults/input.sass +0 -35
- data/spec/dummy/app/assets/stylesheets/admin/defaults/reset.sass +0 -33
- data/spec/dummy/app/assets/stylesheets/admin/defaults/table.scss +0 -24
- data/spec/dummy/app/assets/stylesheets/admin/index.scss +0 -6
- data/spec/dummy/app/assets/stylesheets/admin/layouts/header.sass +0 -50
- data/spec/dummy/app/assets/stylesheets/admin/layouts/launchbar.sass +0 -23
- data/spec/dummy/app/assets/stylesheets/admin/layouts/login.sass +0 -25
- data/spec/dummy/app/assets/stylesheets/admin/layouts/main.sass +0 -38
- data/spec/dummy/app/assets/stylesheets/admin/layouts/page-header.sass +0 -22
- data/spec/dummy/app/assets/stylesheets/admin/layouts/page-sidebar.sass +0 -24
- data/spec/dummy/app/assets/stylesheets/admin/layouts/sidebar.sass +0 -30
- data/spec/dummy/app/assets/stylesheets/admin/shop/_filter.scss +0 -16
- data/spec/dummy/app/assets/stylesheets/admin/shop/_order-sh.scss +0 -59
- data/spec/dummy/app/assets/stylesheets/admin/shop/_pe.scss +0 -43
- data/spec/dummy/app/assets/stylesheets/redactor/wym.css +0 -136
- data/spec/dummy/app/controllers/admin/base_controller.rb +0 -28
- data/spec/dummy/app/controllers/admin/managers_controller.rb +0 -36
- data/spec/dummy/app/controllers/application_controller.rb +0 -6
- data/spec/dummy/app/controllers/articles_controller.rb +0 -8
- data/spec/dummy/app/controllers/managers/registrations_controller.rb +0 -21
- data/spec/dummy/app/helpers/admin_helper.rb +0 -94
- data/spec/dummy/app/models/article.rb +0 -4
- data/spec/dummy/app/models/article_category.rb +0 -2
- data/spec/dummy/app/models/photo.rb +0 -3
- data/spec/dummy/app/views/admin/base/_header.html.haml +0 -12
- data/spec/dummy/app/views/admin/base/_launchbar.html.haml +0 -11
- data/spec/dummy/app/views/admin/base/_sidebar.html.haml +0 -14
- data/spec/dummy/app/views/admin/base/_validate.haml +0 -8
- data/spec/dummy/app/views/admin/base/welcome.haml +0 -2
- data/spec/dummy/app/views/admin/photos/_photo.haml +0 -5
- data/spec/dummy/app/views/admin/photos/_photos.haml +0 -19
- data/spec/dummy/app/views/admin/photos/create.js.erb +0 -1
- data/spec/dummy/app/views/admin/photos/destroy.js.erb +0 -1
- data/spec/dummy/app/views/articles/show.html.haml +0 -2
- data/spec/dummy/app/views/layouts/admin.html.haml +0 -29
- data/spec/dummy/app/views/layouts/application.html.erb +0 -15
- data/spec/dummy/app/views/layouts/login.html.haml +0 -32
- data/spec/dummy/bin/bundle +0 -3
- data/spec/dummy/bin/rails +0 -4
- data/spec/dummy/bin/rake +0 -4
- data/spec/dummy/config/application.rb +0 -33
- data/spec/dummy/config/boot.rb +0 -5
- data/spec/dummy/config/database.yml +0 -25
- data/spec/dummy/config/environment.rb +0 -5
- data/spec/dummy/config/environments/development.rb +0 -29
- data/spec/dummy/config/environments/production.rb +0 -80
- data/spec/dummy/config/environments/test.rb +0 -36
- data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -4
- data/spec/dummy/config/initializers/inflections.rb +0 -16
- data/spec/dummy/config/initializers/mime_types.rb +0 -5
- data/spec/dummy/config/initializers/secret_token.rb +0 -12
- data/spec/dummy/config/initializers/session_store.rb +0 -3
- data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/spec/dummy/config/locales/en.yml +0 -36
- data/spec/dummy/config/routes.rb +0 -4
- data/spec/dummy/config.ru +0 -4
- data/spec/dummy/db/migrate/20130908123351_create_articles.rb +0 -9
- data/spec/dummy/db/migrate/20140128152208_create_article_categories.rb +0 -11
- data/spec/dummy/db/migrate/20140607122532_create_photos.rb +0 -16
- data/spec/dummy/db/schema.rb +0 -98
- data/spec/dummy/public/404.html +0 -58
- data/spec/dummy/public/422.html +0 -58
- data/spec/dummy/public/500.html +0 -57
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/generators/layout_generator_spec.rb +0 -42
- data/spec/generators/photo_generator_spec.rb +0 -32
- data/spec/generators/scaffold_generator_spec.rb +0 -58
- data/spec/models/sluggable_spec.rb +0 -42
- data/spec/models/url_generator_spec.rb +0 -18
- data/spec/models/with_photo_spec.rb +0 -25
- data/spec/spec_helper.rb +0 -52
- /data/{lib/generators/redde/layout/templates/assets/redactor → app/assets}/images/.keep +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/addphoto.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/ajaxloader2.gif +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/arrow_down.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/arrow_enter.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/arrow_right.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/coins.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/confirm.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/delete.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/email.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/error.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/favicon.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/fio.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/icon_eye.gif +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/css/jquery.lightbox-0.5.css +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/images/lightbox-blank.gif +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/images/lightbox-btn-close.gif +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/images/lightbox-btn-next.gif +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/images/lightbox-btn-prev.gif +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/images/lightbox-ico-loading.gif +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/js/jquery.js +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/js/jquery.lightbox-0.5.js +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/js/jquery.lightbox-0.5.min.js +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/js/jquery.lightbox-0.5.pack.js +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/logo_reddeshop.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/phone.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/photo_ico.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/print.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/refresh.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/submit.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/submit_hover.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/view.png +0 -0
- /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/view_mk.png +0 -0
- /data/{lib/generators/redde/layout/templates/assets/images/admin → app/assets/images/redde}/error-label-triangle.png +0 -0
- /data/{lib/generators/redde/layout/templates/assets/images/admin → app/assets/images/redde}/folder.png +0 -0
- /data/{lib/generators/redde/layout/templates/assets/images/admin → app/assets/images/redde}/logo.png +0 -0
- /data/{lib/generators/redde/layout/templates/assets/images/admin/move_handler.png → app/assets/images/redde/move-handler.png} +0 -0
- /data/{lib/generators/redde/layout/templates/assets/redactor/images → app/assets/images/redde}/redactor/icons.png +0 -0
- /data/{lib/generators/redde/layout/templates/assets/redactor/images → app/assets/images/redde}/redactor/plugins/file.html +0 -0
- /data/{lib/generators/redde/layout/templates/assets/redactor/images → app/assets/images/redde}/redactor/plugins/image.html +0 -0
- /data/{lib/generators/redde/layout/templates/assets/redactor/images → app/assets/images/redde}/redactor/plugins/image_edit.html +0 -0
- /data/{lib/generators/redde/layout/templates/assets/redactor/images → app/assets/images/redde}/redactor/plugins/link.html +0 -0
- /data/{lib/generators/redde/layout/templates/assets/redactor/images → app/assets/images/redde}/redactor/plugins/table.html +0 -0
- /data/{lib/generators/redde/layout/templates/assets/redactor/images → app/assets/images/redde}/redactor/plugins/video.html +0 -0
- /data/{lib/generators/redde/layout/templates/assets/redactor/javascripts → app/assets/javascripts/redde}/redactor/langs/en.js +0 -0
- /data/{lib/generators/redde/layout/templates/assets/redactor/javascripts → app/assets/javascripts/redde}/redactor/langs/ru.js +0 -0
- /data/{lib/generators/redde/layout/templates/assets/redactor/javascripts → app/assets/javascripts/redde}/redactor/toolbars/default.js +0 -0
- /data/{lib/generators/redde/layout/templates/assets/javascripts/admin → app/assets/javascripts/redde/sortTree}/jquery.mjs.nestedSortable.js +0 -0
- /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/blocks/list.scss +0 -0
- /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/blocks/orders.scss +0 -0
- /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/blocks/paginate.sass +0 -0
- /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/blocks/pagination.scss +0 -0
- /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/blocks/partners.scss +0 -0
- /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/blocks/phead-tabs.sass +0 -0
- /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/layouts/login.sass +0 -0
- /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/layouts/sidebar.sass +0 -0
- /data/{lib/generators/redde/layout/templates/assets/redactor/stylesheets → app/assets/stylesheets/redde}/redactor/wym.css +0 -0
- /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/shop/_filter.scss +0 -0
- /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/shop/_order-sh.scss +0 -0
- /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/shop/_pe.scss +0 -0
- /data/{spec/dummy/app/assets/images → app/controllers}/.keep +0 -0
- /data/{lib/generators/redde/layout/templates → app}/controllers/managers/registrations_controller.rb +0 -0
- /data/{spec/dummy/app/models → app/helpers}/.keep +0 -0
- /data/{spec/dummy/lib/assets → app/mailers}/.keep +0 -0
- /data/{spec/dummy/log → app/models}/.keep +0 -0
- /data/{spec/dummy/app/assets/stylesheets/application.css.scss → app/views/.keep} +0 -0
- /data/{lib/generators/redde/layout/templates → app/views/admin}/base/welcome.haml +0 -0
- /data/{lib/generators/redde/photo/templates/photos → app/views/admin/redde_photos}/destroy.js.erb +0 -0
@@ -0,0 +1,81 @@
|
|
1
|
+
class Admin::BaseController < ActionController::Base
|
2
|
+
layout 'admin'
|
3
|
+
before_action :authenticate_manager!
|
4
|
+
include Redde::AdminHelper
|
5
|
+
include Redde::IndexHelper
|
6
|
+
|
7
|
+
def welcome
|
8
|
+
end
|
9
|
+
|
10
|
+
def index
|
11
|
+
instance_variable_set("@#{collection}", scope)
|
12
|
+
return render 'tree' if column_names.include?('ancestry')
|
13
|
+
end
|
14
|
+
|
15
|
+
def new
|
16
|
+
instance_variable_set("@#{record}", model_name.new)
|
17
|
+
render 'edit'
|
18
|
+
end
|
19
|
+
|
20
|
+
def create
|
21
|
+
instance_variable_set("@#{record}", model_name.new(params[record.to_sym].permit!))
|
22
|
+
redirect_or_edit(instance_variable_get("@#{record}"), instance_variable_get("@#{record}").save)
|
23
|
+
end
|
24
|
+
|
25
|
+
def edit
|
26
|
+
instance_variable_set("@#{record}", model_name.find(params[:id]))
|
27
|
+
end
|
28
|
+
|
29
|
+
def update
|
30
|
+
instance_variable_set("@#{record}", model_name.find(params[:id]))
|
31
|
+
redirect_or_edit(instance_variable_get("@#{record}"), instance_variable_get("@#{record}").update(params[record.to_sym].permit!))
|
32
|
+
end
|
33
|
+
|
34
|
+
def destroy
|
35
|
+
instance_variable_set("@#{record}", model_name.find(params[:id]))
|
36
|
+
instance_variable_get("@#{record}").destroy
|
37
|
+
redirect_to send("admin_#{collection}_path"), notice: "#{model_name.model_name.human} удалена."
|
38
|
+
end
|
39
|
+
|
40
|
+
def sort
|
41
|
+
if column_names.include?('ancestry')
|
42
|
+
model_name.sort(params[:list])
|
43
|
+
else
|
44
|
+
params[:pos].each_with_index do |id, idx|
|
45
|
+
p = model_name.find(id)
|
46
|
+
p.update(position: idx)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
render nothing: true
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def scope
|
55
|
+
return model_name.roots.order(:position) if column_names.include?('ancestry')
|
56
|
+
scope = model_name
|
57
|
+
scope = scope.order('position') if column_names.include?('position')
|
58
|
+
scope.all.page(params[:page])
|
59
|
+
end
|
60
|
+
|
61
|
+
def redirect_or_edit(obj, saved, notice = nil, custom_url = nil)
|
62
|
+
return render 'edit' unless saved
|
63
|
+
yield if block_given?
|
64
|
+
redirect_to url_for_obj(obj, custom_url), notice: notice_for(obj, notice)
|
65
|
+
end
|
66
|
+
|
67
|
+
def notice_for(obj, notice = nil)
|
68
|
+
notice ||= default_notice
|
69
|
+
"#{obj.class.model_name.human} #{notice}."
|
70
|
+
end
|
71
|
+
|
72
|
+
def default_notice
|
73
|
+
'сохранена'
|
74
|
+
end
|
75
|
+
|
76
|
+
def url_for_obj(obj, custom_url = nil)
|
77
|
+
return custom_url if custom_url.present?
|
78
|
+
return [:edit, :admin, obj] if params[:commit] == 'Применить'
|
79
|
+
[:admin, obj.class.model_name.plural.to_sym]
|
80
|
+
end
|
81
|
+
end
|
@@ -1,35 +1,39 @@
|
|
1
1
|
class Admin::ManagersController < Admin::BaseController
|
2
2
|
def index
|
3
|
-
@managers =
|
3
|
+
@managers = scope.all
|
4
4
|
end
|
5
5
|
|
6
6
|
def new
|
7
|
-
@manager =
|
7
|
+
@manager = scope.new
|
8
8
|
render 'edit'
|
9
9
|
end
|
10
10
|
|
11
11
|
def create
|
12
|
-
@manager =
|
12
|
+
@manager = scope.new(manager_params)
|
13
13
|
redirect_or_edit(@manager, @manager.save)
|
14
14
|
end
|
15
15
|
|
16
16
|
def edit
|
17
|
-
@manager =
|
17
|
+
@manager = scope.find(params[:id])
|
18
18
|
end
|
19
19
|
|
20
20
|
def update
|
21
|
-
@manager =
|
21
|
+
@manager = scope.find(params[:id])
|
22
22
|
redirect_or_edit(@manager, @manager.update(manager_params))
|
23
23
|
end
|
24
24
|
|
25
25
|
def destroy
|
26
|
-
@manager =
|
26
|
+
@manager = scope.find(params[:id])
|
27
27
|
@manager.destroy if current_manager.id != @manager.id
|
28
28
|
redirect_to [:admin, :managers], alert: 'Администратор удален'
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
32
32
|
|
33
|
+
def scope
|
34
|
+
Manager
|
35
|
+
end
|
36
|
+
|
33
37
|
def manager_params
|
34
38
|
params[:manager].permit!
|
35
39
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class Admin::ReddePhotosController < ActionController::Base
|
2
|
+
def sort
|
3
|
+
params[:photo].each_with_index do |id, idx|
|
4
|
+
p = Redde::Photo.find(id)
|
5
|
+
p.update(position: idx)
|
6
|
+
end
|
7
|
+
render nothing: true
|
8
|
+
end
|
9
|
+
|
10
|
+
def create
|
11
|
+
parent = photo_params[:imageable_type].constantize.find(photo_params[:imageable_id])
|
12
|
+
@photo = parent.photos.build(photo_params)
|
13
|
+
if @photo.save
|
14
|
+
render(partial: 'photo', object: @photo)
|
15
|
+
else
|
16
|
+
render nothing: true, status: 422
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def destroy
|
21
|
+
@photo = Redde::Photo.find(params[:id])
|
22
|
+
@photo.destroy
|
23
|
+
render 'admin/redde_photos/destroy'
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def photo_params
|
29
|
+
params.require(:redde_photo).permit!
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class Admin::SystemCommandsController < Admin::BaseController
|
2
|
+
def index
|
3
|
+
end
|
4
|
+
|
5
|
+
def update
|
6
|
+
return redirect_to [:admin, :system_commands], alert: 'Необходимо указать команду' unless params[:id].present?
|
7
|
+
return redirect_to [:admin, :system_commands], notice: 'Недопустимый тип команды' unless Redde::SystemCommand::ALLOWED_ACTIONS.include?(params[:id].to_s)
|
8
|
+
Redde::SystemCommand.execute(params[:id])
|
9
|
+
redirect_to [:admin, :system_commands], notice: 'Команда отправлена'
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
class ReddeFormBuilder < ActionView::Helpers::FormBuilder
|
2
|
+
delegate :render, :content_tag, :tag, :link_to, :concat, :capture, to: :@template
|
3
|
+
# delegate :debug, :render, :content_tag, :tag, :link_to, :concat, :capture, to: :@template
|
4
|
+
|
5
|
+
def redde_field(name, *args)
|
6
|
+
label(name)
|
7
|
+
case object.class.columns.detect { |column| column.name == name.to_s }.type
|
8
|
+
when :text then redde_text_area(name, *args)
|
9
|
+
when :boolean then redde_check_box(name, *args)
|
10
|
+
when :time then redde_date_time(name, *args)
|
11
|
+
else
|
12
|
+
redde_text_field(name, *args)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def redde_select(name, choices, opts = {}, *args)
|
17
|
+
options = args.extract_options!
|
18
|
+
options[:class] = assign_class(['sel', 'redde-form__sel'], options[:class])
|
19
|
+
wrap(name, select(name, choices, opts, options.except(:wrap, :cell)), options)
|
20
|
+
end
|
21
|
+
|
22
|
+
def redde_date_time(name, *args)
|
23
|
+
options = args.extract_options!
|
24
|
+
content_tag :tr, class: options[:wrapper_class] do
|
25
|
+
content_tag(:td, smart_label(name), class: 'redde-form__cell _lbl') + content_tag(:td, datetime_select(name, options))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def redde_check_box(name, *args)
|
30
|
+
options = args.extract_options!
|
31
|
+
content_tag :tr, class: options[:wrapper_class] do
|
32
|
+
concat tag :td
|
33
|
+
concat content_tag :td, check_box(name, options) + " " + smart_label(name), class: 'redde-form__cell'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def redde_text_field(name, *args)
|
38
|
+
options = args.extract_options!
|
39
|
+
options[:class] = assign_class(['inp', 'redde-form__inp'], options[:class])
|
40
|
+
wrap(name, text_field(name, options), options)
|
41
|
+
end
|
42
|
+
|
43
|
+
def redde_text_area(name, *args)
|
44
|
+
options = args.extract_options!
|
45
|
+
content_tag :tr, class: options[:wrapper_class] do
|
46
|
+
content_tag :td, colspan: 2 do
|
47
|
+
smart_label(name) + tag(:br) + text_area(name, options)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def redde_submit(text, opts)
|
53
|
+
css_class = ['sbm']
|
54
|
+
css_class << opts[:class] if opts[:class].present?
|
55
|
+
css_class << '_save' if text == 'Сохранить'
|
56
|
+
button(text, class: css_class, value: text, name: :commit)
|
57
|
+
end
|
58
|
+
|
59
|
+
def redde_submits *args, &block
|
60
|
+
content_tag :div, class: 'redde-form__actions' do
|
61
|
+
concat redde_submit('Сохранить', class: 'redde-form__sbm')
|
62
|
+
concat redde_submit('Применить', class: 'redde-form__sbm')
|
63
|
+
concat capture(&block) if block_given?
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def error_messages(attrs = {})
|
68
|
+
if object.errors.full_messages.any?
|
69
|
+
render 'admin/redde/validate', { f: self, attrs: attrs }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def wrap(name = nil, *args, &block)
|
74
|
+
options = args.extract_options!
|
75
|
+
content = block_given? ? capture(&block) : args[0]
|
76
|
+
content_tag( :tr, content_tag( :td, smart_label(name), class: ['redde-form__cell', '_label', options[:cell]].flatten.compact ) + content_tag( :td, content, class: ['redde-form__cell', options[:cell]] ), class: ['redde-form__row', ('_error' if object.errors[name].any?), options[:wrap]].flatten.compact )
|
77
|
+
end
|
78
|
+
|
79
|
+
def fieldset(name, *args, &block)
|
80
|
+
options = args.extract_options!
|
81
|
+
content_tag(:tbody, class: options[:class]) do
|
82
|
+
concat content_tag(:tr, content_tag(:th, name, colspan: 2, class: 'redde-form__thead'))
|
83
|
+
concat capture(&block)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
private
|
88
|
+
|
89
|
+
def assign_class(base, added)
|
90
|
+
base = [base] if base.is_a? String
|
91
|
+
if added.present?
|
92
|
+
base << added if added.is_a? String
|
93
|
+
base += added if added.is_a? Array
|
94
|
+
end
|
95
|
+
base
|
96
|
+
end
|
97
|
+
|
98
|
+
def smart_label(name)
|
99
|
+
required = object.class.validators_on(name).any? { |v| v.is_a? ActiveModel::Validations::PresenceValidator }
|
100
|
+
label(name, nil, class: ["redde-form__label", ("_required" if required)])
|
101
|
+
end
|
102
|
+
|
103
|
+
def objectify_options(options)
|
104
|
+
super.except(:wrap, :cell)
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
module Redde::AdminHelper
|
3
|
+
def command_link(name, action, confirm = nil)
|
4
|
+
options = { method: :put }
|
5
|
+
options[:data] = { confirm: confirm } if confirm.present?
|
6
|
+
link_to name, admin_system_command_path(action), options
|
7
|
+
end
|
8
|
+
|
9
|
+
def sidebar_link(title, path = [], additional_names = [])
|
10
|
+
additional_names = [additional_names] unless additional_names.is_a?(Array)
|
11
|
+
active_names = additional_names + [path.try(:last) || '']
|
12
|
+
active_names.map!(&:to_s)
|
13
|
+
classes = ['sidebar__link']
|
14
|
+
classes << '_active' if active_names.include?(controller_name)
|
15
|
+
link_to title, path, class: classes
|
16
|
+
end
|
17
|
+
|
18
|
+
def photoable(parent)
|
19
|
+
render('admin/redde_photos/photos', parent: parent)
|
20
|
+
end
|
21
|
+
|
22
|
+
def tsingular(model)
|
23
|
+
model.model_name.human
|
24
|
+
end
|
25
|
+
|
26
|
+
def taccusative(model_name)
|
27
|
+
t("activerecord.models.#{model_name}.acc")
|
28
|
+
end
|
29
|
+
|
30
|
+
def tplural(model)
|
31
|
+
model.model_name.human(count: 'other')
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Redde::FormHelper
|
2
|
+
# Override the default ActiveRecordHelper behaviour of wrapping the input.
|
3
|
+
# This gets taken care of semantically by adding an error class to the wrapper tag
|
4
|
+
# containing the input.
|
5
|
+
#
|
6
|
+
FIELD_ERROR_PROC = proc do |html_tag, instance_tag|
|
7
|
+
html_tag
|
8
|
+
end
|
9
|
+
|
10
|
+
def redde_form_for(object, options = {}, &block)
|
11
|
+
options = make_options(options)
|
12
|
+
options[:builder] ||= ReddeFormBuilder
|
13
|
+
|
14
|
+
with_clean_form_field_error_proc do
|
15
|
+
form_for(object, options) do |f|
|
16
|
+
concat f.error_messages
|
17
|
+
concat content_tag(:table, capture(f, &block), class: 'redde-form__tbl')
|
18
|
+
concat f.redde_submits
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def redde_fields_for(record_name, record_object = nil, options = {}, &block)
|
25
|
+
options, record_object = record_object, nil if record_object.is_a?(Hash) && record_object.extractable_options?
|
26
|
+
options[:builder] ||= ReddeFormBuilder
|
27
|
+
|
28
|
+
with_clean_form_field_error_proc do
|
29
|
+
fields_for(record_name, record_object, options, &block)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def make_options(options)
|
36
|
+
return options.merge(html: { class: 'redde-form' }) unless options.key?(:html)
|
37
|
+
unless options[:html].key?(:class)
|
38
|
+
options[:html][:class] = 'redde-form'
|
39
|
+
return options
|
40
|
+
end
|
41
|
+
if options[:html][:class].is_a? String
|
42
|
+
options[:html][:class] += ' redde-form'
|
43
|
+
elsif options[:html][:class].is_a? Array
|
44
|
+
options[:html][:class] << 'redde-form'
|
45
|
+
end
|
46
|
+
options
|
47
|
+
end
|
48
|
+
|
49
|
+
def with_clean_form_field_error_proc
|
50
|
+
default_field_error_proc = ::ActionView::Base.field_error_proc
|
51
|
+
begin
|
52
|
+
::ActionView::Base.field_error_proc = FIELD_ERROR_PROC
|
53
|
+
yield
|
54
|
+
ensure
|
55
|
+
::ActionView::Base.field_error_proc = default_field_error_proc
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
module Redde::IndexHelper
|
3
|
+
IGNORED_COLUMNS = %w(ancestry position created_at updated_at id)
|
4
|
+
def title_for(item)
|
5
|
+
return item.title if column_names.include?('title')
|
6
|
+
return item.name if column_names.include('name')
|
7
|
+
model_name.columns.select { |i| i.type == :string }.first
|
8
|
+
end
|
9
|
+
|
10
|
+
def collection
|
11
|
+
controller_name
|
12
|
+
end
|
13
|
+
|
14
|
+
def record
|
15
|
+
controller_name.singularize
|
16
|
+
end
|
17
|
+
|
18
|
+
def model_name
|
19
|
+
record.camelize.constantize
|
20
|
+
end
|
21
|
+
|
22
|
+
def column_names
|
23
|
+
model_name
|
24
|
+
.column_names
|
25
|
+
.reject { |c| excluded_column_names.include?(c) }
|
26
|
+
.sort { |a, b| sort_priority(a) <=> sort_priority(b) }
|
27
|
+
end
|
28
|
+
|
29
|
+
def form_column_names
|
30
|
+
column_names.select { |i| !IGNORED_COLUMNS.include?(i) }
|
31
|
+
end
|
32
|
+
|
33
|
+
def sort_priority(column_name)
|
34
|
+
case column_name
|
35
|
+
when 'position' then 1
|
36
|
+
when 'visible' then 2
|
37
|
+
when 'name' then 3
|
38
|
+
when 'title' then 3
|
39
|
+
else 5
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def excluded_column_names
|
44
|
+
%w(id created_at updated_at)
|
45
|
+
end
|
46
|
+
|
47
|
+
def list_table_options
|
48
|
+
{}.tap do |options|
|
49
|
+
if column_names.include? 'position'
|
50
|
+
options['class'] = 'sortable'
|
51
|
+
options['data-sortable'] = true
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def sort_table_options(item)
|
57
|
+
{}.tap do |options|
|
58
|
+
options[:id] = "pos_#{item.id}" if column_names.include?('position')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -1,10 +1,13 @@
|
|
1
|
-
require 'redde/url_generator'
|
2
|
-
|
3
1
|
module Redde::Sluggable
|
4
2
|
extend ActiveSupport::Concern
|
5
3
|
|
6
4
|
included do
|
7
|
-
validates :slug,
|
5
|
+
validates :slug,
|
6
|
+
format: {
|
7
|
+
with: /\A[A-z0-9_-]*\z/i,
|
8
|
+
message: 'имеет неверный формат, разрешены английские символы, знак подчеркивания "_" и дефис "-"'
|
9
|
+
},
|
10
|
+
presence: true
|
8
11
|
before_validation :set_slug
|
9
12
|
end
|
10
13
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Redde::TreeSortable
|
2
|
+
def sort(list)
|
3
|
+
Sorter.new(list, self).sort
|
4
|
+
end
|
5
|
+
|
6
|
+
class Sorter
|
7
|
+
attr_accessor :list, :klass
|
8
|
+
def initialize(list, klass)
|
9
|
+
@list = list
|
10
|
+
@klass = klass
|
11
|
+
end
|
12
|
+
|
13
|
+
def sort
|
14
|
+
tree.each do |parent, cats|
|
15
|
+
i = 1
|
16
|
+
if parent == 'root'
|
17
|
+
pid = nil
|
18
|
+
else
|
19
|
+
pid = klass.find(parent).id
|
20
|
+
end
|
21
|
+
cats.each do |cat|
|
22
|
+
klass.find(cat).update(parent_id: pid, position: i)
|
23
|
+
i += 1
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def tree
|
29
|
+
temp = {}
|
30
|
+
list.each do |key, value|
|
31
|
+
if temp[value]
|
32
|
+
temp[value] << key
|
33
|
+
else
|
34
|
+
temp[value] = [key]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
temp
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -1,24 +1,24 @@
|
|
1
1
|
module Redde::WithPhoto
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
|
4
|
-
QUERY = 'imageable_id = :id AND imageable_type = :type OR token in (:tokens)'
|
4
|
+
QUERY = 'imageable_id = :id AND imageable_type = :type OR token in (:tokens)'.freeze
|
5
5
|
|
6
6
|
included do
|
7
7
|
attr_accessor :photo_tokens
|
8
|
-
has_many :photos, dependent: :destroy, as: :imageable
|
8
|
+
has_many :photos, class_name: 'Redde::Photo', dependent: :destroy, as: :imageable
|
9
9
|
after_create :assign_photos
|
10
10
|
end
|
11
11
|
|
12
12
|
def all_photos
|
13
|
-
Photo.where(QUERY, id:
|
13
|
+
Redde::Photo.where(QUERY, id: id, type: self.class.name, tokens: tokens)
|
14
14
|
end
|
15
15
|
|
16
16
|
def assign_photos
|
17
|
-
Photo.where(token: tokens).update_all(imageable_attributes)
|
17
|
+
Redde::Photo.where(token: tokens).update_all(imageable_attributes)
|
18
18
|
end
|
19
19
|
|
20
20
|
def imageable_attributes
|
21
|
-
{ imageable_id:
|
21
|
+
{ imageable_id: id, imageable_type: self.class.name, token: nil }
|
22
22
|
end
|
23
23
|
|
24
24
|
def tokens
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Redde::Photo < ActiveRecord::Base
|
2
|
+
mount_uploader :src, PhotoUploader
|
3
|
+
self.table_name = 'redde_photos'
|
4
|
+
|
5
|
+
belongs_to :imageable, polymorphic: true
|
6
|
+
default_scope { order(:position) }
|
7
|
+
before_save :set_token, unless: :persisted_link?
|
8
|
+
|
9
|
+
def set_token
|
10
|
+
self.token = SecureRandom.uuid unless token.present?
|
11
|
+
end
|
12
|
+
|
13
|
+
def persisted_link?
|
14
|
+
imageable_type.present? && imageable_id.present?
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class Redde::SystemCommand
|
2
|
+
attr_accessor :action
|
3
|
+
|
4
|
+
ALLOWED_ACTIONS = %w(cache unicorn sidekiq reboot).freeze
|
5
|
+
|
6
|
+
def self.execute(action)
|
7
|
+
new(action).process
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(action)
|
11
|
+
@action = action
|
12
|
+
Logger.new('log/commands.log').info "Received #{action} command"
|
13
|
+
fail "Unsopported command #{action}. Allowed commands: #{ALLOWED_ACTIONS.join(', ')}" unless ALLOWED_ACTIONS.include?(action.to_s)
|
14
|
+
end
|
15
|
+
|
16
|
+
def process
|
17
|
+
send(action)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def cache
|
23
|
+
`sudo service memcached restart`
|
24
|
+
end
|
25
|
+
|
26
|
+
def unicorn
|
27
|
+
`sudo service #{project_name} restart`
|
28
|
+
end
|
29
|
+
|
30
|
+
def sidekiq
|
31
|
+
system("sudo kill `cat #{Rails.root}/tmp/pids/sidekiq.pid` &&
|
32
|
+
cd #{Rails.root} &&
|
33
|
+
RAILS_ENV=#{Rails.env} bundle exec sidekiq -C config/sidekiq.yml -L log/sidekiq.log -d")
|
34
|
+
end
|
35
|
+
|
36
|
+
def reboot
|
37
|
+
`sudo reboot`
|
38
|
+
end
|
39
|
+
|
40
|
+
def project_name
|
41
|
+
Rails.root.to_s.gsub('/current', '').split('/').last
|
42
|
+
end
|
43
|
+
end
|
@@ -11,9 +11,13 @@ class Redde::UrlGenerator
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def translitted_name
|
14
|
-
Russian
|
15
|
-
.
|
16
|
-
.
|
14
|
+
Russian
|
15
|
+
.translit(name)
|
16
|
+
.tr(' ', '-')
|
17
|
+
.gsub(/[^\x00-\x7F]+/, '')
|
18
|
+
.gsub(/[^\w_ \-]+/i, '')
|
19
|
+
.gsub(/[ \-]+/i, '-')
|
20
|
+
.gsub(/^\-|\-$/i, '')
|
17
21
|
end
|
18
22
|
|
19
23
|
def formatted_name
|
@@ -1,8 +1,8 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
class PhotoUploader < CarrierWave::Uploader::Base
|
2
4
|
# Include RMagick or MiniMagick support:
|
3
|
-
include CarrierWave::
|
4
|
-
# include CarrierWave::MiniMagick
|
5
|
-
|
5
|
+
include CarrierWave::MiniMagick
|
6
6
|
# Choose what kind of storage to use for this uploader:
|
7
7
|
storage :file
|
8
8
|
# storage :fog
|
@@ -44,7 +44,7 @@ class PhotoUploader < CarrierWave::Uploader::Base
|
|
44
44
|
# end
|
45
45
|
|
46
46
|
version :admin do
|
47
|
-
process resize_and_pad: [119, 119, :transparent
|
47
|
+
process resize_and_pad: [119, 119, :transparent]
|
48
48
|
end
|
49
49
|
|
50
50
|
# Override the filename of the uploaded files:
|
@@ -0,0 +1,10 @@
|
|
1
|
+
%li.sort-tree__item(data-sort-tree-item){id: "list_#{item.id}"}
|
2
|
+
.sort-tree__wrap(data-sort-tree-tolerance)
|
3
|
+
= link_to title_for(item), [:edit, :admin, item], class: 'sort-tree__link'
|
4
|
+
- if item.is_childless?
|
5
|
+
= surround '(', ')' do
|
6
|
+
= link_to 'На сайт', '/', target: '_blank'
|
7
|
+
.sort-tree__controls
|
8
|
+
= link_to 'Удал', [:admin, item], class: 'a_del sort-tree__btn', data: { confirm: 'Точно удалить?' }, method: 'delete'
|
9
|
+
- if item.has_children?
|
10
|
+
%ol= render partial: 'tree_item', collection: item.children.order(:position), as: :item
|
@@ -0,0 +1,21 @@
|
|
1
|
+
- item = instance_variable_get("@#{record}")
|
2
|
+
- content_for :page_header do
|
3
|
+
.page-header__title
|
4
|
+
- if item.new_record?
|
5
|
+
Добавить #{taccusative(record)}
|
6
|
+
- else
|
7
|
+
Редактировать #{taccusative(record)}
|
8
|
+
= link_to 'Назад', { action: :index }, class: 'btn page-header__btn'
|
9
|
+
|
10
|
+
= photoable(item) if item.class.reflect_on_association(:photos)
|
11
|
+
|
12
|
+
= redde_form_for [:admin, item] do |f|
|
13
|
+
- form_column_names.each do |column|
|
14
|
+
= f.redde_field column.to_sym
|
15
|
+
- if column_names.include?('ancestry')
|
16
|
+
= f.redde_select :parent_id, options_from_collection_for_select(f.object.class.all, :id, :title, f.object.parent_id), { include_blank: '- Выбрать -' }
|
17
|
+
-# %div= render 'redditor/admin/page', { f: f } if @article.methods.include?(:page)
|
18
|
+
|
19
|
+
-# проверить и написать правильное условие
|
20
|
+
-# f.object.class.reflect_on_association(:seo)
|
21
|
+
=# render 'admin/seos/block', { f: f } if f.object.methods.include?(:seo)
|