padrino-admin 0.5.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -1
- data/README.rdoc +64 -11
- data/Rakefile +26 -2
- data/VERSION +1 -1
- data/lib/padrino-admin/access_control.rb +8 -6
- data/lib/padrino-admin/adapters/ar.rb +7 -1
- data/lib/padrino-admin/adapters/dm.rb +18 -8
- data/lib/padrino-admin/adapters.rb +30 -6
- data/lib/padrino-admin/ext_js/column_store.rb +142 -0
- data/lib/padrino-admin/ext_js/config.rb +139 -125
- data/lib/padrino-admin/generators/actions.rb +16 -0
- data/lib/padrino-admin/generators/admin_app.rb +61 -0
- data/lib/padrino-admin/generators/admin_page.rb +55 -0
- data/lib/padrino-admin/generators/app/app.rb.tt +31 -0
- data/lib/padrino-admin/generators/app/controllers/accounts.rb +37 -0
- data/lib/padrino-admin/generators/app/controllers/base.rb +11 -0
- data/lib/padrino-admin/generators/app/controllers/javascripts.rb +10 -0
- data/lib/padrino-admin/generators/app/controllers/sessions.rb +21 -0
- data/lib/padrino-admin/generators/app/public/flash/charts.swf +0 -0
- data/lib/padrino-admin/generators/app/public/flash/clippy.swf +0 -0
- data/lib/padrino-admin/generators/app/public/flash/expressinstall.swf +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/back.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/background.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/bg-content.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/bg-hd-slate.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/bg-hd.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/bg-intro.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/bg-login.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/bg-menu-slate.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/bg-menu.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/bg.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/btn-login.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/categories.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/delete.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/download.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/duplicate.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/edit.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/export.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/hd-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/image.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/loader.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/logo-loader.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/logo-small.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/new.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/no-image.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/preview.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/print.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/save.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/backend/support.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/box/corners-blue.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/box/corners.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/box/l-blue.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/box/l.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/box/r-blue.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/box/r.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/box/tb-blue.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/box/tb.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/button/arrow.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/button/btn.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/button/group-cs.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/button/group-lr.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/button/group-tb.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow-b-noline.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow-b.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow-bo.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow-noline.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow-o.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/button/s-arrow.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/dd/drop-add.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/dd/drop-no.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/dd/drop-yes.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/editor/tb-sprite.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/form/checkbox.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/form/clear-trigger.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/form/clear-trigger.psd +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/form/date-trigger.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/form/date-trigger.psd +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/form/error-tip-corners.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/form/exclamation.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/form/radio.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/form/search-trigger.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/form/search-trigger.psd +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/form/text-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/form/trigger-tpl.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/form/trigger.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/form/trigger.psd +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/gradient-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/Thumbs.db +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/arrow-left-white.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/arrow-right-white.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/col-move-bottom.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/col-move-top.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/columns.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/dirty.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/done.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/drop-no.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/drop-yes.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/footer-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-blue-hd.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-blue-split.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-hrow.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-loading.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-split.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid-vista-hd.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid3-hd-btn.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid3-hrow-over.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid3-hrow.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid3-special-col-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/grid3-special-col-sel-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/group-by.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/group-expand-sprite.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/hd-pop.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-asc.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-desc.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-lock.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-lock.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-unlock.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/hmenu-unlock.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/invalid_line.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/loading.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/mso-hd.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/nowait.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-first-disabled.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-first.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-last-disabled.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-last.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-next-disabled.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-next.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-prev-disabled.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/page-prev.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/pick-button.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/refresh.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/row-check-sprite.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/row-expand-sprite.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/row-over.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/row-sel.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/sort-hd.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/sort_asc.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/sort_desc.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/grid/wait.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/collapse.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/expand.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/gradient-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/mini-bottom.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/mini-left.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/mini-right.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/mini-top.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/ns-collapse.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/ns-expand.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/panel-close.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/panel-title-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/panel-title-light-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/stick.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/stuck.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/tab-close-on.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/layout/tab-close.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/menu/checked.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/menu/group-checked.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/menu/item-over.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/menu/menu-parent.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/menu/menu.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/menu/unchecked.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/panel/corners-sprite.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/panel/left-right.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/panel/light-hd.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/panel/tool-sprite-tpl.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/panel/tool-sprites.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/panel/tools-sprites-trans.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/panel/top-bottom.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/panel/top-bottom.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/panel/white-corners-sprite.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/panel/white-left-right.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/panel/white-top-bottom.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/progress/progress-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/qtip/bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/qtip/close.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/qtip/tip-anchor-sprite.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/qtip/tip-sprite.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/s.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/shadow-c.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/shadow-lr.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/shadow.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/shared/blue-loading.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/shared/calendar.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/shared/glass-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/shared/hd-sprite.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/shared/large-loading.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/shared/left-btn.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/shared/loading-balls.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/shared/right-btn.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/shared/warning.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/e-handle-dark.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/e-handle.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/ne-handle-dark.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/ne-handle.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/nw-handle-dark.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/nw-handle.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/s-handle-dark.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/s-handle.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/se-handle-dark.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/se-handle.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/square.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/sw-handle-dark.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/sizer/sw-handle.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/slider/slider-bg.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/slider/slider-thumb.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/slider/slider-v-bg.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/slider/slider-v-thumb.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/scroll-left.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/scroll-right.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/scroller-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-btm-inactive-left-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-btm-inactive-right-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-btm-left-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-btm-right-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-close.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-strip-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-strip-bg.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tab-strip-btm-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tabs/tabs-sprite.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/btn-arrow-light.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/btn-arrow.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/btn-over-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/gray-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/more.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/tb-bg.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/tb-btn-sprite.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/tb-xl-btn-sprite.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/toolbar/tb-xl-sep.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/arrows.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-add.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-between.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-no.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-over.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-under.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/drop-yes.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-end-minus-nl.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-end-minus.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-end-plus-nl.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-end-plus.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-end.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-line.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-minus-nl.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-minus.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-plus-nl.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow-plus.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/elbow.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/folder-open.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/folder.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/leaf.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/loading.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/tree/s.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/window/icon-error.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/window/icon-info.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/window/icon-question.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/window/icon-warning.gif +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/window/left-corners.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/window/left-corners.psd +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/window/left-right.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/window/left-right.psd +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/window/right-corners.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/window/right-corners.psd +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/window/top-bottom.png +0 -0
- data/lib/padrino-admin/generators/app/public/images/ext/default/window/top-bottom.psd +0 -0
- data/lib/padrino-admin/generators/app/public/javascripts/controls.js +3 -0
- data/lib/padrino-admin/generators/app/public/javascripts/dragdrop.js +3 -0
- data/lib/padrino-admin/generators/app/public/javascripts/effects.js +4 -0
- data/lib/padrino-admin/generators/app/public/javascripts/ext.js +26 -0
- data/lib/padrino-admin/generators/app/public/javascripts/prototype.js +14 -0
- data/lib/padrino-admin/generators/app/public/stylesheets/admin.css +78 -0
- data/lib/padrino-admin/generators/app/public/stylesheets/ext.css +1543 -0
- data/lib/padrino-admin/generators/app/public/stylesheets/login.css +17 -0
- data/lib/padrino-admin/generators/app/public/stylesheets/standard.css +66 -0
- data/lib/padrino-admin/generators/app/views/accounts/_form.haml +25 -0
- data/lib/padrino-admin/generators/app/views/accounts/edit.haml +3 -0
- data/lib/padrino-admin/generators/app/views/accounts/grid.js.erb +9 -0
- data/lib/padrino-admin/generators/app/views/accounts/new.haml +3 -0
- data/lib/padrino-admin/generators/app/views/accounts/store.jml +9 -0
- data/lib/padrino-admin/generators/app/views/base/dashboard.haml +3 -0
- data/lib/padrino-admin/generators/app/views/base/index.haml +21 -0
- data/lib/padrino-admin/generators/app/views/javascripts/admin.js.erb +559 -0
- data/lib/padrino-admin/generators/app/views/javascripts/locale.js.erb +135 -0
- data/lib/padrino-admin/generators/app/views/sessions/new.haml +26 -0
- data/lib/padrino-admin/generators/templates/controller.rb.tt +37 -0
- data/lib/padrino-admin/generators/templates/db/seeds.rb.tt +29 -0
- data/lib/padrino-admin/generators/templates/models/account.rb.tt +8 -0
- data/lib/padrino-admin/generators/templates/views/_form.haml.tt +10 -0
- data/lib/padrino-admin/generators/templates/views/edit.haml.tt +3 -0
- data/lib/padrino-admin/generators/templates/views/grid.js.erb.tt +9 -0
- data/lib/padrino-admin/generators/templates/views/new.haml.tt +3 -0
- data/lib/padrino-admin/generators/templates/views/store.jml.tt +6 -0
- data/lib/padrino-admin/{access_control/helpers.rb → helpers/authentication.rb} +20 -10
- data/lib/padrino-admin/helpers/view.rb +138 -0
- data/lib/padrino-admin/locale/admin/en.yml +71 -0
- data/lib/padrino-admin/locale/extjs/en.yml +147 -0
- data/lib/padrino-admin/utils/crypt.rb +1 -0
- data/lib/padrino-admin/utils/literal.rb +13 -0
- data/lib/padrino-admin.rb +6 -2
- data/padrino-admin.gemspec +304 -15
- data/test/fixtures/active_record.rb +1 -1
- data/test/fixtures/data_mapper.rb +1 -1
- data/test/fixtures/mongo_mapper.rb +1 -1
- data/test/fixtures/test_column_store.jml +10 -0
- data/test/fixtures/test_generic.jml +7 -0
- data/test/fixtures/test_javascript.jml +81 -0
- data/test/helper.rb +2 -3
- data/test/test_admin_application.rb +1 -1
- data/test/test_column_store.rb +41 -0
- metadata +309 -13
- data/lib/padrino-admin/ext_js/controller.rb +0 -145
- data/lib/padrino-admin/generators/backend.rb +0 -25
- data/lib/padrino-admin/locale/en.yml +0 -7
- data/test/test_controller.rb +0 -79
- data/test/test_parsing.rb +0 -135
data/LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -1,22 +1,75 @@
|
|
1
1
|
= padrino-admin
|
2
2
|
|
3
|
-
|
3
|
+
Padrino has a beautiful Ajax Admin, with these fatures:
|
4
4
|
|
5
|
-
|
5
|
+
Orm Agnostic:: Adapters for datamapper, activerecord, mongomapper, couchdb (now only: datamapper and activerecord)
|
6
|
+
Authentication:: Support for Account authentication, Account Permission managment
|
7
|
+
Scaffold:: You can simply create a new "admin interface" simply providing a Model
|
8
|
+
Ajax Uploads:: You can upload file, manage them and attach them to any model in a quick and simple way (coming soon)
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
10
|
+
=== Admin Usage
|
11
|
+
|
12
|
+
Create a project:
|
13
|
+
|
14
|
+
$ padrino-gen app fun-test
|
15
|
+
$ cd fun-test
|
16
|
+
|
17
|
+
For create the admin application:
|
18
|
+
|
19
|
+
fun-test$ padrino-gen admin
|
11
20
|
|
12
|
-
|
21
|
+
Now follow admin instructions so:
|
13
22
|
|
14
|
-
|
23
|
+
* edit your config/database.rb
|
24
|
+
* run padrino rake dm:migrate
|
25
|
+
* run padrino rake seed
|
26
|
+
|
27
|
+
Your admin now is "complete", you can start your server with <tt>padrino start</tt> and point your browser to /admin!
|
28
|
+
|
29
|
+
For create a new "scaffold" you need to provide only a Model for them like:
|
30
|
+
|
31
|
+
fun-test$ padrino-gen admin_page Post
|
15
32
|
|
16
|
-
|
33
|
+
That's all!!
|
34
|
+
|
35
|
+
=== Admin Authentication
|
36
|
+
|
37
|
+
Padrino Admin use a model Account for manage role, membership and permissions take the following example:
|
38
|
+
|
39
|
+
access_control.roles_for :any do |role|
|
40
|
+
role.allow "/sessions"
|
41
|
+
# role.deny "/deny/this/always"
|
42
|
+
end
|
43
|
+
|
44
|
+
access_control.roles_for :admin do |role, account|
|
45
|
+
role.allow "/"
|
46
|
+
|
47
|
+
role.project_module :accounts do |project|
|
48
|
+
project.menu :list, "/admin/accounts.js"
|
49
|
+
project.menu :new, "/admin/accounts/new"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
access_control.roles_for :editor do |role, account|
|
54
|
+
role.project_module :posts do |project|
|
55
|
+
project.menu :list, "/admin/posts.js"
|
56
|
+
project.menu :new, "/admin/posts/new"
|
57
|
+
end
|
58
|
+
|
59
|
+
role.project_module :comments do |project|
|
60
|
+
project.menu :list, "/admin/comments.js"
|
61
|
+
project.menu :new, "/admin/comments/new"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
In this example we <tt>grant</tt> "/session" (and each subpaths like /sessions/new) for all users logged and unlogged.
|
66
|
+
|
67
|
+
Account with role <tt>admin</tt> can manage <tt>only</tt> accounts because have access to "/admin/accounts/**" paths
|
68
|
+
Account with role <tt>editor</tt> can manage <tt>only</tt> post/comments because have access to "/admin/posts/**", "/admin/posts/**" paths
|
17
69
|
|
18
|
-
|
70
|
+
Another good fature of Padrino admin is that when you define a <tt>Project Module</tt> role you also build the Menu Tree of the Admin.
|
71
|
+
Trust us that in future you appreciate so much this feature.
|
19
72
|
|
20
73
|
== Copyright
|
21
74
|
|
22
|
-
Copyright (c)
|
75
|
+
Copyright (c) 2010 Padrino. See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake'
|
3
3
|
|
4
|
+
GEM_VERSION = File.read(File.dirname(__FILE__) + '/VERSION')
|
5
|
+
|
4
6
|
begin
|
5
7
|
require 'jeweler'
|
6
8
|
Jeweler::Tasks.new do |gem|
|
@@ -11,8 +13,9 @@ begin
|
|
11
13
|
gem.homepage = "http://github.com/padrino/padrino-framework/tree/master/padrino-admin"
|
12
14
|
gem.authors = ["Padrino Team", "Nathan Esquenazi", "Davide D'Agostino", "Arthur Chiu"]
|
13
15
|
gem.add_runtime_dependency "json_pure", ">= 1.2.0"
|
14
|
-
gem.add_runtime_dependency "padrino-core", "
|
15
|
-
gem.
|
16
|
+
gem.add_runtime_dependency "padrino-core", "= #{GEM_VERSION}"
|
17
|
+
gem.add_runtime_dependency "padrino-gen", "= #{GEM_VERSION}"
|
18
|
+
gem.add_runtime_dependency "tilt", ">= 0.4"
|
16
19
|
gem.add_development_dependency "haml", ">= 2.2.1"
|
17
20
|
gem.add_development_dependency "shoulda", ">= 0"
|
18
21
|
gem.add_development_dependency "mocha", ">= 0.9.7"
|
@@ -28,6 +31,7 @@ end
|
|
28
31
|
require 'rake/testtask'
|
29
32
|
Rake::TestTask.new(:test) do |test|
|
30
33
|
test.libs << 'test'
|
34
|
+
|
31
35
|
test.pattern = 'test/**/test_*.rb'
|
32
36
|
test.verbose = true
|
33
37
|
end
|
@@ -35,6 +39,9 @@ end
|
|
35
39
|
begin
|
36
40
|
require 'rcov/rcovtask'
|
37
41
|
Rcov::RcovTask.new do |test|
|
42
|
+
Dir[File.dirname(__FILE__) + "/../padrino-*/lib"].each do |padrino_gem|
|
43
|
+
test.libs << padrino_gem
|
44
|
+
end
|
38
45
|
test.libs << 'test'
|
39
46
|
test.pattern = 'test/**/test_*.rb'
|
40
47
|
test.verbose = true
|
@@ -58,3 +65,20 @@ Rake::RDocTask.new do |rdoc|
|
|
58
65
|
rdoc.rdoc_files.include('README*')
|
59
66
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
60
67
|
end
|
68
|
+
|
69
|
+
|
70
|
+
spec = Gem::Specification.new do |s|
|
71
|
+
s.name = "foo"
|
72
|
+
s.version = "1.0.1"
|
73
|
+
s.author = "Davide D'Agostino"
|
74
|
+
s.email = "d.dagostino@lipsiasoft.com"
|
75
|
+
s.homepage = "http://www.lipsiadmin.com"
|
76
|
+
s.rubyforge_project = "lipsiadmin"
|
77
|
+
s.platform = Gem::Platform::RUBY
|
78
|
+
s.summary = "Lipsiadmin is a new revolutionary admin for your projects.Lipsiadmin is based on Ext Js 2.0. framework (with prototype adapter) and is ready for Rails 2.0. This admin is for newbie developper but also for experts, is not entirely written in javascript because the aim of developper wose build in a agile way web/site apps so we use extjs in a new intelligent way a mixin of 'old' html and new ajax functions, for example ext manage the layout of page, grids, tree and errors, but form are in html code."
|
79
|
+
s.files = FileList["CHANGELOG", "README.rdoc", "MIT-LICENSE", "Rakefile", "init.rb", "{lipsiadmin_generators,lib,resources,tasks}/**/*"].to_a
|
80
|
+
s.has_rdoc = true
|
81
|
+
s.requirements << "ImageMagick"
|
82
|
+
s.add_dependency('haml')
|
83
|
+
s.add_dependency('rails', '>= 2.2.1')
|
84
|
+
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.6.1
|
@@ -6,7 +6,8 @@ module Padrino
|
|
6
6
|
#
|
7
7
|
# class EcommerceDemo < Padrino::Application
|
8
8
|
# enable :authentication
|
9
|
-
# set :
|
9
|
+
# set :login_page, "/login" # or your login page
|
10
|
+
# enable :store_location # if you want know what is the page that need authentication
|
10
11
|
# set :use_orm, :active_record # or :data_mapper, :mongo_mapper
|
11
12
|
#
|
12
13
|
# access_control.roles_for :any do
|
@@ -37,7 +38,7 @@ module Padrino
|
|
37
38
|
#
|
38
39
|
# class AdminDemo < Padrino::Application
|
39
40
|
# enable :authentication
|
40
|
-
# set :
|
41
|
+
# set :login_page, "/sessions/new" # or your page
|
41
42
|
#
|
42
43
|
# access_control.roles_for :any do |role|
|
43
44
|
# role.allow "/sessions"
|
@@ -123,9 +124,8 @@ module Padrino
|
|
123
124
|
module AccessControl
|
124
125
|
|
125
126
|
def self.registered(app)
|
126
|
-
app.helpers Padrino::
|
127
|
+
app.helpers Padrino::Admin::Helpers
|
127
128
|
app.before { login_required }
|
128
|
-
app.set :redirect_to_default, "/"
|
129
129
|
if app.respond_to?(:use_orm)
|
130
130
|
Padrino::Admin::Adapters.register(app.use_orm)
|
131
131
|
else
|
@@ -134,9 +134,9 @@ module Padrino
|
|
134
134
|
end
|
135
135
|
|
136
136
|
class Base
|
137
|
-
|
138
137
|
class << self
|
139
|
-
|
138
|
+
attr_reader :roles
|
139
|
+
|
140
140
|
def inherited(base) #:nodoc:
|
141
141
|
base.class_eval("@@cache={}; @authorizations=[]; @roles=[]; @mappers=[]")
|
142
142
|
base.send(:cattr_reader, :cache)
|
@@ -192,11 +192,13 @@ module Padrino
|
|
192
192
|
|
193
193
|
def can?(request_path)
|
194
194
|
return true if @allowed.empty?
|
195
|
+
request_path = "/" if request_path.blank?
|
195
196
|
@allowed.any? { |path| request_path =~ /^#{path}/ } && !cannot?(request_path)
|
196
197
|
end
|
197
198
|
|
198
199
|
def cannot?(request_path)
|
199
200
|
return false if @denied.empty?
|
201
|
+
request_path = "/" if request_path.blank?
|
200
202
|
@denied.any? { |path| request_path =~ /^#{path}/ }
|
201
203
|
end
|
202
204
|
|
@@ -13,7 +13,7 @@ module Padrino
|
|
13
13
|
named_scope :ext_search, lambda { |params|
|
14
14
|
conditions = nil
|
15
15
|
|
16
|
-
if
|
16
|
+
if params[:query].present? && params[:fields].present?
|
17
17
|
filters = params[:fields].split(",").collect { |f| "#{f} LIKE ?" }.compact
|
18
18
|
conditions = [filters.join(" OR ")].concat((1..filters.size).collect { "%#{params[:query]}%" })
|
19
19
|
end
|
@@ -47,6 +47,12 @@ module Padrino
|
|
47
47
|
options[:count] ||= 1
|
48
48
|
I18n.translate(defaults.shift, options.merge(:default => defaults, :scope => [:model, :attributes]))
|
49
49
|
end
|
50
|
+
|
51
|
+
# Alias method for get columns
|
52
|
+
def properties
|
53
|
+
columns
|
54
|
+
end
|
55
|
+
|
50
56
|
end
|
51
57
|
end
|
52
58
|
|
@@ -15,9 +15,23 @@ module Padrino
|
|
15
15
|
module InstanceMethods
|
16
16
|
# This method allow us to don't see deprecations
|
17
17
|
def new_record?; new?; end
|
18
|
+
|
19
|
+
# Returns a String, which Padrino uses for constructing an URL to this object.
|
20
|
+
# The default implementation returns this record‘s id as a String, or nil if this record‘s unsaved.
|
21
|
+
def to_param
|
22
|
+
# We can't use alias_method here, because method 'id' optimizes itself on the fly.
|
23
|
+
(id = self.id) ? id.to_s : nil # Be sure to stringify the id for routes
|
24
|
+
end
|
25
|
+
|
26
|
+
# Update attributes is deprecated but for compatibility with AR we support them.
|
27
|
+
def update_attributes(attributes = {})
|
28
|
+
update(attributes)
|
29
|
+
end
|
18
30
|
end
|
19
|
-
|
31
|
+
|
20
32
|
module ClassMethods
|
33
|
+
attr_accessor :_table_name
|
34
|
+
|
21
35
|
def self_and_descendants #:nodoc:
|
22
36
|
klass = self
|
23
37
|
classes = [klass]
|
@@ -50,7 +64,7 @@ module Padrino
|
|
50
64
|
|
51
65
|
# Return the name of the sql table
|
52
66
|
def table_name
|
53
|
-
storage_names[:default]
|
67
|
+
self.name.downcase.pluralize # storage_names[:default] this some times give an error
|
54
68
|
end
|
55
69
|
|
56
70
|
# Perform a basic fulltext search/ordering for the given columns
|
@@ -61,8 +75,6 @@ module Padrino
|
|
61
75
|
# In this example we search in columns name, surname, company the string daddye and then we order by
|
62
76
|
# column +name+
|
63
77
|
def ext_search(params)
|
64
|
-
params.symbolize_keys!
|
65
|
-
|
66
78
|
# We need a basic query
|
67
79
|
query = {}
|
68
80
|
|
@@ -78,14 +90,12 @@ module Padrino
|
|
78
90
|
end
|
79
91
|
|
80
92
|
def ext_paginate(params)
|
81
|
-
params.symbolize_keys!
|
82
|
-
|
83
93
|
# We need a basic query
|
84
94
|
query = {}
|
85
95
|
|
86
96
|
# First we need to sort our record
|
87
|
-
if params[:sort].present? && params[:dir].to_s =~ /^(asc|desc)$/
|
88
|
-
query[:order] = [params[:sort].to_sym.send(params[:dir].to_s.downcase)]
|
97
|
+
if params[:sort].present? && params[:dir].to_s =~ /^(asc|desc)$/i
|
98
|
+
query[:order] = [params[:sort].to_s.gsub(/#{table_name}\./i,'').to_sym.send(params[:dir].to_s.downcase)]
|
89
99
|
end
|
90
100
|
|
91
101
|
# Now time to limit/offset it
|
@@ -11,24 +11,48 @@ module Padrino
|
|
11
11
|
def self.register(adapter, klass=nil)
|
12
12
|
klass ||= Account
|
13
13
|
case adapter
|
14
|
-
when :
|
14
|
+
when :activerecord
|
15
15
|
ActiveRecord::Base.send(:include, Padrino::Admin::Adapters::Ar::Base)
|
16
16
|
klass.send(:include, Padrino::Admin::Adapters::Ar::Account)
|
17
|
-
when :
|
17
|
+
when :datamapper
|
18
18
|
DataMapper::Model.descendants.each { |d| d.send(:include, Padrino::Admin::Adapters::Dm::Base) }
|
19
19
|
klass.send(:include, Padrino::Admin::Adapters::Dm::Account)
|
20
|
-
|
20
|
+
# Not yet finished
|
21
|
+
when :mongomapper
|
21
22
|
MongoMapper::Document.append_inclusions(Padrino::Admin::Adapters::Mm::Base)
|
22
23
|
klass.send(:include, Padrino::Admin::Adapters::Mm::Account)
|
23
24
|
else
|
24
25
|
raise Padrino::Admin::AdapterError, "The adapter #{adapter.inspect} is not supported, available adapters are: " +
|
25
|
-
":
|
26
|
+
":activerecord, :datamapper, :mongomapper"
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
29
30
|
# Here standard extension
|
30
31
|
module Base
|
31
|
-
|
32
|
+
def self.included(base)
|
33
|
+
base.send :include, InstanceMethods
|
34
|
+
base.extend ClassMethods
|
35
|
+
end
|
36
|
+
|
37
|
+
module InstanceMethods
|
38
|
+
end
|
39
|
+
|
40
|
+
module ClassMethods
|
41
|
+
# This method generate store and column config.
|
42
|
+
# for lazinies hands instead supply:
|
43
|
+
#
|
44
|
+
# Model.column_store("./../views/model/store.jml")
|
45
|
+
#
|
46
|
+
# you can:
|
47
|
+
#
|
48
|
+
# Model.column_store(options.views, "models/store")
|
49
|
+
def column_store(*args)
|
50
|
+
path = File.join(*args)
|
51
|
+
path = Dir[path + ".{jml,jaml}"].first.to_s if path !~ /(\.jml|\.jaml)$/
|
52
|
+
config = YAML.load_file(path)
|
53
|
+
Padrino::ExtJs::ColumnStore.new(self, config)
|
54
|
+
end
|
55
|
+
end
|
32
56
|
end
|
33
57
|
# Here extension for account
|
34
58
|
#
|
@@ -54,7 +78,7 @@ module Padrino
|
|
54
78
|
module ClassMethods
|
55
79
|
# This method it's for authentication purpose
|
56
80
|
def authenticate(email, password)
|
57
|
-
account = first(:conditions => { :email => email })
|
81
|
+
account = first(:conditions => { :email => email }) if email.present?
|
58
82
|
account && account.password_clean == password ? account : nil
|
59
83
|
end
|
60
84
|
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
module Padrino
|
2
|
+
module ExtJs
|
3
|
+
# Return column config, and store config/data for ExtJS ColumnModel and Store
|
4
|
+
class ColumnStore
|
5
|
+
attr_reader :data
|
6
|
+
|
7
|
+
def initialize(klass_model, config) #:nodoc
|
8
|
+
@model = klass_model
|
9
|
+
table_name = @model.table_name || @model.class.to_s.downcase.pluralize
|
10
|
+
@data = config["columns"].map do |column|
|
11
|
+
|
12
|
+
# Reformat our config
|
13
|
+
column["header"] ||= column["method"].to_s
|
14
|
+
column["dataIndex"] ||= column["method"]
|
15
|
+
column["sortable"] ||= column["sortable"].nil? ? true : column["sortable"]
|
16
|
+
column["header"] = @model.human_attribute_name(column["header"]) # try to translate with I18n the column name
|
17
|
+
|
18
|
+
# Try to reformat the dataIndex
|
19
|
+
data_indexes = Array(column["dataIndex"]).collect do |data_index|
|
20
|
+
if data_index =~ /\./ # if we have some like categories.names we use this
|
21
|
+
cols = data_index.split(".")
|
22
|
+
column["name"] ||= cols[0] + "[" + cols[1..-1].join("][") + "]" # accounts.name will be => accounts[name]
|
23
|
+
else
|
24
|
+
column["name"] ||= "#{table_name.singularize}[#{data_index}]"
|
25
|
+
data_index = "#{table_name}.#{data_index}"
|
26
|
+
end
|
27
|
+
data_index
|
28
|
+
end
|
29
|
+
|
30
|
+
# Now we join our data indexes
|
31
|
+
column["dataIndex"] = data_indexes.compact.uniq.join(",")
|
32
|
+
|
33
|
+
# Reformat mapping like a div id
|
34
|
+
column["mapping"] ||= column["name"].sub(/\[/,"_").sub(/\]$/, "").sub(/\]\[/,"_")
|
35
|
+
|
36
|
+
# Now is necessary for our columns an ID
|
37
|
+
# TODO: check duplicates here
|
38
|
+
column["id"] = column["mapping"]
|
39
|
+
|
40
|
+
# Finally we can return our column
|
41
|
+
column
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Return an array config for build an Ext.grid.ColumnModel() config
|
46
|
+
def column_fields
|
47
|
+
data = @data.map do |data|
|
48
|
+
data = data.dup
|
49
|
+
editor = parse_column_editor(data.delete("editor"))
|
50
|
+
renderer = parse_column_renderer(data.delete("renderer"))
|
51
|
+
data.merge!(editor) if editor
|
52
|
+
data.merge!(renderer) if renderer
|
53
|
+
data.delete("method")
|
54
|
+
data.delete("mapping")
|
55
|
+
data
|
56
|
+
end
|
57
|
+
JSON.pretty_generate(data)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Return an array config for build an Ext.data.GroupingStore()
|
61
|
+
def store_fields
|
62
|
+
data = @data.map do |data|
|
63
|
+
type = parse_store_renderer(data["renderer"])
|
64
|
+
hash = { :name => data["dataIndex"] , :mapping => data["mapping"] }
|
65
|
+
hash.merge!(type) if type
|
66
|
+
hash
|
67
|
+
end
|
68
|
+
JSON.pretty_generate(data)
|
69
|
+
end
|
70
|
+
|
71
|
+
# Return data for a custom collection for the ExtJS Ext.data.GroupingStore() json
|
72
|
+
def store_data_from(collection)
|
73
|
+
collection.map do |c|
|
74
|
+
@data.dup.inject({ "id" => c.id }) do |options, data|
|
75
|
+
options[data["mapping"]] = (c.instance_eval(data["method"]) rescue I18n.t("admin.labels.not_found"))
|
76
|
+
options
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# Return a searched and paginated data collection for the ExtJS Ext.data.GroupingStore() json
|
82
|
+
# You can pass options like:
|
83
|
+
#
|
84
|
+
# Examples
|
85
|
+
#
|
86
|
+
# store_data(params, :conditions => "found = 1")
|
87
|
+
# store_data(params, :include => :posts)
|
88
|
+
#
|
89
|
+
def store_data(params={}, options={})
|
90
|
+
# Some can tell me that this method made two identical queries one for count one for paginate.
|
91
|
+
# We don't use the select count because in some circumstances require much time than select *.
|
92
|
+
params[:limit] ||= 50
|
93
|
+
collection = @model.all(options).ext_search(params)
|
94
|
+
collection_count = collection.length
|
95
|
+
collection_paginated = collection.ext_paginate(params)
|
96
|
+
{ :results => store_data_from(collection_paginated), :count => collection_count }.to_json
|
97
|
+
end
|
98
|
+
|
99
|
+
private
|
100
|
+
def parse_store_renderer(renderer)
|
101
|
+
case renderer
|
102
|
+
when "date" then { :type => "date", :dateFormat => "Y-m-d" }
|
103
|
+
when "datetime" then { :type => "date", :dateFormat => "c" }
|
104
|
+
when "time_to_date" then { :type => "date", :dateFormat => "c" }
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def parse_column_editor(editor)
|
109
|
+
case editor
|
110
|
+
when "checkbox" then { :checkbox => true }
|
111
|
+
when "combo" then { :editor => "new Ext.form.ComboBox()".to_l }
|
112
|
+
when "datefield" then { :editor => "new Ext.form.DateField()".to_l }
|
113
|
+
when "numberfield" then { :editor => "new Ext.form.NumberField()".to_l }
|
114
|
+
when "radio" then { :editor => "new Ext.form.Radio()".to_l }
|
115
|
+
when "textarea" then { :editor => "new Ext.form.TextArea()".to_l }
|
116
|
+
when "textfield" then { :editor => "new Ext.form.TextField()".to_l }
|
117
|
+
when "timefield" then { :editor => "new Ext.form.TimeField()".to_l }
|
118
|
+
when "datetimefield" then { :editor => "new Ext.form.DateTimeField()".to_l }
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def parse_column_renderer(renderer)
|
123
|
+
case renderer
|
124
|
+
when "time_to_date" then { :renderer => "Ext.util.Format.dateRenderer()".to_l }
|
125
|
+
when "date" then { :renderer => "Ext.util.Format.dateRenderer()".to_l }
|
126
|
+
when "datetime" then { :renderer => "Ext.util.Format.dateTimeRenderer()".to_l }
|
127
|
+
when "percentage" then { :renderer => "Ext.util.Format.percentage".to_l }
|
128
|
+
when "eur_money" then { :renderer => "Ext.util.Format.eurMoney".to_l }
|
129
|
+
when "us_money" then { :renderer => "Ext.util.Format.usMoney".to_l }
|
130
|
+
when "boolean" then { :renderer => "Ext.util.Format.boolRenderer".to_l }
|
131
|
+
when "capitalize" then { :renderer => "Ext.util.Format.capitalize".to_l }
|
132
|
+
when "file_size" then { :renderer => "Ext.util.Format.fileSize".to_l }
|
133
|
+
when "downcase" then { :renderer => "Ext.util.Format.lowercase".to_l }
|
134
|
+
when "trim" then { :renderer => "Ext.util.Format.trim".to_l }
|
135
|
+
when "undef" then { :renderer => "Ext.util.Format.undef".to_l }
|
136
|
+
when "upcase" then { :renderer => "Ext.util.Format.uppercase".to_l }
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|