rademade_admin 0.1.0 → 0.1.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 (106) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/rademade_admin/leaflet/layers-2x.png +0 -0
  3. data/app/assets/images/rademade_admin/leaflet/layers.png +0 -0
  4. data/app/assets/images/rademade_admin/leaflet/marker-icon-2x.png +0 -0
  5. data/app/assets/images/rademade_admin/leaflet/marker-icon.png +0 -0
  6. data/app/assets/images/rademade_admin/leaflet/marker-shadow.png +0 -0
  7. data/app/assets/javascripts/rademade_admin.coffee +2 -0
  8. data/app/assets/javascripts/rademade_admin/app/common/cropper.coffee +70 -0
  9. data/app/assets/javascripts/rademade_admin/app/common/lang-panel.coffee +1 -1
  10. data/app/assets/javascripts/rademade_admin/app/common/location.coffee.erb +50 -0
  11. data/app/assets/javascripts/rademade_admin/app/common/uploader.coffee +74 -38
  12. data/app/assets/javascripts/rademade_admin/app/form-popup/view.coffee +1 -8
  13. data/app/assets/javascripts/rademade_admin/app/select2/related/view.coffee +3 -7
  14. data/app/assets/javascripts/rademade_admin/app/select2/view.coffee +7 -5
  15. data/app/assets/javascripts/rademade_admin/app/templates/crop.jst.ejs +11 -0
  16. data/app/assets/javascripts/rademade_admin/app/templates/related-item.jst.ejs +5 -0
  17. data/app/assets/stylesheets/edit.css +0 -0
  18. data/app/assets/stylesheets/rademade_admin.sass.erb +7 -0
  19. data/app/assets/stylesheets/rademade_admin/blocks/buttons/main.sass +49 -1
  20. data/app/assets/stylesheets/rademade_admin/blocks/form/checkbox.sass +14 -0
  21. data/app/assets/stylesheets/rademade_admin/blocks/form/input.sass +1 -1
  22. data/app/assets/stylesheets/rademade_admin/blocks/form/map.sass +4 -0
  23. data/app/assets/stylesheets/rademade_admin/lib/{glyphicon.sass.erb → glyphicon.sass} +5 -5
  24. data/app/assets/stylesheets/rademade_admin/lib/jcrop.sass +13 -0
  25. data/app/assets/stylesheets/rademade_admin/lib/uploader.sass +2 -2
  26. data/app/assets/stylesheets/rademade_admin/mixins/font_face.scss +10 -0
  27. data/app/assets/stylesheets/rademade_admin/modules/login/_main.sass +2 -1
  28. data/app/cells/menu/item.slim +15 -0
  29. data/app/cells/menu/sub_item.slim +4 -0
  30. data/app/cells/menu/sub_items.slim +3 -0
  31. data/app/cells/menu_cell.rb +55 -0
  32. data/app/controllers/rademade_admin/file_controller.rb +13 -0
  33. data/app/controllers/rademade_admin/model_controller.rb +5 -1
  34. data/app/helpers/rademade_admin/uri_helper.rb +5 -5
  35. data/app/inputs/rademade_admin/file_input.rb +24 -3
  36. data/app/inputs/rademade_admin/location_input.rb +43 -0
  37. data/app/services/menu_service.rb +27 -0
  38. data/app/services/menu_service/menu_item.rb +32 -0
  39. data/app/services/model_controller/notifier.rb +20 -5
  40. data/app/services/saver.rb +1 -1
  41. data/app/services/search/conditions/abstract.rb +3 -1
  42. data/app/services/search/conditions/autocomplete.rb +1 -1
  43. data/app/services/search/conditions/list.rb +2 -2
  44. data/app/services/search/conditions/related_list.rb +2 -2
  45. data/app/services/search/part/abstract.rb +18 -4
  46. data/app/services/search/part/order.rb +3 -1
  47. data/app/services/upload/preview_service.rb +20 -9
  48. data/app/views/rademade_admin/_blocks/_header.html.erb +2 -2
  49. data/app/views/rademade_admin/_blocks/_menu.html.erb +3 -39
  50. data/app/views/rademade_admin/_blocks/button/_edit.html.erb +3 -0
  51. data/app/views/rademade_admin/_blocks/form/_lang_panel.html.erb +6 -3
  52. data/app/views/rademade_admin/_layouts/inner/index_table.html.erb +3 -1
  53. data/app/views/rademade_admin/abstract/index.html.erb +3 -1
  54. data/app/views/rademade_admin/abstract/related.html.erb +14 -7
  55. data/config/initializers/carrier_wave/mongoid.rb +1 -1
  56. data/config/locales/rademade_admin.en.yml +6 -1
  57. data/config/locales/rademade_admin.ru.yml +28 -0
  58. data/config/locales/simple_form.ru.yml +7 -0
  59. data/config/routes.rb +1 -0
  60. data/lib/rademade_admin.rb +3 -2
  61. data/lib/rademade_admin/engine.rb +2 -0
  62. data/lib/rademade_admin/input/related_select_input/related_list.rb +15 -10
  63. data/lib/rademade_admin/model/adapter/data/active_record.rb +10 -11
  64. data/lib/rademade_admin/model/adapter/data/mongoid.rb +1 -1
  65. data/lib/rademade_admin/model/configuration.rb +9 -3
  66. data/lib/rademade_admin/model/info.rb +5 -2
  67. data/lib/rademade_admin/model/info/data_item.rb +6 -10
  68. data/lib/rademade_admin/model/info/field.rb +10 -2
  69. data/lib/rademade_admin/uploader/carrier_wave.rb +31 -0
  70. data/lib/rademade_admin/uploader/crop_photo.rb +24 -0
  71. data/lib/rademade_admin/uploader/photo.rb +25 -3
  72. data/lib/rademade_admin/version.rb +1 -1
  73. metadata +124 -72
  74. data/app/assets/stylesheets/old/-bootstrap/bootstrap-overrides.css.erb +0 -341
  75. data/app/assets/stylesheets/old/-bootstrap/main.scss.erb +0 -78
  76. data/app/assets/stylesheets/old/-detail_admin/chart-showcase.scss.erb +0 -33
  77. data/app/assets/stylesheets/old/-detail_admin/datatables.scss.erb +0 -3
  78. data/app/assets/stylesheets/old/-detail_admin/elements.scss.erb +0 -665
  79. data/app/assets/stylesheets/old/-detail_admin/error.scss.erb +0 -19
  80. data/app/assets/stylesheets/old/-detail_admin/form-showcase.scss.erb +0 -87
  81. data/app/assets/stylesheets/old/-detail_admin/form-wizard.scss.erb +0 -261
  82. data/app/assets/stylesheets/old/-detail_admin/gallery.scss.erb +0 -106
  83. data/app/assets/stylesheets/old/-detail_admin/grids.scss.erb +0 -21
  84. data/app/assets/stylesheets/old/-detail_admin/icons.scss.erb +0 -115
  85. data/app/assets/stylesheets/old/-detail_admin/index.scss.erb +0 -290
  86. data/app/assets/stylesheets/old/-detail_admin/layout.scss.erb +0 -523
  87. data/app/assets/stylesheets/old/-detail_admin/new-user.scss.erb +0 -49
  88. data/app/assets/stylesheets/old/-detail_admin/personal-info.scss.erb +0 -144
  89. data/app/assets/stylesheets/old/-detail_admin/popup.scss.erb +0 -3
  90. data/app/assets/stylesheets/old/-detail_admin/signin.scss.erb +0 -128
  91. data/app/assets/stylesheets/old/-detail_admin/tables.scss.erb +0 -195
  92. data/app/assets/stylesheets/old/-detail_admin/ui-elements.scss.erb +0 -177
  93. data/app/assets/stylesheets/old/-detail_admin/user-list.scss.erb +0 -112
  94. data/app/assets/stylesheets/old/-detail_admin/user-profile.scss.erb +0 -169
  95. data/app/assets/stylesheets/old/-detail_admin/web-app-icons.scss.erb +0 -25
  96. data/app/assets/stylesheets/old/-lib/bootstrap.datepicker.css.erb +0 -302
  97. data/app/assets/stylesheets/old/-lib/morris.css.erb +0 -2
  98. data/app/assets/stylesheets/old/base.scss.erb +0 -23
  99. data/app/assets/stylesheets/old/edit.css +0 -7
  100. data/app/assets/stylesheets/old/file-upload.scss.erb +0 -12
  101. data/app/assets/stylesheets/old/notifier.custom.css.erb +0 -661
  102. data/app/assets/stylesheets/old/scaffolds.scss.erb +0 -32
  103. data/app/helpers/rademade_admin/menu_helper.rb +0 -53
  104. data/app/views/rademade_admin/_blocks/_sub_menu.html.erb +0 -11
  105. data/app/views/rademade_admin/_blocks/sub_menu/_link.html.erb +0 -6
  106. data/config/locales/devise.en.yml +0 -59
