yodel_admin 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (321) hide show
  1. data/.gitignore +6 -0
  2. data/Gemfile +4 -0
  3. data/Rakefile +1 -0
  4. data/lib/layouts/admin_list_record.html +94 -0
  5. data/lib/layouts/admin_login.html +131 -0
  6. data/lib/layouts/admin_page/admin_list_page.html +55 -0
  7. data/lib/layouts/admin_page/admin_settings_page.html +34 -0
  8. data/lib/layouts/admin_page/admin_tree_page.html +51 -0
  9. data/lib/layouts/admin_page.html +56 -0
  10. data/lib/layouts/admin_record_form.html +74 -0
  11. data/lib/migrations/01_admin_pages.rb +99 -0
  12. data/lib/migrations/02_admin_default_pages.rb +98 -0
  13. data/lib/models/admin_editor_page.rb +27 -0
  14. data/lib/models/admin_list_page.rb +121 -0
  15. data/lib/models/admin_root_page.rb +9 -0
  16. data/lib/models/admin_settings_page.rb +20 -0
  17. data/lib/models/admin_sync_page.rb +82 -0
  18. data/lib/models/admin_tree_page.rb +141 -0
  19. data/lib/public/admin/chosen/chosen-sprite.png +0 -0
  20. data/lib/public/admin/chosen/chosen.css +340 -0
  21. data/lib/public/admin/chosen/chosen.jquery.min.js +10 -0
  22. data/lib/public/admin/css/admin.css +1086 -0
  23. data/lib/public/admin/css/reset.css +48 -0
  24. data/lib/public/admin/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  25. data/lib/public/admin/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  26. data/lib/public/admin/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  27. data/lib/public/admin/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  28. data/lib/public/admin/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  29. data/lib/public/admin/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  30. data/lib/public/admin/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  31. data/lib/public/admin/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  32. data/lib/public/admin/css/smoothness/images/ui-icons_222222_256x240.png +0 -0
  33. data/lib/public/admin/css/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  34. data/lib/public/admin/css/smoothness/images/ui-icons_454545_256x240.png +0 -0
  35. data/lib/public/admin/css/smoothness/images/ui-icons_888888_256x240.png +0 -0
  36. data/lib/public/admin/css/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  37. data/lib/public/admin/css/smoothness/jquery-ui-1.8.16.custom.css +380 -0
  38. data/lib/public/admin/images/add.png +0 -0
  39. data/lib/public/admin/images/clock.png +0 -0
  40. data/lib/public/admin/images/close.png +0 -0
  41. data/lib/public/admin/images/cross.png +0 -0
  42. data/lib/public/admin/images/default_icon.png +0 -0
  43. data/lib/public/admin/images/delete.png +0 -0
  44. data/lib/public/admin/images/deploy_spinner.gif +0 -0
  45. data/lib/public/admin/images/drag.png +0 -0
  46. data/lib/public/admin/images/group_icon.png +0 -0
  47. data/lib/public/admin/images/left_arrow.png +0 -0
  48. data/lib/public/admin/images/load_spinner.gif +0 -0
  49. data/lib/public/admin/images/load_spinner_selected.gif +0 -0
  50. data/lib/public/admin/images/missing_image.png +0 -0
  51. data/lib/public/admin/images/new.png +0 -0
  52. data/lib/public/admin/images/open.png +0 -0
  53. data/lib/public/admin/images/right_arrow.png +0 -0
  54. data/lib/public/admin/images/save_spinner.gif +0 -0
  55. data/lib/public/admin/images/search.png +0 -0
  56. data/lib/public/admin/images/tick.png +0 -0
  57. data/lib/public/admin/images/user_icon.png +0 -0
  58. data/lib/public/admin/images/yodel.png +0 -0
  59. data/lib/public/admin/js/admin.js +1030 -0
  60. data/lib/public/admin/js/jquery-ui-1.8.16.custom.min.js +227 -0
  61. data/lib/public/admin/js/jquery.min.js +18 -0
  62. data/lib/public/admin/js/jquery.tablesorter.min.js +4 -0
  63. data/lib/public/admin/js/json2.js +480 -0
  64. data/lib/public/admin/js/yodel_jquery.js +241 -0
  65. data/lib/public/admin/tiny_mce/jquery.tinymce.js +338 -0
  66. data/lib/public/admin/tiny_mce/langs/en.js +223 -0
  67. data/lib/public/admin/tiny_mce/license.txt +504 -0
  68. data/lib/public/admin/tiny_mce/plugins/advhr/css/advhr.css +5 -0
  69. data/lib/public/admin/tiny_mce/plugins/advhr/editor_plugin.js +1 -0
  70. data/lib/public/admin/tiny_mce/plugins/advhr/editor_plugin_src.js +57 -0
  71. data/lib/public/admin/tiny_mce/plugins/advhr/js/rule.js +43 -0
  72. data/lib/public/admin/tiny_mce/plugins/advhr/langs/en_dlg.js +7 -0
  73. data/lib/public/admin/tiny_mce/plugins/advhr/rule.htm +58 -0
  74. data/lib/public/admin/tiny_mce/plugins/advimage/css/advimage.css +13 -0
  75. data/lib/public/admin/tiny_mce/plugins/advimage/editor_plugin.js +1 -0
  76. data/lib/public/admin/tiny_mce/plugins/advimage/editor_plugin_src.js +50 -0
  77. data/lib/public/admin/tiny_mce/plugins/advimage/image.htm +235 -0
  78. data/lib/public/admin/tiny_mce/plugins/advimage/img/sample.gif +0 -0
  79. data/lib/public/admin/tiny_mce/plugins/advimage/js/image.js +458 -0
  80. data/lib/public/admin/tiny_mce/plugins/advimage/langs/en_dlg.js +45 -0
  81. data/lib/public/admin/tiny_mce/plugins/advlink/css/advlink.css +8 -0
  82. data/lib/public/admin/tiny_mce/plugins/advlink/editor_plugin.js +1 -0
  83. data/lib/public/admin/tiny_mce/plugins/advlink/editor_plugin_src.js +61 -0
  84. data/lib/public/admin/tiny_mce/plugins/advlink/js/advlink.js +532 -0
  85. data/lib/public/admin/tiny_mce/plugins/advlink/langs/en_dlg.js +54 -0
  86. data/lib/public/admin/tiny_mce/plugins/advlink/link.htm +338 -0
  87. data/lib/public/admin/tiny_mce/plugins/advlist/editor_plugin.js +1 -0
  88. data/lib/public/admin/tiny_mce/plugins/advlist/editor_plugin_src.js +176 -0
  89. data/lib/public/admin/tiny_mce/plugins/autolink/editor_plugin.js +1 -0
  90. data/lib/public/admin/tiny_mce/plugins/autolink/editor_plugin_src.js +172 -0
  91. data/lib/public/admin/tiny_mce/plugins/autoresize/editor_plugin.js +1 -0
  92. data/lib/public/admin/tiny_mce/plugins/autoresize/editor_plugin_src.js +137 -0
  93. data/lib/public/admin/tiny_mce/plugins/autosave/editor_plugin.js +1 -0
  94. data/lib/public/admin/tiny_mce/plugins/autosave/editor_plugin_src.js +431 -0
  95. data/lib/public/admin/tiny_mce/plugins/autosave/langs/en.js +4 -0
  96. data/lib/public/admin/tiny_mce/plugins/bbcode/editor_plugin.js +1 -0
  97. data/lib/public/admin/tiny_mce/plugins/bbcode/editor_plugin_src.js +120 -0
  98. data/lib/public/admin/tiny_mce/plugins/contextmenu/editor_plugin.js +1 -0
  99. data/lib/public/admin/tiny_mce/plugins/contextmenu/editor_plugin_src.js +160 -0
  100. data/lib/public/admin/tiny_mce/plugins/directionality/editor_plugin.js +1 -0
  101. data/lib/public/admin/tiny_mce/plugins/directionality/editor_plugin_src.js +82 -0
  102. data/lib/public/admin/tiny_mce/plugins/emotions/editor_plugin.js +1 -0
  103. data/lib/public/admin/tiny_mce/plugins/emotions/editor_plugin_src.js +43 -0
  104. data/lib/public/admin/tiny_mce/plugins/emotions/emotions.htm +41 -0
  105. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-cool.gif +0 -0
  106. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-cry.gif +0 -0
  107. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-embarassed.gif +0 -0
  108. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif +0 -0
  109. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-frown.gif +0 -0
  110. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-innocent.gif +0 -0
  111. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-kiss.gif +0 -0
  112. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-laughing.gif +0 -0
  113. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif +0 -0
  114. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-sealed.gif +0 -0
  115. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-smile.gif +0 -0
  116. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-surprised.gif +0 -0
  117. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif +0 -0
  118. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-undecided.gif +0 -0
  119. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-wink.gif +0 -0
  120. data/lib/public/admin/tiny_mce/plugins/emotions/img/smiley-yell.gif +0 -0
  121. data/lib/public/admin/tiny_mce/plugins/emotions/js/emotions.js +22 -0
  122. data/lib/public/admin/tiny_mce/plugins/emotions/langs/en_dlg.js +20 -0
  123. data/lib/public/admin/tiny_mce/plugins/example/dialog.htm +22 -0
  124. data/lib/public/admin/tiny_mce/plugins/example/editor_plugin.js +1 -0
  125. data/lib/public/admin/tiny_mce/plugins/example/editor_plugin_src.js +84 -0
  126. data/lib/public/admin/tiny_mce/plugins/example/img/example.gif +0 -0
  127. data/lib/public/admin/tiny_mce/plugins/example/js/dialog.js +19 -0
  128. data/lib/public/admin/tiny_mce/plugins/example/langs/en.js +3 -0
  129. data/lib/public/admin/tiny_mce/plugins/example/langs/en_dlg.js +3 -0
  130. data/lib/public/admin/tiny_mce/plugins/example_dependency/editor_plugin.js +1 -0
  131. data/lib/public/admin/tiny_mce/plugins/example_dependency/editor_plugin_src.js +50 -0
  132. data/lib/public/admin/tiny_mce/plugins/fullpage/css/fullpage.css +143 -0
  133. data/lib/public/admin/tiny_mce/plugins/fullpage/editor_plugin.js +1 -0
  134. data/lib/public/admin/tiny_mce/plugins/fullpage/editor_plugin_src.js +399 -0
  135. data/lib/public/admin/tiny_mce/plugins/fullpage/fullpage.htm +259 -0
  136. data/lib/public/admin/tiny_mce/plugins/fullpage/js/fullpage.js +232 -0
  137. data/lib/public/admin/tiny_mce/plugins/fullpage/langs/en_dlg.js +85 -0
  138. data/lib/public/admin/tiny_mce/plugins/fullscreen/editor_plugin.js +1 -0
  139. data/lib/public/admin/tiny_mce/plugins/fullscreen/editor_plugin_src.js +159 -0
  140. data/lib/public/admin/tiny_mce/plugins/fullscreen/fullscreen.htm +109 -0
  141. data/lib/public/admin/tiny_mce/plugins/iespell/editor_plugin.js +1 -0
  142. data/lib/public/admin/tiny_mce/plugins/iespell/editor_plugin_src.js +54 -0
  143. data/lib/public/admin/tiny_mce/plugins/inlinepopups/editor_plugin.js +1 -0
  144. data/lib/public/admin/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +699 -0
  145. data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
  146. data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
  147. data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
  148. data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
  149. data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
  150. data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
  151. data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
  152. data/lib/public/admin/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +90 -0
  153. data/lib/public/admin/tiny_mce/plugins/inlinepopups/template.htm +387 -0
  154. data/lib/public/admin/tiny_mce/plugins/insertdatetime/editor_plugin.js +1 -0
  155. data/lib/public/admin/tiny_mce/plugins/insertdatetime/editor_plugin_src.js +83 -0
  156. data/lib/public/admin/tiny_mce/plugins/layer/editor_plugin.js +1 -0
  157. data/lib/public/admin/tiny_mce/plugins/layer/editor_plugin_src.js +214 -0
  158. data/lib/public/admin/tiny_mce/plugins/legacyoutput/editor_plugin.js +1 -0
  159. data/lib/public/admin/tiny_mce/plugins/legacyoutput/editor_plugin_src.js +139 -0
  160. data/lib/public/admin/tiny_mce/plugins/lists/editor_plugin.js +1 -0
  161. data/lib/public/admin/tiny_mce/plugins/lists/editor_plugin_src.js +769 -0
  162. data/lib/public/admin/tiny_mce/plugins/media/css/media.css +17 -0
  163. data/lib/public/admin/tiny_mce/plugins/media/editor_plugin.js +1 -0
  164. data/lib/public/admin/tiny_mce/plugins/media/editor_plugin_src.js +822 -0
  165. data/lib/public/admin/tiny_mce/plugins/media/js/embed.js +73 -0
  166. data/lib/public/admin/tiny_mce/plugins/media/js/media.js +389 -0
  167. data/lib/public/admin/tiny_mce/plugins/media/langs/en_dlg.js +112 -0
  168. data/lib/public/admin/tiny_mce/plugins/media/media.htm +897 -0
  169. data/lib/public/admin/tiny_mce/plugins/media/moxieplayer.swf +0 -0
  170. data/lib/public/admin/tiny_mce/plugins/nonbreaking/editor_plugin.js +1 -0
  171. data/lib/public/admin/tiny_mce/plugins/nonbreaking/editor_plugin_src.js +53 -0
  172. data/lib/public/admin/tiny_mce/plugins/noneditable/editor_plugin.js +1 -0
  173. data/lib/public/admin/tiny_mce/plugins/noneditable/editor_plugin_src.js +95 -0
  174. data/lib/public/admin/tiny_mce/plugins/pagebreak/editor_plugin.js +1 -0
  175. data/lib/public/admin/tiny_mce/plugins/pagebreak/editor_plugin_src.js +74 -0
  176. data/lib/public/admin/tiny_mce/plugins/paste/editor_plugin.js +1 -0
  177. data/lib/public/admin/tiny_mce/plugins/paste/editor_plugin_src.js +942 -0
  178. data/lib/public/admin/tiny_mce/plugins/paste/js/pastetext.js +36 -0
  179. data/lib/public/admin/tiny_mce/plugins/paste/js/pasteword.js +51 -0
  180. data/lib/public/admin/tiny_mce/plugins/paste/langs/en_dlg.js +5 -0
  181. data/lib/public/admin/tiny_mce/plugins/paste/pastetext.htm +27 -0
  182. data/lib/public/admin/tiny_mce/plugins/paste/pasteword.htm +21 -0
  183. data/lib/public/admin/tiny_mce/plugins/preview/editor_plugin.js +1 -0
  184. data/lib/public/admin/tiny_mce/plugins/preview/editor_plugin_src.js +53 -0
  185. data/lib/public/admin/tiny_mce/plugins/preview/example.html +28 -0
  186. data/lib/public/admin/tiny_mce/plugins/preview/jscripts/embed.js +73 -0
  187. data/lib/public/admin/tiny_mce/plugins/preview/preview.html +17 -0
  188. data/lib/public/admin/tiny_mce/plugins/print/editor_plugin.js +1 -0
  189. data/lib/public/admin/tiny_mce/plugins/print/editor_plugin_src.js +34 -0
  190. data/lib/public/admin/tiny_mce/plugins/save/editor_plugin.js +1 -0
  191. data/lib/public/admin/tiny_mce/plugins/save/editor_plugin_src.js +101 -0
  192. data/lib/public/admin/tiny_mce/plugins/searchreplace/css/searchreplace.css +6 -0
  193. data/lib/public/admin/tiny_mce/plugins/searchreplace/editor_plugin.js +1 -0
  194. data/lib/public/admin/tiny_mce/plugins/searchreplace/editor_plugin_src.js +61 -0
  195. data/lib/public/admin/tiny_mce/plugins/searchreplace/js/searchreplace.js +142 -0
  196. data/lib/public/admin/tiny_mce/plugins/searchreplace/langs/en_dlg.js +16 -0
  197. data/lib/public/admin/tiny_mce/plugins/searchreplace/searchreplace.htm +100 -0
  198. data/lib/public/admin/tiny_mce/plugins/spellchecker/css/content.css +1 -0
  199. data/lib/public/admin/tiny_mce/plugins/spellchecker/editor_plugin.js +1 -0
  200. data/lib/public/admin/tiny_mce/plugins/spellchecker/editor_plugin_src.js +434 -0
  201. data/lib/public/admin/tiny_mce/plugins/spellchecker/img/wline.gif +0 -0
  202. data/lib/public/admin/tiny_mce/plugins/style/css/props.css +13 -0
  203. data/lib/public/admin/tiny_mce/plugins/style/editor_plugin.js +1 -0
  204. data/lib/public/admin/tiny_mce/plugins/style/editor_plugin_src.js +55 -0
  205. data/lib/public/admin/tiny_mce/plugins/style/js/props.js +635 -0
  206. data/lib/public/admin/tiny_mce/plugins/style/langs/en_dlg.js +70 -0
  207. data/lib/public/admin/tiny_mce/plugins/style/props.htm +840 -0
  208. data/lib/public/admin/tiny_mce/plugins/tabfocus/editor_plugin.js +1 -0
  209. data/lib/public/admin/tiny_mce/plugins/tabfocus/editor_plugin_src.js +122 -0
  210. data/lib/public/admin/tiny_mce/plugins/table/cell.htm +180 -0
  211. data/lib/public/admin/tiny_mce/plugins/table/css/cell.css +17 -0
  212. data/lib/public/admin/tiny_mce/plugins/table/css/row.css +25 -0
  213. data/lib/public/admin/tiny_mce/plugins/table/css/table.css +13 -0
  214. data/lib/public/admin/tiny_mce/plugins/table/editor_plugin.js +1 -0
  215. data/lib/public/admin/tiny_mce/plugins/table/editor_plugin_src.js +1363 -0
  216. data/lib/public/admin/tiny_mce/plugins/table/js/cell.js +319 -0
  217. data/lib/public/admin/tiny_mce/plugins/table/js/merge_cells.js +27 -0
  218. data/lib/public/admin/tiny_mce/plugins/table/js/row.js +237 -0
  219. data/lib/public/admin/tiny_mce/plugins/table/js/table.js +450 -0
  220. data/lib/public/admin/tiny_mce/plugins/table/langs/en_dlg.js +75 -0
  221. data/lib/public/admin/tiny_mce/plugins/table/merge_cells.htm +32 -0
  222. data/lib/public/admin/tiny_mce/plugins/table/row.htm +158 -0
  223. data/lib/public/admin/tiny_mce/plugins/table/table.htm +188 -0
  224. data/lib/public/admin/tiny_mce/plugins/template/blank.htm +12 -0
  225. data/lib/public/admin/tiny_mce/plugins/template/css/template.css +23 -0
  226. data/lib/public/admin/tiny_mce/plugins/template/editor_plugin.js +1 -0
  227. data/lib/public/admin/tiny_mce/plugins/template/editor_plugin_src.js +159 -0
  228. data/lib/public/admin/tiny_mce/plugins/template/js/template.js +106 -0
  229. data/lib/public/admin/tiny_mce/plugins/template/langs/en_dlg.js +15 -0
  230. data/lib/public/admin/tiny_mce/plugins/template/template.htm +31 -0
  231. data/lib/public/admin/tiny_mce/plugins/visualchars/editor_plugin.js +1 -0
  232. data/lib/public/admin/tiny_mce/plugins/visualchars/editor_plugin_src.js +83 -0
  233. data/lib/public/admin/tiny_mce/plugins/wordcount/editor_plugin.js +1 -0
  234. data/lib/public/admin/tiny_mce/plugins/wordcount/editor_plugin_src.js +114 -0
  235. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/abbr.htm +142 -0
  236. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/acronym.htm +142 -0
  237. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/attributes.htm +149 -0
  238. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/cite.htm +142 -0
  239. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/css/attributes.css +11 -0
  240. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/css/popup.css +9 -0
  241. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/del.htm +162 -0
  242. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/editor_plugin.js +1 -0
  243. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js +132 -0
  244. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/ins.htm +162 -0
  245. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/js/abbr.js +28 -0
  246. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/js/acronym.js +28 -0
  247. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/js/attributes.js +111 -0
  248. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/js/cite.js +28 -0
  249. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/js/del.js +53 -0
  250. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/js/element_common.js +229 -0
  251. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/js/ins.js +53 -0
  252. data/lib/public/admin/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js +32 -0
  253. data/lib/public/admin/tiny_mce/themes/advanced/about.htm +52 -0
  254. data/lib/public/admin/tiny_mce/themes/advanced/anchor.htm +26 -0
  255. data/lib/public/admin/tiny_mce/themes/advanced/charmap.htm +51 -0
  256. data/lib/public/admin/tiny_mce/themes/advanced/color_picker.htm +74 -0
  257. data/lib/public/admin/tiny_mce/themes/advanced/editor_template.js +1 -0
  258. data/lib/public/admin/tiny_mce/themes/advanced/editor_template_src.js +1358 -0
  259. data/lib/public/admin/tiny_mce/themes/advanced/image.htm +80 -0
  260. data/lib/public/admin/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  261. data/lib/public/admin/tiny_mce/themes/advanced/img/flash.gif +0 -0
  262. data/lib/public/admin/tiny_mce/themes/advanced/img/icons.gif +0 -0
  263. data/lib/public/admin/tiny_mce/themes/advanced/img/iframe.gif +0 -0
  264. data/lib/public/admin/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
  265. data/lib/public/admin/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
  266. data/lib/public/admin/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
  267. data/lib/public/admin/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
  268. data/lib/public/admin/tiny_mce/themes/advanced/img/trans.gif +0 -0
  269. data/lib/public/admin/tiny_mce/themes/advanced/img/video.gif +0 -0
  270. data/lib/public/admin/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
  271. data/lib/public/admin/tiny_mce/themes/advanced/js/about.js +73 -0
  272. data/lib/public/admin/tiny_mce/themes/advanced/js/anchor.js +42 -0
  273. data/lib/public/admin/tiny_mce/themes/advanced/js/charmap.js +355 -0
  274. data/lib/public/admin/tiny_mce/themes/advanced/js/color_picker.js +329 -0
  275. data/lib/public/admin/tiny_mce/themes/advanced/js/image.js +247 -0
  276. data/lib/public/admin/tiny_mce/themes/advanced/js/link.js +153 -0
  277. data/lib/public/admin/tiny_mce/themes/advanced/js/source_editor.js +56 -0
  278. data/lib/public/admin/tiny_mce/themes/advanced/langs/en.js +68 -0
  279. data/lib/public/admin/tiny_mce/themes/advanced/langs/en_dlg.js +54 -0
  280. data/lib/public/admin/tiny_mce/themes/advanced/link.htm +57 -0
  281. data/lib/public/admin/tiny_mce/themes/advanced/shortcuts.htm +47 -0
  282. data/lib/public/admin/tiny_mce/themes/advanced/skins/default/content.css +48 -0
  283. data/lib/public/admin/tiny_mce/themes/advanced/skins/default/dialog.css +117 -0
  284. data/lib/public/admin/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  285. data/lib/public/admin/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  286. data/lib/public/admin/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  287. data/lib/public/admin/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  288. data/lib/public/admin/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  289. data/lib/public/admin/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  290. data/lib/public/admin/tiny_mce/themes/advanced/skins/default/ui.css +214 -0
  291. data/lib/public/admin/tiny_mce/themes/advanced/skins/highcontrast/content.css +23 -0
  292. data/lib/public/admin/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +105 -0
  293. data/lib/public/admin/tiny_mce/themes/advanced/skins/highcontrast/ui.css +102 -0
  294. data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/content.css +47 -0
  295. data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/dialog.css +117 -0
  296. data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
  297. data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
  298. data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
  299. data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/ui.css +217 -0
  300. data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +8 -0
  301. data/lib/public/admin/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -0
  302. data/lib/public/admin/tiny_mce/themes/advanced/source_editor.htm +25 -0
  303. data/lib/public/admin/tiny_mce/themes/simple/editor_template.js +1 -0
  304. data/lib/public/admin/tiny_mce/themes/simple/editor_template_src.js +84 -0
  305. data/lib/public/admin/tiny_mce/themes/simple/img/icons.gif +0 -0
  306. data/lib/public/admin/tiny_mce/themes/simple/langs/en.js +11 -0
  307. data/lib/public/admin/tiny_mce/themes/simple/skins/default/content.css +25 -0
  308. data/lib/public/admin/tiny_mce/themes/simple/skins/default/ui.css +32 -0
  309. data/lib/public/admin/tiny_mce/themes/simple/skins/o2k7/content.css +17 -0
  310. data/lib/public/admin/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png +0 -0
  311. data/lib/public/admin/tiny_mce/themes/simple/skins/o2k7/ui.css +35 -0
  312. data/lib/public/admin/tiny_mce/tiny_mce.js +1 -0
  313. data/lib/public/admin/tiny_mce/tiny_mce_popup.js +5 -0
  314. data/lib/public/admin/tiny_mce/tiny_mce_src.js +15519 -0
  315. data/lib/public/admin/tiny_mce/utils/editable_selects.js +70 -0
  316. data/lib/public/admin/tiny_mce/utils/form_utils.js +210 -0
  317. data/lib/public/admin/tiny_mce/utils/mctabs.js +162 -0
  318. data/lib/public/admin/tiny_mce/utils/validate.js +252 -0
  319. data/lib/yodel_admin.rb +3 -0
  320. data/yodel_admin.gemspec +22 -0
  321. 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,9 @@
1
+ class AdminRootPage < Page
2
+
3
+ respond_to :get do
4
+ with :html do
5
+ response.redirect children.first.path
6
+ end
7
+ end
8
+
9
+ 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