cm-admin 0.2.0 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +12 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +6 -0
  5. data/Gemfile +7 -1
  6. data/Gemfile.lock +121 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +8 -19
  9. data/app/assets/images/logo.png +0 -0
  10. data/{lib/generators/cm_admin/templates/assets/stylesheets → app/assets/stylesheets/cm_admin}/base/auth.scss +4 -6
  11. data/app/assets/stylesheets/cm_admin/base/common.scss +237 -0
  12. data/app/assets/stylesheets/cm_admin/base/filters.scss +200 -0
  13. data/{lib/generators/cm_admin/templates/assets/stylesheets → app/assets/stylesheets/cm_admin}/base/form.scss +83 -11
  14. data/app/assets/stylesheets/cm_admin/base/main-nav.scss +47 -0
  15. data/app/assets/stylesheets/cm_admin/base/navbar.scss +65 -0
  16. data/app/assets/stylesheets/cm_admin/base/quicksearch.scss +76 -0
  17. data/app/assets/stylesheets/cm_admin/base/scaffold.scss +96 -0
  18. data/app/assets/stylesheets/cm_admin/base/show.scss +76 -0
  19. data/app/assets/stylesheets/cm_admin/base/sidebar.scss +225 -0
  20. data/app/assets/stylesheets/cm_admin/base/table.scss +320 -0
  21. data/app/assets/stylesheets/cm_admin/base/tabs.scss +26 -0
  22. data/app/assets/stylesheets/cm_admin/cm_admin.css.scss +26 -0
  23. data/app/assets/stylesheets/cm_admin/components/_alerts.scss +101 -0
  24. data/app/assets/stylesheets/cm_admin/components/_buttons.scss +135 -0
  25. data/app/assets/stylesheets/cm_admin/components/_dropdown-popup.scss +153 -0
  26. data/app/assets/stylesheets/cm_admin/components/_input.scss +274 -0
  27. data/app/assets/stylesheets/cm_admin/components/_modal.scss +34 -0
  28. data/app/assets/stylesheets/cm_admin/components/_range.scss +31 -0
  29. data/app/assets/stylesheets/cm_admin/components/_status-tag.scss +68 -0
  30. data/app/assets/stylesheets/cm_admin/components/index.scss +7 -0
  31. data/app/assets/stylesheets/cm_admin/dependency/bootstrap.min.css +7 -0
  32. data/app/assets/stylesheets/cm_admin/helpers/_mixins.scss +20 -0
  33. data/app/assets/stylesheets/cm_admin/helpers/_variable.scss +87 -0
  34. data/app/assets/stylesheets/cm_admin/helpers/index.scss +2 -0
  35. data/app/controllers/cm_admin/application_controller.rb +11 -0
  36. data/app/controllers/cm_admin/exports_controller.rb +16 -0
  37. data/app/controllers/cm_admin/static_controller.rb +12 -0
  38. data/app/helpers/cm_admin/application_helper.rb +11 -0
  39. data/app/helpers/cm_admin/custom_helper.rb +4 -0
  40. data/app/javascript/packs/cm_admin/application.js +22 -0
  41. data/app/javascript/packs/cm_admin/filters.js +347 -0
  42. data/app/javascript/packs/cm_admin/quick_search.js +67 -0
  43. data/app/javascript/packs/cm_admin/scaffolds.js +43 -0
  44. data/app/javascript/stylesheets/cm_admin/application.scss +3 -0
  45. data/app/views/cm_admin/main/_associated_table.html.slim +60 -0
  46. data/app/views/cm_admin/main/_cm_pagy_nav.html.slim +23 -0
  47. data/app/views/cm_admin/main/_filters.html.slim +1 -0
  48. data/app/views/cm_admin/main/_nested_fields.html.slim +7 -0
  49. data/app/views/cm_admin/main/_nested_table_form.html.slim +6 -0
  50. data/app/views/cm_admin/main/_table.html.slim +60 -0
  51. data/app/views/cm_admin/main/_tabs.html.slim +5 -0
  52. data/app/views/cm_admin/main/_top_navbar.html.slim +25 -0
  53. data/app/views/cm_admin/main/associated_index.html.slim +6 -0
  54. data/app/views/cm_admin/main/associated_show.html.slim +6 -0
  55. data/app/views/cm_admin/main/dashboard.html.slim +1 -0
  56. data/app/views/cm_admin/main/edit.html.slim +19 -0
  57. data/app/views/cm_admin/main/index.html.slim +12 -0
  58. data/app/views/cm_admin/main/new.html.slim +22 -0
  59. data/app/views/cm_admin/main/show.html.slim +12 -0
  60. data/app/views/cm_admin/static/error_401.html.slim +4 -0
  61. data/app/views/layouts/_left_sidebar_nav.html.slim +34 -0
  62. data/app/views/layouts/_quick_links.html.slim +25 -0
  63. data/app/views/layouts/cm_admin.html.slim +41 -0
  64. data/app/views/layouts/static.html.slim +18 -0
  65. data/bin/webpack +18 -0
  66. data/bin/webpack-dev-server +18 -0
  67. data/cm_admin.gemspec +21 -31
  68. data/config/.DS_Store +0 -0
  69. data/config/initializers/active_record_extension.rb +9 -0
  70. data/config/routes.rb +19 -0
  71. data/config/webpack/development.js +5 -0
  72. data/config/webpack/environment.js +13 -0
  73. data/config/webpack/production.js +5 -0
  74. data/config/webpack/test.js +5 -0
  75. data/config/webpacker.yml +92 -0
  76. data/lib/cm_admin/constants.rb +33 -0
  77. data/lib/cm_admin/engine.rb +38 -0
  78. data/lib/cm_admin/model.rb +152 -0
  79. data/lib/cm_admin/models/action.rb +36 -0
  80. data/lib/cm_admin/models/actions/blocks.rb +25 -0
  81. data/lib/cm_admin/models/blocks.rb +19 -0
  82. data/lib/cm_admin/models/cm_show_section.rb +20 -0
  83. data/lib/cm_admin/models/column.rb +61 -0
  84. data/lib/cm_admin/models/controller_method.rb +75 -0
  85. data/lib/cm_admin/models/dsl_method.rb +122 -0
  86. data/lib/cm_admin/models/export.rb +54 -0
  87. data/lib/cm_admin/models/field.rb +15 -0
  88. data/lib/cm_admin/models/filter.rb +95 -0
  89. data/lib/cm_admin/models/form_field.rb +21 -0
  90. data/lib/cm_admin/models/tab.rb +13 -0
  91. data/lib/cm_admin/utils.rb +67 -0
  92. data/lib/cm_admin/version.rb +1 -1
  93. data/lib/cm_admin/view_helpers/column_field_helper.rb +29 -0
  94. data/lib/cm_admin/view_helpers/field_display_helper.rb +65 -0
  95. data/lib/cm_admin/view_helpers/filter_helper.rb +190 -0
  96. data/lib/cm_admin/view_helpers/form_field_helper.rb +33 -0
  97. data/lib/cm_admin/view_helpers/form_helper.rb +65 -0
  98. data/lib/cm_admin/view_helpers/manage_column_popup_helper.rb +75 -0
  99. data/lib/cm_admin/view_helpers/navigation_helper.rb +34 -0
  100. data/lib/cm_admin/view_helpers/page_info_helper.rb +57 -0
  101. data/lib/cm_admin/view_helpers.rb +74 -0
  102. data/lib/cm_admin.rb +33 -2
  103. data/lib/generators/cm_admin/install_generator.rb +3 -13
  104. data/lib/tasks/webpack_install.rake +63 -0
  105. data/package.json +23 -0
  106. data/postcss.config.js +12 -0
  107. data/tmp/cache/webpacker/last-compilation-digest-development +1 -0
  108. data/yarn.lock +6933 -0
  109. metadata +155 -46
  110. data/lib/generators/cm_admin/USAGE +0 -8
  111. data/lib/generators/cm_admin/templates/assets/images/cm.png +0 -0
  112. data/lib/generators/cm_admin/templates/assets/stylesheets/application.css.scss +0 -33
  113. data/lib/generators/cm_admin/templates/assets/stylesheets/base/_variable.scss +0 -14
  114. data/lib/generators/cm_admin/templates/assets/stylesheets/base/input-styles.scss +0 -72
  115. data/lib/generators/cm_admin/templates/assets/stylesheets/base/main-nav.scss +0 -79
  116. data/lib/generators/cm_admin/templates/assets/stylesheets/base/scaffold.scss +0 -95
  117. data/lib/generators/cm_admin/templates/assets/stylesheets/base/show.scss +0 -88
  118. data/lib/generators/cm_admin/templates/assets/stylesheets/base/sidebar.scss +0 -69
  119. data/lib/generators/cm_admin/templates/assets/stylesheets/base/table.scss +0 -246
  120. data/lib/generators/cm_admin/templates/layouts/_navbar.html.slim +0 -8
  121. data/lib/generators/cm_admin/templates/layouts/_side_navbar.html.slim +0 -12
  122. data/lib/generators/cm_admin/templates/layouts/application.html.slim +0 -20
  123. data/lib/generators/cm_admin/templates/layouts/initializer.rb +0 -2
  124. data/lib/generators/cm_admin/templates/views/_form.erb +0 -67
  125. data/lib/generators/cm_admin/templates/views/_table.erb +0 -22
  126. data/lib/generators/cm_admin/templates/views/edit.erb +0 -10
  127. data/lib/generators/cm_admin/templates/views/index.erb +0 -11
  128. data/lib/generators/cm_admin/templates/views/new.erb +0 -10
  129. data/lib/generators/cm_admin/templates/views/reset_password.erb +0 -12
  130. data/lib/generators/cm_admin/templates/views/show.erb +0 -18
  131. data/lib/generators/cm_admin/templates/views/sign_in.erb +0 -18
  132. data/lib/generators/cm_admin/view_generator.rb +0 -78
