adminsite 2.0.0

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 (115) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +12 -0
  3. data/Gemfile.lock +209 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.markdown +122 -0
  6. data/Rakefile +14 -0
  7. data/USAGE +18 -0
  8. data/VERSION +1 -0
  9. data/app/admin_configs/adminsite/adminsite_admin_user_admin_config.rb +43 -0
  10. data/app/admin_configs/adminsite/adminsite_file_asset_admin_config.rb +32 -0
  11. data/app/admin_configs/adminsite/adminsite_page_admin_config.rb +46 -0
  12. data/app/admin_configs/adminsite/adminsite_page_layout_admin_config.rb +31 -0
  13. data/app/assets/images/adminsite/admin/accept.png +0 -0
  14. data/app/assets/images/adminsite/admin/add.png +0 -0
  15. data/app/assets/images/adminsite/admin/arrow_left.png +0 -0
  16. data/app/assets/images/adminsite/admin/arrow_refresh.png +0 -0
  17. data/app/assets/images/adminsite/admin/arrow_up.png +0 -0
  18. data/app/assets/images/adminsite/admin/cross.png +0 -0
  19. data/app/assets/images/adminsite/admin/logo.gif +0 -0
  20. data/app/assets/images/adminsite/admin/logo.png +0 -0
  21. data/app/assets/images/adminsite/admin/magnifier.png +0 -0
  22. data/app/assets/images/adminsite/admin/newspaper_add.png +0 -0
  23. data/app/assets/images/adminsite/admin/newspaper_delete.png +0 -0
  24. data/app/assets/images/adminsite/admin/openid-icon-small.gif +0 -0
  25. data/app/assets/images/adminsite/admin/page_white_magnify.png +0 -0
  26. data/app/assets/images/adminsite/admin/pencil.png +0 -0
  27. data/app/assets/images/adminsite/admin/rails.png +0 -0
  28. data/app/assets/images/adminsite/admin/reorder.gif +0 -0
  29. data/app/assets/images/adminsite/admin/spinner.gif +0 -0
  30. data/app/assets/javascripts/adminsite/admin.js +13 -0
  31. data/app/assets/javascripts/adminsite/admin/code_editor.js.coffee +40 -0
  32. data/app/assets/javascripts/adminsite/admin/hide_and_show.js +26 -0
  33. data/app/assets/stylesheets/adminsite/admin.scss +16 -0
  34. data/app/assets/stylesheets/adminsite/admin/base.scss +521 -0
  35. data/app/assets/stylesheets/adminsite/admin/code_editor.scss +29 -0
  36. data/app/assets/stylesheets/adminsite/admin/pagination.scss +28 -0
  37. data/app/controllers/adminsite/admin/adminsite_admin_users_controller.rb +21 -0
  38. data/app/controllers/adminsite/admin/adminsite_file_assets_controller.rb +57 -0
  39. data/app/controllers/adminsite/admin/adminsite_page_layouts_controller.rb +41 -0
  40. data/app/controllers/adminsite/admin/adminsite_pages_controller.rb +40 -0
  41. data/app/controllers/adminsite/admin/base_controller.rb +16 -0
  42. data/app/controllers/adminsite/admin/crud_controller.rb +27 -0
  43. data/app/controllers/adminsite/admin/iframe_controller.rb +28 -0
  44. data/app/controllers/adminsite/admin/resources_controller.rb +148 -0
  45. data/app/controllers/adminsite/admin_application_controller.rb +9 -0
  46. data/app/controllers/adminsite/admin_user_sessions_controller.rb +5 -0
  47. data/app/controllers/adminsite/contents_controller.rb +88 -0
  48. data/app/helpers/admin/adminsite_application_helper.rb +174 -0
  49. data/app/helpers/admin_application_helper.rb +3 -0
  50. data/app/models/adminsite/admin_config/base.rb +100 -0
  51. data/app/models/adminsite/admin_user.rb +10 -0
  52. data/app/models/adminsite/file_asset.rb +22 -0
  53. data/app/models/adminsite/page.rb +59 -0
  54. data/app/models/adminsite/page_layout.rb +9 -0
  55. data/app/views/adminsite/admin/adminsite_file_assets/index.html.haml +39 -0
  56. data/app/views/adminsite/admin/adminsite_page_layouts/edit.html.haml +5 -0
  57. data/app/views/adminsite/admin/adminsite_page_layouts/index.html.haml +9 -0
  58. data/app/views/adminsite/admin/adminsite_page_layouts/new.html.haml +5 -0
  59. data/app/views/adminsite/admin/adminsite_pages/edit.html.haml +5 -0
  60. data/app/views/adminsite/admin/adminsite_pages/index.html.haml +16 -0
  61. data/app/views/adminsite/admin/adminsite_pages/new.html.haml +5 -0
  62. data/app/views/adminsite/admin/crud/index.html.haml +4 -0
  63. data/app/views/adminsite/admin/crud/show.html.haml +15 -0
  64. data/app/views/adminsite/admin/iframe/index.haml +14 -0
  65. data/app/views/adminsite/admin/resources/_form.haml +6 -0
  66. data/app/views/adminsite/admin/resources/_list.haml +18 -0
  67. data/app/views/adminsite/admin/resources/_search_form.html.haml +41 -0
  68. data/app/views/adminsite/admin/resources/edit.haml +13 -0
  69. data/app/views/adminsite/admin/resources/index.haml +13 -0
  70. data/app/views/adminsite/admin/resources/new.haml +14 -0
  71. data/app/views/adminsite/admin/resources/show.haml +15 -0
  72. data/app/views/adminsite/admin/shared/_admin_menu.html.haml +6 -0
  73. data/app/views/adminsite/admin/shared/_content_menu.html.haml +4 -0
  74. data/app/views/adminsite/admin/shared/_page_assets_list.html.haml +6 -0
  75. data/app/views/adminsite/admin/shared/_syntax_help.html.haml +24 -0
  76. data/app/views/adminsite/admin_user_sessions/new.html.haml +14 -0
  77. data/app/views/layouts/adminsite/admin.html.haml +31 -0
  78. data/config/initializers/adminsite_constants.rb +2 -0
  79. data/config/initializers/assets.rb +7 -0
  80. data/config/initializers/devise.rb +265 -0
  81. data/config/initializers/filter_parameter_logging.rb +4 -0
  82. data/config/initializers/paperclip.rb +15 -0
  83. data/config/initializers/time_formats.rb +1 -0
  84. data/config/locales/da.devise.yaml +57 -0
  85. data/config/locales/da.yaml +199 -0
  86. data/config/locales/en.devise.yaml +60 -0
  87. data/config/locales/en.yaml +205 -0
  88. data/config/routes.rb +17 -0
  89. data/db/migrate/20101007000000_create_admin.rb +59 -0
  90. data/db/migrate/20101007000001_create_cms_tables.rb +39 -0
  91. data/lib/adminsite.rb +28 -0
  92. data/lib/adminsite/configuration.rb +15 -0
  93. data/lib/adminsite/engine.rb +30 -0
  94. data/lib/adminsite/liquid/tags/asset.rb +70 -0
  95. data/lib/adminsite/version.rb +3 -0
  96. data/lib/generators/adminsite/add_dashboard/add_dashboard_generator.rb +34 -0
  97. data/lib/generators/adminsite/add_dashboard/templates/controllers/admin_dashboard_controller.rb +13 -0
  98. data/lib/generators/adminsite/add_dashboard/templates/views/index.html.haml +6 -0
  99. data/lib/generators/adminsite/add_iframe/add_iframe_generator.rb +42 -0
  100. data/lib/generators/adminsite/add_iframe/templates/controllers/admin_iframe_controller.rb +16 -0
  101. data/lib/generators/adminsite/add_resource/USAGE +0 -0
  102. data/lib/generators/adminsite/add_resource/add_resource_generator.rb +40 -0
  103. data/lib/generators/adminsite/add_resource/templates/admin_configs/resource_admin_config.rb +47 -0
  104. data/lib/generators/adminsite/add_resource/templates/controllers/admin_resource_controller.rb +19 -0
  105. data/lib/generators/adminsite/install/USAGE +13 -0
  106. data/lib/generators/adminsite/install/install_generator.rb +51 -0
  107. data/lib/generators/adminsite/install/templates/assets/adminsite.js +17 -0
  108. data/lib/generators/adminsite/install/templates/assets/adminsite.scss +14 -0
  109. data/lib/generators/adminsite/install/templates/config/locales/adminsite.da.yml +4 -0
  110. data/lib/generators/adminsite/install/templates/config/locales/adminsite.en.yml +6 -0
  111. data/lib/generators/adminsite/install/templates/recipes/application.rb +18 -0
  112. data/lib/generators/adminsite/install/templates/views/_admin_menu.html.haml +8 -0
  113. data/lib/recipes/adminsite.rb +82 -0
  114. data/lib/tasks/adminsite.rake +147 -0
  115. metadata +384 -0
