yodel_admin 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/lib/layouts/admin_list_record.html +94 -0
- data/lib/layouts/admin_login.html +131 -0
- data/lib/layouts/admin_page/admin_list_page.html +55 -0
- data/lib/layouts/admin_page/admin_settings_page.html +34 -0
- data/lib/layouts/admin_page/admin_tree_page.html +51 -0
- data/lib/layouts/admin_page.html +56 -0
- data/lib/layouts/admin_record_form.html +74 -0
- data/lib/migrations/01_admin_pages.rb +99 -0
- data/lib/migrations/02_admin_default_pages.rb +98 -0
- data/lib/models/admin_editor_page.rb +27 -0
- data/lib/models/admin_list_page.rb +121 -0
- data/lib/models/admin_root_page.rb +9 -0
- data/lib/models/admin_settings_page.rb +20 -0
- data/lib/models/admin_sync_page.rb +82 -0
- data/lib/models/admin_tree_page.rb +141 -0
- data/lib/public/admin/chosen/chosen-sprite.png +0 -0
- data/lib/public/admin/chosen/chosen.css +340 -0
- data/lib/public/admin/chosen/chosen.jquery.min.js +10 -0
- data/lib/public/admin/css/admin.css +1086 -0
- data/lib/public/admin/css/reset.css +48 -0
- data/lib/public/admin/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/lib/public/admin/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/lib/public/admin/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/lib/public/admin/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/lib/public/admin/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/lib/public/admin/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/lib/public/admin/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/lib/public/admin/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/lib/public/admin/css/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/lib/public/admin/css/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/lib/public/admin/css/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/lib/public/admin/css/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/lib/public/admin/css/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/lib/public/admin/css/smoothness/jquery-ui-1.8.16.custom.css +380 -0
- data/lib/public/admin/images/add.png +0 -0
- data/lib/public/admin/images/clock.png +0 -0
- data/lib/public/admin/images/close.png +0 -0
- data/lib/public/admin/images/cross.png +0 -0
- data/lib/public/admin/images/default_icon.png +0 -0
- data/lib/public/admin/images/delete.png +0 -0
- data/lib/public/admin/images/deploy_spinner.gif +0 -0
- data/lib/public/admin/images/drag.png +0 -0
- data/lib/public/admin/images/group_icon.png +0 -0
- data/lib/public/admin/images/left_arrow.png +0 -0
- data/lib/public/admin/images/load_spinner.gif +0 -0
- data/lib/public/admin/images/load_spinner_selected.gif +0 -0
- data/lib/public/admin/images/missing_image.png +0 -0
- data/lib/public/admin/images/new.png +0 -0
- data/lib/public/admin/images/open.png +0 -0
- data/lib/public/admin/images/right_arrow.png +0 -0
- data/lib/public/admin/images/save_spinner.gif +0 -0
- data/lib/public/admin/images/search.png +0 -0
- data/lib/public/admin/images/tick.png +0 -0
- data/lib/public/admin/images/user_icon.png +0 -0
- data/lib/public/admin/images/yodel.png +0 -0
- data/lib/public/admin/js/admin.js +1030 -0
- data/lib/public/admin/js/jquery-ui-1.8.16.custom.min.js +227 -0
- data/lib/public/admin/js/jquery.min.js +18 -0
- data/lib/public/admin/js/jquery.tablesorter.min.js +4 -0
- data/lib/public/admin/js/json2.js +480 -0
- data/lib/public/admin/js/yodel_jquery.js +241 -0
- data/lib/public/admin/tiny_mce/jquery.tinymce.js +338 -0
- data/lib/public/admin/tiny_mce/langs/en.js +223 -0
- data/lib/public/admin/tiny_mce/license.txt +504 -0
- data/lib/public/admin/tiny_mce/plugins/advhr/css/advhr.css +5 -0
- data/lib/public/admin/tiny_mce/plugins/advhr/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/advhr/editor_plugin_src.js +57 -0
- data/lib/public/admin/tiny_mce/plugins/advhr/js/rule.js +43 -0
- data/lib/public/admin/tiny_mce/plugins/advhr/langs/en_dlg.js +7 -0
- data/lib/public/admin/tiny_mce/plugins/advhr/rule.htm +58 -0
- data/lib/public/admin/tiny_mce/plugins/advimage/css/advimage.css +13 -0
- data/lib/public/admin/tiny_mce/plugins/advimage/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/advimage/editor_plugin_src.js +50 -0
- data/lib/public/admin/tiny_mce/plugins/advimage/image.htm +235 -0
- data/lib/public/admin/tiny_mce/plugins/advimage/img/sample.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/advimage/js/image.js +458 -0
- data/lib/public/admin/tiny_mce/plugins/advimage/langs/en_dlg.js +45 -0
- data/lib/public/admin/tiny_mce/plugins/advlink/css/advlink.css +8 -0
- data/lib/public/admin/tiny_mce/plugins/advlink/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/advlink/editor_plugin_src.js +61 -0
- data/lib/public/admin/tiny_mce/plugins/advlink/js/advlink.js +532 -0
- data/lib/public/admin/tiny_mce/plugins/advlink/langs/en_dlg.js +54 -0
- data/lib/public/admin/tiny_mce/plugins/advlink/link.htm +338 -0
- data/lib/public/admin/tiny_mce/plugins/advlist/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/advlist/editor_plugin_src.js +176 -0
- data/lib/public/admin/tiny_mce/plugins/autolink/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/autolink/editor_plugin_src.js +172 -0
- data/lib/public/admin/tiny_mce/plugins/autoresize/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/autoresize/editor_plugin_src.js +137 -0
- data/lib/public/admin/tiny_mce/plugins/autosave/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/autosave/editor_plugin_src.js +431 -0
- data/lib/public/admin/tiny_mce/plugins/autosave/langs/en.js +4 -0
- data/lib/public/admin/tiny_mce/plugins/bbcode/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/bbcode/editor_plugin_src.js +120 -0
- data/lib/public/admin/tiny_mce/plugins/contextmenu/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/contextmenu/editor_plugin_src.js +160 -0
- data/lib/public/admin/tiny_mce/plugins/directionality/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/directionality/editor_plugin_src.js +82 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/editor_plugin_src.js +43 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/emotions.htm +41 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-cool.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-cry.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-embarassed.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-frown.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-innocent.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-kiss.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-laughing.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-sealed.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-smile.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-surprised.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-undecided.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-wink.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-yell.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/js/emotions.js +22 -0
- data/lib/public/admin/tiny_mce/plugins/emotions/langs/en_dlg.js +20 -0
- data/lib/public/admin/tiny_mce/plugins/example/dialog.htm +22 -0
- data/lib/public/admin/tiny_mce/plugins/example/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/example/editor_plugin_src.js +84 -0
- data/lib/public/admin/tiny_mce/plugins/example/img/example.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/example/js/dialog.js +19 -0
- data/lib/public/admin/tiny_mce/plugins/example/langs/en.js +3 -0
- data/lib/public/admin/tiny_mce/plugins/example/langs/en_dlg.js +3 -0
- data/lib/public/admin/tiny_mce/plugins/example_dependency/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/example_dependency/editor_plugin_src.js +50 -0
- data/lib/public/admin/tiny_mce/plugins/fullpage/css/fullpage.css +143 -0
- data/lib/public/admin/tiny_mce/plugins/fullpage/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/fullpage/editor_plugin_src.js +399 -0
- data/lib/public/admin/tiny_mce/plugins/fullpage/fullpage.htm +259 -0
- data/lib/public/admin/tiny_mce/plugins/fullpage/js/fullpage.js +232 -0
- data/lib/public/admin/tiny_mce/plugins/fullpage/langs/en_dlg.js +85 -0
- data/lib/public/admin/tiny_mce/plugins/fullscreen/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/fullscreen/editor_plugin_src.js +159 -0
- data/lib/public/admin/tiny_mce/plugins/fullscreen/fullscreen.htm +109 -0
- data/lib/public/admin/tiny_mce/plugins/iespell/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/iespell/editor_plugin_src.js +54 -0
- data/lib/public/admin/tiny_mce/plugins/inlinepopups/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +699 -0
- data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +90 -0
- data/lib/public/admin/tiny_mce/plugins/inlinepopups/template.htm +387 -0
- data/lib/public/admin/tiny_mce/plugins/insertdatetime/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/insertdatetime/editor_plugin_src.js +83 -0
- data/lib/public/admin/tiny_mce/plugins/layer/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/layer/editor_plugin_src.js +214 -0
- data/lib/public/admin/tiny_mce/plugins/legacyoutput/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/legacyoutput/editor_plugin_src.js +139 -0
- data/lib/public/admin/tiny_mce/plugins/lists/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/lists/editor_plugin_src.js +769 -0
- data/lib/public/admin/tiny_mce/plugins/media/css/media.css +17 -0
- data/lib/public/admin/tiny_mce/plugins/media/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/media/editor_plugin_src.js +822 -0
- data/lib/public/admin/tiny_mce/plugins/media/js/embed.js +73 -0
- data/lib/public/admin/tiny_mce/plugins/media/js/media.js +389 -0
- data/lib/public/admin/tiny_mce/plugins/media/langs/en_dlg.js +112 -0
- data/lib/public/admin/tiny_mce/plugins/media/media.htm +897 -0
- data/lib/public/admin/tiny_mce/plugins/media/moxieplayer.swf +0 -0
- data/lib/public/admin/tiny_mce/plugins/nonbreaking/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/nonbreaking/editor_plugin_src.js +53 -0
- data/lib/public/admin/tiny_mce/plugins/noneditable/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/noneditable/editor_plugin_src.js +95 -0
- data/lib/public/admin/tiny_mce/plugins/pagebreak/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/pagebreak/editor_plugin_src.js +74 -0
- data/lib/public/admin/tiny_mce/plugins/paste/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/paste/editor_plugin_src.js +942 -0
- data/lib/public/admin/tiny_mce/plugins/paste/js/pastetext.js +36 -0
- data/lib/public/admin/tiny_mce/plugins/paste/js/pasteword.js +51 -0
- data/lib/public/admin/tiny_mce/plugins/paste/langs/en_dlg.js +5 -0
- data/lib/public/admin/tiny_mce/plugins/paste/pastetext.htm +27 -0
- data/lib/public/admin/tiny_mce/plugins/paste/pasteword.htm +21 -0
- data/lib/public/admin/tiny_mce/plugins/preview/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/preview/editor_plugin_src.js +53 -0
- data/lib/public/admin/tiny_mce/plugins/preview/example.html +28 -0
- data/lib/public/admin/tiny_mce/plugins/preview/jscripts/embed.js +73 -0
- data/lib/public/admin/tiny_mce/plugins/preview/preview.html +17 -0
- data/lib/public/admin/tiny_mce/plugins/print/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/print/editor_plugin_src.js +34 -0
- data/lib/public/admin/tiny_mce/plugins/save/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/save/editor_plugin_src.js +101 -0
- data/lib/public/admin/tiny_mce/plugins/searchreplace/css/searchreplace.css +6 -0
- data/lib/public/admin/tiny_mce/plugins/searchreplace/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/searchreplace/editor_plugin_src.js +61 -0
- data/lib/public/admin/tiny_mce/plugins/searchreplace/js/searchreplace.js +142 -0
- data/lib/public/admin/tiny_mce/plugins/searchreplace/langs/en_dlg.js +16 -0
- data/lib/public/admin/tiny_mce/plugins/searchreplace/searchreplace.htm +100 -0
- data/lib/public/admin/tiny_mce/plugins/spellchecker/css/content.css +1 -0
- data/lib/public/admin/tiny_mce/plugins/spellchecker/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/spellchecker/editor_plugin_src.js +434 -0
- data/lib/public/admin/tiny_mce/plugins/spellchecker/img/wline.gif +0 -0
- data/lib/public/admin/tiny_mce/plugins/style/css/props.css +13 -0
- data/lib/public/admin/tiny_mce/plugins/style/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/style/editor_plugin_src.js +55 -0
- data/lib/public/admin/tiny_mce/plugins/style/js/props.js +635 -0
- data/lib/public/admin/tiny_mce/plugins/style/langs/en_dlg.js +70 -0
- data/lib/public/admin/tiny_mce/plugins/style/props.htm +840 -0
- data/lib/public/admin/tiny_mce/plugins/tabfocus/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/tabfocus/editor_plugin_src.js +122 -0
- data/lib/public/admin/tiny_mce/plugins/table/cell.htm +180 -0
- data/lib/public/admin/tiny_mce/plugins/table/css/cell.css +17 -0
- data/lib/public/admin/tiny_mce/plugins/table/css/row.css +25 -0
- data/lib/public/admin/tiny_mce/plugins/table/css/table.css +13 -0
- data/lib/public/admin/tiny_mce/plugins/table/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/table/editor_plugin_src.js +1363 -0
- data/lib/public/admin/tiny_mce/plugins/table/js/cell.js +319 -0
- data/lib/public/admin/tiny_mce/plugins/table/js/merge_cells.js +27 -0
- data/lib/public/admin/tiny_mce/plugins/table/js/row.js +237 -0
- data/lib/public/admin/tiny_mce/plugins/table/js/table.js +450 -0
- data/lib/public/admin/tiny_mce/plugins/table/langs/en_dlg.js +75 -0
- data/lib/public/admin/tiny_mce/plugins/table/merge_cells.htm +32 -0
- data/lib/public/admin/tiny_mce/plugins/table/row.htm +158 -0
- data/lib/public/admin/tiny_mce/plugins/table/table.htm +188 -0
- data/lib/public/admin/tiny_mce/plugins/template/blank.htm +12 -0
- data/lib/public/admin/tiny_mce/plugins/template/css/template.css +23 -0
- data/lib/public/admin/tiny_mce/plugins/template/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/template/editor_plugin_src.js +159 -0
- data/lib/public/admin/tiny_mce/plugins/template/js/template.js +106 -0
- data/lib/public/admin/tiny_mce/plugins/template/langs/en_dlg.js +15 -0
- data/lib/public/admin/tiny_mce/plugins/template/template.htm +31 -0
- data/lib/public/admin/tiny_mce/plugins/visualchars/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/visualchars/editor_plugin_src.js +83 -0
- data/lib/public/admin/tiny_mce/plugins/wordcount/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/wordcount/editor_plugin_src.js +114 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/abbr.htm +142 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/acronym.htm +142 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/attributes.htm +149 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/cite.htm +142 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/css/attributes.css +11 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/css/popup.css +9 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/del.htm +162 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/editor_plugin.js +1 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js +132 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/ins.htm +162 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/js/abbr.js +28 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/js/acronym.js +28 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/js/attributes.js +111 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/js/cite.js +28 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/js/del.js +53 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/js/element_common.js +229 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/js/ins.js +53 -0
- data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js +32 -0
- data/lib/public/admin/tiny_mce/themes/advanced/about.htm +52 -0
- data/lib/public/admin/tiny_mce/themes/advanced/anchor.htm +26 -0
- data/lib/public/admin/tiny_mce/themes/advanced/charmap.htm +51 -0
- data/lib/public/admin/tiny_mce/themes/advanced/color_picker.htm +74 -0
- data/lib/public/admin/tiny_mce/themes/advanced/editor_template.js +1 -0
- data/lib/public/admin/tiny_mce/themes/advanced/editor_template_src.js +1358 -0
- data/lib/public/admin/tiny_mce/themes/advanced/image.htm +80 -0
- data/lib/public/admin/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/img/flash.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/img/icons.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/img/iframe.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/img/trans.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/img/video.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/js/about.js +73 -0
- data/lib/public/admin/tiny_mce/themes/advanced/js/anchor.js +42 -0
- data/lib/public/admin/tiny_mce/themes/advanced/js/charmap.js +355 -0
- data/lib/public/admin/tiny_mce/themes/advanced/js/color_picker.js +329 -0
- data/lib/public/admin/tiny_mce/themes/advanced/js/image.js +247 -0
- data/lib/public/admin/tiny_mce/themes/advanced/js/link.js +153 -0
- data/lib/public/admin/tiny_mce/themes/advanced/js/source_editor.js +56 -0
- data/lib/public/admin/tiny_mce/themes/advanced/langs/en.js +68 -0
- data/lib/public/admin/tiny_mce/themes/advanced/langs/en_dlg.js +54 -0
- data/lib/public/admin/tiny_mce/themes/advanced/link.htm +57 -0
- data/lib/public/admin/tiny_mce/themes/advanced/shortcuts.htm +47 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/default/content.css +48 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/default/dialog.css +117 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/default/ui.css +214 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/highcontrast/content.css +23 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +105 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/highcontrast/ui.css +102 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/content.css +47 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/dialog.css +117 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/ui.css +217 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +8 -0
- data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -0
- data/lib/public/admin/tiny_mce/themes/advanced/source_editor.htm +25 -0
- data/lib/public/admin/tiny_mce/themes/simple/editor_template.js +1 -0
- data/lib/public/admin/tiny_mce/themes/simple/editor_template_src.js +84 -0
- data/lib/public/admin/tiny_mce/themes/simple/img/icons.gif +0 -0
- data/lib/public/admin/tiny_mce/themes/simple/langs/en.js +11 -0
- data/lib/public/admin/tiny_mce/themes/simple/skins/default/content.css +25 -0
- data/lib/public/admin/tiny_mce/themes/simple/skins/default/ui.css +32 -0
- data/lib/public/admin/tiny_mce/themes/simple/skins/o2k7/content.css +17 -0
- data/lib/public/admin/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png +0 -0
- data/lib/public/admin/tiny_mce/themes/simple/skins/o2k7/ui.css +35 -0
- data/lib/public/admin/tiny_mce/tiny_mce.js +1 -0
- data/lib/public/admin/tiny_mce/tiny_mce_popup.js +5 -0
- data/lib/public/admin/tiny_mce/tiny_mce_src.js +15519 -0
- data/lib/public/admin/tiny_mce/utils/editable_selects.js +70 -0
- data/lib/public/admin/tiny_mce/utils/form_utils.js +210 -0
- data/lib/public/admin/tiny_mce/utils/mctabs.js +162 -0
- data/lib/public/admin/tiny_mce/utils/validate.js +252 -0
- data/lib/yodel_admin.rb +3 -0
- data/yodel_admin.gemspec +22 -0
- metadata +365 -0
@@ -0,0 +1,98 @@
|
|
1
|
+
class AdminDefaultPagesMigration < Migration
|
2
|
+
def self.up(site)
|
3
|
+
home_page = site.pages.where(path: '/').first
|
4
|
+
|
5
|
+
# root admin page
|
6
|
+
admin = site.admin_root_pages.new
|
7
|
+
admin.title = 'Admin'
|
8
|
+
admin.parent = home_page
|
9
|
+
admin.save
|
10
|
+
|
11
|
+
# pages
|
12
|
+
pages = site.admin_tree_pages.new
|
13
|
+
pages.title = 'Pages'
|
14
|
+
pages.parent = admin
|
15
|
+
pages.root = home_page
|
16
|
+
pages.save
|
17
|
+
|
18
|
+
# users
|
19
|
+
users = site.admin_list_pages.new
|
20
|
+
users.title = 'Users'
|
21
|
+
users.parent = admin
|
22
|
+
users.record_model = site.users
|
23
|
+
name_col = users.columns.new
|
24
|
+
name_col.name = 'name'
|
25
|
+
name_col.style = 'Text'
|
26
|
+
name_col.save
|
27
|
+
email_col = users.columns.new
|
28
|
+
email_col.name = 'email'
|
29
|
+
email_col.style = 'Text'
|
30
|
+
email_col.save
|
31
|
+
signup_col = users.columns.new
|
32
|
+
signup_col.name = 'created_at'
|
33
|
+
signup_col.as = 'Signup Date'
|
34
|
+
signup_col.style = 'Date'
|
35
|
+
signup_col.default_sort = true
|
36
|
+
signup_col.save
|
37
|
+
users.save
|
38
|
+
|
39
|
+
# edit
|
40
|
+
edit_page = site.admin_editor_pages.new
|
41
|
+
edit_page.title = 'Edit'
|
42
|
+
edit_page.parent = admin
|
43
|
+
edit_page.save
|
44
|
+
|
45
|
+
# settings
|
46
|
+
settings_page = site.admin_settings_pages.new
|
47
|
+
settings_page.title = 'Settings'
|
48
|
+
settings_page.parent = admin
|
49
|
+
settings_page.save
|
50
|
+
|
51
|
+
# syncing
|
52
|
+
sync_page = site.admin_sync_pages.new
|
53
|
+
sync_page.title = 'Sync'
|
54
|
+
sync_page.parent = admin
|
55
|
+
sync_page.save
|
56
|
+
|
57
|
+
# login
|
58
|
+
login_page = site.login_pages.new
|
59
|
+
login_page.title = 'Login'
|
60
|
+
login_page.page_layout = 'admin_login'
|
61
|
+
login_page.username_field = 'email'
|
62
|
+
login_page.redirect_to = admin
|
63
|
+
login_page.parent = admin
|
64
|
+
login_page.save
|
65
|
+
|
66
|
+
# logout
|
67
|
+
logout_page = site.logout_pages.new
|
68
|
+
logout_page.title = 'Logout'
|
69
|
+
logout_page.redirect_to = admin
|
70
|
+
logout_page.parent = admin
|
71
|
+
logout_page.save
|
72
|
+
|
73
|
+
# nav
|
74
|
+
nav = site.menus.new
|
75
|
+
nav.root = admin
|
76
|
+
nav.name = 'nav'
|
77
|
+
edit_exc = nav.exceptions.new
|
78
|
+
edit_exc.page = edit_page
|
79
|
+
edit_exc.save
|
80
|
+
settings_exc = nav.exceptions.new
|
81
|
+
settings_exc.page = settings_page
|
82
|
+
settings_exc.save
|
83
|
+
sync_exc = nav.exceptions.new
|
84
|
+
sync_exc.page = sync_page
|
85
|
+
sync_exc.save
|
86
|
+
login_exc = nav.exceptions.new
|
87
|
+
login_exc.page = login_page
|
88
|
+
login_exc.save
|
89
|
+
logout_exc = nav.exceptions.new
|
90
|
+
logout_exc.page = logout_page
|
91
|
+
logout_exc.save
|
92
|
+
nav.save
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.down(site)
|
96
|
+
site.pages.where(path: '/admin').first.destroy
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class AdminEditorPage < Page
|
2
|
+
|
3
|
+
class Editor
|
4
|
+
attr_reader :name, :command
|
5
|
+
def exists?; path.present?; end
|
6
|
+
def path; @path ||= `which #{@command}`.strip; end
|
7
|
+
def edit(site); `#{path} #{site.root_directory}`; end
|
8
|
+
def initialize(name, command)
|
9
|
+
@name = name
|
10
|
+
@command = command
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
EDITORS = [Editor.new('TextMate', 'mate')]
|
15
|
+
|
16
|
+
def self.available_editors
|
17
|
+
@available_editors ||= EDITORS.select(&:exists?)
|
18
|
+
end
|
19
|
+
|
20
|
+
respond_to :get do
|
21
|
+
with :html do
|
22
|
+
if params['editor']
|
23
|
+
EDITORS.find {|e| e.command == params['editor']}.try(:edit, site)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
class AdminListPage < RecordProxyPage
|
2
|
+
respond_to :get do
|
3
|
+
with :html do
|
4
|
+
if params['new']
|
5
|
+
@record = new_record
|
6
|
+
render_layout(show_record_layout, :html)
|
7
|
+
else
|
8
|
+
super()
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def render_value(record, column)
|
14
|
+
if column.name.include?('.')
|
15
|
+
parts = column.name.split('.')
|
16
|
+
raw_value = record
|
17
|
+
until parts.empty?
|
18
|
+
raw_value = raw_value.try(parts.shift)
|
19
|
+
end
|
20
|
+
else
|
21
|
+
raw_value = record.get(column.name)
|
22
|
+
end
|
23
|
+
value = ''
|
24
|
+
|
25
|
+
case column.style
|
26
|
+
when 'Text'
|
27
|
+
value = raw_value
|
28
|
+
|
29
|
+
when 'Boolean'
|
30
|
+
raw_value = raw_value ? column.true_text : column.false_text
|
31
|
+
value = raw_value
|
32
|
+
|
33
|
+
when 'Integer'
|
34
|
+
raw_value = raw_value.to_i
|
35
|
+
value = raw_value
|
36
|
+
|
37
|
+
when 'Float'
|
38
|
+
raw_value = raw_value.to_f
|
39
|
+
value = raw_value.round(column.decimals)
|
40
|
+
|
41
|
+
when 'Currency'
|
42
|
+
raw_value = raw_value.to_f
|
43
|
+
value = "#{symbol}#{raw_value.round(column.decimals)}"
|
44
|
+
|
45
|
+
when 'Percentage'
|
46
|
+
raw_value = raw_value.to_f
|
47
|
+
value = "#{raw_value.round(column.decimals)}%"
|
48
|
+
|
49
|
+
when 'Date'
|
50
|
+
if column.format
|
51
|
+
value = raw_value.strftime(column.format)
|
52
|
+
else
|
53
|
+
value = raw_value.strftime('%F')
|
54
|
+
end
|
55
|
+
raw_value = raw_value.strftime('%F %T')
|
56
|
+
|
57
|
+
when 'Time'
|
58
|
+
if column.format
|
59
|
+
value = raw_value.strftime(column.format)
|
60
|
+
else
|
61
|
+
value = raw_value.strftime('%R')
|
62
|
+
end
|
63
|
+
raw_value = raw_value.strftime('%T')
|
64
|
+
|
65
|
+
when 'DateTime'
|
66
|
+
if column.format
|
67
|
+
value = raw_value.strftime(column.format)
|
68
|
+
else
|
69
|
+
value = raw_value.strftime('%F %R')
|
70
|
+
end
|
71
|
+
raw_value = raw_value.strftime('%F %T')
|
72
|
+
|
73
|
+
when 'Label'
|
74
|
+
label_color = column.colors.find {|label_color| label_color.label == raw_value}
|
75
|
+
value = "<span style='background-color: ##{label_color.try(:color)}'>#{raw_value}</span>"
|
76
|
+
end
|
77
|
+
|
78
|
+
"<td data-value='#{raw_value}'>#{value}</td>"
|
79
|
+
end
|
80
|
+
|
81
|
+
def render_record(record)
|
82
|
+
cells = columns.collect {|column| render_value(record, column)}.join
|
83
|
+
"<tr data-record-id='#{record.id}'>#{cells}</tr>"
|
84
|
+
end
|
85
|
+
|
86
|
+
def parser_for_column(column)
|
87
|
+
case column.style
|
88
|
+
when 'Text'
|
89
|
+
'text'
|
90
|
+
when 'Boolean'
|
91
|
+
'text'
|
92
|
+
when 'Integer'
|
93
|
+
'digit'
|
94
|
+
when 'Float'
|
95
|
+
'digit'
|
96
|
+
when 'Currency'
|
97
|
+
'digit'
|
98
|
+
when 'Percentage'
|
99
|
+
'digit'
|
100
|
+
when 'Date'
|
101
|
+
'isoDate'
|
102
|
+
when 'Time'
|
103
|
+
'time'
|
104
|
+
when 'DateTime'
|
105
|
+
'isoDate'
|
106
|
+
when 'Label'
|
107
|
+
'text'
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def sort_list
|
112
|
+
columns.each_with_index do |column, index|
|
113
|
+
return "[[#{index}, 0]]" if column.default_sort
|
114
|
+
end
|
115
|
+
"[[0, 0]]"
|
116
|
+
end
|
117
|
+
|
118
|
+
def format_record(record)
|
119
|
+
{record: record, name: record.name, '_row_html' => render_record(record)}
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class AdminSettingsPage < Page
|
2
|
+
# TODO: when Site is changed to become a normal MongoRecord, this should
|
3
|
+
# be replaced with a plain Page, no need for anything special
|
4
|
+
respond_to :get do
|
5
|
+
with :html do
|
6
|
+
return unless user_allowed_to?(:view)
|
7
|
+
layout('html', false).render(self)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
respond_to :put do
|
12
|
+
with :html do
|
13
|
+
return unless user_allowed_to?(:update)
|
14
|
+
site.name = params['name']
|
15
|
+
site.domains = params['domains']
|
16
|
+
site.save
|
17
|
+
response.redirect '/admin/settings'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
class AdminSyncPage < Page
|
2
|
+
REMOTE_NAME = 'yodel'
|
3
|
+
|
4
|
+
respond_to :get do
|
5
|
+
with :json do
|
6
|
+
return {success: false, requires_push: true} if site.remote_id.nil?
|
7
|
+
|
8
|
+
conflicts = pull
|
9
|
+
if conflicts.empty?
|
10
|
+
{success: true}
|
11
|
+
else
|
12
|
+
{success: false, conflicts: conflicts}
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
respond_to :post do
|
18
|
+
with :json do
|
19
|
+
if params['remote']
|
20
|
+
remote = Remote.find(BSON::ObjectId.from_string(params['remote']))
|
21
|
+
response = remote.create_site
|
22
|
+
return response if !response['success']
|
23
|
+
|
24
|
+
# link the current site to the new remote
|
25
|
+
site.remote = remote
|
26
|
+
site.remote_id = response['id']
|
27
|
+
|
28
|
+
# add a default domain for the remote
|
29
|
+
raise "Could not find default yodel domain" if site.local_domain.nil?
|
30
|
+
site.domains << "#{site.local_domain.gsub('.yodel', '')}.#{remote.host}"
|
31
|
+
site.save
|
32
|
+
|
33
|
+
# assign git remote
|
34
|
+
Dir.chdir(site.root_directory.to_s) do
|
35
|
+
`#{Yodel.config.git_path} remote rm #{REMOTE_NAME}`
|
36
|
+
`#{Yodel.config.git_path} remote add #{REMOTE_NAME} #{remote.git_url(site.remote_id)}`
|
37
|
+
end
|
38
|
+
{success: true}
|
39
|
+
else
|
40
|
+
conflicts = pull
|
41
|
+
if conflicts.empty?
|
42
|
+
Dir.chdir(site.root_directory.to_s) do
|
43
|
+
{success: true, status: `#{Yodel.config.git_path} push #{REMOTE_NAME} master`, remoteDomain: site.remote_domains.first}
|
44
|
+
end
|
45
|
+
else
|
46
|
+
{success: false, conflicts: conflicts}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
def commit
|
54
|
+
Dir.chdir(site.root_directory.to_s) do
|
55
|
+
status = `#{Yodel.config.git_path} status -z`.split("\0").collect(&:strip)
|
56
|
+
status.each do |change|
|
57
|
+
state, file = change.split
|
58
|
+
`#{Yodel.config.git_path} add #{file}` if state == '??' || state.include?('U')
|
59
|
+
end
|
60
|
+
|
61
|
+
unless status.empty?
|
62
|
+
`#{Yodel.config.git_path} commit -a --allow-empty-message -m ''`
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def pull
|
68
|
+
conflicts = []
|
69
|
+
commit
|
70
|
+
|
71
|
+
Dir.chdir(site.root_directory.to_s) do
|
72
|
+
`#{Yodel.config.git_path} pull #{REMOTE_NAME} master`
|
73
|
+
status = `#{Yodel.config.git_path} status -z`.split("\0").collect(&:strip)
|
74
|
+
status.each do |change|
|
75
|
+
state, file = change.split
|
76
|
+
conflicts << file if state.include?('U')
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
conflicts
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
class AdminTreePage < Page
|
2
|
+
# ---------------------------
|
3
|
+
# show
|
4
|
+
# ---------------------------
|
5
|
+
respond_to :get do
|
6
|
+
with :html do
|
7
|
+
return unless user_allowed_to?(:view)
|
8
|
+
case params['action']
|
9
|
+
# render the main page
|
10
|
+
when nil
|
11
|
+
@record = root
|
12
|
+
layout('html', false).render(self)
|
13
|
+
|
14
|
+
# show a single record
|
15
|
+
when 'show'
|
16
|
+
@record = site.records.find(BSON::ObjectId.from_string(params['id']))
|
17
|
+
render_layout('admin_record_form', 'html')
|
18
|
+
|
19
|
+
# show a blank form for a new record
|
20
|
+
when 'new'
|
21
|
+
model = site.models.find(BSON::ObjectId.from_string(params['model']))
|
22
|
+
parent = site.records.find(BSON::ObjectId.from_string(params['parent']))
|
23
|
+
@record = model.new
|
24
|
+
@record.parent = parent
|
25
|
+
render_layout('admin_record_form', 'html')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# render a record tree in json
|
30
|
+
with :json do
|
31
|
+
status 404 and return {} if root.nil?
|
32
|
+
if params['id']
|
33
|
+
record = site.records.find(BSON::ObjectId.from_string(params['id']))
|
34
|
+
tree_for(record, true)
|
35
|
+
else
|
36
|
+
tree_for(root, true)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
# ---------------------------
|
43
|
+
# delete
|
44
|
+
# ---------------------------
|
45
|
+
respond_to :delete do
|
46
|
+
with :json do
|
47
|
+
record = site.records.find(BSON::ObjectId.from_string(params['id']))
|
48
|
+
record.destroy
|
49
|
+
{success: true}
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
# ---------------------------
|
55
|
+
# update
|
56
|
+
# ---------------------------
|
57
|
+
respond_to :put do
|
58
|
+
with :json do
|
59
|
+
record = site.records.find(BSON::ObjectId.from_string(params['id']))
|
60
|
+
|
61
|
+
case params['action']
|
62
|
+
# udpate the record
|
63
|
+
when nil
|
64
|
+
if params.key?('record')
|
65
|
+
values = JSON.parse(params['record'])
|
66
|
+
else
|
67
|
+
values = params
|
68
|
+
end
|
69
|
+
|
70
|
+
if record.from_json(values)
|
71
|
+
{success: true, record: json_for_record(record, false, []).merge({values: record.to_json})}
|
72
|
+
else
|
73
|
+
{success: false, errors: record.errors}
|
74
|
+
end
|
75
|
+
|
76
|
+
# change the index of an existing record
|
77
|
+
when 'set_index'
|
78
|
+
record.insert_in_siblings(params['index'].to_i)
|
79
|
+
if record.save
|
80
|
+
{success: true}
|
81
|
+
else
|
82
|
+
{success: false}
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
# ---------------------------
|
90
|
+
# create
|
91
|
+
# ---------------------------
|
92
|
+
respond_to :post do
|
93
|
+
with :json do
|
94
|
+
# FIXME: this is copied from page.rb - should be extracted
|
95
|
+
model = site.models.find(BSON::ObjectId.from_string(params.delete('model')))
|
96
|
+
parent = site.records.find(BSON::ObjectId.from_string(params.delete('parent')))
|
97
|
+
new_record = model.new
|
98
|
+
new_record.parent = parent
|
99
|
+
|
100
|
+
if params.key?('record')
|
101
|
+
values = JSON.parse(params['record'])
|
102
|
+
else
|
103
|
+
values = params
|
104
|
+
end
|
105
|
+
|
106
|
+
if new_record.from_json(values)
|
107
|
+
{success: true, record: json_for_record(new_record, false, []).merge({values: new_record.to_json})}
|
108
|
+
else
|
109
|
+
{success: false, errors: new_record.errors}
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
private
|
116
|
+
def tree_for(record, root)
|
117
|
+
if record.model.menu_root? && !root
|
118
|
+
children = []
|
119
|
+
else
|
120
|
+
children = record.children.select {|record| visible_record(record)}.collect {|child| tree_for(child, false)}
|
121
|
+
end
|
122
|
+
json_for_record(record, root, children)
|
123
|
+
end
|
124
|
+
|
125
|
+
def json_for_record(record, root, children)
|
126
|
+
{ id: record.id,
|
127
|
+
index: record.index,
|
128
|
+
name: record.name,
|
129
|
+
icon: record.model.icon,
|
130
|
+
type: record.model_name,
|
131
|
+
root: root,
|
132
|
+
menu_root: root ? false : record.model.menu_root?,
|
133
|
+
parent_id: record.parent ? record.parent.id.to_s : '',
|
134
|
+
children: children
|
135
|
+
}
|
136
|
+
end
|
137
|
+
|
138
|
+
def visible_record(record)
|
139
|
+
!record.model.hide_in_admin
|
140
|
+
end
|
141
|
+
end
|
Binary file
|