thecore_ui_rails_admin 2.1.5 → 2.1.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/thecore_ui_rails_admin/thecore.js +0 -0
  3. data/app/assets/javascripts/{rails_admin/custom/ui.js → thecore_ui_rails_admin/thecore_rails_admin.js} +0 -2
  4. data/app/assets/stylesheets/{animate.css → thecore_ui_rails_admin/animate.css} +0 -0
  5. data/app/assets/stylesheets/thecore_ui_rails_admin/common.scss +32 -0
  6. data/app/assets/stylesheets/{devise.scss → thecore_ui_rails_admin/devise.scss} +0 -0
  7. data/app/assets/stylesheets/{rails_admin → thecore_ui_rails_admin}/flashing.scss +0 -0
  8. data/app/assets/stylesheets/{mixins.scss → thecore_ui_rails_admin/mixins.scss} +0 -0
  9. data/app/assets/stylesheets/{thecore_rails_admin.scss → thecore_ui_rails_admin/thecore.scss} +4 -7
  10. data/app/assets/stylesheets/{rails_admin/theming.scss → thecore_ui_rails_admin/thecore_rails_admin.scss} +1 -33
  11. data/app/assets/stylesheets/{rails_admin → thecore_ui_rails_admin}/togglable-sidebar.scss +0 -0
  12. data/app/helpers/devise_bootstrap_errors_helper.rb +20 -0
  13. data/app/helpers/thecore_helper.rb +54 -0
  14. data/app/views/layouts/rails_admin/application.html.haml +5 -0
  15. data/app/views/shared/_flash.html.erb +10 -0
  16. data/config/initializers/rails_admin.rb +8 -0
  17. data/config/initializers/thecore_concern.rb +6 -0
  18. data/config/initializers/thecore_ui_rails_admin_app_configs.rb +5 -4
  19. data/config/locales/thecore_settings.it.yml +32 -0
  20. data/db/migrate/20161227101954_create_rails_admin_settings.rb +25 -0
  21. data/db/migrate/20161227101956_add_app_name.rb +5 -0
  22. data/lib/abilities/thecore_ui_rails_admin.rb +13 -0
  23. data/lib/concerns/rails_admin_requirements.rb +19 -0
  24. data/lib/concerns/thecore_ui_rails_admin_user.rb +8 -24
  25. data/lib/thecore_ui_rails_admin.rb +8 -1
  26. data/lib/thecore_ui_rails_admin/engine.rb +2 -6
  27. data/lib/thecore_ui_rails_admin/version.rb +1 -1
  28. metadata +48 -12
  29. data/app/assets/javascripts/rails_admin/custom/timer.js +0 -135
  30. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +0 -233
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0450be6d140294eea37745dabd04b070dfe256d21055ab01d3b1006a5605b24a
4
- data.tar.gz: 1bea2f8eb11bf2d0eefb244b253c9041ae9443bd2b9533693ffad09fed0fd35e
3
+ metadata.gz: 75369cb3f050b4996aafce1b1651216c51db2c3248195a46a5a9e42293372b6e
4
+ data.tar.gz: 7f72b944c75a1a4a9a36a2633266c977d48638b34a15a6ea8915156b86adcc21
5
5
  SHA512:
6
- metadata.gz: b5116ba2302ac4397ef1d69f386a7ed6196efe35c4e97dcf05b5dd3f1d2ac1fb05fe54518ae38aa131c75feabb4e789bed17fdeb4685da4add3ea0f8e027fa20
7
- data.tar.gz: 1998769fc10a759cedc6c8b8db88688cd03a74e2c55aa5d86c824bc3646c447a1ab91ca679345dfb32907ff898d11b5d7c8c5b571315e1fd7e8463642dfbcd72
6
+ metadata.gz: b81368ff53b4f4362f2318a0949b5be0a673161899c5c4a85433895683f13fbee00dae9bb3cc2137dee5fc56698b7e4983ccd763128eab3d8b7a9b1d4f0c681b
7
+ data.tar.gz: 72557529214aef7ed4f464309c10846ff0ad57a1f594ed1ecc328a3a940a79eaf37b965e7a40eccf22e14fcfcdf76eed89ab9f5a902f1ec413cfbd7a0146f7fc
@@ -20,8 +20,6 @@ $(document).on('ready pjax:success', function(e) {
20
20
  $('.page-header, .content').removeClass('dashboard');
21
21
  }
22
22
 
23
- $('textarea[data-richtext="froala-wysiwyg"').froalaEditor();
24
-
25
23
  // $(document).ready(function () {
26
24
  // Hide and show the sidebar
27
25
  // Make the sidebar button shine a bit
@@ -0,0 +1,32 @@
1
+ body {
2
+ height: 100vh;
3
+ // background: linear-gradient(-20deg, #09b7b9 30%, #1c51a4 100%);
4
+ background-color: rgb(59, 78, 89);
5
+ }
6
+
7
+ .jumbotron {
8
+ background-color: rgb(59, 78, 89);
9
+ }
10
+
11
+ .vertical-center {
12
+ min-height: 100%;
13
+ /* Fallback for browsers do NOT support vh unit */
14
+ min-height: 100vh;
15
+ /* These two lines are counted as one :-) */
16
+ display: flex;
17
+ align-items: center;
18
+ }
19
+
20
+ #up-arrow {
21
+ bottom: -2em;
22
+ margin-right: auto;
23
+ margin-left: auto;
24
+ opacity: 0.2;
25
+ filter: alpha(opacity=20);
26
+ /* For IE8 and earlier */
27
+ }
28
+
29
+ .fa-pencil:before,
30
+ .icon-pencil:before {
31
+ content: "\f044";
32
+ }
@@ -11,7 +11,7 @@
11
11
  * file per style scope.