@@ -0,0 +1,74 @@
1
+ module CmAdmin
2
+ module ViewHelpers
3
+ Dir[File.expand_path("view_helpers", __dir__) + "/*.rb"].each { |f| require f }
4
+
5
+ include PageInfoHelper
6
+ include NavigationHelper
7
+ include FormHelper
8
+ include ColumnFieldHelper
9
+ include FieldDisplayHelper
10
+ include FilterHelper
11
+ include ManageColumnPopupHelper
12
+ include ActionView::Helpers::FormTagHelper
13
+ include ActionView::Helpers::TagHelper
14
+
15
+ def exportable(klass, html_class: [])
16
+ tag.a "Export as excel", class: html_class.append("filter-btn modal-btn mr-2"), data: {toggle: "modal", target: "#exportmodal"} do
17
+ concat tag.i class: 'fa fa-download'
18
+ concat tag.span " Export"
19
+ end
20
+ end
21
+
22
+ def column_pop_up(klass, required_filters = nil)
23
+ tag.div class: "modal fade form-modal", id: "exportmodal", role: "dialog", aria: {labelledby: "exportModal"} do
24
+ tag.div class: "modal-dialog modal-lg", role: "document" do
25
+ tag.div class: "modal-content" do
26
+ concat pop_ups(klass, required_filters)
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ def pop_ups(klass, required_filters)
33
+ tag.div do
34
+ concat pop_up_header
35
+ concat pop_up_body(klass, required_filters)
36
+ end
37
+ end
38
+
39
+ def pop_up_header
40
+ tag.div class: "modal-header" do
41
+ tag.button type: "button", class: "close", data: {dismiss: "modal"}, aria: {label: "Close"} do
42
+ tag.span "X", aria: {hidden: "true"}
43
+ end
44
+ tag.h4 "Select columns to export", class: "modal-title", id: "exportModal"
45
+ end
46
+ end
47
+
48
+ def pop_up_body(klass, required_filters)
49
+ tag.div class: "modal-body" do
50
+ form_tag '/cm_admin/export_to_file.js', id: 'export-to-file-form', style: "width: 100%;", class:"cm-admin-csv-export-form" do
51
+ concat hidden_field_tag 'class_name', klass.name.to_s, id: 'export-to-file-klass'
52
+ concat checkbox_row(klass)
53
+ concat tag.hr
54
+ concat submit_tag 'Export', class: 'btn btn-primary btn-bordered export-to-file-btn'
55
+ end
56
+ end
57
+ end
58
+
59
+ def checkbox_row(klass)
60
+ tag.div class: "row" do
61
+ CmAdmin::Models::Export.exportable_columns(klass).each do |column_path|
62
+ concat create_checkbox(column_path)
63
+ end
64
+ end
65
+ end
66
+
67
+ def create_checkbox(column_path)
68
+ tag.div class: "col-md-4" do
69
+ concat check_box_tag "columns[]", column_path, id: column_path.to_s.gsub('/', '-')
70
+ concat " " + column_path.to_s.gsub('/', '_').humanize
71
+ end
72
+ end
73
+ end
74
+ end
data/lib/cm_admin.rb CHANGED
@@ -1,6 +1,37 @@
1
- require "cm_admin/version"
1
+ require 'slim'
2
+ require 'cm_admin/version'
3
+ require 'cm_admin/engine'
4
+ require 'cm_admin/model'
5
+ require 'cm_admin/view_helpers'
6
+ require 'cm_admin/utils'
2
7
 
