dhatu 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +114 -0
  4. data/Rakefile +36 -0
  5. data/app/assets/config/dhatu_manifest.js +2 -0
  6. data/app/assets/javascripts/dhatu/application.js +13 -0
  7. data/app/assets/stylesheets/dhatu/application.css +15 -0
  8. data/app/controllers/dhatu/application_controller.rb +25 -0
  9. data/app/controllers/dhatu/blog_posts_controller.rb +84 -0
  10. data/app/controllers/dhatu/contact_informations_controller.rb +84 -0
  11. data/app/controllers/dhatu/dashboard_controller.rb +24 -0
  12. data/app/controllers/dhatu/events_controller.rb +84 -0
  13. data/app/controllers/dhatu/offers_controller.rb +84 -0
  14. data/app/controllers/dhatu/resource_controller.rb +13 -0
  15. data/app/controllers/dhatu/sections_controller.rb +83 -0
  16. data/app/controllers/dhatu/team_members_controller.rb +84 -0
  17. data/app/controllers/dhatu/testimonials_controller.rb +84 -0
  18. data/app/helpers/dhatu/application_helper.rb +4 -0
  19. data/app/jobs/dhatu/application_job.rb +4 -0
  20. data/app/mailers/dhatu/application_mailer.rb +6 -0
  21. data/app/models/dhatu/application_record.rb +8 -0
  22. data/app/models/dhatu/blog_post.rb +62 -0
  23. data/app/models/dhatu/contact_information.rb +88 -0
  24. data/app/models/dhatu/event.rb +56 -0
  25. data/app/models/dhatu/offer.rb +55 -0
  26. data/app/models/dhatu/section.rb +82 -0
  27. data/app/models/dhatu/team_member.rb +59 -0
  28. data/app/models/dhatu/testimonial.rb +57 -0
  29. data/app/views/dhatu/blog_posts/_form.html.erb +42 -0
  30. data/app/views/dhatu/blog_posts/_index.html.erb +58 -0
  31. data/app/views/dhatu/blog_posts/_row.html.erb +28 -0
  32. data/app/views/dhatu/blog_posts/_show.html.erb +120 -0
  33. data/app/views/dhatu/blog_posts/index.html.erb +56 -0
  34. data/app/views/dhatu/contact_informations/_form.html.erb +104 -0
  35. data/app/views/dhatu/contact_informations/_index.html.erb +51 -0
  36. data/app/views/dhatu/contact_informations/_row.html.erb +26 -0
  37. data/app/views/dhatu/contact_informations/_show.html.erb +150 -0
  38. data/app/views/dhatu/contact_informations/index.html.erb +46 -0
  39. data/app/views/dhatu/dashboard/_index.html.erb +58 -0
  40. data/app/views/dhatu/dashboard/index.html.erb +18 -0
  41. data/app/views/dhatu/events/_form.html.erb +40 -0
  42. data/app/views/dhatu/events/_index.html.erb +58 -0
  43. data/app/views/dhatu/events/_row.html.erb +28 -0
  44. data/app/views/dhatu/events/_show.html.erb +120 -0
  45. data/app/views/dhatu/events/index.html.erb +45 -0
  46. data/app/views/dhatu/offers/_form.html.erb +39 -0
  47. data/app/views/dhatu/offers/_index.html.erb +57 -0
  48. data/app/views/dhatu/offers/_row.html.erb +28 -0
  49. data/app/views/dhatu/offers/_show.html.erb +118 -0
  50. data/app/views/dhatu/offers/index.html.erb +46 -0
  51. data/app/views/dhatu/sections/_form.html.erb +60 -0
  52. data/app/views/dhatu/sections/_index.html.erb +53 -0
  53. data/app/views/dhatu/sections/_row.html.erb +25 -0
  54. data/app/views/dhatu/sections/_show.html.erb +152 -0
  55. data/app/views/dhatu/sections/index.html.erb +53 -0
  56. data/app/views/dhatu/team_members/_form.html.erb +56 -0
  57. data/app/views/dhatu/team_members/_index.html.erb +62 -0
  58. data/app/views/dhatu/team_members/_row.html.erb +35 -0
  59. data/app/views/dhatu/team_members/_show.html.erb +93 -0
  60. data/app/views/dhatu/team_members/index.html.erb +46 -0
  61. data/app/views/dhatu/testimonials/_form.html.erb +36 -0
  62. data/app/views/dhatu/testimonials/_index.html.erb +64 -0
  63. data/app/views/dhatu/testimonials/_row.html.erb +36 -0
  64. data/app/views/dhatu/testimonials/_show.html.erb +133 -0
  65. data/app/views/dhatu/testimonials/index.html.erb +46 -0
  66. data/app/views/layouts/dhatu/application.html.erb +14 -0
  67. data/app/views/layouts/kuppayam/_footer.html.erb +25 -0
  68. data/app/views/layouts/kuppayam/_header.html.erb +43 -0
  69. data/app/views/layouts/kuppayam/_navbar.html.erb +55 -0
  70. data/app/views/layouts/kuppayam/_sidebar.html.erb +219 -0
  71. data/app/views/pattana/dashboard/_index.html.erb +35 -0
  72. data/config/routes.rb +63 -0
  73. data/db/master_data/features.csv +16 -0
  74. data/lib/dhatu.rb +5 -0
  75. data/lib/dhatu/engine.rb +31 -0
  76. data/lib/dhatu/factories.rb +7 -0
  77. data/lib/dhatu/version.rb +3 -0
  78. data/lib/tasks/dhatu/data.rake +91 -0
  79. data/lib/tasks/dhatu/master_data.rake +48 -0
  80. data/spec/dummy/spec/factories/blog_post.rb +48 -0
  81. data/spec/dummy/spec/factories/blog_post_cover_image.rb +13 -0
  82. data/spec/dummy/spec/factories/blog_post_gallery_image.rb +13 -0
  83. data/spec/dummy/spec/factories/contact_information.rb +63 -0
  84. data/spec/dummy/spec/factories/event.rb +46 -0
  85. data/spec/dummy/spec/factories/event_cover_image.rb +13 -0
  86. data/spec/dummy/spec/factories/event_gallery_image.rb +13 -0
  87. data/spec/dummy/spec/factories/offer.rb +43 -0
  88. data/spec/dummy/spec/factories/offer_cover_image.rb +13 -0
  89. data/spec/dummy/spec/factories/offer_gallery_image.rb +13 -0
  90. data/spec/dummy/spec/factories/section.rb +50 -0
  91. data/spec/dummy/spec/factories/section_cover_image.rb +13 -0
  92. data/spec/dummy/spec/factories/section_gallery_image.rb +13 -0
  93. data/spec/dummy/spec/factories/team_member.rb +47 -0
  94. data/spec/dummy/spec/factories/test.jpg +0 -0
  95. data/spec/dummy/spec/factories/testimonial.rb +44 -0
  96. metadata +520 -0