12
12
  *
13
13
  *= required _colors
14
-
14
+
15
15
  *= require_tree .
16
16
  *= require_self
17
17
  */
@@ -19,14 +19,11 @@
19
19
  @import "jquery-ui/dialog";
20
20
  @import 'bootstrap-sprockets';
21
21
  @import 'bootstrap';
22
- @import "rails_admin/theming";
22
+ @import 'common';
23
23
  @import 'devise';
24
24
  @import 'animate';
25
25
  @import 'mixins';
26
26
 
27
- #new_user {
28
- background-color: red;
29
- }
30
- body {
31
- background-color: green;
27
+ #new_user div.actions input.btn.btn-warning {
28
+ width: 100%;
32
29
  }
@@ -1,5 +1,6 @@
1
1
  @import "togglable-sidebar";
2
2
  @import "flashing";
3
+ @import 'common';
3
4
 
4
5
  $RAprimary: #1c2c41;
5
6
  $RAgreen: #37BC9B;
@@ -7,39 +8,6 @@ $RAblue: #3BAFDA;
7
8
  $RAred: #E9573F;
8
9
  $RAyellow: #F6BB42;
9
10
 
10
- body {
11
- height: 100vh;
12
- // background: linear-gradient(-20deg, #09b7b9 30%, #1c51a4 100%);
13
- background-color: rgb(59, 78, 89);
14
- }
15
-
16
- .jumbotron {
17
- background-color: rgb(59, 78, 89);
18
- }
19
-
20
- .vertical-center {
21
- min-height: 100%;
22
- /* Fallback for browsers do NOT support vh unit */
23
- min-height: 100vh;
24
- /* These two lines are counted as one :-) */
25
- display: flex;
26
- align-items: center;
27
- }
28
-
29
- #up-arrow {
30
- bottom: -2em;
31
- margin-right: auto;
32
- margin-left: auto;
33
- opacity: 0.2;
34
- filter: alpha(opacity=20);
35
- /* For IE8 and earlier */
36
- }
37
-
38
- .fa-pencil:before,
39
- .icon-pencil:before {
40
- content: "\f044";
41
- }
42
-
43
11
  .page-header.dashboard {
44
12
  border-color: $RAprimary;
45
13
  }
@@ -0,0 +1,20 @@
1
+ module DeviseBootstrapErrorsHelper
2
+ def devise_bootstrap_error_messages!
3
+ return '' if resource.errors.empty?
4
+
5
+ messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
6
+ sentence = I18n.t('errors.messages.not_saved',
7
+ count: resource.errors.count,
8
+ resource: resource.class.model_name.human.downcase)
9
+
10
+ html = <<-HTML
11
+ <div class="alert alert-danger alert-block devise-bs">
12
+ <button type="button" class="close" data-dismiss="alert">&times;</button>
13
+ <h5>#{sentence}</h5>
14
+ <ul>#{messages}</ul>
15
+ </div>
16
+ HTML
17
+
18
+ html.html_safe
19
+ end
20
+ end
@@ -0,0 +1,54 @@
1
+ module ThecoreHelper
2
+ def bootstrap_class_for(flash_type)
3
+ {
4
+ success: "alert-success",
5
+ error: "alert-error",
6
+ alert: "alert-danger",
7
+ notice: "alert-info"
8
+ }[flash_type.to_sym] || flash_type.to_s
9
+ end
10
+
11
+ def bootstrap_glyphs_icon(flash_type)
12
+ {
13
+ success: "glyphicon-ok",
14
+ error: "glyphicon-exclamation-sign",
15
+ alert: "glyphicon-warning-sign",
16
+ notice: "glyphicon-info-sign"
17
+ }[flash_type.to_sym] || 'glyphicon-screenshot'
18
+ end
19
+
20
+ def title(title)
21
+ content_for(:title) { title }
22
+ end
23
+
24
+ def meta_description(meta_description)
25
+ content_for(:meta_description) { meta_description }
26
+ end
27
+
28
+ def og_title(og_title)
29
+ content_for(:og_title) { og_title }
30
+ end
31
+
32
+ def og_description(og_description)
33
+ content_for(:og_description) { og_description }
34
+ end
35
+
36
+ def og_image(og_image)
37
+ content_for(:og_image) { og_image }
38
+ end
39
+
40
+ def bootstrap_class_for(flash_type)
41
+ case flash_type
42
+ when 'success'
43
+ 'alert-success'
44
+ when 'error'
45
+ 'alert-danger'
46
+ when 'alert'
47
+ 'alert-warning'
48
+ when 'notice'
49
+ 'alert-info'
50
+ else
51
+ flash_type.to_s
52
+ end
53
+ end
54
+ end
@@ -14,6 +14,11 @@
14
14
  = stylesheet_link_tag "rails_admin/rails_admin.css", media: :all
