camaleon_cms 1.0.4 → 1.0.5

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.

Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/admin/actions.js +14 -3
  3. data/app/assets/javascripts/admin/admin-manifest.js +1 -4
  4. data/app/assets/javascripts/admin/custom_fields.js +2 -2
  5. data/app/assets/javascripts/admin/data.js +68 -102
  6. data/app/assets/javascripts/admin/libraries.js +46 -87
  7. data/app/assets/javascripts/admin/modal.js +15 -3
  8. data/app/assets/javascripts/admin/post.js +2 -2
  9. data/app/assets/stylesheets/admin/admin-manifest.css +1 -2
  10. data/app/assets/stylesheets/admin/custom_admin.css.scss +3 -1
  11. data/app/controllers/admin/sessions_controller.rb +21 -14
  12. data/app/controllers/admin/users_controller.rb +7 -4
  13. data/app/controllers/api/api_controller.rb +28 -0
  14. data/app/controllers/api/v1/category_controller.rb +7 -0
  15. data/app/controllers/api/v1/page_controller.rb +8 -0
  16. data/app/controllers/api/v1/post_controller.rb +8 -0
  17. data/app/controllers/concerns/frontend_concern.rb +1 -17
  18. data/app/decorators/category_decorator.rb +1 -1
  19. data/app/helpers/camaleon_helper.rb +15 -0
  20. data/app/helpers/html_helper.rb +1 -0
  21. data/app/helpers/session_helper.rb +18 -3
  22. data/app/models/site.rb +17 -11
  23. data/app/views/admin/posts/_sidebar.html.erb +9 -7
  24. data/app/views/admin/posts/form.html.erb +4 -1
  25. data/app/views/admin/sessions/register.html.erb +8 -6
  26. data/app/views/admin/settings/custom_fields/_render.html.erb +3 -2
  27. data/app/views/admin/settings/custom_fields/fields/audio.html.erb +1 -1
  28. data/app/views/admin/settings/custom_fields/fields/checkbox.html.erb +1 -1
  29. data/app/views/admin/settings/custom_fields/fields/checkboxes.html.erb +1 -1
  30. data/app/views/admin/settings/custom_fields/fields/colorpicker.html.erb +1 -1
  31. data/app/views/admin/settings/custom_fields/fields/date.html.erb +1 -1
  32. data/app/views/admin/settings/custom_fields/fields/editor.html.erb +1 -1
  33. data/app/views/admin/settings/custom_fields/fields/email.html.erb +1 -1
  34. data/app/views/admin/settings/custom_fields/fields/field_attrs.html.erb +2 -2
  35. data/app/views/admin/settings/custom_fields/fields/file.html.erb +1 -1
  36. data/app/views/admin/settings/custom_fields/fields/image.html.erb +1 -1
  37. data/app/views/admin/settings/custom_fields/fields/numeric.html.erb +1 -1
  38. data/app/views/admin/settings/custom_fields/fields/phone.html.erb +1 -1
  39. data/app/views/admin/settings/custom_fields/fields/posts.html.erb +1 -1
  40. data/app/views/admin/settings/custom_fields/fields/radio.html.erb +1 -1
  41. data/app/views/admin/settings/custom_fields/fields/select.html.erb +1 -1
  42. data/app/views/admin/settings/custom_fields/fields/text_area.html.erb +1 -1
  43. data/app/views/admin/settings/custom_fields/fields/text_box.html.erb +1 -1
  44. data/app/views/admin/settings/custom_fields/fields/url.html.erb +1 -1
  45. data/app/views/admin/settings/custom_fields/fields/users.html.erb +1 -1
  46. data/app/views/admin/settings/custom_fields/fields/video.html.erb +1 -1
  47. data/app/views/admin/settings/custom_fields/index.html.erb +54 -8
  48. data/app/views/admin/settings/site.html.erb +170 -151
  49. data/app/views/admin/users/form.html.erb +19 -23
  50. data/app/views/default_theme/sitemap.html.erb +19 -0
  51. data/app/views/default_theme/sitemap.xml.builder +48 -0
  52. data/app/views/layouts/admin.html.erb +3 -13
  53. data/app/views/layouts/admin/_footer.html.erb +10 -3
  54. data/app/views/layouts/admin/_header.html.erb +1 -1
  55. data/config/initializers/doorkeeper.rb +128 -0
  56. data/config/initializers/rufus_cron.rb +3 -3
  57. data/config/initializers/sass.rb +0 -62
  58. data/config/locales/admin/en.yml +3 -2
  59. data/config/locales/admin/es.yml +2 -0
  60. data/config/locales/admin/js.yml +9 -38
  61. data/config/locales/doorkeeper.en.yml +123 -0
  62. data/config/routes.rb +12 -0
  63. data/config/routes/admin.rb +0 -3
  64. data/db/migrate/20150930115030_doorkeeper_configuration.rb +45 -0
  65. data/lib/camaleon_cms/engine.rb +2 -0
  66. data/lib/camaleon_cms/version.rb +1 -1
  67. data/lib/generators/camaleon_cms/gem_plugin_template/app/models/plugins/my_plugin/my_plugin.rb +1 -6
  68. data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/models/my_plugin.rb +0 -5
  69. data/lib/generators/ctheme_template/app/apps/themes/my_theme/assets/js/main.js +1 -1
  70. data/lib/plugin_routes.rb +12 -8
  71. metadata +38 -46
  72. data/app/assets/javascripts/admin/grid-editor.js +0 -532
  73. data/app/assets/javascripts/audio/alert.mp3 +0 -0
  74. data/app/assets/javascripts/audio/fail.mp3 +0 -0
  75. data/app/assets/javascripts/jquery-1.11.3.min.js +0 -5
  76. data/app/assets/stylesheets/admin/grid-editor.css.scss +0 -15
  77. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/css/style.css +0 -84
  78. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/editor_plugin.js +0 -1
  79. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/editor_plugin_src.js +0 -90
  80. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/img/youtube.png +0 -0
  81. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/index.html +0 -86
  82. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/js/scripts.js +0 -1
  83. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/js/scripts_src.js +0 -81
  84. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/langs/en.js +0 -3
  85. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/langs/en_dlg.js +0 -12
  86. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/langs/es.js +0 -3
  87. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/langs/es_dlg.js +0 -12
  88. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/bootstrap.css +0 -2228
  89. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/content.css +0 -189
  90. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/dialog.css +0 -295
  91. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/butt2.png +0 -0
  92. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/button-bg.png +0 -0
  93. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/buttons.png +0 -0
  94. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/down_arrow.gif +0 -0
  95. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/fade-butt.png +0 -0
  96. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/icons.png +0 -0
  97. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/items.gif +0 -0
  98. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/menu-arrow.png +0 -0
  99. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/menu-check.png +0 -0
  100. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/progress.gif +0 -0
  101. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/tabs.gif +0 -0
  102. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/toolbarbg.png +0 -0
  103. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/ui.css +0 -1163
  104. data/app/controllers/admin/grid_editor_controller.rb +0 -55
  105. data/app/views/admin/grid_editor/form.html.erb +0 -31
  106. data/app/views/admin/grid_editor/index.html.erb +0 -29
  107. data/config/sitemap.rb +0 -56
  108. data/lib/generators/camaleon_cms/gem_theme_template/app/controllers/plugins/my_plugin/admin_controller.rb +0 -8
  109. data/lib/generators/camaleon_cms/gem_theme_template/app/controllers/plugins/my_plugin/front_controller.rb +0 -8
  110. data/lib/generators/camaleon_cms/gem_theme_template/app/helpers/plugins/my_plugin/main_helper.rb +0 -22
  111. data/lib/generators/camaleon_cms/gem_theme_template/app/models/plugins/my_plugin/my_plugin.rb +0 -12
  112. data/lib/generators/camaleon_cms/gem_theme_template/app/views/plugins/my_plugin/admin/index.html.erb +0 -2
  113. data/lib/generators/camaleon_cms/gem_theme_template/app/views/plugins/my_plugin/front/index.html.erb +0 -2
  114. data/lib/generators/camaleon_cms/gem_theme_template/app/views/plugins/my_plugin/layouts/readme.txt +0 -2
  115. data/lib/generators/camaleon_cms/gem_theme_template/config/camaleon_plugin.json +0 -21
