geri 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +26 -0
  4. data/app/assets/javascripts/geri/admin.js +33 -0
  5. data/app/assets/javascripts/geri/admin/app.js +758 -0
  6. data/app/assets/javascripts/geri/admin/editor.js +56 -0
  7. data/app/assets/javascripts/geri/admin/password_resets.js +2 -0
  8. data/app/assets/stylesheets/geri/admin.css.less +60 -0
  9. data/app/assets/stylesheets/geri/admin/app.css +4915 -0
  10. data/app/assets/stylesheets/geri/admin/ckeditor/contents.css +135 -0
  11. data/app/assets/stylesheets/geri/admin/editor.css.less +38 -0
  12. data/app/assets/stylesheets/geri/admin/password_resets.css +4 -0
  13. data/app/assets/stylesheets/geri/admin/skin-blue.less +142 -0
  14. data/app/assets/vendor/ckeditor/CHANGES.md +1065 -0
  15. data/app/assets/vendor/ckeditor/LICENSE.md +1420 -0
  16. data/app/assets/vendor/ckeditor/README.md +39 -0
  17. data/app/assets/vendor/ckeditor/adapters/jquery.js +10 -0
  18. data/app/assets/vendor/ckeditor/build-config.js +69 -0
  19. data/app/assets/vendor/ckeditor/ckeditor.js +775 -0
  20. data/app/assets/vendor/ckeditor/config.js +34 -0
  21. data/app/assets/vendor/ckeditor/contents.css +135 -0
  22. data/app/assets/vendor/ckeditor/lang/en.js +5 -0
  23. data/app/assets/vendor/ckeditor/plugins/about/dialogs/about.js +7 -0
  24. data/app/assets/vendor/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png +0 -0
  25. data/app/assets/vendor/ckeditor/plugins/about/dialogs/logo_ckeditor.png +0 -0
  26. data/app/assets/vendor/ckeditor/plugins/clipboard/dialogs/paste.js +12 -0
  27. data/app/assets/vendor/ckeditor/plugins/dialog/dialogDefinition.js +4 -0
  28. data/app/assets/vendor/ckeditor/plugins/icons.png +0 -0
  29. data/app/assets/vendor/ckeditor/plugins/icons_hidpi.png +0 -0
  30. data/app/assets/vendor/ckeditor/plugins/link/dialogs/anchor.js +7 -0
  31. data/app/assets/vendor/ckeditor/plugins/link/dialogs/link.js +26 -0
  32. data/app/assets/vendor/ckeditor/plugins/link/images/anchor.png +0 -0
  33. data/app/assets/vendor/ckeditor/plugins/link/images/hidpi/anchor.png +0 -0
  34. data/app/assets/vendor/ckeditor/samples/css/samples.css +1640 -0
  35. data/app/assets/vendor/ckeditor/samples/img/github-top.png +0 -0
  36. data/app/assets/vendor/ckeditor/samples/img/header-bg.png +0 -0
  37. data/app/assets/vendor/ckeditor/samples/img/header-separator.png +0 -0
  38. data/app/assets/vendor/ckeditor/samples/img/logo.png +0 -0
  39. data/app/assets/vendor/ckeditor/samples/img/navigation-tip.png +0 -0
  40. data/app/assets/vendor/ckeditor/samples/index.html +128 -0
  41. data/app/assets/vendor/ckeditor/samples/js/sample.js +53 -0
  42. data/app/assets/vendor/ckeditor/samples/js/sf.js +17 -0
  43. data/app/assets/vendor/ckeditor/samples/old/ajax.html +85 -0
  44. data/app/assets/vendor/ckeditor/samples/old/api.html +210 -0
  45. data/app/assets/vendor/ckeditor/samples/old/appendto.html +59 -0
  46. data/app/assets/vendor/ckeditor/samples/old/assets/inlineall/logo.png +0 -0
  47. data/app/assets/vendor/ckeditor/samples/old/assets/outputxhtml/outputxhtml.css +204 -0
  48. data/app/assets/vendor/ckeditor/samples/old/assets/posteddata.php +59 -0
  49. data/app/assets/vendor/ckeditor/samples/old/assets/sample.jpg +0 -0
  50. data/app/assets/vendor/ckeditor/samples/old/assets/uilanguages/languages.js +7 -0
  51. data/app/assets/vendor/ckeditor/samples/old/datafiltering.html +508 -0
  52. data/app/assets/vendor/ckeditor/samples/old/dialog/assets/my_dialog.js +48 -0
  53. data/app/assets/vendor/ckeditor/samples/old/dialog/dialog.html +190 -0
  54. data/app/assets/vendor/ckeditor/samples/old/divreplace.html +144 -0
  55. data/app/assets/vendor/ckeditor/samples/old/enterkey/enterkey.html +106 -0
  56. data/app/assets/vendor/ckeditor/samples/old/index.html +122 -0
  57. data/app/assets/vendor/ckeditor/samples/old/inlineall.html +314 -0
  58. data/app/assets/vendor/ckeditor/samples/old/inlinebycode.html +124 -0
  59. data/app/assets/vendor/ckeditor/samples/old/inlinetextarea.html +113 -0
  60. data/app/assets/vendor/ckeditor/samples/old/jquery.html +103 -0
  61. data/app/assets/vendor/ckeditor/samples/old/readonly.html +76 -0
  62. data/app/assets/vendor/ckeditor/samples/old/replacebyclass.html +60 -0
  63. data/app/assets/vendor/ckeditor/samples/old/replacebycode.html +59 -0
  64. data/app/assets/vendor/ckeditor/samples/old/sample.css +357 -0
  65. data/app/assets/vendor/ckeditor/samples/old/sample.js +50 -0
  66. data/app/assets/vendor/ckeditor/samples/old/sample_posteddata.php +16 -0
  67. data/app/assets/vendor/ckeditor/samples/old/tabindex.html +78 -0
  68. data/app/assets/vendor/ckeditor/samples/old/toolbar/toolbar.html +235 -0
  69. data/app/assets/vendor/ckeditor/samples/old/uicolor.html +72 -0
  70. data/app/assets/vendor/ckeditor/samples/old/uilanguages.html +122 -0
  71. data/app/assets/vendor/ckeditor/samples/old/wysiwygarea/fullpage.html +80 -0
  72. data/app/assets/vendor/ckeditor/samples/old/xhtmlstyle.html +234 -0
  73. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/css/fontello.css +55 -0
  74. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/font/LICENSE.txt +10 -0
  75. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/font/config.json +28 -0
  76. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/font/fontello.eot +0 -0
  77. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/font/fontello.svg +14 -0
  78. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/font/fontello.ttf +0 -0
  79. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/font/fontello.woff +0 -0
  80. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/index.html +446 -0
  81. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/js/abstracttoolbarmodifier.js +13 -0
  82. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/js/fulltoolbareditor.js +9 -0
  83. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/js/toolbarmodifier.js +33 -0
  84. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/js/toolbartextmodifier.js +14 -0
  85. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/lib/codemirror/LICENSE +19 -0
  86. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/lib/codemirror/codemirror.css +325 -0
  87. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/lib/codemirror/codemirror.js +288 -0
  88. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/lib/codemirror/javascript.js +25 -0
  89. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/lib/codemirror/neo.css +36 -0
  90. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/lib/codemirror/show-hint.css +38 -0
  91. data/app/assets/vendor/ckeditor/samples/toolbarconfigurator/lib/codemirror/show-hint.js +16 -0
  92. data/app/assets/vendor/ckeditor/skins/bootstrapck/dialog.css +1 -0
  93. data/app/assets/vendor/ckeditor/skins/bootstrapck/dialog_ie.css +1 -0
  94. data/app/assets/vendor/ckeditor/skins/bootstrapck/dialog_ie7.css +1 -0
  95. data/app/assets/vendor/ckeditor/skins/bootstrapck/dialog_ie8.css +1 -0
  96. data/app/assets/vendor/ckeditor/skins/bootstrapck/dialog_iequirks.css +1 -0
  97. data/app/assets/vendor/ckeditor/skins/bootstrapck/dialog_opera.css +1 -0
  98. data/app/assets/vendor/ckeditor/skins/bootstrapck/editor.css +1 -0
  99. data/app/assets/vendor/ckeditor/skins/bootstrapck/editor_gecko.css +1 -0
  100. data/app/assets/vendor/ckeditor/skins/bootstrapck/editor_ie.css +1 -0
  101. data/app/assets/vendor/ckeditor/skins/bootstrapck/editor_ie7.css +1 -0
  102. data/app/assets/vendor/ckeditor/skins/bootstrapck/editor_ie8.css +1 -0
  103. data/app/assets/vendor/ckeditor/skins/bootstrapck/editor_iequirks.css +1 -0
  104. data/app/assets/vendor/ckeditor/skins/bootstrapck/icons.png +0 -0
  105. data/app/assets/vendor/ckeditor/skins/bootstrapck/icons_hidpi.png +0 -0
  106. data/app/assets/vendor/ckeditor/skins/bootstrapck/images/arrow.png +0 -0
  107. data/app/assets/vendor/ckeditor/skins/bootstrapck/images/close.png +0 -0
  108. data/app/assets/vendor/ckeditor/skins/bootstrapck/images/hidpi/close.png +0 -0
  109. data/app/assets/vendor/ckeditor/skins/bootstrapck/images/hidpi/lock-open.png +0 -0
  110. data/app/assets/vendor/ckeditor/skins/bootstrapck/images/hidpi/lock.png +0 -0
  111. data/app/assets/vendor/ckeditor/skins/bootstrapck/images/hidpi/refresh.png +0 -0
  112. data/app/assets/vendor/ckeditor/skins/bootstrapck/images/lock-open.png +0 -0
  113. data/app/assets/vendor/ckeditor/skins/bootstrapck/images/lock.png +0 -0
  114. data/app/assets/vendor/ckeditor/skins/bootstrapck/images/refresh.png +0 -0
  115. data/app/assets/vendor/ckeditor/skins/bootstrapck/readme.md +35 -0
  116. data/app/assets/vendor/ckeditor/skins/bootstrapck/sample/bootstrapck-sample.html +127 -0
  117. data/app/assets/vendor/ckeditor/skins/bootstrapck/sample/css/bootstrapck-sample.css +1 -0
  118. data/app/assets/vendor/ckeditor/skins/bootstrapck/sample/js/analytics.js +4 -0
  119. data/app/assets/vendor/ckeditor/skins/bootstrapck/sample/js/jquery-1.11.0.min.js +189 -0
  120. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/browser-specific/gecko/editor_gecko.scss +25 -0
  121. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/browser-specific/ie/dialog_ie.scss +62 -0
  122. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/browser-specific/ie/editor_ie.scss +71 -0
  123. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/browser-specific/ie7/dialog_ie7.scss +68 -0
  124. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/browser-specific/ie7/editor_ie7.scss +213 -0
  125. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/browser-specific/ie8/dialog_ie8.scss +24 -0
  126. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/browser-specific/ie8/editor_ie8.scss +27 -0
  127. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/browser-specific/iequirks/dialog_iequirks.scss +21 -0
  128. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/browser-specific/iequirks/editor_iequirks.scss +79 -0
  129. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/browser-specific/opera/dialog_opera.scss +31 -0
  130. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/components/_colorpanel.scss +119 -0
  131. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/components/_elementspath.scss +66 -0
  132. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/components/_mainui.scss +189 -0
  133. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/components/_menu.scss +182 -0
  134. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/components/_panel.scss +199 -0
  135. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/components/_presets.scss +32 -0
  136. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/components/_reset.scss +107 -0
  137. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/components/_richcombo.scss +174 -0
  138. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/components/_toolbar.scss +317 -0
  139. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/components/editor.scss +66 -0
  140. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/config/_colors.scss +61 -0
  141. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/config/_config.scss +9 -0
  142. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/config/_defaults.scss +37 -0
  143. data/app/assets/vendor/ckeditor/skins/bootstrapck/scss/dialog/dialog.scss +822 -0
  144. data/app/assets/vendor/ckeditor/styles.js +111 -0
  145. data/app/controllers/geri/admin/admin_users_controller.rb +56 -0
  146. data/app/controllers/geri/admin/dashboard_controller.rb +8 -0
  147. data/app/controllers/geri/admin/editor_controller.rb +33 -0
  148. data/app/controllers/geri/admin/password_resets_controller.rb +21 -0
  149. data/app/controllers/geri/admin/sessions_controller.rb +24 -0
  150. data/app/controllers/geri/admin_controller.rb +19 -0
  151. data/app/controllers/geri/application_controller.rb +5 -0
  152. data/app/controllers/geri/pages_controller.rb +34 -0
  153. data/app/helpers/geri/admin/dashboard_helper.rb +4 -0
  154. data/app/helpers/geri/admin/editor_helper.rb +4 -0
  155. data/app/helpers/geri/admin/pages_helper.rb +45 -0
  156. data/app/helpers/geri/admin/partials_helper.rb +4 -0
  157. data/app/helpers/geri/admin/password_resets_helper.rb +4 -0
  158. data/app/helpers/geri/admin/sessions_helper.rb +4 -0
  159. data/app/helpers/geri/admin_helper.rb +24 -0
  160. data/app/helpers/geri/admin_users_helper.rb +4 -0
  161. data/app/helpers/geri/application_helper.rb +26 -0
  162. data/app/helpers/geri/meta_helper.rb +32 -0
  163. data/app/mailers/application_mailer.rb +4 -0
  164. data/app/mailers/geri/admin_user_mailer.rb +11 -0
  165. data/app/models/geri/admin_user.rb +14 -0
  166. data/app/models/geri/content.rb +6 -0
  167. data/app/models/geri/password_reset.rb +17 -0
  168. data/app/models/geri/session.rb +20 -0
  169. data/app/views/geri/admin/admin_users/_form.html.erb +5 -0
  170. data/app/views/geri/admin/admin_users/edit.html.erb +27 -0
  171. data/app/views/geri/admin/admin_users/index.html.erb +45 -0
  172. data/app/views/geri/admin/admin_users/new.html.erb +17 -0
  173. data/app/views/geri/admin/dashboard/index.html.erb +1 -0
  174. data/app/views/geri/admin/editor/template.html.erb +17 -0
  175. data/app/views/geri/admin/password_resets/new.html.erb +17 -0
  176. data/app/views/geri/admin/sessions/new.html.erb +23 -0
  177. data/app/views/geri/admin/shared/_aside.html.erb +16 -0
  178. data/app/views/geri/admin/shared/_header.html.erb +31 -0
  179. data/app/views/geri/admin/shared/_menu_item.html.erb +17 -0
  180. data/app/views/geri/admin_user_mailer/reset_password_email.text.erb +7 -0
  181. data/app/views/layouts/geri/admin.html.erb +24 -0
  182. data/app/views/layouts/geri/admin/sessions.html.erb +21 -0
  183. data/app/views/layouts/mailer.html.erb +5 -0
  184. data/app/views/layouts/mailer.text.erb +1 -0
  185. data/config/initializers/geri.rb +7 -0
  186. data/config/initializers/sorcery.rb +463 -0
  187. data/config/locales/devise.en.yml +62 -0
  188. data/config/locales/en.yml +13 -0
  189. data/config/routes.rb +23 -0
  190. data/db/migrate/20160409151523_create_geri_contents.rb +8 -0
  191. data/db/migrate/20160411205412_sorcery_core.rb +20 -0
  192. data/lib/generators/geri/install/USAGE +8 -0
  193. data/lib/generators/geri/install/install_generator.rb +54 -0
  194. data/lib/generators/geri/install/templates/bower.json +8 -0
  195. data/lib/generators/geri/install/templates/index.html.erb +46 -0
  196. data/lib/generators/geri/install/templates/initializer.rb +12 -0
  197. data/lib/generators/geri/install/templates/layout.html.erb +11 -0
  198. data/lib/generators/geri/install/templates/site.css.less +1 -0
  199. data/lib/generators/geri/install/templates/site.js +1 -0
  200. data/lib/geri.rb +7 -0
  201. data/lib/geri/cli.rb +6 -0
  202. data/lib/geri/cli/base.rb +23 -0
  203. data/lib/geri/cli/extension.rb +18 -0
  204. data/lib/geri/config.rb +29 -0
  205. data/lib/geri/config/menu_item.rb +35 -0
  206. data/lib/geri/engine.rb +34 -0
  207. data/lib/geri/tasks.rb +3 -0
  208. data/lib/geri/tasks/create_admin_user.rb +40 -0
  209. data/lib/geri/version.rb +3 -0
  210. data/lib/tasks/geri_tasks.rake +15 -0
  211. metadata +449 -0
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
3
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
4
+ */
5
+
6
+ // This file contains style definitions that can be used by CKEditor plugins.
7
+ //
8
+ // The most common use for it is the "stylescombo" plugin, which shows a combo
9
+ // in the editor toolbar, containing all styles. Other plugins instead, like
10
+ // the div plugin, use a subset of the styles on their feature.
11
+ //
12
+ // If you don't have plugins that depend on this file, you can simply ignore it.
13
+ // Otherwise it is strongly recommended to customize this file to match your
14
+ // website requirements and design properly.
15
+
16
+ CKEDITOR.stylesSet.add( 'default', [
17
+ /* Block Styles */
18
+
19
+ // These styles are already available in the "Format" combo ("format" plugin),
20
+ // so they are not needed here by default. You may enable them to avoid
21
+ // placing the "Format" combo in the toolbar, maintaining the same features.
22
+ /*
23
+ { name: 'Paragraph', element: 'p' },
24
+ { name: 'Heading 1', element: 'h1' },
25
+ { name: 'Heading 2', element: 'h2' },
26
+ { name: 'Heading 3', element: 'h3' },
27
+ { name: 'Heading 4', element: 'h4' },
28
+ { name: 'Heading 5', element: 'h5' },
29
+ { name: 'Heading 6', element: 'h6' },
30
+ { name: 'Preformatted Text',element: 'pre' },
31
+ { name: 'Address', element: 'address' },
32
+ */
33
+
34
+ { name: 'Italic Title', element: 'h2', styles: { 'font-style': 'italic' } },
35
+ { name: 'Subtitle', element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } },
36
+ {
37
+ name: 'Special Container',
38
+ element: 'div',
39
+ styles: {
40
+ padding: '5px 10px',
41
+ background: '#eee',
42
+ border: '1px solid #ccc'
43
+ }
44
+ },
45
+
46
+ /* Inline Styles */
47
+
48
+ // These are core styles available as toolbar buttons. You may opt enabling
49
+ // some of them in the Styles combo, removing them from the toolbar.
50
+ // (This requires the "stylescombo" plugin)
51
+ /*
52
+ { name: 'Strong', element: 'strong', overrides: 'b' },
53
+ { name: 'Emphasis', element: 'em' , overrides: 'i' },
54
+ { name: 'Underline', element: 'u' },
55
+ { name: 'Strikethrough', element: 'strike' },
56
+ { name: 'Subscript', element: 'sub' },
57
+ { name: 'Superscript', element: 'sup' },
58
+ */
59
+
60
+ { name: 'Marker', element: 'span', attributes: { 'class': 'marker' } },
61
+
62
+ { name: 'Big', element: 'big' },
63
+ { name: 'Small', element: 'small' },
64
+ { name: 'Typewriter', element: 'tt' },
65
+
66
+ { name: 'Computer Code', element: 'code' },
67
+ { name: 'Keyboard Phrase', element: 'kbd' },
68
+ { name: 'Sample Text', element: 'samp' },
69
+ { name: 'Variable', element: 'var' },
70
+
71
+ { name: 'Deleted Text', element: 'del' },
72
+ { name: 'Inserted Text', element: 'ins' },
73
+
74
+ { name: 'Cited Work', element: 'cite' },
75
+ { name: 'Inline Quotation', element: 'q' },
76
+
77
+ { name: 'Language: RTL', element: 'span', attributes: { 'dir': 'rtl' } },
78
+ { name: 'Language: LTR', element: 'span', attributes: { 'dir': 'ltr' } },
79
+
80
+ /* Object Styles */
81
+
82
+ {
83
+ name: 'Styled image (left)',
84
+ element: 'img',
85
+ attributes: { 'class': 'left' }
86
+ },
87
+
88
+ {
89
+ name: 'Styled image (right)',
90
+ element: 'img',
91
+ attributes: { 'class': 'right' }
92
+ },
93
+
94
+ {
95
+ name: 'Compact table',
96
+ element: 'table',
97
+ attributes: {
98
+ cellpadding: '5',
99
+ cellspacing: '0',
100
+ border: '1',
101
+ bordercolor: '#ccc'
102
+ },
103
+ styles: {
104
+ 'border-collapse': 'collapse'
105
+ }
106
+ },
107
+
108
+ { name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } },
109
+ { name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } }
110
+ ] );
111
+
@@ -0,0 +1,56 @@
1
+ module Geri
2
+ module Admin
3
+ class AdminUsersController < AdminController
4
+
5
+ def index
6
+ @admin_users = AdminUser.all
7
+ end
8
+
9
+ def new
10
+ @admin_user = AdminUser.new
11
+ end
12
+
13
+ def edit
14
+ @admin_user = AdminUser.find(params[:id])
15
+ end
16
+
17
+ def update
18
+ @admin_user = AdminUser.find(params[:id])
19
+ if @admin_user
20
+ .update_attributes(current_user == @admin_user ? admin_user_params_with_password : admin_user_params)
21
+ flash[:success] = 'The Admin User was successfully updated.'
22
+ return redirect_to edit_admin_admin_user_path(@admin_user)
23
+ end
24
+ render :edit
25
+ end
26
+
27
+ def create
28
+ @admin_user = AdminUser.new(admin_user_params)
29
+ if @admin_user.save
30
+ flash[:success] = 'The Admin User was sucessfully created, an email confirmation has been sent with ' +
31
+ 'instructions for setting their password!'
32
+ return redirect_to admin_admin_users_path
33
+ end
34
+ render :new
35
+ end
36
+
37
+ def destroy
38
+ @admin_user = AdminUser.find(params[:id])
39
+ @admin_user.delete
40
+ flash[:success] = 'The Admin User was successfully deleted.'
41
+ redirect_to admin_admin_users_path
42
+ end
43
+
44
+ private
45
+
46
+ def admin_user_params
47
+ params.require(:admin_user).permit(:email, :first_name, :last_name)
48
+ end
49
+
50
+ def admin_user_params_with_password
51
+ params.require(:admin_user).permit(:email, :first_name, :last_name, :password, :password_confirmation)
52
+ end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,8 @@
1
+ require_dependency "geri/application_controller"
2
+
3
+ module Geri
4
+ module Admin
5
+ class DashboardController < AdminController
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,33 @@
1
+ require_dependency "geri/application_controller"
2
+
3
+ module Geri
4
+ class Admin::EditorController < ApplicationController
5
+ include Geri::Admin::PagesHelper
6
+ skip_before_action :verify_authenticity_token, only: [:update_contents]
7
+
8
+
9
+ def index
10
+ redirect_to '/'
11
+ end
12
+
13
+ def template
14
+ render 'template', layout: false
15
+ end
16
+
17
+ def update_contents
18
+ content_params.each do |name, content|
19
+ Content.find_or_initialize_by(name: name).tap do |c|
20
+ c.body = geri_sanitize(content)
21
+ end.save!
22
+ end
23
+ render json: {sucess: true}
24
+ end
25
+
26
+ private
27
+
28
+ def content_params
29
+ params.require(:contents)
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,21 @@
1
+ require_dependency "geri/application_controller"
2
+
3
+ module Geri
4
+ class Admin::PasswordResetsController < AdminController
5
+ layout 'geri/admin/sessions'
6
+
7
+ def new
8
+ @password_reset = PasswordReset.new
9
+ end
10
+
11
+ def create
12
+ @admin_user = AdminUser.find_by(email: params[:password_reset][:email])
13
+ if @admin_user
14
+ @admin_user.deliver_reset_password_instructions!
15
+ end
16
+ flash[:success] = 'If your account was found an email has been sent with instructions to reset your password.'
17
+ redirect_to new_admin_password_reset_url
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ module Geri
2
+ class Admin::SessionsController < AdminController
3
+ skip_before_filter :require_login
4
+
5
+ def new
6
+ @session = Session.new
7
+ end
8
+
9
+ def create
10
+ @session = Session.new(params[:session])
11
+ unless login(@session.email, @session.password)
12
+ flash[:danger] = t('admin.sessions.login_required', default: 'The email/password combination was invalid')
13
+ return render :new
14
+ end
15
+ redirect_to admin_root_url
16
+ end
17
+
18
+ def destroy
19
+ logout
20
+ redirect_to root_url
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ require_dependency 'geri/application_controller'
2
+
3
+ module Geri
4
+ class AdminController < ApplicationController
5
+ before_filter :require_login
6
+ before_filter :set_menu_items
7
+
8
+ private
9
+
10
+ def not_authenticated
11
+ redirect_to admin_login_url
12
+ end
13
+
14
+ def set_menu_items
15
+ @menu_items = Geri::Config.menu_items
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,5 @@
1
+ module Geri
2
+ class ApplicationController < ActionController::Base
3
+ protect_from_forgery with: :exception
4
+ end
5
+ end
@@ -0,0 +1,34 @@
1
+ module Geri
2
+ class PagesController < ApplicationController
3
+ before_action :set_view_path
4
+
5
+ def show
6
+ render render_options_for_path(params[:path])
7
+ end
8
+
9
+ private
10
+
11
+ def render_options_for_path(path)
12
+ return { file: 'index.html.erb', layout: 'layout.html.erb' } unless path
13
+ if File.exists?(page_root.join("#{path.underscore}.html.erb"))
14
+ { file: path.underscore, layout: 'layout.html.erb' }
15
+ else
16
+ { file: "#{path.underscore}/index", layout: 'layout.html.erb' }
17
+ end
18
+ end
19
+
20
+ def _normalize_layout(name)
21
+ name
22
+ end
23
+
24
+ def page_root
25
+ Rails.root.join('app', 'site')
26
+ end
27
+
28
+ def set_view_path
29
+ prepend_view_path(page_root.to_s)
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,4 @@
1
+ module Geri
2
+ module Admin::DashboardHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Geri
2
+ module Admin::EditorHelper
3
+ end
4
+ end
@@ -0,0 +1,45 @@
1
+ module Geri
2
+ module Admin::PagesHelper
3
+
4
+ def geri_sanitize(content)
5
+ ActionController::Base.helpers.sanitize(content, {
6
+ tags: %w{ p div strong ol ul li em},
7
+ attributes: %w{ href target }
8
+ })
9
+ end
10
+
11
+ def editable(name, &block)
12
+ name = "#{current_page}_#{name}"
13
+ content = Content.find_by(name: name) && geri_sanitize(Content.find_by(name: name).body)
14
+ content ||= capture(&block)
15
+ if current_user
16
+ content = capture do
17
+ content_tag(:div, contenteditable: true, id: name, class: 'editable') { content }
18
+ end
19
+ unless @ckeditor_loaded
20
+ content << javascript_tag('window.CKEDITOR_BASEPATH = "assets/ckeditor/"')
21
+ content << javascript_include_tag('ckeditor/ckeditor')
22
+ content << javascript_tag('CKEDITOR.disableAutoInline = true')
23
+ @ckeditor_loaded = true
24
+ end
25
+ unless @editor_loaded
26
+ content << stylesheet_link_tag('geri/admin/editor')
27
+ content << javascript_include_tag('geri/admin/editor')
28
+ end
29
+ content << javascript_tag do
30
+ %Q{
31
+ CKEDITOR.inline('#{name}', {
32
+ on: {
33
+ change: function(event) {
34
+ GERI_EDITOR.update(event.editor.name)
35
+ }
36
+ }
37
+ })
38
+ }.html_safe
39
+ end
40
+ end
41
+ content
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,4 @@
1
+ module Geri
2
+ module Admin::PartialsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Geri
2
+ module Admin::PasswordResetsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Geri
2
+ module Admin::SessionsHelper
3
+ end
4
+ end
@@ -0,0 +1,24 @@
1
+ module Geri
2
+ module AdminHelper
3
+
4
+ def current_path?(path)
5
+ url_for(overwrite_params: nil) == path
6
+ end
7
+
8
+ def sidebar_link(name, path, icon=nil)
9
+ html_options= {}
10
+ html_options[:class] = 'active' if current_path?(path)
11
+ content_tag(:li, html_options) do
12
+ content = ''
13
+ if icon
14
+ content << content_tag(:i, '', class: "fa fa-#{icon}")
15
+ end
16
+ content = link_to(path) do
17
+ content.html_safe + content_tag(:span, name)
18
+ end
19
+ content
20
+ end
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,4 @@
1
+ module Geri
2
+ module AdminUsersHelper
3
+ end
4
+ end
@@ -0,0 +1,26 @@
1
+ module Geri
2
+ module ApplicationHelper
3
+
4
+ def flash_alert
5
+ type = flash_type
6
+ if type
7
+ content_tag(:div, flash[type], class: "alert alert-#{type}")
8
+ end
9
+ end
10
+
11
+ def current_page
12
+ 'index' unless params[:path]
13
+ end
14
+
15
+ private
16
+
17
+ def flash_type
18
+ return :warning if flash[:warning]
19
+ return :success if flash[:success]
20
+ return :danger if flash[:danger]
21
+ return :info if flash[:info]
22
+ false
23
+ end
24
+
25
+ end
26
+ end