dhatu 0.1.0

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.
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
+