@@ -0,0 +1,14 @@
1
+ .form-box
2
+ .input-holder
3
+ .checkbox
4
+ display: block
5
+ margin-top: 10px
6
+ +clear
7
+
8
+ input
9
+ float: left
10
+ margin: 0 5px 0 0
11
+
12
+ label
13
+ float: left
14
+ font-size: 14px
@@ -2,7 +2,7 @@
2
2
  .input-holder
3
3
  float: left
4
4
  input[type="checkbox"]
5
- margin-top: 7px
5
+ margin-top: 10px
6
6
  width: 20px
7
7
  height: 20px
8
8
 
@@ -0,0 +1,4 @@
1
+ .location
2
+ .map
3
+ width: 450px
4
+ height: 250px
@@ -1,10 +1,10 @@
1
1
  @font-face
2
2
  font-family: 'Glyphicons Halflings'
3
- src: url(<%= asset_path 'glyphicons-halflings-regular.eot' %>)
4
- src: url(<%= asset_path 'glyphicons-halflings-regular.eot?#iefix' %>) format("embedded-opentype")
5
- src: url(<%= asset_path 'glyphicons-halflings-regular.woff' %>) format("woff")
6
- src: url(<%= asset_path 'glyphicons-halflings-regular.ttf' %>) format("truetype")
7
- src: url(<%= asset_path 'glyphicons-halflings-regular.svg' %>) format("svg")
3
+ src: asset-url('glyphicons-halflings-regular.eot')
4
+ src: asset-url('glyphicons-halflings-regular.eot?#iefix') format("embedded-opentype")
5
+ src: asset-url('glyphicons-halflings-regular.woff') format("woff")
6
+ src: asset-url('glyphicons-halflings-regular.ttf') format("truetype")
7
+ src: asset-url('glyphicons-halflings-regular.svg') format("svg")
8
8
 
