camaleon_cms 2.1.1.4 → 2.1.2.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of camaleon_cms might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +11 -3
- data/app/apps/plugins/contact_form/contact_form_helper.rb +3 -44
- data/app/apps/plugins/contact_form/contact_form_html_helper.rb +1 -1
- data/app/apps/plugins/contact_form/views/contact_form/{_submission.html.erb → _email_content.html.erb} +0 -0
- data/app/apps/themes/camaleon_first/views/index.html.erb +1 -1
- data/app/apps/themes/default/views/category.html.erb +1 -1
- data/app/apps/themes/default/views/page.html.erb +1 -1
- data/app/apps/themes/default/views/partials/_comments.html.erb +5 -5
- data/app/apps/themes/default/views/post.html.erb +1 -1
- data/app/apps/themes/default/views/post_tag.html.erb +1 -1
- data/app/apps/themes/default/views/post_type.html.erb +1 -1
- data/app/apps/themes/default/views/search.html.erb +2 -2
- data/app/apps/themes/new/views/category.html.erb +1 -1
- data/app/apps/themes/new/views/page.html.erb +1 -1
- data/app/apps/themes/new/views/post_tag.html.erb +1 -1
- data/app/apps/themes/new/views/post_type.html.erb +1 -1
- data/app/apps/themes/new/views/search.html.erb +2 -2
- data/app/assets/javascripts/camaleon_cms/admin/_actions.js +1 -1
- data/app/assets/javascripts/camaleon_cms/admin/{bootstrap-datepicker.js → _bootstrap-datepicker.js} +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/_bootstrap-select.js +7 -0
- data/app/assets/javascripts/camaleon_cms/admin/_custom_fields.js +9 -0
- data/app/assets/javascripts/camaleon_cms/admin/admin-manifest.js +2 -1
- data/app/assets/javascripts/camaleon_cms/admin/jquery.validate.js +3 -1
- data/app/assets/javascripts/camaleon_cms/admin/nav_menu.js.coffee +125 -0
- data/app/assets/javascripts/camaleon_cms/admin/uploader/_media_manager.js.coffee +53 -23
- data/app/assets/javascripts/camaleon_cms/admin/user_profile.js +23 -29
- data/app/assets/stylesheets/camaleon_cms/admin/{bootstrap-datepicker.css.scss → _bootstrap-datepicker.css.scss} +0 -0
- data/app/assets/stylesheets/camaleon_cms/admin/_bootstrap-select.css +6 -0
- data/app/assets/stylesheets/camaleon_cms/admin/admin-manifest.css +2 -3
- data/app/assets/stylesheets/camaleon_cms/admin/colorpicker.css.scss +9 -8
- data/app/assets/stylesheets/camaleon_cms/admin/uploader/_uploadfile.css.scss +1 -12
- data/app/controllers/camaleon_cms/admin/appearances/nav_menus_controller.rb +102 -81
- data/app/controllers/camaleon_cms/admin/media_controller.rb +8 -25
- data/app/controllers/camaleon_cms/admin_controller.rb +1 -1
- data/app/controllers/camaleon_cms/camaleon_controller.rb +24 -0
- data/app/controllers/camaleon_cms/frontend_controller.rb +0 -1
- data/app/decorators/camaleon_cms/application_decorator.rb +5 -8
- data/app/decorators/camaleon_cms/post_decorator.rb +5 -5
- data/app/decorators/camaleon_cms/post_type_decorator.rb +2 -5
- data/app/decorators/camaleon_cms/site_decorator.rb +12 -0
- data/app/decorators/camaleon_cms/term_taxonomy_decorator.rb +1 -1
- data/app/helpers/camaleon_cms/admin/application_helper.rb +8 -1
- data/app/helpers/camaleon_cms/admin/custom_fields_helper.rb +17 -16
- data/app/helpers/camaleon_cms/admin/menus_helper.rb +1 -1
- data/app/helpers/camaleon_cms/camaleon_helper.rb +2 -2
- data/app/helpers/camaleon_cms/captcha_helper.rb +15 -14
- data/app/helpers/camaleon_cms/email_helper.rb +7 -3
- data/app/helpers/camaleon_cms/frontend/nav_menu_helper.rb +7 -1
- data/app/helpers/camaleon_cms/html_helper.rb +1 -1
- data/app/helpers/camaleon_cms/site_helper.rb +6 -15
- data/app/helpers/camaleon_cms/uploader_helper.rb +31 -187
- data/app/mailers/camaleon_cms/html_mailer.rb +4 -8
- data/app/models/camaleon_cms/custom_field_group.rb +1 -0
- data/app/models/camaleon_cms/nav_menu.rb +1 -20
- data/app/models/camaleon_cms/nav_menu_item.rb +13 -0
- data/app/models/camaleon_cms/post.rb +1 -1
- data/app/models/camaleon_cms/post_type.rb +8 -7
- data/app/models/camaleon_cms/site.rb +22 -2
- data/app/models/camaleon_cms/user.rb +2 -1
- data/app/models/concerns/camaleon_cms/custom_fields_read.rb +21 -29
- data/app/models/concerns/camaleon_cms/metas.rb +4 -3
- data/app/uploaders/camaleon_cms_aws_uploader.rb +81 -0
- data/app/uploaders/camaleon_cms_local_uploader.rb +84 -0
- data/app/uploaders/camaleon_cms_uploader.rb +146 -0
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_custom_fields.html.erb +3 -5
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_external_menu.html.erb +7 -6
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_form.html.erb +13 -0
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_left_menu_items.html.erb +77 -0
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_menu_items.html.erb +18 -0
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_menu_items_list.html.erb +12 -0
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_menu_options.html.erb +21 -0
- data/app/views/camaleon_cms/admin/appearances/nav_menus/index.html.erb +5 -98
- data/app/views/camaleon_cms/admin/media/_files_list.html.erb +2 -7
- data/app/views/camaleon_cms/admin/media/_render_file_item.html.erb +28 -26
- data/app/views/camaleon_cms/admin/media/_render_folder_item.html.erb +14 -12
- data/app/views/camaleon_cms/admin/media/index.html.erb +23 -22
- data/app/views/camaleon_cms/admin/posts/_sidebar.html.erb +4 -5
- data/app/views/camaleon_cms/admin/posts/form.html.erb +1 -0
- data/app/views/camaleon_cms/admin/sessions/forgot.html.erb +6 -6
- data/app/views/camaleon_cms/admin/sessions/login.html.erb +7 -7
- data/app/views/camaleon_cms/admin/sessions/register.html.erb +8 -8
- data/app/views/camaleon_cms/admin/settings/_configuration_settings.html.erb +30 -6
- data/app/views/camaleon_cms/admin/settings/_email_settings.html.erb +26 -23
- data/app/views/camaleon_cms/admin/settings/_file_system_settings.html.erb +25 -20
- data/app/views/camaleon_cms/admin/settings/_media_settings.html.erb +10 -0
- data/app/views/camaleon_cms/admin/settings/custom_fields/_get_items.html.erb +2 -3
- data/app/views/camaleon_cms/admin/settings/custom_fields/_render.html.erb +2 -2
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_audio.html.erb +1 -1
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_colorpicker.html.erb +2 -2
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_date.html.erb +1 -1
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_field_attrs.html.erb +2 -2
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_file.html.erb +1 -1
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_image.html.erb +1 -1
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_video.html.erb +1 -1
- data/app/views/camaleon_cms/admin/settings/post_types/_form.html.erb +2 -2
- data/app/views/camaleon_cms/admin/settings/post_types/index.html.erb +1 -1
- data/app/views/camaleon_cms/admin/settings/site.html.erb +11 -13
- data/app/views/camaleon_cms/admin/settings/sites/index.html.erb +5 -3
- data/app/views/camaleon_cms/admin/users/form.html.erb +14 -22
- data/app/views/camaleon_cms/default_theme/category.html.erb +1 -1
- data/app/views/camaleon_cms/default_theme/partials/_comments.html.erb +5 -5
- data/app/views/camaleon_cms/default_theme/partials/_search_form.html.erb +1 -1
- data/app/views/camaleon_cms/default_theme/partials/_sidebar.html.erb +4 -4
- data/app/views/camaleon_cms/default_theme/post_tag.html.erb +1 -1
- data/app/views/camaleon_cms/default_theme/post_type.html.erb +1 -1
- data/app/views/camaleon_cms/default_theme/search.html.erb +1 -1
- data/app/views/camaleon_cms/default_theme/single.html.erb +1 -1
- data/config/locales/camaleon_cms/admin/en.yml +1 -1
- data/config/locales/camaleon_cms/admin/es.yml +36 -0
- data/config/locales/camaleon_cms/common.yml +4 -2
- data/config/routes/admin.rb +13 -7
- data/config/routes/frontend.rb +9 -7
- data/config/system.json +1 -0
- data/lib/camaleon_cms/engine.rb +1 -1
- data/lib/camaleon_cms/version.rb +1 -1
- data/lib/ext/string.rb +12 -0
- data/lib/generators/camaleon_cms/gem_plugin_generator.rb +1 -1
- data/lib/plugin_routes.rb +1 -1
- metadata +17 -24
- data/app/assets/javascripts/camaleon_cms/admin/bootstrap-select.js +0 -1022
- data/app/assets/javascripts/camaleon_cms/admin/nav-menu.js +0 -177
- data/app/assets/stylesheets/camaleon_cms/admin/nav-menu.css.scss +0 -33
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_menu_form.html.erb +0 -36
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_menu_list.html.erb +0 -22
@@ -13,7 +13,7 @@ window["cama_init_media"] = (media_panel) ->
|
|
13
13
|
"<div class='p_label'><b>"+I18n("button.name")+": </b><br> <span>"+data["name"]+"</span></div>" +
|
14
14
|
"<div class='p_body'>" +
|
15
15
|
"<div><b>"+I18n("button.url")+":</b><br> <a target='_blank' href='"+data["url"]+"'>"+data["url"]+"</a></div>" +
|
16
|
-
"<div><b>"+I18n("button.size")+":</b
|
16
|
+
"<div><b>"+I18n("button.size")+":</b> <span>"+cama_humanFileSize(data["size"])+"</span></div>" +
|
17
17
|
"</div>"
|
18
18
|
|
19
19
|
if window["callback_media_uploader"]
|
@@ -24,15 +24,16 @@ window["cama_init_media"] = (media_panel) ->
|
|
24
24
|
|
25
25
|
media_info.html(tpl)
|
26
26
|
media_info.find(".p_thumb").html(item.find(".thumb").html())
|
27
|
-
if data["format"] == "image"
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
media_info.find(".
|
33
|
-
|
34
|
-
|
35
|
-
|
27
|
+
if data["format"] == "image"
|
28
|
+
ww = parseInt(data['dimension'].split("x")[0])
|
29
|
+
hh = parseInt(data['dimension'].split("x")[1])
|
30
|
+
media_info.find(".p_body").append("<div class='cdimension'><b>"+I18n("button.dimension")+": </b><span>"+ww+"x"+hh+"</span></div>")
|
31
|
+
if media_panel.attr("data-dimension") # verify dimensions
|
32
|
+
btn = media_info.find(".p_footer .insert_btn")
|
33
|
+
btn.prop('disabled', true)
|
34
|
+
_ww = parseInt(media_panel.attr("data-dimension").split("x")[0])
|
35
|
+
_hh = parseInt(media_panel.attr("data-dimension").split("x")[1])
|
36
|
+
if _ww == ww && _hh == hh
|
36
37
|
btn.prop('disabled', false)
|
37
38
|
else
|
38
39
|
media_info.find(".cdimension").css("color", 'red')
|
@@ -40,7 +41,6 @@ window["cama_init_media"] = (media_panel) ->
|
|
40
41
|
$.fn.upload_url({url: data["url"]})
|
41
42
|
)
|
42
43
|
btn.after(cut)
|
43
|
-
media_info.find(".p_thumb").html(img.show())
|
44
44
|
|
45
45
|
if window["callback_media_uploader"] # trigger callback
|
46
46
|
media_info.find(".insert_btn").click ->
|
@@ -59,16 +59,17 @@ window["cama_init_media"] = (media_panel) ->
|
|
59
59
|
########## file uploader
|
60
60
|
p_upload = media_panel.find(".cama_media_fileuploader")
|
61
61
|
customFileData = ->
|
62
|
-
return {folder: media_panel.attr("data-folder"), formats: media_panel.attr("data-formats") }
|
62
|
+
return {folder: media_panel.attr("data-folder").replace(/\/{2,}/g, '/'), formats: media_panel.attr("data-formats") }
|
63
63
|
|
64
64
|
p_upload.uploadFile({
|
65
65
|
url: p_upload.attr("data-url"),
|
66
66
|
fileName: "file_upload",
|
67
|
-
|
67
|
+
uploadButtonClass: "btn btn-primary btn-block",
|
68
|
+
dragDropStr: '<span style="display: block;"><b>'+p_upload.attr('data-dragDropStr')+'</b></span>',
|
68
69
|
uploadStr: p_upload.attr('data-uploadStr'),
|
69
70
|
dynamicFormData: customFileData,
|
70
71
|
onSuccess: ((files,res_upload,xhr,pd)->
|
71
|
-
if res_upload.search("
|
72
|
+
if res_upload.search("media_item") >= 0 # success upload
|
72
73
|
media_panel.trigger("add_file", {item: res_upload, selected: $(pd.statusbar).siblings().not('.error_file_upload').size() == 0})
|
73
74
|
$(pd.statusbar).remove();
|
74
75
|
else
|
@@ -83,9 +84,13 @@ window["cama_init_media"] = (media_panel) ->
|
|
83
84
|
######### folders breadcrumb
|
84
85
|
media_panel.find(".media_folder_breadcrumb").on("click", "a", ->
|
85
86
|
media_panel.trigger("navigate_to", {folder: $(this).attr("data-path")})
|
87
|
+
return false
|
86
88
|
)
|
87
89
|
media_panel.on("click", ".folder_item", ->
|
88
|
-
|
90
|
+
f = media_panel.attr("data-folder")+"/"+$(this).attr("data-key")
|
91
|
+
if $(this).attr("data-key").search('/') >= 0
|
92
|
+
f = $(this).attr("data-key")
|
93
|
+
media_panel.trigger("navigate_to", {folder: f.replace(/\/{2,}/g, '/')})
|
89
94
|
)
|
90
95
|
media_panel.bind("update_breadcrumb", ->
|
91
96
|
folder = media_panel.attr("data-folder").replace("//", "/")
|
@@ -103,7 +108,7 @@ window["cama_init_media"] = (media_panel) ->
|
|
103
108
|
breadrumb.push("<li><span>"+name+"</span></li>")
|
104
109
|
else
|
105
110
|
folder_prefix.push(value)
|
106
|
-
breadrumb.push("<li><a data-path='"+(folder_prefix.join("/") || "/")+"' href='#'>"+name+"</a></li>")
|
111
|
+
breadrumb.push("<li><a data-path='"+(folder_prefix.join("/") || "/").replace(/\/{2,}/g, '/')+"' href='#'>"+name+"</a></li>")
|
107
112
|
media_panel.find(".media_folder_breadcrumb").html(breadrumb.join(""))
|
108
113
|
).trigger("update_breadcrumb")
|
109
114
|
## end folders
|
@@ -118,7 +123,7 @@ window["cama_init_media"] = (media_panel) ->
|
|
118
123
|
media_link_tab_upload.click()
|
119
124
|
|
120
125
|
showLoading()
|
121
|
-
$.get(media_panel.attr("data-url"), {folder: folder, partial: true, media_formats: media_panel.attr("data-formats")}, (res)->
|
126
|
+
$.get(media_panel.attr("data-url"), {folder: folder.replace(/\/{2,}/g, '/'), partial: true, media_formats: media_panel.attr("data-formats")}, (res)->
|
122
127
|
media_panel.find(".media_browser_list").html(res)
|
123
128
|
hideLoading()
|
124
129
|
)
|
@@ -129,6 +134,23 @@ window["cama_init_media"] = (media_panel) ->
|
|
129
134
|
item.click()
|
130
135
|
)
|
131
136
|
|
137
|
+
# search file
|
138
|
+
media_panel.find('#cama_search_form').submit ->
|
139
|
+
showLoading()
|
140
|
+
$.get(media_panel.attr("data-url"), {search: $(this).find('input:text').val(), partial: true, media_formats: media_panel.attr("data-formats")}, (res)->
|
141
|
+
media_panel.find(".media_browser_list").html(res)
|
142
|
+
hideLoading()
|
143
|
+
)
|
144
|
+
return false
|
145
|
+
|
146
|
+
# reload current directory
|
147
|
+
media_panel.find('.cam_media_reload').click (e)->
|
148
|
+
showLoading()
|
149
|
+
$.get(media_panel.attr("data-url"), {partial: true, media_formats: media_panel.attr("data-formats"), folder: media_panel.attr("data-folder"), cama_media_reload: $(this).attr('data-action')}, (res)->
|
150
|
+
media_panel.find(".media_browser_list").html(res)
|
151
|
+
hideLoading()
|
152
|
+
)
|
153
|
+
e.preventDefault()
|
132
154
|
|
133
155
|
# element actions
|
134
156
|
media_panel.on("click", "a.add_folder", ->
|
@@ -143,10 +165,10 @@ window["cama_init_media"] = (media_panel) ->
|
|
143
165
|
).trigger("keyup")
|
144
166
|
modal.find("form").submit ->
|
145
167
|
showLoading()
|
146
|
-
$.post(media_panel.attr("data-url_actions"), {folder: media_panel.attr("data-folder")+"/"+input.val(), media_action: "new_folder"}, (res)->
|
168
|
+
$.post(media_panel.attr("data-url_actions"), {folder: media_panel.attr("data-folder")+"/"+input.val().replace(/\/{2,}/g, '/'), media_action: "new_folder"}, (res)->
|
147
169
|
hideLoading()
|
148
170
|
modal.modal("hide")
|
149
|
-
if res.search("
|
171
|
+
if res.search("folder_item") >= 0 # success upload
|
150
172
|
media_panel.find(".media_browser_list").append(res)
|
151
173
|
else
|
152
174
|
$.fn.alert({type: 'error', content: res, title: "Error"})
|
@@ -163,7 +185,7 @@ window["cama_init_media"] = (media_panel) ->
|
|
163
185
|
link = $(this)
|
164
186
|
item = link.closest(".media_item")
|
165
187
|
showLoading()
|
166
|
-
$.post(media_panel.attr("data-url_actions"), {folder: media_panel.attr("data-folder")+"/"+item.attr("data-key"), media_action: if link.hasClass("del_folder") then "del_folder" else "del_file"}, (res)->
|
188
|
+
$.post(media_panel.attr("data-url_actions"), {folder: media_panel.attr("data-folder")+"/"+item.attr("data-key").replace(/\/{2,}/g, '/'), media_action: if link.hasClass("del_folder") then "del_folder" else "del_file"}, (res)->
|
167
189
|
hideLoading()
|
168
190
|
if res
|
169
191
|
$.fn.alert({type: 'error', content: res, title: I18n("button.error")})
|
@@ -192,14 +214,14 @@ $ ->
|
|
192
214
|
# folder: default current folder
|
193
215
|
$.fn.upload_url = (args)->
|
194
216
|
media_panel = $("#cama_media_gallery")
|
195
|
-
data = {folder: media_panel.attr("data-folder"), media_action: "crop_url", formats: media_panel.attr("data-formats"), onerror: (message) ->
|
217
|
+
data = {folder: media_panel.attr("data-folder").replace(/\/{2,}/g, '/'), media_action: "crop_url", formats: media_panel.attr("data-formats"), onerror: (message) ->
|
196
218
|
$.fn.alert({type: 'error', content: message, title: I18n("msg.error_uploading")})
|
197
219
|
}
|
198
220
|
$.extend(data, args); on_error = data["onerror"]; delete data["onerror"];
|
199
221
|
showLoading()
|
200
222
|
$.post(media_panel.attr("data-url_actions"), data, (res_upload)->
|
201
223
|
hideLoading()
|
202
|
-
if res_upload.search("
|
224
|
+
if res_upload.search("media_item") >= 0 # success upload
|
203
225
|
media_panel.trigger("add_file", {item: res_upload})
|
204
226
|
if data["callback"]
|
205
227
|
data["callback"](res_upload)
|
@@ -217,8 +239,16 @@ $ ->
|
|
217
239
|
# dimension: dimension: "30x30" | "x30" | dimension: "30x"
|
218
240
|
$.fn.upload_filemanager = (args)->
|
219
241
|
args = args || {}
|
220
|
-
open_modal({title: args["title"] || I18n("msg.media_title"), id: 'cama_modal_file_uploader', modal_size: "modal-lg", mode: "ajax", url:
|
242
|
+
open_modal({title: args["title"] || I18n("msg.media_title"), id: 'cama_modal_file_uploader', modal_size: "modal-lg", mode: "ajax", url: root_admin_url+"/media/ajax", ajax_params: {media_formats: args["formats"], dimension: args["dimension"] }, callback: (modal)->
|
221
243
|
if args["selected"]
|
222
244
|
window["callback_media_uploader"] = args["selected"]
|
223
245
|
modal.css("z-index", args["zindex"] || 99999).children(".modal-dialog").css("width", "90%")
|
224
246
|
})
|
247
|
+
|
248
|
+
window['cama_humanFileSize'] = (size)->
|
249
|
+
units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
250
|
+
i = 0;
|
251
|
+
while(size >= 1024)
|
252
|
+
size /= 1024;
|
253
|
+
++i;
|
254
|
+
return size.toFixed(1) + ' ' + units[i];
|
@@ -14,44 +14,37 @@ jQuery(function ($) {
|
|
14
14
|
|
15
15
|
// on success photo crop
|
16
16
|
function onSuccess() {
|
17
|
-
$("#
|
18
|
-
var img =
|
17
|
+
var form = $("#cp_crop");
|
18
|
+
var img = form.find("#crop_image");
|
19
19
|
if (img.length === 1) {
|
20
|
-
|
21
|
-
|
20
|
+
form.find("[name='cp_img_path']").val(img.attr("src"));
|
22
21
|
img.cropper({
|
23
22
|
aspectRatio: 1,
|
23
|
+
minWidth: 100,
|
24
|
+
minHeight: 100,
|
25
|
+
maxWidth: 200,
|
26
|
+
maxHeight: 200,
|
24
27
|
done: function (data) {
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
28
|
+
form.find("[name='ic_x']").val(data.x);
|
29
|
+
form.find("[name='ic_y']").val(data.y);
|
30
|
+
form.find("[name='ic_h']").val(data.height);
|
31
|
+
form.find("[name='ic_w']").val(data.width);
|
29
32
|
}
|
30
33
|
});
|
31
34
|
|
32
|
-
$("#cp_accept").prop("disabled", false).
|
33
|
-
$("#cp_crop").css({"width": "400px", "margin": "0px auto"});
|
34
|
-
$("#cp_crop").find('.modal-body').css({"max-height": "400px", "overflow": "auto"});
|
35
|
-
$("#cp_accept").unbind("click").on("click", function () {
|
36
|
-
//$("#user_image").html('<img src="/assets/loader.gif"/>');
|
35
|
+
$("#cp_accept").prop("disabled", false).unbind("click").on("click", function () {
|
37
36
|
$("#modal_change_photo").modal("hide");
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
},
|
47
|
-
error: function(){
|
48
|
-
$.fn.alert({type: 'error', content: 'Internal Error', title: "Error"})
|
49
|
-
}
|
50
|
-
}).submit();
|
51
|
-
$("#cp_target").html("Use form below to upload file. Only image files.");
|
52
|
-
$("#cp_photo").val("").parent("a").find("span").html("Select file");
|
53
|
-
$("#cp_accept").prop("disabled", true).addClass("disabled");
|
37
|
+
showLoading();
|
38
|
+
$.post(form.attr('action'), form.serialize(), function(res){
|
39
|
+
hideLoading();
|
40
|
+
$("#user_image").html('<img class="img-thumbnail" src="' + res + '?r=' + Math.random() + '"/>');
|
41
|
+
}).error(function(){
|
42
|
+
$.fn.alert({type: 'error', content: 'Internal Error', title: "Error"})
|
43
|
+
});
|
44
|
+
$("#cp_accept").prop("disabled", true);
|
54
45
|
$("#cp_img_path").val("");
|
46
|
+
$("#cp_target").html("");
|
47
|
+
return false;
|
55
48
|
});
|
56
49
|
}
|
57
50
|
}
|
@@ -65,6 +58,7 @@ jQuery(function ($) {
|
|
65
58
|
},
|
66
59
|
user_pwd: '<%= current_user_pwd %>'
|
67
60
|
});
|
61
|
+
return false;
|
68
62
|
});
|
69
63
|
|
70
64
|
});
|
File without changes
|
@@ -0,0 +1,6 @@
|
|
1
|
+
/*!
|
2
|
+
* Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)
|
3
|
+
*
|
4
|
+
* Copyright 2013-2016 bootstrap-select
|
5
|
+
* Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
|
6
|
+
*/select.bs-select-hidden,select.selectpicker{display:none!important}.bootstrap-select{width:220px\9}.bootstrap-select>.dropdown-toggle{width:100%;padding-right:25px;z-index:1}.bootstrap-select>select{position:absolute!important;bottom:0;left:50%;display:block!important;width:.5px!important;height:100%!important;padding:0!important;opacity:0!important;border:none}.bootstrap-select>select.mobile-device{top:0;left:0;display:block!important;width:100%!important;z-index:2}.error .bootstrap-select .dropdown-toggle,.has-error .bootstrap-select .dropdown-toggle{border-color:#b94a48}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:220px}.bootstrap-select .dropdown-toggle:focus{outline:thin dotted #333!important;outline:5px auto -webkit-focus-ring-color!important;outline-offset:-2px}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:none}.bootstrap-select.form-control:not([class*=col-]){width:100%}.bootstrap-select.form-control.input-group-btn{z-index:auto}.bootstrap-select.btn-group:not(.input-group-btn),.bootstrap-select.btn-group[class*=col-]{float:none;display:inline-block;margin-left:0}.bootstrap-select.btn-group.dropdown-menu-right,.bootstrap-select.btn-group[class*=col-].dropdown-menu-right,.row .bootstrap-select.btn-group[class*=col-].dropdown-menu-right{float:right}.form-group .bootstrap-select.btn-group,.form-horizontal .bootstrap-select.btn-group,.form-inline .bootstrap-select.btn-group{margin-bottom:0}.form-group-lg .bootstrap-select.btn-group.form-control,.form-group-sm .bootstrap-select.btn-group.form-control{padding:0}.form-inline .bootstrap-select.btn-group .form-control{width:100%}.bootstrap-select.btn-group.disabled,.bootstrap-select.btn-group>.disabled{cursor:not-allowed}.bootstrap-select.btn-group.disabled:focus,.bootstrap-select.btn-group>.disabled:focus{outline:0!important}.bootstrap-select.btn-group.bs-container{position:absolute}.bootstrap-select.btn-group.bs-container .dropdown-menu{z-index:1060}.bootstrap-select.btn-group .dropdown-toggle .filter-option{display:inline-block;overflow:hidden;width:100%;text-align:left}.bootstrap-select.btn-group .dropdown-toggle .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.bootstrap-select.btn-group[class*=col-] .dropdown-toggle{width:100%}.bootstrap-select.btn-group .dropdown-menu{min-width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .dropdown-menu.inner{position:static;float:none;border:0;padding:0;margin:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.bootstrap-select.btn-group .dropdown-menu li{position:relative}.bootstrap-select.btn-group .dropdown-menu li.active small{color:#fff}.bootstrap-select.btn-group .dropdown-menu li.disabled a{cursor:not-allowed}.bootstrap-select.btn-group .dropdown-menu li a{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bootstrap-select.btn-group .dropdown-menu li a.opt{position:relative;padding-left:2.25em}.bootstrap-select.btn-group .dropdown-menu li a span.check-mark{display:none}.bootstrap-select.btn-group .dropdown-menu li a span.text{display:inline-block}.bootstrap-select.btn-group .dropdown-menu li small{padding-left:.5em}.bootstrap-select.btn-group .dropdown-menu .notify{position:absolute;bottom:5px;width:96%;margin:0 2%;min-height:26px;padding:3px 5px;background:#f5f5f5;border:1px solid #e3e3e3;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);pointer-events:none;opacity:.9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .no-results{padding:3px;background:#f5f5f5;margin:0 5px;white-space:nowrap}.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option{position:static}.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret{position:static;top:auto;margin-top:-1px}.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark{position:absolute;display:inline-block;right:15px;margin-top:5px}.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle{z-index:1061}.bootstrap-select.show-menu-arrow .dropdown-toggle:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(204,204,204,.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle:after{content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before{bottom:auto;top:-3px;border-top:7px solid rgba(204,204,204,.2);border-bottom:0}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after{bottom:auto;top:-3px;border-top:6px solid #fff;border-bottom:0}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:after,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:before{display:block}.bs-actionsbox,.bs-donebutton,.bs-searchbox{padding:4px 8px}.bs-actionsbox{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-actionsbox .btn-group button{width:50%}.bs-donebutton{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-donebutton .btn-group button{width:100%}.bs-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox .form-control{margin-bottom:0;width:100%;float:none}
|
@@ -15,13 +15,12 @@
|
|
15
15
|
*= require ./lte/skins/skin-blue
|
16
16
|
*= require ./_custom_admin
|
17
17
|
|
18
|
-
*= require ./
|
18
|
+
*= require ./_bootstrap-datepicker
|
19
19
|
*= require ./introjs/_introjs.min
|
20
20
|
*= require ./tageditor/_jquery.tag-editor
|
21
21
|
|
22
22
|
*= require ./uploader/_uploadfile
|
23
|
-
|
24
|
-
|
23
|
+
*= require ./_bootstrap-select
|
25
24
|
|
26
25
|
// post
|
27
26
|
*= require ./_jquery.tagsinput
|
@@ -54,14 +54,15 @@
|
|
54
54
|
display: none;
|
55
55
|
}
|
56
56
|
.colorpicker {
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
57
|
+
top: 0;
|
58
|
+
left: 0;
|
59
|
+
padding: 4px;
|
60
|
+
min-width: 120px;
|
61
|
+
margin-top: 1px;
|
62
|
+
-moz-border-radius: 3px;
|
63
|
+
-webkit-border-radius: 3px;
|
64
|
+
border-radius: 3px;
|
65
|
+
z-index: 99999;
|
65
66
|
}
|
66
67
|
.colorpicker.dropdown-menu {
|
67
68
|
margin-top: 8px;
|
@@ -231,6 +231,7 @@ margin: 5px 10px 5px 0px;
|
|
231
231
|
.ajax-upload-dragdrop{
|
232
232
|
width: 100% !important;
|
233
233
|
min-height: 200px;
|
234
|
+
padding-top: 65px;
|
234
235
|
&.state-hover{
|
235
236
|
background-color: #ccc;
|
236
237
|
}
|
@@ -240,16 +241,4 @@ margin: 5px 10px 5px 0px;
|
|
240
241
|
width: 100% !important;
|
241
242
|
}
|
242
243
|
}
|
243
|
-
|
244
|
-
.media_folder_breadcrumb{
|
245
|
-
left: 0;
|
246
|
-
position: absolute;
|
247
|
-
top: 0;
|
248
|
-
width: 100%;
|
249
|
-
}
|
250
|
-
.add_folder{
|
251
|
-
position: absolute;
|
252
|
-
right: 17px;
|
253
|
-
top: 5px;
|
254
|
-
}
|
255
244
|
}
|
@@ -9,116 +9,132 @@
|
|
9
9
|
class CamaleonCms::Admin::Appearances::NavMenusController < CamaleonCms::AdminController
|
10
10
|
add_breadcrumb I18n.t("camaleon_cms.admin.sidebar.appearance")
|
11
11
|
add_breadcrumb I18n.t("camaleon_cms.admin.sidebar.menus")
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
redirect_to action: :menu
|
21
|
-
return
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
unless @nav_menu.present?
|
26
|
-
if params[:slug].present?
|
27
|
-
@nav_menu = current_site.nav_menus.where({slug: params[:slug]}).first
|
28
|
-
else
|
29
|
-
@nav_menu = current_site.nav_menus.last
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
@nav_menu = current_site.nav_menus.new unless @nav_menu.present?
|
35
|
-
items = []
|
36
|
-
unless @nav_menu.new_record?
|
37
|
-
items = get_nav_items(@nav_menu.children)
|
12
|
+
before_action :check_menu_permission
|
13
|
+
def index
|
14
|
+
if params[:id].present?
|
15
|
+
@nav_menu = current_site.nav_menus.find_by_id(params[:id])
|
16
|
+
elsif params[:slug].present?
|
17
|
+
@nav_menu = current_site.nav_menus.find_by_slug(params[:slug])
|
18
|
+
else
|
19
|
+
@nav_menu = current_site.nav_menus.first
|
38
20
|
end
|
39
|
-
@items = items
|
40
|
-
|
41
|
-
@nav_menus = current_site.nav_menus.all
|
42
21
|
@post_types = current_site.post_types
|
43
22
|
add_asset_library("nav_menu")
|
44
23
|
render "index"
|
45
24
|
end
|
46
25
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
menu_data = params[:nav_menu]
|
52
|
-
@nav_menu = current_site.nav_menus.new(menu_data)
|
53
|
-
if @nav_menu.save
|
54
|
-
flash[:notice] = t('camaleon_cms.admin.menus.message.created')
|
55
|
-
render json: {new: 1, nav_menu: @nav_menu, redirect: cama_admin_appearances_nav_menus_menu_path({id: @nav_menu.id})}
|
56
|
-
else
|
57
|
-
render json: {error: t('camaleon_cms.admin.menus.message.error_menu')}
|
58
|
-
end
|
59
|
-
else
|
60
|
-
@nav_menu = current_site.nav_menus.find(params[:nav_menu][:id])
|
61
|
-
if @nav_menu.update(params[:nav_menu])
|
62
|
-
@nav_menu.add_menu_items(params[:menu_data])
|
26
|
+
def new
|
27
|
+
@nav_menu = current_site.nav_menus.new
|
28
|
+
render partial: 'form'
|
29
|
+
end
|
63
30
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
render json: {update: 1, nav_menu: @nav_menu}
|
70
|
-
else
|
71
|
-
render json: {error: t('camaleon_cms.admin.menus.message.error_menu')}
|
72
|
-
end
|
73
|
-
end
|
31
|
+
def create
|
32
|
+
nav_menu = current_site.nav_menus.new(params[:nav_menu])
|
33
|
+
nav_menu.save
|
34
|
+
flash[:notice] = t('.created_menu', default: 'Created Menu')
|
35
|
+
redirect_to action: :index, id: nav_menu.id
|
74
36
|
end
|
75
37
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
else
|
82
|
-
@nav_menu = current_site.nav_menu_items.find_by_id(params[:item_id])
|
83
|
-
end
|
84
|
-
render "_custom_fields", layout: "camaleon_cms/admin/_ajax"
|
85
|
-
else
|
86
|
-
render "_external_menu", layout: false, locals: {submit: true}
|
87
|
-
end
|
38
|
+
def update
|
39
|
+
nav_menu = current_site.nav_menus.find(params[:id])
|
40
|
+
nav_menu.update(params[:nav_menu])
|
41
|
+
flash[:notice] = t('.updated_menu', default: 'Menu updated')
|
42
|
+
redirect_to action: :index, id: nav_menu.id
|
88
43
|
end
|
89
44
|
|
90
|
-
|
45
|
+
def edit
|
46
|
+
@nav_menu = current_site.nav_menus.find(params[:id])
|
47
|
+
render partial: 'form'
|
48
|
+
end
|
91
49
|
|
92
|
-
def
|
50
|
+
def destroy
|
51
|
+
current_site.nav_menus.find(params[:id]).destroy
|
52
|
+
flash[:notice] = t('.deleted_menu', default: 'Menu destroyed')
|
53
|
+
redirect_to action: :index
|
54
|
+
end
|
55
|
+
|
56
|
+
def custom_settings
|
57
|
+
@nav_menu = current_site.nav_menus.find(params[:nav_menu_id])
|
58
|
+
@nav_menu_item = current_site.nav_menu_items.find(params[:id])
|
59
|
+
render "_custom_fields", layout: "camaleon_cms/admin/_ajax"
|
60
|
+
end
|
61
|
+
|
62
|
+
def save_custom_settings
|
63
|
+
@nav_menu_item = current_site.nav_menu_items.find(params[:id])
|
64
|
+
@nav_menu_item.set_field_values(params[:field_options])
|
65
|
+
render nothing: true
|
66
|
+
end
|
67
|
+
|
68
|
+
# render edit external menu item
|
69
|
+
def edit_menu_item
|
70
|
+
render "_external_menu", layout: false, locals: {nav_menu: current_site.nav_menus.find(params[:nav_menu_id]), menu_item: current_site.nav_menu_items.find(params[:id])}
|
71
|
+
end
|
72
|
+
|
73
|
+
# update an external menu item
|
74
|
+
def update_menu_item
|
75
|
+
@nav_menu = current_site.nav_menus.find(params[:nav_menu_id])
|
76
|
+
item = current_site.nav_menu_items.find(params[:id])
|
77
|
+
item.update_menu_item({label: params[:external_label], link: params[:external_url]})
|
78
|
+
item.set_options(params[:options]) if params[:options].present?
|
79
|
+
render partial: 'menu_items', locals: {items: [item], nav_menu: @nav_menu}
|
80
|
+
end
|
81
|
+
|
82
|
+
def delete_menu_item
|
83
|
+
# @nav_menu = current_site.nav_menus.find(params[:nav_menu_id])
|
84
|
+
current_site.nav_menu_items.find(params[:id]).destroy
|
85
|
+
render nothing: true
|
86
|
+
end
|
87
|
+
|
88
|
+
# update the reorder of items
|
89
|
+
def reorder_items(items = nil, parent_id = nil, is_root = true)
|
90
|
+
items = params[:items] if items.nil?
|
91
|
+
parent_id = params[:nav_menu_id] if parent_id.nil?
|
92
|
+
items.each do |index, _item|
|
93
|
+
item = current_site.nav_menu_items.find(_item['id'])
|
94
|
+
item.update_column(:parent_id, parent_id)
|
95
|
+
reorder_items(_item['children'], _item['id'], false) if _item['children'].present?
|
96
|
+
end
|
97
|
+
render(inline: '') if is_root
|
98
|
+
end
|
99
|
+
|
100
|
+
# add items to specific nav-menu
|
101
|
+
def add_items
|
93
102
|
items = []
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
103
|
+
@nav_menu = current_site.nav_menus.find(params[:nav_menu_id])
|
104
|
+
if params[:external].present?
|
105
|
+
item = @nav_menu.append_menu_item({label: params[:external][:external_label], link: params[:external][:external_url], type: "external"})
|
106
|
+
item.set_options(params[:external][:options]) if params[:external][:options].present?
|
107
|
+
items << item
|
108
|
+
end
|
109
|
+
|
110
|
+
if params[:items].present?
|
111
|
+
params[:items].each do |index, item|
|
112
|
+
item = @nav_menu.append_menu_item({label: 'auto', link: item['id'], type: item['kind']})
|
113
|
+
items << item
|
99
114
|
end
|
100
115
|
end
|
101
|
-
|
116
|
+
render partial: 'menu_items', locals: {items: items, nav_menu: @nav_menu}
|
102
117
|
end
|
103
118
|
|
104
|
-
|
119
|
+
private
|
120
|
+
def parse_menu_item(nav_menu_item)
|
105
121
|
begin
|
106
122
|
case nav_menu_item.get_option('type')
|
107
123
|
when 'post'
|
108
124
|
post = CamaleonCms::Post.find(nav_menu_item.get_option('object_id')).decorate
|
109
125
|
return false unless post.status == 'published'
|
110
|
-
{
|
126
|
+
{name: post.the_title(locale: @frontend_locale), url_edit: post.the_edit_url }
|
111
127
|
when 'category'
|
112
128
|
category = CamaleonCms::Category.find(nav_menu_item.get_option('object_id')).decorate
|
113
|
-
{
|
129
|
+
{name: category.the_title, url_edit: category.the_edit_url}
|
114
130
|
when 'post_tag'
|
115
131
|
post_tag = CamaleonCms::PostTag.find(nav_menu_item.get_option('object_id')).decorate
|
116
|
-
{
|
132
|
+
{name: post_tag.the_title, url_edit: post_tag.the_edit_url}
|
117
133
|
when 'post_type'
|
118
134
|
post_type = CamaleonCms::PostType.find(nav_menu_item.get_option('object_id')).decorate
|
119
|
-
{
|
135
|
+
{name: post_type.the_title, url_edit: post_type.the_edit_url}
|
120
136
|
when 'external'
|
121
|
-
{
|
137
|
+
{name: nav_menu_item.name.to_s}
|
122
138
|
else
|
123
139
|
false
|
124
140
|
end
|
@@ -127,4 +143,9 @@ class CamaleonCms::Admin::Appearances::NavMenusController < CamaleonCms::AdminCo
|
|
127
143
|
false
|
128
144
|
end
|
129
145
|
end
|
146
|
+
helper_method :parse_menu_item
|
147
|
+
|
148
|
+
def check_menu_permission
|
149
|
+
authorize! :manager, :menu
|
150
|
+
end
|
130
151
|
end
|