tramway 0.1.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/tramway/application.js +1 -0
- data/app/assets/stylesheets/tramway/application.sass +0 -1
- data/app/controllers/tramway/application_controller.rb +6 -6
- data/app/controllers/{concerns → tramway/concerns}/auth_management.rb +1 -1
- data/app/controllers/{concerns → tramway/concerns}/filtering.rb +1 -1
- data/app/controllers/tramway/sessions_controller.rb +2 -2
- data/app/controllers/tramway/welcome_controller.rb +3 -3
- data/app/decorators/tramway/application_decorator.rb +1 -1
- data/app/decorators/tramway/associations/object_helper.rb +2 -2
- data/app/decorators/tramway/concerns/attributes_decorator_helper.rb +4 -4
- data/app/decorators/tramway/user_decorator.rb +1 -1
- data/app/forms/tramway/application_form.rb +1 -1
- data/app/forms/tramway/application_forms/submit_helper.rb +1 -1
- data/app/forms/tramway/extendable_forms_helpers/validators.rb +2 -2
- data/app/helpers/tramway/additional_buttons_builder.rb +1 -1
- data/app/helpers/tramway/application_helper.rb +1 -1
- data/app/helpers/tramway/frontend_helper.rb +1 -1
- data/app/helpers/tramway/inputs/associations_helper.rb +2 -2
- data/app/helpers/tramway/inputs_helper.rb +2 -2
- data/app/helpers/tramway/records_helper.rb +2 -2
- data/app/helpers/tramway/state_machine_buttons_helper.rb +2 -2
- data/app/models/tramway/application_record.rb +3 -1
- data/app/models/tramway/user.rb +1 -6
- data/app/views/layouts/tramway/application.html.haml +3 -3
- data/app/views/tramway/shared/show/_attribute_tr.html.haml +1 -1
- data/lib/tramway/error.rb +1 -1
- data/lib/tramway/generators/install_generator.rb +1 -1
- data/lib/tramway/navbar.rb +2 -2
- data/lib/tramway/records_models.rb +18 -10
- data/lib/tramway/singleton_models.rb +1 -1
- data/lib/tramway/spec/helpers/navbar_helper.rb +1 -1
- data/lib/tramway/spec/helpers/tramway_helpers.rb +2 -2
- data/lib/tramway/version.rb +1 -1
- data/lib/tramway/yaml/errors.yml +1 -0
- data/lib/tramway.rb +1 -1
- metadata +29 -37
- data/app/assets/stylesheets/tramway/bootstrap-datepicker-1.8.0.css +0 -477
- data/config/initializers/carrierwave.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0eb13dc9d0261ff482d46394bedd03ffdfd36c6927be19a27bd88698a2a5fc9
|
4
|
+
data.tar.gz: bc8d1e80575478ae9b27e23277b5f289e7d06dc533114b87a2a67f43f1532c40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ed1b9540aa5d5b712a8c113813782344a55758f85176668d6f9f3f1b0736c6d270a59d650ec1b4d2e00f79800bf8124c7ecdacec8da07eea87b2869d2fef455
|
7
|
+
data.tar.gz: f6ad4f133b558760a43cbc0fb7412004ea9259bf7f613fb47a0a630f55a09c6bcf2546de99c0bb78c41f86cb3b47fa64f472579e23cf24d0406da27ed9236d04
|
@@ -5,13 +5,13 @@ load "#{Tramway.root}/lib/tramway/class_name_helpers.rb"
|
|
5
5
|
load "#{Tramway.root}/lib/tramway/record_routes_helper.rb"
|
6
6
|
|
7
7
|
# FIXME: configurate load_path
|
8
|
-
load "#{Tramway.root}/app/controllers/concerns/auth_management.rb"
|
9
|
-
load "#{Tramway.root}/app/controllers/concerns/filtering.rb"
|
8
|
+
load "#{Tramway.root}/app/controllers/tramway/concerns/auth_management.rb"
|
9
|
+
load "#{Tramway.root}/app/controllers/tramway/concerns/filtering.rb"
|
10
10
|
|
11
11
|
class Tramway::ApplicationController < ActionController::Base
|
12
12
|
include Tramway::ClassNameHelpers
|
13
|
-
include Tramway::AuthManagement
|
14
|
-
include Tramway::Filtering
|
13
|
+
include Tramway::Concerns::AuthManagement
|
14
|
+
include Tramway::Concerns::Filtering
|
15
15
|
include Tramway::RecordRoutesHelper
|
16
16
|
|
17
17
|
before_action :application
|
@@ -83,8 +83,8 @@ class Tramway::ApplicationController < ActionController::Base
|
|
83
83
|
:application,
|
84
84
|
:create_form_for_role,
|
85
85
|
role: current_user.role,
|
86
|
-
model_class
|
87
|
-
class_name:
|
86
|
+
model_class:,
|
87
|
+
class_name:
|
88
88
|
)
|
89
89
|
end
|
90
90
|
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# FIXME: configurate load_path
|
4
|
-
load "#{Tramway.root}/app/controllers/concerns/auth_management.rb"
|
4
|
+
load "#{Tramway.root}/app/controllers/tramway/concerns/auth_management.rb"
|
5
5
|
|
6
6
|
class Tramway::SessionsController < Tramway::ApplicationController
|
7
7
|
before_action :redirect_if_signed_in, except: :destroy
|
8
8
|
|
9
9
|
# FIXME: should be included in Tramway::ApplicationController
|
10
|
-
include Tramway::AuthManagement
|
10
|
+
include Tramway::Concerns::AuthManagement
|
11
11
|
|
12
12
|
def new
|
13
13
|
@session_form = Tramway::SessionForm.new Tramway::User.new
|
@@ -1,17 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# FIXME: configurate load_path
|
4
|
-
load "#{Tramway.root}/app/controllers/concerns/auth_management.rb"
|
4
|
+
load "#{Tramway.root}/app/controllers/tramway/concerns/auth_management.rb"
|
5
5
|
|
6
6
|
class Tramway::WelcomeController < Tramway::ApplicationController
|
7
7
|
skip_before_action :check_available!
|
8
8
|
|
9
9
|
# FIXME: should be included in Tramway::ApplicationController
|
10
|
-
include Tramway::AuthManagement
|
10
|
+
include Tramway::Concerns::AuthManagement
|
11
11
|
|
12
12
|
before_action :authenticate_user!
|
13
13
|
|
14
14
|
def index
|
15
|
-
instance_exec(
|
15
|
+
instance_exec(&Tramway.welcome_page_actions) if Tramway.welcome_page_actions.present?
|
16
16
|
end
|
17
17
|
end
|
@@ -96,7 +96,7 @@ class Tramway::ApplicationDecorator
|
|
96
96
|
|
97
97
|
def associations(associations_type)
|
98
98
|
object.class.reflect_on_all_associations(associations_type).map do |association|
|
99
|
-
association unless association.name == :
|
99
|
+
association unless association.name == :versions
|
100
100
|
end.compact
|
101
101
|
end
|
102
102
|
|
@@ -21,7 +21,7 @@ module Tramway::Associations::ObjectHelper
|
|
21
21
|
|
22
22
|
Tramway::Error.raise_error(
|
23
23
|
:tramway, :associations, :class_helper, :model_does_not_have_association,
|
24
|
-
object_class: object.class, association_name:
|
24
|
+
object_class: object.class, association_name:
|
25
25
|
)
|
26
26
|
end
|
27
27
|
|
@@ -43,7 +43,7 @@ module Tramway::Associations::ObjectHelper
|
|
43
43
|
rescue StandardError
|
44
44
|
Tramway::Error.raise_error(
|
45
45
|
:tramway, :associations, :object_helper, :habtm_add_class_not_defined,
|
46
|
-
class: form_class, association_name:
|
46
|
+
class: form_class, association_name:
|
47
47
|
)
|
48
48
|
end
|
49
49
|
end
|
@@ -17,7 +17,7 @@ module Tramway::Concerns::AttributesDecoratorHelper
|
|
17
17
|
end
|
18
18
|
|
19
19
|
BASE64_REGEXP = %r{^(?:[a-zA-Z0-9+/]{4})*(?:|(?:[a-zA-Z0-9+/]{3}=)|
|
20
|
-
(?:[a-zA-Z0-9+/]{2}==)|(?:[a-zA-Z0-9+/]{1}===))$}x
|
20
|
+
(?:[a-zA-Z0-9+/]{2}==)|(?:[a-zA-Z0-9+/]{1}===))$}x
|
21
21
|
|
22
22
|
def image_view(original, thumb: nil, filename: nil)
|
23
23
|
return unless original.present?
|
@@ -35,7 +35,7 @@ module Tramway::Concerns::AttributesDecoratorHelper
|
|
35
35
|
content_tag(:div) do
|
36
36
|
concat filename
|
37
37
|
concat ' '
|
38
|
-
concat download_button(filename
|
38
|
+
concat download_button(filename:, original:) if filename
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -81,10 +81,10 @@ module Tramway::Concerns::AttributesDecoratorHelper
|
|
81
81
|
rescue NoMethodError => e
|
82
82
|
Tramway::Error.raise_error(
|
83
83
|
:tramway, :concerns, :attributes_decorator_helper, :you_should_mount_photo_uploader,
|
84
|
-
message: e.message, attribute_name:
|
84
|
+
message: e.message, attribute_name:
|
85
85
|
)
|
86
86
|
end
|
87
|
-
concat download_button(filename
|
87
|
+
concat download_button(filename:, original:) if filename
|
88
88
|
end
|
89
89
|
|
90
90
|
def download_button(filename:, original:)
|
@@ -33,7 +33,7 @@ class Tramway::UserDecorator < Tramway::ApplicationDecorator
|
|
33
33
|
content_tag(:pre) do
|
34
34
|
id = "credential_text_#{object.id}"
|
35
35
|
|
36
|
-
concat(content_tag(:span, id:
|
36
|
+
concat(content_tag(:span, id:) do
|
37
37
|
text = "URL: #{ENV['PROJECT_URL']}\n"
|
38
38
|
text += "Email: #{object.email}\n"
|
39
39
|
"#{text}Password: "
|
@@ -97,7 +97,7 @@ class Tramway::ApplicationForm
|
|
97
97
|
@@model_class = model_class_name.constantize
|
98
98
|
rescue StandardError
|
99
99
|
Tramway::Error.raise_error :tramway, :application_form, :model_class, :there_is_not_model_class,
|
100
|
-
name
|
100
|
+
name:, model_class_name:
|
101
101
|
end
|
102
102
|
end
|
103
103
|
end
|
@@ -9,7 +9,7 @@ module Tramway::ApplicationForms::SubmitHelper
|
|
9
9
|
collecting_associations_errors unless result
|
10
10
|
end
|
11
11
|
else
|
12
|
-
Tramway::Error.raise_error(:
|
12
|
+
Tramway::Error.raise_error(:application_form, :submit, :params_should_not_be_nil)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -19,7 +19,7 @@ module Tramway::ExtendableFormsHelpers::Validators
|
|
19
19
|
property_name,
|
20
20
|
I18n.t(
|
21
21
|
"activerecord.errors.models.#{model.class.name.underscore}.attributes.default.#{validation[0]}",
|
22
|
-
value:
|
22
|
+
value:
|
23
23
|
)
|
24
24
|
)
|
25
25
|
end
|
@@ -33,7 +33,7 @@ module Tramway::ExtendableFormsHelpers::Validators
|
|
33
33
|
property_name,
|
34
34
|
I18n.t(
|
35
35
|
"activerecord.errors.models.#{model.class.name.underscore}.attributes.default.#{validation[0]}",
|
36
|
-
value:
|
36
|
+
value:
|
37
37
|
)
|
38
38
|
)
|
39
39
|
end
|
@@ -4,7 +4,7 @@ module Tramway::AdditionalButtonsBuilder
|
|
4
4
|
def build_button(button)
|
5
5
|
options = button[:options] || {}
|
6
6
|
style = 'margin-right: 8px'
|
7
|
-
concat(link_to(button[:url], method: button[:method], class: "btn btn-#{button[:color]} btn-xs", style
|
7
|
+
concat(link_to(button[:url], method: button[:method], class: "btn btn-#{button[:color]} btn-xs", style:,
|
8
8
|
**options) do
|
9
9
|
button[:inner]&.call
|
10
10
|
end)
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Tramway::ApplicationHelper
|
4
4
|
include FontAwesome5::Rails::IconHelper
|
5
5
|
include SmartButtons
|
6
|
-
include Tramway::AuthManagement
|
6
|
+
include Tramway::Concerns::AuthManagement
|
7
7
|
|
8
8
|
helpers = Dir["#{Tramway.root}/app/helpers/tramway/*_helper.rb"]
|
9
9
|
helpers.each do |helper|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Tramway::FrontendHelper
|
4
4
|
def react_params(form, action, method)
|
5
|
-
form.properties.each_with_object({ action: react_params_url(form, action), method
|
5
|
+
form.properties.each_with_object({ action: react_params_url(form, action), method:,
|
6
6
|
authenticity_token: form_authenticity_token }) do |property, hash|
|
7
7
|
case property[1]
|
8
8
|
when :association
|
@@ -18,13 +18,13 @@ module Tramway::Inputs::AssociationsHelper
|
|
18
18
|
def check_valid_association(full_class_name_association)
|
19
19
|
unless full_class_name_association
|
20
20
|
Tramway::Error.raise_error(
|
21
|
-
:tramway, :inputs_helpers, :association_params, :defined_with_property_method, property:
|
21
|
+
:tramway, :inputs_helpers, :association_params, :defined_with_property_method, property:
|
22
22
|
)
|
23
23
|
end
|
24
24
|
return unless full_class_name_association.is_a? Array
|
25
25
|
|
26
26
|
Tramway::Error.raise_error(
|
27
|
-
:tramway, :inputs_helpers, :association_params, :used_polymorphic_association, property:
|
27
|
+
:tramway, :inputs_helpers, :association_params, :used_polymorphic_association, property:
|
28
28
|
)
|
29
29
|
end
|
30
30
|
end
|
@@ -9,7 +9,7 @@ module Tramway::InputsHelper
|
|
9
9
|
|
10
10
|
value = current_user&.id if full_class_name_association.to_s == 'Tramway::User'
|
11
11
|
|
12
|
-
build_input_attributes(object
|
12
|
+
build_input_attributes(object:, property:, options:,
|
13
13
|
value: build_value_for_association(form_object, property, value),
|
14
14
|
collection: build_collection_for_association(form_object, property),
|
15
15
|
include_blank: true,
|
@@ -17,7 +17,7 @@ module Tramway::InputsHelper
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def polymorphic_association_params(object:, form_object:, property:, value:, options: {})
|
20
|
-
build_input_attributes object
|
20
|
+
build_input_attributes object:, property:,
|
21
21
|
selected: build_value_for_polymorphic_association(form_object, property, value),
|
22
22
|
value: build_value_for_polymorphic_association(form_object, property, value),
|
23
23
|
collection: build_collection_for_polymorphic_association(form_object, property),
|
@@ -49,9 +49,9 @@ module Tramway::RecordsHelper
|
|
49
49
|
|
50
50
|
def index_path_of_model(model_class, tab, filter)
|
51
51
|
if tab
|
52
|
-
records_path model: model_class, filter
|
52
|
+
records_path model: model_class, filter:, scope: tab
|
53
53
|
else
|
54
|
-
records_path model: model_class, filter:
|
54
|
+
records_path model: model_class, filter:
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -36,7 +36,7 @@ module Tramway::StateMachineButtonsHelper
|
|
36
36
|
event = options[:event]
|
37
37
|
|
38
38
|
concat(
|
39
|
-
patch_button(patch_button_options(object, event, options)) do
|
39
|
+
patch_button(**patch_button_options(object, event, options)) do
|
40
40
|
model = object.model
|
41
41
|
class_name = model.class.name.underscore
|
42
42
|
actual_event = model.aasm(options[:state_method]).events.select { |ev| ev.name == event }.first.name
|
@@ -51,7 +51,7 @@ module Tramway::StateMachineButtonsHelper
|
|
51
51
|
|
52
52
|
{
|
53
53
|
record: object.model,
|
54
|
-
attributes
|
54
|
+
attributes:,
|
55
55
|
model_name: options[:model_name],
|
56
56
|
button_options: { class: css_class },
|
57
57
|
form_options: options[:form_options],
|
@@ -3,8 +3,10 @@
|
|
3
3
|
require 'carrierwave/orm/activerecord' if defined?(CarrierWave::Mount)
|
4
4
|
|
5
5
|
class Tramway::ApplicationRecord < ActiveRecord::Base
|
6
|
+
primary_abstract_class
|
7
|
+
|
6
8
|
self.abstract_class = true
|
7
|
-
|
9
|
+
has_paper_trail
|
8
10
|
extend ::Enumerize
|
9
11
|
include AASM
|
10
12
|
acts_as_paranoid
|
data/app/models/tramway/user.rb
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
class Tramway::User <
|
3
|
+
class Tramway::User < Tramway::ApplicationRecord
|
4
4
|
has_secure_password
|
5
5
|
|
6
|
-
if defined? Tramway::Conference
|
7
|
-
has_many :social_networks, as: :record,
|
8
|
-
class_name: 'Tramway::Profiles::SocialNetwork'
|
9
|
-
end
|
10
|
-
|
11
6
|
scope :admins, -> { where role: :admin }
|
12
7
|
scope :simple_users, -> { where role: :user }
|
13
8
|
|
@@ -6,11 +6,11 @@
|
|
6
6
|
= yield :title
|
7
7
|
= stylesheet_link_tag 'tramway/application', media: :all
|
8
8
|
= javascript_include_tag 'tramway/application'
|
9
|
-
- if File.
|
9
|
+
- if File.exist?("#{Rails.root}/app/assets/javascripts/application.js") || File.exist?("#{Rails.root}/app/assets/javascripts/application.js.coffee")
|
10
10
|
= javascript_include_tag 'application'
|
11
|
-
- if File.
|
11
|
+
- if File.exist?("#{Rails.root}/app/assets/stylesheets/application.css") || File.exist?("#{Rails.root}/app/assets/stylesheets/application.scss")
|
12
12
|
= stylesheet_link_tag 'application'
|
13
|
-
- if File.
|
13
|
+
- if File.exist?("#{Rails.root}/app/javascript/packs/application.js")
|
14
14
|
= javascript_pack_tag 'application'
|
15
15
|
= csrf_meta_tags
|
16
16
|
- if @application.favicon.present?
|
@@ -5,5 +5,5 @@
|
|
5
5
|
= value
|
6
6
|
%td
|
7
7
|
- if tramway_model?(model_class)
|
8
|
-
- if
|
8
|
+
- if object.model.class.aasm.states.map(&:name).include?(attribute_name.to_sym)
|
9
9
|
= state_events_buttons object, state_method: attribute_name, model_param_name: :record, controller: 'tramway/records', action: :update, parameters: { model: object.class.model_name }, button_options: { class: :smart_button }
|
data/lib/tramway/error.rb
CHANGED
@@ -19,7 +19,7 @@ class Tramway::Error < RuntimeError
|
|
19
19
|
|
20
20
|
class << self
|
21
21
|
def raise_error(*coordinates, **options)
|
22
|
-
@errors ||= YAML.load_file("#{Tramway.root}/lib/tramway/yaml/errors.yml").with_indifferent_access
|
22
|
+
@errors ||= YAML.load_file("#{Tramway.root}/lib/tramway/yaml/errors.yml").with_indifferent_access[:tramway]
|
23
23
|
error = @errors.dig(*coordinates)
|
24
24
|
raise 'Error is not defined in YAML' unless error
|
25
25
|
|
@@ -10,7 +10,7 @@ class Tramway::Generators::InstallGenerator < ::Rails::Generators::Base
|
|
10
10
|
include Rails::Generators::Migration
|
11
11
|
|
12
12
|
def run_other_generators
|
13
|
-
generate '
|
13
|
+
generate 'paper_trail:install --with-changes'
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.next_migration_number(path)
|
data/lib/tramway/navbar.rb
CHANGED
@@ -17,9 +17,9 @@ module Tramway::Navbar
|
|
17
17
|
private
|
18
18
|
|
19
19
|
def should_be_in_navbar_as(item, project, role)
|
20
|
-
if singleton_models_for(project, role:
|
20
|
+
if singleton_models_for(project, role:).map(&:to_s).include?(item.to_s)
|
21
21
|
{ item.to_s => :singleton }
|
22
|
-
elsif available_models_for(project, role:
|
22
|
+
elsif available_models_for(project, role:).map(&:to_s).include?(item.to_s)
|
23
23
|
{ item.to_s => :record }
|
24
24
|
elsif item.is_a? Symbol
|
25
25
|
:divider
|
@@ -1,16 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Tramway::RecordsModels
|
4
|
-
def set_available_models(
|
4
|
+
def set_available_models(models, project:, role: :admin)
|
5
5
|
initialize_available_models_for project, role
|
6
6
|
|
7
|
-
models.
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
end
|
13
|
-
end
|
7
|
+
Tramway::Error.raise_error :records, :wrong_available_models_type if !models.is_a?(Array) && !models.is_a?(Hash)
|
8
|
+
|
9
|
+
handle_array_of_models(models, project:, role:) if models.is_a? Array
|
10
|
+
|
11
|
+
@available_models[project][role].merge! models if models.is_a? Hash
|
14
12
|
@available_models = @available_models.with_indifferent_access
|
15
13
|
end
|
16
14
|
|
@@ -25,7 +23,7 @@ module Tramway::RecordsModels
|
|
25
23
|
end
|
26
24
|
|
27
25
|
def available_models(role:)
|
28
|
-
models_array models_type: :available, role:
|
26
|
+
models_array models_type: :available, role:
|
29
27
|
end
|
30
28
|
|
31
29
|
def clear_available_models!
|
@@ -34,6 +32,16 @@ module Tramway::RecordsModels
|
|
34
32
|
|
35
33
|
private
|
36
34
|
|
35
|
+
def handle_array_of_models(models, project:, role:)
|
36
|
+
models.each do |model|
|
37
|
+
if model.instance_of?(Class) || model.instance_of?(String)
|
38
|
+
@available_models[project][role].merge! model.to_s => %i[index show update create destroy]
|
39
|
+
elsif model.instance_of?(Hash)
|
40
|
+
@available_models[project][role].merge! model
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
37
45
|
def initialize_available_models_for(project, role)
|
38
46
|
@available_models ||= {}
|
39
47
|
@available_models[project] ||= {}
|
@@ -45,7 +53,7 @@ module Tramway::RecordsModels
|
|
45
53
|
if @available_models&.dig(dependency, role).present?
|
46
54
|
@available_models&.dig(dependency, role)&.keys
|
47
55
|
else
|
48
|
-
Tramway::Error.raise_error
|
56
|
+
Tramway::Error.raise_error(:records, :there_is_no_dependency, dependency:, project:)
|
49
57
|
end
|
50
58
|
end.flatten.compact
|
51
59
|
end
|
@@ -2,6 +2,6 @@
|
|
2
2
|
|
3
3
|
module NavbarHelper
|
4
4
|
def click_on_dropdown(text)
|
5
|
-
first('ul.navbar-nav li.nav-item.dropdown a.nav-link.dropdown-toggle', text
|
5
|
+
first('ul.navbar-nav li.nav-item.dropdown a.nav-link.dropdown-toggle', text:, visible: true).click
|
6
6
|
end
|
7
7
|
end
|
@@ -11,11 +11,11 @@ module TramwayHelpers
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def click_on_tab(text)
|
14
|
-
find('li.nav-item a.nav-link', text:
|
14
|
+
find('li.nav-item a.nav-link', text:).click
|
15
15
|
end
|
16
16
|
|
17
17
|
def click_on_table_item(text)
|
18
|
-
find('table td a', text:
|
18
|
+
find('table td a', text:).click
|
19
19
|
end
|
20
20
|
|
21
21
|
def click_on_delete_button(object)
|
data/lib/tramway/version.rb
CHANGED
data/lib/tramway/yaml/errors.yml
CHANGED
@@ -44,6 +44,7 @@ tramway:
|
|
44
44
|
install: 'Initialize Tramway application before running generators. Add `Tramway.initialize_application name: :your_application_name` to `config/initializers/tramway.rb`'
|
45
45
|
records:
|
46
46
|
there_is_no_dependency: "There is no dependency `%{dependency}` for plugin: %{project}. Please, check file `tramway-%{project}/lib/tramway/%{project}/%{project}.rb`"
|
47
|
+
wrong_available_models_type: "First argument in `set_available_models` should Array or Hash"
|
47
48
|
application_controller:
|
48
49
|
create_form_for_role: "Tramway - you should create form for role `%{role}` to edit %{model_class} model. It should be named %{class_name}"
|
49
50
|
model_or_form_not_available: 'Tramway - Model or Form is not available. Looks like current user does not have access to change this model. Update your tramway initializer file'
|
data/lib/tramway.rb
CHANGED
@@ -69,7 +69,7 @@ module Tramway
|
|
69
69
|
|
70
70
|
def action_is_available?(record, project:, role:, model_name:, action:)
|
71
71
|
project = project.underscore.to_sym unless project.is_a? Symbol
|
72
|
-
actions = select_actions(project
|
72
|
+
actions = select_actions(project:, role: role.to_sym, model_name:)
|
73
73
|
availability = compute_availability actions, action
|
74
74
|
|
75
75
|
return false unless availability.present?
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tramway
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Kalashnikov
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
12
|
+
date: 2023-02-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: '7'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: '7'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: aasm
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,20 +39,6 @@ dependencies:
|
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
|
-
name: audited
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - ">="
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: 4.8.0
|
49
|
-
type: :runtime
|
50
|
-
prerelease: false
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - ">="
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: 4.8.0
|
56
42
|
- !ruby/object:Gem::Dependency
|
57
43
|
name: bootstrap
|
58
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -263,16 +249,30 @@ dependencies:
|
|
263
249
|
name: nokogiri
|
264
250
|
requirement: !ruby/object:Gem::Requirement
|
265
251
|
requirements:
|
266
|
-
- -
|
252
|
+
- - ">="
|
253
|
+
- !ruby/object:Gem::Version
|
254
|
+
version: '0'
|
255
|
+
type: :runtime
|
256
|
+
prerelease: false
|
257
|
+
version_requirements: !ruby/object:Gem::Requirement
|
258
|
+
requirements:
|
259
|
+
- - ">="
|
260
|
+
- !ruby/object:Gem::Version
|
261
|
+
version: '0'
|
262
|
+
- !ruby/object:Gem::Dependency
|
263
|
+
name: paper_trail
|
264
|
+
requirement: !ruby/object:Gem::Requirement
|
265
|
+
requirements:
|
266
|
+
- - ">="
|
267
267
|
- !ruby/object:Gem::Version
|
268
|
-
version:
|
268
|
+
version: '0'
|
269
269
|
type: :runtime
|
270
270
|
prerelease: false
|
271
271
|
version_requirements: !ruby/object:Gem::Requirement
|
272
272
|
requirements:
|
273
|
-
- -
|
273
|
+
- - ">="
|
274
274
|
- !ruby/object:Gem::Version
|
275
|
-
version:
|
275
|
+
version: '0'
|
276
276
|
- !ruby/object:Gem::Dependency
|
277
277
|
name: paranoia
|
278
278
|
requirement: !ruby/object:Gem::Requirement
|
@@ -335,20 +335,14 @@ dependencies:
|
|
335
335
|
requirements:
|
336
336
|
- - "~>"
|
337
337
|
- !ruby/object:Gem::Version
|
338
|
-
version: '
|
339
|
-
- - ">="
|
340
|
-
- !ruby/object:Gem::Version
|
341
|
-
version: 5.0.7
|
338
|
+
version: '6'
|
342
339
|
type: :runtime
|
343
340
|
prerelease: false
|
344
341
|
version_requirements: !ruby/object:Gem::Requirement
|
345
342
|
requirements:
|
346
343
|
- - "~>"
|
347
344
|
- !ruby/object:Gem::Version
|
348
|
-
version: '
|
349
|
-
- - ">="
|
350
|
-
- !ruby/object:Gem::Version
|
351
|
-
version: 5.0.7
|
345
|
+
version: '6'
|
352
346
|
- !ruby/object:Gem::Dependency
|
353
347
|
name: simple_form
|
354
348
|
requirement: !ruby/object:Gem::Requirement
|
@@ -477,10 +471,9 @@ files:
|
|
477
471
|
- app/assets/javascripts/ckeditor/plugins/youtube/plugin.js
|
478
472
|
- app/assets/javascripts/tramway/application.js
|
479
473
|
- app/assets/stylesheets/tramway/application.sass
|
480
|
-
- app/assets/stylesheets/tramway/bootstrap-datepicker-1.8.0.css
|
481
|
-
- app/controllers/concerns/auth_management.rb
|
482
|
-
- app/controllers/concerns/filtering.rb
|
483
474
|
- app/controllers/tramway/application_controller.rb
|
475
|
+
- app/controllers/tramway/concerns/auth_management.rb
|
476
|
+
- app/controllers/tramway/concerns/filtering.rb
|
484
477
|
- app/controllers/tramway/export/application_controller.rb
|
485
478
|
- app/controllers/tramway/has_and_belongs_to_many_records_controller.rb
|
486
479
|
- app/controllers/tramway/records_controller.rb
|
@@ -575,7 +568,6 @@ files:
|
|
575
568
|
- app/views/tramway/singletons/show.html.haml
|
576
569
|
- app/views/tramway/welcome/index.html.haml
|
577
570
|
- config/initializers/assets.rb
|
578
|
-
- config/initializers/carrierwave.rb
|
579
571
|
- config/initializers/ckeditor.rb
|
580
572
|
- config/initializers/plurals.rb
|
581
573
|
- config/locales/en/collections.yml
|
@@ -645,7 +637,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
645
637
|
- !ruby/object:Gem::Version
|
646
638
|
version: '0'
|
647
639
|
requirements: []
|
648
|
-
rubygems_version: 3.
|
640
|
+
rubygems_version: 3.4.6
|
649
641
|
signing_key:
|
650
642
|
specification_version: 4
|
651
643
|
summary: Tramway Rails Engine
|
@@ -1,477 +0,0 @@
|
|
1
|
-
/*!
|
2
|
-
* Datepicker for Bootstrap v1.8.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
3
|
-
*
|
4
|
-
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
5
|
-
*/
|
6
|
-
|
7
|
-
.datepicker {
|
8
|
-
padding: 4px;
|
9
|
-
-webkit-border-radius: 4px;
|
10
|
-
-moz-border-radius: 4px;
|
11
|
-
border-radius: 4px;
|
12
|
-
direction: ltr;
|
13
|
-
}
|
14
|
-
.datepicker-inline {
|
15
|
-
width: 220px;
|
16
|
-
}
|
17
|
-
.datepicker-rtl {
|
18
|
-
direction: rtl;
|
19
|
-
}
|
20
|
-
.datepicker-rtl.dropdown-menu {
|
21
|
-
left: auto;
|
22
|
-
}
|
23
|
-
.datepicker-rtl table tr td span {
|
24
|
-
float: right;
|
25
|
-
}
|
26
|
-
.datepicker-dropdown {
|
27
|
-
top: 0;
|
28
|
-
left: 0;
|
29
|
-
}
|
30
|
-
.datepicker-dropdown:before {
|
31
|
-
content: '';
|
32
|
-
display: inline-block;
|
33
|
-
border-left: 7px solid transparent;
|
34
|
-
border-right: 7px solid transparent;
|
35
|
-
border-bottom: 7px solid #999;
|
36
|
-
border-top: 0;
|
37
|
-
border-bottom-color: rgba(0, 0, 0, 0.2);
|
38
|
-
position: absolute;
|
39
|
-
}
|
40
|
-
.datepicker-dropdown:after {
|
41
|
-
content: '';
|
42
|
-
display: inline-block;
|
43
|
-
border-left: 6px solid transparent;
|
44
|
-
border-right: 6px solid transparent;
|
45
|
-
border-bottom: 6px solid #fff;
|
46
|
-
border-top: 0;
|
47
|
-
position: absolute;
|
48
|
-
}
|
49
|
-
.datepicker-dropdown.datepicker-orient-left:before {
|
50
|
-
left: 6px;
|
51
|
-
}
|
52
|
-
.datepicker-dropdown.datepicker-orient-left:after {
|
53
|
-
left: 7px;
|
54
|
-
}
|
55
|
-
.datepicker-dropdown.datepicker-orient-right:before {
|
56
|
-
right: 6px;
|
57
|
-
}
|
58
|
-
.datepicker-dropdown.datepicker-orient-right:after {
|
59
|
-
right: 7px;
|
60
|
-
}
|
61
|
-
.datepicker-dropdown.datepicker-orient-bottom:before {
|
62
|
-
top: -7px;
|
63
|
-
}
|
64
|
-
.datepicker-dropdown.datepicker-orient-bottom:after {
|
65
|
-
top: -6px;
|
66
|
-
}
|
67
|
-
.datepicker-dropdown.datepicker-orient-top:before {
|
68
|
-
bottom: -7px;
|
69
|
-
border-bottom: 0;
|
70
|
-
border-top: 7px solid #999;
|
71
|
-
}
|
72
|
-
.datepicker-dropdown.datepicker-orient-top:after {
|
73
|
-
bottom: -6px;
|
74
|
-
border-bottom: 0;
|
75
|
-
border-top: 6px solid #fff;
|
76
|
-
}
|
77
|
-
.datepicker table {
|
78
|
-
margin: 0;
|
79
|
-
-webkit-touch-callout: none;
|
80
|
-
-webkit-user-select: none;
|
81
|
-
-khtml-user-select: none;
|
82
|
-
-moz-user-select: none;
|
83
|
-
-ms-user-select: none;
|
84
|
-
user-select: none;
|
85
|
-
}
|
86
|
-
.datepicker td,
|
87
|
-
.datepicker th {
|
88
|
-
text-align: center;
|
89
|
-
width: 20px;
|
90
|
-
height: 20px;
|
91
|
-
-webkit-border-radius: 4px;
|
92
|
-
-moz-border-radius: 4px;
|
93
|
-
border-radius: 4px;
|
94
|
-
border: none;
|
95
|
-
}
|
96
|
-
.table-striped .datepicker table tr td,
|
97
|
-
.table-striped .datepicker table tr th {
|
98
|
-
background-color: transparent;
|
99
|
-
}
|
100
|
-
.datepicker table tr td.day:hover,
|
101
|
-
.datepicker table tr td.day.focused {
|
102
|
-
background: #eee;
|
103
|
-
cursor: pointer;
|
104
|
-
}
|
105
|
-
.datepicker table tr td.old,
|
106
|
-
.datepicker table tr td.new {
|
107
|
-
color: #999;
|
108
|
-
}
|
109
|
-
.datepicker table tr td.disabled,
|
110
|
-
.datepicker table tr td.disabled:hover {
|
111
|
-
background: none;
|
112
|
-
color: #999;
|
113
|
-
cursor: default;
|
114
|
-
}
|
115
|
-
.datepicker table tr td.highlighted {
|
116
|
-
background: #d9edf7;
|
117
|
-
border-radius: 0;
|
118
|
-
}
|
119
|
-
.datepicker table tr td.today,
|
120
|
-
.datepicker table tr td.today:hover,
|
121
|
-
.datepicker table tr td.today.disabled,
|
122
|
-
.datepicker table tr td.today.disabled:hover {
|
123
|
-
background-color: #fde19a;
|
124
|
-
background-image: -moz-linear-gradient(to bottom, #fdd49a, #fdf59a);
|
125
|
-
background-image: -ms-linear-gradient(to bottom, #fdd49a, #fdf59a);
|
126
|
-
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
|
127
|
-
background-image: -webkit-linear-gradient(to bottom, #fdd49a, #fdf59a);
|
128
|
-
background-image: -o-linear-gradient(to bottom, #fdd49a, #fdf59a);
|
129
|
-
background-image: linear-gradient(to bottom, #fdd49a, #fdf59a);
|
130
|
-
background-repeat: repeat-x;
|
131
|
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
|
132
|
-
border-color: #fdf59a #fdf59a #fbed50;
|
133
|
-
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
134
|
-
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
135
|
-
color: #000;
|
136
|
-
}
|
137
|
-
.datepicker table tr td.today:hover,
|
138
|
-
.datepicker table tr td.today:hover:hover,
|
139
|
-
.datepicker table tr td.today.disabled:hover,
|
140
|
-
.datepicker table tr td.today.disabled:hover:hover,
|
141
|
-
.datepicker table tr td.today:active,
|
142
|
-
.datepicker table tr td.today:hover:active,
|
143
|
-
.datepicker table tr td.today.disabled:active,
|
144
|
-
.datepicker table tr td.today.disabled:hover:active,
|
145
|
-
.datepicker table tr td.today.active,
|
146
|
-
.datepicker table tr td.today:hover.active,
|
147
|
-
.datepicker table tr td.today.disabled.active,
|
148
|
-
.datepicker table tr td.today.disabled:hover.active,
|
149
|
-
.datepicker table tr td.today.disabled,
|
150
|
-
.datepicker table tr td.today:hover.disabled,
|
151
|
-
.datepicker table tr td.today.disabled.disabled,
|
152
|
-
.datepicker table tr td.today.disabled:hover.disabled,
|
153
|
-
.datepicker table tr td.today[disabled],
|
154
|
-
.datepicker table tr td.today:hover[disabled],
|
155
|
-
.datepicker table tr td.today.disabled[disabled],
|
156
|
-
.datepicker table tr td.today.disabled:hover[disabled] {
|
157
|
-
background-color: #fdf59a;
|
158
|
-
}
|
159
|
-
.datepicker table tr td.today:active,
|
160
|
-
.datepicker table tr td.today:hover:active,
|
161
|
-
.datepicker table tr td.today.disabled:active,
|
162
|
-
.datepicker table tr td.today.disabled:hover:active,
|
163
|
-
.datepicker table tr td.today.active,
|
164
|
-
.datepicker table tr td.today:hover.active,
|
165
|
-
.datepicker table tr td.today.disabled.active,
|
166
|
-
.datepicker table tr td.today.disabled:hover.active {
|
167
|
-
background-color: #fbf069 \9;
|
168
|
-
}
|
169
|
-
.datepicker table tr td.today:hover:hover {
|
170
|
-
color: #000;
|
171
|
-
}
|
172
|
-
.datepicker table tr td.today.active:hover {
|
173
|
-
color: #fff;
|
174
|
-
}
|
175
|
-
.datepicker table tr td.range,
|
176
|
-
.datepicker table tr td.range:hover,
|
177
|
-
.datepicker table tr td.range.disabled,
|
178
|
-
.datepicker table tr td.range.disabled:hover {
|
179
|
-
background: #eee;
|
180
|
-
-webkit-border-radius: 0;
|
181
|
-
-moz-border-radius: 0;
|
182
|
-
border-radius: 0;
|
183
|
-
}
|
184
|
-
.datepicker table tr td.range.today,
|
185
|
-
.datepicker table tr td.range.today:hover,
|
186
|
-
.datepicker table tr td.range.today.disabled,
|
187
|
-
.datepicker table tr td.range.today.disabled:hover {
|
188
|
-
background-color: #f3d17a;
|
189
|
-
background-image: -moz-linear-gradient(to bottom, #f3c17a, #f3e97a);
|
190
|
-
background-image: -ms-linear-gradient(to bottom, #f3c17a, #f3e97a);
|
191
|
-
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a));
|
192
|
-
background-image: -webkit-linear-gradient(to bottom, #f3c17a, #f3e97a);
|
193
|
-
background-image: -o-linear-gradient(to bottom, #f3c17a, #f3e97a);
|
194
|
-
background-image: linear-gradient(to bottom, #f3c17a, #f3e97a);
|
195
|
-
background-repeat: repeat-x;
|
196
|
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0);
|
197
|
-
border-color: #f3e97a #f3e97a #edde34;
|
198
|
-
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
199
|
-
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
200
|
-
-webkit-border-radius: 0;
|
201
|
-
-moz-border-radius: 0;
|
202
|
-
border-radius: 0;
|
203
|
-
}
|
204
|
-
.datepicker table tr td.range.today:hover,
|
205
|
-
.datepicker table tr td.range.today:hover:hover,
|
206
|
-
.datepicker table tr td.range.today.disabled:hover,
|
207
|
-
.datepicker table tr td.range.today.disabled:hover:hover,
|
208
|
-
.datepicker table tr td.range.today:active,
|
209
|
-
.datepicker table tr td.range.today:hover:active,
|
210
|
-
.datepicker table tr td.range.today.disabled:active,
|
211
|
-
.datepicker table tr td.range.today.disabled:hover:active,
|
212
|
-
.datepicker table tr td.range.today.active,
|
213
|
-
.datepicker table tr td.range.today:hover.active,
|
214
|
-
.datepicker table tr td.range.today.disabled.active,
|
215
|
-
.datepicker table tr td.range.today.disabled:hover.active,
|
216
|
-
.datepicker table tr td.range.today.disabled,
|
217
|
-
.datepicker table tr td.range.today:hover.disabled,
|
218
|
-
.datepicker table tr td.range.today.disabled.disabled,
|
219
|
-
.datepicker table tr td.range.today.disabled:hover.disabled,
|
220
|
-
.datepicker table tr td.range.today[disabled],
|
221
|
-
.datepicker table tr td.range.today:hover[disabled],
|
222
|
-
.datepicker table tr td.range.today.disabled[disabled],
|
223
|
-
.datepicker table tr td.range.today.disabled:hover[disabled] {
|
224
|
-
background-color: #f3e97a;
|
225
|
-
}
|
226
|
-
.datepicker table tr td.range.today:active,
|
227
|
-
.datepicker table tr td.range.today:hover:active,
|
228
|
-
.datepicker table tr td.range.today.disabled:active,
|
229
|
-
.datepicker table tr td.range.today.disabled:hover:active,
|
230
|
-
.datepicker table tr td.range.today.active,
|
231
|
-
.datepicker table tr td.range.today:hover.active,
|
232
|
-
.datepicker table tr td.range.today.disabled.active,
|
233
|
-
.datepicker table tr td.range.today.disabled:hover.active {
|
234
|
-
background-color: #efe24b \9;
|
235
|
-
}
|
236
|
-
.datepicker table tr td.selected,
|
237
|
-
.datepicker table tr td.selected:hover,
|
238
|
-
.datepicker table tr td.selected.disabled,
|
239
|
-
.datepicker table tr td.selected.disabled:hover {
|
240
|
-
background-color: #9e9e9e;
|
241
|
-
background-image: -moz-linear-gradient(to bottom, #b3b3b3, #808080);
|
242
|
-
background-image: -ms-linear-gradient(to bottom, #b3b3b3, #808080);
|
243
|
-
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080));
|
244
|
-
background-image: -webkit-linear-gradient(to bottom, #b3b3b3, #808080);
|
245
|
-
background-image: -o-linear-gradient(to bottom, #b3b3b3, #808080);
|
246
|
-
background-image: linear-gradient(to bottom, #b3b3b3, #808080);
|
247
|
-
background-repeat: repeat-x;
|
248
|
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0);
|
249
|
-
border-color: #808080 #808080 #595959;
|
250
|
-
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
251
|
-
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
252
|
-
color: #fff;
|
253
|
-
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
254
|
-
}
|
255
|
-
.datepicker table tr td.selected:hover,
|
256
|
-
.datepicker table tr td.selected:hover:hover,
|
257
|
-
.datepicker table tr td.selected.disabled:hover,
|
258
|
-
.datepicker table tr td.selected.disabled:hover:hover,
|
259
|
-
.datepicker table tr td.selected:active,
|
260
|
-
.datepicker table tr td.selected:hover:active,
|
261
|
-
.datepicker table tr td.selected.disabled:active,
|
262
|
-
.datepicker table tr td.selected.disabled:hover:active,
|
263
|
-
.datepicker table tr td.selected.active,
|
264
|
-
.datepicker table tr td.selected:hover.active,
|
265
|
-
.datepicker table tr td.selected.disabled.active,
|
266
|
-
.datepicker table tr td.selected.disabled:hover.active,
|
267
|
-
.datepicker table tr td.selected.disabled,
|
268
|
-
.datepicker table tr td.selected:hover.disabled,
|
269
|
-
.datepicker table tr td.selected.disabled.disabled,
|
270
|
-
.datepicker table tr td.selected.disabled:hover.disabled,
|
271
|
-
.datepicker table tr td.selected[disabled],
|
272
|
-
.datepicker table tr td.selected:hover[disabled],
|
273
|
-
.datepicker table tr td.selected.disabled[disabled],
|
274
|
-
.datepicker table tr td.selected.disabled:hover[disabled] {
|
275
|
-
background-color: #808080;
|
276
|
-
}
|
277
|
-
.datepicker table tr td.selected:active,
|
278
|
-
.datepicker table tr td.selected:hover:active,
|
279
|
-
.datepicker table tr td.selected.disabled:active,
|
280
|
-
.datepicker table tr td.selected.disabled:hover:active,
|
281
|
-
.datepicker table tr td.selected.active,
|
282
|
-
.datepicker table tr td.selected:hover.active,
|
283
|
-
.datepicker table tr td.selected.disabled.active,
|
284
|
-
.datepicker table tr td.selected.disabled:hover.active {
|
285
|
-
background-color: #666666 \9;
|
286
|
-
}
|
287
|
-
.datepicker table tr td.active,
|
288
|
-
.datepicker table tr td.active:hover,
|
289
|
-
.datepicker table tr td.active.disabled,
|
290
|
-
.datepicker table tr td.active.disabled:hover {
|
291
|
-
background-color: #006dcc;
|
292
|
-
background-image: -moz-linear-gradient(to bottom, #08c, #0044cc);
|
293
|
-
background-image: -ms-linear-gradient(to bottom, #08c, #0044cc);
|
294
|
-
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0044cc));
|
295
|
-
background-image: -webkit-linear-gradient(to bottom, #08c, #0044cc);
|
296
|
-
background-image: -o-linear-gradient(to bottom, #08c, #0044cc);
|
297
|
-
background-image: linear-gradient(to bottom, #08c, #0044cc);
|
298
|
-
background-repeat: repeat-x;
|
299
|
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#08c', endColorstr='#0044cc', GradientType=0);
|
300
|
-
border-color: #0044cc #0044cc #002a80;
|
301
|
-
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
302
|
-
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
303
|
-
color: #fff;
|
304
|
-
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
305
|
-
}
|
306
|
-
.datepicker table tr td.active:hover,
|
307
|
-
.datepicker table tr td.active:hover:hover,
|
308
|
-
.datepicker table tr td.active.disabled:hover,
|
309
|
-
.datepicker table tr td.active.disabled:hover:hover,
|
310
|
-
.datepicker table tr td.active:active,
|
311
|
-
.datepicker table tr td.active:hover:active,
|
312
|
-
.datepicker table tr td.active.disabled:active,
|
313
|
-
.datepicker table tr td.active.disabled:hover:active,
|
314
|
-
.datepicker table tr td.active.active,
|
315
|
-
.datepicker table tr td.active:hover.active,
|
316
|
-
.datepicker table tr td.active.disabled.active,
|
317
|
-
.datepicker table tr td.active.disabled:hover.active,
|
318
|
-
.datepicker table tr td.active.disabled,
|
319
|
-
.datepicker table tr td.active:hover.disabled,
|
320
|
-
.datepicker table tr td.active.disabled.disabled,
|
321
|
-
.datepicker table tr td.active.disabled:hover.disabled,
|
322
|
-
.datepicker table tr td.active[disabled],
|
323
|
-
.datepicker table tr td.active:hover[disabled],
|
324
|
-
.datepicker table tr td.active.disabled[disabled],
|
325
|
-
.datepicker table tr td.active.disabled:hover[disabled] {
|
326
|
-
background-color: #0044cc;
|
327
|
-
}
|
328
|
-
.datepicker table tr td.active:active,
|
329
|
-
.datepicker table tr td.active:hover:active,
|
330
|
-
.datepicker table tr td.active.disabled:active,
|
331
|
-
.datepicker table tr td.active.disabled:hover:active,
|
332
|
-
.datepicker table tr td.active.active,
|
333
|
-
.datepicker table tr td.active:hover.active,
|
334
|
-
.datepicker table tr td.active.disabled.active,
|
335
|
-
.datepicker table tr td.active.disabled:hover.active {
|
336
|
-
background-color: #003399 \9;
|
337
|
-
}
|
338
|
-
.datepicker table tr td span {
|
339
|
-
display: block;
|
340
|
-
width: 23%;
|
341
|
-
height: 54px;
|
342
|
-
line-height: 54px;
|
343
|
-
float: left;
|
344
|
-
margin: 1%;
|
345
|
-
cursor: pointer;
|
346
|
-
-webkit-border-radius: 4px;
|
347
|
-
-moz-border-radius: 4px;
|
348
|
-
border-radius: 4px;
|
349
|
-
}
|
350
|
-
.datepicker table tr td span:hover,
|
351
|
-
.datepicker table tr td span.focused {
|
352
|
-
background: #eee;
|
353
|
-
}
|
354
|
-
.datepicker table tr td span.disabled,
|
355
|
-
.datepicker table tr td span.disabled:hover {
|
356
|
-
background: none;
|
357
|
-
color: #999;
|
358
|
-
cursor: default;
|
359
|
-
}
|
360
|
-
.datepicker table tr td span.active,
|
361
|
-
.datepicker table tr td span.active:hover,
|
362
|
-
.datepicker table tr td span.active.disabled,
|
363
|
-
.datepicker table tr td span.active.disabled:hover {
|
364
|
-
background-color: #006dcc;
|
365
|
-
background-image: -moz-linear-gradient(to bottom, #08c, #0044cc);
|
366
|
-
background-image: -ms-linear-gradient(to bottom, #08c, #0044cc);
|
367
|
-
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0044cc));
|
368
|
-
background-image: -webkit-linear-gradient(to bottom, #08c, #0044cc);
|
369
|
-
background-image: -o-linear-gradient(to bottom, #08c, #0044cc);
|
370
|
-
background-image: linear-gradient(to bottom, #08c, #0044cc);
|
371
|
-
background-repeat: repeat-x;
|
372
|
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#08c', endColorstr='#0044cc', GradientType=0);
|
373
|
-
border-color: #0044cc #0044cc #002a80;
|
374
|
-
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
375
|
-
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
376
|
-
color: #fff;
|
377
|
-
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
378
|
-
}
|
379
|
-
.datepicker table tr td span.active:hover,
|
380
|
-
.datepicker table tr td span.active:hover:hover,
|
381
|
-
.datepicker table tr td span.active.disabled:hover,
|
382
|
-
.datepicker table tr td span.active.disabled:hover:hover,
|
383
|
-
.datepicker table tr td span.active:active,
|
384
|
-
.datepicker table tr td span.active:hover:active,
|
385
|
-
.datepicker table tr td span.active.disabled:active,
|
386
|
-
.datepicker table tr td span.active.disabled:hover:active,
|
387
|
-
.datepicker table tr td span.active.active,
|
388
|
-
.datepicker table tr td span.active:hover.active,
|
389
|
-
.datepicker table tr td span.active.disabled.active,
|
390
|
-
.datepicker table tr td span.active.disabled:hover.active,
|
391
|
-
.datepicker table tr td span.active.disabled,
|
392
|
-
.datepicker table tr td span.active:hover.disabled,
|
393
|
-
.datepicker table tr td span.active.disabled.disabled,
|
394
|
-
.datepicker table tr td span.active.disabled:hover.disabled,
|
395
|
-
.datepicker table tr td span.active[disabled],
|
396
|
-
.datepicker table tr td span.active:hover[disabled],
|
397
|
-
.datepicker table tr td span.active.disabled[disabled],
|
398
|
-
.datepicker table tr td span.active.disabled:hover[disabled] {
|
399
|
-
background-color: #0044cc;
|
400
|
-
}
|
401
|
-
.datepicker table tr td span.active:active,
|
402
|
-
.datepicker table tr td span.active:hover:active,
|
403
|
-
.datepicker table tr td span.active.disabled:active,
|
404
|
-
.datepicker table tr td span.active.disabled:hover:active,
|
405
|
-
.datepicker table tr td span.active.active,
|
406
|
-
.datepicker table tr td span.active:hover.active,
|
407
|
-
.datepicker table tr td span.active.disabled.active,
|
408
|
-
.datepicker table tr td span.active.disabled:hover.active {
|
409
|
-
background-color: #003399 \9;
|
410
|
-
}
|
411
|
-
.datepicker table tr td span.old,
|
412
|
-
.datepicker table tr td span.new {
|
413
|
-
color: #999;
|
414
|
-
}
|
415
|
-
.datepicker .datepicker-switch {
|
416
|
-
width: 145px;
|
417
|
-
}
|
418
|
-
.datepicker .datepicker-switch,
|
419
|
-
.datepicker .prev,
|
420
|
-
.datepicker .next,
|
421
|
-
.datepicker tfoot tr th {
|
422
|
-
cursor: pointer;
|
423
|
-
}
|
424
|
-
.datepicker .datepicker-switch:hover,
|
425
|
-
.datepicker .prev:hover,
|
426
|
-
.datepicker .next:hover,
|
427
|
-
.datepicker tfoot tr th:hover {
|
428
|
-
background: #eee;
|
429
|
-
}
|
430
|
-
.datepicker .prev.disabled,
|
431
|
-
.datepicker .next.disabled {
|
432
|
-
visibility: hidden;
|
433
|
-
}
|
434
|
-
.datepicker .cw {
|
435
|
-
font-size: 10px;
|
436
|
-
width: 12px;
|
437
|
-
padding: 0 2px 0 5px;
|
438
|
-
vertical-align: middle;
|
439
|
-
}
|
440
|
-
.input-append.date .add-on,
|
441
|
-
.input-prepend.date .add-on {
|
442
|
-
cursor: pointer;
|
443
|
-
}
|
444
|
-
.input-append.date .add-on i,
|
445
|
-
.input-prepend.date .add-on i {
|
446
|
-
margin-top: 3px;
|
447
|
-
}
|
448
|
-
.input-daterange input {
|
449
|
-
text-align: center;
|
450
|
-
}
|
451
|
-
.input-daterange input:first-child {
|
452
|
-
-webkit-border-radius: 3px 0 0 3px;
|
453
|
-
-moz-border-radius: 3px 0 0 3px;
|
454
|
-
border-radius: 3px 0 0 3px;
|
455
|
-
}
|
456
|
-
.input-daterange input:last-child {
|
457
|
-
-webkit-border-radius: 0 3px 3px 0;
|
458
|
-
-moz-border-radius: 0 3px 3px 0;
|
459
|
-
border-radius: 0 3px 3px 0;
|
460
|
-
}
|
461
|
-
.input-daterange .add-on {
|
462
|
-
display: inline-block;
|
463
|
-
width: auto;
|
464
|
-
min-width: 16px;
|
465
|
-
height: 18px;
|
466
|
-
padding: 4px 5px;
|
467
|
-
font-weight: normal;
|
468
|
-
line-height: 18px;
|
469
|
-
text-align: center;
|
470
|
-
text-shadow: 0 1px 0 #fff;
|
471
|
-
vertical-align: middle;
|
472
|
-
background-color: #eee;
|
473
|
-
border: 1px solid #ccc;
|
474
|
-
margin-left: -5px;
|
475
|
-
margin-right: -5px;
|
476
|
-
}
|
477
|
-
/*# sourceMappingURL=bootstrap-datepicker.css.map */
|