@@ -0,0 +1,29 @@
1
+ @import "codemirror";
2
+ // @import "codemirror/themes/night";
3
+
4
+ body.adminsite {
5
+ .CodeMirror {
6
+ border: 1px solid #C9D0D6;
7
+ border-radius: 3px;
8
+ font-family: Helvetica,Arial,sans-serif;
9
+ font-size: 0.95em;
10
+ outline: medium none;
11
+ width: 72%;
12
+ // height: 103px;
13
+ line-height: 15px;
14
+ padding: 0;
15
+
16
+ .CodeMirror-lines {
17
+ padding: 0;
18
+ }
19
+
20
+ pre {
21
+ padding: 0;
22
+ }
23
+
24
+ textarea {
25
+ border: 0;
26
+ line-height: 15px;
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,28 @@
1
+ $position : left ;
2
+ $primary-color: #efefef;
3
+ $secondary-color: #BBB;
4
+ .pagination
5
+ {
6
+ text-align: $position ;
7
+ color: #666;
8
+ }
9
+ .pagination a {
10
+ border-radius: 2px;
11
+ padding: 0.5em 0.7em;
12
+ border-color: #aaa;
13
+ border-style: solid;
14
+ background-color: #efefef;
15
+ background-color: $primary-color;
16
+ border-top: 2px solid $secondary-color ;
17
+ border: 1px solid $secondary-color ;
18
+ text-decoration: none;
19
+ font-size: smaller;
20
+ }
21
+ .pagination a:hover , .pagination a:focus
22
+ {
23
+ background-image: -webkit-linear-gradient(top, #cfcfcf, #cfcfcf);
24
+ }
25
+ .pagination a.more {
26
+ box-shadow: 0 0 0 0 transparent;
27
+ background: transparent;
28
+ }
@@ -0,0 +1,21 @@
1
+ module Adminsite
2
+ class Admin::AdminsiteAdminUsersController < Adminsite::Admin::ResourcesController
3
+
4
+ protected
5
+
6
+ def self.resource_class
7
+ Adminsite::AdminUser
8
+ end
9
+
10
+ def order_params
11
+ 'email ASC'
12
+ end
13
+
14
+ def resource_admin_config
15
+ # Adminsite::AdminConfig::Base.admin_config_of_class(resource_class)
16
+ # -> Result: "Adminsite::AdminConfig::#{config_class_name.gsub('::','')}" || Adminsite::AdminConfig::Base
17
+ super
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,57 @@
1
+ class Adminsite::Admin::AdminsiteFileAssetsController < Adminsite::Admin::ResourcesController
2
+
3
+ def index
4
+ @file_asset = Adminsite::FileAsset.new
5
+ super
6
+ end
7
+
8
+ def create
9
+ success_files = []
10
+ failure_files = []
11
+
12
+ if params[:file_asset].present?
13
+ Array(permitted_params[:file_asset][:attachment]).each do |file|
14
+ filename = file.original_filename
15
+
16
+ # "Overwrite" existing by removing them
17
+ Adminsite::FileAsset.find_by_attachment_file_name(filename).try(:destroy)
18
+
19
+ file_asset = Adminsite::FileAsset.new('attachment' => file)
20
+ if file_asset.save!
21
+ success_files << "'#{filename}'"
22
+ else
23
+ failure_files << "'#{filename}'"
24
+ end
25
+ end
26
+ end
27
+
28
+ flash[:notice] = "File(s) #{success_files.join(', ')} were successfully uploaded." if success_files.any?
29
+ flash[:errors] = "File(s) #{failure_files.join(', ')} were not uploaded." if failure_files.any?
30
+
31
+ Adminsite::Page.cleanup_all_cached
32
+ redirect_to admin_adminsite_file_assets_path
33
+ end
34
+
35
+ def destroy
36
+ super
37
+ Adminsite::Page.cleanup_all_cached
38
+ # redirect_to admin_adminsite_file_assets_path
39
+ end
40
+
41
+ protected
42
+
43
+ def order_params
44
+ 'attachment_file_name ASC'
45
+ end
46
+
47
+ def resource_admin_config
48
+ # Adminsite::AdminConfig::Base.admin_config_of_class(resource_class)
49
+ # -> Result: "Adminsite::AdminConfig::#{config_class_name.gsub('::','')}" || Adminsite::AdminConfig::Base
50
+ super
51
+ end
52
+
53
+ def self.resource_class
54
+ Adminsite::FileAsset
55
+ end
56
+
57
+ end
@@ -0,0 +1,41 @@
1
+ class Adminsite::Admin::AdminsitePageLayoutsController < Adminsite::Admin::ResourcesController
2
+
3
+ def new
4
+ @resource = resource_class.new(:body => "{{content_for_template}}")
5
+ @file_assets = Adminsite::FileAsset.all
6
+ super
7
+ end
8
+
9
+ def edit
10
+ @file_assets = Adminsite::FileAsset.all
11
+ super
12
+ end
13
+
14
+ def update
15
+ @file_assets = Adminsite::FileAsset.all
16
+ super
17
+ Adminsite::Page.cleanup_all_cached
18
+ end
19
+
20
+ def destroy
21
+ Adminsite::Page.cleanup_all_cached
22
+ super
23
+ end
24
+
25
+ protected
26
+
27
+ def self.resource_class
28
+ Adminsite::PageLayout
29
+ end
30
+
31
+ def order_params
32
+ 'title ASC'
33
+ end
34
+
35
+ def resource_admin_config
36
+ # Adminsite::AdminConfig::Base.admin_config_of_class(resource_class)
37
+ # -> Result: "Adminsite::AdminConfig::#{config_class_name.gsub('::','')}" || Adminsite::AdminConfig::Base
38
+ super
39
+ end
40
+
41
+ end
@@ -0,0 +1,40 @@
1
+ class Adminsite::Admin::AdminsitePagesController < Adminsite::Admin::ResourcesController
2
+
3
+ def new
4
+ @file_assets = Adminsite::FileAsset.all
5
+ super
6
+ end
7
+
8
+ def edit
9
+ @file_assets = Adminsite::FileAsset.all
10
+ super
11
+ end
12
+
13
+ def update
14
+ @file_assets = Adminsite::FileAsset.all
15
+ super
16
+ @resource.cleanup_cached
17
+ end
18
+
19
+ def destroy
20
+ @resource.cleanup_cached
21
+ super
22
+ end
23
+
24
+ protected
25
+
26
+ def order_params
27
+ 'title ASC'
28
+ end
29
+
30
+ def resource_admin_config
31
+ # Adminsite::AdminConfig::Base.admin_config_of_class(resource_class)
32
+ # -> Result: "Adminsite::AdminConfig::#{config_class_name.gsub('::','')}" || Adminsite::AdminConfig::Base
33
+ super
34
+ end
35
+
36
+ def self.resource_class
37
+ Adminsite::Page
38
+ end
39
+
40
+ end
@@ -0,0 +1,16 @@
1
+ class Adminsite::Admin::BaseController < Adminsite::AdminApplicationController
2
+ layout 'adminsite/admin'
3
+
4
+ newrelic_ignore if defined?(NewRelic)
5
+
6
+ protected
7
+
8
+ def self.content_menu_label
9
+ name.demodulize.sub(/Controller$/, '')
10
+ end
11
+
12
+ def permitted_params
13
+ params.permit!
14
+ end
15
+
16
+ end
@@ -0,0 +1,27 @@
1
+ class Adminsite::Admin::CrudController < Adminsite::Admin::BaseController
2
+
3
+ def index
4
+ #
5
+ end
6
+
7
+ protected
8
+
9
+ class << self
10
+
11
+ def defined_controller_actions
12
+ [:new, :create, :show, :edit, :update, :index, :destroy].select{|a| new.respond_to?(a) }
13
+ end
14
+
15
+ def register_routes(rails_router)
16
+ return if self == Adminsite::Admin::CrudController
17
+ rails_router.instance_exec controller_name, defined_controller_actions do |controller_name, actions|
18
+ resources controller_name, controller: controller_name, only: actions do
19
+ end
20
+ end
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+
27
+
@@ -0,0 +1,28 @@
1
+ class Adminsite::Admin::IframeController < Adminsite::Admin::CrudController
2
+
3
+ def index
4
+ @iframe_name = self.class.iframe_name
5
+ @iframe_url = self.class.iframe_url
6
+ end
7
+
8
+
9
+ class << self
10
+
11
+ def iframe_name
12
+ raise NotImplementedError.new('Define iframe_name in subclass')
13
+ end
14
+
15
+ def iframe_url
16
+ raise NotImplementedError.new('Define iframe_url in subclass')
17
+ end
18
+
19
+ def register_routes(rails_router)
20
+ return if self == Adminsite::Admin::IframeController
21
+ super(rails_router)
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
28
+
@@ -0,0 +1,148 @@
1
+ class Adminsite::Admin::ResourcesController < Adminsite::Admin::CrudController
2
+ before_filter :find_resource, :except => [:new, :create, :index]
3
+
4
+ helper_method :admin_resource_path, :resource_class_underscore,
5
+ :resource_class, :resource_admin_config
6
+
7
+ respond_to :html, :json
8
+
9
+
10
+ def new
11
+ @resource ||= self.class.resource_class.new
12
+ end
13
+
14
+ def create
15
+ @resource ||= self.class.resource_class.new(resource_params)
16
+
17
+ if @resource.save
18
+ flash_notice_success('created')
19
+ if api_call?
20
+ render :json => @resource
21
+ else
22
+ redirect_to admin_resource_path(@resource.id)
23
+ end
24
+ else
25
+ render :action => "new"
26
+ end
27
+ end
28
+
29
+ def edit
30
+ end
31
+
32
+ def show
33
+ render :json => @resource if api_call?
34
+ end
35
+
36
+ def update
37
+ if @resource.update_attributes(resource_params)
38
+ flash_notice_success('updated')
39
+ if api_call?
40
+ render :json => @resource
41
+ else
42
+ redirect_to admin_resource_path(@resource.id, :edit)
43
+ end
44
+ else
45
+ render :action => "edit"
46
+ end
47
+ end
48
+
49
+ def index
50
+ @q = resources.order(order_params).ransack(params[:q])
51
+ @resources = @q.result.page(params[:page])
52
+ @ransack_params = ransack_params
53
+ render :json => @resources if api_call?
54
+ end
55
+
56
+ def destroy
57
+ @resource.destroy
58
+ redirect_to admin_resource_path
59
+ end
60
+
61
+ def resource_class
62
+ self.class.resource_class
63
+ end
64
+
65
+ def resource_class_underscore
66
+ @resource_class_underscore ||= resource_class.to_s.underscore.gsub('/','_')
67
+ end
68
+
69
+ def ransack_params
70
+ params.slice(:q, :p).each{|k,v| v.delete_if {|key, value| value.blank? }}
71
+ end
72
+
73
+ def current_admin_menu
74
+ @current_admin_menu ||= params[:admin_menu]
75
+ end
76
+
77
+ def admin_resource_path(id = nil, action = nil)
78
+ path = self.class.remove_namespace(params[:controller], ['adminsite'])
79
+ path = path.gsub('/','_')
80
+ path = path.singularize if (action || id).present? && action.to_s != 'search'
81
+ path = "#{action}_#{path}" if action.present?
82
+ send("#{path}_path", id, admin_menu: current_admin_menu)
83
+ end
84
+
85
+ protected
86
+
87
+ def self.content_menu_label
88
+ pattern = "^#{resource_class.to_s.deconstantize.split('::').join('|^')}"
89
+ super.gsub(/#{pattern}/,'')
90
+ end
91
+
92
+ def api_call?
93
+ request.xhr? || request.format.to_sym == :json
94
+ end
95
+
96
+ def find_resource
97
+ @resource ||= resources.find(params[:id])
98
+ end
99
+
100
+ def resources
101
+ if filter_scopes.present?
102
+ eval("resource_class.#{filter_scopes.join('.')}")
103
+ else
104
+ self.class.resource_class.all
105
+ end
106
+ end
107
+
108
+ def resource_params
109
+ permitted_params[resource_class_underscore]
110
+ end
111
+
112
+ def flash_notice_success(action)
113
+ flash[:notice] = "#{resource_class.name} was successfully #{action}."
114
+ end
115
+
116
+ def filter_scopes
117
+ return [] if params[:scope].blank?
118
+ resource_admin_config.scopes & params[:scope].split(',').collect{|s| s.to_sym }
119
+ end
120
+
121
+ def order_params
122
+ 'ID DESC'
123
+ end
124
+
125
+ def resource_admin_config
126
+ return @resource_admin_config if @resource_admin_config.present?
127
+ @resource_admin_config = Adminsite::AdminConfig::Base.admin_config_of_class(resource_class)
128
+ @resource_admin_config
129
+ end
130
+
131
+
132
+ class << self
133
+
134
+ def remove_namespace(string, namespaces)
135
+ (string.split('/') - namespaces).join('/')
136
+ end
137
+
138
+ def register_routes(rails_router)
139
+ return if self == Adminsite::Admin::ResourcesController
140
+ super(rails_router)
141
+ end
142
+
143
+ def resource_class
144
+ raise NotImplementedError.new('Define resource_class in subclass')
145
+ end
146
+ end
147
+
148
+ end