15
15
  = javascript_include_tag "rails_admin/rails_admin.js"
16
16
 
17
+ - Rails.application.config.assets.paths.each do |p|
18
+ -# Getting all the assets needed by thecore from all the gems
19
+ = stylesheet_link_tag("#{p.to_s.split("/").last}/thecore_rails_admin", media: 'all', 'data-turbolinks-track' => true) if File.exists?("#{p}/thecore_rails_admin.scss")
20
+ = javascript_include_tag("#{Dir["#{p}/**/thecore_rails_admin.js"].first.split("/")[-2]}/thecore_rails_admin", 'data-turbolinks-track' => true) if Dir["#{p}/**/thecore_rails_admin.js"].any?
21
+
17
22
  = favicon_link_tag 'apple-touch-icon.png', rel: 'apple-touch-icon', sizes: "180x180"
18
23
  = favicon_link_tag 'favicon-32x32.png', rel: 'icon', sizes: "32x32"
19
24
  = favicon_link_tag 'favicon-16x16.png', rel: 'icon', sizes: "16x16"
@@ -0,0 +1,10 @@
1
+ <% flash.each do |type, message| %>
2
+ <%-unless [true, "true", :true].include? message%>
3
+ <div class="alert <%= bootstrap_class_for(type) %> fade in" role='alert'>
4
+ <button class="close" data-dismiss="alert">×</button>
5
+ <span class="glyphicon <%= bootstrap_glyphs_icon(type)%>" aria-hidden="true"></span>
6
+ <span class="sr-only"><%= type.capitalize%>:</span>
7
+ <%= message %>
8
+ </div>
9
+ <%-end%>
10
+ <% end %>
@@ -5,6 +5,14 @@ RailsAdmin.config do |config|
5
5
  # [(Settings.app_name rescue (ENV["APP_NAME"] || "TheCore App")), "#{controller.params[:action].try(:titleize)} (#{Time.zone.now.to_s(:time)})"]
6
6
  # }
7
7
  ### Popular gems integration
8
+ config.model "RoleUser" do
9
+ visible false
10
+ end
11
+
12
+ config.model "ActionText::RichText" do
13
+ visible false
14
+ end
15
+
8
16
  config.model "ActiveStorage::Blob" do
9
17
  visible false
10
18
  end
@@ -66,16 +66,22 @@ module ThecoreConcern
66
66
  |u| u.permit(
67
67
  :username,
68
68
  :password,
69
+ :email,
70
+ :login,
69
71
  :password_confirmation,
70
72
  :remember_me)
71
73
  }
72
74
  devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit(
73
75
  :username,
74
76
  :password,
77
+ :email,
78
+ :login,
75
79
  :password_confirmation)
76
80
  }
