rails_material_admin 0.1.5 → 0.1.9
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/README.md +10 -20
- data/app/helpers/admin_helper.rb +34 -0
- data/app/views/admin/sessions/new.html.slim +27 -24
- data/app/views/layouts/admin.html.slim +16 -5
- data/app/views/shared/_error_messages.html.slim +12 -7
- data/app/views/shared/_flash_messages.html.slim +14 -0
- data/app/views/shared/_header.html.slim +17 -13
- data/app/views/shared/_sidebar.html.slim +9 -8
- data/config/webpack/environment.js +5 -1
- data/lib/generators/crud/crud_generator.rb +4 -4
- data/lib/generators/material_admin/material_admin_generator.rb +16 -9
- data/lib/material_admin/version.rb +1 -1
- data/vendor/javascript/packs/admin.js +18 -12
- data/vendor/javascript/packs/admin_style.js +5 -3
- data/vendor/javascript/src/stylesheets/admin/shared/common.scss +39 -2
- data/vendor/javascript/src/stylesheets/admin/shared/override.scss +62 -0
- data/vendor/javascript/src/stylesheets/shared/override.scss +0 -4
- data/vendor/rails_material_admin/css/plugins/bootstrap.min.scss +6 -6
- data/vendor/rails_material_admin/css/style.scss +33462 -8272
- data/vendor/rails_material_admin/js/app.js +404 -0
- data/vendor/rails_material_admin/js/bootstrap.min.js +4 -4
- data/vendor/rails_material_admin/js/dashboard.js +15 -16
- data/vendor/rails_material_admin/js/perfect-scrollbar.jquery.min.js +1569 -0
- data/vendor/rails_material_admin/js/sidebarmenu.js +52 -337
- data/vendor/rails_material_admin/js/sweetalert2.min.js +2 -0
- data/vendor/rails_material_admin/material_admin.js +8 -7
- metadata +8 -6
- data/package.json +0 -23
- data/vendor/rails_material_admin/js/custom.js +0 -113
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e149cf1845f01081d80159c39143ed16a50d26bc5f91451f74258b2a107a415f
|
4
|
+
data.tar.gz: b40e938e32a9025500b2cd7934398ec428abdca35db677ccefa23292eef49e4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 50e463b925990f31db34e5034f977329a8be8d81ccd96bd9450f02140d0d052741958075aa858e2c00447ef0a0b9f225a259601c71024fab72c180df84f16017
|
7
|
+
data.tar.gz: ca4f286534ac41bb5350da901d240d93dfdb441cff226fcedd287a4bd256392f14cdf23240143d694d99f1d9ae02811f68fc1aeb13577a07369e75f0e2434378
|
data/README.md
CHANGED
@@ -1,35 +1,25 @@
|
|
1
1
|
# MaterialAdmin
|
2
2
|
Use rails webpacker to bundle the material admin template.
|
3
3
|
|
4
|
-
https://
|
4
|
+
https://wrappixel.com/demos/admin-templates/materialpro-bootstrap-latest/material-pro/src/material/ui-scrollspy.html#list-item-2
|
5
5
|
|
6
6
|
Easily install and set up admin quickly
|
7
7
|
|
8
8
|
## Prerequisite
|
9
9
|
- Need set up your db first
|
10
|
-
|
11
|
-
```
|
10
|
+
|
11
|
+
```
|
12
|
+
// Gemfile
|
13
|
+
gem 'webpacker', '~> 5.0'
|
14
|
+
|
15
|
+
|
16
|
+
// package.json
|
12
17
|
{
|
13
|
-
"name": "MyProject",
|
14
|
-
"private": true,
|
15
18
|
"dependencies": {
|
16
|
-
"@rails/webpacker": "5.
|
17
|
-
"core-js": "3",
|
18
|
-
"file-loader": "^6.0.0",
|
19
|
-
"url-loader": "^4.1.0",
|
20
|
-
"expose-loader": "^0.7.5",
|
21
|
-
"resolve-url-loader": "^3.1.1",
|
22
|
-
"jquery": "^3.5.1",
|
23
|
-
"select2": "^4.0.13",
|
24
|
-
"popper.js": "^1.16.1",
|
25
|
-
"rails-ujs": "^5.2.4-2",
|
26
|
-
"stimulus": "^1.1.1",
|
27
|
-
"turbolinks": "^5.2.0",
|
28
|
-
"datatables.net-bs4": "^1.10.21",
|
29
|
-
"datatables.net-responsive-bs4": "^2.2.5"
|
19
|
+
"@rails/webpacker": "5.4.2",
|
30
20
|
},
|
31
21
|
"devDependencies": {
|
32
|
-
"webpack-dev-server": "^3.11.
|
22
|
+
"webpack-dev-server": "^3.11.2"
|
33
23
|
}
|
34
24
|
}
|
35
25
|
```
|
data/app/helpers/admin_helper.rb
CHANGED
@@ -17,4 +17,38 @@ module ApplicationHelper
|
|
17
17
|
def sort_opt(model, column)
|
18
18
|
{ model: model, column: column }.to_json
|
19
19
|
end
|
20
|
+
|
21
|
+
def sub_item_active?(sub_c_names = [])
|
22
|
+
class_names = 'sidebar-item'
|
23
|
+
|
24
|
+
if controller_name.in?(sub_c_names)
|
25
|
+
class_names += ' active'
|
26
|
+
end
|
27
|
+
|
28
|
+
class_names
|
29
|
+
end
|
30
|
+
|
31
|
+
def sidebar_item_classes(c_names, *a_names)
|
32
|
+
class_names = 'sidebar-item'
|
33
|
+
|
34
|
+
if a_names.any?
|
35
|
+
class_names += ' selected' if controller_name.in?(c_names) && action_name.in?(a_names)
|
36
|
+
else
|
37
|
+
class_names += ' selected' if controller_name.in? c_names
|
38
|
+
end
|
39
|
+
|
40
|
+
class_names
|
41
|
+
end
|
42
|
+
|
43
|
+
def sidebar_item_link_classes(c_names, *a_names)
|
44
|
+
class_names = 'sidebar-link waves-effect waves-dark sidebar-link'
|
45
|
+
|
46
|
+
if a_names.any?
|
47
|
+
class_names += ' active' if controller_name.in?(c_names) && action_name.in?(a_names)
|
48
|
+
else
|
49
|
+
class_names += ' active' if controller_name.in? c_names
|
50
|
+
end
|
51
|
+
|
52
|
+
class_names
|
53
|
+
end
|
20
54
|
end
|
@@ -1,30 +1,33 @@
|
|
1
|
-
|
2
|
-
.
|
3
|
-
|
4
|
-
.
|
5
|
-
|
6
|
-
as: resource_name,
|
7
|
-
url: session_path(resource_name),
|
8
|
-
html: { class: 'form-horizontal form-material' } do |f|
|
1
|
+
.auth-wrapper.d-flex.no-block.justify-content-center.align-items-center
|
2
|
+
.auth-box.p-4.bg-white.rounded
|
3
|
+
#loginform
|
4
|
+
.logo
|
5
|
+
h3.box-title.mb-3 Sign In
|
9
6
|
|
10
|
-
|
7
|
+
.row
|
8
|
+
.col-12
|
9
|
+
= form_for resource,
|
10
|
+
as: resource_name,
|
11
|
+
url: session_path(resource_name),
|
12
|
+
html: { class: 'form-horizontal mt-3 form-material', id: 'loginform' } do |f|
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
|
14
|
+
.form-group.mb-3
|
15
|
+
.col-xs-12
|
16
|
+
= f.email_field :email, autofocus: true, autocomplete: "email", class: 'form-control', placeholder: 'Email'
|
15
17
|
|
16
|
-
|
17
|
-
|
18
|
-
|
18
|
+
.form-group.mb-4
|
19
|
+
.col-xs-12
|
20
|
+
= f.password_field :password, autocomplete: "current-password", class: 'form-control', placeholder: 'Password'
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
- if devise_mapping.rememberable?
|
23
|
+
.form-group
|
24
|
+
.d-flex
|
25
|
+
div class="checkbox checkbox-info pt-0"
|
26
|
+
input id="checkbox-signup" type="checkbox" class="material-inputs chk-col-indigo"
|
27
|
+
label for="checkbox-signup" Remember me
|
28
|
+
|
29
|
+
.form-group.text-center.mt-4.mb-3
|
30
|
+
.col-xs-12
|
31
|
+
= f.submit "Log in", class: 'btn btn-info d-block w-100 waves-effect waves-light'
|
26
32
|
|
27
|
-
.form-group.text-center.m-t-20
|
28
|
-
.col-xs-12
|
29
|
-
= f.submit "Log in", class: 'btn btn-info btn-lg btn-block text-uppercase waves-effect waves-light'
|
30
33
|
|
@@ -17,17 +17,28 @@ html xmlns:wb="http://open.weibo.com/wb"
|
|
17
17
|
/! Preloader - style you can find in spinners.css
|
18
18
|
// NOTE: Need fix for turbolinks.
|
19
19
|
/ .preloader
|
20
|
-
/ svg.circular viewbox=("25 25 50 50")
|
20
|
+
/ svg.circular viewbox=("25 25 50 50")
|
21
21
|
/ circle.path cx="50" cy="50" fill="none" r="20" stroke-miterlimit="10" stroke-width="2" /
|
22
22
|
|
23
23
|
/! Main wrapper - style you can find in pages.scss
|
24
|
-
#main-wrapper
|
24
|
+
#main-wrapper[
|
25
|
+
data-theme="light"
|
26
|
+
data-layout="vertical"
|
27
|
+
data-navbarbg="skin1"
|
28
|
+
data-sidebartype="full"
|
29
|
+
data-sidebar-position="fixed"
|
30
|
+
data-header-position="fixed"
|
31
|
+
data-boxed-layout="full"
|
32
|
+
]
|
25
33
|
= render 'admin/shared/header'
|
26
34
|
= render 'admin/shared/sidebar'
|
27
|
-
|
28
|
-
.page-wrapper
|
35
|
+
|
36
|
+
.page-wrapper style="display: block;"
|
37
|
+
= yield :breadcrumb
|
38
|
+
|
29
39
|
.container-fluid
|
30
|
-
= yield :
|
40
|
+
= yield :error_messages
|
41
|
+
|
31
42
|
.row
|
32
43
|
= yield
|
33
44
|
|
@@ -1,8 +1,13 @@
|
|
1
|
-
-
|
1
|
+
- targets = Array(target).select { |ele| ele.errors.any? }
|
2
|
+
|
3
|
+
- if targets.any?
|
2
4
|
#error_explanation
|
3
|
-
|
4
|
-
=
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
div [
|
6
|
+
class="alert customize-alert alert-dismissible alert-light-danger text-danger fade show"
|
7
|
+
role="alert"
|
8
|
+
]
|
9
|
+
button.btn-close aria-label="Close" data-bs-dismiss="alert" type="button"
|
10
|
+
|
11
|
+
- targets.map(&:errors).map(&:messages).map(&:values).flatten.each do |message|
|
12
|
+
| #{message}
|
13
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
- if flash.any?
|
2
|
+
- flash.each do |name, msg|
|
3
|
+
- if [String, Array].include?(msg.class)
|
4
|
+
- message = msg.is_a?(Array) ? msg.join('<br>').html_safe : msg
|
5
|
+
|
6
|
+
div [
|
7
|
+
class="alert customize-alert alert-dismissible alert-light-#{name.to_s == 'notice' ? 'success' : 'danger'} text-danger fade show"
|
8
|
+
role="alert"
|
9
|
+
]
|
10
|
+
button.btn-close aria-label="Close" data-bs-dismiss="alert" type="button"
|
11
|
+
|
12
|
+
.d-flex.align-items-center.font-weight-medium
|
13
|
+
i.text-danger.fill-white.feather-sm.me-2 data-feather="info" = message
|
14
|
+
|
@@ -1,9 +1,11 @@
|
|
1
1
|
/! Topbar header - style you can find in pages.scss
|
2
|
-
header.topbar
|
3
|
-
nav.navbar.top-navbar.navbar-expand-md.navbar-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
header.topbar data-navbarbg="skin1"
|
3
|
+
nav.navbar.top-navbar.navbar-expand-md.navbar-dark
|
4
|
+
.navbar-header data-logobg='skin1'
|
5
|
+
a.nav-link.nav-toggler.d-block.d-md-none.text-muted.waves-effect.waves-dark href="javascript:void(0)"
|
6
|
+
i.mdi.mdi-menu
|
7
|
+
|
8
|
+
a.navbar-brand href="/admin" tppabs="https://wrappixel.com/demos/admin-templates/material-pro/material/index.html"
|
7
9
|
/! Logo icon
|
8
10
|
b
|
9
11
|
/! You can put here icon as well // <i class="wi wi-sunset"></i> //
|
@@ -11,14 +13,16 @@ header.topbar
|
|
11
13
|
/ img.dark-logo alt="homepage" src="../assets/images/logo-icon.png" /
|
12
14
|
/! Light Logo icon
|
13
15
|
/ img.light-logo alt="homepage" src="../assets/images/logo-light-icon.png" /
|
14
|
-
|
15
|
-
span.
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
= image_tag asset_pack_path('media/images/logo-light-icon.png'), class: 'light-logo'
|
17
|
+
span.logo-text
|
18
|
+
.inline-block.ml10 Logo
|
19
|
+
|
20
|
+
a.topbartoggler.d-block.d-md-none.waves-effect.waves-light href="javascript:void(0)" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"
|
21
|
+
i.ti-more
|
22
|
+
|
23
|
+
.navbar-collapse.collapse data-navbarbg="skin1"
|
24
|
+
ul.navbar-nav.me-auto
|
21
25
|
li.nav-item
|
22
|
-
a.nav-link.sidebartoggler.
|
26
|
+
a.nav-link.sidebartoggler.d-none.d-md-block.waves-effect.waves-dark href="javascript:void(0)"
|
23
27
|
i.ti-menu
|
24
28
|
|
@@ -1,15 +1,14 @@
|
|
1
1
|
/! ==============================================================
|
2
2
|
/! Left Sidebar - style you can find in sidebar.scss
|
3
3
|
/! ==============================================================
|
4
|
-
aside.left-sidebar
|
5
|
-
|
6
|
-
|
7
|
-
/! Sidebar navigation
|
4
|
+
aside.left-sidebar data-sidebarbg='skin6'
|
5
|
+
.scroll-sidebar.ps-container.ps-theme-default.ps-active-y
|
6
|
+
/! Sidebar scroll
|
8
7
|
nav.sidebar-nav
|
9
|
-
ul#sidebarnav
|
8
|
+
ul#sidebarnav.in
|
10
9
|
/ li.nav-small-cap Project title
|
11
|
-
li
|
12
|
-
= link_to '#' do
|
10
|
+
li class=sidebar_item_classes('users')
|
11
|
+
= link_to '#', class: sidebar_item_link_classes('users') do
|
13
12
|
i.fa.fa-user
|
14
13
|
span.hide-menu Menu
|
15
14
|
|
@@ -19,5 +18,7 @@ aside.left-sidebar
|
|
19
18
|
/ i.ti-settings
|
20
19
|
/ a.link data-toggle="tooltip" href="" title="Email"
|
21
20
|
/ i.mdi.mdi-gmail
|
22
|
-
|
21
|
+
= link_to destroy_admin_session_path, title: 'Logout', method: :delete, data: { toggle: 'tooltip' } do
|
23
22
|
i.mdi.mdi-power
|
23
|
+
/ a.link data-toggle="tooltip" href=destroy_admin_session_path title="Logout" data-method="DELETE"
|
24
|
+
|
@@ -71,6 +71,9 @@ class CrudGenerator < Rails::Generators::NamedBase
|
|
71
71
|
|
72
72
|
create_file "#{Rails.root}/app/views/#{layout_name}/#{resource}/_form.html.slim" do
|
73
73
|
<<~html
|
74
|
+
= content_for :error_messages do
|
75
|
+
= render 'admin/shared/error_messages', target: @#{name}
|
76
|
+
|
74
77
|
.col-lg-12
|
75
78
|
.card
|
76
79
|
.card-body
|
@@ -108,9 +111,6 @@ class CrudGenerator < Rails::Generators::NamedBase
|
|
108
111
|
# frozen_string_literal: true
|
109
112
|
|
110
113
|
class #{layout_name.camelize}::#{resource.camelize}Controller < #{layout_name.camelize}::BaseController
|
111
|
-
|
112
|
-
include DatatableDecorator
|
113
|
-
|
114
114
|
def index
|
115
115
|
respond_to do |format|
|
116
116
|
format.html
|
@@ -144,7 +144,7 @@ class CrudGenerator < Rails::Generators::NamedBase
|
|
144
144
|
|
145
145
|
@total_rows = #{resource}.count
|
146
146
|
|
147
|
-
@rows =
|
147
|
+
@rows = #{resource}.page(dt[:page]).per(dt[:per_page])
|
148
148
|
@rows = @rows.order(search_obj[:order])
|
149
149
|
end
|
150
150
|
end
|
@@ -6,10 +6,14 @@ class MaterialAdminGenerator < Rails::Generators::NamedBase
|
|
6
6
|
GEM_NAME = 'rails_material_admin'
|
7
7
|
GEM_PATH = Gem.loaded_specs[GEM_NAME].full_gem_path
|
8
8
|
JS_PKGS =
|
9
|
-
'datatables.net-
|
9
|
+
'datatables.net-bs5 datatables.net-responsive-bs5'\
|
10
10
|
' expose-loader file-loader url-loader resolve-url-loader'\
|
11
|
-
' rails
|
12
|
-
'
|
11
|
+
' @rails/ujs @rails/activestorage'\
|
12
|
+
' stimulus turbolinks'\
|
13
|
+
' jquery popper.js select2 @popperjs/core webpack-cli'
|
14
|
+
ESLINT_JS_PKGS =
|
15
|
+
'eslint prettier eslint-plugin-prettier eslint-config-prettier'\
|
16
|
+
' stylelint stylelint-config-prettier stylelint-config-recommended stylelint-scss'
|
13
17
|
|
14
18
|
# TODO: Warning! Add reset project.
|
15
19
|
|
@@ -38,9 +42,9 @@ class MaterialAdminGenerator < Rails::Generators::NamedBase
|
|
38
42
|
|
39
43
|
FileUtils.copy_entry("#{GEM_PATH}/vendor/#{GEM_NAME}", "#{webpacker_dir}/vendor/#{GEM_NAME}/")
|
40
44
|
|
41
|
-
p 'Import package.json...'
|
45
|
+
# p 'Import package.json...'
|
42
46
|
|
43
|
-
FileUtils.cp "#{GEM_PATH}/package.json", "#{Rails.root}/package.json"
|
47
|
+
# FileUtils.cp "#{GEM_PATH}/package.json", "#{Rails.root}/package.json"
|
44
48
|
|
45
49
|
p 'Import js source files...'
|
46
50
|
|
@@ -59,6 +63,11 @@ class MaterialAdminGenerator < Rails::Generators::NamedBase
|
|
59
63
|
)
|
60
64
|
end
|
61
65
|
|
66
|
+
def yarn_install
|
67
|
+
system("yarn add #{JS_PKGS}")
|
68
|
+
system("yarn add #{ESLINT_JS_PKGS} --dev")
|
69
|
+
end
|
70
|
+
|
62
71
|
def create_helper
|
63
72
|
p "Create #{layout_name} layout helper..."
|
64
73
|
|
@@ -129,10 +138,6 @@ class MaterialAdminGenerator < Rails::Generators::NamedBase
|
|
129
138
|
FileUtils.copy_entry("#{GEM_PATH}/app/views/shared", dest)
|
130
139
|
end
|
131
140
|
|
132
|
-
def yarn_install
|
133
|
-
system("yarn add #{JS_PKGS}")
|
134
|
-
end
|
135
|
-
|
136
141
|
def create_base_controller
|
137
142
|
p "Create base controller'"
|
138
143
|
|
@@ -143,6 +148,8 @@ class MaterialAdminGenerator < Rails::Generators::NamedBase
|
|
143
148
|
class #{layout_name.camelize}::BaseController < ActionController::Base
|
144
149
|
layout '#{layout_name}'
|
145
150
|
|
151
|
+
include DatatableDecorator
|
152
|
+
|
146
153
|
before_action :authenticate_#{layout_name}!
|
147
154
|
end
|
148
155
|
dashboard_controller
|
@@ -1,23 +1,29 @@
|
|
1
1
|
import 'core-js/stable'
|
2
2
|
import 'regenerator-runtime/runtime'
|
3
3
|
|
4
|
-
import { Application } from
|
5
|
-
import { definitionsFromContext } from
|
4
|
+
import { Application } from 'stimulus'
|
5
|
+
import { definitionsFromContext } from 'stimulus/webpack-helpers'
|
6
6
|
|
7
|
-
import Rails from 'rails
|
8
|
-
import Turbolinks from 'turbolinks'
|
7
|
+
import Rails from '@rails/ujs'
|
8
|
+
import Turbolinks from 'turbolinks'
|
9
9
|
|
10
|
-
import 'datatables.net'
|
11
|
-
import 'datatables.net-responsive-
|
12
|
-
import 'select2'
|
10
|
+
import 'datatables.net'
|
11
|
+
import 'datatables.net-responsive-bs5'
|
12
|
+
import 'select2'
|
13
13
|
|
14
|
-
import '../vendor/
|
14
|
+
import '../vendor/rails_material_admin/material_admin'
|
15
15
|
|
16
|
-
import '../
|
17
|
-
|
16
|
+
import bootstrap from '../vendor/rails_material_admin/js/bootstrap.min'
|
17
|
+
window.bootstrap = bootstrap
|
18
18
|
|
19
|
-
|
20
|
-
|
19
|
+
import Swal from '../vendor/rails_material_admin/js/sweetalert2.min'
|
20
|
+
window.Swal = Swal
|
21
|
+
|
22
|
+
import '../src/javascripts/lib/utils_datatables.js'
|
23
|
+
import '../src/javascripts/admin/common/scaffold.js'
|
24
|
+
|
25
|
+
Rails.start()
|
26
|
+
Turbolinks.start()
|
21
27
|
|
22
28
|
const application = Application.start()
|
23
29
|
// const context = require.context("../src/javascripts/admin/controllers/", true, /\.js$/)
|
@@ -1,5 +1,7 @@
|
|
1
|
-
import '
|
2
|
-
|
1
|
+
import 'select2/dist/css/select2.css'
|
2
|
+
|
3
|
+
import '../../../node_modules/datatables.net-bs5/css/dataTables.bootstrap5.css';
|
4
|
+
import '../vendor/rails_material_admin/material_admin.scss';
|
3
5
|
import '../src/stylesheets/shared/atom.scss';
|
4
|
-
import '../src/stylesheets/shared/override.scss';
|
6
|
+
import '../src/stylesheets/admin/shared/override.scss';
|
5
7
|
import '../src/stylesheets/admin/shared/common.scss';
|
@@ -13,11 +13,11 @@ ul#sidebarnav > li > a {
|
|
13
13
|
}
|
14
14
|
|
15
15
|
/* form */
|
16
|
-
[type=checkbox] + label {
|
16
|
+
[type='checkbox'] + label {
|
17
17
|
margin-right: 15px;
|
18
18
|
}
|
19
19
|
|
20
|
-
[type=radio] + label {
|
20
|
+
[type='radio'] + label {
|
21
21
|
margin-right: 15px;
|
22
22
|
}
|
23
23
|
|
@@ -32,3 +32,40 @@ form .form-body .form-group > label {
|
|
32
32
|
margin-bottom: 14px;
|
33
33
|
border-bottom: none;
|
34
34
|
}
|
35
|
+
|
36
|
+
|
37
|
+
input[type='text'].form-control,
|
38
|
+
textarea.form-control {
|
39
|
+
&::-webkit-input-placeholder {
|
40
|
+
font-weight: 300;
|
41
|
+
}
|
42
|
+
&::-moz-placeholder {
|
43
|
+
font-weight: 300;
|
44
|
+
}
|
45
|
+
&:-ms-input-placeholder {
|
46
|
+
font-weight: 300;
|
47
|
+
}
|
48
|
+
&:-moz-placeholder {
|
49
|
+
font-weight: 300;
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
#error_explanation ul {
|
54
|
+
margin-bottom: 0;
|
55
|
+
}
|
56
|
+
|
57
|
+
.input-group-text {
|
58
|
+
.form-check {
|
59
|
+
margin-bottom: 0;
|
60
|
+
}
|
61
|
+
|
62
|
+
.form-check-label {
|
63
|
+
margin-bottom: 0;
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
|
68
|
+
/* table */
|
69
|
+
table.editable-table td.select-cell {
|
70
|
+
padding: 0;
|
71
|
+
}
|
@@ -0,0 +1,62 @@
|
|
1
|
+
html, body {
|
2
|
+
height: 100%;
|
3
|
+
}
|
4
|
+
|
5
|
+
.topbar .top-navbar .navbar-header .navbar-brand {
|
6
|
+
color: white;
|
7
|
+
}
|
8
|
+
|
9
|
+
// NOTE: If you want reduce the checkbox border
|
10
|
+
// [type='checkbox'] + label:before,
|
11
|
+
// [type='checkbox']:not(.filled-in) + label:after {
|
12
|
+
// border: 1px solid #ced4da;
|
13
|
+
// }
|
14
|
+
|
15
|
+
/* select2 */
|
16
|
+
.select2-container {
|
17
|
+
width: 100% !important;
|
18
|
+
}
|
19
|
+
|
20
|
+
.select2-container--default .select2-selection--multiple {
|
21
|
+
border: 1px solid #ced4da;
|
22
|
+
}
|
23
|
+
|
24
|
+
.select2-container--default.select2-container--focus .select2-selection--multiple,
|
25
|
+
.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,
|
26
|
+
.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {
|
27
|
+
border: 1px solid #ced4da;
|
28
|
+
color: #495057;
|
29
|
+
background-color: #fff;
|
30
|
+
border-color: #80bdff;
|
31
|
+
outline: 0;
|
32
|
+
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
|
33
|
+
}
|
34
|
+
|
35
|
+
.select2-container--default .select2-selection--multiple .select2-selection__rendered {
|
36
|
+
padding-left: 12px;
|
37
|
+
}
|
38
|
+
|
39
|
+
.select2-search__field {
|
40
|
+
color: #999;
|
41
|
+
font-weight: 300;
|
42
|
+
}
|
43
|
+
|
44
|
+
// Fix placeholder missing when select is initially hidden.
|
45
|
+
.select2-search--inline {
|
46
|
+
/*this will make the container disappear, making the child the one who sets the width of the element*/
|
47
|
+
display: contents;
|
48
|
+
}
|
49
|
+
.select2-search__field:placeholder-shown {
|
50
|
+
/*makes the placeholder to be 100% of the width while there are no options selected*/
|
51
|
+
width: 100% !important;
|
52
|
+
}
|
53
|
+
|
54
|
+
|
55
|
+
/* DataTable */
|
56
|
+
div.dataTables_wrapper div.dataTables_paginate {
|
57
|
+
margin-top: 8px;
|
58
|
+
}
|
59
|
+
|
60
|
+
.page-wrapper {
|
61
|
+
transition: none;
|
62
|
+
}
|