action_admin 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +43 -0
- data/Rakefile +33 -0
- data/app/assets/images/admin/logo.svg +41 -0
- data/app/assets/javascripts/admin/admin.js +14 -0
- data/app/assets/javascripts/admin/application.js +13 -0
- data/app/assets/stylesheets/admin/admin.scss +2 -0
- data/app/assets/stylesheets/admin/application.scss +1 -0
- data/app/controllers/action_admin/base_controller.rb +7 -0
- data/app/controllers/action_admin/crud_controller.rb +7 -0
- data/app/controllers/action_admin/welcome_controller.rb +6 -0
- data/app/helpers/action_admin/admin_helper.rb +26 -0
- data/app/helpers/action_admin/form_helper.rb +37 -0
- data/app/helpers/action_admin/markup_helper.rb +110 -0
- data/app/views/action_admin/welcome/index.html.slim +1 -0
- data/app/views/admin/common/_footer.html.slim +0 -0
- data/app/views/admin/common/_header.html.slim +4 -0
- data/app/views/admin/common/_logobar.html.slim +3 -0
- data/app/views/admin/common/_messagebar.html.slim +0 -0
- data/app/views/admin/common/_noresults.html.slim +1 -0
- data/app/views/admin/common/_sidebar.html.slim +4 -0
- data/app/views/admin/common/_topbar.html.slim +6 -0
- data/app/views/admin/common/action.html.slim +0 -0
- data/app/views/admin/records/_form.html.slim +29 -0
- data/app/views/admin/records/edit.html.slim +1 -0
- data/app/views/admin/records/index.html.slim +34 -0
- data/app/views/admin/records/new.html.slim +1 -0
- data/app/views/admin/records/show.html.slim +13 -0
- data/app/views/layouts/admin.html.slim +29 -0
- data/config/initializers/admin_simple_form.rb +89 -0
- data/config/routes.rb +3 -0
- data/lib/action_admin.rb +31 -0
- data/lib/action_admin/actionable.rb +25 -0
- data/lib/action_admin/config.rb +14 -0
- data/lib/action_admin/controller.rb +26 -0
- data/lib/action_admin/crudable.rb +19 -0
- data/lib/action_admin/engine.rb +17 -0
- data/lib/action_admin/header.rb +85 -0
- data/lib/action_admin/simple_form.rb +9 -0
- data/lib/action_admin/simple_form/error_notification.rb +10 -0
- data/lib/action_admin/simple_form/form_builder.rb +53 -0
- data/lib/action_admin/simple_form/minimal_form_builder.rb +20 -0
- data/lib/action_admin/version.rb +3 -0
- data/lib/tasks/action_admin_tasks.rake +4 -0
- metadata +242 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c44353e5b5e06876da3b17b14b94496deefefe8a
|
4
|
+
data.tar.gz: eb1c8aadd4b44d7df9238dead846f7b1879d856d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2d044084dce29f51d7c387556fce4526918ec7f4a36a2023a98f84ffe5372cde307d85a849e4f1a57384e0832bd214d076d7ec7c29d7ca72b763aceef853ef93
|
7
|
+
data.tar.gz: 351f37c12c9feba3d42a329c9a75c4cde3482dccf8682d1a5c80312851840c4bbc648a45c2078f08ef6d598c4c2e8feaf64bf19ac881239c06dec254f7070ff2
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2017 Jonian Guveli
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# ActionAdmin
|
2
|
+
|
3
|
+
Ruby on Rails mountable engine to create admin interfaces.
|
4
|
+
|
5
|
+
[![Gem Version](https://badge.fury.io/rb/action_admin.svg)](https://badge.fury.io/rb/action_admin)
|
6
|
+
[![Build Status](https://travis-ci.org/hardpixel/action-admin.svg?branch=master)](https://travis-ci.org/hardpixel/action-admin)
|
7
|
+
[![Maintainability](https://api.codeclimate.com/v1/badges/930d42bb2bf6f54a4268/maintainability)](https://codeclimate.com/github/hardpixel/action-admin/maintainability)
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'action_admin'
|
15
|
+
```
|
16
|
+
|
17
|
+
And then execute:
|
18
|
+
|
19
|
+
$ bundle
|
20
|
+
|
21
|
+
Or install it yourself as:
|
22
|
+
|
23
|
+
$ gem install action_admin
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
TODO: Write usage instructions here
|
28
|
+
|
29
|
+
## Development
|
30
|
+
|
31
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
32
|
+
|
33
|
+
## Contributing
|
34
|
+
|
35
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/hardpixel/action-admin. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
36
|
+
|
37
|
+
## License
|
38
|
+
|
39
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
40
|
+
|
41
|
+
## Code of Conduct
|
42
|
+
|
43
|
+
Everyone interacting in the ActionAdmin project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/hardpixel/action-admin/blob/master/CODE_OF_CONDUCT.md).
|
data/Rakefile
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'ActionAdmin'
|
12
|
+
|
13
|
+
rdoc.options << '--line-numbers'
|
14
|
+
|
15
|
+
rdoc.rdoc_files.include('README.md')
|
16
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
17
|
+
end
|
18
|
+
|
19
|
+
APP_RAKEFILE = File.expand_path('../test/dummy/Rakefile', __FILE__)
|
20
|
+
load 'rails/tasks/engine.rake'
|
21
|
+
load 'rails/tasks/statistics.rake'
|
22
|
+
|
23
|
+
require 'bundler/gem_tasks'
|
24
|
+
require 'rake/testtask'
|
25
|
+
|
26
|
+
Rake::TestTask.new(:test) do |t|
|
27
|
+
t.libs << 'test'
|
28
|
+
|
29
|
+
t.pattern = 'test/**/*_test.rb'
|
30
|
+
t.verbose = false
|
31
|
+
end
|
32
|
+
|
33
|
+
task default: :test
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<svg width="361px" height="559px" viewBox="0 0 361 559" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
3
|
+
<title>Untitled</title>
|
4
|
+
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
5
|
+
<defs></defs>
|
6
|
+
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
7
|
+
<g id="yeti-f5" sketch:type="MSLayerGroup" transform="translate(-121.000000, -21.000000)">
|
8
|
+
<path d="M481.926,398.179 C476.004,398.179 469.625,395.445 465.068,374.489 C460.511,353.533 453.679,332.12 453.679,332.12 C460.969,332.12 465.068,328.93 465.068,328.93 C460.056,326.651 449.122,318.908 441.834,309.34 C434.545,299.773 415.865,284.282 415.865,284.282 L415.865,253.304 C415.865,232.346 429.306,215.947 429.306,215.947 C420.195,215.947 415.865,224.146 415.865,224.146 L415.865,179.955 C415.865,136.219 437.96,116.631 437.96,116.631 C431.126,116.176 426.571,119.364 426.571,119.364 C429.76,87.019 439.67,77.451 439.67,77.451 C403.224,67.883 382.893,89.296 382.893,89.296 C378.793,69.707 394.824,58.313 394.824,58.313 C376.146,54.213 360.698,59.68 360.698,59.68 C360.698,30.979 372.108,21.406 372.108,21.406 C315.16,21.406 282.826,64.225 282.826,64.225 C280.549,46.001 285.564,30.04 285.564,30.04 C230.44,53.275 215.865,104.729 215.865,104.729 C212.221,96.074 211.766,76.424 211.766,76.424 C211.766,76.424 188.986,114.579 184.886,141.001 C180.786,167.426 188.53,243.28 188.53,243.28 C188.53,243.28 184.887,238.726 177.142,237.815 C177.142,237.815 185.342,246.927 185.342,267.428 C185.342,267.428 182.152,264.694 176.686,266.061 C176.686,266.061 185.341,273.805 186.253,287.017 C186.253,287.017 176.23,293.851 170.763,300.685 C170.763,300.685 162.106,301.14 157.551,302.507 C157.551,302.507 164.841,306.607 166.208,310.252 C166.208,310.252 144.795,332.12 133.861,349.887 C133.861,349.887 143.429,343.965 150.262,345.787 C150.262,345.787 135.227,364.01 130.216,394.078 C130.216,394.078 137.505,390.435 140.694,392.257 C140.694,392.257 131.582,411.39 131.127,431.436 L121.105,437.359 L128.85,442.826 C128.85,442.826 122.927,467.427 121.56,481.55 C121.56,481.55 126.115,476.995 129.76,475.628 C129.76,475.628 134.772,487.472 141.606,496.584 C148.44,505.696 163.931,513.441 173.042,513.441 L190.167,512.773 C188.043,521.938 183.853,529.71 175.021,530.117 L174.041,531.69 C173.856,531.676 173.674,531.668 173.496,531.664 C173.321,534.34 167.92,534.822 166.435,536.676 C161.92,542.309 158.477,550.048 156.184,556.949 C154.504,562.006 155.298,562.005 154.134,567.2 C153.753,568.9 151.989,570.716 151.401,572.438 C156.32,570.786 169.953,569.682 177.134,569.155 L177.255,575.511 C177.255,575.511 178.439,576.612 180.4,577.41 C180.468,577.397 180.533,577.378 180.615,577.385 C181.281,577.439 181.924,577.537 182.553,577.693 C193.329,576.729 200.832,578.547 213.322,577.51 C215.752,577.221 218.031,576.879 220.158,575.668 C220.763,573.861 220.844,573.75 221.129,571.416 C221.19,571 221.19,570.572 221.29,570.065 C221.486,570.032 221.676,570.004 221.867,569.976 C221.94,569.948 222.056,569.924 222.313,569.914 C222.366,569.898 222.411,569.873 222.471,569.868 C222.669,569.85 222.866,569.834 223.064,569.817 C223.2,569.766 223.33,569.752 223.447,569.784 C225.708,569.582 229.337,569.391 231.597,569.268 C238.944,569.256 248.61,570.102 248.61,570.102 C249.208,561.867 249.806,549.089 263.132,511.845 L266.435,509.796 C266.435,509.796 307.364,524.218 345.341,509.213 C348.346,516.61 358.07,541.472 359.599,557.145 C360.906,558.982 360.761,561.313 360.805,563.783 C360.842,565.873 361.018,567.964 361.074,570.048 C362.44,569.862 367.371,569.258 373.596,569.268 C375.856,569.391 379.485,569.582 381.746,569.784 C381.864,569.752 381.993,569.766 382.129,569.817 C382.327,569.834 382.524,569.85 382.722,569.868 C382.782,569.873 382.827,569.898 382.881,569.914 C383.137,569.924 383.253,569.948 383.327,569.976 C383.517,570.004 383.707,570.032 383.903,570.065 C384.003,570.572 384.003,571 384.065,571.416 C384.349,573.75 384.43,573.861 385.035,575.668 C385.23,575.779 385.427,575.875 385.625,575.973 C392.425,575.11 399.316,574.952 406.159,575.276 C411.541,575.531 416.831,576.541 422.128,577.505 C422.129,577.555 422.133,577.606 422.133,577.657 C422.667,577.714 423.189,577.752 423.71,577.786 C426.552,578.294 429.402,578.767 432.27,579.077 C432.325,575.489 432.305,572.352 432.23,569.597 C437.936,569.87 446.195,571.006 449.66,571.511 C451.034,571.84 452.15,572.043 453.321,572.295 C453.48,572.342 453.648,572.39 453.793,572.438 C453.787,572.425 453.781,572.41 453.775,572.397 C454.951,572.661 456.219,572.995 457.893,573.577 C457.638,570.495 457.661,570.559 457.253,566.695 C456.939,563.707 454.796,554.628 450.787,550.883 C450.787,550.883 455.155,552.771 456.489,553.523 C452.183,547.689 450.089,539.348 436.56,533.597 C436.56,533.597 439.031,532.432 441.29,532.138 C438.929,530.683 437.126,530.111 434.736,530.284 C435.548,527.978 439.121,522.161 442.119,521.414 C442.119,521.414 440.279,520.135 437.27,521.124 C436.152,521.71 435.067,522.339 434.011,523.083 C433.612,523.365 433.03,523.073 432.912,522.636 C431.966,519.138 431.351,515.584 430.793,512.015 C458.056,511.027 461.88,497.041 461.88,497.041 C464.158,498.864 464.157,502.963 464.157,502.963 C476.001,487.473 474.635,471.983 474.635,471.983 C477.369,472.438 479.647,474.261 479.647,474.261 C481.014,450.571 473.725,410.024 473.725,410.024 C477.37,411.846 479.647,409.569 479.647,409.569 C475.547,407.747 475.092,403.19 475.092,403.19 C481.015,403.646 481.926,398.179 481.926,398.179" id="Fill-4" fill="#EDF7FA" sketch:type="MSShapeGroup"></path>
|
9
|
+
<path d="M221.29,570.065 C221.29,570.065 222.358,558.543 218.601,550.229 C218.601,550.229 225.717,550.712 226.913,569.505 C226.913,569.505 221.929,570.084 221.29,570.065" id="Fill-5" fill="#CDE9EE" sketch:type="MSShapeGroup"></path>
|
10
|
+
<path d="M185.569,531.209 L185.613,530.855 C185.639,531.03 185.635,531.165 185.569,531.209" id="Fill-6" fill="#CDE9EE" sketch:type="MSShapeGroup"></path>
|
11
|
+
<path d="M192.232,569.172 C192.191,569.161 192.168,569.155 192.168,569.155 C192.168,569.155 192.197,569.076 192.251,568.939 L192.232,569.172" id="Fill-7" fill="#CDE9EE" sketch:type="MSShapeGroup"></path>
|
12
|
+
<path d="M282.828,64.225 C280.551,46.001 285.566,30.04 285.566,30.04 C230.441,53.275 215.865,104.729 215.865,104.729 C212.221,96.074 211.766,76.424 211.766,76.424 C211.766,76.424 188.986,114.579 184.886,141.001 C180.786,167.426 188.53,243.28 188.53,243.28 C188.53,243.28 184.887,238.726 177.142,237.815 C177.142,237.815 185.342,246.927 185.342,267.428 C185.342,267.428 182.152,264.694 176.686,266.061 C176.686,266.061 185.341,273.805 186.253,287.017 C186.253,287.017 176.23,293.851 170.763,300.685 C170.763,300.685 162.106,301.14 157.551,302.507 C157.551,302.507 164.841,306.607 166.208,310.252 C166.208,310.252 144.795,332.12 133.861,349.887 C133.861,349.887 143.429,343.965 150.262,345.787 C150.262,345.787 135.227,364.01 130.216,394.078 C130.216,394.078 137.505,390.435 140.694,392.257 C140.694,392.257 131.582,411.39 131.127,431.436 L121.105,437.359 L128.85,442.826 C128.85,442.826 122.927,467.427 121.56,481.55 C121.56,481.55 126.115,476.995 129.76,475.628 C129.76,475.628 134.772,487.472 141.606,496.584 C148.44,505.696 163.931,513.441 173.042,513.441 L174.195,513.283 C173.687,516.424 173.115,519.553 172.281,522.636 C172.163,523.073 171.582,523.365 171.182,523.083 C170.127,522.339 169.042,521.71 167.923,521.124 C164.915,520.135 163.074,521.414 163.074,521.414 C166.072,522.161 169.645,527.978 170.458,530.284 C168.067,530.111 166.264,530.683 163.903,532.138 C166.163,532.432 168.633,533.597 168.633,533.597 C155.105,539.348 153.01,547.689 148.705,553.523 C150.038,552.771 154.406,550.883 154.406,550.883 C150.397,554.628 148.255,563.707 147.94,566.695 C147.533,570.559 147.555,570.495 147.301,573.577 C150.887,572.33 152.63,572.207 155.533,571.511 C160.019,570.858 172.556,569.139 177.161,569.617 L176.435,578.474 C176.435,578.474 176.527,578.474 176.661,578.471 C179.025,577.793 180.951,577.884 183.06,577.657 C183.091,575.216 183.219,572.777 183.419,570.345 C183.278,566.189 183.794,562.404 184.643,558.185 C184.671,558.043 184.706,557.895 184.735,557.753 C186.408,551.993 189.317,548.714 191.207,546.697 C191.834,546.027 192.379,545.234 192.845,544.421 C193.973,542.92 195.145,540.965 196.05,538.497 C197.923,533.386 197.12,522.158 193.356,511.2 C197.325,516.909 200.94,521.919 202.654,523.633 L202.54,509.682 C202.54,509.682 209.829,516.966 216.353,522.469 C219.494,525.212 223.368,528.779 226.119,530.2 C226.318,530.325 226.497,529 226.716,531 L226.714,531 C226.742,531 226.769,530.604 226.797,530.62 C230.492,532.693 234.293,534.339 237.851,536.642 C238.232,536.888 238.621,537.007 238.995,537.265 C240.642,538.399 243.541,539.659 246.146,541.032 L248.61,570.129 C250.831,539.548 268.257,510.265 268.257,510.265 L267.619,510.069 C262.227,508.402 222.774,494.753 199.465,446.017 C197.93,442.807 208.121,449.66 208.121,449.66 C198.553,426.425 194.908,389.067 194.908,389.067 C198.097,391.801 201.287,392.256 201.287,392.256 C194.453,373.121 191.72,349.431 191.72,328.018 C189.898,212.757 232.495,186.334 232.495,186.334 C225.206,183.6 217.461,183.828 217.461,183.828 C225.89,163.555 253.906,135.309 253.906,135.309 C246.389,135.765 217.004,143.736 217.004,143.736 C241.378,80.183 265.98,63.327 265.98,63.327 C264.158,78.588 270.081,94.762 270.081,94.762 C322.928,29.385 365.388,32.435 365.388,32.435 C368.537,25.877 372.114,21.406 372.114,21.406 C315.166,21.406 282.828,64.225 282.828,64.225" id="Fill-8" fill="#CDE9EE" sketch:type="MSShapeGroup"></path>
|
13
|
+
<path d="M432.209,569.705 C432.209,569.705 431.695,553.189 427.938,544.875 C427.938,544.875 437.733,550.912 437.677,569.988 C437.677,569.988 432.848,569.724 432.209,569.705" id="Fill-9" fill="#CDE9EE" sketch:type="MSShapeGroup"></path>
|
14
|
+
<path d="M177.361,484.763 C183.813,421.571 185.569,297.95 185.569,297.95 C171.56,325.626 160.285,375.854 160.285,375.854 L163.018,386.788 L156.868,384.055 C146.983,418.361 153.671,464.284 155.886,477.221 C162.174,482.199 169.664,483.878 177.361,484.763" id="Fill-10" fill="#ABD8D7" sketch:type="MSShapeGroup"></path>
|
15
|
+
<path d="M164.146,483.397 C166.149,493.511 168.227,503.251 170.535,513.297 C172.244,513.554 174.166,513.425 174.166,513.425 C175.734,507.315 175.994,497.859 177.213,486.227 C172.721,485.701 168.314,484.903 164.146,483.397" id="Fill-11" fill="#ABD8D7" sketch:type="MSShapeGroup"></path>
|
16
|
+
<path d="M378.252,537.851 C377.885,537.957 377.606,537.793 377.455,537.542 C376.746,537.681 376.204,537.809 375.839,537.903 C375.839,537.901 375.84,537.901 375.84,537.901 C385.239,531.061 386.103,523.828 386.103,523.828 C379.868,526.639 373.249,527.689 370.029,528.059 C391.754,509.228 395.364,474.261 395.364,474.261 C386.466,485.184 373.838,494.415 364.079,500.611 L364.1,500.569 C364.1,500.569 357.561,504.225 351.519,507.072 C351.254,507.032 350.988,507.103 350.789,507.412 C347.685,508.85 344.791,510.023 343.086,510.308 C343.086,510.308 348.118,519.599 350.219,524.609 L349.807,524.943 C349.807,524.943 357.086,542.148 359.736,558.815 C360.016,561.631 360.232,564.099 360.383,565.984 C360.51,568.422 360.683,570.102 360.683,570.102 C370.308,568.678 383.903,570.065 383.903,570.065 C383.838,571.633 384.699,575.397 384.857,576.079 C389.428,575.463 394.039,575.194 398.652,575.154 C398.59,559 397.88,532.159 378.252,537.851" id="Fill-12" fill="#CDE9EE" sketch:type="MSShapeGroup"></path>
|
17
|
+
<path d="M176.856,489.637 C161.763,487.084 148.066,469.738 148.066,469.738 C159.071,481.44 172.771,483.007 172.771,483.007 C174.579,469.643 163.533,439.055 163.533,439.055 C171.714,449.243 176.189,461.027 178.636,470.672 L176.856,489.637" id="Fill-13" fill="#83BAC0" sketch:type="MSShapeGroup"></path>
|
18
|
+
<path d="M211.11,465.974 C211.11,465.974 222.984,486.902 233.405,495.957 C244.652,505.728 255.102,519.533 259.544,527.904 C259.544,527.904 265.182,514.808 268.257,510.251 C268.257,510.251 234.943,500.484 211.11,465.974" id="Fill-14" fill="#ABD8D7" sketch:type="MSShapeGroup"></path>
|
19
|
+
<path d="M366.089,506.792 C367.74,504.469 369.631,502.31 371.433,500.105 C374.388,496.487 377.764,492.975 380.245,489.038 C375.963,492.242 371.195,495.018 366.321,497.951 C352.174,507.537 342.318,510.251 342.318,510.251 C345.393,514.808 351.031,527.904 351.031,527.904 C353.719,522.838 358.616,515.781 364.551,508.831 C365.049,508.14 365.603,507.477 366.089,506.792" id="Fill-15" fill="#ABD8D7" sketch:type="MSShapeGroup"></path>
|
20
|
+
<path d="M206.606,154.316 C205.311,154.41 201.165,154.515 201.165,154.515 C163.603,157.137 135.993,128.029 135.993,128.029 C135.993,128.029 133.525,150.75 149.842,170.66 C166.164,190.57 199.238,193.977 199.238,193.977 C200.313,198.633 197.985,209.016 197.985,209.016 C197.985,209.016 207.656,198.318 210.112,178.048 C211.836,163.844 207.408,154.258 206.606,154.316" id="Fill-16" fill="#545352" sketch:type="MSShapeGroup"></path>
|
21
|
+
<path d="M206.606,154.316 C205.36,154.387 201.165,154.515 201.165,154.515 C163.603,157.137 135.993,128.029 135.993,128.029 C135.993,128.029 153.153,177.69 210.462,173.766 C210.462,173.766 212.046,164.58 206.606,154.316" id="Fill-17" fill="#6E7979" sketch:type="MSShapeGroup"></path>
|
22
|
+
<path d="M394.146,154.316 C395.44,154.41 399.586,154.515 399.586,154.515 C437.149,157.137 464.758,128.029 464.758,128.029 C464.758,128.029 467.226,150.75 450.91,170.66 C434.587,190.57 401.513,193.977 401.513,193.977 C400.439,198.633 402.767,209.016 402.767,209.016 C402.767,209.016 393.095,198.318 390.639,178.048 C388.915,163.844 393.344,154.258 394.146,154.316" id="Fill-18" fill="#545352" sketch:type="MSShapeGroup"></path>
|
23
|
+
<path d="M394.146,154.316 C395.391,154.387 399.586,154.515 399.586,154.515 C437.149,157.137 464.758,128.029 464.758,128.029 C464.758,128.029 447.598,177.69 390.29,173.766 C390.29,173.766 388.705,164.58 394.146,154.316" id="Fill-19" fill="#6E7979" sketch:type="MSShapeGroup"></path>
|
24
|
+
<path d="M187,322.551 C187,322.551 160,419.59 187,481.777 L187,322.551" id="Fill-20" fill="#CDE9EE" sketch:type="MSShapeGroup"></path>
|
25
|
+
<path d="M455.843,476.05 C442.517,486.219 428.652,486.863 428.652,486.863 C428.034,473.578 442.557,444.533 442.557,444.533 C439.252,446.484 436.596,448.844 434.411,451.433 L434.316,441.686 L444.794,433.031 L436.367,426.197 L447.072,383.144 L436.822,389.978 C436.822,389.978 433.634,328.704 435.911,302.28 C435.911,302.28 422.927,289.294 416.549,284.056 C416.549,284.056 417.754,302.922 419.129,333.066 C424.948,357.247 433.985,407.289 422.743,451.3 C422.873,460.221 422.969,469.281 423.021,478.427 C423.021,478.427 428.623,497.892 430.444,511.559 C430.444,511.559 432.266,512.072 435,511.617 L434.794,490.686 C448.87,486.435 455.843,476.05 455.843,476.05" id="Fill-21" fill="#CDE9EE" sketch:type="MSShapeGroup"></path>
|
26
|
+
<path d="M329.531,288.15 C329.531,298.5 336.159,306.89 344.338,306.89 C352.516,306.89 359.146,298.5 359.146,288.15 C359.146,277.798 352.516,269.408 344.338,269.408 C336.159,269.408 329.531,277.798 329.531,288.15" id="Fill-22" fill="#CDE9EE" sketch:type="MSShapeGroup"></path>
|
27
|
+
<path d="M329.988,283.144 C329.988,293.334 336.514,301.595 344.567,301.595 C352.619,301.595 359.146,293.334 359.146,283.144 C359.146,272.953 352.619,264.693 344.567,264.693 C336.514,264.693 329.988,272.953 329.988,283.144" id="Fill-23" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
28
|
+
<path d="M340.696,273.631 C340.58,274.084 340.5,274.556 340.5,275.057 C340.5,277.656 342.194,279.76 344.282,279.76 C346.138,279.76 347.675,278.096 347.995,275.903 C349.186,277.465 349.92,279.568 349.92,281.891 C349.92,286.704 346.784,290.604 342.916,290.604 C339.048,290.604 335.911,286.704 335.911,281.891 C335.911,278.044 337.916,274.787 340.696,273.631" id="Fill-24" fill="#474746" sketch:type="MSShapeGroup"></path>
|
29
|
+
<path d="M258.46,288.15 C258.46,298.5 265.089,306.89 273.268,306.89 C281.445,306.89 288.075,298.5 288.075,288.15 C288.075,277.798 281.445,269.408 273.268,269.408 C265.089,269.408 258.46,277.798 258.46,288.15" id="Fill-25" fill="#CDE9EE" sketch:type="MSShapeGroup"></path>
|
30
|
+
<path d="M258.917,283.144 C258.917,293.334 265.444,301.595 273.496,301.595 C281.548,301.595 288.075,293.334 288.075,283.144 C288.075,272.953 281.548,264.693 273.496,264.693 C265.444,264.693 258.917,272.953 258.917,283.144" id="Fill-26" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
31
|
+
<path d="M272.359,273.631 C272.243,274.084 272.163,274.556 272.163,275.057 C272.163,277.656 273.856,279.76 275.945,279.76 C277.8,279.76 279.338,278.096 279.658,275.903 C280.849,277.465 281.583,279.568 281.583,281.891 C281.583,286.704 278.446,290.604 274.578,290.604 C270.71,290.604 267.574,286.704 267.574,281.891 C267.574,278.044 269.579,274.787 272.359,273.631" id="Fill-27" fill="#474746" sketch:type="MSShapeGroup"></path>
|
32
|
+
<path d="M382.882,302.854 C381.953,305.65 378.798,306.393 369.809,308.131 L369.197,308.249 C360.39,309.94 344.644,309.719 336.02,308.459 C335.648,308.406 335.289,308.351 334.947,308.294 C326.954,306.942 326.044,305.907 323.473,301.764 C320.818,297.476 319.186,284.886 318.885,282.403 L318.87,282.278 C318.551,279.654 318.393,278.34 321.764,276.831 C326.298,274.798 346.422,271.958 354.668,271.587 C361.178,271.3 374.978,272.206 381.288,273.128 C382.277,273.274 383.01,273.407 383.463,273.527 C384.189,273.72 386.862,275.02 386.726,277.862 C386.549,281.608 384.138,299.074 382.882,302.854 L382.882,302.854 Z M295.114,282.278 L295.098,282.403 C294.798,284.886 293.166,297.476 290.511,301.764 C287.94,305.907 287.03,306.942 279.036,308.294 C278.695,308.351 278.336,308.406 277.963,308.459 C269.34,309.719 253.594,309.94 244.786,308.249 L244.175,308.131 C235.186,306.393 232.031,305.65 231.102,302.854 C229.846,299.074 227.435,281.608 227.258,277.862 C227.121,275.02 229.795,273.72 230.521,273.527 C230.973,273.407 231.706,273.274 232.695,273.128 C239.006,272.206 252.805,271.3 259.316,271.587 C267.562,271.958 287.685,274.798 292.219,276.831 C295.591,278.34 295.433,279.654 295.114,282.278 L295.114,282.278 Z M394.425,265.647 C387.822,264.682 376.298,263.588 362.465,264.294 C344.464,265.22 329.04,267.719 319.826,269.211 C317.076,269.657 314.915,270.009 313.266,270.227 L311.467,270.471 C309.446,270.749 308.121,270.925 306.992,270.981 C305.863,270.925 304.537,270.749 302.517,270.471 L300.717,270.227 C299.069,270.009 296.908,269.657 294.157,269.211 C284.944,267.719 269.52,265.22 251.519,264.294 C237.686,263.588 226.162,264.682 219.559,265.647 C219.559,265.647 212.513,266.544 206.487,269.093 L207.636,276.752 C207.636,276.752 214.003,275.236 220.222,274.406 C221.378,285.206 223.627,299.084 223.627,299.084 L223.663,299.514 C223.834,300.214 223.993,300.893 224.165,301.634 C225.446,307.091 226.718,310.299 231.836,312.223 C236.862,314.12 248.755,315.878 260.749,316.496 C265.209,316.727 270.271,316.452 275.391,315.707 C282.984,314.598 289.852,312.554 292.476,310.614 C296.294,307.792 298.336,300.691 299.688,295.993 L300.093,294.608 C300.571,293.006 300.986,291.324 301.387,289.692 C301.964,287.35 302.559,284.929 303.068,284.093 C303.16,283.947 303.588,283.442 305.257,283.197 C305.773,283.123 306.354,283.083 306.992,283.075 C307.63,283.083 308.21,283.123 308.727,283.197 C310.395,283.442 310.824,283.947 310.916,284.093 C311.424,284.929 312.02,287.35 312.596,289.692 C312.998,291.324 313.413,293.006 313.891,294.608 L314.295,295.993 C315.647,300.691 317.69,307.792 321.508,310.614 C324.132,312.554 330.999,314.598 338.592,315.707 C343.712,316.452 348.775,316.727 353.234,316.496 C365.229,315.878 377.121,314.12 382.148,312.223 C387.265,310.299 388.537,307.091 389.819,301.634 C389.991,300.893 390.15,300.214 390.32,299.514 L390.356,299.084 C390.356,299.084 392.605,285.206 393.761,274.406 C399.981,275.236 406.348,276.752 406.348,276.752 L407.497,269.093 C401.471,266.544 394.425,265.647 394.425,265.647 L394.425,265.647 Z" id="Fill-28" fill="#545352" sketch:type="MSShapeGroup"></path>
|
33
|
+
<path d="M277.838,246.251 C277.838,246.251 261.369,238.397 251.943,252.981 C251.943,252.981 250.97,238.478 264.27,236.858 C277.571,235.235 277.838,246.251 277.838,246.251" id="Fill-29" fill="#A0D1DE" sketch:type="MSShapeGroup"></path>
|
34
|
+
<path d="M271.661,224.941 C271.661,224.941 256.394,217.736 249.438,231.583 C249.438,231.583 247.166,219.485 258.061,216.565 C268.957,213.644 271.661,224.941 271.661,224.941" id="Fill-30" fill="#A0D1DE" sketch:type="MSShapeGroup"></path>
|
35
|
+
<path d="M336.832,255.143 C336.832,255.143 349.622,249.043 356.943,260.371 C356.943,260.371 357.699,249.108 347.37,247.848 C337.039,246.588 336.832,255.143 336.832,255.143" id="Fill-31" fill="#A0D1DE" sketch:type="MSShapeGroup"></path>
|
36
|
+
<path d="M345.927,234.97 C345.927,234.97 358.869,232.875 361.085,244.704 C361.085,244.704 365.381,236.164 357.878,231.643 C350.374,227.12 345.927,234.97 345.927,234.97" id="Fill-32" fill="#A0D1DE" sketch:type="MSShapeGroup"></path>
|
37
|
+
<path d="M276.693,361.144 C276.693,361.144 285.729,355.071 291.063,354.235 C291.063,354.235 292.227,365.694 297.527,371.341 C297.527,371.341 308.966,361.03 320.278,360.297 C320.278,360.297 323.198,366.581 327.939,368.911 L327.912,368.984 C329.623,370.052 331.719,371.132 333.749,371.583 C333.749,371.583 340.241,367.654 342.12,360.478 C342.12,360.478 342.745,375.627 333.236,383.884 C333.236,383.884 325.985,380.345 320.761,374.681 C319.192,373.153 317.561,371.376 316.769,369.931 C316.769,369.931 299.993,381.799 299.38,388.567 C299.38,388.567 287.27,376.76 283.141,367.663 C283.141,367.663 275.059,370.214 272.817,371.858 C272.817,371.858 266.321,361.234 265.002,351.647 C265.002,351.647 272.814,359.108 276.693,361.144" id="Fill-33" fill="#B2DCE5" sketch:type="MSShapeGroup"></path>
|
38
|
+
<path d="M307.187,331.37 C306.517,331.227 324.203,332.594 341.569,331.977 C341.569,331.977 342.497,328.664 343.829,326.844 C343.829,326.844 343.539,332.42 345.099,333.561 C345.099,333.561 336.409,336.982 327.645,336.957 C327.645,336.957 337.195,335.363 340.398,333.715 C340.398,333.715 322.971,334.685 307.187,331.37" id="Fill-34" fill="#545352" sketch:type="MSShapeGroup"></path>
|
39
|
+
</g>
|
40
|
+
</g>
|
41
|
+
</svg>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// compiled file. JavaScript code in this file should be added after the last require_* statement.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require rails-ujs
|
14
|
+
//= require bedrock
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// compiled file. JavaScript code in this file should be added after the last require_* statement.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require admin
|
@@ -0,0 +1 @@
|
|
1
|
+
@import "admin";
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
module AdminHelper
|
3
|
+
def admin_app_name
|
4
|
+
ActionAdmin.config.app_name
|
5
|
+
end
|
6
|
+
|
7
|
+
def admin_action_title(action=nil)
|
8
|
+
name = action || action_name
|
9
|
+
controller.action_header.action_title(name, self)
|
10
|
+
end
|
11
|
+
|
12
|
+
def admin_meta_tags
|
13
|
+
tags = {
|
14
|
+
site: admin_app_name,
|
15
|
+
noindex: true,
|
16
|
+
nofollow: true,
|
17
|
+
reverse: true,
|
18
|
+
title: admin_action_title || "#{action_name}".titleize,
|
19
|
+
charset: 'utf-8'
|
20
|
+
}
|
21
|
+
|
22
|
+
set_meta_tags tags
|
23
|
+
display_meta_tags
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
module FormHelper
|
3
|
+
# Admin simple form
|
4
|
+
def admin_form_for(object, *args, &block)
|
5
|
+
options = args.extract_options!
|
6
|
+
builder = { builder: ActionAdmin::SimpleForm::FormBuilder }
|
7
|
+
options = options.merge(builder) unless options[:builder]
|
8
|
+
|
9
|
+
simple_form_for(object, *(args << options), &block)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Admin simple form fields
|
13
|
+
def admin_fields_for(*args, &block)
|
14
|
+
options = args.extract_options!
|
15
|
+
builder = { builder: ActionAdmin::SimpleForm::FormBuilder }
|
16
|
+
options = options.merge(builder) unless options[:builder]
|
17
|
+
|
18
|
+
simple_form_for(*(args << options), &block)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Admin simple form with placeholders
|
22
|
+
def admin_minimal_form_for(object, *args, &block)
|
23
|
+
options = args.extract_options!
|
24
|
+
options = options.merge(builder: ActionAdmin::SimpleForm::MinimalFormBuilder)
|
25
|
+
|
26
|
+
admin_form_for(object, *(args << options), &block)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Admin simple form fields with placeholders
|
30
|
+
def admin_minimal_fields_for(*args, &block)
|
31
|
+
options = args.extract_options!
|
32
|
+
options = options.merge(builder: ActionAdmin::SimpleForm::MinimalFormBuilder)
|
33
|
+
|
34
|
+
admin_fields_for(*(args << options), &block)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
module MarkupHelper
|
3
|
+
def admin_icon(name, options={})
|
4
|
+
opts = options.except(:text, :revert).merge(class: "mdi mdi-#{name}")
|
5
|
+
icon = content_tag :i, nil, opts if name.present?
|
6
|
+
text = options[:text]
|
7
|
+
data = options[:revert].present? ? [text, icon] : [icon, text]
|
8
|
+
|
9
|
+
data.join(' ').html_safe
|
10
|
+
end
|
11
|
+
|
12
|
+
def admin_pagination(records, options={})
|
13
|
+
options = options.merge({
|
14
|
+
previous_class: 'pagination-previous',
|
15
|
+
next_class: 'pagination-next',
|
16
|
+
active_class: 'current'
|
17
|
+
})
|
18
|
+
|
19
|
+
smart_pagination_for(records, options)
|
20
|
+
end
|
21
|
+
|
22
|
+
def admin_table_pagination(records)
|
23
|
+
info = content_tag :div, smart_pagination_info_for(records), class: 'shrink cell'
|
24
|
+
links = admin_pagination(records, wrapper_class: 'pagination margin-0')
|
25
|
+
links = content_tag :div, links, class: 'auto cell text-right'
|
26
|
+
|
27
|
+
content_tag :div, info + links, class: 'grid-x'
|
28
|
+
end
|
29
|
+
|
30
|
+
def admin_primary_menu
|
31
|
+
options = {
|
32
|
+
menu_class: 'vertical menu icons icon-left accordion-menu',
|
33
|
+
menu_html: { 'data-accordion-menu': '', 'data-submenu-toggle': true },
|
34
|
+
separator_class: 'is-separator',
|
35
|
+
submenu_parent_class: 'has-children',
|
36
|
+
submenu_class: 'vertical menu nested',
|
37
|
+
active_class: 'is-current',
|
38
|
+
active_submenu_class: 'is-current',
|
39
|
+
icon_prefix: 'mdi mdi-'
|
40
|
+
}
|
41
|
+
|
42
|
+
smart_navigation_for ActionAdmin.config.menus.primary, options
|
43
|
+
end
|
44
|
+
|
45
|
+
def admin_secondary_menu
|
46
|
+
options = {
|
47
|
+
menu_class: 'vertical menu secondary icons icon-right',
|
48
|
+
separator_class: 'is-separator',
|
49
|
+
submenu_parent_class: 'has-children',
|
50
|
+
submenu_class: 'vertical menu nested',
|
51
|
+
active_class: 'is-current',
|
52
|
+
active_submenu_class: 'is-current',
|
53
|
+
icon_prefix: 'mdi mdi-',
|
54
|
+
icon_position: 'right'
|
55
|
+
}
|
56
|
+
|
57
|
+
smart_navigation_for ActionAdmin.config.menus.secondary, options
|
58
|
+
end
|
59
|
+
|
60
|
+
def admin_topbar_menu(position)
|
61
|
+
items = {
|
62
|
+
left: {
|
63
|
+
toggle: { icon: 'menu', html: { 'data-toggle': 'sidebar' } }
|
64
|
+
},
|
65
|
+
right: {
|
66
|
+
website: { url: :root_url, icon: 'web', html: { target: :_blank } }
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
options = {
|
71
|
+
menu_class: 'menu',
|
72
|
+
separator_class: 'is-separator',
|
73
|
+
submenu_parent_class: 'has-children',
|
74
|
+
submenu_class: 'vertical menu nested',
|
75
|
+
active_class: 'is-current',
|
76
|
+
active_submenu_class: 'is-current',
|
77
|
+
icon_prefix: 'mdi mdi-',
|
78
|
+
icon_position: 'right'
|
79
|
+
}
|
80
|
+
|
81
|
+
smart_navigation_for items[position], options
|
82
|
+
end
|
83
|
+
|
84
|
+
def admin_action_links(action=nil)
|
85
|
+
name = action || action_name
|
86
|
+
links = controller.action_header.action_links(name, self).map do |link|
|
87
|
+
opts = Hash(link[:html]).merge(method: link[:method])
|
88
|
+
classes = "button small hollow #{opts[:class]}".strip
|
89
|
+
label = admin_icon(link[:icon], text: link[:label])
|
90
|
+
|
91
|
+
link_to label, link[:url], opts.merge(class: classes)
|
92
|
+
end
|
93
|
+
|
94
|
+
links.join(' ').html_safe
|
95
|
+
end
|
96
|
+
|
97
|
+
def admin_table_action_links(record, actions=nil)
|
98
|
+
options = {
|
99
|
+
show: { label: admin_icon('eye'), title: 'View', class: 'success' },
|
100
|
+
edit: { label: admin_icon('pencil'), title: 'Edit' },
|
101
|
+
destroy: { label: admin_icon('delete'), title: 'Delete', class: 'alert' }
|
102
|
+
}
|
103
|
+
|
104
|
+
options = options.select { |k, _v| k.in? actions } if actions.present?
|
105
|
+
options = options.merge(html: { class: 'button hollow' })
|
106
|
+
|
107
|
+
record_links_to record, options
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
= 'Welcome to ActionAdmin'
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
.callout.warning = 'No results found'
|
File without changes
|
@@ -0,0 +1,29 @@
|
|
1
|
+
= admin_form_for([:admin, current_record]) do |f|
|
2
|
+
= f.error_notification
|
3
|
+
|
4
|
+
.panel
|
5
|
+
.panel-header.border = action_name.titleize
|
6
|
+
.panel-content.border
|
7
|
+
- (permitted_params - current_model.attribute_aliases.values.map(&:to_sym)).each do |parameter|
|
8
|
+
- parameter = parameter.first if parameter.is_a? Array
|
9
|
+
- parameter = parameter.keys.first if parameter.is_a? Hash
|
10
|
+
|
11
|
+
- if current_record.respond_to? parameter
|
12
|
+
- if parameter.to_s == 'parent_id'
|
13
|
+
- exclude = [current_record.id] + current_record.child_ids unless current_record.new_record?
|
14
|
+
= f.input parameter, as: :select, collection: current_model.where.not(id: exclude), include_blank: 'No parent'
|
15
|
+
- else
|
16
|
+
- assoc = parameter.to_s.sub('_ids', '').sub('_id', '')
|
17
|
+
- single = current_model.reflect_on_association(assoc)
|
18
|
+
- plural = current_model.reflect_on_association(assoc.pluralize)
|
19
|
+
- assoc = assoc.pluralize unless plural.nil?
|
20
|
+
|
21
|
+
- if parameter.to_s.ends_with?('_id')
|
22
|
+
= f.input parameter, collection: single.options[:class_name].classify.constantize.all, include_blank: 'None'
|
23
|
+
- elsif parameter.to_s.ends_with?('_ids')
|
24
|
+
= f.association assoc
|
25
|
+
- else
|
26
|
+
= f.input parameter, include_blank: 'Default', placeholder: "Enter #{parameter.to_s.humanize.downcase}..."
|
27
|
+
|
28
|
+
.panel-footer
|
29
|
+
= f.button :submit, class: 'margin-0'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'form'
|
@@ -0,0 +1,34 @@
|
|
1
|
+
- if current_records.empty?
|
2
|
+
= render 'admin/common/noresults'
|
3
|
+
|
4
|
+
- else
|
5
|
+
.panel
|
6
|
+
.panel-header = action_name.titleize
|
7
|
+
.panel-content.padding-0.border-none
|
8
|
+
table.unstriped.margin-0 data-table-checkbox=""
|
9
|
+
thead
|
10
|
+
tr
|
11
|
+
- permitted_params.first(1).each do |parameter|
|
12
|
+
- if current_record.respond_to? parameter
|
13
|
+
- parameter = parameter.first if parameter.is_a? Array
|
14
|
+
- parameter = parameter.keys.first if parameter.is_a? Hash
|
15
|
+
th.expand = parameter.to_s.titleize
|
16
|
+
|
17
|
+
th.shrink.actions Actions
|
18
|
+
|
19
|
+
tbody
|
20
|
+
- current_records.each do |record|
|
21
|
+
tr
|
22
|
+
- permitted_params.first(1).each do |parameter|
|
23
|
+
- parameter = parameter.first if parameter.is_a? Array
|
24
|
+
- parameter = parameter.keys.first if parameter.is_a? Hash
|
25
|
+
|
26
|
+
- if record.respond_to? parameter
|
27
|
+
td.expand = attribute_for record, parameter
|
28
|
+
|
29
|
+
td.shrink.actions
|
30
|
+
= admin_table_action_links record
|
31
|
+
|
32
|
+
- if current_records.respond_to? :current_page
|
33
|
+
.panel-footer
|
34
|
+
= admin_table_pagination current_records
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'form'
|
@@ -0,0 +1,13 @@
|
|
1
|
+
.panel
|
2
|
+
.panel-header = action_name.titleize
|
3
|
+
.panel-content.padding-0.border-none
|
4
|
+
table.margin-0
|
5
|
+
tbody
|
6
|
+
- (permitted_params - current_model.attribute_aliases.values.map(&:to_sym)).each do |parameter|
|
7
|
+
- parameter = parameter.first if parameter.is_a? Array
|
8
|
+
- parameter = parameter.keys.first if parameter.is_a? Hash
|
9
|
+
|
10
|
+
- if current_record.respond_to? parameter
|
11
|
+
tr
|
12
|
+
td = "#{parameter.to_s.titleize}"
|
13
|
+
td = attribute_for current_record, parameter
|
@@ -0,0 +1,29 @@
|
|
1
|
+
doctype html
|
2
|
+
|
3
|
+
html
|
4
|
+
head
|
5
|
+
meta name="viewport" content="width=device-width, initial-scale=1.0"
|
6
|
+
meta http-equiv="X-UA-Compatible" content="IE=edge"
|
7
|
+
= admin_meta_tags
|
8
|
+
= csrf_meta_tags
|
9
|
+
= favicon_link_tag 'admin/favicon.png'
|
10
|
+
= stylesheet_link_tag 'admin/application', media: 'all'
|
11
|
+
|
12
|
+
body
|
13
|
+
.off-canvas-wrapper
|
14
|
+
.off-canvas-menu-wrapper.off-canvas-content data-off-canvas-content=""
|
15
|
+
#sidebar.off-canvas-menu.position-left data-off-canvas-menu=""
|
16
|
+
= render 'admin/common/sidebar'
|
17
|
+
|
18
|
+
.off-canvas-menu-content data-off-canvas-content=""
|
19
|
+
= render 'admin/common/topbar'
|
20
|
+
|
21
|
+
main.content
|
22
|
+
= render 'admin/common/header'
|
23
|
+
= yield
|
24
|
+
= render 'admin/common/footer'
|
25
|
+
|
26
|
+
#offcanvas.off-canvas.position-right data-off-canvas=""
|
27
|
+
= render 'admin/common/messagebar'
|
28
|
+
|
29
|
+
= javascript_include_tag 'admin/application'
|
@@ -0,0 +1,89 @@
|
|
1
|
+
SimpleForm.setup do |config|
|
2
|
+
config.wrappers :admin_vertical_form, class: :input, hint_class: :field_with_hint, error_class: :error do |b|
|
3
|
+
b.use :html5
|
4
|
+
b.use :placeholder
|
5
|
+
b.optional :maxlength
|
6
|
+
b.optional :minlength
|
7
|
+
b.optional :pattern
|
8
|
+
b.optional :min_max
|
9
|
+
b.optional :readonly
|
10
|
+
b.use :label_input
|
11
|
+
b.use :error, wrap_with: { tag: :span, class: 'form-error is-visible' }
|
12
|
+
b.use :hint, wrap_with: { tag: :p, class: 'help-text' }
|
13
|
+
end
|
14
|
+
|
15
|
+
config.wrappers :admin_horizontal_form, tag: 'div', class: 'row', hint_class: :field_with_hint, error_class: :error do |b|
|
16
|
+
b.use :html5
|
17
|
+
b.use :placeholder
|
18
|
+
b.optional :maxlength
|
19
|
+
b.optional :minlength
|
20
|
+
b.optional :pattern
|
21
|
+
b.optional :min_max
|
22
|
+
b.optional :readonly
|
23
|
+
|
24
|
+
b.wrapper :label_wrapper, tag: :div, class: 'small-3 columns' do |ba|
|
25
|
+
ba.use :label, class: 'right inline'
|
26
|
+
end
|
27
|
+
|
28
|
+
b.wrapper :right_input_wrapper, tag: :div, class: 'small-9 columns' do |ba|
|
29
|
+
ba.use :input
|
30
|
+
ba.use :error, wrap_with: { tag: :span, class: 'form-error is-visible' }
|
31
|
+
ba.use :hint, wrap_with: { tag: :p, class: 'help-text' }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
config.wrappers :admin_inline_form, tag: 'div', class: 'column small-4', hint_class: :field_with_hint, error_class: :error do |b|
|
36
|
+
b.use :html5
|
37
|
+
b.use :placeholder
|
38
|
+
b.optional :maxlength
|
39
|
+
b.optional :minlength
|
40
|
+
b.optional :pattern
|
41
|
+
b.optional :min_max
|
42
|
+
b.optional :readonly
|
43
|
+
|
44
|
+
b.use :label, class: 'hidden-for-small-up'
|
45
|
+
b.use :input
|
46
|
+
|
47
|
+
b.use :error, wrap_with: { tag: :span, class: 'form-error is-visible' }
|
48
|
+
b.use :hint, wrap_with: { tag: :p, class: 'help-text' }
|
49
|
+
end
|
50
|
+
|
51
|
+
config.wrappers :admin_horizontal_radio_and_checkboxes, tag: 'div', class: 'row' do |b|
|
52
|
+
b.use :html5
|
53
|
+
b.optional :readonly
|
54
|
+
|
55
|
+
b.wrapper :container_wrapper, tag: 'div', class: 'small-offset-3 small-9 columns' do |ba|
|
56
|
+
ba.wrapper tag: 'label', class: 'checkbox' do |bb|
|
57
|
+
bb.use :input
|
58
|
+
bb.use :label_text
|
59
|
+
end
|
60
|
+
|
61
|
+
ba.use :error, wrap_with: { tag: :span, class: 'form-error is-visible' }
|
62
|
+
ba.use :hint, wrap_with: { tag: :p, class: 'help-text' }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
config.wrappers :admin_horizontal_multi_select, tag: 'div', class: :input, error_class: :error do |b|
|
67
|
+
b.use :html5
|
68
|
+
b.optional :readonly
|
69
|
+
b.use :label, class: 'right inline'
|
70
|
+
|
71
|
+
b.wrapper tag: 'div', class: 'small-4 columns' do |ba|
|
72
|
+
ba.use :input
|
73
|
+
ba.use :error, wrap_with: { tag: :span, class: 'form-error is-visible' }
|
74
|
+
ba.use :hint, wrap_with: { tag: :p, class: 'help-text' }
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
config.wrappers :admin_customizable_wrapper, tag: 'div', error_class: :error do |b|
|
79
|
+
b.use :html5
|
80
|
+
b.optional :readonly
|
81
|
+
|
82
|
+
b.wrapper :custom_wrapper, tag: :div do |ba|
|
83
|
+
ba.use :label_input
|
84
|
+
end
|
85
|
+
|
86
|
+
b.use :error, wrap_with: { tag: :span, class: 'form-error is-visible' }
|
87
|
+
b.use :hint, wrap_with: { tag: :p, class: 'help-text' }
|
88
|
+
end
|
89
|
+
end
|
data/config/routes.rb
ADDED
data/lib/action_admin.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'hashie'
|
2
|
+
require 'simple_form'
|
3
|
+
require 'bedrock_sass'
|
4
|
+
require 'action_crud'
|
5
|
+
require 'smart_pagination'
|
6
|
+
require 'smart_navigation'
|
7
|
+
require 'simple_attribute'
|
8
|
+
require 'action_admin/engine'
|
9
|
+
|
10
|
+
module ActionAdmin
|
11
|
+
extend ActiveSupport::Autoload
|
12
|
+
|
13
|
+
# Autoload modules
|
14
|
+
autoload :Config
|
15
|
+
autoload :SimpleForm
|
16
|
+
autoload :Controller
|
17
|
+
autoload :Actionable
|
18
|
+
autoload :Crudable
|
19
|
+
autoload :Header
|
20
|
+
|
21
|
+
# Set attr accessors
|
22
|
+
mattr_accessor :config
|
23
|
+
|
24
|
+
# Set config options
|
25
|
+
@@config = Config.new
|
26
|
+
|
27
|
+
# Setup module config
|
28
|
+
def self.setup
|
29
|
+
yield config
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
module Actionable
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
include Controller
|
7
|
+
|
8
|
+
class_attribute :action_header
|
9
|
+
self.action_header = Header.new
|
10
|
+
end
|
11
|
+
|
12
|
+
class_methods do
|
13
|
+
def action_title(action, title)
|
14
|
+
self.action_header.action(action)
|
15
|
+
self.action_header.title(title)
|
16
|
+
end
|
17
|
+
|
18
|
+
def header(action, &block)
|
19
|
+
self.action_header.action(action)
|
20
|
+
yield self.action_header
|
21
|
+
self.action_header.action(nil)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
class Config < Hashie::Dash
|
3
|
+
property :app_name, default: 'Action Admin'
|
4
|
+
property :menus, default: Hashie::Mash.new
|
5
|
+
|
6
|
+
def menu(name, &block)
|
7
|
+
if self.menus.send(:"#{name}").nil?
|
8
|
+
self.menus.send(:"#{name}=", Hashie::Mash.new)
|
9
|
+
end
|
10
|
+
|
11
|
+
yield self.menus.send(:"#{name}")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
module Controller
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
# Set layout
|
7
|
+
layout 'admin'
|
8
|
+
|
9
|
+
# Use forgery protection
|
10
|
+
protect_from_forgery with: :exception
|
11
|
+
|
12
|
+
# Render default view
|
13
|
+
rescue_from ActionController::UnknownFormat, with: :render_default_view
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
# Render default view template
|
19
|
+
def render_default_view
|
20
|
+
respond_to do |format|
|
21
|
+
format.html { render 'admin/common/action' }
|
22
|
+
format.json { render json: { message: 'No content' }, status: :unprocessable_entity }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
module Crudable
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
include Actionable
|
7
|
+
include ActionCrud
|
8
|
+
|
9
|
+
set_namespace :admin
|
10
|
+
permit_params except: [:created_at, :updated_at, :type, :ancestry]
|
11
|
+
end
|
12
|
+
|
13
|
+
class_methods do
|
14
|
+
def controller_path
|
15
|
+
'admin/records'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
class Engine < ::Rails::Engine
|
3
|
+
config.generators do |g|
|
4
|
+
g.template_engine :slim
|
5
|
+
end
|
6
|
+
|
7
|
+
initializer 'action_admin.assets.precompile' do |app|
|
8
|
+
app.config.assets.precompile += %w(admin/*)
|
9
|
+
end
|
10
|
+
|
11
|
+
initializer 'action_admin', before: :load_config_initializers do
|
12
|
+
Rails.application.routes.append do
|
13
|
+
mount ActionAdmin::Engine, at: 'admin'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
class Header
|
3
|
+
class_attribute :actions
|
4
|
+
class_attribute :current_actions
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
self.actions = {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def action(names)
|
11
|
+
self.current_actions = Array(names)
|
12
|
+
end
|
13
|
+
|
14
|
+
def title(value)
|
15
|
+
current_actions.each { |a| add_action_key(a, :title, value) }
|
16
|
+
end
|
17
|
+
|
18
|
+
def link(options)
|
19
|
+
current_actions.each { |a| add_action_key(a, :links, options, true) }
|
20
|
+
end
|
21
|
+
|
22
|
+
def action_title(name, context)
|
23
|
+
title = Hash(actions[:"#{name}"]).fetch :title, default_title(context)
|
24
|
+
evaluate_value(title, context)
|
25
|
+
end
|
26
|
+
|
27
|
+
def action_links(name, context)
|
28
|
+
links = Hash(actions[:"#{name}"]).fetch :links, default_action_links(name, context)
|
29
|
+
|
30
|
+
Array(links).map do |link|
|
31
|
+
Hash[link.map { |k, v| [k, evaluate_value(v, context)] }]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def default_title(context)
|
36
|
+
if context.action_name == 'index'
|
37
|
+
context.controller_name.titleize
|
38
|
+
else
|
39
|
+
context.action_name.titleize
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def default_action_links(name, context)
|
44
|
+
setup = { index: :new, new: :index, show: [:index, :edit, :destroy], edit: [:index, :show, :destroy] }
|
45
|
+
links = default_links(context)
|
46
|
+
|
47
|
+
Array(setup[:"#{name}"]).map { |l| links[l] }.reject(&:nil?)
|
48
|
+
end
|
49
|
+
|
50
|
+
def default_links(context)
|
51
|
+
return {} unless context.controller.respond_to? :permitted_params
|
52
|
+
|
53
|
+
{
|
54
|
+
show: { label: 'View', icon: 'eye', url: :record_path },
|
55
|
+
index: { label: 'Back', icon: 'arrow-left', url: :records_path, html: { class: 'inactive' } },
|
56
|
+
new: { label: 'New', icon: 'plus', url: :new_record_path, html: { class: 'success' } },
|
57
|
+
edit: { label: 'Edit', icon: 'pencil', url: :edit_record_path, html: { class: 'warning' } },
|
58
|
+
destroy: { label: 'Delete', icon: 'delete', url: :record_path, html: { class: 'alert' }, method: 'delete' }
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def add_action_key(action, key, value, append=false)
|
65
|
+
self.actions[action] = {} unless self.actions.key?(action)
|
66
|
+
|
67
|
+
if append.present?
|
68
|
+
self.actions[action][key] = Array(self.actions[action][key])
|
69
|
+
self.actions[action][key] += [value]
|
70
|
+
else
|
71
|
+
self.actions[action][key] = value
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def evaluate_value(value, context)
|
76
|
+
if value.is_a?(Proc)
|
77
|
+
context.instance_exec(&value)
|
78
|
+
elsif value.is_a?(Symbol)
|
79
|
+
context.try(value) || value
|
80
|
+
else
|
81
|
+
value
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
module SimpleForm
|
3
|
+
class FormBuilder < ::SimpleForm::FormBuilder
|
4
|
+
# Initialize form builder
|
5
|
+
def initialize(*)
|
6
|
+
super
|
7
|
+
|
8
|
+
@admin = {
|
9
|
+
button_class: 'button',
|
10
|
+
error_notification_class: 'callout alert',
|
11
|
+
default_wrapper: :admin_vertical_form,
|
12
|
+
wrapper_mappings: {
|
13
|
+
check_boxes: :admin_horizontal_radio_and_checkboxes,
|
14
|
+
radio_buttons: :admin_horizontal_radio_and_checkboxes,
|
15
|
+
# boolean: :admin_horizontal_radio_and_checkboxes,
|
16
|
+
datetime: :admin_horizontal_multi_select,
|
17
|
+
date: :admin_horizontal_multi_select,
|
18
|
+
time: :admin_horizontal_multi_select,
|
19
|
+
# file: :admin_horizontal_file_input
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
@wrapper = ::SimpleForm.wrapper(options[:wrapper] || @admin[:default_wrapper])
|
24
|
+
end
|
25
|
+
|
26
|
+
# Create form button
|
27
|
+
def button(type, *args, &block)
|
28
|
+
options = args.extract_options!.dup
|
29
|
+
options[:class] = [@admin[:button_class], options[:class]].compact
|
30
|
+
args << options
|
31
|
+
if respond_to?(:"#{type}_button")
|
32
|
+
send(:"#{type}_button", *args, &block)
|
33
|
+
else
|
34
|
+
send(type, *args, &block)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Create error notification
|
39
|
+
def error_notification(options={})
|
40
|
+
SimpleForm::ErrorNotification.new(self, options).render
|
41
|
+
end
|
42
|
+
|
43
|
+
# Find field wrapper
|
44
|
+
def find_wrapper_mapping(input_type)
|
45
|
+
if options[:wrapper_mappings] && options[:wrapper_mappings][input_type]
|
46
|
+
options[:wrapper_mappings][input_type]
|
47
|
+
else
|
48
|
+
@admin[:wrapper_mappings] && @admin[:wrapper_mappings][input_type]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module ActionAdmin
|
2
|
+
module SimpleForm
|
3
|
+
class MinimalFormBuilder < FormBuilder
|
4
|
+
# Form builder input
|
5
|
+
def input(attribute_name, options = {}, &block)
|
6
|
+
if options[:placeholder].nil?
|
7
|
+
options[:placeholder] ||= if object.class.respond_to?(:human_attribute_name)
|
8
|
+
object.class.human_attribute_name(attribute_name.to_s)
|
9
|
+
else
|
10
|
+
attribute_name.to_s.humanize
|
11
|
+
end
|
12
|
+
|
13
|
+
options[:label] = false if options[:label].nil?
|
14
|
+
end
|
15
|
+
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,242 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: action_admin
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jonian Guveli
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-12-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: slim
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: hashie
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.5'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bedrock_sass
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.1'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: action_crud
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.1'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: simple_form
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.5'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.5'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: simple_attribute
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.1'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.1'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: smart_navigation
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.1'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.1'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: smart_pagination
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0.2'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0.2'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: meta-tags
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '2.6'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '2.6'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: sqlite3
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
description: Ruby on Rails mountable engine to create admin interfaces.
|
168
|
+
email:
|
169
|
+
- jonian@hardpixel.eu
|
170
|
+
executables: []
|
171
|
+
extensions: []
|
172
|
+
extra_rdoc_files: []
|
173
|
+
files:
|
174
|
+
- LICENSE.txt
|
175
|
+
- README.md
|
176
|
+
- Rakefile
|
177
|
+
- app/assets/images/admin/logo.svg
|
178
|
+
- app/assets/javascripts/admin/admin.js
|
179
|
+
- app/assets/javascripts/admin/application.js
|
180
|
+
- app/assets/stylesheets/admin/admin.scss
|
181
|
+
- app/assets/stylesheets/admin/application.scss
|
182
|
+
- app/controllers/action_admin/base_controller.rb
|
183
|
+
- app/controllers/action_admin/crud_controller.rb
|
184
|
+
- app/controllers/action_admin/welcome_controller.rb
|
185
|
+
- app/helpers/action_admin/admin_helper.rb
|
186
|
+
- app/helpers/action_admin/form_helper.rb
|
187
|
+
- app/helpers/action_admin/markup_helper.rb
|
188
|
+
- app/views/action_admin/welcome/index.html.slim
|
189
|
+
- app/views/admin/common/_footer.html.slim
|
190
|
+
- app/views/admin/common/_header.html.slim
|
191
|
+
- app/views/admin/common/_logobar.html.slim
|
192
|
+
- app/views/admin/common/_messagebar.html.slim
|
193
|
+
- app/views/admin/common/_noresults.html.slim
|
194
|
+
- app/views/admin/common/_sidebar.html.slim
|
195
|
+
- app/views/admin/common/_topbar.html.slim
|
196
|
+
- app/views/admin/common/action.html.slim
|
197
|
+
- app/views/admin/records/_form.html.slim
|
198
|
+
- app/views/admin/records/edit.html.slim
|
199
|
+
- app/views/admin/records/index.html.slim
|
200
|
+
- app/views/admin/records/new.html.slim
|
201
|
+
- app/views/admin/records/show.html.slim
|
202
|
+
- app/views/layouts/admin.html.slim
|
203
|
+
- config/initializers/admin_simple_form.rb
|
204
|
+
- config/routes.rb
|
205
|
+
- lib/action_admin.rb
|
206
|
+
- lib/action_admin/actionable.rb
|
207
|
+
- lib/action_admin/config.rb
|
208
|
+
- lib/action_admin/controller.rb
|
209
|
+
- lib/action_admin/crudable.rb
|
210
|
+
- lib/action_admin/engine.rb
|
211
|
+
- lib/action_admin/header.rb
|
212
|
+
- lib/action_admin/simple_form.rb
|
213
|
+
- lib/action_admin/simple_form/error_notification.rb
|
214
|
+
- lib/action_admin/simple_form/form_builder.rb
|
215
|
+
- lib/action_admin/simple_form/minimal_form_builder.rb
|
216
|
+
- lib/action_admin/version.rb
|
217
|
+
- lib/tasks/action_admin_tasks.rake
|
218
|
+
homepage: https://github.com/hardpixel/action-admin
|
219
|
+
licenses:
|
220
|
+
- MIT
|
221
|
+
metadata: {}
|
222
|
+
post_install_message:
|
223
|
+
rdoc_options: []
|
224
|
+
require_paths:
|
225
|
+
- lib
|
226
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
227
|
+
requirements:
|
228
|
+
- - ">="
|
229
|
+
- !ruby/object:Gem::Version
|
230
|
+
version: '0'
|
231
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
232
|
+
requirements:
|
233
|
+
- - ">="
|
234
|
+
- !ruby/object:Gem::Version
|
235
|
+
version: '0'
|
236
|
+
requirements: []
|
237
|
+
rubyforge_project:
|
238
|
+
rubygems_version: 2.6.13
|
239
|
+
signing_key:
|
240
|
+
specification_version: 4
|
241
|
+
summary: Ruby on Rails mountable engine to create admin interfaces
|
242
|
+
test_files: []
|