@@ -1,532 +0,0 @@
1
- jQuery(function(){
2
- $.fn.fadeDestroy = function(speed){ $(this).fadeOut(speed, function(){ $(this).remove(); }) }
3
- $.fn.isGridEditorContent = function(str){ return str.match(/^\<p\>\[load_libraries/); } // verify is text is a content for grid editor
4
- $.fn.skipGridEditorLibraries = function(str){ return str.replace(/^\<p\>\[load_libraries(.*)\]\<\/p\>/, ""); } // remove libraries shortcode text from grid editor
5
- $.fn.gridEditor_extra_rows = [];
6
- $.fn.gridEditor_libraries = [];
7
- //********************** editor content options **********************//
8
- $.fn.gridEditor_options = {
9
- text: {title: "Text", libraries: [], callback: grid_text_builder},
10
- editor: {title: "Editor", libraries: [], callback: grid_editor_builder},
11
- tab: {title: "Tabs", callback: grid_tab_builder},
12
- slider: {title: "Slider", callback: grid_slider_builder},
13
- };
14
- //********************** end editor content options **********************//
15
-
16
- // grid editor plugin
17
- var gridEditor_id = 0;
18
- $.fn.gridEditor = function(tinyEditor){
19
- gridEditor_id ++;
20
- var tinymce_panel = $(tinyEditor.editorContainer).hide();
21
- var editor_id = "grid_editor_"+gridEditor_id;
22
- var textarea = $(this);
23
- if(textarea.prev().hasClass("panel_grid_editor")){ textarea.prev().show(); return textarea; }
24
- var tpl_rows = "";
25
- $.each({6: 50, 4: 33, 3: 25, 2: 16, 8: 66, 9: 75, 12: 100}, function(k, val){ tpl_rows += '<div class="" data-col="'+k+'" data-col_title="'+val+'%"><div class="grid_sortable_items"></div></div>'; });
26
-
27
- // break line
28
- tpl_rows += '<div class="clearfix" data-col_title="Break Line" data-col="12"></div>' + $.fn.gridEditor_extra_rows.join("");
29
-
30
- // tpl options
31
- var tpl_options = "";
32
- $.each($.fn.gridEditor_options, function(key, item){ tpl_options += '<div class="" data-kind="'+key+'" data-content_title="'+item["title"]+'"><div class="grid_item_content"></div></div>'; });
33
-
34
- // template grid editor
35
- var editor = $("<div class='panel_grid_editor' id='"+editor_id+"'>"+
36
- "<div class='grid_editor_menu'>"+
37
- "<ul class='nav nav-tabs'>"+
38
- "<li class='active'><a href='#grid_columns_"+gridEditor_id+"' role='tab' data-toggle='tab'>"+I18n("grid_editor.blocks")+"</a></li>"+
39
- "<li class=''><a href='#grid_contents_"+gridEditor_id+"' role='tab' data-toggle='tab'>"+I18n("grid_editor.contents")+"</a></li>"+
40
- "<li class=''><a class='btn btn-default clear'>"+I18n("grid_editor.clear")+"</a></li>"+
41
- '<li>' +
42
- '<a class = "btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">'+I18n("grid_editor.templates")+' <span class="caret"></span> </a>'+
43
- '<ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> ' +
44
- '<li><a class="list_templates" title="Grid Templates" href = "'+root_url+'/admin/grid_editor" >'+I18n("grid_editor.list")+'</a></li >'+
45
- '<li><a class="new_template" title="New Template" href = "'+root_url+'/admin/grid_editor/new" >'+I18n("grid_editor.save_tpl")+'</a></li >'+
46
- '</ul> ' +
47
- '</li>'+
48
- "<li class=''><a href='#' class='toggle_panel_grid'>"+I18n("grid_editor.text_editor")+"</a></li>"+
49
- "</ul>"+
50
- "<div class='tab-content'>"+
51
- "<div role='tabpanel' class='tab-pane active' id='grid_columns_"+gridEditor_id+"'> "+tpl_rows+" </div>"+
52
- "<div role='tabpanel' class='tab-pane' id='grid_contents_"+gridEditor_id+"'>"+tpl_options+"</div>"+
53
- "</div>"+
54
- "</div>"+
55
- "<div class='panel_grid_body row'></div>"+
56
- "</div>");
57
-
58
- // grid editor export
59
- function export_content(editor){
60
- var container = $('.panel_grid_body', editor).clone();
61
- container.children().each(function(){
62
- var col = $(this).removeClass("drg_column btn btn-default ui-draggable ui-draggable-handle ui-draggable-dragging ui-sortable-handle");
63
- col.children(".header_box").remove();
64
- col.find(".grid_sortable_items").children().each(function(){ //contents
65
- $(this).removeClass("drg_item btn btn-default ui-draggable ui-draggable-dragging ui-sortable-handle ui-draggable-handle").children(".header_box").remove();
66
- });
67
- });
68
- var res = container.html();
69
- container.remove();
70
- return res;
71
- }
72
-
73
- // grid editor parser to recover from saved content
74
- function parse_content(editor){
75
- editor.find(".panel_grid_body").children("div").each(function(){ var col = parse_content_column($(this)); });
76
- return editor;
77
- }
78
-
79
- // parse column editor
80
- // column: content element
81
- // skip_options: boolean to add drodown options
82
- function parse_content_column(column, skip_options){
83
- var html = '<div class="header_box">'+
84
- '<a><i class="icon-bar"></i>'+column.attr("data-col_title")+'</a>'+
85
- '</div>';
86
- var options = "<div class='dropdown'>" +
87
- "<a class='dropdown-toggle' data-toggle='dropdown'>&nbsp; <span class='caret'></span></a>" +
88
- "<ul class='dropdown-menu auto_with' role='menu'>"+
89
- "<li><a class='grid_col_remove' title='Remove' href='#'><i class='fa fa-trash-o'></i> "+I18n("button.delete")+"</a></li>"+
90
- "<li><a class='grid_col_clone' title='Clone' href='#'><i class='fa fa-copy'></i> "+I18n("button.clone")+"</a></li>"+
91
- "</ul>"+
92
- "</div>" ;
93
- column.addClass("drg_column btn btn-default");
94
- if(column.children(".header_box").length == 0) column.prepend(html);
95
- if(!skip_options){
96
- column.find('.header_box').append(options);
97
- grid_content_manager(column.find(".grid_sortable_items"));
98
- column.find(".grid_sortable_items").children().each(function(){ //contents
99
- parse_content_content($(this));
100
- });
101
- }
102
- column;
103
- }
104
-
105
- // parse column editor
106
- // content: content element
107
- // skip_options: boolean to add drodown options
108
- function parse_content_content(content, skip_options){
109
- var html = '<div class="header_box">'+
110
- '<a><i class="icon-bar"></i>'+content.attr("data-content_title")+'</a>'+
111
- '</div>';
112
- var options = "<div class='dropdown'>" +
113
- "<a class='dropdown-toggle' data-toggle='dropdown'>&nbsp; <span class='caret'></span></a>" +
114
- "<ul class='dropdown-menu auto_with' role='menu'>"+
115
- "<li><a class='grid_content_remove' title='Remove' href='#'><i class='fa fa-trash-o'></i> "+I18n("button.delete")+"</a></li>"+
116
- "<li><a class='grid_content_clone' title='Clone' href='#'><i class='fa fa-copy'></i> "+I18n("button.clone")+"</a></li>"+
117
- "<li><a class='grid_content_edit' title='Edit' href='#'><i class='fa fa-pencil'></i> "+I18n("button.edit")+"</a></li>"+
118
- "</ul>"+
119
- "</div>";
120
- content.addClass("drg_item btn btn-default");
121
- if(content.children(".header_box").length == 0) content.prepend(html);
122
- if(!skip_options){
123
- content.find('.header_box').append(options);
124
- }
125
- // save used libraries
126
- $.fn.gridEditor_libraries = $.merge($.fn.gridEditor_libraries, $.fn.gridEditor_options[content.attr("data-kind")])
127
- content;
128
- }
129
-
130
- // add editor menu actions
131
- function do_editor_menus(editor){
132
- // toggle editor menus
133
- editor.find(".grid_editor_menu .toggle_panel_grid").click(function(){
134
- if(!confirm(I18n("grid_editor.toggle_editor"))) return false;
135
- editor.hide();
136
- if(editor.data("tiny_backup")) tinyEditor.setContent(editor.data("tiny_backup"));
137
- tinymce_panel.show();
138
- return false;
139
- });
140
- editor.find(".grid_editor_menu .clear").click(function(){
141
- if(!confirm(I18n("grid_editor.clear_editor"))) return false;
142
- editor.find(".panel_grid_body").html("");
143
- editor.trigger("auto_save");
144
- return false;
145
- })
146
- editor.find(".grid_editor_menu .list_templates").ajax_modal({callback: function(modal){
147
- modal.on("click", ".import_item", function(){
148
- if(!confirm($(this).attr("data-message"))) return;
149
- modal.modal("hide");
150
- showLoading();
151
- $.get($(this).attr("href"), function(res){
152
- //editor.children(".panel_grid_body").html(res);
153
- editor.children(".panel_grid_body").html($.fn.skipGridEditorLibraries(res));
154
- parse_content(editor); // recover saved content
155
- editor.trigger("auto_save");
156
- hideLoading();
157
- });
158
- return false;
159
- });
160
- }});
161
-
162
- editor.find(".grid_editor_menu .new_template").ajax_modal({callback: function(modal){
163
- modal.find("textarea").val(export_content(editor));
164
- }});
165
-
166
- editor.find("#grid_columns_"+gridEditor_id).children().each(function(){ parse_content_column($(this), true) });
167
- editor.find("#grid_contents_"+gridEditor_id).children().each(function(){ parse_content_content($(this), true) });
168
-
169
- // if saved content is a grid_editor content, then rebuilt or recover this content
170
- if($.fn.isGridEditorContent(textarea.val())){
171
- editor.children(".panel_grid_body").html($.fn.skipGridEditorLibraries(textarea.val()));
172
- parse_content(editor); // recover saved content
173
- }else{
174
- editor.data("tiny_backup", tinyEditor.getContent())
175
- }
176
-
177
- // trigger auto save changes
178
- editor.bind("auto_save", function(){
179
- var txt = "<p>[load_libraries data='"+$.fn.gridEditor_libraries.join(",")+"']</p>"+export_content($(this));
180
- tinyEditor.setContent(txt);
181
- textarea.val(txt).trigger("change_in");
182
- });
183
-
184
- // content dropdown options
185
- jQuery('.panel_grid_body ', editor).on("click", '.drg_item .grid_content_remove', function (e) {
186
- if(confirm(I18n("grid_editor.del_block"))) {
187
- jQuery(this).closest(".drg_item").fadeDestroy();
188
- editor.trigger("auto_save");
189
- }
190
- e.preventDefault();
191
- }).on("click", '.drg_item .grid_content_clone', function (e) {
192
- var widget = jQuery(this).closest(".drg_item");
193
- var widget_clone = widget.clone();
194
- widget.after(widget_clone);
195
- editor.trigger("auto_save");
196
- e.preventDefault();
197
- }).on("click", '.drg_item .grid_content_edit', function (e) {
198
- var panel_content = $(this).closest(".drg_item");
199
- var key = panel_content.attr("data-kind");
200
- $.fn.gridEditor_options[key]["callback"](panel_content.children(".grid_item_content"), editor);
201
- e.preventDefault();
202
- });
203
-
204
- // column dropdown options
205
- jQuery('.panel_grid_body ', editor).on("click", '.grid_col_remove', function (e) {
206
- if(confirm(I18n("grid_editor.del_block"))){
207
- jQuery(this).closest(".drg_column").fadeDestroy();
208
- editor.trigger("auto_save");
209
- }
210
- e.preventDefault();
211
- }).on("click", '.grid_col_clone', function (e) {
212
- var widget = jQuery(this).closest(".drg_column");
213
- var widget_clone = widget.clone();
214
- widget.after(widget_clone);
215
- grid_content_manager(widget_clone.find(".grid_sortable_items"));
216
- editor.trigger("auto_save");
217
- e.preventDefault();
218
- });
219
-
220
- //// autosave changes
221
- //var time_control;
222
- //$('.panel_grid_body', editor).bind("DOMSubtreeModified",function(){
223
- // var thiss = $(this);
224
- // if(time_control) clearTimeout(time_control);
225
- // time_control = setTimeout(function(){ editor.trigger("auto_save"); }, 5000);
226
- //});
227
- }
228
-
229
- do_editor_menus(editor);
230
- textarea.before(editor);
231
-
232
- // drag columns
233
- jQuery(".grid_editor_menu .drg_column", editor).draggable({
234
- connectToSortable: "#"+editor_id+" .panel_grid_body",
235
- cursor: 'move', // sets the cursor apperance
236
- revert: 'invalid', // makes the item to return if it isn't placed into droppable
237
- revertDuration: -1, // duration while the item returns to its place
238
- opacity: 1, // opacity while the element is dragged
239
- helper: "clone"
240
- });
241
-
242
- //draggable content elements
243
- jQuery(".grid_editor_menu .drg_item", editor).draggable({
244
- connectToSortable: "#"+editor_id+" .grid_sortable_items",
245
- cursor: 'move', // sets the cursor apperance
246
- revert: 'invalid', // makes the item to return if it isn't placed into droppable
247
- revertDuration: -1, // duration while the item returns to its place
248
- opacity: 1, // opacity while the element is dragged
249
- helper: "clone"
250
- });
251
-
252
- // Sort the parents
253
- jQuery(".panel_grid_body", editor).sortable({
254
- tolerance: "pointer",
255
- cursor: "move",
256
- revert: false,
257
- delay: 150,
258
- dropOnEmpty: true,
259
- items: ".drg_column",
260
- connectWith: "#"+editor_id+" .panel_grid_body",
261
- placeholder: "placeholder",
262
- start: function (e, ui) {
263
- ui.helper.css({'width': '' , 'height': ''}).addClass('col-md-' + jQuery(ui.helper).attr('data-col'));
264
- ui.placeholder.attr('class', jQuery(ui.helper).attr("class")).html(ui.helper.html()).fadeTo("fast", 0.4);
265
- },
266
- over: function (e, ui) {
267
- ui.placeholder.attr('class', jQuery(ui.helper).attr("class"));
268
- $(this).addClass("hover-grid");
269
- },
270
- out: function (e, ui) {
271
- $(this).removeClass("hover-grid");
272
- },
273
- stop: function (e, ui) {
274
- ui.item.css({left: "", top: "", position: ""});
275
- if(!jQuery(ui.item).hasClass('grid-col-built')) parse_content_column(ui.item)
276
- ui.item.addClass('grid-col-built');
277
- editor.trigger("auto_save");
278
- }
279
- });
280
-
281
- function grid_content_manager(item) {
282
- // Sort the children (content elements)
283
- jQuery(item).sortable({
284
- tolerance: "pointer",
285
- cursor: "move",
286
- revert: false,
287
- delay: 150,
288
- dropOnEmpty: true,
289
- items: ".drg_item",
290
- connectWith: "#"+editor_id+' .grid_sortable_items',
291
- placeholder: "placeholder",
292
- start: function (e, ui) {
293
- ui.helper.css({'width': '' , 'height': ''}).addClass('col-md-12');
294
- ui.placeholder.attr('class', jQuery(ui.helper).attr("class")).html(ui.helper.html()).fadeTo("fast", 0.4);
295
- },
296
- over: function (e, ui) {
297
- $(this).addClass("hover-grid");
298
- },
299
- out: function (e, ui) {
300
- $(this).removeClass("hover-grid");
301
- },
302
- stop: function (e, ui) {
303
- ui.item.addClass('col-md-12').css({left: "", top: "", position: ""});
304
- if(!jQuery(ui.item).hasClass('grid-item-built')) parse_content_content(ui.item)
305
- ui.item.addClass('grid-item-built');
306
- editor.trigger("auto_save");
307
- }
308
- });
309
- }
310
- return textarea;
311
- }
312
-
313
- // grid content tab builder
314
- function grid_tab_builder(panel, editor){
315
- var id_tab = "tabs_" + gridEditor_id + Math.floor((Math.random() * 100000) + 1);
316
- var tpl_tabs = '<ul class="nav nav-tabs" role="tablist">'+
317
- '<li role="presentation" class="active"><a href="" role="tab" data-toggle="tab">Sample1</a></li>'+
318
- '</ul>'+
319
- '<div class="tab-content">'+
320
- '<div role="tabpanel" class="tab-pane active" id="">Lorem Ipsum</div>'+
321
- '</div>';
322
- if(panel.html()) tpl_tabs = panel.html();
323
- function tab_builder(modal){
324
- modal.find(".nav-tabs li").not(".tb_built").addClass("tb_built").find("a").each(function(){
325
- var settings = "<i class='fa fa-trash-o grid_tab_del'></i>"+
326
- "<i class='fa fa-pencil grid_tab_edit'></i>";
327
- $(this).append(settings);
328
- });
329
- var k = id_tab+'_item';
330
- modal.find(".nav-tabs li").each(function(index, item){
331
- var k_i = k+"-"+index;
332
- $(this).children("a").attr("href", "#"+k_i);
333
- modal.find(".tab-pane").eq(index).attr("id", k_i);
334
- });
335
- }
336
- open_modal({title: "Enter Slider Items", modal_settings: { keyboard: false, backdrop: "static" }, show_footer: true, content: tpl_tabs, callback: function(modal){
337
- var p_title = modal.find(".nav-tabs");
338
- var p_content = modal.find(".tab-content");
339
- p_title.append("<a href='#' class='grid_tab_add pull-right' title='Add Tabs'><i class='fa fa-plus-circle'></i> "+I18n("button.add")+"</a>")
340
- .on("click", ".grid_tab_add", function(e){
341
- p_title.append('<li role="presentation"><a href="" role="tab" data-toggle="tab">Sample</a></li>');
342
- p_content.append('<div role="tabpanel" class="tab-pane" id="">Lorem Ipsum</div>');
343
- tab_builder(modal);
344
- e.preventDefault();
345
- }).on("click", ".grid_tab_edit", function(e){
346
- var title = $(this).closest("a");
347
- var content = $($(this).closest("a").attr("href"));
348
- var tpl = '<div class="form-group">'+
349
- '<label>Title</label><br>'+
350
- "<input type='text' class='form-control required'/>"+
351
- "</div>"+
352
- '<div class="form-group">'+
353
- '<label>Content</label><br>'+
354
- "<textarea rows='10' class='form-control'></textarea>"+
355
- "</div>"
356
- open_modal({title: "Enter Your Tab Content", modal_settings: { keyboard: false, backdrop: "static" }, show_footer: true, content: tpl, callback: function(modal){
357
- var submit = $('<button type="button" class="btn btn-primary">Save</button>').click(function(){
358
- title.html(title.find("i")).prepend(modal.find("input").val());
359
- modal.find("input").val();
360
- var area = modal.find("textarea");
361
- content.html(area.tinymce().getContent());
362
- modal.modal("hide");
363
- });
364
- modal.find("input").val(title.text());
365
- modal.find("textarea").val(content.html());
366
- setTimeout(function(){ modal.find("textarea").tinymce($.extend({} ,DATA.tiny_mce.advanced, {height: 120})); }, 500);
367
- modal.find(".modal-footer").prepend(submit);
368
- }});
369
-
370
- e.preventDefault();
371
- }).on("click", ".grid_tab_del", function(e){
372
- if(confirm("are you sure?")){
373
- $($(this).closest("a").attr("href")).remove();
374
- $(this).closest("li").fadeDestroy();
375
- }
376
- e.preventDefault();
377
- }).sortable({items: "> li"});
378
- tab_builder(modal);
379
-
380
- // save contents of tab
381
- var submit = $('<button type="button" class="btn btn-primary">Save</button>').click(function(){
382
- modal.find(".modal-body").find(".tb_built").removeClass("tb_built ui-sortable-handle").end().find(".nav-tabs").find(".fa, .grid_tab_add").remove();
383
- panel.html(modal.find(".modal-body").html());
384
- modal.modal("hide");
385
- editor.trigger("auto_save");
386
- });
387
- modal.find("textarea").val(panel.html());
388
- modal.find(".modal-footer").prepend(submit);
389
- }});
390
- }
391
-
392
- // grid content tab builder
393
- function grid_slider_builder1(panel, editor){
394
- var tpl_slider = '<div class="carousel slide" data-ride="carousel"> ' +
395
- '<ol class="carousel-indicators"></ol>' +
396
- '<div class="carousel-inner"></div>'+
397
- '<a class="left carousel-control" href="#'+id_slider+'" role="button" data-slide="prev"><span class="glyphicon glyphicon-chevron-left"></span></a>'+
398
- '<a class="right carousel-control" href="#'+id_slider+'" role="button" data-slide="next"><span class="glyphicon glyphicon-chevron-right"></span></a>'+
399
- '</div>';
400
- if(panel.html()) tpl_slider = panel.html();
401
- tpl_slider = $(tpl_slider);
402
- var form_slider = $('<form></form>').on("click", ".add_item", function(e){
403
- add_item();
404
- e.preventDefault();
405
- }).on("click", ".item_del", function(){
406
- if(confirm("are you sure?")) $(this).closest(".well").fadeDestroy();
407
- e.preventDefault();
408
- });
409
-
410
- function add_item(descr, url){
411
- var settings = "<div class='slider_actions text-center'><a href='#' class='item_del'><i class='fa fa-trash-o'></i></a></div>";
412
- var tpl = $('<div class="well">'+settings+'<div class="form-group"><label>Background: </label><br><input name="url_file"></div></div> <div class="form-group"><label>Description: </label><br><textarea class="descr"></textarea></div>');
413
- tpl.find("input").val(url);
414
- tpl.find("textarea").val(descr);
415
- form_slider.append(tpl);
416
- }
417
- tpl_slider.find(".carousel-inner").children().each(function(){ add_item($(this)); })
418
- if(form_slider.children("well").length == 0) form_slider.find(".add_item").click();
419
- open_modal({title: "Enter Slider Items", modal_settings: { keyboard: false, backdrop: "static" }, show_footer: true, content: form_slider, callback: function(modal){
420
-
421
- var submit = $('<button type="button" class="btn btn-primary">Save</button>').click(function(){
422
- modal.find(".grid_slider_settings, .slider_actions").remove();
423
- panel.html(modal.find(".modal-body").html());
424
- modal.modal("hide");
425
- editor.trigger("auto_save");
426
- });
427
- modal.find(".modal-footer").prepend(submit);
428
- }});
429
- }
430
-
431
- // manage sliders of the grid editor
432
- // permit to add, edit
433
- function grid_slider_builder(panel, editor){
434
- var id_slider = "slider_" + gridEditor_id + Math.floor((Math.random() * 100000) + 1);
435
- var tpl_slider = '<div class="carousel slide" data-ride="carousel"> ' +
436
- '<ol class="carousel-indicators"></ol>' +
437
- '<div class="carousel-inner"></div>'+
438
- '<a class="left carousel-control" href="#'+id_slider+'" role="button" data-slide="prev"><span class="glyphicon glyphicon-chevron-left"></span></a>'+
439
- '<a class="right carousel-control" href="#'+id_slider+'" role="button" data-slide="next"><span class="glyphicon glyphicon-chevron-right"></span></a>'+
440
- '</div>';
441
- if(panel.html()) tpl_slider = panel.html();
442
- open_modal({title: "Enter Slider Items", modal_settings: { keyboard: false, backdrop: "static" }, show_footer: true, content: tpl_slider, callback: function(modal){
443
- var slide = modal.find(".carousel").attr("id", id_slider);
444
- slide.find(".carousel-control").attr("href", "#"+id_slider).end().find(".carousel-indicators li").attr("data-target", "#"+id_slider);
445
- slide.before("<div class='grid_slider_settings'><a href='#' class='grid_slider_add' title='Add Slider'><i class='fa fa-plus-circle'></i> "+I18n("button.add")+"</a></div>");
446
- modal.on("click", ".grid_slider_add", function(e){
447
- modal.find(".carousel-inner").append('<div class="item active" style="max-width: 100%;"><img src="http://www.diario-de-un-escalador.com/wp-content/uploads/Escalada20.jpg"><div class="carousel-caption">Caption here</div></div>');
448
- slider_builder(modal);
449
- e.preventDefault();
450
- }).on("click", ".grid_slide_edit", edit_slide).on("click", ".grid_slide_del", function(e){
451
- if(confirm("are you sure?")){
452
- $(this).closest(".item").remove();
453
- slider_builder(modal);
454
- }
455
- e.preventDefault();
456
- });
457
- slider_builder(modal);
458
- if(modal.find(".carousel-inner .item").length == 0) modal.find(".grid_slider_add").click();
459
- // save contents of tab
460
- var submit = $('<button type="button" class="btn btn-primary">Save</button>').click(function(){
461
- modal.find(".grid_slider_settings, .slider_actions").remove();
462
- panel.html(modal.find(".modal-body").html());
463
- modal.modal("hide");
464
- editor.trigger("auto_save");
465
- });
466
- modal.find(".modal-footer").prepend(submit);
467
- }});
468
-
469
- // manage slide editor form
470
- function edit_slide(e){
471
- var content = $(this).closest(".item").find(".carousel-caption");
472
- var image = $(this).closest(".item").children("img");
473
- var tpl = '<div class="form-group"><label>Background: </label><br><input type="hidden" class="form-control" name="url_file"></div><div class="form-group"><label>Description: </label><br><textarea class="descr"></textarea></div>';
474
- open_modal({title: "Enter Your Slider Content", modal_settings: { keyboard: false, backdrop: "static" }, show_footer: true, content: tpl, callback: function(modal){
475
- var submit = $('<button type="button" class="btn btn-primary">Save</button>').click(function(){
476
- content.html(modal.find("textarea").tinymce().getContent());
477
- image.attr("src", modal.find("input").val());
478
- modal.modal("hide");
479
- });
480
- modal.find("textarea").val(content.html());
481
- modal.find("input").val(image.attr("src")).input_upload();
482
- setTimeout(function(){ modal.find("textarea").tinymce($.extend({} ,DATA.tiny_mce.advanced, {height: 120})); }, 500);
483
- modal.find(".modal-footer").prepend(submit);
484
- }});
485
-
486
- e.preventDefault();
487
- }
488
-
489
- // slider options and update indicators
490
- function slider_builder(modal){
491
- var slide = modal.find(".carousel");
492
- var indi = modal.find(".carousel-indicators").html("");
493
- var settings = "<div class='slider_actions text-center'><a href='#' class='grid_slide_del'><i class='fa fa-trash-o'></i></a> <a href='#' class='grid_slide_edit'><i class='fa fa-pencil'></i></a></div>";
494
- modal.find(".carousel-inner").children().each(function(index, item){
495
- indi.append('<li data-target="#'+id_slider+'" data-slide-to="'+index+'"></li>');
496
- if($(this).find(".slider_actions").length == 0) $(this).append(settings);
497
- });
498
- var act = modal.find(".carousel-inner .item.active:last").index();
499
- modal.find(".carousel-indicators li").removeClass("active").eq(act).addClass("active");
500
- modal.find(".carousel-inner .item").removeClass("active").eq(act).addClass("active");
501
- }
502
- }
503
-
504
- // grid content editor builder
505
- function grid_editor_builder(panel, editor){
506
- open_modal({title: "Enter Your Content", modal_settings: { keyboard: false, backdrop: "static" }, show_footer: true, content: "<textarea rows='10' class='form-control'></textarea>", callback: function(modal){
507
- var submit = $('<button type="button" class="btn btn-primary">Save</button>').click(function(){
508
- var area = modal.find("textarea");
509
- panel.html(area.tinymce().getContent());
510
- modal.modal("hide");
511
- editor.trigger("auto_save");
512
- });
513
- modal.find("textarea").val(panel.html());
514
- setTimeout(function(){ modal.find("textarea").tinymce($.extend({} ,DATA.tiny_mce.advanced, {height: 120})); }, 500);
515
- modal.find(".modal-footer").prepend(submit);
516
- }});
517
- }
518
-
519
- // grid content text builder
520
- function grid_text_builder(panel, editor){
521
- open_modal({title: "Enter Your Text", modal_settings: { keyboard: false, backdrop: "static" }, show_footer: true, content: "<textarea rows='10' class='form-control'></textarea>", callback: function(modal){
522
- var submit = $('<button type="button" class="btn btn-primary">Save</button>').click(function(){
523
- panel.html(modal.find("textarea").val());
524
- modal.modal("hide");
525
- editor.trigger("auto_save");
526
- });
527
- modal.find("textarea").val(panel.html());
528
- modal.find(".modal-footer").prepend(submit);
529
- }});
530
- }
531
-
532
- });