3
8
  module CmAdmin
4
9
  class Error < StandardError; end
5
- # Your code goes here...
10
+
11
+ mattr_accessor :layout
12
+ mattr_accessor :included_models, :cm_admin_models
13
+ @@included_models ||= []
14
+ @@cm_admin_models ||= []
15
+
16
+ class << self
17
+ def webpacker
18
+ @webpacker ||= ::Webpacker::Instance.new(
19
+ root_path: CmAdmin::Engine.root,
20
+ config_path: CmAdmin::Engine.root.join('config', 'webpacker.yml')
21
+ )
22
+ end
23
+
24
+ def setup
25
+ yield self
26
+ end
27
+
28
+ def config(entity, &block)
29
+ if entity.is_a?(Class)
30
+ unless CmAdmin::Model.find_by({name: entity.name})
31
+ @@cm_admin_models << CmAdmin::Model.new(entity, &block)
32
+ end
33
+ end
34
+ end
35
+ end
36
+
6
37
  end
@@ -1,16 +1,4 @@
1
- module CmAdmin
2
- class InstallGenerator < Rails::Generators::Base
3
- source_root File.expand_path('templates', __dir__)
4
-
5
- desc <<-DESC.strip_heredoc
6
- Generates layout for the entire admin panel
7
-
8
- For example:
9
- rails g cm_admin:install
10
-
11
- It copies the respectively layout files and the necessary asset files.
12
-
13
- DESC
1
+ require 'rails/generators'
14
2
 
