dhatu 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/dhatu/categories_controller.rb +129 -0
- data/app/models/dhatu/blog_post.rb +0 -4
- data/app/models/dhatu/category.rb +264 -0
- data/app/models/image/category_image.rb +3 -0
- data/app/uploaders/category_image_uploader.rb +15 -0
- data/app/views/dhatu/categories/_form.html.erb +36 -0
- data/app/views/dhatu/categories/_index.html.erb +157 -0
- data/app/views/dhatu/categories/_row.html.erb +84 -0
- data/app/views/dhatu/categories/_show.html.erb +100 -0
- data/app/views/dhatu/categories/index.html.erb +20 -0
- data/config/routes.rb +9 -0
- data/lib/dhatu/version.rb +1 -1
- metadata +17 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7fa0a222775b06b12a71c3ee569d4f7143f5d6aa
|
4
|
+
data.tar.gz: 9723db066cfbdec803a21f9afc085b2446672914
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd1d3ab466efa68e245050534e7e945fc038a167d33683944894d41f9ffdb812561050c9acf08a3c0838e1b65aeb30557d8d78351c1b979a876f44095b754dcc
|
7
|
+
data.tar.gz: 69a608697a1e2754d06db47e02e5d703d95a03aa4a6fc8dd97f1cf6d19040712ad443cd3c06de7e2a511ac285cdd66b751f1a946e007a5f065f6530eca38151a
|
@@ -0,0 +1,129 @@
|
|
1
|
+
module Dhatu
|
2
|
+
class CategoriesController < ResourceController
|
3
|
+
|
4
|
+
before_action :require_update_permission, only: [:update_status, :make_parent, :mark_as_featured, :remove_from_featured]
|
5
|
+
|
6
|
+
def update_status
|
7
|
+
@category = @r_object = Dhatu::Category.find(params[:id])
|
8
|
+
case params[:status]
|
9
|
+
when "unpublished"
|
10
|
+
@category.unpublish!
|
11
|
+
when "removed"
|
12
|
+
@category.remove!
|
13
|
+
when "published"
|
14
|
+
@category.publish!
|
15
|
+
end
|
16
|
+
set_notification(true, I18n.t('status.success'), I18n.t('state.changed', item: default_item_name.titleize, new_state: @r_object.status))
|
17
|
+
render_row
|
18
|
+
end
|
19
|
+
|
20
|
+
def make_parent
|
21
|
+
@category = @r_object = Dhatu::Category.find(params[:id])
|
22
|
+
@category.update_attribute(:parent_id, nil)
|
23
|
+
get_collections
|
24
|
+
render_accordingly
|
25
|
+
end
|
26
|
+
|
27
|
+
def mark_as_featured
|
28
|
+
@category = @r_object = Dhatu::Category.find(params[:id])
|
29
|
+
@category.update_attribute(:featured, true) if @category.published?
|
30
|
+
render_row
|
31
|
+
end
|
32
|
+
|
33
|
+
def remove_from_featured
|
34
|
+
@category = @r_object = Dhatu::Category.find(params[:id])
|
35
|
+
@category.update_attribute(:featured, false) if @category.featured?
|
36
|
+
render_row
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def permitted_params
|
42
|
+
params[:category].permit(:name, :permalink, :one_liner, :description, :parent_id, :priority)
|
43
|
+
end
|
44
|
+
|
45
|
+
def resource_url(obj)
|
46
|
+
url_for([:admin, obj])
|
47
|
+
end
|
48
|
+
|
49
|
+
def set_navs
|
50
|
+
set_nav("admin/categories")
|
51
|
+
end
|
52
|
+
|
53
|
+
def get_collections
|
54
|
+
|
55
|
+
@current_category = Dhatu::Category.find_by_id(params[:parent_id])
|
56
|
+
|
57
|
+
filter_param_mapping
|
58
|
+
parse_filters
|
59
|
+
|
60
|
+
if @query
|
61
|
+
@relation = Dhatu::Category.includes(:parent)
|
62
|
+
else
|
63
|
+
if @current_category
|
64
|
+
@relation = @current_category.sub_categories.includes(:parent)
|
65
|
+
else
|
66
|
+
@relation = Dhatu::Category.where("parent_id IS NULL")
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
@relation = @relation.order("priority ASC, name ASC")
|
71
|
+
|
72
|
+
apply_filters
|
73
|
+
|
74
|
+
@categories = @r_objects = @relation.page(@current_page).per(@per_page)
|
75
|
+
|
76
|
+
return true
|
77
|
+
end
|
78
|
+
|
79
|
+
def apply_filters
|
80
|
+
@relation = @relation.search(@query) if @query
|
81
|
+
@relation = @relation.status(@status) if @status
|
82
|
+
@relation = @relation.featured(@featured) unless @featured.nil?
|
83
|
+
end
|
84
|
+
|
85
|
+
def filter_config
|
86
|
+
@filter_config = {
|
87
|
+
boolean_filters: [
|
88
|
+
{ filter_name: :featured }
|
89
|
+
],
|
90
|
+
string_filters: [
|
91
|
+
{ filter_name: :query },
|
92
|
+
{ filter_name: :status }
|
93
|
+
],
|
94
|
+
reference_filters: [],
|
95
|
+
variable_filters: [],
|
96
|
+
}
|
97
|
+
end
|
98
|
+
|
99
|
+
def resource_controller_configuration
|
100
|
+
{
|
101
|
+
page_title: "Categories",
|
102
|
+
js_view_path: "/kuppayam/workflows/peacock",
|
103
|
+
view_path: "/dhatu/categories",
|
104
|
+
collection_name: :categories,
|
105
|
+
item_name: :category,
|
106
|
+
class: Dhatu::Category
|
107
|
+
}
|
108
|
+
end
|
109
|
+
|
110
|
+
def breadcrumbs_configuration
|
111
|
+
{
|
112
|
+
heading: "Manage Categories",
|
113
|
+
icon: "fa-sitemap",
|
114
|
+
description: "Listing all Categories",
|
115
|
+
links: [{name: "Home", link: dashboard_path, icon: 'fa-home'},
|
116
|
+
{name: "Manage Categories", link: dhatu.categories_path, icon: 'fa-sitemap', active: true}]
|
117
|
+
}
|
118
|
+
end
|
119
|
+
|
120
|
+
def permitted_params
|
121
|
+
params.require(:category).permit(:name, :one_liner, :description, :priority, :parent_id)
|
122
|
+
end
|
123
|
+
|
124
|
+
def set_navs
|
125
|
+
set_nav("dhatu/categories")
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,264 @@
|
|
1
|
+
class Dhatu::Category < ApplicationRecord
|
2
|
+
|
3
|
+
# Constants
|
4
|
+
PUBLISHED = "published"
|
5
|
+
UNPUBLISHED = "unpublished"
|
6
|
+
REMOVED = "removed"
|
7
|
+
|
8
|
+
STATUS = {
|
9
|
+
PUBLISHED => "Published",
|
10
|
+
UNPUBLISHED => "Un-Published",
|
11
|
+
REMOVED => "Removed"
|
12
|
+
}
|
13
|
+
|
14
|
+
STATUS_REVERSE = {
|
15
|
+
"Published" => PUBLISHED,
|
16
|
+
"Un-Published" => UNPUBLISHED,
|
17
|
+
"Removed" => REMOVED
|
18
|
+
}
|
19
|
+
|
20
|
+
FEATURED = {"Featured" => true, "Non Featured" => false}
|
21
|
+
FEATURED_REVERSE = {true => "Featured", false => "Non Featured"}
|
22
|
+
|
23
|
+
EXCLUDED_JSON_ATTRIBUTES = [:created_at, :updated_at, :parent_id, :top_parent_id]
|
24
|
+
|
25
|
+
# Callbacks
|
26
|
+
before_validation :generate_permalink, on: :create
|
27
|
+
before_validation :set_top_parent, on: :create
|
28
|
+
after_create :update_permalink, :set_end_node_of_parent
|
29
|
+
after_destroy :set_end_node_of_parent
|
30
|
+
|
31
|
+
# Validations
|
32
|
+
validate_string :name, mandatory: true, min_length: 2, format: /.*/i
|
33
|
+
validate_string :one_liner, mandatory: false, format: /.*/i
|
34
|
+
validate_string :permalink, mandatory: true, format: /.*/i, min_length: 4, max_length: 128
|
35
|
+
validates :status, :presence=> true, :inclusion => {:in => STATUS.keys, :presence_of => :status, :message => "%{value} is not a valid status" }
|
36
|
+
|
37
|
+
# Associations
|
38
|
+
belongs_to :parent, :class_name => 'Dhatu::Category', optional: true
|
39
|
+
belongs_to :top_parent, :class_name => 'Dhatu::Category', optional: true
|
40
|
+
has_many :sub_categories, :foreign_key => "parent_id", :class_name => "Dhatu::Category"
|
41
|
+
has_one :category_image, :as => :imageable, :dependent => :destroy, :class_name => "Image::CategoryImage"
|
42
|
+
has_many :classified_attributes
|
43
|
+
|
44
|
+
has_one :category_image, :as => :imageable, :dependent => :destroy, :class_name => "Image::CoverImage"
|
45
|
+
has_many :gallery_images, :as => :imageable, :dependent => :destroy, :class_name => "Image::GalleryImage"
|
46
|
+
|
47
|
+
# ---------------
|
48
|
+
# Class methods
|
49
|
+
# ---------------
|
50
|
+
|
51
|
+
# return an active record relation object with the search query in its where clause
|
52
|
+
# Return the ActiveRecord::Relation object
|
53
|
+
# == Examples
|
54
|
+
# >>> object.search(query)
|
55
|
+
# => ActiveRecord::Relation object
|
56
|
+
scope :search, lambda {|query| where("LOWER(name) LIKE LOWER('%#{query}%') OR\
|
57
|
+
LOWER(permalink) LIKE LOWER('%#{query}%') OR\
|
58
|
+
LOWER(one_liner) LIKE LOWER('%#{query}%') OR\
|
59
|
+
LOWER(description) LIKE LOWER('%#{query}%')")
|
60
|
+
}
|
61
|
+
|
62
|
+
scope :status, lambda { |status| where("LOWER(status)='#{status}'") }
|
63
|
+
scope :featured, lambda { |val| where(featured: val) }
|
64
|
+
|
65
|
+
scope :published, -> { where(status: PUBLISHED) }
|
66
|
+
scope :unpublished, -> { where(status: UNPUBLISHED) }
|
67
|
+
scope :removed, -> { where(status: REMOVED) }
|
68
|
+
|
69
|
+
# Import Methods
|
70
|
+
|
71
|
+
def self.save_row_data(hsh)
|
72
|
+
|
73
|
+
# Initializing error hash for displaying all errors altogether
|
74
|
+
error_object = Kuppayam::Importer::ErrorHash.new
|
75
|
+
|
76
|
+
return error_object if hsh[:name].blank?
|
77
|
+
|
78
|
+
category = Dhatu::Category.find_by_name(hsh[:name]) || Dhatu::Category.new
|
79
|
+
category.name = hsh[:name]
|
80
|
+
category.one_liner = hsh[:one_liner]
|
81
|
+
category.description = hsh[:description]
|
82
|
+
category.priority = hsh[:priority]
|
83
|
+
|
84
|
+
parent = Dhatu::Category.find_by_name(hsh[:parent])
|
85
|
+
category.parent = parent
|
86
|
+
category.top_parent = parent && parent.top_parent ? parent.top_parent : parent
|
87
|
+
category.status = PUBLISHED
|
88
|
+
|
89
|
+
# Initializing error hash for displaying all errors altogether
|
90
|
+
error_object = Kuppayam::Importer::ErrorHash.new
|
91
|
+
|
92
|
+
if category.valid?
|
93
|
+
begin
|
94
|
+
category.save!
|
95
|
+
rescue Exception => e
|
96
|
+
summary = "uncaught #{e} exception while handling connection: #{e.message}"
|
97
|
+
details = "Stack trace: #{e.backtrace.map {|l| " #{l}\n"}.join}"
|
98
|
+
error_object.errors << { summary: summary, details: details }
|
99
|
+
end
|
100
|
+
else
|
101
|
+
summary = "Error while saving category: #{category.name}"
|
102
|
+
details = "Error! #{category.errors.full_messages.to_sentence}"
|
103
|
+
error_object.errors << { summary: summary, details: details }
|
104
|
+
end
|
105
|
+
|
106
|
+
return error_object
|
107
|
+
end
|
108
|
+
|
109
|
+
# ------------------
|
110
|
+
# Instance methods
|
111
|
+
# ------------------
|
112
|
+
|
113
|
+
# Exclude some attributes info from json output.
|
114
|
+
def as_json(options={})
|
115
|
+
options[:except] ||= EXCLUDED_JSON_ATTRIBUTES
|
116
|
+
options[:include] ||= [:parent, :top_parent, :sub_categories]
|
117
|
+
#options[:methods] = []
|
118
|
+
#options[:methods] << :profile_image
|
119
|
+
json = super(options)
|
120
|
+
# Hash[*json.map{|k, v| [k, v || ""]}.flatten]
|
121
|
+
end
|
122
|
+
|
123
|
+
# Status methods
|
124
|
+
# ------------------
|
125
|
+
|
126
|
+
# * Return true if the category is published, else false.
|
127
|
+
# == Examples
|
128
|
+
# >>> category.published?
|
129
|
+
# => true
|
130
|
+
def published?
|
131
|
+
(status == PUBLISHED)
|
132
|
+
end
|
133
|
+
|
134
|
+
# change the status to :published
|
135
|
+
# Return the status
|
136
|
+
# == Examples
|
137
|
+
# >>> category.publish!
|
138
|
+
# => "published"
|
139
|
+
def publish!
|
140
|
+
self.update_attribute(:status, PUBLISHED)
|
141
|
+
end
|
142
|
+
|
143
|
+
# * Return true if the category is unpublished, else false.
|
144
|
+
# == Examples
|
145
|
+
# >>> category.unpublished?
|
146
|
+
# => true
|
147
|
+
def unpublished?
|
148
|
+
(status == UNPUBLISHED)
|
149
|
+
end
|
150
|
+
|
151
|
+
# change the status to :unpublished
|
152
|
+
# Return the status
|
153
|
+
# == Examples
|
154
|
+
# >>> category.unpublish!
|
155
|
+
# => "unpublished"
|
156
|
+
def unpublish!
|
157
|
+
self.update_attribute(:status, UNPUBLISHED)
|
158
|
+
end
|
159
|
+
|
160
|
+
# * Return true if the category is removed, else false.
|
161
|
+
# == Examples
|
162
|
+
# >>> category.removed?
|
163
|
+
# => true
|
164
|
+
def removed?
|
165
|
+
(status == REMOVED)
|
166
|
+
end
|
167
|
+
|
168
|
+
# change the status to :removed
|
169
|
+
# Return the status
|
170
|
+
# == Examples
|
171
|
+
# >>> category.remove!
|
172
|
+
# => "removed"
|
173
|
+
def remove!
|
174
|
+
self.update_attribute(:status, REMOVED)
|
175
|
+
end
|
176
|
+
|
177
|
+
# Other Methods
|
178
|
+
# ------------------
|
179
|
+
|
180
|
+
def display_name
|
181
|
+
self.name
|
182
|
+
end
|
183
|
+
|
184
|
+
def default_image_url(size="medium")
|
185
|
+
"/assets/defaults/category-#{size}.png"
|
186
|
+
end
|
187
|
+
|
188
|
+
# Permission Methods
|
189
|
+
# ------------------
|
190
|
+
|
191
|
+
def can_be_edited?
|
192
|
+
published? or unpublished?
|
193
|
+
end
|
194
|
+
|
195
|
+
def can_be_deleted?
|
196
|
+
return false unless removed?
|
197
|
+
return false if parent.nil?
|
198
|
+
return false if end_node == false or self.sub_categories.any?
|
199
|
+
true
|
200
|
+
end
|
201
|
+
|
202
|
+
def can_be_published?
|
203
|
+
unpublished? or removed?
|
204
|
+
end
|
205
|
+
|
206
|
+
def can_be_unpublished?
|
207
|
+
return false if end_node == false or self.sub_categories.any?
|
208
|
+
published? or removed?
|
209
|
+
end
|
210
|
+
|
211
|
+
def can_be_removed?
|
212
|
+
return false if parent.nil?
|
213
|
+
return false if end_node == false or self.sub_categories.any?
|
214
|
+
published? or unpublished?
|
215
|
+
end
|
216
|
+
|
217
|
+
# Callback methods
|
218
|
+
# ------------------
|
219
|
+
|
220
|
+
def set_end_node!
|
221
|
+
self.update_attribute(:end_node, !self.sub_categories.any?)
|
222
|
+
end
|
223
|
+
|
224
|
+
def set_end_node_of_parent
|
225
|
+
if self.parent
|
226
|
+
if self.parent.sub_categories.any?
|
227
|
+
self.parent.update_attribute(:end_node, false)
|
228
|
+
else
|
229
|
+
self.parent.update_attribute(:end_node, true)
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
protected
|
235
|
+
|
236
|
+
def generate_permalink
|
237
|
+
return unless self.name
|
238
|
+
if self.parent
|
239
|
+
perm = "#{self.name.parameterize}-#{self.parent.name.parameterize}"
|
240
|
+
else
|
241
|
+
perm = self.name.parameterize
|
242
|
+
end
|
243
|
+
self.permalink = "#{SecureRandom.hex(4)}-#{perm[0..110]}"
|
244
|
+
end
|
245
|
+
|
246
|
+
def update_permalink
|
247
|
+
if self.parent
|
248
|
+
self.permalink = "#{self.id}-#{self.name.parameterize}-#{self.parent.name.parameterize}"
|
249
|
+
else
|
250
|
+
self.permalink = "#{self.id}-#{self.name.parameterize}" if self.name
|
251
|
+
end
|
252
|
+
self.save
|
253
|
+
end
|
254
|
+
|
255
|
+
def set_top_parent
|
256
|
+
return if self.parent.blank?
|
257
|
+
if self.parent.top_parent.blank?
|
258
|
+
self.top_parent = self.parent
|
259
|
+
else
|
260
|
+
self.top_parent = self.parent.top_parent
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CategoryImageUploader < ImageUploader
|
2
|
+
|
3
|
+
def store_dir
|
4
|
+
"uploads/category_images/#{model.id}"
|
5
|
+
end
|
6
|
+
|
7
|
+
version :small do
|
8
|
+
process :resize_to_fill => [100, 100]
|
9
|
+
end
|
10
|
+
|
11
|
+
version :tiny do
|
12
|
+
process :resize_to_fill => [40, 40]
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<%= form_for([:admin, @category], :html => {:id=>"form_category", :class=>"mb-0 form-horizontal", :role => "form", :method => (@category.new_record? ? :post : :put), :remote=>true}) do |f| %>
|
2
|
+
|
3
|
+
<div id="category_form_error">
|
4
|
+
<%= @category.errors[:base].to_sentence %>
|
5
|
+
</div>
|
6
|
+
|
7
|
+
<div class="form-inputs mb-30 mt-30">
|
8
|
+
<%= theme_form_field(@category, :name) %>
|
9
|
+
|
10
|
+
<%= theme_form_field(@category, :one_liner, required: false) %>
|
11
|
+
<%= theme_form_field(@category, :description, required: false, html_options: {type: :textarea}) %>
|
12
|
+
<%= theme_form_field(@category, :priority, required: false, html_options: {type: :number, style: "width:70px;"}) %>
|
13
|
+
|
14
|
+
<%
|
15
|
+
@category.parent_id = params[:parent_id] if params[:parent_id]
|
16
|
+
categories = Category.select("id, name").order("name ASC").all
|
17
|
+
%>
|
18
|
+
|
19
|
+
<% options = {assoc_collection: categories, required: false, editable: true, assoc_display_method: :name} %>
|
20
|
+
<%= theme_form_assoc_group(@category, :parent_id, **options) %>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
<div>
|
26
|
+
|
27
|
+
<%= submit_tag("Save", :class=>"btn btn-primary pull-right ml-10") %>
|
28
|
+
|
29
|
+
<%= link_to raw("<i class='fa fa-close mr-5'></i><span>Cancel</span>"), "#", onclick: "closeGenericModal();", class: "pull-right ml-10 btn btn-white" %>
|
30
|
+
|
31
|
+
</div>
|
32
|
+
<%= clear_tag(10) %>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<% end %>
|
36
|
+
|
@@ -0,0 +1,157 @@
|
|
1
|
+
<div id="div_category_action_buttons">
|
2
|
+
<div class="row">
|
3
|
+
<div class="col-md-6">
|
4
|
+
|
5
|
+
<% if @current_category %>
|
6
|
+
<%= theme_button('Back', 'arrow-left', categories_path(parent_id: @current_category.parent_id), classes: "pull-left mr-10", btn_type: "white") %>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<%= theme_button('Refresh', 'refresh', categories_path(parent_id: @current_category.try(:id)), classes: "pull-left mr-10", btn_type: "white") %>
|
10
|
+
|
11
|
+
<% if @current_category.try(:id) && @current_user.has_create_permission?(Category) %>
|
12
|
+
<%= theme_button('Add a Category', 'plus', new_category_path(parent_id: @current_category.try(:id)), classes: "pull-left mr-10", btn_type: "success") %>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
</div>
|
16
|
+
<div class="col-md-6">
|
17
|
+
<%= search_form_kuppayam(Category, categories_path, text: @filters[:query]) %>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
<%= clear_tag(10) %>
|
22
|
+
|
23
|
+
<div id="div_category_breadcrumbs">
|
24
|
+
<% c_list = [] %>
|
25
|
+
<% c = @current_category %>
|
26
|
+
<% while c do %>
|
27
|
+
<% c_list << c %>
|
28
|
+
<% c = c.parent %>
|
29
|
+
<% end %>
|
30
|
+
|
31
|
+
<% if c_list.count >= 1 %>
|
32
|
+
<ol class="breadcrumb auto-hidden1 bc-3">
|
33
|
+
<% c_list.reverse.each do |c| %>
|
34
|
+
<% if c_list[0] == c %>
|
35
|
+
<li class="active"><strong><%= c.display_name %></strong></li>
|
36
|
+
<% else %>
|
37
|
+
<li><%= link_to c.display_name, categories_path(parent_id: c.id), remote: true, class: "collapsed" %></li>
|
38
|
+
<% end %>
|
39
|
+
<% end %>
|
40
|
+
</ol>
|
41
|
+
<% end %>
|
42
|
+
</div>
|
43
|
+
<%= clear_tag %>
|
44
|
+
|
45
|
+
<div class="table-responsive">
|
46
|
+
<table class="table table-hover members-table middle-align">
|
47
|
+
<thead>
|
48
|
+
<tr>
|
49
|
+
<th style="text-align: center;width:60px">#</th>
|
50
|
+
<th>Name</th>
|
51
|
+
<th>Parent</th>
|
52
|
+
<th>Top Parent</th>
|
53
|
+
<th style="text-align: center;width:100px;">Status</th>
|
54
|
+
<th style="text-align: center;width:100px;">Priority</th>
|
55
|
+
<th style="text-align: center;width:120px;">End Node?</th>
|
56
|
+
<% if display_manage_links? %>
|
57
|
+
<th style="text-align: center;" colspan="2">Actions</th>
|
58
|
+
<% end %>
|
59
|
+
</tr>
|
60
|
+
</thead>
|
61
|
+
<tbody>
|
62
|
+
<% @categories.each_with_index do |category, i| %>
|
63
|
+
<tr id="tr_category_<%= category.id %>">
|
64
|
+
|
65
|
+
<th scope="row" style="text-align: center;">
|
66
|
+
<% if i < 0 %>
|
67
|
+
<i class="fa fa-check text-success"></i>
|
68
|
+
<% else %>
|
69
|
+
<%= i + 1 + (@per_page.to_i * (@current_page.to_i - 1)) %>
|
70
|
+
<% end %>
|
71
|
+
</th>
|
72
|
+
|
73
|
+
<% if category.end_node? %>
|
74
|
+
<td class="category-name"><%= category.display_name %></td>
|
75
|
+
<% else %>
|
76
|
+
<td class="category-name">
|
77
|
+
<%= link_to raw("<i class=\"fa fa-caret-right\"></i> #{category.display_name}"), categories_path(parent_id: category.id), remote: true %></td>
|
78
|
+
<% end %>
|
79
|
+
|
80
|
+
<% if category.parent == @current_category %>
|
81
|
+
<td class="category-name"><%= category.parent.display_name if category.parent %></td>
|
82
|
+
<% else %>
|
83
|
+
<td class="category-name"><%= link_to category.parent.display_name, categories_path(parent_id: category.parent.id), remote: true if category.parent %></td>
|
84
|
+
<% end %>
|
85
|
+
|
86
|
+
<% if category.top_parent == @current_category %>
|
87
|
+
<td class="category-name"><%= category.top_parent.display_name if category.top_parent %></td>
|
88
|
+
<% else %>
|
89
|
+
<td class="category-name"><%= link_to category.top_parent.display_name, categories_path(parent_id: category.top_parent.id), remote: true if category.top_parent %></td>
|
90
|
+
<% end %>
|
91
|
+
|
92
|
+
<td style="text-align: center;width:100px;">
|
93
|
+
<% if category.unpublished? %>
|
94
|
+
<span class="ml-5 mt-5 label label-default">Un-Published</span>
|
95
|
+
<% elsif category.published? %>
|
96
|
+
<span class="ml-5 mt-5 label label-success">Published</span>
|
97
|
+
<% elsif category.removed? %>
|
98
|
+
<span class="ml-5 mt-5 label label-danger">Disabled</span>
|
99
|
+
<% end %>
|
100
|
+
</td>
|
101
|
+
|
102
|
+
<td style="text-align: center;width:100px;"><%= category.priority if category.priority %></td>
|
103
|
+
<td style="text-align: center;width:120px;"><%= category.end_node.to_s.titleize %></td>
|
104
|
+
|
105
|
+
<% if display_manage_links? %>
|
106
|
+
<% edit_link = edit_category_path(id: category.id) %>
|
107
|
+
<% delete_link = category_path(id: category.id) %>
|
108
|
+
|
109
|
+
<td class="action-links" style="width:10%">
|
110
|
+
|
111
|
+
<% case category.status %>
|
112
|
+
<% when "published" %>
|
113
|
+
<!-- Un-Publish -->
|
114
|
+
<%= link_to raw("<i class=\"fa fa-circle mr-5\"></i> Un-Publish"), update_status_category_path(:id =>category.id, :status =>'unpublished'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1", :class=>"category_status" if category.can_be_unpublished? %>
|
115
|
+
|
116
|
+
<!-- Remove -->
|
117
|
+
<%= link_to raw("<i class=\"fa fa-edit mr-5\"></i> Remove"), update_status_category_path(:id =>category.id, :status =>'removed'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1", :class=>"category_status" if category.can_be_removed? %>
|
118
|
+
<% when "unpublished" %>
|
119
|
+
<!-- Publish -->
|
120
|
+
<%= link_to raw("<i class=\"fa fa-circle-o mr-5\"></i> Publish"), update_status_category_path(:id =>category.id, :status =>'published'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1", :class=>"category_status" if category.can_be_published? %>
|
121
|
+
<!-- Remove -->
|
122
|
+
<%= link_to raw("<i class=\"fa fa-edit mr-5\"></i> Remove"), update_status_category_path(:id =>category.id, :status =>'removed'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1", :class=>"category_status" if category.can_be_removed? %>
|
123
|
+
<% when "removed" %>
|
124
|
+
<!-- Un-Publish -->
|
125
|
+
<%= link_to raw("<i class=\"fa fa-circle mr-5\"></i> Un-Publish"), update_status_category_path(:id =>category.id, :status =>'unpublished'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1", :class=>"category_status" if category.can_be_unpublished? %>
|
126
|
+
<!-- Publish -->
|
127
|
+
<%= link_to raw("<i class=\"fa fa-circle-o mr-5\"></i> Publish"), update_status_category_path(:id =>category.id, :status =>'published'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1",:class=>"category_status" if category.can_be_published? %>
|
128
|
+
<% end %>
|
129
|
+
|
130
|
+
</td>
|
131
|
+
|
132
|
+
<td class="action-links" style="width:10%">
|
133
|
+
|
134
|
+
<%= link_to raw("<i class=\"linecons-desktop\"></i> View Details"), category_path(category), :remote=>true, style: "color:#40bbea" %>
|
135
|
+
|
136
|
+
<%= link_to raw("<i class=\"fa-plus\"></i> Add Sub Category"), new_category_path(parent_id: category.id), :remote=>true, class: "edit" %>
|
137
|
+
|
138
|
+
<%= link_to raw("<i class=\"linecons-pencil\"></i> Edit Category"), edit_link, :remote=>true, class: "edit1" if category.can_be_edited? %>
|
139
|
+
|
140
|
+
<%= link_to raw("<i class=\"linecons-trash\"></i> Delete"), delete_link, method: :delete, role: "menuitem", tabindex: "-1", data: { confirm: 'Are you sure?' }, :remote=>true, class: "delete" if category.can_be_deleted? && display_delete_links? %>
|
141
|
+
|
142
|
+
</td>
|
143
|
+
|
144
|
+
<% end %>
|
145
|
+
|
146
|
+
</tr>
|
147
|
+
<% end %>
|
148
|
+
</tbody>
|
149
|
+
</table>
|
150
|
+
</div>
|
151
|
+
|
152
|
+
<div class="row">
|
153
|
+
<div class="col-sm-12">
|
154
|
+
<%= paginate_kuppayam(@categories) %>
|
155
|
+
</div>
|
156
|
+
</div>
|
157
|
+
|
@@ -0,0 +1,84 @@
|
|
1
|
+
<tr id="tr_category_<%= category.id %>">
|
2
|
+
|
3
|
+
<th scope="row" style="text-align: center;">
|
4
|
+
<% if i < 0 %>
|
5
|
+
<i class="fa fa-check text-success"></i>
|
6
|
+
<% else %>
|
7
|
+
<%= i + 1 + (@per_page.to_i * (@current_page.to_i - 1)) %>
|
8
|
+
<% end %>
|
9
|
+
</th>
|
10
|
+
|
11
|
+
<% if category.end_node? %>
|
12
|
+
<td class="category-name"><%= category.display_name %></td>
|
13
|
+
<% else %>
|
14
|
+
<td class="category-name">
|
15
|
+
<%= link_to raw("<i class=\"fa fa-caret-right\"></i> #{category.display_name}"), categories_path(parent_id: category.id), remote: true %></td>
|
16
|
+
<% end %>
|
17
|
+
|
18
|
+
<% if category.parent == @current_category %>
|
19
|
+
<td class="category-name"><%= category.parent.display_name if category.parent %></td>
|
20
|
+
<% else %>
|
21
|
+
<td class="category-name"><%= link_to category.parent.display_name, categories_path(parent_id: category.parent.id), remote: true if category.parent %></td>
|
22
|
+
<% end %>
|
23
|
+
|
24
|
+
<% if category.top_parent == @current_category %>
|
25
|
+
<td class="category-name"><%= category.top_parent.display_name if category.top_parent %></td>
|
26
|
+
<% else %>
|
27
|
+
<td class="category-name"><%= link_to category.top_parent.display_name, categories_path(parent_id: category.top_parent.id), remote: true if category.top_parent %></td>
|
28
|
+
<% end %>
|
29
|
+
|
30
|
+
<td style="text-align: center;width:100px;">
|
31
|
+
<% if category.unpublished? %>
|
32
|
+
<span class="ml-5 mt-5 label label-default">Un-Published</span>
|
33
|
+
<% elsif category.published? %>
|
34
|
+
<span class="ml-5 mt-5 label label-success">Published</span>
|
35
|
+
<% elsif category.removed? %>
|
36
|
+
<span class="ml-5 mt-5 label label-danger">Disabled</span>
|
37
|
+
<% end %>
|
38
|
+
</td>
|
39
|
+
|
40
|
+
<td style="text-align: center;width:100px;"><%= category.priority if category.priority %></td>
|
41
|
+
<td style="text-align: center;width:120px;"><%= category.end_node.to_s.titleize %></td>
|
42
|
+
|
43
|
+
<% if display_manage_links? %>
|
44
|
+
<% edit_link = edit_category_path(id: category.id) %>
|
45
|
+
<% delete_link = category_path(id: category.id) %>
|
46
|
+
|
47
|
+
<td class="action-links" style="width:10%">
|
48
|
+
|
49
|
+
<% case category.status %>
|
50
|
+
<% when "published" %>
|
51
|
+
<!-- Un-Publish -->
|
52
|
+
<%= link_to raw("<i class=\"fa fa-circle mr-5\"></i> Un-Publish"), update_status_category_path(:id =>category.id, :status =>'unpublished'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1", :class=>"category_status" if category.can_be_unpublished? %>
|
53
|
+
|
54
|
+
<!-- Remove -->
|
55
|
+
<%= link_to raw("<i class=\"fa fa-edit mr-5\"></i> Remove"), update_status_category_path(:id =>category.id, :status =>'removed'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1", :class=>"category_status" if category.can_be_removed? %>
|
56
|
+
<% when "unpublished" %>
|
57
|
+
<!-- Publish -->
|
58
|
+
<%= link_to raw("<i class=\"fa fa-circle-o mr-5\"></i> Publish"), update_status_category_path(:id =>category.id, :status =>'published'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1", :class=>"category_status" if category.can_be_published? %>
|
59
|
+
<!-- Remove -->
|
60
|
+
<%= link_to raw("<i class=\"fa fa-edit mr-5\"></i> Remove"), update_status_category_path(:id =>category.id, :status =>'removed'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1", :class=>"category_status" if category.can_be_removed? %>
|
61
|
+
<% when "removed" %>
|
62
|
+
<!-- Un-Publish -->
|
63
|
+
<%= link_to raw("<i class=\"fa fa-circle mr-5\"></i> Un-Publish"), update_status_category_path(:id =>category.id, :status =>'unpublished'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1", :class=>"category_status" if category.can_be_unpublished? %>
|
64
|
+
<!-- Publish -->
|
65
|
+
<%= link_to raw("<i class=\"fa fa-circle-o mr-5\"></i> Publish"), update_status_category_path(:id =>category.id, :status =>'published'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1",:class=>"category_status" if category.can_be_published? %>
|
66
|
+
<% end %>
|
67
|
+
|
68
|
+
</td>
|
69
|
+
|
70
|
+
<td class="action-links" style="width:10%">
|
71
|
+
|
72
|
+
<%= link_to raw("<i class=\"linecons-desktop\"></i> View Details"), category_path(category), :remote=>true, style: "color:#40bbea" %>
|
73
|
+
|
74
|
+
<%= link_to raw("<i class=\"fa-plus\"></i> Add Sub Category"), new_category_path(parent_id: category.id), :remote=>true, class: "edit" %>
|
75
|
+
|
76
|
+
<%= link_to raw("<i class=\"linecons-pencil\"></i> Edit Category"), edit_link, :remote=>true, class: "edit1" if category.can_be_edited? %>
|
77
|
+
|
78
|
+
<%= link_to raw("<i class=\"linecons-trash\"></i> Delete"), delete_link, method: :delete, role: "menuitem", tabindex: "-1", data: { confirm: 'Are you sure?' }, :remote=>true, class: "delete" if category.can_be_deleted? && display_delete_links? %>
|
79
|
+
|
80
|
+
</td>
|
81
|
+
|
82
|
+
<% end %>
|
83
|
+
|
84
|
+
</tr>
|
@@ -0,0 +1,100 @@
|
|
1
|
+
<% status_hash = {published: "success", unpublished: "default", disabled: "danger"} %>
|
2
|
+
|
3
|
+
<div class="media <%= status_hash[@category.status.to_sym] %>">
|
4
|
+
|
5
|
+
<!-- <div class="pull-left pt-10 pr-10 pb-10" style="width:30%;"> -->
|
6
|
+
<%#= edit_image(@category,
|
7
|
+
"category_image.image.small.url",
|
8
|
+
upload_image_link(@category, :category_image, nil ),
|
9
|
+
remove_image_link(@category, :category_image, nil ),
|
10
|
+
image_options: {assoc_name: :category_image }) %>
|
11
|
+
<!-- </div> -->
|
12
|
+
|
13
|
+
<!-- <div class="pull-left ml-10" style="width:65%;"> -->
|
14
|
+
<div class="">
|
15
|
+
|
16
|
+
<h1><%= @category.name %></h1>
|
17
|
+
|
18
|
+
<% if @category.one_liner %>
|
19
|
+
<strong><%= @category.one_liner %></strong>
|
20
|
+
<% end %>
|
21
|
+
|
22
|
+
<% if @category.description %>
|
23
|
+
<p><%= @category.description %></p>
|
24
|
+
<% end %>
|
25
|
+
|
26
|
+
<span class="label label-<%= status_hash[@category.status.to_sym] %>"><%= @category.status.titleize %></span>
|
27
|
+
|
28
|
+
<%= clear_tag %>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
</div>
|
32
|
+
|
33
|
+
<%= clear_tag(30) %>
|
34
|
+
|
35
|
+
<ul class="nav nav-pills">
|
36
|
+
|
37
|
+
<li class="active">
|
38
|
+
<a href="#technical_details" data-toggle="tab" aria-expanded="false">
|
39
|
+
<span class="visible-xs"><i class="fa-database"></i></span>
|
40
|
+
<span class="hidden-xs">Technical Details</span>
|
41
|
+
</a>
|
42
|
+
</li>
|
43
|
+
|
44
|
+
</ul>
|
45
|
+
|
46
|
+
<div class="tab-content">
|
47
|
+
<div class="tab-pane active" id="technical_details" style="border: 1px solid #000;min-height:200px;padding:20px;margin-bottom:20px;max-height: 400px;overflow-y: auto;">
|
48
|
+
|
49
|
+
<%= clear_tag(20) %>
|
50
|
+
|
51
|
+
<div class="table-responsive mb-50">
|
52
|
+
<table class="table table-striped table-condensed table-bordered">
|
53
|
+
<tbody>
|
54
|
+
|
55
|
+
<tr>
|
56
|
+
<th>ID</th><td><%= @category.id %></td>
|
57
|
+
<th>Permalink</th><td><%= @category.permalink %></td>
|
58
|
+
</tr>
|
59
|
+
|
60
|
+
<tr>
|
61
|
+
<th>Parent</th><td><%= @category.parent.try(:display_name) %> (<%= @category.parent.try(:id) %>)</td>
|
62
|
+
<th>Top Parent</th><td><%= @category.top_parent.try(:display_name) %> (<%= @category.top_parent.try(:id) %>)</td>
|
63
|
+
</tr>
|
64
|
+
|
65
|
+
<tr>
|
66
|
+
<th>Status</th><td><%= @category.status %></td>
|
67
|
+
<th>Featured</th><td><%= @category.featured? ? "Yes" : "No" %></td>
|
68
|
+
</tr>
|
69
|
+
|
70
|
+
<tr>
|
71
|
+
<th>Priority</th><td><%= @category.priority %></td>
|
72
|
+
<th>End Node</th><td><%= @category.end_node? ? "Yes" : "No" %></td>
|
73
|
+
</tr>
|
74
|
+
|
75
|
+
<tr>
|
76
|
+
<th>Created At</th><td><%= @category.created_at.strftime("%m/%d/%Y - %H:%M:%S") if @category.created_at %></td>
|
77
|
+
<th>Updated At</th><td><%= @category.updated_at.strftime("%m/%d/%Y - %H:%M:%S") if @category.updated_at %></td>
|
78
|
+
</tr>
|
79
|
+
|
80
|
+
</tbody>
|
81
|
+
</table>
|
82
|
+
</div>
|
83
|
+
|
84
|
+
</div>
|
85
|
+
</div>
|
86
|
+
|
87
|
+
<div>
|
88
|
+
<%
|
89
|
+
edit_link = edit_category_url(id: @category.id)
|
90
|
+
delete_link = category_url(id: @category.id)
|
91
|
+
%>
|
92
|
+
|
93
|
+
<%= link_to raw("<i class=\"fa fa-close mr-5\"></i> <span>Cancel</span>"), "#", onclick: "closeGenericModal();", class: "btn btn-white pull-left" %>
|
94
|
+
|
95
|
+
<%= link_to raw("<i class=\"fa fa-trash mr-5\"></i> <span>Delete</span>"), delete_link, method: :delete, :remote=>true, class: "btn btn-gray pull-right" %>
|
96
|
+
|
97
|
+
<%= link_to raw("<i class=\"fa fa-edit mr-5\"></i> Edit"), edit_link, method: :get, :remote=>true, class: "btn btn-gray pull-right mr-10" %>
|
98
|
+
</div>
|
99
|
+
|
100
|
+
<%= clear_tag %>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<div class="row">
|
2
|
+
|
3
|
+
<div class="col-md-12">
|
4
|
+
|
5
|
+
<ul class="nav nav-tabs">
|
6
|
+
</ul>
|
7
|
+
<div class="tab-content">
|
8
|
+
<div class="tab-pane active">
|
9
|
+
|
10
|
+
<div id="div_category_index">
|
11
|
+
<%= render :partial=>"dhatu/categories/index" %>
|
12
|
+
</div>
|
13
|
+
<%= clear_tag(10) %>
|
14
|
+
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
</div>
|
19
|
+
|
20
|
+
</div>
|
data/config/routes.rb
CHANGED
@@ -60,6 +60,15 @@ Dhatu::Engine.routes.draw do
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
+
resources :categories do
|
64
|
+
member do
|
65
|
+
put :make_parent, as: :make_parent
|
66
|
+
put :update_status, as: :update_status
|
67
|
+
put :mark_as_featured, as: :mark_as_featured
|
68
|
+
put :remove_from_featured, as: :remove_from_featured
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
63
72
|
end
|
64
73
|
|
65
74
|
end
|
data/lib/dhatu/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dhatu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kpvarma
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -107,7 +107,7 @@ dependencies:
|
|
107
107
|
version: '0.1'
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.1.
|
110
|
+
version: 0.1.18
|
111
111
|
type: :runtime
|
112
112
|
prerelease: false
|
113
113
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -117,7 +117,7 @@ dependencies:
|
|
117
117
|
version: '0.1'
|
118
118
|
- - ">="
|
119
119
|
- !ruby/object:Gem::Version
|
120
|
-
version: 0.1.
|
120
|
+
version: 0.1.18
|
121
121
|
- !ruby/object:Gem::Dependency
|
122
122
|
name: pattana
|
123
123
|
requirement: !ruby/object:Gem::Requirement
|
@@ -127,7 +127,7 @@ dependencies:
|
|
127
127
|
version: '0.1'
|
128
128
|
- - ">="
|
129
129
|
- !ruby/object:Gem::Version
|
130
|
-
version: 0.1.
|
130
|
+
version: 0.1.15
|
131
131
|
type: :runtime
|
132
132
|
prerelease: false
|
133
133
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -137,7 +137,7 @@ dependencies:
|
|
137
137
|
version: '0.1'
|
138
138
|
- - ">="
|
139
139
|
- !ruby/object:Gem::Version
|
140
|
-
version: 0.1.
|
140
|
+
version: 0.1.15
|
141
141
|
- !ruby/object:Gem::Dependency
|
142
142
|
name: usman
|
143
143
|
requirement: !ruby/object:Gem::Requirement
|
@@ -147,7 +147,7 @@ dependencies:
|
|
147
147
|
version: '0.3'
|
148
148
|
- - ">="
|
149
149
|
- !ruby/object:Gem::Version
|
150
|
-
version: 0.3.
|
150
|
+
version: 0.3.12
|
151
151
|
type: :runtime
|
152
152
|
prerelease: false
|
153
153
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -157,7 +157,7 @@ dependencies:
|
|
157
157
|
version: '0.3'
|
158
158
|
- - ">="
|
159
159
|
- !ruby/object:Gem::Version
|
160
|
-
version: 0.3.
|
160
|
+
version: 0.3.12
|
161
161
|
- !ruby/object:Gem::Dependency
|
162
162
|
name: bcrypt
|
163
163
|
requirement: !ruby/object:Gem::Requirement
|
@@ -408,6 +408,7 @@ files:
|
|
408
408
|
- app/controllers/dhatu/application_controller.rb
|
409
409
|
- app/controllers/dhatu/blog_posts_controller.rb
|
410
410
|
- app/controllers/dhatu/branches_controller.rb
|
411
|
+
- app/controllers/dhatu/categories_controller.rb
|
411
412
|
- app/controllers/dhatu/dashboard_controller.rb
|
412
413
|
- app/controllers/dhatu/events_controller.rb
|
413
414
|
- app/controllers/dhatu/offers_controller.rb
|
@@ -421,11 +422,14 @@ files:
|
|
421
422
|
- app/models/dhatu/application_record.rb
|
422
423
|
- app/models/dhatu/blog_post.rb
|
423
424
|
- app/models/dhatu/branch.rb
|
425
|
+
- app/models/dhatu/category.rb
|
424
426
|
- app/models/dhatu/event.rb
|
425
427
|
- app/models/dhatu/offer.rb
|
426
428
|
- app/models/dhatu/section.rb
|
427
429
|
- app/models/dhatu/team_member.rb
|
428
430
|
- app/models/dhatu/testimonial.rb
|
431
|
+
- app/models/image/category_image.rb
|
432
|
+
- app/uploaders/category_image_uploader.rb
|
429
433
|
- app/views/dhatu/blog_posts/_form.html.erb
|
430
434
|
- app/views/dhatu/blog_posts/_index.html.erb
|
431
435
|
- app/views/dhatu/blog_posts/_row.html.erb
|
@@ -436,6 +440,11 @@ files:
|
|
436
440
|
- app/views/dhatu/branches/_row.html.erb
|
437
441
|
- app/views/dhatu/branches/_show.html.erb
|
438
442
|
- app/views/dhatu/branches/index.html.erb
|
443
|
+
- app/views/dhatu/categories/_form.html.erb
|
444
|
+
- app/views/dhatu/categories/_index.html.erb
|
445
|
+
- app/views/dhatu/categories/_row.html.erb
|
446
|
+
- app/views/dhatu/categories/_show.html.erb
|
447
|
+
- app/views/dhatu/categories/index.html.erb
|
439
448
|
- app/views/dhatu/dashboard/_index.html.erb
|
440
449
|
- app/views/dhatu/dashboard/index.html.erb
|
441
450
|
- app/views/dhatu/events/_form.html.erb
|