9
9
  .glyphicon
10
10
  position: relative
@@ -0,0 +1,13 @@
1
+ .crop
2
+ padding: 50px 0
3
+ width: 75%
4
+ height: 100%
5
+ margin: auto
6
+ text-align: center
7
+ +box-sizing(border-box)
8
+ .jcrop-holder
9
+ display: inline-block
10
+ .crop-image
11
+ height: 90%
12
+ .crop-actions
13
+ padding: 50px 0 0 0
@@ -41,14 +41,14 @@
41
41
  position: absolute
42
42
  top: 0
43
43
  right: 0
44
- font-size: 500px
44
+ font-size: 113px
45
45
  text-align: right
46
46
  z-index: 2
47
47
  +opacity(0)
48
48
 
49
49
  .upload-btn
50
50
  float: left
51
- margin-top: 10px
51
+ margin: 10px 10px 0 0
52
52
 
53
53
  .upload-progress-wrapper
54
54
  display: none
@@ -0,0 +1,10 @@
1
+ @font-face {
2
+ font-family: 'Glyphicons Halflings';
3
+ src: asset_url('glyphicons-halflings-regular.eot'),
4
+ asset_url('glyphicons-halflings-regular.eot?#iefix') format("embedded-opentype"),
5
+ asset_url('glyphicons-halflings-regular.woff') format("woff"),
6
+ asset_url('glyphicons-halflings-regular.ttf') format("truetype"),
7
+ asset_url('glyphicons-halflings-regular.svg') format("svg");
8
+ font-weight: normal;
9
+ font-style: normal;
10
+ }
@@ -59,7 +59,8 @@
59
59
  display: none
