├── .gitignore
├── .ruby-version
├── Aptfile
├── Gemfile
├── Gemfile.lock
├── Procfile
├── README.md
├── Rakefile
├── app
├── assets
│ ├── config
│ │ └── manifest.js
│ ├── images
│ │ ├── .keep
│ │ ├── avatar
│ │ │ └── demi.png
│ │ └── stack-logo-blue.svg
│ ├── javascripts
│ │ ├── application.js
│ │ ├── channels
│ │ │ └── .keep
│ │ └── core-scripts.js
│ └── stylesheets
│ │ ├── _badge.scss
│ │ ├── _borders.scss
│ │ ├── _breadcrumb.scss
│ │ ├── _button.scss
│ │ ├── _card.scss
│ │ ├── _drawer.scss
│ │ ├── _dropdown.scss
│ │ ├── _flexbox.scss
│ │ ├── _form.scss
│ │ ├── _header.scss
│ │ ├── _helpers.scss
│ │ ├── _icons.scss
│ │ ├── _input-group.scss
│ │ ├── _layout.scss
│ │ ├── _list-group.scss
│ │ ├── _loader.scss
│ │ ├── _navbar-dark.scss
│ │ ├── _navbar.scss
│ │ ├── _page-separator.scss
│ │ ├── _pagination.scss
│ │ ├── _preloader.scss
│ │ ├── _progress.scss
│ │ ├── _sidebar.scss
│ │ ├── _type.scss
│ │ ├── _variables.scss
│ │ └── application.scss
├── channels
│ └── application_cable
│ │ ├── channel.rb
│ │ └── connection.rb
├── controllers
│ ├── application_controller.rb
│ ├── concerns
│ │ └── .keep
│ └── stack_controller.rb
├── helpers
│ └── application_helper.rb
├── jobs
│ └── application_job.rb
├── mailers
│ └── application_mailer.rb
├── models
│ ├── application_record.rb
│ └── concerns
│ │ └── .keep
└── views
│ ├── layouts
│ ├── _drawer_left.html.erb
│ ├── _navbar.html.erb
│ ├── application.html.erb
│ ├── blank.html.erb
│ ├── mailer.html.erb
│ └── mailer.text.erb
│ └── stack
│ ├── _pagination.html.erb
│ ├── index.html.erb
│ ├── ui_alerts.html.erb
│ ├── ui_buttons.html.erb
│ ├── ui_forms.html.erb
│ ├── ui_icons.html.erb
│ ├── ui_loaders.html.erb
│ ├── ui_modals.html.erb
│ └── ui_pagination.html.erb
├── bin
├── bundle
├── rails
├── rake
├── setup
├── spring
├── update
└── yarn
├── config.ru
├── config
├── application.rb
├── boot.rb
├── cable.yml
├── credentials.yml.enc
├── database.yml
├── environment.rb
├── environments
│ ├── development.rb
│ ├── production.rb
│ └── test.rb
├── initializers
│ ├── application_controller_renderer.rb
│ ├── assets.rb
│ ├── backtrace_silencers.rb
│ ├── content_security_policy.rb
│ ├── cookies_serializer.rb
│ ├── filter_parameter_logging.rb
│ ├── inflections.rb
│ ├── mime_types.rb
│ └── wrap_parameters.rb
├── locales
│ └── en.yml
├── puma.rb
├── routes.rb
├── spring.rb
└── storage.yml
├── db
└── seeds.rb
├── lib
├── assets
│ └── .keep
└── tasks
│ └── .keep
├── log
└── .keep
├── package-lock.json
├── package.json
├── public
├── 404.html
├── 422.html
├── 500.html
├── apple-touch-icon-precomposed.png
├── apple-touch-icon.png
├── assets
│ ├── .sprockets-manifest-77dc8b3659c47d6b4cb59cad577b7f64.json
│ ├── application-51e53bab79cb24129a815fc2820b746b72ca78bc5d508a9d6e8b39949d68af66.css
│ ├── application-c88e0696edf3fd4744b853efd05d437f29d3baed0fe1468fc131f5271f0bf52a.js
│ ├── avatar
│ │ └── demi-9df8cebede9679e29d7c194c763e3e19c30cc4499a8aec245fd59742fc305ce8.png
│ ├── core-scripts-d2546f92b8b4fa465b6be768efda851bb802ec05930e0b1f59c905ebea1890b0.js
│ ├── material-design-icons-iconfont
│ │ └── dist
│ │ │ └── fonts
│ │ │ ├── MaterialIcons-Regular-8c998b4a9c0acbb9fe5dd572c206a5a33fdd5ca2b58db87fc3b893beac85068d.eot
│ │ │ ├── MaterialIcons-Regular-a87d66c91b2e7dc5530aef76c03bd6a3d25ea5826110bf4803b561b811cc8726.woff2
│ │ │ ├── MaterialIcons-Regular-b7f4a3ab562048f28dd1fa691601bc43363a61d0f876d16d8316c52e4f32d696.ttf
│ │ │ └── MaterialIcons-Regular-c4a1baec300d09e03a8380b85918267ee80faae8e00c6c56b48e2e74b1d9b38d.woff
│ └── stack-logo-blue-540a8140a9395eee8b5a977b989d893e24bafe48c1a6ed9c1f38b41d1db68932.svg
├── favicon.ico
└── robots.txt
├── storage
└── .keep
├── test
├── application_system_test_case.rb
├── controllers
│ └── .keep
├── fixtures
│ ├── .keep
│ └── files
│ │ └── .keep
├── helpers
│ └── .keep
├── integration
│ └── .keep
├── mailers
│ └── .keep
├── models
│ └── .keep
├── system
│ └── .keep
└── test_helper.rb
├── tmp
└── .keep
├── vendor
└── .keep
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2 | #
3 | # If you find yourself ignoring temporary files generated by your text editor
4 | # or operating system, you probably want to add a global ignore instead:
5 | # git config --global core.excludesfile '~/.gitignore_global'
6 |
7 | # Ignore bundler config.
8 | /.bundle
9 |
10 | # Ignore the default SQLite database.
11 | /db/*.sqlite3
12 | /db/*.sqlite3-journal
13 |
14 | # Ignore all logfiles and tempfiles.
15 | /log/*
16 | /tmp/*
17 | !/log/.keep
18 | !/tmp/.keep
19 |
20 | # Ignore uploaded files in development
21 | /storage/*
22 | !/storage/.keep
23 |
24 | /node_modules
25 | /yarn-error.log
26 |
27 |
28 | .byebug_history
29 |
30 | # Ignore master key for decrypting credentials and more.
31 | /config/master.key
32 |
--------------------------------------------------------------------------------
/.ruby-version:
--------------------------------------------------------------------------------
1 | 2.5.1
--------------------------------------------------------------------------------
/Aptfile:
--------------------------------------------------------------------------------
1 | libicu52
2 | libicu-dev
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 | git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3 |
4 | ruby '2.5.1'
5 |
6 | # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
7 | gem 'rails', '~> 5.2.2'
8 |
9 | # Use Puma as the app server
10 | gem 'puma', '~> 3.12'
11 | # Use SCSS for stylesheets
12 | gem 'sass-rails', '~> 5.0'
13 | # Use Uglifier as compressor for JavaScript assets
14 | gem 'uglifier', '>= 1.3.0'
15 | # See https://github.com/rails/execjs#readme for more supported runtimes
16 | # gem 'mini_racer', platforms: :ruby
17 |
18 | # Use CoffeeScript for .coffee assets and views
19 | gem 'coffee-rails', '~> 4.2'
20 | # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
21 | gem 'turbolinks', '~> 5'
22 | # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
23 | gem 'jbuilder', '~> 2.5'
24 | # Use Redis adapter to run Action Cable in production
25 | # gem 'redis', '~> 4.0'
26 | # Use ActiveModel has_secure_password
27 | # gem 'bcrypt', '~> 3.1.7'
28 |
29 | # Use ActiveStorage variant
30 | # gem 'mini_magick', '~> 4.8'
31 |
32 | # Use Capistrano for deployment
33 | # gem 'capistrano-rails', group: :development
34 |
35 | # Reduces boot times through caching; required in config/boot.rb
36 | gem 'bootsnap', '>= 1.1.0', require: false
37 |
38 | group :development, :test do
39 | # Call 'byebug' anywhere in the code to stop execution and get a debugger console
40 | gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
41 | end
42 |
43 | group :development do
44 | # Access an interactive console on exception pages or by calling 'console' anywhere in the code.
45 | gem 'web-console', '>= 3.3.0'
46 | gem 'listen', '>= 3.0.5', '< 3.2'
47 | # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
48 | gem 'spring'
49 | gem 'spring-watcher-listen', '~> 2.0.0'
50 | end
51 |
52 | group :test do
53 | # Adds support for Capybara system testing and selenium driver
54 | gem 'capybara', '>= 2.15'
55 | gem 'selenium-webdriver'
56 | # Easy installation and use of chromedriver to run system tests with Chrome
57 | gem 'chromedriver-helper'
58 | end
59 |
60 | # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
61 | gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
62 |
63 | # ADD TRANSPILER TO USE ES6
64 | gem 'sprockets'
65 | gem 'sprockets-es6'
66 |
67 | gem 'pg'
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | actioncable (5.2.2)
5 | actionpack (= 5.2.2)
6 | nio4r (~> 2.0)
7 | websocket-driver (>= 0.6.1)
8 | actionmailer (5.2.2)
9 | actionpack (= 5.2.2)
10 | actionview (= 5.2.2)
11 | activejob (= 5.2.2)
12 | mail (~> 2.5, >= 2.5.4)
13 | rails-dom-testing (~> 2.0)
14 | actionpack (5.2.2)
15 | actionview (= 5.2.2)
16 | activesupport (= 5.2.2)
17 | rack (~> 2.0)
18 | rack-test (>= 0.6.3)
19 | rails-dom-testing (~> 2.0)
20 | rails-html-sanitizer (~> 1.0, >= 1.0.2)
21 | actionview (5.2.2)
22 | activesupport (= 5.2.2)
23 | builder (~> 3.1)
24 | erubi (~> 1.4)
25 | rails-dom-testing (~> 2.0)
26 | rails-html-sanitizer (~> 1.0, >= 1.0.3)
27 | activejob (5.2.2)
28 | activesupport (= 5.2.2)
29 | globalid (>= 0.3.6)
30 | activemodel (5.2.2)
31 | activesupport (= 5.2.2)
32 | activerecord (5.2.2)
33 | activemodel (= 5.2.2)
34 | activesupport (= 5.2.2)
35 | arel (>= 9.0)
36 | activestorage (5.2.2)
37 | actionpack (= 5.2.2)
38 | activerecord (= 5.2.2)
39 | marcel (~> 0.3.1)
40 | activesupport (5.2.2)
41 | concurrent-ruby (~> 1.0, >= 1.0.2)
42 | i18n (>= 0.7, < 2)
43 | minitest (~> 5.1)
44 | tzinfo (~> 1.1)
45 | addressable (2.5.2)
46 | public_suffix (>= 2.0.2, < 4.0)
47 | archive-zip (0.11.0)
48 | io-like (~> 0.3.0)
49 | arel (9.0.0)
50 | babel-source (5.8.35)
51 | babel-transpiler (0.7.0)
52 | babel-source (>= 4.0, < 6)
53 | execjs (~> 2.0)
54 | bindex (0.5.0)
55 | bootsnap (1.3.2)
56 | msgpack (~> 1.0)
57 | builder (3.2.3)
58 | byebug (10.0.2)
59 | capybara (3.12.0)
60 | addressable
61 | mini_mime (>= 0.1.3)
62 | nokogiri (~> 1.8)
63 | rack (>= 1.6.0)
64 | rack-test (>= 0.6.3)
65 | regexp_parser (~> 1.2)
66 | xpath (~> 3.2)
67 | childprocess (0.9.0)
68 | ffi (~> 1.0, >= 1.0.11)
69 | chromedriver-helper (2.1.0)
70 | archive-zip (~> 0.10)
71 | nokogiri (~> 1.8)
72 | coffee-rails (4.2.2)
73 | coffee-script (>= 2.2.0)
74 | railties (>= 4.0.0)
75 | coffee-script (2.4.1)
76 | coffee-script-source
77 | execjs
78 | coffee-script-source (1.12.2)
79 | concurrent-ruby (1.1.4)
80 | crass (1.0.5)
81 | erubi (1.8.0)
82 | execjs (2.7.0)
83 | ffi (1.10.0)
84 | globalid (0.4.2)
85 | activesupport (>= 4.2.0)
86 | i18n (1.5.2)
87 | concurrent-ruby (~> 1.0)
88 | io-like (0.3.0)
89 | jbuilder (2.8.0)
90 | activesupport (>= 4.2.0)
91 | multi_json (>= 1.2)
92 | listen (3.1.5)
93 | rb-fsevent (~> 0.9, >= 0.9.4)
94 | rb-inotify (~> 0.9, >= 0.9.7)
95 | ruby_dep (~> 1.2)
96 | loofah (2.3.1)
97 | crass (~> 1.0.2)
98 | nokogiri (>= 1.5.9)
99 | mail (2.7.1)
100 | mini_mime (>= 0.1.1)
101 | marcel (0.3.3)
102 | mimemagic (~> 0.3.2)
103 | method_source (0.9.2)
104 | mimemagic (0.3.3)
105 | mini_mime (1.0.1)
106 | mini_portile2 (2.4.0)
107 | minitest (5.11.3)
108 | msgpack (1.2.6)
109 | multi_json (1.13.1)
110 | nio4r (2.3.1)
111 | nokogiri (1.10.7)
112 | mini_portile2 (~> 2.4.0)
113 | pg (1.1.4)
114 | public_suffix (3.0.3)
115 | puma (3.12.2)
116 | rack (2.0.8)
117 | rack-test (1.1.0)
118 | rack (>= 1.0, < 3)
119 | rails (5.2.2)
120 | actioncable (= 5.2.2)
121 | actionmailer (= 5.2.2)
122 | actionpack (= 5.2.2)
123 | actionview (= 5.2.2)
124 | activejob (= 5.2.2)
125 | activemodel (= 5.2.2)
126 | activerecord (= 5.2.2)
127 | activestorage (= 5.2.2)
128 | activesupport (= 5.2.2)
129 | bundler (>= 1.3.0)
130 | railties (= 5.2.2)
131 | sprockets-rails (>= 2.0.0)
132 | rails-dom-testing (2.0.3)
133 | activesupport (>= 4.2.0)
134 | nokogiri (>= 1.6)
135 | rails-html-sanitizer (1.0.4)
136 | loofah (~> 2.2, >= 2.2.2)
137 | railties (5.2.2)
138 | actionpack (= 5.2.2)
139 | activesupport (= 5.2.2)
140 | method_source
141 | rake (>= 0.8.7)
142 | thor (>= 0.19.0, < 2.0)
143 | rake (12.3.2)
144 | rb-fsevent (0.10.3)
145 | rb-inotify (0.10.0)
146 | ffi (~> 1.0)
147 | regexp_parser (1.3.0)
148 | ruby_dep (1.5.0)
149 | rubyzip (1.3.0)
150 | sass (3.7.3)
151 | sass-listen (~> 4.0.0)
152 | sass-listen (4.0.0)
153 | rb-fsevent (~> 0.9, >= 0.9.4)
154 | rb-inotify (~> 0.9, >= 0.9.7)
155 | sass-rails (5.0.7)
156 | railties (>= 4.0.0, < 6)
157 | sass (~> 3.1)
158 | sprockets (>= 2.8, < 4.0)
159 | sprockets-rails (>= 2.0, < 4.0)
160 | tilt (>= 1.1, < 3)
161 | selenium-webdriver (3.141.0)
162 | childprocess (~> 0.5)
163 | rubyzip (~> 1.2, >= 1.2.2)
164 | spring (2.0.2)
165 | activesupport (>= 4.2)
166 | spring-watcher-listen (2.0.1)
167 | listen (>= 2.7, < 4.0)
168 | spring (>= 1.2, < 3.0)
169 | sprockets (3.7.2)
170 | concurrent-ruby (~> 1.0)
171 | rack (> 1, < 3)
172 | sprockets-es6 (0.9.2)
173 | babel-source (>= 5.8.11)
174 | babel-transpiler
175 | sprockets (>= 3.0.0)
176 | sprockets-rails (3.2.1)
177 | actionpack (>= 4.0)
178 | activesupport (>= 4.0)
179 | sprockets (>= 3.0.0)
180 | thor (0.20.3)
181 | thread_safe (0.3.6)
182 | tilt (2.0.9)
183 | turbolinks (5.2.0)
184 | turbolinks-source (~> 5.2)
185 | turbolinks-source (5.2.0)
186 | tzinfo (1.2.5)
187 | thread_safe (~> 0.1)
188 | uglifier (4.1.20)
189 | execjs (>= 0.3.0, < 3)
190 | web-console (3.7.0)
191 | actionview (>= 5.0)
192 | activemodel (>= 5.0)
193 | bindex (>= 0.4.0)
194 | railties (>= 5.0)
195 | websocket-driver (0.7.0)
196 | websocket-extensions (>= 0.1.0)
197 | websocket-extensions (0.1.3)
198 | xpath (3.2.0)
199 | nokogiri (~> 1.8)
200 |
201 | PLATFORMS
202 | ruby
203 |
204 | DEPENDENCIES
205 | bootsnap (>= 1.1.0)
206 | byebug
207 | capybara (>= 2.15)
208 | chromedriver-helper
209 | coffee-rails (~> 4.2)
210 | jbuilder (~> 2.5)
211 | listen (>= 3.0.5, < 3.2)
212 | pg
213 | puma (~> 3.12)
214 | rails (~> 5.2.2)
215 | sass-rails (~> 5.0)
216 | selenium-webdriver
217 | spring
218 | spring-watcher-listen (~> 2.0.0)
219 | sprockets
220 | sprockets-es6
221 | turbolinks (~> 5)
222 | tzinfo-data
223 | uglifier (>= 1.3.0)
224 | web-console (>= 3.3.0)
225 |
226 | RUBY VERSION
227 | ruby 2.5.1p57
228 |
229 | BUNDLED WITH
230 | 1.16.4
231 |
--------------------------------------------------------------------------------
/Procfile:
--------------------------------------------------------------------------------
1 | web: bundle exec rails server -p $PORT
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # STACK RAILS BASE - Free Rails Admin Theme
2 |
3 | Stack Rails Base - the boilerplate of Stack Rails Admin.
--------------------------------------------------------------------------------
/Rakefile:
--------------------------------------------------------------------------------
1 | # Add your own tasks in files placed in lib/tasks ending in .rake,
2 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3 |
4 | require_relative 'config/application'
5 |
6 | Rails.application.load_tasks
7 |
--------------------------------------------------------------------------------
/app/assets/config/manifest.js:
--------------------------------------------------------------------------------
1 | //= link_tree ../images
2 | //= link_directory ../javascripts .js
3 | //= link_directory ../stylesheets .css
4 |
--------------------------------------------------------------------------------
/app/assets/images/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/app/assets/images/.keep
--------------------------------------------------------------------------------
/app/assets/images/avatar/demi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/app/assets/images/avatar/demi.png
--------------------------------------------------------------------------------
/app/assets/images/stack-logo-blue.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/assets/javascripts/application.js:
--------------------------------------------------------------------------------
1 |
2 | // Self Initialize DOM Factory Components
3 | domFactory.handler.autoInit()
4 |
5 | // Connect button(s) to drawer(s)
6 | var sidebarToggle = Array.prototype.slice.call(document.querySelectorAll('[data-toggle="sidebar"]'))
7 |
8 | sidebarToggle.forEach(function (toggle) {
9 | toggle.addEventListener('click', function (e) {
10 | var selector = e.currentTarget.getAttribute('data-target') || '#default-drawer'
11 | var drawer = document.querySelector(selector)
12 | if (drawer) {
13 | drawer.mdkDrawer.toggle()
14 | }
15 | })
16 | })
17 |
18 |
19 | let drawers = document.querySelectorAll('.mdk-drawer')
20 | drawers = Array.prototype.slice.call(drawers)
21 | drawers.forEach((drawer) => {
22 | drawer.addEventListener('mdk-drawer-change', (e) => {
23 | if (!e.target.mdkDrawer) {
24 | return
25 | }
26 | document.querySelector('body').classList[e.target.mdkDrawer.opened ? 'add' : 'remove']('has-drawer-opened')
27 | let button = document.querySelector('[data-target="#' + e.target.id + '"]')
28 | if (button) {
29 | button.classList[e.target.mdkDrawer.opened ? 'add' : 'remove']('active')
30 | }
31 | })
32 | })
33 |
34 | // ENABLE TOOLTIPS
35 | $('[data-toggle="tooltip"]').tooltip()
--------------------------------------------------------------------------------
/app/assets/javascripts/channels/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/app/assets/javascripts/channels/.keep
--------------------------------------------------------------------------------
/app/assets/javascripts/core-scripts.js:
--------------------------------------------------------------------------------
1 | //** CORE
2 | //= require jquery/dist/jquery.min.js
3 | //= require popper.js/dist/umd/popper.js
4 | //= require bootstrap/dist/js/bootstrap.min.js
5 |
6 | //= require simplebar/dist/simplebar.min.js
7 |
8 | //= require dom-factory/dist/dom-factory.js
9 | //= require material-design-kit/dist/material-design-kit.js
10 |
11 | //** PLUGIN SCRIPTS (NODE_MODULES)
12 | // PRO ONLY
13 |
14 | //** APP SETTINGS
15 | // PRO ONLY
16 |
17 | //** PLUGIN WRAPPERS & INITS
18 | // PRO ONLY
19 |
--------------------------------------------------------------------------------
/app/assets/stylesheets/_badge.scss:
--------------------------------------------------------------------------------
1 | .badge {
2 | box-sizing:border-box;
3 | font-weight:600;
4 | display:inline-flex;
5 | align-items:center;
6 | vertical-align:middle;
7 | }
8 | .badge-light-gray {
9 | color: rgba(#66768A, .4);
10 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_borders.scss:
--------------------------------------------------------------------------------
1 | @each $breakpoint in map-keys($grid-breakpoints) {
2 | @include media-breakpoint-up($breakpoint) {
3 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
4 |
5 | .border#{$infix} { border: $border-width solid $border-color !important; }
6 | .border-top#{$infix} { border-top: $border-width solid $border-color !important; }
7 | .border-right#{$infix} { border-right: $border-width solid $border-color !important; }
8 | .border-bottom#{$infix} { border-bottom: $border-width solid $border-color !important; }
9 | .border-left#{$infix} { border-left: $border-width solid $border-color !important; }
10 |
11 | .border#{$infix}-0 { border: 0 !important; }
12 | .border-top#{$infix}-0 { border-top: 0 !important; }
13 | .border-right#{$infix}-0 { border-right: 0 !important; }
14 | .border-bottom#{$infix}-0 { border-bottom: 0 !important; }
15 | .border-left#{$infix}-0 { border-left: 0 !important; }
16 |
17 | .rounded#{$infix} {
18 | border-radius: $border-radius !important;
19 | }
20 | .rounded-top#{$infix} {
21 | border-top-left-radius: $border-radius !important;
22 | border-top-right-radius: $border-radius !important;
23 | }
24 | .rounded-right#{$infix} {
25 | border-top-right-radius: $border-radius !important;
26 | border-bottom-right-radius: $border-radius !important;
27 | }
28 | .rounded-bottom#{$infix} {
29 | border-bottom-right-radius: $border-radius !important;
30 | border-bottom-left-radius: $border-radius !important;
31 | }
32 | .rounded-left#{$infix} {
33 | border-top-left-radius: $border-radius !important;
34 | border-bottom-left-radius: $border-radius !important;
35 | }
36 |
37 | .rounded#{$infix}-0 {
38 | border-radius: 0 !important;
39 | }
40 | .rounded-top#{$infix}-0 {
41 | border-top-left-radius: 0 !important;
42 | border-top-right-radius: 0 !important;
43 | }
44 | .rounded-left#{$infix}-0 {
45 | border-top-left-radius: 0 !important;
46 | border-bottom-left-radius: 0 !important;
47 | }
48 | .rounded-right#{$infix}-0 {
49 | border-top-right-radius: 0 !important;
50 | border-bottom-right-radius: 0 !important;
51 | }
52 | }
53 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_breadcrumb.scss:
--------------------------------------------------------------------------------
1 | .breadcrumb-item {
2 | text-transform: uppercase;
3 | letter-spacing: 0.85px;
4 | font-size: .825rem;
5 | font-weight: 600;
6 | i.material-icons {
7 | position: relative;
8 | top: -1px;
9 | }
10 | a {
11 | color: #364C66;
12 | &:hover {
13 | color: $link-color;
14 | }
15 | }
16 | }
17 |
18 | h1, h2, h3, h4, h5, h6,
19 | .h1, .h2, .h3, .h4, .h5, .h6 {
20 | & + [aria-label="breadcrumb"] {
21 | margin-top: -.6rem;
22 | }
23 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_button.scss:
--------------------------------------------------------------------------------
1 | .button-list > .btn {
2 | margin-bottom: .75rem;
3 | margin-left: .5rem;
4 | }
5 |
6 | .btn-rounded {
7 | border-radius: 100px;
8 | }
9 |
10 | .btn .material-icons {
11 | font-size:18px;
12 | vertical-align: middle;
13 | position:relative;
14 | top: -1px;
15 | }
16 |
17 | .btn-light {
18 | @include button-variant($background: white, $border: $border-color);
19 | }
20 |
21 | .btn-flush {
22 | padding: 0;
23 | background: none;
24 | color: inherit;
25 | line-height: 1;
26 | box-shadow: none;
27 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_card.scss:
--------------------------------------------------------------------------------
1 | .card {
2 |
3 | box-shadow: 0 10px 25px 0 rgba(50,50,93,0.07), 0 5px 15px 0 rgba(0,0,0,0.07);
4 | border: none;
5 |
6 | margin-bottom: $grid-gutter-width / 2;
7 |
8 | @include media-breakpoint-up(lg) {
9 | margin-bottom: $grid-gutter-width;
10 | }
11 | }
12 |
13 | .card-margin {
14 | margin-bottom: $grid-gutter-width / 2;
15 |
16 | @include media-breakpoint-up(lg) {
17 | margin-bottom: $grid-gutter-width;
18 | }
19 | }
20 |
21 | .form-row .card.form-row__card {
22 | margin-bottom: 10px;
23 | }
24 |
25 | .card-list > .card:last-child {
26 | margin-bottom: 0;
27 | }
28 |
29 | .card-group {
30 | @include media-breakpoint-up(sm) {
31 | margin-bottom: $grid-gutter-width;
32 | box-shadow: 0 10px 25px 0 rgba(50,50,93,0.07), 0 5px 15px 0 rgba(0,0,0,0.07);
33 | @if $enable-rounded {
34 | @include border-radius($card-border-radius);
35 | }
36 | > .card {
37 | box-shadow: none;
38 | border: $card-border-width solid $card-border-color;
39 | }
40 | }
41 | }
42 |
43 | .card-header {
44 | background-color: #F7F8F9;
45 | }
46 | .card-header__title {
47 | font-size: 1rem;
48 | font-weight: 600;
49 | font-family: $font-family-base;
50 | letter-spacing: 0;
51 | color: $headings-color;
52 | &:last-child {
53 | margin-bottom: 0;
54 | }
55 | .active & {
56 | color: $primary;
57 | }
58 | }
59 |
60 | .card-header-large {
61 | padding-top: 1.4375rem;
62 | padding-bottom: 1.4375rem;
63 | }
64 |
65 |
66 | .card-header-sm {
67 | padding-top: .85rem;
68 | padding-bottom: .85rem;
69 | }
70 |
71 | .card-footer {
72 | background-color: white;
73 | }
74 |
75 | .card-body-lg {
76 | padding: 1.6875rem;
77 | }
78 | .card-body-x-lg {
79 | padding-left: 1.6875rem;
80 | padding-right: 1.6875rem;
81 | }
82 |
83 | ///////////////////////////////////////////////////////
84 | // CARD GROUP combined with GRID //
85 | // //
86 | //
//
91 | ///////////////////////////////////////////////////////
92 |
93 | .card-group-row {
94 | display: flex;
95 | flex-flow: row wrap;
96 | &__col {
97 | display: flex;
98 | }
99 | &__card {
100 | flex: 1 0 0;
101 | }
102 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_drawer.scss:
--------------------------------------------------------------------------------
1 | .mdk-drawer__content {
2 | background: transparent;
3 | }
4 |
5 | .mdk-header-layout .mdk-drawer__content {
6 | top: $navbar-height;
7 | }
8 |
9 | .layout-mini {
10 | .mdk-drawer__content {
11 | display: flex;
12 | }
13 | .sidebar-mini {
14 | width: $layout-mini-drawer-width;
15 | .active.show .sidebar-menu-icon {
16 | color: $dark;
17 | }
18 |
19 | .sidebar-menu > li.sidebar-menu-item.active {
20 | &:not(.open) {
21 | border-right: 0px;
22 | }
23 | }
24 |
25 | .sidebar-menu-text,
26 | .sidebar-badge,
27 | .sidebar-menu-toggle-icon {
28 | display: none;
29 | }
30 |
31 | .sidebar-menu-button {
32 | justify-content: center;
33 | padding-top: .5rem;
34 | padding-bottom: .5rem;
35 | }
36 | .sidebar-menu-icon {
37 | margin: 0;
38 | }
39 | }
40 |
41 | @include media-breakpoint-up(sm) {
42 | .navbar {
43 | padding-left: 0;
44 | }
45 |
46 | .navbar-brand {
47 | width: $layout-mini-drawer-width;
48 | min-width: $layout-mini-drawer-width;
49 | justify-content: center;
50 | .navbar-brand-icon {
51 | margin: 0;
52 | }
53 | > span {
54 | display: none;
55 | }
56 | }
57 |
58 | & &__d-none {
59 | display: none;
60 | }
61 | }
62 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_dropdown.scss:
--------------------------------------------------------------------------------
1 | .dropdown-toggle:focus {
2 | outline: 0;
3 | }
4 |
5 | [data-caret="false"] {
6 | &::before,
7 | &::after {
8 | display: none;
9 | }
10 | }
11 |
12 | .dropdown-menu {
13 | display: block;
14 | visibility: hidden;
15 | opacity: 0;
16 | transition: opacity .3s ease, margin-top .3s ease, visibility .3s ease;
17 | margin-top: 20px !important;
18 |
19 | background-clip: initial;
20 | &::before,
21 | &::after {
22 | border: 8px solid transparent;
23 | border-bottom-color: $dropdown-bg;
24 | content: "";
25 | height: 0;
26 | left: 10px;
27 | opacity: 0;
28 | transition: .1s opacity cubic-bezier(.3, .5, .5, 1);
29 | position: absolute;
30 | top: -16px;
31 | width: 1px;
32 | }
33 | &::before {
34 | top: -17px;
35 | border-bottom-color: $dropdown-border-color;
36 | }
37 | }
38 | .dropdown-menu-right {
39 | &::before,
40 | &::after {
41 | left: initial;
42 | right: 10px;
43 | }
44 | }
45 |
46 | .dropup {
47 | .dropdown-menu {
48 | transform-origin: 10% bottom;
49 | &::before,
50 | &::after {
51 | top: auto;
52 | bottom: -16px;
53 | border-bottom-color: transparent;
54 | border-top-color: $dropdown-bg;
55 | }
56 | &::before {
57 | bottom: -17px;
58 | border-top-color: $dropdown-border-color;
59 | }
60 | }
61 | .dropdown-menu-right {
62 | transform-origin: 90% bottom;
63 | }
64 | }
65 |
66 | .show > .dropdown-menu,
67 | .dropdown-menu.show {
68 | visibility: visible;
69 | opacity: 1;
70 | margin-top: $dropdown-spacer !important;
71 |
72 | &::before,
73 | &::after {
74 | opacity: 1;
75 | }
76 | }
77 |
78 | .dropdown-menu-caret-center {
79 | transform-origin: 50% top;
80 | .dropup & {
81 | transform-origin: 50% bottom;
82 | }
83 | &::before,
84 | &::after {
85 | left: 50%;
86 | margin-left: -4px;
87 | }
88 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_flexbox.scss:
--------------------------------------------------------------------------------
1 | @each $breakpoint in map-keys($grid-breakpoints) {
2 | @include media-breakpoint-up($breakpoint) {
3 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
4 |
5 | .flex#{$infix} {
6 | flex: 1 1 0% !important;
7 | }
8 | .flex#{$infix}-none,
9 | .flex#{$infix}-0 {
10 | flex: none !important;
11 | }
12 | .flex#{$infix}-grow {
13 | flex: 1 1 auto !important;
14 | }
15 | .flex#{$infix}-shrink-0 {
16 | flex-shrink: 0 !important;
17 | }
18 | }
19 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_form.scss:
--------------------------------------------------------------------------------
1 | .custom-control-label::before {
2 | box-shadow: none;
3 | background-color: white;
4 | border: 1px solid #EFEFEF;
5 | }
6 |
7 | .custom-control-input {
8 | &:checked ~ .custom-control-label::before {
9 | border: none;
10 | }
11 | }
12 |
13 | %label {
14 | font-size: .8rem;
15 | text-transform: uppercase;
16 | letter-spacing: 1.2px;
17 | color: rgba($dark-gray, .84);
18 | line-height: .9375rem;
19 | margin-bottom: .5rem;
20 | font-weight: bold;
21 | }
22 |
23 | .text-label {
24 | @extend %label;
25 | }
26 |
27 | .text-label-large {
28 | @extend %label;
29 | font-size: $font-size-base;
30 | letter-spacing: 1px;
31 | font-weight: bold;
32 | line-height: 1.5rem;
33 | }
34 |
35 | .card-form {
36 | .card-body {
37 | padding: 1.6875rem;
38 | }
39 | .card-body-form-group {
40 | padding: $card-spacer-x;
41 | padding-bottom: $card-spacer-x - $form-group-margin-bottom;
42 | }
43 | &__body {
44 | background-color: #F3F5F6;
45 |
46 | label:not([class]) {
47 | @extend %label;
48 | }
49 | }
50 | }
51 |
52 | .form-control:focus {
53 | box-shadow: none !important;
54 | }
55 |
56 | .form-control-rounded {
57 | border-radius: 20rem;
58 | }
59 |
60 | .form-control-flush {
61 | padding: 0;
62 | border-width: 0;
63 | box-shadow: none;
64 | background-color: transparent;
65 | &:focus {
66 | background-color: transparent;
67 | box-shadow: none;
68 | }
69 | }
70 |
71 | .custom-file-naked {
72 | cursor: pointer;
73 | width: auto;
74 | height: auto;
75 | .custom-file-input {
76 | width: auto;
77 | height: auto;
78 | cursor: pointer;
79 | line-height: 1;
80 | }
81 | .custom-file-label {
82 | border: none;
83 | background: none;
84 | padding: 0;
85 | margin: 0;
86 | height: auto;
87 | cursor: pointer;
88 | line-height: 1;
89 | box-shadow: none;
90 | &:after {
91 | display: none;
92 | }
93 | }
94 | }
95 |
96 | .custom-select{
97 | -webkit-appearance: none;
98 | -moz-appearance: none;
99 | appearance: none;
100 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_header.scss:
--------------------------------------------------------------------------------
1 | .mdk-header {
2 | margin-bottom: $spacer;
3 | height: auto;
4 |
5 | &__content {
6 | display: flex;
7 | flex-direction: column;
8 | }
9 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_helpers.scss:
--------------------------------------------------------------------------------
1 | .bg-primary-dark {
2 | background-color: $primary-dark !important;
3 | }
4 | .border-style-dashed {
5 | border-style: dashed !important;
6 | }
7 | .border-bottom-2 {
8 | border-bottom: 2px solid $border-color;
9 | }
10 | .text-body {
11 | color: $body-color;
12 | &[href] {
13 | @include hover {
14 | color: $body-color;
15 | }
16 | }
17 | }
18 | .text-underline {
19 | text-decoration: underline;
20 | }
21 | .text-underline-0 {
22 | text-decoration: none;
23 | @include hover {
24 | text-decoration: none;
25 | }
26 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_icons.scss:
--------------------------------------------------------------------------------
1 | /* Material Design Icons - Setup Method 2. Self hosting
2 | * http://google.github.io/material-design-icons/ */
3 |
4 | $MD-icon-path-name: $material-design-icons-font-path + 'MaterialIcons-Regular' !default;
5 |
6 | @font-face {
7 | font-family: 'Material Icons';
8 | font-style: normal;
9 | font-weight: 400;
10 | src: url(asset-path("#{$MD-icon-path-name}.eot")); /* For IE6-8 */
11 | src: local("Material Icons"),
12 | local("MaterialIcons-Regular"),
13 | url(asset-path("#{$MD-icon-path-name}.woff2")) format('woff2'),
14 | url(asset-path("#{$MD-icon-path-name}.woff")) format('woff'),
15 | url(asset-path("#{$MD-icon-path-name}.ttf")) format('truetype');
16 | }
17 |
18 | .material-icons {
19 | font-family: 'Material Icons';
20 | font-weight: normal;
21 | font-style: normal;
22 | font-size: 24px; /* Preferred icon size */
23 | display: inline-block;
24 | line-height: 1;
25 | text-transform: none;
26 | letter-spacing: normal;
27 | word-wrap: normal;
28 | white-space: nowrap;
29 | direction: ltr;
30 |
31 | /* Support for all WebKit browsers. */
32 | -webkit-font-smoothing: antialiased;
33 | /* Support for Safari and Chrome. */
34 | text-rendering: optimizeLegibility;
35 |
36 | /* Support for Firefox. */
37 | -moz-osx-font-smoothing: grayscale;
38 |
39 | /* Support for IE. */
40 | font-feature-settings: 'liga';
41 |
42 | &.md-14 { font-size: 14px; }
43 | &.md-18 { font-size: 18px; }
44 | &.md-24 { font-size: 24px; }
45 | &.md-36 { font-size: 36px; }
46 | &.md-48 { font-size: 48px; }
47 | &.md-128 { font-size: 128px; }
48 | }
49 |
50 | .comment-counter{
51 | position: relative;
52 | span {
53 | position: absolute;
54 | background: rgba(239,244,248,1);
55 | left: 15px;
56 | top: -5px;
57 | width: 1rem;
58 | text-align: center;
59 | font-size: 1rem;
60 | border-radius: 50%;
61 | color:$body-color;
62 | border:1px solid $body-color;
63 | }
64 | }
65 |
66 | .md-top-1 {
67 | position:relative;
68 | top: -1px;
69 | }
70 |
71 |
72 | .material-icons {
73 | vertical-align: middle;
74 | }
75 |
76 | .icon-muted {
77 | color: rgba(#374D67, .2) !important;
78 | }
79 |
80 | a.icon-muted:hover .material-icons {
81 | color: $primary;
82 | }
83 |
84 | .icon-16pt {
85 | font-size: 1rem !important;
86 | }
87 | .icon-20pt {
88 | font-size: 1.25rem !important;
89 | }
90 | .icon-30pt {
91 | font-size: 30px !important;
92 | }
93 | .icon-40pt {
94 | font-size: 40px !important;
95 | }
96 | .icon-60pt {
97 | font-size: 60px !important;
98 | }
99 |
100 | #app-icons {
101 | .col-auto {
102 | padding: 1rem;
103 | height: 120px;
104 | width: 20%;
105 | }
106 | .title {
107 | max-width: 112px;
108 | white-space: nowrap;
109 | overflow: hidden;
110 | text-overflow: ellipsis;
111 | padding: 0 .35rem;
112 | }
113 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_input-group.scss:
--------------------------------------------------------------------------------
1 | .input-group-text .material-icons {
2 | font-size: inherit;
3 | }
4 | .input-group.input-group-merge {
5 | .form-control {
6 | box-shadow: none;
7 |
8 | &:focus ~ [class*=input-group] .input-group-text {
9 | border-color: $input-focus-border-color;
10 | border-width: 1px;
11 | color: $input-focus-border-color;
12 | }
13 |
14 | &.is-valid ~ [class*=input-group] .input-group-text,
15 | .was-validated &:valid ~ [class*=input-group] .input-group-text {
16 | border-color: $form-feedback-valid-color;
17 | color: $form-feedback-valid-color;
18 | }
19 | &.is-invalid ~ [class*=input-group] .input-group-text,
20 | .was-validated &:invalid ~ [class*=input-group] .input-group-text {
21 | border-color: $form-feedback-invalid-color;
22 | color: $form-feedback-invalid-color;
23 | }
24 | }
25 | .form-control-prepended {
26 | padding-left: 10px;
27 | border-left-width: 0;
28 | border-top-left-radius: 0;
29 | border-bottom-left-radius: 0;
30 | @include border-right-radius($input-border-radius);
31 | }
32 | .form-control-appended {
33 | padding-right: 0;
34 | border-right-width: 0;
35 | border-top-right-radius: 0;
36 | border-bottom-right-radius: 0;
37 | }
38 | .input-group-prepend {
39 | order: -1;
40 | > .input-group-text {
41 | border-right-width: 0 !important;
42 | @include border-left-radius($input-border-radius);
43 | }
44 | }
45 | .input-group-append > .input-group-text {
46 | border-left-width: 0 !important;
47 | @include border-right-radius($input-border-radius);
48 | }
49 |
50 | &.input-group-rounded {
51 | .form-control-prepended {
52 | @include border-right-radius(20rem);
53 | }
54 | .form-control-appended {
55 | @include border-left-radius(20rem);
56 | }
57 | .input-group-prepend > .input-group-text {
58 | @include border-left-radius(20rem);
59 | }
60 | .input-group-append > .input-group-text {
61 | @include border-right-radius(20rem);
62 | }
63 | }
64 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_layout.scss:
--------------------------------------------------------------------------------
1 | html,
2 | body {
3 | height: 100%;
4 | position: relative;
5 | }
6 | .mdk-header-layout,
7 | .mdk-drawer-layout,
8 | .mdk-drawer-layout__content {
9 | height: initial;
10 | min-height: 100%;
11 | }
12 |
13 | .page {
14 | padding-bottom: $grid-gutter-width;
15 | }
16 |
17 | .page__container,
18 | .page__heading-container {
19 | .layout-default &,
20 | .layout-fluid & {
21 | @include media-breakpoint-up(xl) {
22 | padding-left: $grid-gutter-width;
23 | padding-right: $grid-gutter-width;
24 | }
25 | }
26 | .layout-fluid & {
27 | max-width: 1300px;
28 | }
29 | .layout-default & {
30 | max-width: 1300px;
31 | }
32 | }
33 |
34 | .page__heading {
35 | h1 {line-height: 1;}
36 | padding-top: $grid-gutter-width /2;
37 | padding-bottom: $grid-gutter-width/2;
38 | @include media-breakpoint-up(xl) {
39 | &:not(.page__heading--xl_small) {
40 | padding-top: $grid-gutter-width;
41 | padding-bottom: $grid-gutter-width;
42 |
43 | }
44 | }
45 | }
46 | .layout-default, .layout-fixed, .layout-mini
47 | {
48 | .page__heading {
49 | border-bottom:1px solid $border-color;
50 | margin-bottom: $grid-gutter-width/2;
51 | @include media-breakpoint-up(xl) {
52 | &:not(.page__heading--xl_small) {
53 | margin-bottom: $grid-gutter-width;
54 | }
55 | }
56 | }
57 | }
58 |
59 | .page__header {
60 | background: white;
61 | box-shadow: 0 5px 15px 0 rgba(227,227,227,0.50);
62 | margin-bottom: $grid-gutter-width/2;
63 | @include media-breakpoint-up(xl) {
64 | margin-bottom: $grid-gutter-width;
65 | }
66 | z-index: 3;
67 | & + .page__header {
68 | z-index: 2;
69 | }
70 | position: relative;
71 | }
72 |
73 | // sticky subnav
74 |
75 | .layout-sticky-subnav {
76 | .mdk-header-layout {
77 | overflow: initial;
78 | }
79 | .page__header {
80 | &-nav {
81 | position: sticky;
82 | top: $navbar-height;
83 | z-index: 1;
84 | }
85 | &:first-child {
86 | margin-bottom: 0;
87 | box-shadow: none;
88 | }
89 | }
90 | .page__container {
91 | z-index: 0;
92 | position: relative;
93 | }
94 | }
95 |
96 | .mdk-header--shadow::after {
97 | box-shadow: 0 5px 15px 0 rgba(227,227,227,0.50);
98 | bottom: 0;
99 | height: $navbar-height;
100 | }
101 |
102 | .projects-item {
103 | margin-bottom: 0 !important;
104 | padding-bottom: .4375rem;
105 | border-left: 1px dotted rgba(55, 77, 103, 0.2);
106 | margin-left: 10px;
107 | }
108 |
109 | .bottom-spacing {
110 | margin-bottom: $grid-gutter-width / 2;
111 |
112 | @include media-breakpoint-up(lg) {
113 | margin-bottom: $grid-gutter-width;
114 | }
115 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_list-group.scss:
--------------------------------------------------------------------------------
1 | .list-group-small > .list-group-item {
2 | padding-top: .8125rem;
3 | padding-bottom: .8125rem;
4 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_loader.scss:
--------------------------------------------------------------------------------
1 | .is-loading {
2 | position: relative;
3 | color: transparent !important;
4 | }
5 |
6 | .is-loading:after,
7 | .loader {
8 | display: block;
9 | width: 1.5rem;
10 | height: 1.5rem;
11 | animation: 1s is-loading linear infinite;
12 | border: 3px solid $body-color;
13 | border-bottom-color: transparent;
14 | border-radius: 50%;
15 | background: transparent;
16 | }
17 |
18 | .is-loading-sm:after, .loader-sm {
19 | width: 1rem;
20 | height: 1rem;
21 | border-width: 2px;
22 | }
23 |
24 | .is-loading-lg:after, .loader-lg {
25 | width: 2rem;
26 | height: 2rem;
27 | border-width: 5px;
28 | }
29 |
30 | .is-loading > * {
31 | opacity: 0 !important;
32 | }
33 |
34 | .is-loading:after {
35 | position: absolute;
36 | top: calc(50% - 1.5rem / 2);
37 | left: calc(50% - 1.5rem / 2);
38 | content: "";
39 | }
40 |
41 | .is-loading-sm:after {
42 | top: calc(50% - 1rem / 2);
43 | left: calc(50% - 1rem / 2);
44 | }
45 |
46 | .is-loading-lg:after {
47 | top: calc(50% - 2rem / 2);
48 | left: calc(50% - 2rem / 2);
49 | }
50 |
51 | @each $color, $value in $theme-colors {
52 | .is-loading-#{$color}:after,
53 | .btn-outline-#{$color}.is-loading:after,
54 | .loader-#{$color} {
55 | border-color: $value;
56 | border-bottom-color: transparent;
57 | }
58 | .btn-#{$color}.is-loading:after {
59 | border-color: color-yiq($value);
60 | border-bottom-color: transparent;
61 | }
62 | }
63 |
64 | @keyframes is-loading {
65 | 0% {
66 | transform: rotate(0deg);
67 | }
68 | to {
69 | transform: rotate(1turn);
70 | }
71 | }
72 |
73 | .loader-list {
74 | display: flex;
75 | align-items: center;
76 | > .loader {
77 | margin-bottom: .75rem;
78 | margin-left: .5rem;
79 | }
80 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_navbar-dark.scss:
--------------------------------------------------------------------------------
1 | .navbar-dark {
2 | &.bg-dark [class*="border-"] {
3 | border-color: rgba(0,0,0,.34) !important;
4 | }
5 |
6 | &[class*=primary] [class*="border-"] {
7 | border-color: rgba(white,.24) !important;
8 | }
9 |
10 | .search-form {
11 | border-color: transparent;
12 | .form-control {
13 | color: rgba(white, .84);
14 | }
15 | }
16 |
17 | &.bg-dark .search-form {
18 | background-color: rgba(0,0,0,.24);
19 | .form-control::placeholder {
20 | color: #66768A;
21 | font-weight: 500;
22 |
23 | }
24 | .btn {
25 | color: rgba(white, .54);
26 | }
27 | }
28 |
29 | &[class*=primary] .search-form {
30 | background-color: rgba(0,0,0,.12);
31 | .form-control::placeholder {
32 | color: white;
33 | }
34 | .btn {
35 | color: rgba(white, .54);
36 | }
37 | }
38 |
39 | .navbar-toggler-custom {
40 | background-color: rgba(black, .24);
41 | .material-icons {
42 | color: white;
43 | }
44 | }
45 | .nav-icon,
46 | .navbar-notifications-indicator {
47 | color: white;
48 | }
49 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_navbar.scss:
--------------------------------------------------------------------------------
1 | .navbar {
2 | min-height: $navbar-height;
3 | padding-top: 0;
4 | padding-bottom: 0;
5 | font-size: .9rem;
6 |
7 | .dropdown-menu {
8 | position: absolute;
9 | }
10 |
11 | &.navbar-expand {
12 | @each $breakpoint in map-keys($grid-breakpoints) {
13 | $next: breakpoint-next($breakpoint, $grid-breakpoints);
14 | $infix: breakpoint-infix($next, $grid-breakpoints);
15 |
16 | {$infix} {
17 | @include media-breakpoint-up($next) {
18 | .nav-item {
19 | height: $navbar-height;
20 | display: flex;
21 | align-items: center;
22 | }
23 | .dropdown-menu {
24 | max-height: calc(100vh - #{$navbar-height * 2});
25 | }
26 | }
27 | }
28 | }
29 | }
30 | }
31 | .navbar-brand {
32 | font-size: 1.5rem;
33 | font-weight: 600;
34 | padding-top: 0;
35 | padding-bottom: 0;
36 | margin-right: $navbar-item-spacing;
37 | display: flex;
38 | align-items: center;
39 | // @include media-breakpoint-between(lg, xl) {
40 | // .layout-default & {
41 | // min-width: calc(#{$mdk-drawer-width} - #{$navbar-item-spacing});
42 | // }
43 | // }
44 | // @include media-breakpoint-up(xl) {
45 | // .layout-default & {
46 | // min-width: calc(#{$mdk-drawer-width} + 2.6875rem - #{$navbar-padding-x} - #{$navbar-item-spacing});
47 | // }
48 | // }
49 | }
50 | .navbar-brand-icon {
51 | margin-right: $navbar-padding-x/2;
52 | }
53 | .navbar-toggler {
54 | border: none;
55 | width: $navbar-height;
56 | height: $navbar-height;
57 | padding: 0;
58 | text-align: center;
59 | display: inline-block;
60 | }
61 | .navbar-toggler-right {
62 | order: 1;
63 | }
64 | .navbar-toggler-custom {
65 | display: flex;
66 | align-items: center;
67 | .material-icons {
68 | font-size: 2.0625rem;
69 | }
70 | }
71 | .navbar-height {
72 | height: $navbar-height;
73 | }
74 | .navbar-nav .nav-link {
75 | font-weight: 600;
76 | }
77 | .navbar-nav .nav-icon {
78 | font-size: 22px;
79 | }
80 |
81 | .navbar-secondary {
82 | min-height: 60px;
83 | &.navbar-expand {
84 | @each $breakpoint in map-keys($grid-breakpoints) {
85 | $next: breakpoint-next($breakpoint, $grid-breakpoints);
86 | $infix: breakpoint-infix($next, $grid-breakpoints);
87 |
88 | {$infix} {
89 | @include media-breakpoint-up($next) {
90 | .nav-item + .nav-item {
91 | margin-left: $nav-link-padding-x;
92 | }
93 | .navbar-nav,
94 | .nav-item {
95 | display: flex;
96 | align-items: center;
97 | }
98 | .nav-item {
99 | height: 60px;
100 | }
101 | }
102 | }
103 | }
104 | }
105 | }
106 |
107 | .navbar-main {
108 | &.navbar-light {
109 | box-shadow: 0 2px 2px rgba(0,0,0, .05);
110 | }
111 | #account_menu {
112 | right: 10px;
113 | min-width: 200px;
114 | }
115 | }
116 |
117 | .navbar .search-form {
118 | max-width: 300px;
119 | .form-control {
120 | box-shadow: none;
121 | &::placeholder {
122 | letter-spacing: 1.4px;
123 | }
124 | }
125 | .btn {
126 | color: $primary;
127 | background-color: transparent;
128 | }
129 | }
130 |
131 | .navbar-notifications-indicator {
132 | position: relative;
133 | &::after {
134 | width: 6px;
135 | height: 6px;
136 | content: "";
137 | background: $success;
138 | position: absolute;
139 | top: -3px;
140 | right: 2px;
141 | border-radius: 100px;
142 | }
143 | }
144 |
145 | .dropdown-menu.navbar-notifications-menu {
146 | width: 320px;
147 | min-height: 240px;
148 | line-height: 1.5;
149 | padding: 0;
150 | .dropdown-item {
151 | text-transform: none;
152 | letter-spacing: initial;
153 | font-size: $font-size-base;
154 | font-weight: normal;
155 | color: $body-color;
156 | }
157 | > .dropdown-item {
158 | background: $body-bg;
159 | border-bottom: 1px solid $border-color;
160 | }
161 | .navbar-notifications-menu__title {
162 | letter-spacing: initial;
163 | font-weight: 600;
164 | }
165 | .navbar-notifications-menu__content {
166 | max-height: 220px;
167 | .dropdown-item {
168 | white-space: normal;
169 | }
170 | }
171 | .navbar-notifications-menu__footer {
172 | border-bottom-left-radius: $border-radius;
173 | border-bottom-right-radius: $border-radius;
174 | border-top: 1px solid $border-color;
175 | font-weight: 600;
176 | &:hover {
177 | color: $link-color;
178 | }
179 | }
180 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_page-separator.scss:
--------------------------------------------------------------------------------
1 | .page-separator {
2 | position: relative;
3 | color: $text-muted;
4 | display: flex;
5 | align-items: center;
6 | justify-content: center;
7 | z-index: 0;
8 | margin: .5rem 0;
9 |
10 | &::before {
11 | content: '';
12 | height: 1px;
13 | background-color: $border-color;
14 | width: 100%;
15 | top: 50%;
16 | left: 0;
17 | position: absolute;
18 | z-index: -1;
19 | }
20 | &__text {
21 | display: inline-flex;
22 | padding: .25rem 1rem;
23 | font-size: .75rem;
24 | text-transform: uppercase;
25 | letter-spacing: 1.2px;
26 | color: $dark-gray;
27 | line-height: .9375rem;
28 | font-weight: bold;
29 | background-color: white;
30 | max-width: 90%;
31 | @include hover {
32 | text-decoration: none;
33 | }
34 | }
35 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_pagination.scss:
--------------------------------------------------------------------------------
1 | .page-item + .page-item {
2 | margin-left: .05rem;
3 | }
4 |
5 | .page-link {
6 | min-width: $pagination-line-height;
7 | height: $pagination-line-height;
8 | display: flex;
9 | align-items: center;
10 | justify-content: center;
11 | line-height: 1.5;
12 | padding-top: 0;
13 | padding-bottom: 0;
14 | font-weight: 600;
15 | &:hover {
16 | background: $pagination-active-bg;
17 | color: #fff;
18 | }
19 | }
20 |
21 | .pagination-rounded {
22 | .page-link {
23 | border-radius: 100px;
24 | }
25 |
26 | .page-item + .page-item {
27 | margin-left: .625rem;
28 | }
29 |
30 | .page-item {
31 | &:first-child .page-link,
32 | &:last-child .page-link {
33 | @include border-radius(100px);
34 | }
35 | }
36 | }
37 |
38 | .pagination-light {
39 | .page-item:not(.active) .page-link {
40 | background: transparent;
41 | &:hover {
42 | color: $primary;
43 | }
44 | }
45 | .page-item .page-link {
46 | border-radius: 100px;
47 | }
48 | .page-item {
49 | &:first-child .page-link,
50 | &:last-child .page-link {
51 | @include border-radius(100px);
52 | }
53 | }
54 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_preloader.scss:
--------------------------------------------------------------------------------
1 | .preloader {
2 | height: 100%;
3 | width: 100%;
4 | top: 0px;
5 | position: fixed;
6 | z-index: 99999;
7 | background: $dark;
8 | display: flex;
9 | align-items: center;
10 | justify-content: center;
11 | color: white;
12 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_progress.scss:
--------------------------------------------------------------------------------
1 | .progress {
2 | box-shadow: none;
3 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_sidebar.scss:
--------------------------------------------------------------------------------
1 | @import 'sidebar-style-guide/sass/style';
2 |
3 | .sidebar {
4 | height: 100%;
5 | text-align: initial;
6 | &:not([data-simplebar]) {
7 | overflow-y: auto;
8 | -webkit-overflow-scrolling: touch;
9 | }
10 | .simplebar-content {
11 | height: 100%;
12 | overflow-x: hidden !important;
13 | }
14 | }
15 |
16 | [data-simplebar-force-enabled="true"] .simplebar-content::-webkit-scrollbar {
17 | display: none;
18 | }
19 |
20 | .sidebar-heading {
21 | margin-bottom: $sidebar-spacing-y/2;
22 | }
23 |
24 | .sidebar-menu + .sidebar-heading {
25 | margin-top: 1.625rem;
26 | }
27 | .sidebar-heading + .sidebar-heading {
28 | margin-top: 2.25rem;
29 | }
30 | .sidebar-heading:first-child {
31 | margin-top: 1.25rem;
32 | }
33 |
34 | .sidebar-menu-item.active {
35 | &:not(.open) {
36 | border-right: 2px solid $primary;
37 | }
38 | }
39 | .sidebar-submenu > .sidebar-menu-item:last-child {
40 | margin-bottom: 1rem;
41 | }
42 |
43 | .sidebar-submenu .sidebar-menu-text {
44 | padding-left: 1rem;
45 | margin-left: .75rem;
46 | }
47 |
48 | .sidebar .progress {
49 | height: 7px;
50 | }
51 |
52 | .sidebar-light .sidebar-submenu {
53 | .sidebar-menu-text {
54 | border-left: 1px dotted rgba($dark-gray, .24);
55 | }
56 | }
57 |
58 | .sidebar-dark .sidebar-submenu {
59 | .sidebar-menu-text {
60 | border-left: 1px dotted rgba($dark-gray, .24);
61 | }
62 | }
63 |
64 | .sidebar-menu-toggle-icon {
65 | font-weight: normal;
66 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_type.scss:
--------------------------------------------------------------------------------
1 | html {
2 | -webkit-font-smoothing: antialiased;
3 | -moz-osx-font-smoothing: grayscale;
4 | }
5 |
6 | body {
7 | line-height: 1.25rem;
8 | }
9 |
10 | b,
11 | strong {
12 | font-weight: 600;
13 | }
14 |
15 | .bold {
16 | font-weight: 700;
17 | }
18 |
19 |
20 | h1, .h1 {
21 | font-weight: 700;
22 | }
23 |
24 | .headings-color {
25 | color: $headings-color;
26 | }
27 |
28 | .text-15pt {
29 | font-size: .9375rem !important;
30 | }
31 |
32 | .decoration-0 {
33 | @include hover {
34 | text-decoration: none;
35 | }
36 | }
37 |
38 | .link-date {
39 | color: $link-color;
40 | position: relative;
41 | overflow: hidden;
42 | background: rgba($primary, .05);
43 | padding: 2px 4px;
44 | border-radius: 2px;
45 |
46 | &::after {
47 | content: "................................................................";
48 | color: rgba(theme-color('dark-gray'), .4);
49 | font-size: .75rem;
50 | position: absolute;
51 | left: 0;
52 | overflow: hidden;
53 | width: 100%;
54 | top: .525rem;
55 | white-space: nowrap;
56 | }
57 |
58 | @include hover {
59 | text-decoration: none;
60 | }
61 | }
62 |
63 | .text-amount {
64 | font-size: 30px;
65 | letter-spacing: 2.1px;
66 | color: #112B4A;
67 | line-height: 2.1875rem;
68 | }
69 |
70 | .text-stats {
71 | font-weight: bold;
72 | letter-spacing: 0.93px;
73 | font-size: .8125rem;
74 | display: flex;
75 | align-items: center;
76 |
77 | .material-icons {
78 | margin-left: .125rem;
79 | font-size: 1rem;
80 | }
81 | }
--------------------------------------------------------------------------------
/app/assets/stylesheets/_variables.scss:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css?family=Open+Sans:600,700|Source+Sans+Pro:400,400i,600,700');
2 |
3 | // $material-design-icons-font-path: '../fonts/material-icons/' !default;
4 | $material-design-icons-font-path: 'material-design-icons-iconfont/dist/fonts/' !default;
5 |
6 | $fa-font-path: '@fortawesome/fontawesome-free/webfonts' !default;
7 |
8 | $body-bg: #F7F8F9 !default;
9 | $body-color: #112b4a !default;
10 | $link-color: #4a90e2 !default;
11 | $text-muted: rgba(#374D67, .54) !default;
12 |
13 | $primary: #308AF3 !default;
14 | $primary-dark: darken($primary, 10%) !default;
15 | $success: #48BA16 !default;
16 | $dark: #364C66 !default;
17 | $info: #51A7C5 !default;
18 |
19 | $enable-shadows: true !default;
20 | $gutter: 1rem;
21 |
22 | $mdc-theme-secondary: $primary !default;
23 |
24 | $dark-gray: #939FAD !default;
25 | $light-gray: #ECEEF0 !default;
26 |
27 | $theme-colors: (
28 | "teal": #16BA71,
29 | "purple": #5163C5,
30 | "dark-gray": $dark-gray,
31 | "light-gray": $light-gray,
32 | "muted-light": #DBDFE4,
33 | ) !default;
34 |
35 | $font-size-base: .9375rem !default; // 15px
36 | $font-family-base: 'Source Sans Pro', sans-serif;
37 |
38 | $headings-font-family: 'Open Sans', monospace !default;
39 |
40 | $small-font-size: .8125rem !default;
41 |
42 | $headings-color: rgba($body-color, .84) !default;
43 |
44 | // $paragraph-margin-bottom: .9375rem !default;
45 | $bottom-spacing: 0.9375rem * 2 !default;
46 |
47 | $border-color: #efefef !default;
48 |
49 | $badge-font-size: .675rem !default;
50 | $badge-font-weight: bold !default;
51 | $badge-padding-y: .25rem !default;
52 | $badge-padding-x: .25rem !default;
53 | $badge-border-radius: 2px !default;
54 |
55 | $breadcrumb-padding-y: 0 !default;
56 | $breadcrumb-padding-x: 0 !default;
57 | $breadcrumb-bg: transparent;
58 | $breadcrumb-divider-color: rgba(#364C66, .24) !default;
59 | $breadcrumb-active-color: rgba(#364C66, .54) !default;
60 |
61 | $table-border-color: $border-color !default;
62 | $table-cell-padding: .35rem 1rem !default;
63 | //
64 |
65 | // Buttons + Forms
66 | //
67 | // Shared variables that are reassigned to `$input-` and `$btn-` specific variables.
68 | $btn-font-weight: 600 !default;
69 |
70 | $input-btn-padding-y: .375rem !default;
71 | $input-btn-padding-x: .875rem !default;
72 | $input-btn-font-size: .875rem !default;
73 |
74 |
75 | $input-btn-padding-y-sm: .15rem !default;
76 | $input-btn-padding-x-sm: .5rem !default;
77 | $input-btn-font-size-sm: .65rem !default;
78 |
79 | $input-btn-padding-y-lg: .35rem !default;
80 | $input-btn-padding-x-lg: .85rem !default;
81 | $input-btn-font-size-lg: 1rem !default;
82 |
83 | //
84 | $input-border-color: #DBDFE4 !default;
85 | $input-placeholder-color: #A6B0BC !default;
86 | $input-focus-border-color: $primary !default;
87 |
88 | $input-group-addon-bg: white !default;
89 | $input-group-addon-color: $dark-gray !default;
90 |
91 | $navbar-height: 64px !default;
92 | $navbar-item-spacing: 1rem !default;
93 | $navbar-nav-link-padding-x: .75rem !default;
94 |
95 | $navbar-light-color: rgba(#384E68, .54) !default;
96 | $navbar-light-active-color: rgba(17,43,74,.84) !default;
97 |
98 | $navbar-dark-color: rgba(white, .54) !default;
99 |
100 | $mdk-drawer-width: 300px !default;
101 | $layout-mini-drawer-width: 64px !default;
102 |
103 | $sidebar-spacing-x: 1.25rem !default;
104 | $sidebar-spacing-y: 1rem !default;
105 |
106 | $sidebar-heading-font-size: .6875rem !default;
107 | $sidebar-heading-letter-spacing: .92px !default;
108 | $sidebar-heading-font-weight: bold !default;
109 | $sidebar-light-heading-color: rgba(17,43,74,.84) !default;
110 | $sidebar-dark-heading-color: rgba(255,255,255,.84) !default;
111 |
112 | $sm-icon-spacing-x: .625rem !default;
113 | $sm-button-font-weight: 600 !default;
114 | $sm-button-font-size: 1rem !default;
115 |
116 | $ssm-button-height: 2rem !default;
117 | $ssm-button-font-size: .875rem !default;
118 |
119 | $sm-light-button-color: $dark-gray !default;
120 | $sm-light-open-bg: #F7F8F9 !default;
121 | $sm-light-icon-color: rgba(#A4AFBA, .5) !default;
122 | $sm-light-hover-icon-color: $dark-gray !default;
123 | $sm-light-active-button-color: rgba(#354B66, .84) !default;
124 | $sm-light-active-icon-color: $primary !default;
125 | $sm-light-toggle-color: #BBBCBD !default;
126 | $sm-light-hover-button-bg: transparent !default;
127 |
128 | $ssm-light-button-color: $sm-light-button-color !default;
129 | $sm-light-open-button-color: #384E68 !default;
130 | $sm-light-open-icon-color: $primary !default;
131 |
132 | $sidebar-light-container-border-color: $border-color !default;
133 | $sidebar-light-border-color: $border-color !default;
134 | $sidebar-light-heading-color: rgba(#364C66, .3) !default;
135 |
136 | $sidebar-dark-heading-color: rgba(white, .18) !default;
137 | $sm-dark-button-color: rgba($dark-gray, .84) !default;
138 | $sm-dark-icon-color: rgba(#A4AFBA, .5) !default;
139 | $sm-dark-active-button-color: rgba(white, .84) !default;
140 | $sm-dark-active-icon-color: $primary !default;
141 |
142 | $sm-toggle-font-size: 18px !default;
143 | $sm-toggle-icon: "\e148" !default;
144 | $sm-open-toggle-icon: "\e15d" !default;
145 |
146 | $dropdown-padding-y: .625rem !default;
147 | $dropdown-border-color: $border-color !default;
148 | $dropdown-border-radius: 5px !default;
149 | $dropdown-box-shadow: 0 5px 11px 0 rgba(0,0,0,0.07) !default;
150 |
151 | // $dropdown-link-color: $dark-gray !default;
152 | $dropdown-link-hover-color: #384E68 !default;
153 | $dropdown-link-hover-bg: transparent !default;
154 |
155 | $dropdown-link-active-color: $primary !default;
156 | $dropdown-link-active-bg: transparent !default;
157 |
158 | $dropdown-item-padding-y: .25rem !default;
159 | $dropdown-item-padding-x: 1.25rem !default;
160 |
161 | $container-max-widths: (
162 | sm: 540px,
163 | md: 720px,
164 | lg: 966px
165 | ) !default;
166 |
167 |
168 | $card-border-color: $border-color !default;
169 |
170 | $list-group-item-padding-y: 1rem !default;
171 | $list-group-border-color: $border-color !default;
172 |
173 | $pagination-color: #929EAC !default;
174 | $pagination-border-width: 0 !default;
175 | $pagination-line-height: 30px !default;
176 | $pagination-bg: #ECEEF0 !default;
177 | $pagination-active-bg: $primary;
178 |
179 | $pagination-disabled-bg: rgba($pagination-bg, .5) !default;
180 | $pagination-disabled-color: rgba($pagination-color, .3) !default;
181 |
182 | @import 'bootstrap/scss/functions';
183 | @import 'bootstrap/scss/variables';
184 | @import 'bootstrap/scss/mixins';
185 |
186 | // Sidebar style guide (default)
187 | @import 'sidebar-style-guide/sass/variables';
188 |
189 | // MDK (default)
190 | @import 'material-design-kit/src/variables';
--------------------------------------------------------------------------------
/app/assets/stylesheets/application.scss:
--------------------------------------------------------------------------------
1 | //** CORE
2 | // Variables
3 | @import 'variables';
4 | // Bootstrap
5 | @import 'bootstrap/scss/bootstrap';
6 | // MDK
7 | @import 'material-design-kit/src/style';
8 | // SIMPLEBAR (SCROLL)
9 | @import 'simplebar/dist/simplebar';
10 |
11 | //** APP
12 | @import 'flexbox';
13 | @import 'icons';
14 | @import 'type';
15 | @import 'layout';
16 | @import 'dropdown';
17 | @import 'header';
18 | @import 'navbar';
19 | @import 'navbar-dark';
20 | @import 'drawer';
21 | @import 'sidebar';
22 | @import 'card';
23 | @import 'button';
24 | @import 'breadcrumb';
25 | @import 'form';
26 | @import 'input-group';
27 | @import 'progress';
28 | @import 'list-group';
29 | @import 'borders';
30 | @import 'loader';
31 | @import 'helpers';
32 | @import 'badge';
33 | @import 'pagination';
34 | @import 'page-separator';
35 | @import 'preloader';
--------------------------------------------------------------------------------
/app/channels/application_cable/channel.rb:
--------------------------------------------------------------------------------
1 | module ApplicationCable
2 | class Channel < ActionCable::Channel::Base
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/app/channels/application_cable/connection.rb:
--------------------------------------------------------------------------------
1 | module ApplicationCable
2 | class Connection < ActionCable::Connection::Base
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/app/controllers/application_controller.rb:
--------------------------------------------------------------------------------
1 | class ApplicationController < ActionController::Base
2 | end
3 |
--------------------------------------------------------------------------------
/app/controllers/concerns/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/app/controllers/concerns/.keep
--------------------------------------------------------------------------------
/app/controllers/stack_controller.rb:
--------------------------------------------------------------------------------
1 | class StackController < ApplicationController
2 | before_action :chat_var
3 | layout :stack_layout
4 | def index; end
5 |
6 | def show()
7 |
8 | params[:page] = 'index' unless params[:page]
9 | # FAKE PARAMS
10 |
11 | render 'stack/'+ params[:page]
12 | end
13 |
14 | private
15 | def stack_layout
16 |
17 | if (params[:page] == 'login' or params[:page] == 'sign_up')
18 | return "blank"
19 | else
20 | return "application"
21 | end
22 | end
23 |
24 | def chat_var
25 | @chat = [{
26 | avatar: "256_rsz_1andy-lee-642320-unsplash.jpg",
27 | name: "Jenell D. Matney",
28 | date: "4 days ago"
29 | }, {
30 | avatar: "256_daniel-gaffey-1060698-unsplash.jpg",
31 | name: "Sherri J. Cardenas",
32 | date: "3 days ago"
33 | }, {
34 | avatar: "256_jeremy-banks-798787-unsplash.jpg",
35 | name: "Joseph S. Ferland",
36 | date: "2 days ago"
37 | }, {
38 | avatar: "256_joao-silas-636453-unsplash.jpg",
39 | name: "Bryan K. Davis",
40 | date: "1 day ago"
41 | }, {
42 | avatar: "256_luke-porter-261779-unsplash.jpg",
43 | name: "Elizabeth J. Ohara",
44 | date: "4 hours ago"
45 | }, {
46 | avatar: "256_michael-dam-258165-unsplash.jpg",
47 | name: "Kaci M. Langston",
48 | date: "just now"
49 | }]
50 |
51 | end
52 | end
53 |
--------------------------------------------------------------------------------
/app/helpers/application_helper.rb:
--------------------------------------------------------------------------------
1 | module ApplicationHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/jobs/application_job.rb:
--------------------------------------------------------------------------------
1 | class ApplicationJob < ActiveJob::Base
2 | end
3 |
--------------------------------------------------------------------------------
/app/mailers/application_mailer.rb:
--------------------------------------------------------------------------------
1 | class ApplicationMailer < ActionMailer::Base
2 | default from: 'from@example.com'
3 | layout 'mailer'
4 | end
5 |
--------------------------------------------------------------------------------
/app/models/application_record.rb:
--------------------------------------------------------------------------------
1 | class ApplicationRecord < ActiveRecord::Base
2 | self.abstract_class = true
3 | end
4 |
--------------------------------------------------------------------------------
/app/models/concerns/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/app/models/concerns/.keep
--------------------------------------------------------------------------------
/app/views/layouts/_drawer_left.html.erb:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/views/layouts/_navbar.html.erb:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/views/layouts/application.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Stack Rails Base - Rails 5 Free Admin Theme
5 |
6 |
7 |
8 | <%= csrf_meta_tags %>
9 |
10 | <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
11 |
12 |
13 |
14 |
15 |
43 |
44 |
45 | <%= content_for :footer %>
46 |
47 | <%= javascript_include_tag 'core-scripts', 'data-turbolinks-track': 'reload' %>
48 | <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
49 |
50 | <%= content_for :footer_scripts %>
51 |
52 |
53 |
--------------------------------------------------------------------------------
/app/views/layouts/blank.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Stack-Rails - Rails 5 & Bootstrap 4 Admin Dashboard
5 |
6 |
7 |
8 | <%= csrf_meta_tags %>
9 |
10 | <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
11 |
12 |
13 |
14 |
15 | <%= yield %>
16 |
17 |
18 |
--------------------------------------------------------------------------------
/app/views/layouts/mailer.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
10 |
11 | <%= yield %>
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/views/layouts/mailer.text.erb:
--------------------------------------------------------------------------------
1 | <%= yield %>
2 |
--------------------------------------------------------------------------------
/app/views/stack/_pagination.html.erb:
--------------------------------------------------------------------------------
1 | <%
2 | pages = pages || 2
3 | first = first || false
4 | prevItem = prevItem || true
5 | nextItem = nextItem || true
6 | last = last || false
7 | labels = labels || false
8 | align = align || 'left'
9 | className= className || ''
10 | %>
11 |
--------------------------------------------------------------------------------
/app/views/stack/index.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Home
7 | Dashboard
8 |
9 |
10 |
Rails 5 FREE Admin Theme
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
Rails 5 Free Admin Theme
20 |
Stack Rails Base is a Free Rails Bootstrap 4 Admin Theme covering the basic needs of an Admin Application from layout to components.
21 |
22 |
23 | file_download Download FREE
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
[PRO] Stack Rails Admin Dashboard Theme
32 |
33 | shopping_cart Purchase PRO: $99
34 |
35 |
36 |
37 |
38 | Included All of Bootstrap 4.1 Components
39 | 3x Dashboards
40 | 4+ Application Interfaces
41 | Customized Line, Bar, Area & Donut Charts
42 | Projects, Trello (drag & drop), Chat & Calendar Apps
43 | 10+ stats card variants
44 | 5+ list card variants
45 | Forms:
46 |
47 |
48 | Validation
49 | Search
50 | Group
51 | Rounded
52 | Flush
53 | Toggle
54 | Date pickers
55 | Input Masking
56 | WYSIWYG editor
57 | File Uploads with drag and drop
58 | Select2 Plugin
59 |
60 |
61 | Navbar with buttons, menu, forms, avatars, and more!
62 | Light/Dark Sidebar Styles
63 | Material & Font Awesome Icons
64 | Calendar App with drag & drop events
65 | Functional listing search with list.js
66 | Extended/Customized Vector Maps
67 |
68 |
69 |
74 |
75 |
76 |
--------------------------------------------------------------------------------
/app/views/stack/ui_alerts.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | home
6 | UI Components
7 | Alerts
8 |
9 |
10 |
Alerts
11 |
12 |
13 |
14 |
15 |
16 |
19 |
20 |
Toasts based notifications can be used to to show important alerts or information to users.
21 |
Available in PRO
22 |
23 |
24 |
25 |
26 |
27 |
30 |
31 |
Alerts are available for any length of text, as well as an optional dismiss button. For proper styling, use one of the eight contextual classes (i.e. .alert-success
). For background color use class .bg-*
and .text-white
.
32 |
33 |
34 | Primary - A simple primary alert - check it out!
35 |
36 |
37 | Secondary - A simple secondary alert - check it out!
38 |
39 |
40 | Success - A simple success alert - check it out!
41 |
42 |
43 | Danger - A simple danger alert - check it out!
44 |
45 |
46 | Warning - A simple warning alert - check it out!
47 |
48 |
49 | Info - A simple info alert - check it out!
50 |
51 |
52 | Light - A simple light alert - check it out!
53 |
54 |
55 | Dark - A simple dark alert - check it out!
56 |
57 |
58 |
59 |
60 |
61 |
62 |
65 |
66 |
Add a button and the .alert-dismissible
class, which adds extra padding to the right of the alert and positions the .close
button.
67 |
68 |
69 |
70 | ×
71 |
72 | Primary - A simple primary alert - check it out!
73 |
74 |
75 |
76 |
77 | ×
78 |
79 | Secondary - A simple secondary alert - check it out!
80 |
81 |
82 |
83 |
84 | ×
85 |
86 | Success - A simple success alert - check it out!
87 |
88 |
89 |
90 |
91 | ×
92 |
93 | Danger - A simple danger alert - check it out!
94 |
95 |
96 |
97 |
98 | ×
99 |
100 | Warning - A simple warning alert - check it out!
101 |
102 |
103 |
104 |
105 | ×
106 |
107 | Info - A simple info alert - check it out!
108 |
109 |
110 |
111 |
112 | ×
113 |
114 | Light - A simple light alert - check it out!
115 |
116 |
117 |
118 |
119 | ×
120 |
121 | Dark - A simple dark alert - check it out!
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
132 |
133 |
Alternate styles for alerts with softer background color by replacing classes like .alert-primary
with .alert-soft-primary
. Alerts can also contain additional HTML elements like icons and paragraphs.
134 |
135 |
Available in PRO
136 |
137 |
138 |
139 |
140 |
141 |
142 |
145 |
146 |
A small count and labeling component. Please read the official Bootstrap documentation for a full list of options.
147 |
148 |
Primary
149 |
Secondary
150 |
Success
151 |
Danger
152 |
Warning
153 |
Info
154 |
Light
155 |
Dark
156 |
Primary
157 |
Secondary
158 |
Success
159 |
Danger
160 |
Warning
161 |
Info
162 |
Light
163 |
Dark
164 |
165 |
166 |
167 |
168 |
--------------------------------------------------------------------------------
/app/views/stack/ui_buttons.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | home
6 | UI Components
7 | Buttons
8 |
9 |
10 |
Buttons
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
21 |
22 |
Use button classes on an "<%=h "" %>"
, "<%=h "" %>"
, or "<%=h " " %>"
element.
23 |
24 |
25 | Primary
26 | Secondary
27 | Success
28 | Danger
29 | Warning
30 | Info
31 | Light
32 | Dark
33 | Link
34 |
35 |
36 |
37 |
38 |
41 |
42 |
Use the .btn-outline-*
classes to create bordered buttons.
43 |
44 | Primary
45 | Secondary
46 | Success
47 | Danger
48 | Warning
49 | Info
50 | Dark
51 |
52 |
53 |
54 |
55 |
58 |
59 |
Add rounded
to buttons to get large rounded corners.
60 |
61 | Primary
62 | Secondary
63 | Success
64 | Danger
65 | Warning
66 | Info
67 | Light
68 | Dark
69 | Link
70 |
71 |
72 |
73 |
74 |
77 |
78 |
Use the .btn-outline-*
and .btn-rounded
classes together to quickly create bordered buttons with large rounded corners.
79 |
80 | Primary
81 | Secondary
82 | Success
83 | Danger
84 | Warning
85 | Info
86 | Dark
87 |
88 |
89 |
90 |
91 |
94 |
95 |
Add .btn-lg
or .btn-sm
classes for additional button sizes.
96 |
97 | Large
98 | Normal
99 | Small
100 |
101 |
102 |
103 |
104 |
105 |
106 |
109 |
110 |
Add icons to any button or even use Icon-only buttons.
111 |
112 |
113 | favorite_border
114 |
115 |
116 | close
117 |
118 |
119 | music_note
120 |
121 |
122 | star
123 |
124 |
125 | thumb_up
126 |
127 |
128 | settings
129 |
130 |
131 |
132 | favorite Favorite
133 |
134 |
135 | launch Launch
136 |
137 |
138 | cloud Cloud Hosting
139 |
140 |
141 |
142 |
143 |
144 |
147 |
148 |
Create block level buttons, by adding add .btn-block
.
149 |
Block Button
150 |
Block Button
151 |
Block Button
152 |
153 |
154 |
155 |
158 |
159 |
Create a group of buttons by wrapping with .btn-group
.
160 |
161 | Left
162 | Middle
163 | Right
164 |
165 |
166 |
167 | 1
168 | 2
169 | 3
170 | 4
171 |
172 |
173 | 5
174 | 6
175 | 7
176 |
177 |
178 | 8
179 |
180 |
181 |
182 |
1
183 |
2
184 |
3
185 |
186 | Dropdown
187 |
191 |
192 |
193 |
194 |
195 |
196 | Top
197 | Middle
198 | Bottom
199 |
200 |
201 | Button 1
202 | Button 2
203 | Button 3
204 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
217 |
218 |
Add the disabled
attribute to disable buttons.
219 |
220 | Info
221 | Success
222 | Danger
223 | Dark
224 |
225 |
226 |
227 |
228 |
229 |
230 |
--------------------------------------------------------------------------------
/app/views/stack/ui_forms.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | home
6 | UI Components
7 | Forms
8 |
9 |
10 |
11 |
Forms
12 |
13 |
14 |
15 |
16 |
37 |
38 |
89 |
90 |
134 |
135 |
185 |
186 |
200 |
201 |
215 |
216 |
--------------------------------------------------------------------------------
/app/views/stack/ui_icons.html.erb:
--------------------------------------------------------------------------------
1 | <% icons = [{"e84d":{"name":"3d Rotation"},"eb3b":{"name":"Ac Unit"},"e190":{"name":"Access Alarm"},"e191":{"name":"Access Alarms"},"e192":{"name":"Access Time"},"e84e":{"name":"Accessibility"},"e914":{"name":"Accessible"},"e84f":{"name":"Account Balance"},"e850":{"name":"Account Balance Wallet"},"e851":{"name":"Account Box"},"e853":{"name":"Account Circle"},"e60e":{"name":"Adb"},"e145":{"name":"Add"},"e439":{"name":"Add A Photo"},"e193":{"name":"Add Alarm"},"e003":{"name":"Add Alert"},"e146":{"name":"Add Box"},"e147":{"name":"Add Circle"},"e148":{"name":"Add Circle Outline"},"e567":{"name":"Add Location"},"e854":{"name":"Add Shopping Cart"},"e39d":{"name":"Add To Photos"},"e05c":{"name":"Add To Queue"},"e39e":{"name":"Adjust"},"e630":{"name":"Airline Seat Flat"},"e631":{"name":"Airline Seat Flat Angled"},"e632":{"name":"Airline Seat Individual Suite"},"e633":{"name":"Airline Seat Legroom Extra"},"e634":{"name":"Airline Seat Legroom Normal"},"e635":{"name":"Airline Seat Legroom Reduced"},"e636":{"name":"Airline Seat Recline Extra"},"e637":{"name":"Airline Seat Recline Normal"},"e195":{"name":"Airplanemode Active"},"e194":{"name":"Airplanemode Inactive"},"e055":{"name":"Airplay"},"eb3c":{"name":"Airport Shuttle"},"e855":{"name":"Alarm"},"e856":{"name":"Alarm Add"},"e857":{"name":"Alarm Off"},"e858":{"name":"Alarm On"},"e019":{"name":"Album"},"eb3d":{"name":"All Inclusive"},"e90b":{"name":"All Out"},"e859":{"name":"Android"},"e85a":{"name":"Announcement"},"e5c3":{"name":"Apps"},"e149":{"name":"Archive"},"e5c4":{"name":"Arrow Back"},"e5db":{"name":"Arrow Downward"},"e5c5":{"name":"Arrow Drop Down"},"e5c6":{"name":"Arrow Drop Down Circle"},"e5c7":{"name":"Arrow Drop Up"},"e5c8":{"name":"Arrow Forward"},"e5d8":{"name":"Arrow Upward"},"e060":{"name":"Art Track"},"e85b":{"name":"Aspect Ratio"},"e85c":{"name":"Assessment"},"e85d":{"name":"Assignment"},"e85e":{"name":"Assignment Ind"},"e85f":{"name":"Assignment Late"},"e860":{"name":"Assignment Return"},"e861":{"name":"Assignment Returned"},"e862":{"name":"Assignment Turned In"},"e39f":{"name":"Assistant"},"e3a0":{"name":"Assistant Photo"},"e226":{"name":"Attach File"},"e227":{"name":"Attach Money"},"e2bc":{"name":"Attachment"},"e3a1":{"name":"Audiotrack"},"e863":{"name":"Autorenew"},"e01b":{"name":"Av Timer"},"e14a":{"name":"Backspace"},"e864":{"name":"Backup"},"e19c":{"name":"Battery Alert"},"e1a3":{"name":"Battery Charging Full"},"e1a4":{"name":"Battery Full"},"e1a5":{"name":"Battery Std"},"e1a6":{"name":"Battery Unknown"},"eb3e":{"name":"Beach Access"},"e52d":{"name":"Beenhere"},"e14b":{"name":"Block"},"e1a7":{"name":"Bluetooth"},"e60f":{"name":"Bluetooth Audio"},"e1a8":{"name":"Bluetooth Connected"},"e1a9":{"name":"Bluetooth Disabled"},"e1aa":{"name":"Bluetooth Searching"},"e3a2":{"name":"Blur Circular"},"e3a3":{"name":"Blur Linear"},"e3a4":{"name":"Blur Off"},"e3a5":{"name":"Blur On"},"e865":{"name":"Book"},"e866":{"name":"Bookmark"},"e867":{"name":"Bookmark Border"},"e228":{"name":"Border All"},"e229":{"name":"Border Bottom"},"e22a":{"name":"Border Clear"},"e22b":{"name":"Border Color"},"e22c":{"name":"Border Horizontal"},"e22d":{"name":"Border Inner"},"e22e":{"name":"Border Left"},"e22f":{"name":"Border Outer"},"e230":{"name":"Border Right"},"e231":{"name":"Border Style"},"e232":{"name":"Border Top"},"e233":{"name":"Border Vertical"},"e06b":{"name":"Branding Watermark"},"e3a6":{"name":"Brightness 1"},"e3a7":{"name":"Brightness 2"},"e3a8":{"name":"Brightness 3"},"e3a9":{"name":"Brightness 4"},"e3aa":{"name":"Brightness 5"},"e3ab":{"name":"Brightness 6"},"e3ac":{"name":"Brightness 7"},"e1ab":{"name":"Brightness Auto"},"e1ac":{"name":"Brightness High"},"e1ad":{"name":"Brightness Low"},"e1ae":{"name":"Brightness Medium"},"e3ad":{"name":"Broken Image"},"e3ae":{"name":"Brush"},"e6dd":{"name":"Bubble Chart"},"e868":{"name":"Bug Report"},"e869":{"name":"Build"},"e43c":{"name":"Burst Mode"},"e0af":{"name":"Business"},"eb3f":{"name":"Business Center"},"e86a":{"name":"Cached"},"e7e9":{"name":"Cake"},"e0b0":{"name":"Call"},"e0b1":{"name":"Call End"},"e0b2":{"name":"Call Made"},"e0b3":{"name":"Call Merge"},"e0b4":{"name":"Call Missed"},"e0e4":{"name":"Call Missed Outgoing"},"e0b5":{"name":"Call Received"},"e0b6":{"name":"Call Split"},"e06c":{"name":"Call To Action"},"e3af":{"name":"Camera"},"e3b0":{"name":"Camera Alt"},"e8fc":{"name":"Camera Enhance"},"e3b1":{"name":"Camera Front"},"e3b2":{"name":"Camera Rear"},"e3b3":{"name":"Camera Roll"},"e5c9":{"name":"Cancel"},"e8f6":{"name":"Card Giftcard"},"e8f7":{"name":"Card Membership"},"e8f8":{"name":"Card Travel"},"eb40":{"name":"Casino"},"e307":{"name":"Cast"},"e308":{"name":"Cast Connected"},"e3b4":{"name":"Center Focus Strong"},"e3b5":{"name":"Center Focus Weak"},"e86b":{"name":"Change History"},"e0b7":{"name":"Chat"},"e0ca":{"name":"Chat Bubble"},"e0cb":{"name":"Chat Bubble Outline"},"e5ca":{"name":"Check"},"e834":{"name":"Check Box"},"e835":{"name":"Check Box Outline Blank"},"e86c":{"name":"Check Circle"},"e5cb":{"name":"Chevron Left"},"e5cc":{"name":"Chevron Right"},"eb41":{"name":"Child Care"},"eb42":{"name":"Child Friendly"},"e86d":{"name":"Chrome Reader Mode"},"e86e":{"name":"Class"},"e14c":{"name":"Clear"},"e0b8":{"name":"Clear All"},"e5cd":{"name":"Close"},"e01c":{"name":"Closed Caption"},"e2bd":{"name":"Cloud"},"e2be":{"name":"Cloud Circle"},"e2bf":{"name":"Cloud Done"},"e2c0":{"name":"Cloud Download"},"e2c1":{"name":"Cloud Off"},"e2c2":{"name":"Cloud Queue"},"e2c3":{"name":"Cloud Upload"},"e86f":{"name":"Code"},"e3b6":{"name":"Collections"},"e431":{"name":"Collections Bookmark"},"e3b7":{"name":"Color Lens"},"e3b8":{"name":"Colorize"},"e0b9":{"name":"Comment"},"e3b9":{"name":"Compare"},"e915":{"name":"Compare Arrows"},"e30a":{"name":"Computer"},"e638":{"name":"Confirmation Number"},"e0d0":{"name":"Contact Mail"},"e0cf":{"name":"Contact Phone"},"e0ba":{"name":"Contacts"},"e14d":{"name":"Content Copy"},"e14e":{"name":"Content Cut"},"e14f":{"name":"Content Paste"},"e3ba":{"name":"Control Point"},"e3bb":{"name":"Control Point Duplicate"},"e90c":{"name":"Copyright"},"e150":{"name":"Create"},"e2cc":{"name":"Create New Folder"},"e870":{"name":"Credit Card"},"e3be":{"name":"Crop"},"e3bc":{"name":"Crop 16 9"},"e3bd":{"name":"Crop 3 2"},"e3bf":{"name":"Crop 5 4"},"e3c0":{"name":"Crop 7 5"},"e3c1":{"name":"Crop Din"},"e3c2":{"name":"Crop Free"},"e3c3":{"name":"Crop Landscape"},"e3c4":{"name":"Crop Original"},"e3c5":{"name":"Crop Portrait"},"e437":{"name":"Crop Rotate"},"e3c6":{"name":"Crop Square"},"e871":{"name":"Dashboard"},"e1af":{"name":"Data Usage"},"e916":{"name":"Date Range"},"e3c7":{"name":"Dehaze"},"e872":{"name":"Delete"},"e92b":{"name":"Delete Forever"},"e16c":{"name":"Delete Sweep"},"e873":{"name":"Description"},"e30b":{"name":"Desktop Mac"},"e30c":{"name":"Desktop Windows"},"e3c8":{"name":"Details"},"e30d":{"name":"Developer Board"},"e1b0":{"name":"Developer Mode"},"e335":{"name":"Device Hub"},"e1b1":{"name":"Devices"},"e337":{"name":"Devices Other"},"e0bb":{"name":"Dialer Sip"},"e0bc":{"name":"Dialpad"},"e52e":{"name":"Directions"},"e52f":{"name":"Directions Bike"},"e532":{"name":"Directions Boat"},"e530":{"name":"Directions Bus"},"e531":{"name":"Directions Car"},"e534":{"name":"Directions Railway"},"e566":{"name":"Directions Run"},"e533":{"name":"Directions Subway"},"e535":{"name":"Directions Transit"},"e536":{"name":"Directions Walk"},"e610":{"name":"Disc Full"},"e875":{"name":"Dns"},"e612":{"name":"Do Not Disturb"},"e611":{"name":"Do Not Disturb Alt"},"e643":{"name":"Do Not Disturb Off"},"e644":{"name":"Do Not Disturb On"},"e30e":{"name":"Dock"},"e7ee":{"name":"Domain"},"e876":{"name":"Done"},"e877":{"name":"Done All"},"e917":{"name":"Donut Large"},"e918":{"name":"Donut Small"},"e151":{"name":"Drafts"},"e25d":{"name":"Drag Handle"},"e613":{"name":"Drive Eta"},"e1b2":{"name":"Dvr"},"e3c9":{"name":"Edit"},"e568":{"name":"Edit Location"},"e8fb":{"name":"Eject"},"e0be":{"name":"Email"},"e63f":{"name":"Enhanced Encryption"},"e01d":{"name":"Equalizer"},"e000":{"name":"Error"},"e001":{"name":"Error Outline"},"e926":{"name":"Euro Symbol"},"e56d":{"name":"Ev Station"},"e878":{"name":"Event"},"e614":{"name":"Event Available"},"e615":{"name":"Event Busy"},"e616":{"name":"Event Note"},"e903":{"name":"Event Seat"},"e879":{"name":"Exit To App"},"e5ce":{"name":"Expand Less"},"e5cf":{"name":"Expand More"},"e01e":{"name":"Explicit"},"e87a":{"name":"Explore"},"e3ca":{"name":"Exposure"},"e3cb":{"name":"Exposure Neg 1"},"e3cc":{"name":"Exposure Neg 2"},"e3cd":{"name":"Exposure Plus 1"},"e3ce":{"name":"Exposure Plus 2"},"e3cf":{"name":"Exposure Zero"},"e87b":{"name":"Extension"},"e87c":{"name":"Face"},"e01f":{"name":"Fast Forward"},"e020":{"name":"Fast Rewind"},"e87d":{"name":"Favorite"},"e87e":{"name":"Favorite Border"},"e06d":{"name":"Featured Play List"},"e06e":{"name":"Featured Video"},"e87f":{"name":"Feedback"},"e05d":{"name":"Fiber Dvr"},"e061":{"name":"Fiber Manual Record"},"e05e":{"name":"Fiber New"},"e06a":{"name":"Fiber Pin"},"e062":{"name":"Fiber Smart Record"},"e2c4":{"name":"File Download"},"e2c6":{"name":"File Upload"},"e3d3":{"name":"Filter"},"e3d0":{"name":"Filter 1"},"e3d1":{"name":"Filter 2"},"e3d2":{"name":"Filter 3"},"e3d4":{"name":"Filter 4"},"e3d5":{"name":"Filter 5"},"e3d6":{"name":"Filter 6"},"e3d7":{"name":"Filter 7"},"e3d8":{"name":"Filter 8"},"e3d9":{"name":"Filter 9"},"e3da":{"name":"Filter 9 Plus"},"e3db":{"name":"Filter B And W"},"e3dc":{"name":"Filter Center Focus"},"e3dd":{"name":"Filter Drama"},"e3de":{"name":"Filter Frames"},"e3df":{"name":"Filter Hdr"},"e152":{"name":"Filter List"},"e3e0":{"name":"Filter None"},"e3e2":{"name":"Filter Tilt Shift"},"e3e3":{"name":"Filter Vintage"},"e880":{"name":"Find In Page"},"e881":{"name":"Find Replace"},"e90d":{"name":"Fingerprint"},"e5dc":{"name":"First Page"},"eb43":{"name":"Fitness Center"},"e153":{"name":"Flag"},"e3e4":{"name":"Flare"},"e3e5":{"name":"Flash Auto"},"e3e6":{"name":"Flash Off"},"e3e7":{"name":"Flash On"},"e539":{"name":"Flight"},"e904":{"name":"Flight Land"},"e905":{"name":"Flight Takeoff"},"e3e8":{"name":"Flip"},"e882":{"name":"Flip To Back"},"e883":{"name":"Flip To Front"},"e2c7":{"name":"Folder"},"e2c8":{"name":"Folder Open"},"e2c9":{"name":"Folder Shared"},"e617":{"name":"Folder Special"},"e167":{"name":"Font Download"},"e234":{"name":"Format Align Center"},"e235":{"name":"Format Align Justify"},"e236":{"name":"Format Align Left"},"e237":{"name":"Format Align Right"},"e238":{"name":"Format Bold"},"e239":{"name":"Format Clear"},"e23a":{"name":"Format Color Fill"},"e23b":{"name":"Format Color Reset"},"e23c":{"name":"Format Color Text"},"e23d":{"name":"Format Indent Decrease"},"e23e":{"name":"Format Indent Increase"},"e23f":{"name":"Format Italic"},"e240":{"name":"Format Line Spacing"},"e241":{"name":"Format List Bulleted"},"e242":{"name":"Format List Numbered"},"e243":{"name":"Format Paint"},"e244":{"name":"Format Quote"},"e25e":{"name":"Format Shapes"},"e245":{"name":"Format Size"},"e246":{"name":"Format Strikethrough"},"e247":{"name":"Format Textdirection L To R"},"e248":{"name":"Format Textdirection R To L"},"e249":{"name":"Format Underlined"},"e0bf":{"name":"Forum"},"e154":{"name":"Forward"},"e056":{"name":"Forward 10"},"e057":{"name":"Forward 30"},"e058":{"name":"Forward 5"},"eb44":{"name":"Free Breakfast"},"e5d0":{"name":"Fullscreen"},"e5d1":{"name":"Fullscreen Exit"},"e24a":{"name":"Functions"},"e927":{"name":"G Translate"},"e30f":{"name":"Gamepad"},"e021":{"name":"Games"},"e90e":{"name":"Gavel"},"e155":{"name":"Gesture"},"e884":{"name":"Get App"},"e908":{"name":"Gif"},"eb45":{"name":"Golf Course"},"e1b3":{"name":"Gps Fixed"},"e1b4":{"name":"Gps Not Fixed"},"e1b5":{"name":"Gps Off"},"e885":{"name":"Grade"},"e3e9":{"name":"Gradient"},"e3ea":{"name":"Grain"},"e1b8":{"name":"Graphic Eq"},"e3eb":{"name":"Grid Off"},"e3ec":{"name":"Grid On"},"e7ef":{"name":"Group"},"e7f0":{"name":"Group Add"},"e886":{"name":"Group Work"},"e052":{"name":"Hd"},"e3ed":{"name":"Hdr Off"},"e3ee":{"name":"Hdr On"},"e3f1":{"name":"Hdr Strong"},"e3f2":{"name":"Hdr Weak"},"e310":{"name":"Headset"},"e311":{"name":"Headset Mic"},"e3f3":{"name":"Healing"},"e023":{"name":"Hearing"},"e887":{"name":"Help"},"e8fd":{"name":"Help Outline"},"e024":{"name":"High Quality"},"e25f":{"name":"Highlight"},"e888":{"name":"Highlight Off"},"e889":{"name":"History"},"e88a":{"name":"Home"},"eb46":{"name":"Hot Tub"},"e53a":{"name":"Hotel"},"e88b":{"name":"Hourglass Empty"},"e88c":{"name":"Hourglass Full"},"e902":{"name":"Http"},"e88d":{"name":"Https"},"e3f4":{"name":"Image"},"e3f5":{"name":"Image Aspect Ratio"},"e0e0":{"name":"Import Contacts"},"e0c3":{"name":"Import Export"},"e912":{"name":"Important Devices"},"e156":{"name":"Inbox"},"e909":{"name":"Indeterminate Check Box"},"e88e":{"name":"Info"},"e88f":{"name":"Info Outline"},"e890":{"name":"Input"},"e24b":{"name":"Insert Chart"},"e24c":{"name":"Insert Comment"},"e24d":{"name":"Insert Drive File"},"e24e":{"name":"Insert Emoticon"},"e24f":{"name":"Insert Invitation"},"e250":{"name":"Insert Link"},"e251":{"name":"Insert Photo"},"e891":{"name":"Invert Colors"},"e0c4":{"name":"Invert Colors Off"},"e3f6":{"name":"Iso"},"e312":{"name":"Keyboard"},"e313":{"name":"Keyboard Arrow Down"},"e314":{"name":"Keyboard Arrow Left"},"e315":{"name":"Keyboard Arrow Right"},"e316":{"name":"Keyboard Arrow Up"},"e317":{"name":"Keyboard Backspace"},"e318":{"name":"Keyboard Capslock"},"e31a":{"name":"Keyboard Hide"},"e31b":{"name":"Keyboard Return"},"e31c":{"name":"Keyboard Tab"},"e31d":{"name":"Keyboard Voice"},"eb47":{"name":"Kitchen"},"e892":{"name":"Label"},"e893":{"name":"Label Outline"},"e3f7":{"name":"Landscape"},"e894":{"name":"Language"},"e31e":{"name":"Laptop"},"e31f":{"name":"Laptop Chromebook"},"e320":{"name":"Laptop Mac"},"e321":{"name":"Laptop Windows"},"e5dd":{"name":"Last Page"},"e895":{"name":"Launch"},"e53b":{"name":"Layers"},"e53c":{"name":"Layers Clear"},"e3f8":{"name":"Leak Add"},"e3f9":{"name":"Leak Remove"},"e3fa":{"name":"Lens"},"e02e":{"name":"Library Add"},"e02f":{"name":"Library Books"},"e030":{"name":"Library Music"},"e90f":{"name":"Lightbulb Outline"},"e919":{"name":"Line Style"},"e91a":{"name":"Line Weight"},"e260":{"name":"Linear Scale"},"e157":{"name":"Link"},"e438":{"name":"Linked Camera"},"e896":{"name":"List"},"e0c6":{"name":"Live Help"},"e639":{"name":"Live Tv"},"e53f":{"name":"Local Activity"},"e53d":{"name":"Local Airport"},"e53e":{"name":"Local Atm"},"e540":{"name":"Local Bar"},"e541":{"name":"Local Cafe"},"e542":{"name":"Local Car Wash"},"e543":{"name":"Local Convenience Store"},"e556":{"name":"Local Dining"},"e544":{"name":"Local Drink"},"e545":{"name":"Local Florist"},"e546":{"name":"Local Gas Station"},"e547":{"name":"Local Grocery Store"},"e548":{"name":"Local Hospital"},"e549":{"name":"Local Hotel"},"e54a":{"name":"Local Laundry Service"},"e54b":{"name":"Local Library"},"e54c":{"name":"Local Mall"},"e54d":{"name":"Local Movies"},"e54e":{"name":"Local Offer"},"e54f":{"name":"Local Parking"},"e550":{"name":"Local Pharmacy"},"e551":{"name":"Local Phone"},"e552":{"name":"Local Pizza"},"e553":{"name":"Local Play"},"e554":{"name":"Local Post Office"},"e555":{"name":"Local Printshop"},"e557":{"name":"Local See"},"e558":{"name":"Local Shipping"},"e559":{"name":"Local Taxi"},"e7f1":{"name":"Location City"},"e1b6":{"name":"Location Disabled"},"e0c7":{"name":"Location Off"},"e0c8":{"name":"Location On"},"e1b7":{"name":"Location Searching"},"e897":{"name":"Lock"},"e898":{"name":"Lock Open"},"e899":{"name":"Lock Outline"},"e3fc":{"name":"Looks"},"e3fb":{"name":"Looks 3"},"e3fd":{"name":"Looks 4"},"e3fe":{"name":"Looks 5"},"e3ff":{"name":"Looks 6"},"e400":{"name":"Looks One"},"e401":{"name":"Looks Two"},"e028":{"name":"Loop"},"e402":{"name":"Loupe"},"e16d":{"name":"Low Priority"},"e89a":{"name":"Loyalty"},"e158":{"name":"Mail"},"e0e1":{"name":"Mail Outline"},"e55b":{"name":"Map"},"e159":{"name":"Markunread"},"e89b":{"name":"Markunread Mailbox"},"e322":{"name":"Memory"},"e5d2":{"name":"Menu"},"e252":{"name":"Merge Type"},"e0c9":{"name":"Message"},"e029":{"name":"Mic"},"e02a":{"name":"Mic None"},"e02b":{"name":"Mic Off"},"e618":{"name":"Mms"},"e253":{"name":"Mode Comment"},"e254":{"name":"Mode Edit"},"e263":{"name":"Monetization On"},"e25c":{"name":"Money Off"},"e403":{"name":"Monochrome Photos"},"e7f2":{"name":"Mood"},"e7f3":{"name":"Mood Bad"},"e619":{"name":"More"},"e5d3":{"name":"More Horiz"},"e5d4":{"name":"More Vert"},"e91b":{"name":"Motorcycle"},"e323":{"name":"Mouse"},"e168":{"name":"Move To Inbox"},"e02c":{"name":"Movie"},"e404":{"name":"Movie Creation"},"e43a":{"name":"Movie Filter"},"e6df":{"name":"Multiline Chart"},"e405":{"name":"Music Note"},"e063":{"name":"Music Video"},"e55c":{"name":"My Location"},"e406":{"name":"Nature"},"e407":{"name":"Nature People"},"e408":{"name":"Navigate Before"},"e409":{"name":"Navigate Next"},"e55d":{"name":"Navigation"},"e569":{"name":"Near Me"},"e1b9":{"name":"Network Cell"},"e640":{"name":"Network Check"},"e61a":{"name":"Network Locked"},"e1ba":{"name":"Network Wifi"},"e031":{"name":"New Releases"},"e16a":{"name":"Next Week"},"e1bb":{"name":"Nfc"},"e641":{"name":"No Encryption"},"e0cc":{"name":"No Sim"},"e033":{"name":"Not Interested"},"e06f":{"name":"Note"},"e89c":{"name":"Note Add"},"e7f4":{"name":"Notifications"},"e7f7":{"name":"Notifications Active"},"e7f5":{"name":"Notifications None"},"e7f6":{"name":"Notifications Off"},"e7f8":{"name":"Notifications Paused"},"e90a":{"name":"Offline Pin"},"e63a":{"name":"Ondemand Video"},"e91c":{"name":"Opacity"},"e89d":{"name":"Open In Browser"},"e89e":{"name":"Open In New"},"e89f":{"name":"Open With"},"e7f9":{"name":"Pages"},"e8a0":{"name":"Pageview"},"e40a":{"name":"Palette"},"e925":{"name":"Pan Tool"},"e40b":{"name":"Panorama"},"e40c":{"name":"Panorama Fish Eye"},"e40d":{"name":"Panorama Horizontal"},"e40e":{"name":"Panorama Vertical"},"e40f":{"name":"Panorama Wide Angle"},"e7fa":{"name":"Party Mode"},"e034":{"name":"Pause"},"e035":{"name":"Pause Circle Filled"},"e036":{"name":"Pause Circle Outline"},"e8a1":{"name":"Payment"},"e7fb":{"name":"People"},"e7fc":{"name":"People Outline"},"e8a2":{"name":"Perm Camera Mic"},"e8a3":{"name":"Perm Contact Calendar"},"e8a4":{"name":"Perm Data Setting"},"e8a5":{"name":"Perm Device Information"},"e8a6":{"name":"Perm Identity"},"e8a7":{"name":"Perm Media"},"e8a8":{"name":"Perm Phone Msg"},"e8a9":{"name":"Perm Scan Wifi"},"e7fd":{"name":"Person"},"e7fe":{"name":"Person Add"},"e7ff":{"name":"Person Outline"},"e55a":{"name":"Person Pin"},"e56a":{"name":"Person Pin Circle"},"e63b":{"name":"Personal Video"},"e91d":{"name":"Pets"},"e0cd":{"name":"Phone"},"e324":{"name":"Phone Android"},"e61b":{"name":"Phone Bluetooth Speaker"},"e61c":{"name":"Phone Forwarded"},"e61d":{"name":"Phone In Talk"},"e325":{"name":"Phone Iphone"},"e61e":{"name":"Phone Locked"},"e61f":{"name":"Phone Missed"},"e620":{"name":"Phone Paused"},"e326":{"name":"Phonelink"},"e0db":{"name":"Phonelink Erase"},"e0dc":{"name":"Phonelink Lock"},"e327":{"name":"Phonelink Off"},"e0dd":{"name":"Phonelink Ring"},"e0de":{"name":"Phonelink Setup"},"e410":{"name":"Photo"},"e411":{"name":"Photo Album"},"e412":{"name":"Photo Camera"},"e43b":{"name":"Photo Filter"},"e413":{"name":"Photo Library"},"e432":{"name":"Photo Size Select Actual"},"e433":{"name":"Photo Size Select Large"},"e434":{"name":"Photo Size Select Small"},"e415":{"name":"Picture As Pdf"},"e8aa":{"name":"Picture In Picture"},"e911":{"name":"Picture In Picture Alt"},"e6c4":{"name":"Pie Chart"},"e6c5":{"name":"Pie Chart Outlined"},"e55e":{"name":"Pin Drop"},"e55f":{"name":"Place"},"e037":{"name":"Play Arrow"},"e038":{"name":"Play Circle Filled"},"e039":{"name":"Play Circle Outline"},"e906":{"name":"Play For Work"},"e03b":{"name":"Playlist Add"},"e065":{"name":"Playlist Add Check"},"e05f":{"name":"Playlist Play"},"e800":{"name":"Plus One"},"e801":{"name":"Poll"},"e8ab":{"name":"Polymer"},"eb48":{"name":"Pool"},"e0ce":{"name":"Portable Wifi Off"},"e416":{"name":"Portrait"},"e63c":{"name":"Power"},"e336":{"name":"Power Input"},"e8ac":{"name":"Power Settings New"},"e91e":{"name":"Pregnant Woman"},"e0df":{"name":"Present To All"},"e8ad":{"name":"Print"},"e645":{"name":"Priority High"},"e80b":{"name":"Public"},"e255":{"name":"Publish"},"e8ae":{"name":"Query Builder"},"e8af":{"name":"Question Answer"},"e03c":{"name":"Queue"},"e03d":{"name":"Queue Music"},"e066":{"name":"Queue Play Next"},"e03e":{"name":"Radio"},"e837":{"name":"Radio Button Checked"},"e836":{"name":"Radio Button Unchecked"},"e560":{"name":"Rate Review"},"e8b0":{"name":"Receipt"},"e03f":{"name":"Recent Actors"},"e91f":{"name":"Record Voice Over"},"e8b1":{"name":"Redeem"},"e15a":{"name":"Redo"},"e5d5":{"name":"Refresh"},"e15b":{"name":"Remove"},"e15c":{"name":"Remove Circle"},"e15d":{"name":"Remove Circle Outline"},"e067":{"name":"Remove From Queue"},"e417":{"name":"Remove Red Eye"},"e928":{"name":"Remove Shopping Cart"},"e8fe":{"name":"Reorder"},"e040":{"name":"Repeat"},"e041":{"name":"Repeat One"},"e042":{"name":"Replay"},"e059":{"name":"Replay 10"},"e05a":{"name":"Replay 30"},"e05b":{"name":"Replay 5"},"e15e":{"name":"Reply"},"e15f":{"name":"Reply All"},"e160":{"name":"Report"},"e8b2":{"name":"Report Problem"},"e56c":{"name":"Restaurant"},"e561":{"name":"Restaurant Menu"},"e8b3":{"name":"Restore"},"e929":{"name":"Restore Page"},"e0d1":{"name":"Ring Volume"},"e8b4":{"name":"Room"},"eb49":{"name":"Room Service"},"e418":{"name":"Rotate 90 Degrees Ccw"},"e419":{"name":"Rotate Left"},"e41a":{"name":"Rotate Right"},"e920":{"name":"Rounded Corner"},"e328":{"name":"Router"},"e921":{"name":"Rowing"},"e0e5":{"name":"Rss Feed"},"e642":{"name":"Rv Hookup"},"e562":{"name":"Satellite"},"e161":{"name":"Save"},"e329":{"name":"Scanner"},"e8b5":{"name":"Schedule"},"e80c":{"name":"School"},"e1be":{"name":"Screen Lock Landscape"},"e1bf":{"name":"Screen Lock Portrait"},"e1c0":{"name":"Screen Lock Rotation"},"e1c1":{"name":"Screen Rotation"},"e0e2":{"name":"Screen Share"},"e623":{"name":"Sd Card"},"e1c2":{"name":"Sd Storage"},"e8b6":{"name":"Search"},"e32a":{"name":"Security"},"e162":{"name":"Select All"},"e163":{"name":"Send"},"e811":{"name":"Sentiment Dissatisfied"},"e812":{"name":"Sentiment Neutral"},"e813":{"name":"Sentiment Satisfied"},"e814":{"name":"Sentiment Very Dissatisfied"},"e815":{"name":"Sentiment Very Satisfied"},"e8b8":{"name":"Settings"},"e8b9":{"name":"Settings Applications"},"e8ba":{"name":"Settings Backup Restore"},"e8bb":{"name":"Settings Bluetooth"},"e8bd":{"name":"Settings Brightness"},"e8bc":{"name":"Settings Cell"},"e8be":{"name":"Settings Ethernet"},"e8bf":{"name":"Settings Input Antenna"},"e8c0":{"name":"Settings Input Component"},"e8c1":{"name":"Settings Input Composite"},"e8c2":{"name":"Settings Input Hdmi"},"e8c3":{"name":"Settings Input Svideo"},"e8c4":{"name":"Settings Overscan"},"e8c5":{"name":"Settings Phone"},"e8c6":{"name":"Settings Power"},"e8c7":{"name":"Settings Remote"},"e1c3":{"name":"Settings System Daydream"},"e8c8":{"name":"Settings Voice"},"e80d":{"name":"Share"},"e8c9":{"name":"Shop"},"e8ca":{"name":"Shop Two"},"e8cb":{"name":"Shopping Basket"},"e8cc":{"name":"Shopping Cart"},"e261":{"name":"Short Text"},"e6e1":{"name":"Show Chart"},"e043":{"name":"Shuffle"},"e1c8":{"name":"Signal Cellular 4 Bar"},"e1cd":{"name":"Signal Cellular Connected No Internet 4 Bar"},"e1ce":{"name":"Signal Cellular No Sim"},"e1cf":{"name":"Signal Cellular Null"},"e1d0":{"name":"Signal Cellular Off"},"e1d8":{"name":"Signal Wifi 4 Bar"},"e1d9":{"name":"Signal Wifi 4 Bar Lock"},"e1da":{"name":"Signal Wifi Off"},"e32b":{"name":"Sim Card"},"e624":{"name":"Sim Card Alert"},"e044":{"name":"Skip Next"},"e045":{"name":"Skip Previous"},"e41b":{"name":"Slideshow"},"e068":{"name":"Slow Motion Video"},"e32c":{"name":"Smartphone"},"eb4a":{"name":"Smoke Free"},"eb4b":{"name":"Smoking Rooms"},"e625":{"name":"Sms"},"e626":{"name":"Sms Failed"},"e046":{"name":"Snooze"},"e164":{"name":"Sort"},"e053":{"name":"Sort By Alpha"},"eb4c":{"name":"Spa"},"e256":{"name":"Space Bar"},"e32d":{"name":"Speaker"},"e32e":{"name":"Speaker Group"},"e8cd":{"name":"Speaker Notes"},"e92a":{"name":"Speaker Notes Off"},"e0d2":{"name":"Speaker Phone"},"e8ce":{"name":"Spellcheck"},"e838":{"name":"Star"},"e83a":{"name":"Star Border"},"e839":{"name":"Star Half"},"e8d0":{"name":"Stars"},"e0d3":{"name":"Stay Current Landscape"},"e0d4":{"name":"Stay Current Portrait"},"e0d5":{"name":"Stay Primary Landscape"},"e0d6":{"name":"Stay Primary Portrait"},"e047":{"name":"Stop"},"e0e3":{"name":"Stop Screen Share"},"e1db":{"name":"Storage"},"e8d1":{"name":"Store"},"e563":{"name":"Store Mall Directory"},"e41c":{"name":"Straighten"},"e56e":{"name":"Streetview"},"e257":{"name":"Strikethrough S"},"e41d":{"name":"Style"},"e5d9":{"name":"Subdirectory Arrow Left"},"e5da":{"name":"Subdirectory Arrow Right"},"e8d2":{"name":"Subject"},"e064":{"name":"Subscriptions"},"e048":{"name":"Subtitles"},"e56f":{"name":"Subway"},"e8d3":{"name":"Supervisor Account"},"e049":{"name":"Surround Sound"},"e0d7":{"name":"Swap Calls"},"e8d4":{"name":"Swap Horiz"},"e8d5":{"name":"Swap Vert"},"e8d6":{"name":"Swap Vertical Circle"},"e41e":{"name":"Switch Camera"},"e41f":{"name":"Switch Video"},"e627":{"name":"Sync"},"e628":{"name":"Sync Disabled"},"e629":{"name":"Sync Problem"},"e62a":{"name":"System Update"},"e8d7":{"name":"System Update Alt"},"e8d8":{"name":"Tab"},"e8d9":{"name":"Tab Unselected"},"e32f":{"name":"Tablet"},"e330":{"name":"Tablet Android"},"e331":{"name":"Tablet Mac"},"e420":{"name":"Tag Faces"},"e62b":{"name":"Tap And Play"},"e564":{"name":"Terrain"},"e262":{"name":"Text Fields"},"e165":{"name":"Text Format"},"e0d8":{"name":"Textsms"},"e421":{"name":"Texture"},"e8da":{"name":"Theaters"},"e8db":{"name":"Thumb Down"},"e8dc":{"name":"Thumb Up"},"e8dd":{"name":"Thumbs Up Down"},"e62c":{"name":"Time To Leave"},"e422":{"name":"Timelapse"},"e922":{"name":"Timeline"},"e425":{"name":"Timer"},"e423":{"name":"Timer 10"},"e424":{"name":"Timer 3"},"e426":{"name":"Timer Off"},"e264":{"name":"Title"},"e8de":{"name":"Toc"},"e8df":{"name":"Today"},"e8e0":{"name":"Toll"},"e427":{"name":"Tonality"},"e913":{"name":"Touch App"},"e332":{"name":"Toys"},"e8e1":{"name":"Track Changes"},"e565":{"name":"Traffic"},"e570":{"name":"Train"},"e571":{"name":"Tram"},"e572":{"name":"Transfer Within A Station"},"e428":{"name":"Transform"},"e8e2":{"name":"Translate"},"e8e3":{"name":"Trending Down"},"e8e4":{"name":"Trending Flat"},"e8e5":{"name":"Trending Up"},"e429":{"name":"Tune"},"e8e6":{"name":"Turned In"},"e8e7":{"name":"Turned In Not"},"e333":{"name":"Tv"},"e169":{"name":"Unarchive"},"e166":{"name":"Undo"},"e5d6":{"name":"Unfold Less"},"e5d7":{"name":"Unfold More"},"e923":{"name":"Update"},"e1e0":{"name":"Usb"},"e8e8":{"name":"Verified User"},"e258":{"name":"Vertical Align Bottom"},"e259":{"name":"Vertical Align Center"},"e25a":{"name":"Vertical Align Top"},"e62d":{"name":"Vibration"},"e070":{"name":"Video Call"},"e071":{"name":"Video Label"},"e04a":{"name":"Video Library"},"e04b":{"name":"Videocam"},"e04c":{"name":"Videocam Off"},"e338":{"name":"Videogame Asset"},"e8e9":{"name":"View Agenda"},"e8ea":{"name":"View Array"},"e8eb":{"name":"View Carousel"},"e8ec":{"name":"View Column"},"e42a":{"name":"View Comfy"},"e42b":{"name":"View Compact"},"e8ed":{"name":"View Day"},"e8ee":{"name":"View Headline"},"e8ef":{"name":"View List"},"e8f0":{"name":"View Module"},"e8f1":{"name":"View Quilt"},"e8f2":{"name":"View Stream"},"e8f3":{"name":"View Week"},"e435":{"name":"Vignette"},"e8f4":{"name":"Visibility"},"e8f5":{"name":"Visibility Off"},"e62e":{"name":"Voice Chat"},"e0d9":{"name":"Voicemail"},"e04d":{"name":"Volume Down"},"e04e":{"name":"Volume Mute"},"e04f":{"name":"Volume Off"},"e050":{"name":"Volume Up"},"e0da":{"name":"Vpn Key"},"e62f":{"name":"Vpn Lock"},"e1bc":{"name":"Wallpaper"},"e002":{"name":"Warning"},"e334":{"name":"Watch"},"e924":{"name":"Watch Later"},"e42c":{"name":"Wb Auto"},"e42d":{"name":"Wb Cloudy"},"e42e":{"name":"Wb Incandescent"},"e436":{"name":"Wb Iridescent"},"e430":{"name":"Wb Sunny"},"e63d":{"name":"Wc"},"e051":{"name":"Web"},"e069":{"name":"Web Asset"},"e16b":{"name":"Weekend"},"e80e":{"name":"Whatshot"},"e1bd":{"name":"Widgets"},"e63e":{"name":"Wifi"},"e1e1":{"name":"Wifi Lock"},"e1e2":{"name":"Wifi Tethering"},"e8f9":{"name":"Work"},"e25b":{"name":"Wrap Text"},"e8fa":{"name":"Youtube Searched For"},"e8ff":{"name":"Zoom In"},"e900":{"name":"Zoom Out"},"e56b":{"name":"Zoom Out Map"}}]
2 |
3 | %>
4 |
5 |
6 |
7 |
8 | home
9 | UI Components
10 | Icons
11 |
12 |
13 |
14 |
Material Design Icons
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | <% icons[0].each do |icon|%>
24 |
25 |
26 | <% icon = icon[1][:name].downcase.gsub(' ','_') %>
27 | <%= icon %>
28 | <%= icon %>
29 |
30 |
31 | <% end %>
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/app/views/stack/ui_loaders.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | home
6 | UI Components
7 | Loaders
8 |
9 |
10 |
11 |
Loaders
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
22 |
23 |
A simple yet versatile animated spinner component. Add .loader-[sm|lg]
or .is-loading-[sm|lg]
to create loaders at different sizes.
24 |
29 |
30 |
31 |
32 |
Loader Helper
33 |
Indicate loading state of nearly any component with an .is-loading
modifier.
34 |
35 |
36 |
39 |
40 | Loading content
41 |
42 |
43 |
44 |
48 |
49 |
50 |
51 |
54 |
55 |
Using Bootstrap’s typical naming structure i.e. .loader-primary
, you can create colored loaders depending on your needs.
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/app/views/stack/ui_modals.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | home
6 | UI Components
7 | Modals
8 |
9 |
10 |
Modals
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
21 |
22 |
A rendered modal with header, body, and set of actions in the footer.
23 |
Standard Modal
24 |
Large Modal
25 |
Small Modal
26 |
27 |
28 |
29 |
32 |
33 |
Show different contexual alert messages using modal component.
34 |
Success Alert
35 |
Info Alert
36 |
Warning Alert
37 |
Error Alert
38 |
39 |
40 |
41 |
42 |
43 |
46 |
47 |
Examples of modals with custom content.
48 |
Sign Up Modal
49 |
Login Modal
50 |
51 |
52 |
53 |
56 |
57 |
By default, modals will be positioned at the top of the page, but you can change this to vertically centered by adding the .modal-dialog-centered
class to the <%=h '...
'%>
element.
58 |
59 |
Vertically Centered Modal
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | <% content_for :footer do %>
68 |
69 |
109 |
110 |
111 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
check
154 |
Well Done!
155 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt eaque explicabo, itaque iusto unde quas magni non, quae expedita eveniet, incidunt molestiae tempora maiores odit hic perspiciatis. Eveniet, porro illo.
156 |
Continue
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
info_outline
168 |
Heads Up!
169 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt eaque explicabo, itaque iusto unde quas magni non, quae expedita eveniet, incidunt molestiae tempora maiores odit hic perspiciatis. Eveniet, porro illo.
170 |
Continue
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
warning
182 |
Warning!
183 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt eaque explicabo, itaque iusto unde quas magni non, quae expedita eveniet, incidunt molestiae tempora maiores odit hic perspiciatis. Eveniet, porro illo.
184 |
Continue
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
report_problem
196 |
Ohhh Snap!
197 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt eaque explicabo, itaque iusto unde quas magni non, quae expedita eveniet, incidunt molestiae tempora maiores odit hic perspiciatis. Eveniet, porro illo.
198 |
Continue
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
213 |
214 |
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
215 |
216 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
233 |
234 |
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
235 |
236 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
253 |
254 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Repudiandae aliquam tempora quibusdam rem facere? Nulla dolorum, velit cumque maiores architecto officiis reprehenderit adipisci magnam doloribus dolores ratione error omnis quos voluptate culpa excepturi, autem ipsum! Vitae exercitationem cumque provident, aliquid repudiandae placeat necessitatibus?
255 |
Temporibus delectus soluta necessitatibus a est dolores quos esse enim, sint maxime assumenda sapiente harum tempora eius ullam. Earum quam, explicabo magni, blanditiis sint, nam reprehenderit porro suscipit voluptates cum eius. Pariatur vel rerum, saepe, rem harum, nam ipsum deserunt vitae odio, quaerat sapiente nulla! Nulla nesciunt labore, distinctio aut, aliquam possimus sapiente qui adipisci quae fuga, consectetur hic. Facilis nostrum officiis saepe quia nemo, adipisci libero illo sint omnis. Placeat doloremque, omnis eligendi ullam fugit, aut.
256 |
Aliquam maxime nobis ut porro sit, repellendus beatae provident suscipit at soluta sapiente, cupiditate dolore similique alias doloribus aperiam, veritatis quibusdam numquam adipisci sequi quasi rerum architecto inventore vitae fugiat. Odio corporis est, temporibus earum molestias quos, labore dignissimos eligendi, laboriosam, incidunt illum!
257 |
Itaque officia repellat temporibus quis quasi ipsum reprehenderit dicta pariatur tenetur nisi officiis ad eaque veritatis velit dolore eos iste, beatae labore. Quo, incidunt vitae sint tempore, delectus sapiente pariatur labore illo veniam itaque molestiae consequatur doloribus.
258 |
259 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
276 |
277 |
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
278 |
279 |
283 |
284 |
285 |
286 | <% end %>
--------------------------------------------------------------------------------
/app/views/stack/ui_pagination.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | home
6 | UI Components
7 | Pagination
8 |
9 |
10 |
11 |
Pagination
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | // content above this line
20 |
21 |
22 |
23 | View
24 |
25 | 20
26 | 50
27 | 100
28 | 200
29 |
30 |
31 |
34 |
35 |
36 |
47 |
48 |
51 |
52 | <%= render 'pagination', pages: 4, first: true, last: true %>
53 | <%= render 'pagination', pages: 2, labels: true, class: "m-0" %>
54 |
55 |
56 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/bin/bundle:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
3 | load Gem.bin_path('bundler', 'bundle')
4 |
--------------------------------------------------------------------------------
/bin/rails:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | begin
3 | load File.expand_path('../spring', __FILE__)
4 | rescue LoadError => e
5 | raise unless e.message.include?('spring')
6 | end
7 | APP_PATH = File.expand_path('../config/application', __dir__)
8 | require_relative '../config/boot'
9 | require 'rails/commands'
10 |
--------------------------------------------------------------------------------
/bin/rake:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | begin
3 | load File.expand_path('../spring', __FILE__)
4 | rescue LoadError => e
5 | raise unless e.message.include?('spring')
6 | end
7 | require_relative '../config/boot'
8 | require 'rake'
9 | Rake.application.run
10 |
--------------------------------------------------------------------------------
/bin/setup:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require 'fileutils'
3 | include FileUtils
4 |
5 | # path to your application root.
6 | APP_ROOT = File.expand_path('..', __dir__)
7 |
8 | def system!(*args)
9 | system(*args) || abort("\n== Command #{args} failed ==")
10 | end
11 |
12 | chdir APP_ROOT do
13 | # This script is a starting point to setup your application.
14 | # Add necessary setup steps to this file.
15 |
16 | puts '== Installing dependencies =='
17 | system! 'gem install bundler --conservative'
18 | system('bundle check') || system!('bundle install')
19 |
20 | # Install JavaScript dependencies if using Yarn
21 | # system('bin/yarn')
22 |
23 | # puts "\n== Copying sample files =="
24 | # unless File.exist?('config/database.yml')
25 | # cp 'config/database.yml.sample', 'config/database.yml'
26 | # end
27 |
28 | puts "\n== Preparing database =="
29 | system! 'bin/rails db:setup'
30 |
31 | puts "\n== Removing old logs and tempfiles =="
32 | system! 'bin/rails log:clear tmp:clear'
33 |
34 | puts "\n== Restarting application server =="
35 | system! 'bin/rails restart'
36 | end
37 |
--------------------------------------------------------------------------------
/bin/spring:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 |
3 | # This file loads spring without using Bundler, in order to be fast.
4 | # It gets overwritten when you run the `spring binstub` command.
5 |
6 | unless defined?(Spring)
7 | require 'rubygems'
8 | require 'bundler'
9 |
10 | lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read)
11 | spring = lockfile.specs.detect { |spec| spec.name == "spring" }
12 | if spring
13 | Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path
14 | gem 'spring', spring.version
15 | require 'spring/binstub'
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/bin/update:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require 'fileutils'
3 | include FileUtils
4 |
5 | # path to your application root.
6 | APP_ROOT = File.expand_path('..', __dir__)
7 |
8 | def system!(*args)
9 | system(*args) || abort("\n== Command #{args} failed ==")
10 | end
11 |
12 | chdir APP_ROOT do
13 | # This script is a way to update your development environment automatically.
14 | # Add necessary update steps to this file.
15 |
16 | puts '== Installing dependencies =='
17 | system! 'gem install bundler --conservative'
18 | system('bundle check') || system!('bundle install')
19 |
20 | # Install JavaScript dependencies if using Yarn
21 | # system('bin/yarn')
22 |
23 | puts "\n== Updating database =="
24 | system! 'bin/rails db:migrate'
25 |
26 | puts "\n== Removing old logs and tempfiles =="
27 | system! 'bin/rails log:clear tmp:clear'
28 |
29 | puts "\n== Restarting application server =="
30 | system! 'bin/rails restart'
31 | end
32 |
--------------------------------------------------------------------------------
/bin/yarn:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | APP_ROOT = File.expand_path('..', __dir__)
3 | Dir.chdir(APP_ROOT) do
4 | begin
5 | exec "yarnpkg", *ARGV
6 | rescue Errno::ENOENT
7 | $stderr.puts "Yarn executable was not detected in the system."
8 | $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install"
9 | exit 1
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/config.ru:
--------------------------------------------------------------------------------
1 | # This file is used by Rack-based servers to start the application.
2 |
3 | require_relative 'config/environment'
4 |
5 | run Rails.application
6 |
--------------------------------------------------------------------------------
/config/application.rb:
--------------------------------------------------------------------------------
1 | require_relative 'boot'
2 |
3 | require 'rails/all'
4 |
5 | require "sprockets/railtie"
6 | # require "rails/test_unit/railtie"
7 | require 'sprockets/es6'
8 |
9 | # Require the gems listed in Gemfile, including any gems
10 | # you've limited to :test, :development, or :production.
11 | Bundler.require(*Rails.groups)
12 |
13 | module StackRails
14 | class Application < Rails::Application
15 | # Initialize configuration defaults for originally generated Rails version.
16 | config.load_defaults 5.2
17 |
18 | config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
19 |
20 | config.assets.precompile = ["application.es6"]
21 |
22 |
23 | config.assets.initialize_on_precompile = false
24 | # Settings in config/environments/* take precedence over those specified here.
25 | # Application configuration can go into files in config/initializers
26 | # -- all .rb files in that directory are automatically loaded after loading
27 | # the framework and any gems in your application.
28 | end
29 | end
30 |
--------------------------------------------------------------------------------
/config/boot.rb:
--------------------------------------------------------------------------------
1 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
2 |
3 | require 'bundler/setup' # Set up gems listed in the Gemfile.
4 | require 'bootsnap/setup' # Speed up boot time by caching expensive operations.
5 |
--------------------------------------------------------------------------------
/config/cable.yml:
--------------------------------------------------------------------------------
1 | development:
2 | adapter: async
3 |
4 | test:
5 | adapter: async
6 |
7 | production:
8 | adapter: redis
9 | url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
10 | channel_prefix: stack-rails_production
11 |
--------------------------------------------------------------------------------
/config/credentials.yml.enc:
--------------------------------------------------------------------------------
1 | piWHCexz6+ieo56si/N5ECeKAfyGAzvKjbKmBz5Jfsv28gwpk90UvP2tzhvmNTJpWz28ZPhM/q+Xft6XsB91gfBsodQPGUrg4K4tj1ZgqFvzUEjIX4Yj8fs5JmCg7tulF0JVdRxhyDDMxRDWosFLZR9qXC2qpOyGHgpJbm/yL3SnhiQ/82xiF7p1Kgad1IlZ9JYW3PcOjFt9D1RRQaGPRJ21+DVO1CjxcudqZduhobDgkvsJMy7CqBnLLfj1trYWuBqrybWEHyVMp3gJHfZG0BGWg40AL3ewMftfUiyMqAZXazzOkEpxE0AMsJu8qihfBew4l3diCo61pk6qf5Do3Xm7PPTk7iz9QUHC2nBv+QI6Rh+7B35oRrt0I6Nh6lnGY7VNDFkM4AUvAMrOKGBzd12Ub6auvqjnDKTy--7Lt7HpY+00j3EzBo--0RY7j6qwGjG0fNcQ3y3dsA==
--------------------------------------------------------------------------------
/config/database.yml:
--------------------------------------------------------------------------------
1 | default: &default
2 | adapter: postgresql
3 | encoding: unicode
4 | pool: 5
5 | username: postgres
6 | password:
7 | host: <%= ENV['DATABASE_URL'] %>
8 |
9 | development:
10 | <<: *default
11 | database: stackrails_dev
12 |
13 | production:
14 | <<: *default
15 | database: stackrails
16 |
--------------------------------------------------------------------------------
/config/environment.rb:
--------------------------------------------------------------------------------
1 | # Load the Rails application.
2 | require_relative 'application'
3 |
4 | # Initialize the Rails application.
5 | Rails.application.initialize!
6 |
--------------------------------------------------------------------------------
/config/environments/development.rb:
--------------------------------------------------------------------------------
1 | Rails.application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb.
3 |
4 | # In the development environment your application's code is reloaded on
5 | # every request. This slows down response time but is perfect for development
6 | # since you don't have to restart the web server when you make code changes.
7 | config.cache_classes = false
8 |
9 | # Do not eager load code on boot.
10 | config.eager_load = false
11 |
12 | # Show full error reports.
13 | config.consider_all_requests_local = true
14 |
15 | # Enable/disable caching. By default caching is disabled.
16 | # Run rails dev:cache to toggle caching.
17 | if Rails.root.join('tmp', 'caching-dev.txt').exist?
18 | config.action_controller.perform_caching = true
19 |
20 | config.cache_store = :memory_store
21 | config.public_file_server.headers = {
22 | 'Cache-Control' => "public, max-age=#{2.days.to_i}"
23 | }
24 | else
25 | config.action_controller.perform_caching = false
26 |
27 | config.cache_store = :null_store
28 | end
29 |
30 | # Store uploaded files on the local file system (see config/storage.yml for options)
31 | config.active_storage.service = :local
32 |
33 | # Don't care if the mailer can't send.
34 | config.action_mailer.raise_delivery_errors = false
35 |
36 | config.action_mailer.perform_caching = false
37 |
38 | # Print deprecation notices to the Rails logger.
39 | config.active_support.deprecation = :log
40 |
41 | # Raise an error on page load if there are pending migrations.
42 | config.active_record.migration_error = :page_load
43 |
44 | # Highlight code that triggered database queries in logs.
45 | config.active_record.verbose_query_logs = true
46 |
47 | # Debug mode disables concatenation and preprocessing of assets.
48 | # This option may cause significant delays in view rendering with a large
49 | # number of complex assets.
50 | config.assets.debug = true
51 |
52 | # Suppress logger output for asset requests.
53 | config.assets.quiet = true
54 |
55 | # Raises error for missing translations
56 | # config.action_view.raise_on_missing_translations = true
57 |
58 | # Use an evented file watcher to asynchronously detect changes in source code,
59 | # routes, locales, etc. This feature depends on the listen gem.
60 | config.file_watcher = ActiveSupport::EventedFileUpdateChecker
61 | end
62 |
--------------------------------------------------------------------------------
/config/environments/production.rb:
--------------------------------------------------------------------------------
1 | Rails.application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb.
3 |
4 | # Code is not reloaded between requests.
5 | config.cache_classes = true
6 |
7 | # Eager load code on boot. This eager loads most of Rails and
8 | # your application in memory, allowing both threaded web servers
9 | # and those relying on copy on write to perform better.
10 | # Rake tasks automatically ignore this option for performance.
11 | config.eager_load = true
12 |
13 | # Full error reports are disabled and caching is turned on.
14 | config.consider_all_requests_local = false
15 | config.action_controller.perform_caching = true
16 |
17 | # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"]
18 | # or in config/master.key. This key is used to decrypt credentials (and other encrypted files).
19 | # config.require_master_key = true
20 |
21 | # Disable serving static files from the `/public` folder by default since
22 | # Apache or NGINX already handles this.
23 | config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
24 |
25 | # Compress JavaScripts and CSS.
26 | config.assets.js_compressor = Uglifier.new(harmony: true)
27 | # config.assets.css_compressor = :sass
28 |
29 | # Do not fallback to assets pipeline if a precompiled asset is missed.
30 | config.assets.compile = true
31 |
32 | # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
33 |
34 | # Enable serving of images, stylesheets, and JavaScripts from an asset server.
35 | # config.action_controller.asset_host = 'http://assets.example.com'
36 |
37 | # Specifies the header that your server uses for sending files.
38 | # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
39 | # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
40 |
41 | # Store uploaded files on the local file system (see config/storage.yml for options)
42 | config.active_storage.service = :local
43 |
44 | # Mount Action Cable outside main process or domain
45 | # config.action_cable.mount_path = nil
46 | # config.action_cable.url = 'wss://example.com/cable'
47 | # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
48 |
49 | # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
50 | # config.force_ssl = true
51 |
52 | # Use the lowest log level to ensure availability of diagnostic information
53 | # when problems arise.
54 | config.log_level = :debug
55 |
56 | # Prepend all log lines with the following tags.
57 | config.log_tags = [ :request_id ]
58 |
59 | # Use a different cache store in production.
60 | # config.cache_store = :mem_cache_store
61 |
62 | # Use a real queuing backend for Active Job (and separate queues per environment)
63 | # config.active_job.queue_adapter = :resque
64 | # config.active_job.queue_name_prefix = "stack-rails_#{Rails.env}"
65 |
66 | config.action_mailer.perform_caching = false
67 |
68 | # Ignore bad email addresses and do not raise email delivery errors.
69 | # Set this to true and configure the email server for immediate delivery to raise delivery errors.
70 | # config.action_mailer.raise_delivery_errors = false
71 |
72 | # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
73 | # the I18n.default_locale when a translation cannot be found).
74 | config.i18n.fallbacks = true
75 |
76 | # Send deprecation notices to registered listeners.
77 | config.active_support.deprecation = :notify
78 |
79 | # Use default logging formatter so that PID and timestamp are not suppressed.
80 | config.log_formatter = ::Logger::Formatter.new
81 |
82 | # Use a different logger for distributed setups.
83 | # require 'syslog/logger'
84 | # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
85 |
86 | if ENV["RAILS_LOG_TO_STDOUT"].present?
87 | logger = ActiveSupport::Logger.new(STDOUT)
88 | logger.formatter = config.log_formatter
89 | config.logger = ActiveSupport::TaggedLogging.new(logger)
90 | end
91 |
92 | # Do not dump schema after migrations.
93 | config.active_record.dump_schema_after_migration = false
94 | end
95 |
--------------------------------------------------------------------------------
/config/environments/test.rb:
--------------------------------------------------------------------------------
1 | Rails.application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb.
3 |
4 | # The test environment is used exclusively to run your application's
5 | # test suite. You never need to work with it otherwise. Remember that
6 | # your test database is "scratch space" for the test suite and is wiped
7 | # and recreated between test runs. Don't rely on the data there!
8 | config.cache_classes = true
9 |
10 | # Do not eager load code on boot. This avoids loading your whole application
11 | # just for the purpose of running a single test. If you are using a tool that
12 | # preloads Rails for running tests, you may have to set it to true.
13 | config.eager_load = false
14 |
15 | # Configure public file server for tests with Cache-Control for performance.
16 | config.public_file_server.enabled = true
17 | config.public_file_server.headers = {
18 | 'Cache-Control' => "public, max-age=#{1.hour.to_i}"
19 | }
20 |
21 | # Show full error reports and disable caching.
22 | config.consider_all_requests_local = true
23 | config.action_controller.perform_caching = false
24 |
25 | # Raise exceptions instead of rendering exception templates.
26 | config.action_dispatch.show_exceptions = false
27 |
28 | # Disable request forgery protection in test environment.
29 | config.action_controller.allow_forgery_protection = false
30 |
31 | # Store uploaded files on the local file system in a temporary directory
32 | config.active_storage.service = :test
33 |
34 | config.action_mailer.perform_caching = false
35 |
36 | # Tell Action Mailer not to deliver emails to the real world.
37 | # The :test delivery method accumulates sent emails in the
38 | # ActionMailer::Base.deliveries array.
39 | config.action_mailer.delivery_method = :test
40 |
41 | # Print deprecation notices to the stderr.
42 | config.active_support.deprecation = :stderr
43 |
44 | # Raises error for missing translations
45 | # config.action_view.raise_on_missing_translations = true
46 | end
47 |
--------------------------------------------------------------------------------
/config/initializers/application_controller_renderer.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # ActiveSupport::Reloader.to_prepare do
4 | # ApplicationController.renderer.defaults.merge!(
5 | # http_host: 'example.org',
6 | # https: false
7 | # )
8 | # end
9 |
--------------------------------------------------------------------------------
/config/initializers/assets.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Version of your assets, change this if you want to expire all your assets.
4 | Rails.application.config.assets.version = '1.0'
5 |
6 | # Add additional assets to the asset load path.
7 | # Rails.application.config.assets.paths << Emoji.images_path
8 | # Add Yarn node_modules folder to the asset load path.
9 | Rails.application.config.assets.paths << Rails.root.join('node_modules')
10 |
11 | # Precompile additional assets.
12 | # application.js, application.css, and all non-JS/CSS in the app/assets
13 | # folder are already added.
14 | # Rails.application.config.assets.precompile += %w( admin.js admin.css )
15 | Rails.application.config.assets.precompile += %w( core-scripts.js )
16 | Rails.application.config.assets.precompile += %w( *.es6 )
17 | Rails.application.config.assets.precompile += %w( application.js )
18 |
--------------------------------------------------------------------------------
/config/initializers/backtrace_silencers.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
4 | # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
5 |
6 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
7 | # Rails.backtrace_cleaner.remove_silencers!
8 |
--------------------------------------------------------------------------------
/config/initializers/content_security_policy.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Define an application-wide content security policy
4 | # For further information see the following documentation
5 | # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
6 |
7 | # Rails.application.config.content_security_policy do |policy|
8 | # policy.default_src :self, :https
9 | # policy.font_src :self, :https, :data
10 | # policy.img_src :self, :https, :data
11 | # policy.object_src :none
12 | # policy.script_src :self, :https
13 | # policy.style_src :self, :https
14 |
15 | # # Specify URI for violation reports
16 | # # policy.report_uri "/csp-violation-report-endpoint"
17 | # end
18 |
19 | # If you are using UJS then enable automatic nonce generation
20 | # Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }
21 |
22 | # Report CSP violations to a specified URI
23 | # For further information see the following documentation:
24 | # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
25 | # Rails.application.config.content_security_policy_report_only = true
26 |
--------------------------------------------------------------------------------
/config/initializers/cookies_serializer.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Specify a serializer for the signed and encrypted cookie jars.
4 | # Valid options are :json, :marshal, and :hybrid.
5 | Rails.application.config.action_dispatch.cookies_serializer = :json
6 |
--------------------------------------------------------------------------------
/config/initializers/filter_parameter_logging.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Configure sensitive parameters which will be filtered from the log file.
4 | Rails.application.config.filter_parameters += [:password]
5 |
--------------------------------------------------------------------------------
/config/initializers/inflections.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Add new inflection rules using the following format. Inflections
4 | # are locale specific, and you may define rules for as many different
5 | # locales as you wish. All of these examples are active by default:
6 | # ActiveSupport::Inflector.inflections(:en) do |inflect|
7 | # inflect.plural /^(ox)$/i, '\1en'
8 | # inflect.singular /^(ox)en/i, '\1'
9 | # inflect.irregular 'person', 'people'
10 | # inflect.uncountable %w( fish sheep )
11 | # end
12 |
13 | # These inflection rules are supported but not enabled by default:
14 | # ActiveSupport::Inflector.inflections(:en) do |inflect|
15 | # inflect.acronym 'RESTful'
16 | # end
17 |
--------------------------------------------------------------------------------
/config/initializers/mime_types.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Add new mime types for use in respond_to blocks:
4 | # Mime::Type.register "text/richtext", :rtf
5 |
--------------------------------------------------------------------------------
/config/initializers/wrap_parameters.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # This file contains settings for ActionController::ParamsWrapper which
4 | # is enabled by default.
5 |
6 | # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
7 | ActiveSupport.on_load(:action_controller) do
8 | wrap_parameters format: [:json]
9 | end
10 |
11 | # To enable root element in JSON for ActiveRecord objects.
12 | # ActiveSupport.on_load(:active_record) do
13 | # self.include_root_in_json = true
14 | # end
15 |
--------------------------------------------------------------------------------
/config/locales/en.yml:
--------------------------------------------------------------------------------
1 | # Files in the config/locales directory are used for internationalization
2 | # and are automatically loaded by Rails. If you want to use locales other
3 | # than English, add the necessary files in this directory.
4 | #
5 | # To use the locales, use `I18n.t`:
6 | #
7 | # I18n.t 'hello'
8 | #
9 | # In views, this is aliased to just `t`:
10 | #
11 | # <%= t('hello') %>
12 | #
13 | # To use a different locale, set it with `I18n.locale`:
14 | #
15 | # I18n.locale = :es
16 | #
17 | # This would use the information in config/locales/es.yml.
18 | #
19 | # The following keys must be escaped otherwise they will not be retrieved by
20 | # the default I18n backend:
21 | #
22 | # true, false, on, off, yes, no
23 | #
24 | # Instead, surround them with single quotes.
25 | #
26 | # en:
27 | # 'true': 'foo'
28 | #
29 | # To learn more, please read the Rails Internationalization guide
30 | # available at http://guides.rubyonrails.org/i18n.html.
31 |
32 | en:
33 | hello: "Hello world"
34 |
--------------------------------------------------------------------------------
/config/puma.rb:
--------------------------------------------------------------------------------
1 | # Puma can serve each request in a thread from an internal thread pool.
2 | # The `threads` method setting takes two numbers: a minimum and maximum.
3 | # Any libraries that use thread pools should be configured to match
4 | # the maximum value specified for Puma. Default is set to 5 threads for minimum
5 | # and maximum; this matches the default thread size of Active Record.
6 | #
7 | threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
8 | threads threads_count, threads_count
9 |
10 | # Specifies the `port` that Puma will listen on to receive requests; default is 3000.
11 | #
12 | port ENV.fetch("PORT") { 3000 }
13 |
14 | # Specifies the `environment` that Puma will run in.
15 | #
16 | environment ENV.fetch("RAILS_ENV") { "development" }
17 |
18 | # Specifies the number of `workers` to boot in clustered mode.
19 | # Workers are forked webserver processes. If using threads and workers together
20 | # the concurrency of the application would be max `threads` * `workers`.
21 | # Workers do not work on JRuby or Windows (both of which do not support
22 | # processes).
23 | #
24 | # workers ENV.fetch("WEB_CONCURRENCY") { 2 }
25 |
26 | # Use the `preload_app!` method when specifying a `workers` number.
27 | # This directive tells Puma to first boot the application and load code
28 | # before forking the application. This takes advantage of Copy On Write
29 | # process behavior so workers use less memory.
30 | #
31 | # preload_app!
32 |
33 | # Allow puma to be restarted by `rails restart` command.
34 | plugin :tmp_restart
35 |
--------------------------------------------------------------------------------
/config/routes.rb:
--------------------------------------------------------------------------------
1 | Rails.application.routes.draw do
2 | root to: 'stack#index'
3 |
4 | get ':page' => 'stack#show', as: 'stack'
5 |
6 | end
7 |
--------------------------------------------------------------------------------
/config/spring.rb:
--------------------------------------------------------------------------------
1 | %w[
2 | .ruby-version
3 | .rbenv-vars
4 | tmp/restart.txt
5 | tmp/caching-dev.txt
6 | ].each { |path| Spring.watch(path) }
7 |
--------------------------------------------------------------------------------
/config/storage.yml:
--------------------------------------------------------------------------------
1 | test:
2 | service: Disk
3 | root: <%= Rails.root.join("tmp/storage") %>
4 |
5 | local:
6 | service: Disk
7 | root: <%= Rails.root.join("storage") %>
8 |
9 | # Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
10 | # amazon:
11 | # service: S3
12 | # access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
13 | # secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
14 | # region: us-east-1
15 | # bucket: your_own_bucket
16 |
17 | # Remember not to checkin your GCS keyfile to a repository
18 | # google:
19 | # service: GCS
20 | # project: your_project
21 | # credentials: <%= Rails.root.join("path/to/gcs.keyfile") %>
22 | # bucket: your_own_bucket
23 |
24 | # Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)
25 | # microsoft:
26 | # service: AzureStorage
27 | # storage_account_name: your_account_name
28 | # storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>
29 | # container: your_container_name
30 |
31 | # mirror:
32 | # service: Mirror
33 | # primary: local
34 | # mirrors: [ amazon, google, microsoft ]
35 |
--------------------------------------------------------------------------------
/db/seeds.rb:
--------------------------------------------------------------------------------
1 | # This file should contain all the record creation needed to seed the database with its default values.
2 | # The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup).
3 | #
4 | # Examples:
5 | #
6 | # movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }])
7 | # Character.create(name: 'Luke', movie: movies.first)
8 |
--------------------------------------------------------------------------------
/lib/assets/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/lib/assets/.keep
--------------------------------------------------------------------------------
/lib/tasks/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/lib/tasks/.keep
--------------------------------------------------------------------------------
/log/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/log/.keep
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "stack-rails",
3 | "requires": true,
4 | "lockfileVersion": 1,
5 | "dependencies": {
6 | "bootstrap": {
7 | "version": "4.3.1",
8 | "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz",
9 | "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag=="
10 | },
11 | "can-use-dom": {
12 | "version": "0.1.0",
13 | "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz",
14 | "integrity": "sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo="
15 | },
16 | "core-js": {
17 | "version": "2.6.3",
18 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.3.tgz",
19 | "integrity": "sha512-l00tmFFZOBHtYhN4Cz7k32VM7vTn3rE2ANjQDxdEN6zmXZ/xq1jQuutnmHvMG1ZJ7xd72+TA5YpUK8wz3rWsfQ=="
20 | },
21 | "dom-factory": {
22 | "version": "1.0.0",
23 | "resolved": "https://registry.npmjs.org/dom-factory/-/dom-factory-1.0.0.tgz",
24 | "integrity": "sha512-casgtVd9cHNOWfKc7At8HmvaybGpy6YEt8DQypBeRmlrrCHmaZ2texI8nYDgZPsNON1s6KS90oJwnSLkSTrZdg=="
25 | },
26 | "jquery": {
27 | "version": "3.4.0",
28 | "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.0.tgz",
29 | "integrity": "sha512-ggRCXln9zEqv6OqAGXFEcshF5dSBvCkzj6Gm2gzuR5fWawaX8t7cxKVkkygKODrDAzKdoYw3l/e3pm3vlT4IbQ=="
30 | },
31 | "lodash.debounce": {
32 | "version": "4.0.8",
33 | "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
34 | "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
35 | },
36 | "lodash.memoize": {
37 | "version": "4.1.2",
38 | "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
39 | "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4="
40 | },
41 | "lodash.throttle": {
42 | "version": "4.1.1",
43 | "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
44 | "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
45 | },
46 | "material-design-icons-iconfont": {
47 | "version": "3.0.3",
48 | "resolved": "https://registry.npmjs.org/material-design-icons-iconfont/-/material-design-icons-iconfont-3.0.3.tgz",
49 | "integrity": "sha1-FUoQhAR9Ticjf6f1o34Qdc7qbfI="
50 | },
51 | "material-design-kit": {
52 | "version": "1.0.0",
53 | "resolved": "https://registry.npmjs.org/material-design-kit/-/material-design-kit-1.0.0.tgz",
54 | "integrity": "sha512-qIaBqJjDyq59+Dy3un4lgi0y/hDAtJJcuMOISmnkGjaKy7VjCFCXeW8TcTsDX0LD63mBemaR1FTMI7iVmjBbkQ=="
55 | },
56 | "popper.js": {
57 | "version": "1.14.7",
58 | "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.7.tgz",
59 | "integrity": "sha512-4q1hNvoUre/8srWsH7hnoSJ5xVmIL4qgz+s4qf2TnJIMyZFUFMGH+9vE7mXynAlHSZ/NdTmmow86muD0myUkVQ=="
60 | },
61 | "resize-observer-polyfill": {
62 | "version": "1.5.1",
63 | "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
64 | "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
65 | },
66 | "scrollbarwidth": {
67 | "version": "0.1.3",
68 | "resolved": "https://registry.npmjs.org/scrollbarwidth/-/scrollbarwidth-0.1.3.tgz",
69 | "integrity": "sha1-Gw3mTiiMOMQn9KAf4ApGKgS5T98="
70 | },
71 | "sidebar-style-guide": {
72 | "version": "2.0.0",
73 | "resolved": "https://registry.npmjs.org/sidebar-style-guide/-/sidebar-style-guide-2.0.0.tgz",
74 | "integrity": "sha512-pf/6GgMwy/CQRvCGua7SI85fWLKVA9cSj8LHN23FLi3valetevEX36tZG81jhB23WLCmaUhf4RaLwb46XP9+tw=="
75 | },
76 | "simplebar": {
77 | "version": "3.1.3",
78 | "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-3.1.3.tgz",
79 | "integrity": "sha512-IjRPRhAgBgKi9fo/lzvdf4q7rRkrgyyQ0lJ/LtqfZhByQPXsgRHCHWtYpTKA5VKEe9NxA5CTUNT7m4piwCucqA==",
80 | "requires": {
81 | "can-use-dom": "^0.1.0",
82 | "core-js": "^2.6.2",
83 | "lodash.debounce": "^4.0.8",
84 | "lodash.memoize": "^4.1.2",
85 | "lodash.throttle": "^4.1.1",
86 | "resize-observer-polyfill": "^1.5.0",
87 | "scrollbarwidth": "^0.1.3"
88 | }
89 | }
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "stack-rails",
3 | "private": true,
4 | "dependencies": {
5 | "bootstrap": "^4.3.1",
6 | "dom-factory": "1.0.0",
7 | "jquery": "^3.4.0",
8 | "material-design-icons-iconfont": "^3.0.3",
9 | "material-design-kit": "^1.0.0-alpha.24",
10 | "popper.js": "^1.12.5",
11 | "sidebar-style-guide": "^2.0.0",
12 | "simplebar": "^3.1.1"
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/public/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | The page you were looking for doesn't exist (404)
5 |
6 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
The page you were looking for doesn't exist.
62 |
You may have mistyped the address or the page may have moved.
63 |
64 |
If you are the application owner check the logs for more information.
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/public/422.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | The change you wanted was rejected (422)
5 |
6 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
The change you wanted was rejected.
62 |
Maybe you tried to change something you didn't have access to.
63 |
64 |
If you are the application owner check the logs for more information.
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/public/500.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | We're sorry, but something went wrong (500)
5 |
6 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
We're sorry, but something went wrong.
62 |
63 |
If you are the application owner check the logs for more information.
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/public/apple-touch-icon-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/public/apple-touch-icon-precomposed.png
--------------------------------------------------------------------------------
/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/public/assets/.sprockets-manifest-77dc8b3659c47d6b4cb59cad577b7f64.json:
--------------------------------------------------------------------------------
1 | {"files":{"core-scripts-d2546f92b8b4fa465b6be768efda851bb802ec05930e0b1f59c905ebea1890b0.js":{"logical_path":"core-scripts.js","mtime":"2019-01-30T09:11:05+02:00","size":325440,"digest":"d2546f92b8b4fa465b6be768efda851bb802ec05930e0b1f59c905ebea1890b0","integrity":"sha256-0lRvkri0+kZba+do79qFG7gC7AWTDgsfWckF6+oYkLA="},"application-c88e0696edf3fd4744b853efd05d437f29d3baed0fe1468fc131f5271f0bf52a.js":{"logical_path":"application.js","mtime":"2019-01-30T08:36:39+02:00","size":790,"digest":"c88e0696edf3fd4744b853efd05d437f29d3baed0fe1468fc131f5271f0bf52a","integrity":"sha256-yI4Glu3z/UdEuFPv0F1DfynTuu0P4UaPwTH1Jx8L9So="},"avatar/demi-9df8cebede9679e29d7c194c763e3e19c30cc4499a8aec245fd59742fc305ce8.png":{"logical_path":"avatar/demi.png","mtime":"2018-10-28T10:17:23+02:00","size":9314,"digest":"9df8cebede9679e29d7c194c763e3e19c30cc4499a8aec245fd59742fc305ce8","integrity":"sha256-nfjOvt6WeeKdfBlMdj4+GcMMxEmaiuwkX9WXQvwwXOg="},"stack-logo-blue-540a8140a9395eee8b5a977b989d893e24bafe48c1a6ed9c1f38b41d1db68932.svg":{"logical_path":"stack-logo-blue.svg","mtime":"2018-10-28T10:17:23+02:00","size":522,"digest":"540a8140a9395eee8b5a977b989d893e24bafe48c1a6ed9c1f38b41d1db68932","integrity":"sha256-VAqBQKk5Xu6LWpd7mJ2JPiS6/kjBpu2cHzi0HR22iTI="},"application-51e53bab79cb24129a815fc2820b746b72ca78bc5d508a9d6e8b39949d68af66.css":{"logical_path":"application.css","mtime":"2019-01-30T09:11:05+02:00","size":211875,"digest":"51e53bab79cb24129a815fc2820b746b72ca78bc5d508a9d6e8b39949d68af66","integrity":"sha256-UeU7q3nLJBKagV/Cggt0a3LKeLxdUIqdbos5lJ1or2Y="},"material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-8c998b4a9c0acbb9fe5dd572c206a5a33fdd5ca2b58db87fc3b893beac85068d.eot":{"logical_path":"material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular.eot","mtime":"2019-01-14T21:37:48+02:00","size":143258,"digest":"8c998b4a9c0acbb9fe5dd572c206a5a33fdd5ca2b58db87fc3b893beac85068d","integrity":"sha256-jJmLSpwKy7n+XdVywgaloz/dXKK1jbh/w7iTvqyFBo0="},"material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-a87d66c91b2e7dc5530aef76c03bd6a3d25ea5826110bf4803b561b811cc8726.woff2":{"logical_path":"material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular.woff2","mtime":"2019-01-14T21:37:48+02:00","size":44300,"digest":"a87d66c91b2e7dc5530aef76c03bd6a3d25ea5826110bf4803b561b811cc8726","integrity":"sha256-qH1myRsufcVTCu92wDvWo9JepYJhEL9IA7VhuBHMhyY="},"material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-c4a1baec300d09e03a8380b85918267ee80faae8e00c6c56b48e2e74b1d9b38d.woff":{"logical_path":"material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular.woff","mtime":"2019-01-14T21:37:48+02:00","size":57620,"digest":"c4a1baec300d09e03a8380b85918267ee80faae8e00c6c56b48e2e74b1d9b38d","integrity":"sha256-xKG67DANCeA6g4C4WRgmfugPqujgDGxWtI4udLHZs40="},"material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-b7f4a3ab562048f28dd1fa691601bc43363a61d0f876d16d8316c52e4f32d696.ttf":{"logical_path":"material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular.ttf","mtime":"2019-01-14T21:37:48+02:00","size":128180,"digest":"b7f4a3ab562048f28dd1fa691601bc43363a61d0f876d16d8316c52e4f32d696","integrity":"sha256-t/Sjq1YgSPKN0fppFgG8QzY6YdD4dtFtgxbFLk8y1pY="}},"assets":{"core-scripts.js":"core-scripts-d2546f92b8b4fa465b6be768efda851bb802ec05930e0b1f59c905ebea1890b0.js","application.js":"application-c88e0696edf3fd4744b853efd05d437f29d3baed0fe1468fc131f5271f0bf52a.js","avatar/demi.png":"avatar/demi-9df8cebede9679e29d7c194c763e3e19c30cc4499a8aec245fd59742fc305ce8.png","stack-logo-blue.svg":"stack-logo-blue-540a8140a9395eee8b5a977b989d893e24bafe48c1a6ed9c1f38b41d1db68932.svg","application.css":"application-51e53bab79cb24129a815fc2820b746b72ca78bc5d508a9d6e8b39949d68af66.css","material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular.eot":"material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-8c998b4a9c0acbb9fe5dd572c206a5a33fdd5ca2b58db87fc3b893beac85068d.eot","material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular.woff2":"material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-a87d66c91b2e7dc5530aef76c03bd6a3d25ea5826110bf4803b561b811cc8726.woff2","material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular.woff":"material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-c4a1baec300d09e03a8380b85918267ee80faae8e00c6c56b48e2e74b1d9b38d.woff","material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular.ttf":"material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-b7f4a3ab562048f28dd1fa691601bc43363a61d0f876d16d8316c52e4f32d696.ttf"}}
--------------------------------------------------------------------------------
/public/assets/application-c88e0696edf3fd4744b853efd05d437f29d3baed0fe1468fc131f5271f0bf52a.js:
--------------------------------------------------------------------------------
1 | domFactory.handler.autoInit();var sidebarToggle=Array.prototype.slice.call(document.querySelectorAll('[data-toggle="sidebar"]'));sidebarToggle.forEach(function(e){e.addEventListener("click",function(e){var r=e.currentTarget.getAttribute("data-target")||"#default-drawer",t=document.querySelector(r);t&&t.mdkDrawer.toggle()})});let drawers=document.querySelectorAll(".mdk-drawer");(drawers=Array.prototype.slice.call(drawers)).forEach(e=>{e.addEventListener("mdk-drawer-change",e=>{if(!e.target.mdkDrawer)return;document.querySelector("body").classList[e.target.mdkDrawer.opened?"add":"remove"]("has-drawer-opened");let r=document.querySelector('[data-target="#'+e.target.id+'"]');r&&r.classList[e.target.mdkDrawer.opened?"add":"remove"]("active")})}),$('[data-toggle="tooltip"]').tooltip();
--------------------------------------------------------------------------------
/public/assets/avatar/demi-9df8cebede9679e29d7c194c763e3e19c30cc4499a8aec245fd59742fc305ce8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/public/assets/avatar/demi-9df8cebede9679e29d7c194c763e3e19c30cc4499a8aec245fd59742fc305ce8.png
--------------------------------------------------------------------------------
/public/assets/material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-8c998b4a9c0acbb9fe5dd572c206a5a33fdd5ca2b58db87fc3b893beac85068d.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/public/assets/material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-8c998b4a9c0acbb9fe5dd572c206a5a33fdd5ca2b58db87fc3b893beac85068d.eot
--------------------------------------------------------------------------------
/public/assets/material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-a87d66c91b2e7dc5530aef76c03bd6a3d25ea5826110bf4803b561b811cc8726.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/public/assets/material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-a87d66c91b2e7dc5530aef76c03bd6a3d25ea5826110bf4803b561b811cc8726.woff2
--------------------------------------------------------------------------------
/public/assets/material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-b7f4a3ab562048f28dd1fa691601bc43363a61d0f876d16d8316c52e4f32d696.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/public/assets/material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-b7f4a3ab562048f28dd1fa691601bc43363a61d0f876d16d8316c52e4f32d696.ttf
--------------------------------------------------------------------------------
/public/assets/material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-c4a1baec300d09e03a8380b85918267ee80faae8e00c6c56b48e2e74b1d9b38d.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/public/assets/material-design-icons-iconfont/dist/fonts/MaterialIcons-Regular-c4a1baec300d09e03a8380b85918267ee80faae8e00c6c56b48e2e74b1d9b38d.woff
--------------------------------------------------------------------------------
/public/assets/stack-logo-blue-540a8140a9395eee8b5a977b989d893e24bafe48c1a6ed9c1f38b41d1db68932.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/public/favicon.ico
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
2 |
--------------------------------------------------------------------------------
/storage/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/storage/.keep
--------------------------------------------------------------------------------
/test/application_system_test_case.rb:
--------------------------------------------------------------------------------
1 | require "test_helper"
2 |
3 | class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
4 | driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
5 | end
6 |
--------------------------------------------------------------------------------
/test/controllers/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/test/controllers/.keep
--------------------------------------------------------------------------------
/test/fixtures/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/test/fixtures/.keep
--------------------------------------------------------------------------------
/test/fixtures/files/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/test/fixtures/files/.keep
--------------------------------------------------------------------------------
/test/helpers/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/test/helpers/.keep
--------------------------------------------------------------------------------
/test/integration/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/test/integration/.keep
--------------------------------------------------------------------------------
/test/mailers/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/test/mailers/.keep
--------------------------------------------------------------------------------
/test/models/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/test/models/.keep
--------------------------------------------------------------------------------
/test/system/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/test/system/.keep
--------------------------------------------------------------------------------
/test/test_helper.rb:
--------------------------------------------------------------------------------
1 | ENV['RAILS_ENV'] ||= 'test'
2 | require_relative '../config/environment'
3 | require 'rails/test_help'
4 |
5 | class ActiveSupport::TestCase
6 | # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
7 | fixtures :all
8 |
9 | # Add more helper methods to be used by all tests here...
10 | end
11 |
--------------------------------------------------------------------------------
/tmp/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/tmp/.keep
--------------------------------------------------------------------------------
/vendor/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frontted/stack-rails-admin-theme/e7cd965744dcdcb0440e246b413bca4002fdb2a0/vendor/.keep
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | bootstrap@^4.3.1:
6 | version "4.3.1"
7 | resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.3.1.tgz#280ca8f610504d99d7b6b4bfc4b68cec601704ac"
8 | integrity sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==
9 |
10 | can-use-dom@^0.1.0:
11 | version "0.1.0"
12 | resolved "https://registry.yarnpkg.com/can-use-dom/-/can-use-dom-0.1.0.tgz#22cc4a34a0abc43950f42c6411024a3f6366b45a"
13 | integrity sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo=
14 |
15 | core-js@^2.6.2:
16 | version "2.6.2"
17 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.2.tgz#267988d7268323b349e20b4588211655f0e83944"
18 | integrity sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==
19 |
20 | dom-factory@1.0.0:
21 | version "1.0.0"
22 | resolved "https://registry.yarnpkg.com/dom-factory/-/dom-factory-1.0.0.tgz#4ddfb9b551d6c68149ba53f535ac0fc80a88720b"
23 | integrity sha512-casgtVd9cHNOWfKc7At8HmvaybGpy6YEt8DQypBeRmlrrCHmaZ2texI8nYDgZPsNON1s6KS90oJwnSLkSTrZdg==
24 |
25 | jquery@^3.4.0:
26 | version "3.4.0"
27 | resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.0.tgz#8de513fa0fa4b2c7d2e48a530e26f0596936efdf"
28 | integrity sha512-ggRCXln9zEqv6OqAGXFEcshF5dSBvCkzj6Gm2gzuR5fWawaX8t7cxKVkkygKODrDAzKdoYw3l/e3pm3vlT4IbQ==
29 |
30 | lodash.debounce@^4.0.8:
31 | version "4.0.8"
32 | resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
33 | integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
34 |
35 | lodash.memoize@^4.1.2:
36 | version "4.1.2"
37 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
38 | integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
39 |
40 | lodash.throttle@^4.1.1:
41 | version "4.1.1"
42 | resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
43 | integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=
44 |
45 | material-design-icons-iconfont@^3.0.3:
46 | version "3.0.3"
47 | resolved "https://registry.yarnpkg.com/material-design-icons-iconfont/-/material-design-icons-iconfont-3.0.3.tgz#154a1084047d4e27237fa7f5a37e1075ceea6df2"
48 | integrity sha1-FUoQhAR9Ticjf6f1o34Qdc7qbfI=
49 |
50 | material-design-kit@^1.0.0-alpha.24:
51 | version "1.0.0-alpha.24"
52 | resolved "https://registry.yarnpkg.com/material-design-kit/-/material-design-kit-1.0.0-alpha.24.tgz#0e4557fb639972e5e2614c3a415e8ce779ae41ab"
53 | integrity sha512-dyN676NT1pYK5WGl1aFSX9scEiTeT0OKYZPLBLXdltMcDHkjUVov8ufM1Rym46mCR5hXczvucvk5oQkqExXTNg==
54 |
55 | popper.js@^1.12.5:
56 | version "1.14.6"
57 | resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.6.tgz#ab20dd4edf9288b8b3b6531c47c361107b60b4b0"
58 | integrity sha512-AGwHGQBKumlk/MDfrSOf0JHhJCImdDMcGNoqKmKkU+68GFazv3CQ6q9r7Ja1sKDZmYWTckY/uLyEznheTDycnA==
59 |
60 | resize-observer-polyfill@^1.5.0:
61 | version "1.5.1"
62 | resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
63 | integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
64 |
65 | scrollbarwidth@^0.1.3:
66 | version "0.1.3"
67 | resolved "https://registry.yarnpkg.com/scrollbarwidth/-/scrollbarwidth-0.1.3.tgz#1b0de64e288c38c427f4a01fe00a462a04b94fdf"
68 | integrity sha1-Gw3mTiiMOMQn9KAf4ApGKgS5T98=
69 |
70 | sidebar-style-guide@^2.0.0:
71 | version "2.0.0"
72 | resolved "https://registry.yarnpkg.com/sidebar-style-guide/-/sidebar-style-guide-2.0.0.tgz#36d2d9419f9228a978768bb35b54b4b2c31e6307"
73 | integrity sha512-pf/6GgMwy/CQRvCGua7SI85fWLKVA9cSj8LHN23FLi3valetevEX36tZG81jhB23WLCmaUhf4RaLwb46XP9+tw==
74 |
75 | simplebar@^3.1.1:
76 | version "3.1.2"
77 | resolved "https://registry.yarnpkg.com/simplebar/-/simplebar-3.1.2.tgz#2c4f075b454cbe80aabe3e522900c9942cb71931"
78 | integrity sha512-PcuNoaoCdfT3klS8sumecKemOEGMHRjzP1WRO1oo4xrnNmR9tTQgEbnwQ3IrB5edn7dlCYLuU+6lWGAK4XTrNw==
79 | dependencies:
80 | can-use-dom "^0.1.0"
81 | core-js "^2.6.2"
82 | lodash.debounce "^4.0.8"
83 | lodash.memoize "^4.1.2"
84 | lodash.throttle "^4.1.1"
85 | resize-observer-polyfill "^1.5.0"
86 | scrollbarwidth "^0.1.3"
87 |
--------------------------------------------------------------------------------