77
81
  devise_parameter_sanitizer.permit(:account_update) { |u| u.permit(
78
82
  :username,
83
+ :email,
84
+ :login,
79
85
  :password,
80
86
  :password_confirmation,
81
87
  :current_password)
@@ -1,12 +1,13 @@
1
1
  Rails.application.configure do
2
+ # Login Page and pages not in RailsAdmin
3
+ config.assets.precompile += %w( thecore_ui_rails_admin/thecore.css thecore_ui_rails_admin/thecore.js )
4
+ # Pages under Rails Admin
5
+ config.assets.precompile += %w( thecore_ui_rails_admin/thecore_rails_admin.css thecore_ui_rails_admin/thecore_rails_admin.js )
2
6
 
3
- config.assets.precompile += %w( thecore_rails_admin.css )
4
-
5
- puts "ASSETS PRECOMPILE: #{config.assets.precompile.inspect}"
6
-
7
7
  config.after_initialize do
8
8
  RailsAdmin::Config::Actions::Export.send(:include, ExportConcern)
9
9
  RailsAdmin::Config::Actions::BulkDelete.send(:include, BulkDeleteConcern)
10
+ RailsAdminSettings::Setting.send(:include, RailsAdminSettings::RailsAdminExtensionConfig)
10
11
  User.send(:include, ThecoreUiRailsAdminUser)
11
12
  end
12
13
  end
@@ -0,0 +1,32 @@
1
+ it:
2
+ settings:
3
+ namespaces:
4
+ main: Principale
5
+ names:
6
+ app_name: Nome dell'applicazione
7
+ admin:
8
+ settings:
9
+ label: 'Impostazioni'
10
+ no_ckeditor_detected: CKEditor non trovato &mdash; mostro il campo come semplice testo
11
+ phone_invalid: Telefono non valido
12
+ phones_invalid: "Telefono non valido: %{phones}"
13
+ email_invalid: Email non valida
14
+ yaml_invalid: YAML non valido
15
+ color_invalid: Colore non valido
16
+ mongoid: &mongoid
17
+ models:
18
+ rails_admin_settings/setting: Configurazioni
19
+ attributes:
20
+ rails_admin_settings/setting:
21
+ c_at: Creato
22
+ u_at: Modificato
23
+ enabled: Abilitato
24
+ ns: Gruppo
25
+ name: Nome
26
+ key: Chiave
27
+ raw: Valore
28
+ type: Tipo
29
+ kind: Tipo
30
+ label: Etichetta
31
+ activerecord:
32
+ <<: *mongoid
@@ -0,0 +1,25 @@
1
+ class CreateRailsAdminSettings < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :rails_admin_settings do |t|
4
+ t.boolean :enabled, default: true
5
+ t.string :kind, null: false, default: 'string'
6
+ t.string :ns, default: 'main'
7
+ t.string :key, null: false
8
+ if Object.const_defined?('Geocoder')
9
+ t.float :latitude
10
+ t.float :longitude
11
+ end
12
+ t.text :raw
13
+ t.string :label
14
+ if defined?(Paperclip)
15
+ t.attachment :file
16
+ elsif defined?(CarrierWave)
17
+ t.string :file
18
+ end
19
+ t.timestamps
20
+ end
21
+
22
+ add_index :rails_admin_settings, :key
23
+ add_index :rails_admin_settings, [:ns, :key], unique: true
24
+ end
25
+ end
@@ -0,0 +1,5 @@
1
+ class AddAppName < ActiveRecord::Migration[5.0]
2
+ def change
3
+ Settings.app_name = "The Core by Gabriele Tassoni"
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ module Abilities
2
+ class ThecoreUiRailsAdmin
3
+ include CanCan::Ability
4
+ def initialize user
5
+ puts "LAMMEEEEEEEEERDAAAAAAAAAAAAAAAAAAAAAAAA"
6
+ # No one is allowed to add or destroy settings
7
+ # just list or edit existing
8
+ cannot :create, RailsAdminSettings::Setting
9
+ cannot :destroy, RailsAdminSettings::Setting
10
+ cannot :show, RailsAdminSettings::Setting
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ module RailsAdminSettings
2
+ module RailsAdminExtensionConfig
3
+ def self.included(base)
4
+ # IMPORTANT: To extend rails admin section in model, directly, instead of using concerns, I can
5
+ # extend the included method. Be sure to use a different module name, otherwis it will be overwritten
6
+ # See thecore_settings_rails_admin_model_extensions.rb initializer for a reference
7
+ # on how to extend rails_admin section of a model previously defined (say it's defined in another gem)
8
+ if base.respond_to?(:rails_admin)
9
+ base.rails_admin do
10
+ navigation_icon 'fa fa-cogs'
11
+ end
12
+ end
13
+
14
+ def display_name
15
+ "#{I18n.t "settings.namespaces.#{ns}", default: ns.titleize}: #{I18n.t "settings.names.#{name}", default: name.titleize}"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -2,8 +2,9 @@ require 'active_support/concern'
2
2
 
3
3
  module ThecoreUiRailsAdminUser
4
4
  extend ActiveSupport::Concern
5
-
5
+
6
6
  included do
7
+
7
8
  RailsAdmin.config do |config|
8
9
  config.model self.name.underscore.capitalize.constantize do
9
10
  # rails_admin do
@@ -24,29 +25,12 @@ module ThecoreUiRailsAdminUser
24
25
  bindings[:view].current_user.admin? && bindings[:view].current_user.id != bindings[:object].id
25
26
  end
26
27
  end
27
- # field :locked do
28
- # visible do
29
- # bindings[:view].current_user.admin? && bindings[:view].current_user.id != bindings[:object].id
30
- # end
31
- # end
32
- # field :roles, :enum do
33
- # visible !ROLES.blank?
34
- # pretty_value do # used in list view columns and show views, defaults to formatted_value for non-association fields
35
- # begin
36
- # value.map { |v| bindings[:object].roles_enum.rassoc(v)[0] rescue nil }.compact.join ", "
37
- # rescue
38
- # I18n.t "roles.#{ROLES[value.to_i - 1]}"
39
- # end
40
- # end
41
- # export_value do
42
- # begin
43
- # value.map { |v| bindings[:object].roles_enum.rassoc(v)[0] rescue nil }.compact.join ", " # used in exports, where no html/data is allowed
44
- # rescue
45
- # I18n.t "roles.#{ROLES[value.to_i - 1]}"
46
- # end
47
- # end
48
- # queryable false
49
- # end
28
+ field :locked do
29
+ visible do
30
+ bindings[:view].current_user.admin? && bindings[:view].current_user.id != bindings[:object].id
31
+ end
32
+ end
33
+ field :roles
50
34
  # include UserRailsAdminConcern
51
35
 
52
36
  # Fields only in lists and forms
@@ -4,7 +4,12 @@ ENV['RAILS_ADMIN_THEME'] ||= 'rollincode'
4
4
  require 'rails_admin_rollincode'
5
5
  require 'rails_admin'
6
6
  require 'rails_admin-i18n'
7
+ require 'safe_yaml'
7
8
  require 'rails_admin_toggleable'
9
+ require 'rails_admin_settings'
10
+ require 'concerns/rails_admin_requirements'
11
+ # Abilities
12
+ require 'abilities/thecore_ui_rails_admin'
8
13
  # Rails Admin Buildups
9
14
  require 'jquery-ui-rails'
10
15
  require 'bootstrap-sass'
@@ -16,5 +21,7 @@ require 'concerns/thecore_rails_admin_bulk_delete_concern'
16
21
  require "thecore_ui_rails_admin/engine"
17
22
 
18
23
  module ThecoreUiRailsAdmin
19
- # Your code goes here...
24
+ # Rails Admin Settings
25
+ SafeYAML::OPTIONS[:default_mode] = :safe
26
+ SafeYAML::OPTIONS[:deserialize_symbols] = false
20
27
  end
@@ -1,11 +1,7 @@
1
1
  module ThecoreUiRailsAdmin
2
2
  class Engine < ::Rails::Engine
3
- # This code makes the static assets present in this
4
- # engine available to main app, even if this gem is
5
- # just a dependency of another engine
6
- initializer 'thecore_ui_rails_admin.load_static_assets' do |app|
7
- # puts "Loading static assets for #{root}"
8
- app.middleware.use ::ActionDispatch::Static, "#{root}/app"
3
+ initializer :assets do |config|
4
+ Rails.application.config.assets.paths << root.join("app", "assets", "stylesheets", "thecore_ui_rails_admin")
9
5
  end
10
6
  initializer 'thecore_ui_rails_admin.add_to_migrations' do |app|
11
7
  unless app.root.to_s.match root.to_s
@@ -1,3 +1,3 @@
1
1
  module ThecoreUiRailsAdmin
2
- VERSION = '2.1.5'
2
+ VERSION = '2.1.8'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thecore_ui_rails_admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.5
4
+ version: 2.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriele Tassoni
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-15 00:00:00.000000000 Z
11
+ date: 2020-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thecore_ui_commons
@@ -122,6 +122,34 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0.7'
125
+ - !ruby/object:Gem::Dependency
126
+ name: safe_yaml
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rails_admin_settings
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1.5'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.5'
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: jquery-ui-rails
127
155
  requirement: !ruby/object:Gem::Requirement
@@ -148,17 +176,19 @@ files:
148
176
  - README.md
149
177
  - Rakefile
150
178
  - app/assets/config/thecore_ui_rails_admin_manifest.js
151
- - app/assets/javascripts/rails_admin/custom/timer.js
152
- - app/assets/javascripts/rails_admin/custom/ui.js
153
- - app/assets/javascripts/rails_admin/ra.widgets.coffee
154
- - app/assets/stylesheets/animate.css
155
- - app/assets/stylesheets/devise.scss
156
- - app/assets/stylesheets/mixins.scss
157
- - app/assets/stylesheets/rails_admin/flashing.scss
158
- - app/assets/stylesheets/rails_admin/theming.scss
159
- - app/assets/stylesheets/rails_admin/togglable-sidebar.scss
160
- - app/assets/stylesheets/thecore_rails_admin.scss
179
+ - app/assets/javascripts/thecore_ui_rails_admin/thecore.js
180
+ - app/assets/javascripts/thecore_ui_rails_admin/thecore_rails_admin.js
181
+ - app/assets/stylesheets/thecore_ui_rails_admin/animate.css
182
+ - app/assets/stylesheets/thecore_ui_rails_admin/common.scss
183
+ - app/assets/stylesheets/thecore_ui_rails_admin/devise.scss
184
+ - app/assets/stylesheets/thecore_ui_rails_admin/flashing.scss
185
+ - app/assets/stylesheets/thecore_ui_rails_admin/mixins.scss
186
+ - app/assets/stylesheets/thecore_ui_rails_admin/thecore.scss
187
+ - app/assets/stylesheets/thecore_ui_rails_admin/thecore_rails_admin.scss
188
+ - app/assets/stylesheets/thecore_ui_rails_admin/togglable-sidebar.scss
161
189
  - app/controllers/pages_controller.rb
190
+ - app/helpers/devise_bootstrap_errors_helper.rb
191
+ - app/helpers/thecore_helper.rb
162
192
  - app/views/layouts/rails_admin/_navigation.html.haml
163
193
  - app/views/layouts/rails_admin/_secondary_navigation.html.haml
164
194
  - app/views/layouts/rails_admin/_sidebar_navigation.html.haml
@@ -169,6 +199,7 @@ files:
169
199
  - app/views/rails_admin/main/_modal_interaction.html.erb
170
200
  - app/views/rails_admin/main/dashboard.html.haml
171
201
  - app/views/rails_admin/main/index.html.haml
202
+ - app/views/shared/_flash.html.erb
172
203
  - config/initializers/rails_admin.rb
173
204
  - config/initializers/thecore_concern.rb
174
205
  - config/initializers/thecore_ui_rails_admin_app_configs.rb
@@ -180,7 +211,12 @@ files:
180
211
  - config/locales/it.main.yml
181
212
  - config/locales/it.rails_admin.yml
182
213
  - config/locales/it.rollincode.yml
214
+ - config/locales/thecore_settings.it.yml
183
215
  - config/routes.rb
216
+ - db/migrate/20161227101954_create_rails_admin_settings.rb
217
+ - db/migrate/20161227101956_add_app_name.rb
218
+ - lib/abilities/thecore_ui_rails_admin.rb
219
+ - lib/concerns/rails_admin_requirements.rb
184
220
  - lib/concerns/thecore_rails_admin_bulk_delete_concern.rb
185
221
  - lib/concerns/thecore_rails_admin_export_concern.rb
186
222
  - lib/concerns/thecore_ui_rails_admin_user.rb
@@ -1,135 +0,0 @@
1
- (function (root, factory) {
2
- 'use strict'
3
- if (typeof define === 'function' && define.amd) define([], factory)
4
- else if (typeof exports === 'object') module.exports = factory()
5
- else root.Timer = factory()
6
- }(this, function () {
7
- 'use strict'
8
-
9
- var defaultOptions = {
10
- tick : 1,
11
- onstart : null,
12
- ontick : null,
13
- onpause : null,
14
- onstop : null,
15
- onend : null
16
- }
17
-
18
- var Timer = function (options) {
19
- if (!(this instanceof Timer)) return new Timer(options)
20
- this._ = {
21
- id : +new Date,
22
- options : {},
23
- duration : 0,
24
- status : 'initialized',
25
- start : 0,
26
- measures : []
27
- }
28
- for (var prop in defaultOptions) this._.options[prop] = defaultOptions[prop]
29
- this.options(options)
30
- }
31
-
32
- Timer.prototype.start = function (duration) {
33
- if (!+duration && !this._.duration) return this
34
- duration && (duration *= 1000)
35
- if (this._.timeout && this._.status === 'started') return this
36
- this._.duration = duration || this._.duration
37
- this._.timeout = setTimeout(end.bind(this), this._.duration)
38
- if (typeof this._.options.ontick === 'function')
39
- this._.interval = setInterval(function () {
40
- trigger.call(this, 'ontick', this.getDuration())
41
- }.bind(this), +this._.options.tick * 1000)
42
- this._.start = +new Date
43
- this._.status = 'started'
44
- trigger.call(this, 'onstart', this.getDuration())
45
- return this
46
- }
47
-
48
- Timer.prototype.pause = function () {
49
- if (this._.status !== 'started') return this
50
- this._.duration -= (+new Date - this._.start)
51
- clear.call(this, false)
52
- this._.status = 'paused'
53
- trigger.call(this, 'onpause')
54
- return this
55
- }
56
-
57
- Timer.prototype.stop = function () {
58
- if (!/started|paused/.test(this._.status)) return this
59
- clear.call(this, true)
60
- this._.status = 'stopped'
61
- trigger.call(this, 'onstop')
62
- return this
63
- }
64
-
65
- Timer.prototype.getDuration = function () {
66
- if (this._.status === 'started')
67
- return this._.duration - (+new Date - this._.start)
68
- if (this._.status === 'paused') return this._.duration
69
- return 0
70
- }
71
-
72
- Timer.prototype.getStatus = function () {
73
- return this._.status
74
- }
75
-
76
- Timer.prototype.options = function (option, value) {
77
- if (option && value) this._.options[option] = value
78
- if (!value && typeof option === 'object')
79
- for (var prop in option)
80
- if (this._.options.hasOwnProperty(prop))
81
- this._.options[prop] = option[prop]
82
- return this
83
- }
84
-
85
- Timer.prototype.on = function (option, value) {
86
- if (typeof option !== 'string' || typeof value !== 'function') return this
87
- if (!(/^on/).test(option))
88
- option = 'on' + option
89
- if (this._.options.hasOwnProperty(option))
90
- this._.options[option] = value
91
- return this
92
- }
93
-
94
- Timer.prototype.off = function (option) {
95
- if (typeof option !== 'string') return this
96
- option = option.toLowerCase()
97
- if (option === 'all') {
98
- this._.options = defaultOptions
99
- return this
100
- }
101
- if (!(/^on/).test(option)) option = 'on' + option
102
- if (this._.options.hasOwnProperty(option))
103
- this._.options[option] = defaultOptions[option]
104
- return this
105
- }
106
-
107
- Timer.prototype.measureStart = function (label) {
108
- this._.measures[label || ''] = +new Date
109
- return this
110
- }
111
-
112
- Timer.prototype.measureStop = function (label) {
113
- return +new Date - this._.measures[label || '']
114
- }
115
-
116
- function end () {
117
- clear.call(this)
118
- this._.status = 'stopped'
119
- trigger.call(this, 'onend')
120
- }
121
-
122
- function trigger (event) {
123
- var callback = this._.options[event],
124
- args = [].slice.call(arguments, 1)
125
- typeof callback === 'function' && callback.apply(this, args)
126
- }
127
-
128
- function clear (clearDuration) {
129
- clearTimeout(this._.timeout)
130
- clearInterval(this._.interval)
131
- if (clearDuration === true) this._.duration = 0
132
- }
133
-
134
- return Timer
135
- }))
@@ -1,233 +0,0 @@
1
- $(document).on 'rails_admin.dom_ready', (e, content) ->
2
- content = if content then content else $('form')
3
-
4
- if content.length # don't waste time otherwise
5
-
6
- # colorpicker
7
-
8
- content.find('[data-color]').each ->
9
- that = this
10
- $(this).ColorPicker
11
- color: $(that).val()
12
- onShow: (el) ->
13
- $(el).fadeIn(500)
14
- false
15
- onHide: (el) ->
16
- $(el).fadeOut(500)
17
- false
18
- onChange: (hsb, hex, rgb) ->
19
- $(that).val(hex)
20
- $(that).css('backgroundColor', '#' + hex)
21
-
22
- # datetime picker
23
- $.fn.datetimepicker.defaults.icons =
24
- time: 'fa fa-clock'
25
- date: 'fa fa-calendar'
26
- up: 'fa fa-chevron-up'
27
- down: 'fa fa-chevron-down'
28
- previous: 'fa fa-angle-double-left'
29
- next: 'fa fa-angle-double-right'
30
- today: 'fa fa-dot-circle'
31
- clear: 'fa fa-trash'
32
- close: 'fa fa-times'
33
-
34
- content.find('[data-datetimepicker]').each ->
35
- options = $(this).data('options')
36
- $.extend(options, {locale: RailsAdmin.I18n.locale})
37
- $(this).datetimepicker options
38
-
39
- # enumeration
40
-
41
- content.find('[data-enumeration]').each ->
42
- if $(this).is('[multiple]')
43
- $(this).filteringMultiselect $(this).data('options')
44
- else
45
- $(this).filteringSelect $(this).data('options')
46
-
47
- # fileupload
48
-
49
- content.find('[data-fileupload]').each ->
50
- input = this
51
- $(this).on 'click', ".delete input[type='checkbox']", ->
52
- $(input).children('.toggle').toggle('slow')
53
-
54
- # fileupload-preview
55
-
56
- content.find('[data-fileupload]').change ->
57
- input = this
58
- image_container = $("#" + input.id).parent().children(".preview")
59
- unless image_container.length
60
- image_container = $("#" + input.id).parent().prepend($('<img />').addClass('preview').addClass('img-thumbnail')).find('img.preview')
61
- image_container.parent().find('img:not(.preview)').hide()
62
- ext = $("#" + input.id).val().split('.').pop().toLowerCase()
63
- if input.files and input.files[0] and $.inArray(ext, ['gif', 'png', 'jpg', 'jpeg', 'bmp']) != -1
64
- reader = new FileReader()
65
- reader.onload = (e) ->
66
- image_container.attr "src", e.target.result
67
- reader.readAsDataURL input.files[0]
68
- image_container.show()
69
- else
70
- image_container.hide()
71
-
72
- # filtering-multiselect
73
-
74
- content.find('[data-filteringmultiselect]').each ->
75
- $(this).filteringMultiselect $(this).data('options')
76
- if $(this).parents("#modal").length # hide link if we already are inside a dialog (endless issues on nested dialogs with JS)
77
- $(this).siblings('.btn').remove()
78
- else
79
- $(this).parents('.control-group').first().remoteForm()
80
-
81
- # filtering-select
82
-
83
- content.find('[data-filteringselect]').each ->
84
- $(this).filteringSelect $(this).data('options')
85
- if $(this).parents("#modal").length # hide link if we already are inside a dialog (endless issues on nested dialogs with JS)
86
- $(this).siblings('.btn').remove()
87
- else
88
- $(this).parents('.control-group').first().remoteForm()
89
-
90
- # nested-many
91
-
92
- content.find('[data-nestedmany]').each ->
93
- field = $(this).parents('.control-group').first()
94
- nav = field.find('> .controls > .nav')
95
- tab_content = field.find('> .tab-content')
96
- toggler = field.find('> .controls > .btn-group > .toggler')
97
- # add each nested field to a tab-pane and reference it in the nav
98
- tab_content.children('.fields:not(.tab-pane)').addClass('tab-pane').each ->
99
- $(this).attr('id', 'unique-id-' + (new Date().getTime()) + Math.floor(Math.random() * 100000)) # some elements are created on the same ms
100
- nav.append('<li><a data-toggle="tab" href="#' + this.id + '">' + $(this).children('.object-infos').data('object-label') + '</a></li>')
101
- # only if no tab is set to active
102
- if nav.find("> li.active").length == 0
103
- # init first tab, toggler and tab_content/tabs visibility
104
- nav.find("> li > a[data-toggle='tab']:first").tab('show')
105
- if nav.children().length == 0
106
- nav.hide()
107
- tab_content.hide()
108
- toggler.addClass('disabled').removeClass('active').children('i').addClass('icon-chevron-right')
109
- else
110
- if toggler.hasClass('active')
111
- nav.show()
112
- tab_content.show()
113
- toggler.children('i').addClass('icon-chevron-down')
114
- else
115
- nav.hide()
116
- tab_content.hide()
117
- toggler.children('i').addClass('icon-chevron-right')
118
-
119
- # nested-one
120
-
121
- content.find('[data-nestedone]').each ->
122
- field = $(this).parents('.control-group').first()
123
- nav = field.find("> .controls > .nav")
124
- tab_content = field.find("> .tab-content")
125
- toggler = field.find('> .controls > .btn-group > .toggler')
126
- tab_content.children(".fields:not(.tab-pane)").addClass('tab-pane active').each ->
127
- # Convert the "add nested field" button to just showing the title of the new model
128
- field.find('> .controls .add_nested_fields').removeClass('add_nested_fields').html($(this).children('.object-infos').data('object-label'))
129
- nav.append('<li><a data-toggle="tab" href="#' + this.id + '">' + $(this).children('.object-infos').data('object-label') + '</a></li>')
130
- first_tab = nav.find("> li > a[data-toggle='tab']:first")
131
- first_tab.tab('show')
132
- field.find("> .controls > [data-target]:first").html('<i class="icon-white"></i> ' + first_tab.html())
133
- nav.hide()
134
- if nav.children().length == 0
135
- nav.hide()
136
- tab_content.hide()
137
- toggler.addClass('disabled').removeClass('active').children('i').addClass('icon-chevron-right')
138
- else
139
- if toggler.hasClass('active')
140
- toggler.children('i').addClass('icon-chevron-down')
141
- tab_content.show()
142
- else
143
- toggler.children('i').addClass('icon-chevron-right')
144
- tab_content.hide()
145
-
146
- # polymorphic-association
147
-
148
- content.find('[data-polymorphic]').each ->
149
- type_select = $(this)
150
- field = type_select.parents('.control-group').first()
151
- object_select = field.find('select').last()
152
- urls = type_select.data('urls')
153
- type_select.on 'change', (e) ->
154
- if $(this).val() is ''
155
- object_select.html('<option value=""></option>')
156
- else
157
- $.ajax
158
- url: urls[type_select.val()]
159
- data:
160
- compact: true
161
- all: true
162
- beforeSend: (xhr) ->
163
- xhr.setRequestHeader("Accept", "application/json")
164
- success: (data, status, xhr) ->
165
- html = $('<option></option>')
166
- $(data).each (i, el) ->
167
- option = $('<option></option>')
168
- option.attr('value', el.id)
169
- option.text(el.label)
170
- html = html.add(option)
171
- object_select.html(html)
172
-
173
- # ckeditor
174
-
175
- goCkeditors = ->
176
- content.find('[data-richtext=ckeditor]').not('.ckeditored').each (index, domEle) ->
177
- try
178
- if instance = window.CKEDITOR.instances[this.id]
179
- instance.destroy(true)
180
- window.CKEDITOR.replace(this, $(this).data('options'))
181
- $(this).addClass('ckeditored')
182
-
183
- $editors = content.find('[data-richtext=ckeditor]').not('.ckeditored')
184
- if $editors.length
185
- if not window.CKEDITOR
186
- options = $editors.first().data('options')
187
- window.CKEDITOR_BASEPATH = options['base_location']
188
- $.getScript options['jspath'], (script, textStatus, jqXHR) =>
189
- goCkeditors()
190
- else
191
- goCkeditors()
192
-
193
- #codemirror
194
-
195
- goCodeMirrors = (array) =>
196
- array.each (index, domEle) ->
197
- options = $(this).data('options')
198
- textarea = this
199
- $.getScript options['locations']['mode'], (script, textStatus, jqXHR) ->
200
- $('head').append('<link href="' + options['locations']['theme'] + '" rel="stylesheet" media="all" type="text\/css">')
201
- CodeMirror.fromTextArea(textarea, options['options'])
202
- $(textarea).addClass('codemirrored')
203
-
204
- array = content.find('[data-richtext=codemirror]').not('.codemirrored')
205
- if array.length
206
- @array = array
207
- if not window.CodeMirror
208
- options = $(array[0]).data('options')
209
- $('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
210
- $.getScript options['jspath'], (script, textStatus, jqXHR) =>
211
- goCodeMirrors(@array)
212
- else
213
- goCodeMirrors(@array)
214
-
215
- # bootstrap_wysihtml5
216
-
217
- goBootstrapWysihtml5s = (array, config_options) =>
218
- array.each ->
219
- $(@).addClass('bootstrap-wysihtml5ed')
220
- $(@).closest('.controls').addClass('well')
221
- $(@).wysihtml5(config_options)
222
-
223
- array = content.find('[data-richtext=bootstrap-wysihtml5]').not('.bootstrap-wysihtml5ed')
224
- if array.length
225
- @array = array
226
- options = $(array[0]).data('options')
227
- config_options = $.parseJSON(options['config_options'])
228
- if not window.wysihtml5
229
- $('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
230
- $.getScript options['jspath'], (script, textStatus, jqXHR) =>
231
- goBootstrapWysihtml5s(@array, config_options)
232
- else
233
- goBootstrapWysihtml5s(@array, config_options)