60
60
  &.password
61
61
  right: 14px
62
-
62
+ .glyphicon
63
+ top: -3px
63
64
  .form-input
64
65
  display: inline-block
65
66
  width: 100%
@@ -0,0 +1,15 @@
1
+ li class=('menu-box' + (@is_active ? ' active' : ''))
2
+
3
+ .pointer
4
+ .arrow
5
+ .arrow_border
6
+
7
+ a href="#{@uri}" class=('menu-link' + (@has_sub_items ? ' dropdown-toggle' : ''))
8
+ i(class="#{@ico_class}")
9
+ span #{@name}
10
+
11
+ - if @has_sub_items
12
+ span.caret
13
+
14
+ - if @has_sub_items
15
+ =render_cell(:menu, :sub_items, @sub_items)
@@ -0,0 +1,4 @@
1
+ li class=('menu-box' + (@is_active ? ' active' : ''))
2
+ a.menu-link(href="#{@uri}") #{@name}
3
+ - if @has_sub_items
4
+ =render(:menu, :sub_items, @sub_items)
@@ -0,0 +1,3 @@
1
+ ul.submenu
2
+ - for item in @sub_items do
3
+ =render_cell(:menu, :sub_item, item)
@@ -0,0 +1,55 @@
1
+ class MenuCell < Cell::Rails
2
+ include ::RademadeAdmin::UriHelper
3
+
4
+ class << self
5
+ attr_accessor :current_model
6
+ end
7
+
8
+ def root_item
9
+ @uri = root_uri
10
+ @name = t('rademade_admin.home')
11
+ @ico_class = 'glyphicon glyphicon-home'
12
+ @has_sub_items = false
13
+ @is_active = self.class.current_model.nil?
14
+ render view: :item
15
+ end
16
+
17
+ def item(item)
18
+ item_data(item)
19
+ render
20
+ end
21
+
22
+ def sub_items(sub_items)
23
+ @sub_items = sub_items
24
+ render
25
+ end
26
+
27
+ def sub_item(sub_item)
28
+ item_data(sub_item)
29
+ render
30
+ end
31
+
32
+ private
33
+
34
+ def item_data(item)
35
+ @is_active = current?(item) || children_current?(item) #todo extract service for current
36
+ @uri = admin_list_uri(item.model)
37
+ @name = item.name
38
+ @has_sub_items = item.has_sub_items?
39
+ @sub_items = item.sub_items
40
+ end
41
+
42
+ def current?(item)
43
+ self.class.current_model == item.model
44
+ end
45
+
46
+ def children_current?(item, status = false)
47
+ if item.has_sub_items?
48
+ item.sub_items.each do |sub_item|
49
+ status ||= current?(sub_item) || children_current?(sub_item)
50
+ end
51
+ end
52
+ status
53
+ end
54
+
55
+ end
@@ -4,6 +4,17 @@ class RademadeAdmin::FileController < RademadeAdmin::AbstractController
4
4
  def upload
5
5
  param_key = params[:column].to_sym
6
6
  uploader.store!(params[param_key])
7
+ render :json => {
8
+ :html => RademadeAdmin::Upload::PreviewService.new(uploader).preview_html,
9
+ :file => uploader
10
+ }
11
+ rescue CarrierWave::UploadError => e
12
+ render :json => { :error => e.to_s }, :status => :unprocessable_entity
13
+ end
14
+
15
+ def crop
16
+ image = uploader.crop_image(params[:path], params[:crop])
17
+ uploader.store!(image)
7
18
  upload_preview_service = RademadeAdmin::Upload::PreviewService.new(uploader)
