thecore_ui_rails_admin 2.5.10 → 2.6.3
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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/rails_admin/custom/ui.js +7 -2
- data/app/views/rails_admin/main/thecore_blazer_bi.html.erb +5 -0
- data/app/views/rails_admin/main/thecore_sidekiq_monitor.html.erb +5 -0
- data/config/blazer.yml +79 -0
- data/config/initializers/rails_admin.rb +20 -1
- data/config/initializers/thecore_ui_rails_admin_app_configs.rb +1 -1
- data/config/initializers/thecore_ui_rails_admin_load_root_actions_for.rb +6 -0
- data/config/locales/it.main.yml +8 -0
- data/config/routes.rb +5 -0
- data/db/migrate/20220124113739_install_blazer.rb +47 -0
- data/lib/concerns/thecore_ui_rails_admin_role.rb +1 -13
- data/lib/iframes/blazer_bi.rb +59 -0
- data/lib/iframes/sidekiq_monitor.rb +59 -0
- data/lib/thecore_ui_rails_admin.rb +8 -3
- metadata +17 -19
- data/app/assets/javascripts/rails_admin/ra.widgets.coffee.older +0 -233
- data/app/views/layouts.old/rails_admin/_navigation.html.haml +0 -13
- data/app/views/layouts.old/rails_admin/_secondary_navigation.html.haml +0 -3
- data/app/views/layouts.old/rails_admin/_sidebar_navigation.html.haml +0 -4
- data/app/views/layouts.old/rails_admin/_style_common.html.haml +0 -4
- data/app/views/layouts.old/rails_admin/_style_override.html.haml +0 -1
- data/app/views/layouts.old/rails_admin/_user_navigation.html.haml +0 -7
- data/app/views/layouts.old/rails_admin/application.html.haml +0 -59
- data/app/views/layouts.old/rails_admin/pjax.html.haml +0 -30
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f47b2b006585a81468932a5378a70dcd9a834cc2190a66f7e809c0c36cdfe0d7
|
|
4
|
+
data.tar.gz: 536b6fc2d0bfcbfd1b6d5071045a58e1dbc81df2043c806f66fbcc20eb1bf088
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2c50e7627a1319a21b4a4e4e33ac32d748191f04812852832c04106162be50d7536ba0f649731d00508d4041ed807182f9a669fc61c997c80f7f6805a6123b0d
|
|
7
|
+
data.tar.gz: 6d64b7ed96e3a1677d1ec0094a8e6185fb4f379a21b72e336ee35ccac2964bec3a5fdc273fc7545fb1c8d83a6a2e5f8b7b1226f2ba8c54d659b45436168c5afc
|
|
@@ -16,13 +16,18 @@ function hideBreadCrumbAndToolbar() {
|
|
|
16
16
|
|
|
17
17
|
// console.log(actionName, isRoot)
|
|
18
18
|
|
|
19
|
-
if($(".hide-breadcrumb").length) $(".breadcrumb").hide()
|
|
19
|
+
if ($(".hide-breadcrumb").length) $(".breadcrumb").hide()
|
|
20
20
|
else $(".breadcrumb").show()
|
|
21
21
|
|
|
22
|
-
if($(".hide-toolbar").length) $(".breadcrumb + .nav.nav-tabs").hide()
|
|
22
|
+
if ($(".hide-toolbar").length) $(".breadcrumb + .nav.nav-tabs").hide()
|
|
23
23
|
else $(".breadcrumb + .nav.nav-tabs").show()
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
|
|
27
|
+
function adjustIframe(obj) {
|
|
28
|
+
obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px';
|
|
29
|
+
}
|
|
30
|
+
|
|
26
31
|
// Re evaluate at each iteraction
|
|
27
32
|
$(document).off('ready pjax:success', hideBreadCrumbAndToolbar);
|
|
28
33
|
$(document).on('ready pjax:success', hideBreadCrumbAndToolbar);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<span class="hide-toolbar"></span>
|
|
2
|
+
|
|
3
|
+
<iframe class="thecore-blazer-bi" src="/blazer" title="Business Intelligence" frameborder="0"
|
|
4
|
+
allow="accelerometer; clipboard-write; encrypted-media; gyroscope;" allowfullscreen style="width:100%; min-height:70vh"
|
|
5
|
+
scrolling="no" onload="adjustIframe(this)"></iframe>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<span class="hide-toolbar"></span>
|
|
2
|
+
|
|
3
|
+
<iframe class="sidekiq-monitor" src="/sidekiq" title="Background Processes Monitor" frameborder="0"
|
|
4
|
+
allow="accelerometer; clipboard-write; encrypted-media; gyroscope;" allowfullscreen style="width:100%;"
|
|
5
|
+
scrolling="no" onload="adjustIframe(this)"></iframe>
|
data/config/blazer.yml
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# see https://github.com/ankane/blazer for more info
|
|
2
|
+
|
|
3
|
+
data_sources:
|
|
4
|
+
main:
|
|
5
|
+
url: <%= ENV["BLAZER_DATABASE_URL"] %>
|
|
6
|
+
|
|
7
|
+
# statement timeout, in seconds
|
|
8
|
+
# none by default
|
|
9
|
+
# timeout: 15
|
|
10
|
+
|
|
11
|
+
# caching settings
|
|
12
|
+
# can greatly improve speed
|
|
13
|
+
# off by default
|
|
14
|
+
# cache:
|
|
15
|
+
# mode: slow # or all
|
|
16
|
+
# expires_in: 60 # min
|
|
17
|
+
# slow_threshold: 15 # sec, only used in slow mode
|
|
18
|
+
|
|
19
|
+
# wrap queries in a transaction for safety
|
|
20
|
+
# not necessary if you use a read-only user
|
|
21
|
+
# true by default
|
|
22
|
+
# use_transaction: false
|
|
23
|
+
|
|
24
|
+
smart_variables:
|
|
25
|
+
# zone_id: "SELECT id, name FROM zones ORDER BY name ASC"
|
|
26
|
+
# period: ["day", "week", "month"]
|
|
27
|
+
# status: {0: "Active", 1: "Archived"}
|
|
28
|
+
|
|
29
|
+
linked_columns:
|
|
30
|
+
# user_id: "/admin/users/{value}"
|
|
31
|
+
|
|
32
|
+
smart_columns:
|
|
33
|
+
# user_id: "SELECT id, name FROM users WHERE id IN {value}"
|
|
34
|
+
|
|
35
|
+
# create audits
|
|
36
|
+
audit: true
|
|
37
|
+
|
|
38
|
+
# change the time zone
|
|
39
|
+
# time_zone: "Pacific Time (US & Canada)"
|
|
40
|
+
|
|
41
|
+
# class name of the user model
|
|
42
|
+
# user_class: User
|
|
43
|
+
|
|
44
|
+
# method name for the current user
|
|
45
|
+
# user_method: current_user
|
|
46
|
+
|
|
47
|
+
# method name for the display name
|
|
48
|
+
# user_name: name
|
|
49
|
+
|
|
50
|
+
# custom before_action to use for auth
|
|
51
|
+
# before_action_method: require_admin
|
|
52
|
+
|
|
53
|
+
# email to send checks from
|
|
54
|
+
# from_email: blazer@example.org
|
|
55
|
+
|
|
56
|
+
# webhook for Slack
|
|
57
|
+
# slack_webhook_url: <%= ENV["BLAZER_SLACK_WEBHOOK_URL"] %>
|
|
58
|
+
|
|
59
|
+
check_schedules:
|
|
60
|
+
- "1 day"
|
|
61
|
+
- "1 hour"
|
|
62
|
+
- "5 minutes"
|
|
63
|
+
|
|
64
|
+
# enable anomaly detection
|
|
65
|
+
# note: with trend, time series are sent to https://trendapi.org
|
|
66
|
+
# anomaly_checks: prophet / trend / anomaly_detection
|
|
67
|
+
|
|
68
|
+
# enable forecasting
|
|
69
|
+
# note: with trend, time series are sent to https://trendapi.org
|
|
70
|
+
# forecasting: prophet / trend
|
|
71
|
+
|
|
72
|
+
# enable map
|
|
73
|
+
# mapbox_access_token: <%= ENV["MAPBOX_ACCESS_TOKEN"] %>
|
|
74
|
+
|
|
75
|
+
# enable uploads
|
|
76
|
+
# uploads:
|
|
77
|
+
# url: <%= ENV["BLAZER_UPLOADS_URL"] %>
|
|
78
|
+
# schema: uploads
|
|
79
|
+
# data_source: main
|
|
@@ -2,11 +2,30 @@ require 'rails_admin'
|
|
|
2
2
|
require 'nested_form/builder_mixin'
|
|
3
3
|
|
|
4
4
|
RailsAdmin.config do |config|
|
|
5
|
+
# Freeze more or fewer columns (col 1 = checkboxes, 2 = links/actions) for horizontal scrolling:
|
|
6
|
+
config.sidescroll = {num_frozen_columns: 2}
|
|
7
|
+
|
|
5
8
|
config.main_app_name = Proc.new { |controller| [ ((ENV["APP_NAME"].presence || Settings.app_name.presence) rescue "Thecore"), "" ] }
|
|
6
9
|
# Link for background Job
|
|
7
|
-
(config.navigation_static_links ||= {}).merge! "Background Monitor" => "#{ENV["BACKEND_URL"].presence || "http://localhost:3000"}/sidekiq"
|
|
10
|
+
# (config.navigation_static_links ||= {}).merge! "Background Monitor" => "#{ENV["BACKEND_URL"].presence || "http://localhost:3000"}/sidekiq"
|
|
8
11
|
|
|
9
12
|
### Popular gems integration
|
|
13
|
+
config.model "Blazer::Audit" do
|
|
14
|
+
visible false
|
|
15
|
+
end
|
|
16
|
+
config.model "Blazer::Check" do
|
|
17
|
+
visible false
|
|
18
|
+
end
|
|
19
|
+
config.model "Blazer::Dashboard" do
|
|
20
|
+
visible false
|
|
21
|
+
end
|
|
22
|
+
config.model "Blazer::DashboardQuery" do
|
|
23
|
+
visible false
|
|
24
|
+
end
|
|
25
|
+
config.model "Blazer::Query" do
|
|
26
|
+
visible false
|
|
27
|
+
end
|
|
28
|
+
|
|
10
29
|
config.model "RoleUser" do
|
|
11
30
|
visible false
|
|
12
31
|
end
|
data/config/locales/it.main.yml
CHANGED
|
@@ -19,6 +19,14 @@ it:
|
|
|
19
19
|
object_not_found: "Impossibile trovare il modello %{model} con id '%{id}'"
|
|
20
20
|
successful: "Azione eseguita con successo: %{action} (%{name})"
|
|
21
21
|
actions:
|
|
22
|
+
thecore_sidekiq_monitor:
|
|
23
|
+
menu: Monitoraggio Attività
|
|
24
|
+
breadcrumb: Monitoraggio Attività
|
|
25
|
+
title: Monitoraggio Attività
|
|
26
|
+
thecore_blazer_bi:
|
|
27
|
+
menu: Business Intelligence
|
|
28
|
+
breadcrumb: Business Intelligence
|
|
29
|
+
title: Business Intelligence
|
|
22
30
|
index:
|
|
23
31
|
link: Mostra tutti gli Elementi
|
|
24
32
|
label: "Impostazioni"
|
data/config/routes.rb
CHANGED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
class InstallBlazer < ActiveRecord::Migration[6.1]
|
|
2
|
+
def change
|
|
3
|
+
create_table :blazer_queries do |t|
|
|
4
|
+
t.references :creator
|
|
5
|
+
t.string :name
|
|
6
|
+
t.text :description
|
|
7
|
+
t.text :statement
|
|
8
|
+
t.string :data_source
|
|
9
|
+
t.string :status
|
|
10
|
+
t.timestamps null: false
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
create_table :blazer_audits do |t|
|
|
14
|
+
t.references :user
|
|
15
|
+
t.references :query
|
|
16
|
+
t.text :statement
|
|
17
|
+
t.string :data_source
|
|
18
|
+
t.datetime :created_at
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
create_table :blazer_dashboards do |t|
|
|
22
|
+
t.references :creator
|
|
23
|
+
t.string :name
|
|
24
|
+
t.timestamps null: false
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
create_table :blazer_dashboard_queries do |t|
|
|
28
|
+
t.references :dashboard
|
|
29
|
+
t.references :query
|
|
30
|
+
t.integer :position
|
|
31
|
+
t.timestamps null: false
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
create_table :blazer_checks do |t|
|
|
35
|
+
t.references :creator
|
|
36
|
+
t.references :query
|
|
37
|
+
t.string :state
|
|
38
|
+
t.string :schedule
|
|
39
|
+
t.text :emails
|
|
40
|
+
t.text :slack_channels
|
|
41
|
+
t.string :check_type
|
|
42
|
+
t.text :message
|
|
43
|
+
t.datetime :last_run_at
|
|
44
|
+
t.timestamps null: false
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -15,23 +15,11 @@ module ThecoreUiRailsAdminRole
|
|
|
15
15
|
|
|
16
16
|
list do
|
|
17
17
|
field :created_at
|
|
18
|
-
|
|
18
|
+
field :updated_at
|
|
19
19
|
end
|
|
20
20
|
show do
|
|
21
21
|
exclude_fields :id
|
|
22
|
-
# exclude_fields :lock_version
|
|
23
22
|
end
|
|
24
|
-
# create do
|
|
25
|
-
# field :lock_version, :hidden do
|
|
26
|
-
# visible true
|
|
27
|
-
# end
|
|
28
|
-
# # include UserRailsAdminCreateConcern
|
|
29
|
-
# end
|
|
30
|
-
# edit do
|
|
31
|
-
# field :lock_version, :hidden do
|
|
32
|
-
# visible true
|
|
33
|
-
# end
|
|
34
|
-
# end
|
|
35
23
|
end
|
|
36
24
|
end
|
|
37
25
|
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
puts "Loading Blazer BI File"
|
|
2
|
+
require 'rails_admin/config/actions'
|
|
3
|
+
|
|
4
|
+
module RailsAdmin
|
|
5
|
+
module Config
|
|
6
|
+
module Actions
|
|
7
|
+
class ThecoreBlazerBi < Base
|
|
8
|
+
RailsAdmin::Config::Actions.register(self)
|
|
9
|
+
register_instance_option :object_level do
|
|
10
|
+
false
|
|
11
|
+
end
|
|
12
|
+
# This ensures the action only shows up for Users
|
|
13
|
+
register_instance_option :visible? do
|
|
14
|
+
# visible only if authorized and if the object has a defined method
|
|
15
|
+
authorized? #&& bindings[:abstract_model].model == ThecoreSpotItemsImporterXl && bindings[:abstract_model].model.column_names.include?('barcode')
|
|
16
|
+
end
|
|
17
|
+
# We want the action on members, not the Users collection
|
|
18
|
+
register_instance_option :member do
|
|
19
|
+
false
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
register_instance_option :collection do
|
|
23
|
+
false
|
|
24
|
+
end
|
|
25
|
+
register_instance_option :root? do
|
|
26
|
+
true
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
register_instance_option :breadcrumb_parent do
|
|
30
|
+
[nil]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
register_instance_option :link_icon do
|
|
34
|
+
'fa fa-line-chart'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
register_instance_option :show_in_sidebar do
|
|
38
|
+
true
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# You may or may not want pjax for your action
|
|
42
|
+
register_instance_option :pjax? do
|
|
43
|
+
true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
register_instance_option :http_methods do
|
|
47
|
+
[:get]
|
|
48
|
+
end
|
|
49
|
+
# Adding the controller which is needed to compute calls from the ui
|
|
50
|
+
register_instance_option :controller do
|
|
51
|
+
proc do # This is needed because we need that this code is re-evaluated each time is called
|
|
52
|
+
|
|
53
|
+
puts "Loading Blazer BI Controller"
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
puts "Loading Sidekiq Monitor File"
|
|
2
|
+
require 'rails_admin/config/actions'
|
|
3
|
+
|
|
4
|
+
module RailsAdmin
|
|
5
|
+
module Config
|
|
6
|
+
module Actions
|
|
7
|
+
class ThecoreSidekiqMonitor < Base
|
|
8
|
+
RailsAdmin::Config::Actions.register(self)
|
|
9
|
+
register_instance_option :object_level do
|
|
10
|
+
false
|
|
11
|
+
end
|
|
12
|
+
# This ensures the action only shows up for Users
|
|
13
|
+
register_instance_option :visible? do
|
|
14
|
+
# visible only if authorized and if the object has a defined method
|
|
15
|
+
authorized? #&& bindings[:abstract_model].model == ThecoreSpotItemsImporterXl && bindings[:abstract_model].model.column_names.include?('barcode')
|
|
16
|
+
end
|
|
17
|
+
# We want the action on members, not the Users collection
|
|
18
|
+
register_instance_option :member do
|
|
19
|
+
false
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
register_instance_option :collection do
|
|
23
|
+
false
|
|
24
|
+
end
|
|
25
|
+
register_instance_option :root? do
|
|
26
|
+
true
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
register_instance_option :breadcrumb_parent do
|
|
30
|
+
[nil]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
register_instance_option :link_icon do
|
|
34
|
+
'fa fa-caret-square-o-right'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
register_instance_option :show_in_sidebar do
|
|
38
|
+
true
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# You may or may not want pjax for your action
|
|
42
|
+
register_instance_option :pjax? do
|
|
43
|
+
true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
register_instance_option :http_methods do
|
|
47
|
+
[:get]
|
|
48
|
+
end
|
|
49
|
+
# Adding the controller which is needed to compute calls from the ui
|
|
50
|
+
register_instance_option :controller do
|
|
51
|
+
proc do # This is needed because we need that this code is re-evaluated each time is called
|
|
52
|
+
|
|
53
|
+
puts "Loading Sidekiq Monitor Controller"
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -4,7 +4,7 @@ require 'thecore_ui_commons'
|
|
|
4
4
|
# require 'rails_admin_rollincode'
|
|
5
5
|
require 'rails_admin'
|
|
6
6
|
require 'rails_admin-i18n'
|
|
7
|
-
require 'safe_yaml'
|
|
7
|
+
# require 'safe_yaml'
|
|
8
8
|
require 'rails_admin_toggleable'
|
|
9
9
|
require 'rails_admin_selectize'
|
|
10
10
|
require 'concerns/rails_admin_requirements'
|
|
@@ -21,10 +21,15 @@ require 'concerns/thecore_ui_rails_admin_permission'
|
|
|
21
21
|
require 'concerns/thecore_rails_admin_export_concern'
|
|
22
22
|
require 'concerns/thecore_rails_admin_bulk_delete_concern'
|
|
23
23
|
|
|
24
|
+
require 'blazer'
|
|
25
|
+
|
|
24
26
|
require "thecore_ui_rails_admin/engine"
|
|
25
27
|
|
|
26
28
|
module ThecoreUiRailsAdmin
|
|
27
29
|
# Rails Admin Settings
|
|
28
|
-
SafeYAML::OPTIONS[:default_mode] = :safe
|
|
29
|
-
SafeYAML::OPTIONS[:deserialize_symbols] = false
|
|
30
|
+
# SafeYAML::OPTIONS[:default_mode] = :safe
|
|
31
|
+
# SafeYAML::OPTIONS[:deserialize_symbols] = false
|
|
30
32
|
end
|
|
33
|
+
|
|
34
|
+
require 'iframes/sidekiq_monitor'
|
|
35
|
+
require 'iframes/blazer_bi'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: thecore_ui_rails_admin
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.6.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Gabriele Tassoni
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-01-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: thecore_ui_commons
|
|
@@ -95,33 +95,33 @@ dependencies:
|
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: '0.7'
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name:
|
|
98
|
+
name: rails_admin_selectize
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
101
|
- - "~>"
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '
|
|
103
|
+
version: '2.0'
|
|
104
104
|
type: :runtime
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
108
|
- - "~>"
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '
|
|
110
|
+
version: '2.0'
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
|
-
name:
|
|
112
|
+
name: blazer
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
|
-
- - "
|
|
115
|
+
- - ">="
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: '
|
|
117
|
+
version: '0'
|
|
118
118
|
type: :runtime
|
|
119
119
|
prerelease: false
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
121
|
requirements:
|
|
122
|
-
- - "
|
|
122
|
+
- - ">="
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: '
|
|
124
|
+
version: '0'
|
|
125
125
|
description: Holds all base dependencies and configurations to have a thecore integrated
|
|
126
126
|
with Rails Admin.
|
|
127
127
|
email:
|
|
@@ -141,7 +141,6 @@ files:
|
|
|
141
141
|
- app/assets/javascripts/rails_admin/custom/thecore-custom-5.js
|
|
142
142
|
- app/assets/javascripts/rails_admin/custom/thecore.js
|
|
143
143
|
- app/assets/javascripts/rails_admin/custom/ui.js
|
|
144
|
-
- app/assets/javascripts/rails_admin/ra.widgets.coffee.older
|
|
145
144
|
- app/assets/javascripts/thecore_ui_rails_admin/thecore_rails_admin.js
|
|
146
145
|
- app/assets/stylesheets/rails_admin/custom/theming-custom-1.scss
|
|
147
146
|
- app/assets/stylesheets/rails_admin/custom/theming-custom-2.scss
|
|
@@ -162,18 +161,14 @@ files:
|
|
|
162
161
|
- app/controllers/pages_controller.rb
|
|
163
162
|
- app/helpers/devise_bootstrap_errors_helper.rb
|
|
164
163
|
- app/helpers/thecore_helper.rb
|
|
165
|
-
- app/views/
|
|
166
|
-
- app/views/
|
|
167
|
-
- app/views/layouts.old/rails_admin/_sidebar_navigation.html.haml
|
|
168
|
-
- app/views/layouts.old/rails_admin/_style_common.html.haml
|
|
169
|
-
- app/views/layouts.old/rails_admin/_style_override.html.haml
|
|
170
|
-
- app/views/layouts.old/rails_admin/_user_navigation.html.haml
|
|
171
|
-
- app/views/layouts.old/rails_admin/application.html.haml
|
|
172
|
-
- app/views/layouts.old/rails_admin/pjax.html.haml
|
|
164
|
+
- app/views/rails_admin/main/thecore_blazer_bi.html.erb
|
|
165
|
+
- app/views/rails_admin/main/thecore_sidekiq_monitor.html.erb
|
|
173
166
|
- app/views/shared/_flash.html.erb
|
|
167
|
+
- config/blazer.yml
|
|
174
168
|
- config/initializers/rails_admin.rb
|
|
175
169
|
- config/initializers/thecore_concern.rb
|
|
176
170
|
- config/initializers/thecore_ui_rails_admin_app_configs.rb
|
|
171
|
+
- config/initializers/thecore_ui_rails_admin_load_root_actions_for.rb
|
|
177
172
|
- config/locales/en.index_cards.custom.yml
|
|
178
173
|
- config/locales/en.main.yml
|
|
179
174
|
- config/locales/en.rails_admin.yml
|
|
@@ -183,6 +178,7 @@ files:
|
|
|
183
178
|
- config/locales/it.rails_admin.yml
|
|
184
179
|
- config/locales/it.rollincode.yml
|
|
185
180
|
- config/routes.rb
|
|
181
|
+
- db/migrate/20220124113739_install_blazer.rb
|
|
186
182
|
- db/seeds.rb
|
|
187
183
|
- lib/abilities/thecore_ui_rails_admin.rb
|
|
188
184
|
- lib/concerns/rails_admin_requirements.rb
|
|
@@ -192,6 +188,8 @@ files:
|
|
|
192
188
|
- lib/concerns/thecore_ui_rails_admin_role.rb
|
|
193
189
|
- lib/concerns/thecore_ui_rails_admin_used_token.rb
|
|
194
190
|
- lib/concerns/thecore_ui_rails_admin_user.rb
|
|
191
|
+
- lib/iframes/blazer_bi.rb
|
|
192
|
+
- lib/iframes/sidekiq_monitor.rb
|
|
195
193
|
- lib/tasks/thecore_ui_rails_admin_tasks.rake
|
|
196
194
|
- lib/thecore_ui_rails_admin.rb
|
|
197
195
|
- lib/thecore_ui_rails_admin/engine.rb
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
$(document).on 'rails_admin.dom_ready', (e, content) ->
|
|
2
|
-
content = if content then content else $('form')
|
|
3
|
-
|
|
4
|
-
if content.length # don't waste time otherwise
|
|
5
|
-
|
|
6
|
-
# colorpicker
|
|
7
|
-
|
|
8
|
-
content.find('[data-color]').each ->
|
|
9
|
-
that = this
|
|
10
|
-
$(this).ColorPicker
|
|
11
|
-
color: $(that).val()
|
|
12
|
-
onShow: (el) ->
|
|
13
|
-
$(el).fadeIn(500)
|
|
14
|
-
false
|
|
15
|
-
onHide: (el) ->
|
|
16
|
-
$(el).fadeOut(500)
|
|
17
|
-
false
|
|
18
|
-
onChange: (hsb, hex, rgb) ->
|
|
19
|
-
$(that).val(hex)
|
|
20
|
-
$(that).css('backgroundColor', '#' + hex)
|
|
21
|
-
|
|
22
|
-
# datetime picker datepicker timepicker datetimepicker
|
|
23
|
-
$.fn.datetimepicker.defaults.icons =
|
|
24
|
-
time: 'fa fa-clock-o'
|
|
25
|
-
date: 'fa fa-calendar'
|
|
26
|
-
up: 'fa fa-chevron-up'
|
|
27
|
-
down: 'fa fa-chevron-down'
|
|
28
|
-
previous: 'fa fa-chevron-left'
|
|
29
|
-
next: 'fa fa-chevron-right'
|
|
30
|
-
today: 'fa fa-calendar-check-o'
|
|
31
|
-
clear: 'fa fa-trash'
|
|
32
|
-
close: 'fa fa-times'
|
|
33
|
-
|
|
34
|
-
content.find('[data-datetimepicker]').each ->
|
|
35
|
-
options = $(this).data('options')
|
|
36
|
-
$.extend(options, {locale: RailsAdmin.I18n.locale})
|
|
37
|
-
$(this).datetimepicker options
|
|
38
|
-
|
|
39
|
-
# enumeration
|
|
40
|
-
|
|
41
|
-
content.find('[data-enumeration]').each ->
|
|
42
|
-
if $(this).is('[multiple]')
|
|
43
|
-
$(this).filteringMultiselect $(this).data('options')
|
|
44
|
-
else
|
|
45
|
-
$(this).filteringSelect $(this).data('options')
|
|
46
|
-
|
|
47
|
-
# fileupload
|
|
48
|
-
|
|
49
|
-
content.find('[data-fileupload]').each ->
|
|
50
|
-
input = this
|
|
51
|
-
$(this).on 'click', ".delete input[type='checkbox']", ->
|
|
52
|
-
$(input).children('.toggle').toggle('slow')
|
|
53
|
-
|
|
54
|
-
# fileupload-preview
|
|
55
|
-
|
|
56
|
-
content.find('[data-fileupload]').change ->
|
|
57
|
-
input = this
|
|
58
|
-
image_container = $("#" + input.id).parent().children(".preview")
|
|
59
|
-
unless image_container.length
|
|
60
|
-
image_container = $("#" + input.id).parent().prepend($('<img />').addClass('preview').addClass('img-thumbnail')).find('img.preview')
|
|
61
|
-
image_container.parent().find('img:not(.preview)').hide()
|
|
62
|
-
ext = $("#" + input.id).val().split('.').pop().toLowerCase()
|
|
63
|
-
if input.files and input.files[0] and $.inArray(ext, ['gif', 'png', 'jpg', 'jpeg', 'bmp']) != -1
|
|
64
|
-
reader = new FileReader()
|
|
65
|
-
reader.onload = (e) ->
|
|
66
|
-
image_container.attr "src", e.target.result
|
|
67
|
-
reader.readAsDataURL input.files[0]
|
|
68
|
-
image_container.show()
|
|
69
|
-
else
|
|
70
|
-
image_container.hide()
|
|
71
|
-
|
|
72
|
-
# filtering-multiselect
|
|
73
|
-
|
|
74
|
-
content.find('[data-filteringmultiselect]').each ->
|
|
75
|
-
$(this).filteringMultiselect $(this).data('options')
|
|
76
|
-
if $(this).parents("#modal").length # hide link if we already are inside a dialog (endless issues on nested dialogs with JS)
|
|
77
|
-
$(this).siblings('.btn').remove()
|
|
78
|
-
else
|
|
79
|
-
$(this).parents('.control-group').first().remoteForm()
|
|
80
|
-
|
|
81
|
-
# filtering-select
|
|
82
|
-
|
|
83
|
-
content.find('[data-filteringselect]').each ->
|
|
84
|
-
$(this).filteringSelect $(this).data('options')
|
|
85
|
-
if $(this).parents("#modal").length # hide link if we already are inside a dialog (endless issues on nested dialogs with JS)
|
|
86
|
-
$(this).siblings('.btn').remove()
|
|
87
|
-
else
|
|
88
|
-
$(this).parents('.control-group').first().remoteForm()
|
|
89
|
-
|
|
90
|
-
# nested-many
|
|
91
|
-
|
|
92
|
-
content.find('[data-nestedmany]').each ->
|
|
93
|
-
field = $(this).parents('.control-group').first()
|
|
94
|
-
nav = field.find('> .controls > .nav')
|
|
95
|
-
tab_content = field.find('> .tab-content')
|
|
96
|
-
toggler = field.find('> .controls > .btn-group > .toggler')
|
|
97
|
-
# add each nested field to a tab-pane and reference it in the nav
|
|
98
|
-
tab_content.children('.fields:not(.tab-pane)').addClass('tab-pane').each ->
|
|
99
|
-
$(this).attr('id', 'unique-id-' + (new Date().getTime()) + Math.floor(Math.random() * 100000)) # some elements are created on the same ms
|
|
100
|
-
nav.append('<li><a data-toggle="tab" href="#' + this.id + '">' + $(this).children('.object-infos').data('object-label') + '</a></li>')
|
|
101
|
-
# only if no tab is set to active
|
|
102
|
-
if nav.find("> li.active").length == 0
|
|
103
|
-
# init first tab, toggler and tab_content/tabs visibility
|
|
104
|
-
nav.find("> li > a[data-toggle='tab']:first").tab('show')
|
|
105
|
-
if nav.children().length == 0
|
|
106
|
-
nav.hide()
|
|
107
|
-
tab_content.hide()
|
|
108
|
-
toggler.addClass('disabled').removeClass('active').children('i').addClass('icon-chevron-right')
|
|
109
|
-
else
|
|
110
|
-
if toggler.hasClass('active')
|
|
111
|
-
nav.show()
|
|
112
|
-
tab_content.show()
|
|
113
|
-
toggler.children('i').addClass('icon-chevron-down')
|
|
114
|
-
else
|
|
115
|
-
nav.hide()
|
|
116
|
-
tab_content.hide()
|
|
117
|
-
toggler.children('i').addClass('icon-chevron-right')
|
|
118
|
-
|
|
119
|
-
# nested-one
|
|
120
|
-
|
|
121
|
-
content.find('[data-nestedone]').each ->
|
|
122
|
-
field = $(this).parents('.control-group').first()
|
|
123
|
-
nav = field.find("> .controls > .nav")
|
|
124
|
-
tab_content = field.find("> .tab-content")
|
|
125
|
-
toggler = field.find('> .controls > .btn-group > .toggler')
|
|
126
|
-
tab_content.children(".fields:not(.tab-pane)").addClass('tab-pane active').each ->
|
|
127
|
-
# Convert the "add nested field" button to just showing the title of the new model
|
|
128
|
-
field.find('> .controls .add_nested_fields').removeClass('add_nested_fields').html($(this).children('.object-infos').data('object-label'))
|
|
129
|
-
nav.append('<li><a data-toggle="tab" href="#' + this.id + '">' + $(this).children('.object-infos').data('object-label') + '</a></li>')
|
|
130
|
-
first_tab = nav.find("> li > a[data-toggle='tab']:first")
|
|
131
|
-
first_tab.tab('show')
|
|
132
|
-
field.find("> .controls > [data-target]:first").html('<i class="icon-white"></i> ' + first_tab.html())
|
|
133
|
-
nav.hide()
|
|
134
|
-
if nav.children().length == 0
|
|
135
|
-
nav.hide()
|
|
136
|
-
tab_content.hide()
|
|
137
|
-
toggler.addClass('disabled').removeClass('active').children('i').addClass('icon-chevron-right')
|
|
138
|
-
else
|
|
139
|
-
if toggler.hasClass('active')
|
|
140
|
-
toggler.children('i').addClass('icon-chevron-down')
|
|
141
|
-
tab_content.show()
|
|
142
|
-
else
|
|
143
|
-
toggler.children('i').addClass('icon-chevron-right')
|
|
144
|
-
tab_content.hide()
|
|
145
|
-
|
|
146
|
-
# polymorphic-association
|
|
147
|
-
|
|
148
|
-
content.find('[data-polymorphic]').each ->
|
|
149
|
-
type_select = $(this)
|
|
150
|
-
field = type_select.parents('.control-group').first()
|
|
151
|
-
object_select = field.find('select').last()
|
|
152
|
-
urls = type_select.data('urls')
|
|
153
|
-
type_select.on 'change', (e) ->
|
|
154
|
-
if $(this).val() is ''
|
|
155
|
-
object_select.html('<option value=""></option>')
|
|
156
|
-
else
|
|
157
|
-
$.ajax
|
|
158
|
-
url: urls[type_select.val()]
|
|
159
|
-
data:
|
|
160
|
-
compact: true
|
|
161
|
-
all: true
|
|
162
|
-
beforeSend: (xhr) ->
|
|
163
|
-
xhr.setRequestHeader("Accept", "application/json")
|
|
164
|
-
success: (data, status, xhr) ->
|
|
165
|
-
html = $('<option></option>')
|
|
166
|
-
$(data).each (i, el) ->
|
|
167
|
-
option = $('<option></option>')
|
|
168
|
-
option.attr('value', el.id)
|
|
169
|
-
option.text(el.label)
|
|
170
|
-
html = html.add(option)
|
|
171
|
-
object_select.html(html)
|
|
172
|
-
|
|
173
|
-
# ckeditor
|
|
174
|
-
|
|
175
|
-
goCkeditors = ->
|
|
176
|
-
content.find('[data-richtext=ckeditor]').not('.ckeditored').each (index, domEle) ->
|
|
177
|
-
try
|
|
178
|
-
if instance = window.CKEDITOR.instances[this.id]
|
|
179
|
-
instance.destroy(true)
|
|
180
|
-
window.CKEDITOR.replace(this, $(this).data('options'))
|
|
181
|
-
$(this).addClass('ckeditored')
|
|
182
|
-
|
|
183
|
-
$editors = content.find('[data-richtext=ckeditor]').not('.ckeditored')
|
|
184
|
-
if $editors.length
|
|
185
|
-
if not window.CKEDITOR
|
|
186
|
-
options = $editors.first().data('options')
|
|
187
|
-
window.CKEDITOR_BASEPATH = options['base_location']
|
|
188
|
-
$.getScript options['jspath'], (script, textStatus, jqXHR) =>
|
|
189
|
-
goCkeditors()
|
|
190
|
-
else
|
|
191
|
-
goCkeditors()
|
|
192
|
-
|
|
193
|
-
#codemirror
|
|
194
|
-
|
|
195
|
-
goCodeMirrors = (array) =>
|
|
196
|
-
array.each (index, domEle) ->
|
|
197
|
-
options = $(this).data('options')
|
|
198
|
-
textarea = this
|
|
199
|
-
$.getScript options['locations']['mode'], (script, textStatus, jqXHR) ->
|
|
200
|
-
$('head').append('<link href="' + options['locations']['theme'] + '" rel="stylesheet" media="all" type="text\/css">')
|
|
201
|
-
CodeMirror.fromTextArea(textarea, options['options'])
|
|
202
|
-
$(textarea).addClass('codemirrored')
|
|
203
|
-
|
|
204
|
-
array = content.find('[data-richtext=codemirror]').not('.codemirrored')
|
|
205
|
-
if array.length
|
|
206
|
-
@array = array
|
|
207
|
-
if not window.CodeMirror
|
|
208
|
-
options = $(array[0]).data('options')
|
|
209
|
-
$('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
|
|
210
|
-
$.getScript options['jspath'], (script, textStatus, jqXHR) =>
|
|
211
|
-
goCodeMirrors(@array)
|
|
212
|
-
else
|
|
213
|
-
goCodeMirrors(@array)
|
|
214
|
-
|
|
215
|
-
# bootstrap_wysihtml5
|
|
216
|
-
|
|
217
|
-
goBootstrapWysihtml5s = (array, config_options) =>
|
|
218
|
-
array.each ->
|
|
219
|
-
$(@).addClass('bootstrap-wysihtml5ed')
|
|
220
|
-
$(@).closest('.controls').addClass('well')
|
|
221
|
-
$(@).wysihtml5(config_options)
|
|
222
|
-
|
|
223
|
-
array = content.find('[data-richtext=bootstrap-wysihtml5]').not('.bootstrap-wysihtml5ed')
|
|
224
|
-
if array.length
|
|
225
|
-
@array = array
|
|
226
|
-
options = $(array[0]).data('options')
|
|
227
|
-
config_options = $.parseJSON(options['config_options'])
|
|
228
|
-
if not window.wysihtml5
|
|
229
|
-
$('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
|
|
230
|
-
$.getScript options['jspath'], (script, textStatus, jqXHR) =>
|
|
231
|
-
goBootstrapWysihtml5s(@array, config_options)
|
|
232
|
-
else
|
|
233
|
-
goBootstrapWysihtml5s(@array, config_options)
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
-# .container-fluid
|
|
2
|
-
-# .navbar-header
|
|
3
|
-
-# %button.navbar-toggle.collapsed{ type: 'button', data: { toggle: 'collapse', target: '#secondary-navigation' }, aria: {expanded: 'false', controls: 'navbar'} }
|
|
4
|
-
-# %span.sr-only= t('admin.toggle_navigation')
|
|
5
|
-
-# %span.icon-bar
|
|
6
|
-
-# %span.icon-bar
|
|
7
|
-
-# %span.icon-bar
|
|
8
|
-
-# - # Added support for app name setting (falling back if not existing to standard rails_admin behaviour)
|
|
9
|
-
-# %a.navbar-brand.pjax{href: dashboard_path}
|
|
10
|
-
-# = Settings.app_name rescue (_get_plugin_name[0] || 'Rails')
|
|
11
|
-
-# %small= _get_plugin_name[1] || 'Admin'
|
|
12
|
-
-# .navbar-collapse.collapse#secondary-navigation
|
|
13
|
-
-# = render partial: 'layouts/rails_admin/secondary_navigation'
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
-# Placeholder to be overridden for special CSS needs, like using interpolation
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
- if _current_user
|
|
2
|
-
-# %ul.sidebar-nav
|
|
3
|
-
%li.dropdown-header=t :current_user
|
|
4
|
-
- if user_link = edit_user_link
|
|
5
|
-
%li.edit_user_root_link= link_to content_tag('i', "", class: 'fa fa-user', style: 'text-indent: 0') + _current_user.email, show_path(:user, _current_user.id)
|
|
6
|
-
- if logout_path.present?
|
|
7
|
-
%li=link_to content_tag('i', "", class: 'fa fa-unlink', style: 'text-indent: 0') + t('admin.misc.log_out'), logout_path, method: logout_method
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
!!! 5
|
|
2
|
-
%html{lang: I18n.locale}
|
|
3
|
-
%head
|
|
4
|
-
%title= Settings.app_name rescue "Thecore"
|
|
5
|
-
|
|
6
|
-
= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => 'reload'
|
|
7
|
-
= javascript_pack_tag 'application', 'data-turbolinks-track' => 'reload'
|
|
8
|
-
|
|
9
|
-
= render "layouts/rails_admin/head"
|
|
10
|
-
|
|
11
|
-
= render "layouts/rails_admin/style_common"
|
|
12
|
-
= render "layouts/rails_admin/style_override"
|
|
13
|
-
|
|
14
|
-
/ Getting all the assets needed by thecore_ui_rails_admin from all the gems and the application level
|
|
15
|
-
= get_asset_tags_for("thecore_rails_admin")
|
|
16
|
-
|
|
17
|
-
= favicon_link_tag 'apple-touch-icon.png', rel: 'apple-touch-icon', sizes: "180x180"
|
|
18
|
-
= favicon_link_tag 'favicon-32x32.png', rel: 'icon', sizes: "32x32"
|
|
19
|
-
= favicon_link_tag 'favicon-16x16.png', rel: 'icon', sizes: "16x16"
|
|
20
|
-
= favicon_link_tag 'safari-pinned-tab.svg', rel: 'mask-icon', color: "#5bbad5"
|
|
21
|
-
%body.rails_admin
|
|
22
|
-
#admin-js{:'data-i18n-options' => I18n.t("admin.js").to_json}
|
|
23
|
-
-# Initialize JS simple i18n
|
|
24
|
-
-# :javascript
|
|
25
|
-
-# RailsAdmin.I18n.init('#{I18n.locale}', document.getElementById("admin-js").dataset.i18nOptions);
|
|
26
|
-
#loading.label.label-warning{style: 'display:none; position:fixed; right:20px; bottom:20px; z-index:100000'}= t('admin.loading')
|
|
27
|
-
-# %nav.navbar.navbar-default.navbar-fixed-top
|
|
28
|
-
-# = render "layouts/rails_admin/navigation"
|
|
29
|
-
#wrapper
|
|
30
|
-
#sidebar-wrapper
|
|
31
|
-
.sidebar-nav
|
|
32
|
-
= render "layouts/rails_admin/secondary_navigation"
|
|
33
|
-
= render "layouts/rails_admin/sidebar_navigation"
|
|
34
|
-
= render "layouts/rails_admin/user_navigation"
|
|
35
|
-
#page-content-wrapper
|
|
36
|
-
.container-fluid
|
|
37
|
-
.row
|
|
38
|
-
.col-lg-12
|
|
39
|
-
%button#sidebar-collapse{href: "#menu-toggle"}
|
|
40
|
-
%i.fa.fa-bars.fa-2x
|
|
41
|
-
-# %a#app-name.pjax{href: dashboard_path}
|
|
42
|
-
%span#app-name
|
|
43
|
-
= Settings.app_name rescue "Thecore"
|
|
44
|
-
.content{:'data-pjax-container' => true}
|
|
45
|
-
= render template: 'layouts/rails_admin/pjax'
|
|
46
|
-
= render "rails_admin/main/modal_interaction"
|
|
47
|
-
-# -# Initialize JS simple i18n
|
|
48
|
-
-# :javascript
|
|
49
|
-
-# RailsAdmin.I18n.init('#{I18n.locale}', JSON.parse("#{j I18n.t("admin.js").to_json}"))
|
|
50
|
-
-# %body.rails_admin
|
|
51
|
-
-# #loading.label.label-warning{style: 'display:none; position:fixed; right:20px; bottom:20px; z-index:100000'}= t('admin.loading')
|
|
52
|
-
-# %nav.navbar.navbar-default.navbar-fixed-top
|
|
53
|
-
-# = render "layouts/rails_admin/navigation"
|
|
54
|
-
-# .container-fluid
|
|
55
|
-
-# .row
|
|
56
|
-
-# .col-sm-3.col-md-2.sidebar-nav
|
|
57
|
-
-# = render "layouts/rails_admin/sidebar_navigation"
|
|
58
|
-
-# .col-sm-9.col-sm-offset-3.col-md-10.col-md-offset-2
|
|
59
|
-
-# .content{:'data-pjax-container' => true}= render template: 'layouts/rails_admin/pjax'
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
:javascript
|
|
2
|
-
$('.nav.nav-pills li.active').removeClass('active');
|
|
3
|
-
$('.nav.nav-pills li[data-model="#{@abstract_model.to_param}"]').addClass('active');
|
|
4
|
-
$(window).off('keydown');
|
|
5
|
-
|
|
6
|
-
- # Integration of the thecore_settings gem, if not available, it rescues to the normal naming
|
|
7
|
-
%title= "#{(@abstract_model.try(:pretty_name) || @page_name)} | #{Settings.app_name rescue ([_get_plugin_name[0] || 'Rails', _get_plugin_name[1] || 'Admin'].join(' '))}"
|
|
8
|
-
.page-header
|
|
9
|
-
%h1= @page_name
|
|
10
|
-
- flash && flash.each do |key, value|
|
|
11
|
-
.alert.alert-dismissible{class: flash_alert_class(key)}
|
|
12
|
-
%button.close{type: 'button', :'data-dismiss' => "alert"} ×
|
|
13
|
-
= value
|
|
14
|
-
- # if it's and abstract model, then is not a root model for sure (like the dashboard)
|
|
15
|
-
- # these actions (root ones) are the actions listed at the same level as the dashboard (not related to a model)
|
|
16
|
-
- if @abstract_model
|
|
17
|
-
= breadcrumb
|
|
18
|
-
.well.well-sm
|
|
19
|
-
%ul.nav.nav-pills#action-menu
|
|
20
|
-
= content_for :search_form
|
|
21
|
-
= content_for :action_links
|
|
22
|
-
= content_for :contextual_tabs
|
|
23
|
-
|
|
24
|
-
.well.well-sm
|
|
25
|
-
= yield
|
|
26
|
-
- else
|
|
27
|
-
= yield
|
|
28
|
-
|
|
29
|
-
%script
|
|
30
|
-
$('.dropdown-toggle').dropdown()
|