@@ -0,0 +1,88 @@
1
+ class Dhatu::ContactInformation < Dhatu::ApplicationRecord
2
+
3
+ # Set Table Name
4
+ self.table_name = "contact_informations"
5
+
6
+ # Including the State Machine Methods
7
+ include Publishable
8
+ include Featureable
9
+
10
+ # Validations
11
+ validates :title, presence: true, length: {maximum: 250}
12
+
13
+ validates :address_1, length: {maximum: 250}, allow_blank: true
14
+ validates :address_2, length: {maximum: 250}, allow_blank: true
15
+ validates :address_3, length: {maximum: 250}, allow_blank: true
16
+
17
+ # validate_email :email, presence: false, allow_blank: false
18
+ validates :landline, length: {maximum: 250}, allow_blank: true
19
+ validates :fax, length: {maximum: 250}, allow_blank: true
20
+ validates :mobile, length: {maximum: 250}, allow_blank: true
21
+
22
+ validates :facebook, format: { with: URI.regexp }, if: Proc.new { |ci| ci.facebook.present? }
23
+ validates :twitter, format: { with: URI.regexp }, if: Proc.new { |ci| ci.twitter.present? }
24
+ validates :google_plus, format: { with: URI.regexp }, if: Proc.new { |ci| ci.google_plus.present? }
25
+ validates :linked_in, format: { with: URI.regexp }, if: Proc.new { |ci| ci.linked_in.present? }
26
+ validates :youtube, format: { with: URI.regexp }, if: Proc.new { |ci| ci.youtube.present? }
27
+ validates :instagram, format: { with: URI.regexp }, if: Proc.new { |ci| ci.instagram.present? }
28
+ validates :tumblr, format: { with: URI.regexp }, if: Proc.new { |ci| ci.tumblr.present? }
29
+ validates :pinterest, format: { with: URI.regexp }, if: Proc.new { |ci| ci.pinterest.present? }
30
+ validates :blog, format: { with: URI.regexp }, if: Proc.new { |ci| ci.blog.present? }
31
+
32
+ # ------------------
33
+ # Class Methods
34
+ # ------------------
35
+
36
+ scope :search, lambda {|query| where("
37
+ LOWER(title) LIKE LOWER('%#{query}%') OR\
38
+ LOWER(address_1) LIKE LOWER('%#{query}%') OR\
39
+ LOWER(address_2) LIKE LOWER('%#{query}%') OR\
40
+ LOWER(address_3) LIKE LOWER('%#{query}%') OR\
41
+ LOWER(email) LIKE LOWER('%#{query}%') OR\
42
+ LOWER(landline) LIKE LOWER('%#{query}%') OR\
43
+ LOWER(fax) LIKE LOWER('%#{query}%') OR\
44
+ LOWER(mobile) LIKE LOWER('%#{query}%') OR\
45
+ LOWER(facebook) LIKE LOWER('%#{query}%') OR\
46
+ LOWER(twitter) LIKE LOWER('%#{query}%') OR\
47
+ LOWER(google_plus) LIKE LOWER('%#{query}%') OR\
48
+ LOWER(linked_in) LIKE LOWER('%#{query}%') OR\
49
+ LOWER(youtube) LIKE LOWER('%#{query}%') OR\
50
+ LOWER(instagram) LIKE LOWER('%#{query}%') OR\
51
+ LOWER(tumblr) LIKE LOWER('%#{query}%') OR\
52
+ LOWER(pinterest) LIKE LOWER('%#{query}%') OR\
53
+ LOWER(blog) LIKE LOWER('%#{query}%')")
54
+ }
55
+
56
+ scope :upcoming, lambda { where("created_at >= ?", Time.now) }
57
+ scope :past, lambda { where("created_at < ?", Time.now) }
58
+
59
+ # ------------------
60
+ # Instance variables
61
+ # ------------------
62
+
63
+ # Generic Methods
64
+ # ---------------
65
+ def to_param
66
+ "#{id}-#{title.parameterize[0..32]}"
67
+ end
68
+
69
+ def display_name
70
+ "#{title_was}"
71
+ end
72
+
73
+ def display_address
74
+ [self.address_1, self.address_2, self.address_3].compact.uniq.join(", ")
75
+ end
76
+
77
+ # Permission Methods
78
+ # ------------------
79
+
80
+ def can_be_edited?
81
+ status?(:published) or status?(:unpublished)
82
+ end
83
+
84
+ def can_be_deleted?
85
+ status?(:removed)
86
+ end
87
+
88
+ end
@@ -0,0 +1,56 @@
1
+ class Dhatu::Event < Dhatu::ApplicationRecord
2
+
3
+ # Set Table Name
4
+ self.table_name = "events"
5
+
6
+ # Including the State Machine Methods
7
+ include Publishable
8
+ include Featureable
9
+
10
+ # Validations
11
+ validates :title, presence: true, length: {minimum: 5, maximum: 500}, allow_blank: false
12
+ validates :venue, length: {minimum: 3, maximum: 250}, allow_blank: true
13
+ validates :description, presence: true
14
+
15
+ # Associations
16
+ has_one :cover_image, :as => :imageable, :dependent => :destroy, :class_name => "Image::CoverImage"
17
+ has_many :gallery_images, :as => :imageable, :dependent => :destroy, :class_name => "Image::GalleryImage"
18
+
19
+ # ------------------
20
+ # Class Methods
21
+ # ------------------
22
+
23
+ scope :search, lambda { |query| where("LOWER(title) LIKE LOWER('%#{query}%') OR\
24
+ LOWER(venue) LIKE LOWER('%#{query}%') OR\
25
+ LOWER(description) LIKE LOWER('%#{query}%')") }
26
+
27
+ scope :upcoming, lambda { where("starts_at >= ?", Time.now) }
28
+ scope :past, lambda { where("starts_at < ?", Time.now) }
29
+
30
+ # ------------------
31
+ # Instance Methods
32
+ # ------------------
33
+
34
+ # Generic Methods
35
+ # ---------------
36
+
37
+ def to_param
38
+ "#{id}-#{title.parameterize[0..32]}"
39
+ end
40
+
41
+ def display_name
42
+ "#{title_was}"
43
+ end
44
+
45
+ # Permission Methods
46
+ # ------------------
47
+
48
+ def can_be_edited?
49
+ status?(:published) or status?(:unpublished)
50
+ end
51
+
52
+ def can_be_deleted?
53
+ status?(:removed)
54
+ end
55
+
56
+ end
@@ -0,0 +1,55 @@
1
+ class Dhatu::Offer < Dhatu::ApplicationRecord
2
+
3
+ # Set Table Name
4
+ self.table_name = "offers"
5
+
6
+ # Including the State Machine Methods
7
+ include Publishable
8
+ include Featureable
9
+
10
+ # Validations
11
+ validates :title, presence: true, length: {minimum: 5, maximum: 256}, allow_blank: false
12
+ validates :offer_text, presence: true, length: {minimum: 3, maximum: 64}
13
+ validates :description, presence: true
14
+
15
+ # Associations
16
+ has_one :cover_image, :as => :imageable, :dependent => :destroy, :class_name => "Image::CoverImage"
17
+ has_many :gallery_images, :as => :imageable, :dependent => :destroy, :class_name => "Image::GalleryImage"
18
+
19
+ # ------------------
20
+ # Class Methods
21
+ # ------------------
22
+
23
+ scope :search, lambda { |query| where("LOWER(title) LIKE LOWER('%#{query}%') OR\
24
+ LOWER(offer_text) LIKE LOWER('%#{query}%') OR\
25
+ LOWER(description) LIKE LOWER('%#{query}%')")}
26
+
27
+ scope :upcoming, lambda { where("starts_at >= ?", Time.now) }
28
+ scope :past, lambda { where("starts_at < ?", Time.now) }
29
+
30
+ # ------------------
31
+ # Instance variables
32
+ # ------------------
33
+
34
+ # Generic Methods
35
+ # ---------------
36
+ def to_param
37
+ "#{id}-#{title.parameterize[0..32]}"
38
+ end
39
+
40
+ def display_name
41
+ "#{title_was}"
42
+ end
43
+
44
+ # Permission Methods
45
+ # ------------------
46
+
47
+ def can_be_edited?
48
+ status?(:published) or status?(:unpublished)
49
+ end
50
+
51
+ def can_be_deleted?
52
+ status?(:removed)
53
+ end
54
+
55
+ end
@@ -0,0 +1,82 @@
1
+ class Dhatu::Section < Dhatu::ApplicationRecord
2
+
3
+ # Set Table Name
4
+ self.table_name = "sections"
5
+
6
+ # Including the State Machine Methods
7
+ include Publishable
8
+
9
+ # Constants
10
+ COVER_IMAGE_INSTRUCTIONS = [
11
+ "the file extension should be .jpg / .jpeg or .png format",
12
+ "the image should be in resolution 750 pixels by 368 pixels, (Portrait Format). (most cameras and camera phones will produce images bigger than this)",
13
+ "the file size should not be less than 20 Kb, or bigger than <strong>1 MB</strong>"
14
+ ]
15
+
16
+ # Constants
17
+ GALLERY_IMAGE_INSTRUCTIONS = [
18
+ "the file extension should be .jpg / .jpeg or .png format",
19
+ "the image should be in resolution 750 pixels by 368 pixels, (Portrait Format). (most cameras and camera phones will produce images bigger than this)",
20
+ "the file size should not be less than 20 Kb, or bigger than <strong>1 MB</strong>"
21
+ ]
22
+
23
+ # Validations
24
+ validates :title, presence: true, length: {minimum: 3, maximum: 256}, allow_blank: false
25
+ validates :sub_title, length: {minimum: 3, maximum: 256}, allow_blank: true
26
+ validates :short_description, length: {minimum: 10, maximum: 1048}, allow_blank: true
27
+ validates :long_description, length: {minimum: 10}, allow_blank: true
28
+ validates :button_one_text, length: {maximum: 64}, allow_blank: true
29
+ validates :button_two_text, length: {maximum: 64}, allow_blank: true
30
+ validates :button_one_link, length: {maximum: 512}, allow_blank: true
31
+ validates :button_two_link, length: {maximum: 512}, allow_blank: true
32
+
33
+ # Associations
34
+ has_one :cover_image, :as => :imageable, :dependent => :destroy, :class_name => "Image::CoverImage"
35
+ has_many :gallery_images, :as => :imageable, :dependent => :destroy, :class_name => "Image::GalleryImage"
36
+
37
+ # ------------------
38
+ # Class Methods
39
+ # ------------------
40
+
41
+ scope :search, lambda {|query| where("LOWER(title) LIKE LOWER('%#{query}%') OR\
42
+ LOWER(sub_title) LIKE LOWER('%#{query}%') OR\
43
+ LOWER(short_description) LIKE LOWER('%#{query}%') OR\
44
+ LOWER(button_one_text) LIKE LOWER('%#{query}%') OR\
45
+ LOWER(button_two_text) LIKE LOWER('%#{query}%') OR\
46
+ LOWER(button_one_link) LIKE LOWER('%#{query}%') OR\
47
+ LOWER(button_two_link) LIKE LOWER('%#{query}%')")
48
+ }
49
+
50
+ scope :upcoming, lambda { where("created_at >= ?", Time.now) }
51
+ scope :past, lambda { where("created_at < ?", Time.now) }
52
+
53
+ def find_by_section_type(st)
54
+ self.where("section_type = ?", st).published.first
55
+ end
56
+
57
+ # ------------------
58
+ # Instance variables
59
+ # ------------------
60
+
61
+ # Generic Methods
62
+ # ---------------
63
+ def to_param
64
+ "#{id}-#{title.parameterize[0..32]}"
65
+ end
66
+
67
+ def display_name
68
+ "#{title_was}"
69
+ end
70
+
71
+ # Permission Methods
72
+ # ------------------
73
+
74
+ def can_be_edited?
75
+ status?(:published) or status?(:unpublished)
76
+ end
77
+
78
+ def can_be_deleted?
79
+ status?(:removed)
80
+ end
81
+
82
+ end
@@ -0,0 +1,59 @@
1
+ class Dhatu::TeamMember < Dhatu::ApplicationRecord
2
+
3
+ # Set Table Name
4
+ self.table_name = "team_members"
5
+
6
+ # Including the State Machine Methods
7
+ include Publishable
8
+ include Featureable
9
+
10
+ # Validations
11
+ validates :name, presence: true, length: {minimum: 3, maximum: 256}, allow_blank: false
12
+ validates :designation, presence: true, length: {minimum: 3, maximum: 256}, allow_blank: true
13
+ validates :description, presence: true, length: {minimum: 3, maximum: 256}, allow_blank: true
14
+
15
+ # Associations
16
+ has_one :profile_image, :as => :imageable, :dependent => :destroy, :class_name => "Image::ProfileImage"
17
+
18
+ # ------------------
19
+ # Class Methods
20
+ # ------------------
21
+
22
+ scope :search, lambda {|query| where("
23
+ LOWER(name) LIKE LOWER('%#{query}%') OR\
24
+ LOWER(designation) LIKE LOWER('%#{query}%') OR\
25
+ LOWER(status) LIKE LOWER('%#{query}%') OR\
26
+ LOWER(linked_in_url) LIKE LOWER('%#{query}%') OR\
27
+ LOWER(google_plus_url) LIKE LOWER('%#{query}%') OR\
28
+ LOWER(facebook_url) LIKE LOWER('%#{query}%') OR\
29
+ LOWER(twitter_url) LIKE LOWER('%#{query}%')")}
30
+
31
+ scope :upcoming, lambda { where("created_at >= ?", Time.now) }
32
+ scope :past, lambda { where("created_at < ?", Time.now) }
33
+
34
+ # ------------------
35
+ # Instance variables
36
+ # ------------------
37
+
38
+ # Generic Methods
39
+ # ---------------
40
+ def to_param
41
+ "#{id}-#{name.parameterize[0..32]}"
42
+ end
43
+
44
+ def display_name
45
+ "#{name_was}"
46
+ end
47
+
48
+ # Permission Methods
49
+ # ------------------
50
+
51
+ def can_be_edited?
52
+ status?(:published) or status?(:unpublished)
53
+ end
54
+
55
+ def can_be_deleted?
56
+ status?(:removed)
57
+ end
58
+
59
+ end
@@ -0,0 +1,57 @@
1
+ class Dhatu::Testimonial < Dhatu::ApplicationRecord
2
+
3
+ # Set Table Name
4
+ self.table_name = "testimonials"
5
+
6
+ # Including the State Machine Methods
7
+ include Publishable
8
+ include Featureable
9
+
10
+ # Validations
11
+ validates :name, presence: true, length: {minimum: 3, maximum: 256}, allow_blank: false
12
+ validates :designation, presence: true, length: {minimum: 3, maximum: 256}, allow_blank: true
13
+ validates :organisation, presence: true, length: {minimum: 3, maximum: 256}, allow_blank: true
14
+ validates :statement, presence: true, allow_blank: false
15
+
16
+ # Associations
17
+ has_one :profile_image, :as => :imageable, :dependent => :destroy, :class_name => "Image::ProfileImage"
18
+ has_one :logo_image, :as => :imageable, :dependent => :destroy, :class_name => "Image::LogoImage"
19
+
20
+ # ------------------
21
+ # Class Methods
22
+ # ------------------
23
+
24
+ scope :search, lambda {|query| where("LOWER(name) LIKE LOWER('%#{query}%') OR\
25
+ LOWER(designation) LIKE LOWER('%#{query}%') OR\
26
+ LOWER(organisation) LIKE LOWER('%#{query}%') OR\
27
+ LOWER(status) LIKE LOWER('%#{query}%')")}
28
+
29
+ scope :upcoming, lambda { where("created_at >= ?", Time.now) }
30
+ scope :past, lambda { where("created_at < ?", Time.now) }
31
+
32
+ # ------------------
33
+ # Instance variables
34
+ # ------------------
35
+
36
+ # Generic Methods
37
+ # ---------------
38
+ def to_param
39
+ "#{id}-#{name.parameterize[0..32]}"
40
+ end
41
+
42
+ def display_name
43
+ "#{name_was}"
44
+ end
45
+
46
+ # Permission Methods
47
+ # ------------------
48
+
49
+ def can_be_edited?
50
+ status?(:published) or status?(:unpublished)
51
+ end
52
+
53
+ def can_be_deleted?
54
+ status?(:removed)
55
+ end
56
+
57
+ end
@@ -0,0 +1,42 @@
1
+ <%= form_for(@blog_post,
2
+ :url => (@blog_post.new_record? ? dhatu.blog_posts_path : dhatu.blog_post_path),
3
+ :method => (@blog_post.new_record? ? :post : :put),
4
+ :remote => true,
5
+ :html => {:id=>"form_blog_post", :class=>"mb-0 form-horizontal"}) do |f| %>
6
+
7
+ <div id="blog_post_form_error">
8
+ <%= @blog_post.errors[:base].to_sentence %>
9
+ </div>
10
+
11
+ <div class="form-inputs m-15">
12
+
13
+ <%= theme_form_field(@blog_post, :title, form_style: "top-bottom") %>
14
+
15
+ <%= theme_form_field(@blog_post, :slug, form_style: "top-bottom", html_options: {"data-id": @blog_post.id.to_s}) %>
16
+
17
+ <%= theme_form_field(@blog_post, :meta_description, required: true, html_options: {type: :textarea, class: "form-control", style: "height: 80px;"}, form_style: "top-bottom") %>
18
+
19
+ <%= theme_form_field(@blog_post, :description, required: true, html_options: {type: :textarea, class: "form-control wysihtml5", "data-stylesheet-url": "assets/wysiwyg-color.css"}, form_style: "top-bottom") %>
20
+
21
+ <div class="row">
22
+ <div class="col-md-4 pr-20">
23
+ <%= theme_form_field(@blog_post, :posted_at, required: false, html_options: {type: :date}, form_style: "top-bottom") %>
24
+ </div>
25
+ <div class="col-md-4 pl-20">
26
+ <%= theme_form_field(@blog_post, :author, required: false, form_style: "top-bottom") %>
27
+ </div>
28
+ </div>
29
+
30
+ </div>
31
+
32
+ <div>
33
+ <%= submit_tag("Save", :class=>"btn btn-primary pull-right ml-10") %>
34
+
35
+ <%= link_to raw("<i class='fa fa-close mr-5'></i><span>Cancel</span>"), "#", onclick: "closeLargeModal();", class: "pull-right btn btn-white" %>
36
+ </div>
37
+
38
+ <%= clear_tag %>
39
+ </div>
40
+
41
+ <% end %>
42
+