8
19
  render :json => {
9
20
  :html => upload_preview_service.preview_html,
@@ -13,6 +24,8 @@ class RademadeAdmin::FileController < RademadeAdmin::AbstractController
13
24
  render :json => { :error => e.to_s }, :status => :unprocessable_entity
14
25
  end
15
26
 
27
+ private
28
+
16
29
  def uploader
17
30
  @uploader ||= RademadeAdmin::LoaderService.const_get(params[:uploader]).new(model, params[:column])
18
31
  end
@@ -8,7 +8,7 @@ module RademadeAdmin
8
8
  include RademadeAdmin::Templates
9
9
  include RademadeAdmin::Notifier
10
10
 
11
- before_filter :load_options
11
+ before_filter :load_options, :additional_options
12
12
  before_filter :sortable_service, :only => [:index]
13
13
 
14
14
  def create
@@ -160,5 +160,9 @@ module RademadeAdmin
160
160
  @sortable_service ||= RademadeAdmin::SortableService.new(model_info, params)
161
161
  end
162
162
 
163
+ def additional_options
164
+ MenuCell.current_model = model
165
+ end
166
+
163
167
  end
164
168
  end
@@ -1,6 +1,10 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module RademadeAdmin::UriHelper
3
3
 
4
+ def root_uri
5
+ admin_url_for(controller: 'dashboard')
6
+ end
7
+
4
8
  def admin_list_uri(model)
5
9
  admin_model_url_for(model, {
6
10
  :action => :index
@@ -83,11 +87,7 @@ module RademadeAdmin::UriHelper
83
87
  begin
84
88
  Rails.application.routes.url_helpers.url_for(opts)
85
89
  rescue
86
- begin
87
- RademadeAdmin::Engine.routes.url_helpers.url_for(opts)
88
- rescue
89
- nil
90
- end
90
+ RademadeAdmin::Engine.routes.url_helpers.url_for(opts)
91
91
  end
92
92
  end
93
93
 
@@ -18,8 +18,12 @@ module RademadeAdmin
18
18
  template.content_tag(
19
19
  :div,
20
20
  HtmlBuffer.new([
21
- upload_preview_service.preview_html, input_file_html,
22
- upload_progress_html, upload_button_html, input_hidden_html
21
+ upload_preview_service.preview_html,
22
+ input_file_html,
23
+ upload_progress_html,
24
+ upload_button_html,
25
+ upload_preview_service.is_crop? ? crop_button_html : '',
26
+ input_hidden_html
23
27
  ]),
24
28
  { :class => 'uploader-wrapper' }
25
29
  )
@@ -56,10 +60,23 @@ module RademadeAdmin
56
60
 
57
61
  def upload_button_html
58
62
  template.content_tag(:span, I18n.t('rademade_admin.upload_file'), {
59
- :class => 'btn green-btn upload-btn'
63
+ :class => 'btn green-btn upload-btn',
64
+ :data => {
65
+ :upload => true
66
+ }
60
67
  })
61
68
  end
62
69
 
70
+ def crop_button_html
71
+ template.content_tag(:span, I18n.t('rademade_admin.crop'), {
72
+ :class => 'btn red-btn upload-btn',
73
+ :data => {
74
+ :crop => true,
75
+ :url => admin_url_for(:controller => 'file', :action => 'crop')
76
+ }
77
+ }) if photo_uploader?
78
+ end
79
+
63
80
  def upload_preview_service
64
81
  @upload_preview_service ||= RademadeAdmin::Upload::PreviewService.new(uploader)
65
82
  end
@@ -68,5 +85,9 @@ module RademadeAdmin
68
85
  @uploader ||= input_html_options[:value] || object.send(attribute_name)
69
86
  end
70
87
 
88
+ def photo_uploader?
89
+ uploader.class.ancestors.include? RademadeAdmin::Uploader::Photo
90
+ end
91
+
71
92
  end
72
93
  end
@@ -0,0 +1,43 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module RademadeAdmin
3
+ class LocationInput < SimpleForm::Inputs::Base
4
+
5
+ def input
6
+ template.content_tag(
7
+ :div,
8
+ HtmlBuffer.new([map_html, location_attributes_html]),
9
+ { :class => 'location' }
10
+ )
11
+ end
12
+
13
+ private
14
+
15
+ def map_html
16
+ template.content_tag(:div, '', {
17
+ :id => "map_#{object.id}",
18
+ :class => 'map'
19
+ })
20
+ end
21
+
22
+ def location_attributes_html
23
+ location_attributes = object.send(attribute_name)
24
+ HtmlBuffer.new([
25
+ location_attribute_html(location_attributes, :latitude),
26
+ location_attribute_html(location_attributes, :longitude),
27
+ location_attribute_html(location_attributes, :zoom, 1)
28
+ ])
29
+ end
30
+
31
+ def location_attribute_html(location_attributes, name, default_value = 0)
32
+ template.content_tag(:input, '', {
33
+ :type => 'hidden',
34
+ :name => "data[#{attribute_name}][#{name}]",
35
+ :value => location_attributes[name] || default_value,
36
+ :data => {
37
+ :location_attribute => name
38
+ }
39
+ })
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module RademadeAdmin
3
+ class MenuService
4
+ include Singleton
5
+
6
+ def main_menu
7
+ @main_menu ||= collect_children
8
+ end
9
+
10
+ private
11
+
12
+ def initialize
13
+ @model_infos = RademadeAdmin::Model::Graph.instance.root_models
14
+ end
15
+
16
+ def collect_children(parent_model = nil)
17
+ menu_items = []
18
+ @model_infos.each do |model_info|
19
+ if model_info.parent_model == parent_model && model_info.display_in_menu?
20
+ menu_items << RademadeAdmin::MenuService::MenuItem.new(model_info, collect_children(model_info.model))
21
+ end
22
+ end
23
+ menu_items
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,32 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module RademadeAdmin
3
+ class MenuService
4
+ class MenuItem
5
+
6
+ attr_accessor :model_info, :children_items
7
+
8
+ def name
9
+ @model_info.item_name
10
+ end
11
+
12
+ def model
13
+ @model_info.model
14
+ end
15
+
16
+ def has_sub_items?
17
+ sub_items.size > 0
18
+ end
19
+
20
+ def sub_items
21
+ @children_items
22
+ end
23
+
24
+ private
25
+
26
+ def initialize(model_info, children_items = [])
27
+ @model_info, @children_items = model_info, children_items
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -9,17 +9,32 @@ module RademadeAdmin
9
9
  end
10
10
 
11
11
  def success_insert(item)
12
- success_message(item, 'was inserted!', {
13
- :form_action => admin_update_uri(item)
14
- })
12
+ respond_to do |format|
13
+ format.html { redirect_to admin_edit_uri(item) }
14
+ format.json {
15
+ success_message(item, 'was inserted!', {
16
+ :form_action => admin_update_uri(item)
17
+ })
18
+ }
19
+ end
15
20
  end
16
21
 
17
22
  def success_update(item)
18
- success_message(item, 'data was updated!')
23
+ respond_to do |format|
24
+ format.html { redirect_to admin_edit_uri(item) }
25
+ format.json {
26
+ success_message(item, 'data was updated!')
27
+ }
28
+ end
19
29
  end
20
30
 
21
31
  def success_delete(item)
22
- success_message(item, 'was deleted!')
32
+ respond_to do |format|
33
+ format.html { redirect_to admin_list_uri(item) }
34
+ format.json {
35
+ success_message(item, 'was deleted!')
36
+ }
37
+ end
23
38
  end
24
39
 
25
40
  def success_unlink