15
3
  def add_required_gems
16
4
  gem 'slim'
@@ -18,6 +6,8 @@ module CmAdmin
18
6
  system("yarn add bootstrap")
19
7
  system("yarn add @fortawesome/fontawesome-free")
20
8
  system("yarn add select2")
9
+ system("yarn add daterangepicker")
10
+ system("yarn add jgrowl")
21
11
  end
22
12
 
23
13
  def copy_layout_file
@@ -0,0 +1,63 @@
1
+ # desc "Explaining what the task does"
2
+ # task :cm_admin do
3
+ # # Task goes here
4
+ # end
5
+
6
+ def ensure_log_goes_to_stdout
7
+ old_logger = Webpacker.logger
8
+ Webpacker.logger = ActiveSupport::Logger.new(STDOUT)
9
+ yield
10
+ ensure
11
+ Webpacker.logger = old_logger
12
+ end
13
+
14
+ namespace :cm_admin do
15
+ namespace :webpacker do
16
+ desc "Install deps with yarn"
17
+ task :yarn_install do
18
+ Dir.chdir(File.join(__dir__, "../..")) do
19
+ system "yarn install --no-progress --production"
20
+ end
21
+ end
22
+
23
+ desc "Compile JavaScript packs using webpack for production with digests"
24
+ task compile: [:yarn_install, :environment] do
25
+ Webpacker.with_node_env("production") do
26
+ ensure_log_goes_to_stdout do
27
+ if CmAdmin.webpacker.commands.compile
28
+ # Successful compilation!
29
+ else
30
+ # Failed compilation
31
+ exit!
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ def yarn_install_available?
40
+ rails_major = Rails::VERSION::MAJOR
41
+ rails_minor = Rails::VERSION::MINOR
42
+
43
+ rails_major > 5 || (rails_major == 5 && rails_minor >= 1)
44
+ end
45
+
46
+ def enhance_assets_precompile
47
+ # yarn:install was added in Rails 5.1
48
+ deps = yarn_install_available? ? [] : ["cm_admin:webpacker:yarn_install"]
49
+ Rake::Task["assets:precompile"].enhance(deps) do
50
+ Rake::Task["cm_admin:webpacker:compile"].invoke
51
+ end
52
+ end
53
+
54
+ # Compile packs after we've compiled all other assets during precompilation
55
+ skip_webpacker_precompile = %w(no false n f).include?(ENV["WEBPACKER_PRECOMPILE"])
56
+
57
+ unless skip_webpacker_precompile
58
+ if Rake::Task.task_defined?("assets:precompile")
59
+ enhance_assets_precompile
60
+ else
61
+ Rake::Task.define_task("assets:precompile" =>"cm_admin:webpacker:compile")
62
+ end
63
+ end
data/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "cm-admin",
3
+ "private": true,
4
+ "dependencies": {
5
+ "@fortawesome/fontawesome-free": "^5.15.3",
6
+ "@nathanvda/cocoon": "^1.2.14",
7
+ "@popperjs/core": "^2.9.2",
8
+ "@rails/activestorage": "^6.0.0",
9
+ "@rails/ujs": "^6.0.0",
10
+ "@rails/webpacker": "5.3.0",
11
+ "bootstrap": "^5.0.1",
12
+ "daterangepicker": "^3.1.0",
13
+ "flatpickr": "^4.6.9",
14
+ "jquery": "^3.6.0",
15
+ "moment": "^2.29.1",
16
+ "popper.js": "^1.16.1",
17
+ "turbolinks": "^5.2.0"
18
+ },
19
+ "version": "0.1.0",
20
+ "devDependencies": {
21
+ "webpack-dev-server": "^3.11.2"
22
+ }
23
+ }
data/postcss.config.js ADDED
@@ -0,0 +1,12 @@
1
+ module.exports = {
2
+ plugins: [
3
+ require('postcss-import'),
4
+ require('postcss-flexbugs-fixes'),
5
+ require('postcss-preset-env')({
6
+ autoprefixer: {
7
+ flexbox: 'no-2009'
8
+ },
9
+ stage: 3
10
+ })
11
+ ]
12
+ }
@@ -0,0 +1 @@
1
+ cf780b7d855af05066bcc442a307ca3eecf28623