camaleon_cms 0.2.1 → 1.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.

Files changed (266) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +266 -0
  3. data/app/apps/plugins/attack/config/config.json +1 -1
  4. data/app/apps/plugins/contact_form/config/config.json +1 -1
  5. data/app/apps/plugins/contact_form/contact_form_html_helper.rb +15 -10
  6. data/app/apps/plugins/contact_form/front_controller.rb +1 -0
  7. data/app/apps/plugins/contact_form/views/admin_forms/edit.html.erb +1 -2
  8. data/app/apps/plugins/contact_form/views/admin_forms/index.html.erb +1 -1
  9. data/app/apps/plugins/contact_form/views/admin_forms/responses.html.erb +1 -1
  10. data/app/apps/plugins/contact_form/views/forms_shorcode.html.erb +6 -6
  11. data/app/apps/plugins/front_cache/config/config.json +1 -1
  12. data/app/apps/plugins/front_cache/views/admin/settings.html.erb +1 -1
  13. data/app/apps/plugins/visibility_post/config/config.json +1 -1
  14. data/app/apps/themes/camaleon_first/assets/css/style-ver.css.scss +59 -32
  15. data/app/apps/themes/camaleon_first/views/layouts/index.html.erb +2 -2
  16. data/app/apps/themes/default/assets/css/style.css.scss +3 -0
  17. data/app/apps/themes/default/views/category.html.erb +1 -1
  18. data/app/apps/themes/default/views/post_tag.html.erb +1 -1
  19. data/app/apps/themes/default/views/post_type.html.erb +1 -1
  20. data/app/apps/themes/default/views/search.html.erb +1 -1
  21. data/app/apps/themes/new/views/category.html.erb +1 -1
  22. data/app/apps/themes/new/views/layouts/index.html.erb +2 -2
  23. data/app/apps/themes/new/views/post_tag.html.erb +1 -1
  24. data/app/apps/themes/new/views/post_type.html.erb +1 -1
  25. data/app/apps/themes/new/views/search.html.erb +1 -1
  26. data/app/assets/{stylesheets/admin/bootstrap/images → images/admin}/glyphicons-halflings.png +0 -0
  27. data/app/assets/javascripts/admin/actions.js +12 -205
  28. data/app/assets/javascripts/admin/admin-basic-manifest.js +3 -0
  29. data/app/assets/javascripts/admin/admin-manifest.js +14 -4
  30. data/app/assets/javascripts/admin/custom_fields.js +4 -2
  31. data/app/assets/javascripts/admin/data.js +49 -20
  32. data/app/assets/javascripts/admin/elfinder/upload_elfinder.js +4 -4
  33. data/app/assets/javascripts/admin/grid-editor.js +390 -113
  34. data/app/assets/javascripts/admin/i18n.js +22 -0
  35. data/app/assets/javascripts/admin/jquery.validate.js +2 -54
  36. data/app/assets/javascripts/admin/{core.js → libraries.js} +92 -76
  37. data/app/assets/javascripts/admin/login_manifest.js +0 -3
  38. data/app/assets/javascripts/admin/lte/app.js +758 -0
  39. data/app/assets/javascripts/admin/modal.js +76 -22
  40. data/app/assets/javascripts/admin/nav-menu.js +98 -39
  41. data/app/assets/javascripts/admin/post.js +28 -29
  42. data/app/assets/javascripts/admin/tinymce/skins/lightgray/content.min.css.scss +1 -1
  43. data/app/assets/javascripts/admin/tinymce/tinymce.min.js +11 -11
  44. data/app/assets/javascripts/admin/translator.js +9 -7
  45. data/app/assets/javascripts/admin/widgets.js +1 -0
  46. data/app/assets/stylesheets/admin/admin-basic-manifest.css +15 -0
  47. data/app/assets/stylesheets/admin/admin-manifest.css +7 -11
  48. data/app/assets/stylesheets/admin/bootstrap-datepicker.css.scss +472 -0
  49. data/app/assets/stylesheets/admin/bootstrap-datetimepicker.css.scss +339 -0
  50. data/app/assets/stylesheets/admin/colorpicker.css.scss +95 -0
  51. data/app/assets/stylesheets/admin/custom_admin.css.scss +160 -0
  52. data/app/assets/stylesheets/admin/elfinder-manifest.css +1 -1
  53. data/app/assets/stylesheets/admin/grid-editor.css.scss +14 -299
  54. data/app/assets/stylesheets/admin/lte/admin.css.scss +4747 -0
  55. data/app/assets/stylesheets/admin/lte/skins/skin-black-light.css +176 -0
  56. data/app/assets/stylesheets/admin/lte/skins/skin-black.css +154 -0
  57. data/app/assets/stylesheets/admin/lte/skins/skin-blue-light.css +167 -0
  58. data/app/assets/stylesheets/admin/lte/skins/skin-blue.css +142 -0
  59. data/app/assets/stylesheets/admin/lte/skins/skin-green-light.css +156 -0
  60. data/app/assets/stylesheets/admin/lte/skins/skin-green.css +134 -0
  61. data/app/assets/stylesheets/admin/lte/skins/skin-purple-light.css +156 -0
  62. data/app/assets/stylesheets/admin/lte/skins/skin-purple.css +134 -0
  63. data/app/assets/stylesheets/admin/lte/skins/skin-red-light.css +156 -0
  64. data/app/assets/stylesheets/admin/lte/skins/skin-red.css +134 -0
  65. data/app/assets/stylesheets/admin/lte/skins/skin-yellow-light.css +156 -0
  66. data/app/assets/stylesheets/admin/lte/skins/skin-yellow.css +134 -0
  67. data/app/assets/stylesheets/admin/nav-menu.css.scss +33 -0
  68. data/app/controllers/admin/appearances/nav_menus_controller.rb +13 -10
  69. data/app/controllers/admin/appearances/themes_controller.rb +1 -2
  70. data/app/controllers/admin/appearances_controller.rb +0 -4
  71. data/app/controllers/admin/categories_controller.rb +9 -15
  72. data/app/controllers/admin/comments_controller.rb +8 -14
  73. data/app/controllers/admin/grid_editor_controller.rb +55 -0
  74. data/app/controllers/admin/installers_controller.rb +1 -1
  75. data/app/controllers/admin/media_controller.rb +1 -3
  76. data/app/controllers/admin/plugins_controller.rb +2 -2
  77. data/app/controllers/admin/post_tags_controller.rb +9 -18
  78. data/app/controllers/admin/posts/drafts_controller.rb +1 -9
  79. data/app/controllers/admin/posts_controller.rb +12 -15
  80. data/app/controllers/admin/sessions_controller.rb +6 -7
  81. data/app/controllers/admin/settings/custom_fields_controller.rb +4 -9
  82. data/app/controllers/admin/settings/post_types_controller.rb +6 -16
  83. data/app/controllers/admin/settings/sites_controller.rb +5 -7
  84. data/app/controllers/admin/settings_controller.rb +0 -4
  85. data/app/controllers/admin/user_roles_controller.rb +8 -8
  86. data/app/controllers/admin/users_controller.rb +8 -9
  87. data/app/controllers/admin_controller.rb +4 -5
  88. data/app/controllers/apps/plugins_admin_controller.rb +3 -3
  89. data/app/controllers/apps/plugins_front_controller.rb +2 -2
  90. data/app/controllers/apps/themes_admin_controller.rb +2 -2
  91. data/app/controllers/apps/themes_front_controller.rb +2 -2
  92. data/app/controllers/camaleon_controller.rb +0 -1
  93. data/app/controllers/concerns/frontend_concern.rb +1 -2
  94. data/app/controllers/frontend_controller.rb +25 -9
  95. data/app/decorators/category_decorator.rb +0 -1
  96. data/app/decorators/custom_field_decorator.rb +0 -1
  97. data/app/decorators/custom_fields_concern.rb +9 -3
  98. data/app/decorators/post_comment_decorator.rb +0 -1
  99. data/app/decorators/post_decorator.rb +10 -4
  100. data/app/decorators/post_tag_decorator.rb +0 -1
  101. data/app/decorators/post_type_decorator.rb +0 -1
  102. data/app/decorators/site_decorator.rb +35 -11
  103. data/app/decorators/term_taxonomy_decorator.rb +1 -3
  104. data/app/decorators/theme_decorator.rb +0 -1
  105. data/app/decorators/user_decorator.rb +7 -5
  106. data/app/decorators/widget_decorator.rb +0 -1
  107. data/app/helpers/admin/application_helper.rb +14 -0
  108. data/app/helpers/admin/menus_helper.rb +8 -8
  109. data/app/helpers/camaleon_helper.rb +10 -3
  110. data/app/helpers/captcha_helper.rb +2 -2
  111. data/app/helpers/frontend/application_helper.rb +0 -1
  112. data/app/helpers/frontend/nav_menu_helper.rb +2 -1
  113. data/app/helpers/frontend/seo_helper.rb +1 -2
  114. data/app/helpers/frontend/site_helper.rb +4 -4
  115. data/app/helpers/hooks_helper.rb +2 -5
  116. data/app/helpers/html_helper.rb +9 -7
  117. data/app/helpers/plugins_helper.rb +34 -8
  118. data/app/helpers/session_helper.rb +1 -2
  119. data/app/helpers/short_code_helper.rb +91 -10
  120. data/app/helpers/site_helper.rb +17 -8
  121. data/app/helpers/theme_helper.rb +34 -7
  122. data/app/helpers/uploader_helper.rb +6 -2
  123. data/app/mailers/html_mailer.rb +15 -6
  124. data/app/models/category.rb +2 -1
  125. data/app/models/concerns/custom_fields_read.rb +14 -3
  126. data/app/models/concerns/metas.rb +7 -4
  127. data/app/models/custom_field_group.rb +3 -0
  128. data/app/models/{concerns/metas_saved.rb → grid_template.rb} +7 -2
  129. data/app/models/meta.rb +0 -1
  130. data/app/models/nav_menu.rb +15 -1
  131. data/app/models/nav_menu_item.rb +10 -0
  132. data/app/models/post.rb +100 -6
  133. data/app/models/post_comment.rb +6 -0
  134. data/app/models/post_default.rb +9 -8
  135. data/app/models/post_relationship.rb +2 -0
  136. data/app/models/post_type.rb +36 -24
  137. data/app/models/site.rb +7 -16
  138. data/app/models/term_taxonomy.rb +3 -2
  139. data/app/models/theme.rb +5 -0
  140. data/app/models/widget/assigned.rb +3 -2
  141. data/app/views/admin/appearances/nav_menus/_custom_fields.html.erb +6 -0
  142. data/app/views/admin/appearances/{_external_menu.html.erb → nav_menus/_external_menu.html.erb} +8 -10
  143. data/app/views/admin/appearances/nav_menus/_menu_form.html.erb +35 -0
  144. data/app/views/admin/appearances/nav_menus/_menu_list.html.erb +22 -0
  145. data/app/views/admin/appearances/nav_menus/index.html.erb +110 -0
  146. data/app/views/admin/appearances/themes/index.html.erb +4 -3
  147. data/app/views/admin/appearances/widgets/main/_sidebar.html.erb +29 -0
  148. data/app/views/admin/appearances/widgets/main/form.html.erb +1 -1
  149. data/app/views/admin/appearances/widgets/main/index.html.erb +19 -41
  150. data/app/views/admin/categories/edit.html.erb +2 -6
  151. data/app/views/admin/categories/index.html.erb +7 -11
  152. data/app/views/admin/comments/form.html.erb +4 -7
  153. data/app/views/admin/comments/index.html.erb +24 -41
  154. data/app/views/admin/comments/reply.html.erb +9 -10
  155. data/app/views/admin/grid_editor/form.html.erb +31 -0
  156. data/app/views/admin/grid_editor/index.html.erb +29 -0
  157. data/app/views/admin/media/index.html.erb +3 -15
  158. data/app/views/admin/plugins/_plugins_list.html.erb +1 -2
  159. data/app/views/admin/post_tags/edit.html.erb +2 -6
  160. data/app/views/admin/post_tags/index.html.erb +3 -8
  161. data/app/views/admin/posts/_sidebar.html.erb +136 -0
  162. data/app/views/admin/posts/form.html.erb +87 -281
  163. data/app/views/admin/posts/index.html.erb +89 -104
  164. data/app/views/admin/sessions/forgot.html.erb +7 -13
  165. data/app/views/admin/sessions/login.html.erb +21 -11
  166. data/app/views/admin/sessions/register.html.erb +3 -6
  167. data/app/views/admin/settings/custom_fields/_meta_data.html.erb +1 -1
  168. data/app/views/admin/settings/custom_fields/_render.html.erb +6 -14
  169. data/app/views/admin/settings/custom_fields/fields/audio.html.erb +1 -1
  170. data/app/views/admin/settings/custom_fields/fields/field_attrs.html.erb +3 -5
  171. data/app/views/admin/settings/custom_fields/fields/file.html.erb +1 -1
  172. data/app/views/admin/settings/custom_fields/fields/image.html.erb +1 -1
  173. data/app/views/admin/settings/custom_fields/fields/posts.html.erb +1 -1
  174. data/app/views/admin/settings/custom_fields/fields/select.html.erb +1 -1
  175. data/app/views/admin/settings/custom_fields/fields/users.html.erb +1 -1
  176. data/app/views/admin/settings/custom_fields/fields/video.html.erb +1 -1
  177. data/app/views/admin/settings/custom_fields/form.html.erb +11 -9
  178. data/app/views/admin/settings/custom_fields/get_items.html.erb +3 -6
  179. data/app/views/admin/settings/custom_fields/index.html.erb +3 -10
  180. data/app/views/admin/settings/languages.html.erb +2 -10
  181. data/app/views/admin/settings/post_types/_form.html.erb +1 -1
  182. data/app/views/admin/settings/post_types/edit.html.erb +2 -6
  183. data/app/views/admin/settings/post_types/index.html.erb +4 -12
  184. data/app/views/admin/settings/site.html.erb +143 -149
  185. data/app/views/admin/settings/sites/form.html.erb +4 -19
  186. data/app/views/admin/settings/sites/index.html.erb +8 -9
  187. data/app/views/admin/taxonomy/index.html.erb +1 -1
  188. data/app/views/admin/user_roles/form.html.erb +2 -3
  189. data/app/views/admin/user_roles/index.html.erb +2 -8
  190. data/app/views/admin/users/form.html.erb +14 -9
  191. data/app/views/admin/users/index.html.erb +3 -8
  192. data/app/views/admin/users/profile_edit.html.erb +21 -14
  193. data/app/views/default_theme/custom_fields/audio.html.erb +3 -0
  194. data/app/views/default_theme/custom_fields/checkbox.html.erb +3 -0
  195. data/app/views/default_theme/custom_fields/checkboxes.html.erb +3 -0
  196. data/app/views/default_theme/custom_fields/colorpicker.html.erb +3 -0
  197. data/app/views/default_theme/custom_fields/date.html.erb +3 -0
  198. data/app/views/default_theme/custom_fields/editor.html.erb +3 -0
  199. data/app/views/default_theme/custom_fields/email.html.erb +3 -0
  200. data/app/views/default_theme/custom_fields/field_attrs.html.erb +3 -0
  201. data/app/views/default_theme/custom_fields/file.html.erb +3 -0
  202. data/app/views/default_theme/custom_fields/image.html.erb +3 -0
  203. data/app/views/default_theme/custom_fields/numeric.html.erb +3 -0
  204. data/app/views/default_theme/custom_fields/phone.html.erb +3 -0
  205. data/app/views/default_theme/custom_fields/posts.html.erb +3 -0
  206. data/app/views/default_theme/custom_fields/radio.html.erb +3 -0
  207. data/app/views/default_theme/custom_fields/select.html.erb +3 -0
  208. data/app/views/default_theme/custom_fields/select_eval.html.erb +3 -0
  209. data/app/views/default_theme/custom_fields/text_area.html.erb +3 -0
  210. data/app/views/default_theme/custom_fields/text_box.html.erb +3 -0
  211. data/app/views/default_theme/custom_fields/url.html.erb +3 -0
  212. data/app/views/default_theme/custom_fields/users.html.erb +3 -0
  213. data/app/views/default_theme/custom_fields/video.html.erb +3 -0
  214. data/app/views/default_theme/layouts/index.html.erb +2 -2
  215. data/app/views/default_theme/{post.html.erb → single.html.erb} +1 -1
  216. data/app/views/default_theme/{post.rss.builder → single.rss.builder} +0 -0
  217. data/app/views/layouts/admin.html.erb +35 -133
  218. data/app/views/layouts/admin/_flash_messages.html.erb +1 -15
  219. data/app/views/layouts/admin/_footer.html.erb +6 -0
  220. data/app/views/layouts/admin/_header.html.erb +51 -0
  221. data/app/views/layouts/admin/_sidebar.html.erb +21 -30
  222. data/app/views/layouts/admin/installer.html.erb +2 -2
  223. data/app/views/layouts/login.html.erb +15 -33
  224. data/config/initializers/active_record_extension.rb +14 -2
  225. data/config/initializers/assets.rb +21 -7
  226. data/config/initializers/page_caching.rb +1 -2
  227. data/config/locales/admin/en.yml +17 -9
  228. data/config/locales/admin/es.yml +8 -3
  229. data/config/locales/admin/it.yml +4 -2
  230. data/config/locales/admin/js.yml +147 -0
  231. data/config/routes/admin.rb +4 -4
  232. data/config/routes/frontend.rb +2 -2
  233. data/config/system.json +1 -0
  234. data/db/migrate/20150926095310_rename_column_posts.rb +18 -0
  235. data/lib/camaleon_cms.rb +1 -1
  236. data/lib/camaleon_cms/engine.rb +17 -2
  237. data/lib/camaleon_cms/version.rb +1 -1
  238. data/lib/generators/camaleon_cms/gem_plugin_generator.rb +122 -0
  239. data/lib/generators/camaleon_cms/gem_plugin_template/app/controllers/plugins/my_plugin/admin_controller.rb +8 -0
  240. data/lib/generators/camaleon_cms/gem_plugin_template/app/controllers/plugins/my_plugin/front_controller.rb +8 -0
  241. data/lib/generators/camaleon_cms/gem_plugin_template/app/helpers/plugins/my_plugin/main_helper.rb +22 -0
  242. data/lib/generators/camaleon_cms/gem_plugin_template/app/models/plugins/my_plugin/my_plugin.rb +12 -0
  243. data/lib/generators/camaleon_cms/gem_plugin_template/app/views/plugins/my_plugin/admin/index.html.erb +2 -0
  244. data/lib/generators/camaleon_cms/gem_plugin_template/app/views/plugins/my_plugin/front/index.html.erb +2 -0
  245. data/lib/generators/camaleon_cms/gem_plugin_template/app/views/plugins/my_plugin/layouts/readme.txt +2 -0
  246. data/lib/generators/camaleon_cms/gem_plugin_template/config/camaleon_plugin.json +21 -0
  247. data/lib/generators/camaleon_cms/install_generator.rb +1 -2
  248. data/lib/generators/camaleon_cms/install_template/plugin_routes.rb +1 -10
  249. data/lib/generators/ctheme_template/app/apps/themes/my_theme/config/config.json +5 -5
  250. data/lib/generators/ctheme_template/app/apps/themes/my_theme/main_helper.rb +6 -5
  251. data/lib/generators/ctheme_template/app/apps/themes/my_theme/views/layouts/index.html.erb +2 -2
  252. data/lib/plugin_routes.rb +40 -2
  253. metadata +257 -22
  254. data/app/assets/stylesheets/admin/animate/animate.min.css +0 -6
  255. data/app/assets/stylesheets/admin/bootstrap/bootstrap-datetimepicker.css.scss +0 -339
  256. data/app/assets/stylesheets/admin/bootstrap/bootstrap.min.css +0 -5
  257. data/app/assets/stylesheets/admin/core.scss +0 -349
  258. data/app/assets/stylesheets/admin/fonts/OpenSans-Regular-webfont.eot +0 -0
  259. data/app/assets/stylesheets/admin/fonts/OpenSans-Regular-webfont.svg +0 -1831
  260. data/app/assets/stylesheets/admin/fonts/OpenSans-Regular-webfont.ttf +0 -0
  261. data/app/assets/stylesheets/admin/fonts/OpenSans-Regular-webfont.woff +0 -0
  262. data/app/assets/stylesheets/admin/nav-menu.css +0 -54
  263. data/app/assets/stylesheets/admin/theme-default.scss +0 -8462
  264. data/app/models/concerns/site_public.rb +0 -23
  265. data/app/views/admin/appearances/menu.html.erb +0 -199
  266. data/lib/Gemfile +0 -25
@@ -0,0 +1,3 @@
1
+ //= require jquery
2
+ //= require bootstrap.min
3
+ //= require ./jquery.validate
@@ -16,17 +16,27 @@
16
16
  //= require ./jquery-ui.min
17
17
  //= require ./underscore
18
18
  //= require ./jquery.validate
19
- //= require ./actions
19
+
20
+ //= require jquery_ujs
21
+
20
22
  //= require ./elfinder/elfinder.full
21
23
  //= require ./elfinder/proxy/elFinderSupportVer1
22
24
  //= require ./elfinder/upload_elfinder
23
25
 
24
26
  //= require ./jquery.slugify
25
27
  //= require ./translator
26
- //= require ./core
28
+ //= require ./i18n
29
+ //= require ./custom_fields
30
+
31
+ //= require ./libraries
32
+ //= require ./actions
33
+
27
34
 
28
- //= require jquery_ujs
29
35
  //= require ./modal
36
+ //= require ./grid-editor
30
37
 
31
38
  //= require ./tageditor/jquery.caret.min
32
- //= require ./tageditor/jquery.tag-editor
39
+ //= require ./tageditor/jquery.tag-editor
40
+
41
+ //= require ./lte/app
42
+
@@ -31,7 +31,7 @@ function build_custom_field(values, multiple, field_key, rand, default_value){
31
31
  });
32
32
  $sortable.delegate('.actions .fa-times', "click", function(){
33
33
  var parent = $(this).parents('li');
34
- if(confirm(lang.message_delete_item)){
34
+ if(confirm(I18n("msg.delete_item"))){
35
35
  parent.remove();
36
36
  }
37
37
  return false;
@@ -73,7 +73,9 @@ function custom_field_date($field){
73
73
  }else{
74
74
  box.datepicker({
75
75
  language: 'es',
76
- format: 'yyyy-mm-dd'
76
+ format: 'yyyy-mm-dd',
77
+ autoclose: true,
78
+ todayBtn: "linked"
77
79
  });
78
80
  }
79
81
  }
@@ -13,12 +13,16 @@ var DATA = {
13
13
  statusbar: true,
14
14
  paste: true,
15
15
  toolbar_items_size: 'small',
16
+ content_css: tinymce_assets["custom_css"],
17
+ convert_urls: false,
16
18
  //forced_root_block: '',
19
+ extended_valid_elements: 'i[*],div[*],p[*],li[*],a[*],ol[*],ul[*],span[*]',
17
20
  toolbar: "bold italic | alignleft aligncenter alignright alignjustify | fontselect fontsizeselect | bullist numlist | outdent indent | undo redo | link unlink image media | forecolor backcolor | styleselect template",
18
21
  language: CURRENT_LOCALE,
19
22
  relative_urls: false,
20
23
  remove_script_host: false,
21
24
  browser_spellcheck : true,
25
+ language_url: tinymce_assets["language_url"],
22
26
  file_browser_callback: function(field_name, url, type, win) {
23
27
  $.fn.upload_elfinder({
24
28
  selected: function(res){
@@ -48,32 +52,57 @@ var DATA = {
48
52
  context: 'insert',
49
53
  onclick: function () { editor.insertContent('<p>-New line-</p>'); }
50
54
  });
51
- editor.on('postRender', function(e) { editor.settings.onPostRender(editor); });
55
+
56
+ // eval all extra setups
57
+ for(var ff in editor.settings.extra_setups) editor.settings.extra_setups[ff](editor);
58
+ editor.on('postRender', function(e) {
59
+ editor.settings.onPostRender(editor);
60
+ });
61
+
62
+ editor.on('init', function(e) {
63
+ // auto switch on grid editor detected
64
+ if($.fn.isGridEditorContent($(editor.targetElm).val()))
65
+ $(editor.targetElm).gridEditor(editor);
66
+ });
67
+
68
+ // grid editor button
69
+ editor.addButton('grid_editor', {
70
+ text: 'Grid Editor',
71
+ icon: false,
72
+ onclick: function(){
73
+ if(!confirm("Are you sure to change the editor?")) return false;
74
+ var area = $(editor.targetElm).gridEditor(editor);
75
+ }
76
+ });
77
+
52
78
  },
53
- onPostRender: function(editor){}
79
+ onPostRender: function(editor){}, //custom callback for post render
80
+ extra_toolbar: [], //custom callback for
81
+ extra_setups: [] //custom callback for
82
+
54
83
  }
55
84
  },
56
85
  tiny_mce3: {
57
86
  advanced:{
58
- // General options
59
- mode : "textareas",
60
- editor_selector : "tinymce_advanced",
61
- theme : "advanced",
62
- plugins : "autolink,lists,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
87
+ // General options
88
+ mode : "textareas",
89
+ editor_selector : "tinymce_advanced",
90
+ theme : "advanced",
91
+ plugins : "autolink,lists,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
63
92
 
64
- // Theme options
65
- theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
66
- theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
67
- theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
68
- theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,spellchecker,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,blockquote,pagebreak,|,insertfile,insertimage",
69
- theme_advanced_toolbar_location : "top",
70
- theme_advanced_toolbar_align : "left",
71
- theme_advanced_statusbar_location : "bottom",
72
- theme_advanced_resizing : true,
93
+ // Theme options
94
+ theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
95
+ theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
96
+ theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
97
+ theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,spellchecker,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,blockquote,pagebreak,|,insertfile,insertimage",
98
+ theme_advanced_toolbar_location : "top",
99
+ theme_advanced_toolbar_align : "left",
100
+ theme_advanced_statusbar_location : "bottom",
101
+ theme_advanced_resizing : true,
73
102
 
74
- // Skin options
75
- skin : "bootstrap",
76
- language: CURRENT_LOCALE
77
- }
103
+ // Skin options
104
+ skin : "bootstrap",
105
+ language: CURRENT_LOCALE
78
106
  }
107
+ }
79
108
  }
@@ -1,6 +1,6 @@
1
1
  // options:
2
2
  // - title: Title Modal, default: Upload File
3
- // - type: image, video, audio, application/pdf,... default: 'all'
3
+ // - type: image, video, audio, application/pdf or file extensions (jpg, png, ..),... default: 'all'
4
4
  // - multiple: return array files or uniq file, default: true
5
5
  // - mode, menubar icons visibility, default: basic, values: full, basic
6
6
  // - params: in mode basic use options toolbar: default: [], example: ['resize','mkdir']
@@ -92,7 +92,7 @@
92
92
  var datas = [];
93
93
  for(var i=0; i<selected.length;i++){
94
94
  var file = elfinderInstance.file(selected[i]);
95
- if(file.mime && (mime_type == "all" || $.inArray(true, mime_type.split(",").map(function(format){ return file.mime.indexOf(format) > -1 })) >= 0)){
95
+ if(file.mime && (mime_type == "all" || $.inArray(true, mime_type.split(",").map(function(format){ return file.mime.indexOf(format) > -1 })) >= 0 || $.inArray(file.name.split(".").pop().toLowerCase(), mime_type.split(",")) > -1 )){
96
96
  if(file.size > 0) datas.push(file);
97
97
  }
98
98
  }
@@ -202,8 +202,8 @@
202
202
  "</div>"+
203
203
  "<div id='panel-info-content' class='row'>"+
204
204
  "<p class='col-md-12'>"+content_elfinder.messages.size+" : <span>"+content_elfinder.formatSize(elemFirst.size)+"</span></p>"+
205
- "<p class='col-md-12'>URL : <span><input type='text' onClick='this.select();' value='"+elemFirst.url.to_url()+"' /></span></p>"+
206
- (is_image_data(elemFirst) ? "<p class='col-md-12'>"+content_elfinder.messages.thumb+" : <span><input type='text' onClick='this.select();' value='"+elemFirst.tmb.to_url()+"' /></span></p>" : "")+
205
+ "<p class='col-md-12'>URL : <span><input type='text' value='"+elemFirst.url.to_url()+"' /></span></p>"+
206
+ (is_image_data(elemFirst) ? "<p class='col-md-12'>"+content_elfinder.messages.thumb+" : <span><input type='text' value='"+ (elemFirst.tmb != "1" ? elemFirst.tmb.toString().to_url() : elemFirst.url.to_url()) +"' /></span></p>" : "")+
207
207
  "<p class='col-md-12'>"+content_elfinder.messages.dim+" : <span>"+elemFirst.dim+"</span></p>"+
208
208
  "<p class='col-md-12'>"+content_elfinder.messages.modify+" : <span>"+elemFirst.date.replace('-0400','')+"</span></p>"+
209
209
  "</div>";
@@ -1,26 +1,24 @@
1
1
  jQuery(function(){
2
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
3
5
  $.fn.gridEditor_extra_rows = [];
6
+ $.fn.gridEditor_libraries = [];
7
+ //********************** editor content options **********************//
4
8
  $.fn.gridEditor_options = {
5
- text: {title: "Text", callback: function(panel){
6
- open_modal({title: "Entere Your Text", modal_settings: { keyboard: false, backdrop: "static" }, show_footer: true, content: "<textarea rows='10' class='form-control'></textarea>", callback: function(modal){
7
- var submit = $('<button type="button" class="btn btn-primary">Save</button>').click(function(){
8
- alert(modal.find("textarea").val());
9
- panel.html(modal.find("textarea").val());
10
- modal.modal("hide");
11
- })
12
- modal.find(".modal-footer").prepend(submit);
13
- }});
14
- }},
15
- editor: {title: "Editor", callback: function(panel){ }},
16
- slider: {title: "Slider", callback: function(panel){ }},
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},
17
13
  };
14
+ //********************** end editor content options **********************//
18
15
 
19
16
  // grid editor plugin
20
17
  var gridEditor_id = 0;
21
18
  $.fn.gridEditor = function(tinyEditor){
22
- var tinymce_panel = $(tinyEditor.editorContainer).hide();
23
19
  gridEditor_id ++;
20
+ var tinymce_panel = $(tinyEditor.editorContainer).hide();
21
+ var editor_id = "grid_editor_"+gridEditor_id;
24
22
  var textarea = $(this);
25
23
  if(textarea.prev().hasClass("panel_grid_editor")){ textarea.prev().show(); return textarea; }
26
24
  var tpl_rows = "";
@@ -33,41 +31,48 @@ jQuery(function(){
33
31
  var tpl_options = "";
34
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>'; });
35
33
 
36
- var editor = $("<div class='panel_grid_editor'>"+
37
- "<div class='grid_editor_menu'>"+
38
- "<ul class='nav nav-tabs'>"+
39
- "<li class='active'><a href='#grid_columns_"+gridEditor_id+"' role='tab' data-toggle='tab'>Rows</a></li>"+
40
- "<li class=''><a href='#grid_contents_"+gridEditor_id+"' role='tab' data-toggle='tab'>Content</a></li>"+
41
- "<li class=''><a href='#' class='toggle_panel_grid'>Text Editor</a></li>"+
42
- "<li class=''><a class='export'>Export</a></li>"+
43
- "<li class=''><a class='parse'>Parse</a></li>"+
44
- "</ul>"+
45
- "<div class='tab-content'>"+
46
- "<div role='tabpanel' class='tab-pane active' id='grid_columns_"+gridEditor_id+"'> "+tpl_rows+" </div>"+
47
- "<div role='tabpanel' class='tab-pane' id='grid_contents_"+gridEditor_id+"'>"+tpl_options+"</div>"+
48
- "</div>"+
49
- "</div>"+
50
- "<style> .panel_grid_editor{ margin-top: 40px; } /*.panel_grid_body.hover-grid{ background: red !important; }*/ .panel_grid_body .drg_column .header_box .dropdown{ position: absolute; right: 8px; top: 0px; } .panel_grid_body .grid_sortable_items{ min-height: 100px; margin-top: -23px; padding-top: 23px; } .panel_grid_body .drg_item > *{ display: none; } .panel_grid_body .drg_item > :first-child{ display: block } /*.grid_sortable_items.hover-grid{ background: blue; }*/ </style>"+
51
- "<div class='panel_grid_body row' style='min-height: 300px; background: #eee; border: 1px solid #ccc;'></div>"+
52
- "</div>");
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>");
53
57
 
54
58
  // grid editor export
55
- function export_content(editor_body){
56
- editor_body.children().each(function(){
57
- var col = $(this).removeClass("drg_column btn btn-default grid-col-built ui-draggable ui-draggable-handle").removeAttr("style");
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");
58
63
  col.children(".header_box").remove();
59
64
  col.find(".grid_sortable_items").children().each(function(){ //contents
60
- var content = $(this).removeClass("drg_item btn btn-default ui-draggable ui-draggable-handle grid-item-built").removeAttr("style").children(".header_box").remove();
65
+ $(this).removeClass("drg_item btn btn-default ui-draggable ui-draggable-dragging ui-sortable-handle ui-draggable-handle").children(".header_box").remove();
61
66
  });
62
67
  });
63
- return editor_body;
68
+ var res = container.html();
69
+ container.remove();
70
+ return res;
64
71
  }
65
72
 
66
- // grid editor parser to recover
73
+ // grid editor parser to recover from saved content
67
74
  function parse_content(editor){
68
- editor.find(".panel_grid_body").children().each(function(){
69
- var col = parse_content_column($(this));
70
- });
75
+ editor.find(".panel_grid_body").children("div").each(function(){ var col = parse_content_column($(this)); });
71
76
  return editor;
72
77
  }
73
78
 
@@ -76,15 +81,15 @@ jQuery(function(){
76
81
  // skip_options: boolean to add drodown options
77
82
  function parse_content_column(column, skip_options){
78
83
  var html = '<div class="header_box">'+
79
- '<a><i class="icon-bar"></i>'+column.attr("data-col_title")+'</a>'+
80
- '</div>';
84
+ '<a><i class="icon-bar"></i>'+column.attr("data-col_title")+'</a>'+
85
+ '</div>';
81
86
  var options = "<div class='dropdown'>" +
82
- "<a class='dropdown-toggle' data-toggle='dropdown'>&nbsp; <span class='caret'></span></a>" +
83
- "<ul class='dropdown-menu' role='menu'>"+
84
- "<li><a class='grid_col_remove' title='Remove' href='#'><i class='fa fa-trash-o'></i> Remove</a></li>"+
85
- "<li><a class='grid_col_clone' title='Clone' href='#'><i class='fa fa-copy'></i> Clone</a></li>"+
86
- "</ul>"+
87
- "</div>" ;
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>" ;
88
93
  column.addClass("drg_column btn btn-default");
89
94
  if(column.children(".header_box").length == 0) column.prepend(html);
90
95
  if(!skip_options){
@@ -102,43 +107,131 @@ jQuery(function(){
102
107
  // skip_options: boolean to add drodown options
103
108
  function parse_content_content(content, skip_options){
104
109
  var html = '<div class="header_box">'+
105
- '<a><i class="icon-bar"></i>'+content.attr("data-content_title")+'</a>'+
106
- '</div>';
110
+ '<a><i class="icon-bar"></i>'+content.attr("data-content_title")+'</a>'+
111
+ '</div>';
107
112
  var options = "<div class='dropdown'>" +
108
113
  "<a class='dropdown-toggle' data-toggle='dropdown'>&nbsp; <span class='caret'></span></a>" +
109
- "<ul class='dropdown-menu' role='menu'>"+
110
- "<li><a class='grid_content_remove' title='Remove' href='#'><i class='fa fa-trash-o'></i> Remove</a></li>"+
111
- "<li><a class='grid_content_clone' title='Clone' href='#'><i class='fa fa-copy'></i> Clone</a></li>"+
112
- "<li><a class='grid_content_edit' title='Clone' href='#'><i class='fa fa-pencil'></i> Edit</a></li>"+
113
- "</ul>"+
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>"+
114
119
  "</div>";
115
120
  content.addClass("drg_item btn btn-default");
116
121
  if(content.children(".header_box").length == 0) content.prepend(html);
117
122
  if(!skip_options){
118
123
  content.find('.header_box').append(options);
119
124
  }
125
+ // save used libraries
126
+ $.fn.gridEditor_libraries = $.merge($.fn.gridEditor_libraries, $.fn.gridEditor_options[content.attr("data-kind")])
120
127
  content;
121
128
  }
122
129
 
123
- // grid editor reverse parser
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
+ }});
124
165
 
125
- // toggle editor
126
- editor.find(".grid_editor_menu .toggle_panel_grid").click(function(){ if(!confirm("Are you sure to change the editor?")) return false; editor.hide(); tinymce_panel.show(); return false; })
127
- editor.find(".grid_editor_menu .export").click(function(){ export_content(editor.find(".panel_grid_body")); return false; })
128
- editor.find(".grid_editor_menu .parse").click(function(){ parse_content(editor); return false; })
129
- editor.find("#grid_columns_"+gridEditor_id).children().each(function(){ parse_content_column($(this), true) });
130
- editor.find("#grid_contents_"+gridEditor_id).children().each(function(){ parse_content_content($(this), true) });
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);
131
230
  textarea.before(editor);
132
- var time_control;
133
- $('.panel_grid_body', editor).bind("DOMSubtreeModified",function(){
134
- var thiss = $(this);
135
- if(time_control) clearTimeout(time_control);
136
- time_control = setTimeout(function(){ textarea.val(export_content(thiss.clone()).html()); console.log(textarea.val()); }, 1000);
137
- });
138
231
 
139
232
  // drag columns
140
- jQuery(".drg_column", editor).draggable({
141
- connectToSortable: editor.find(".panel_grid_body"),
233
+ jQuery(".grid_editor_menu .drg_column", editor).draggable({
234
+ connectToSortable: "#"+editor_id+" .panel_grid_body",
142
235
  cursor: 'move', // sets the cursor apperance
143
236
  revert: 'invalid', // makes the item to return if it isn't placed into droppable
144
237
  revertDuration: -1, // duration while the item returns to its place
@@ -147,8 +240,8 @@ jQuery(function(){
147
240
  });
148
241
 
149
242
  //draggable content elements
150
- jQuery(".drg_item", editor).draggable({
151
- connectToSortable: '.grid_sortable_items',
243
+ jQuery(".grid_editor_menu .drg_item", editor).draggable({
244
+ connectToSortable: "#"+editor_id+" .grid_sortable_items",
152
245
  cursor: 'move', // sets the cursor apperance
153
246
  revert: 'invalid', // makes the item to return if it isn't placed into droppable
154
247
  revertDuration: -1, // duration while the item returns to its place
@@ -164,7 +257,7 @@ jQuery(function(){
164
257
  delay: 150,
165
258
  dropOnEmpty: true,
166
259
  items: ".drg_column",
167
- connectWith: '.panel_grid_body',
260
+ connectWith: "#"+editor_id+" .panel_grid_body",
168
261
  placeholder: "placeholder",
169
262
  start: function (e, ui) {
170
263
  ui.helper.css({'width': '' , 'height': ''}).addClass('col-md-' + jQuery(ui.helper).attr('data-col'));
@@ -178,50 +271,13 @@ jQuery(function(){
178
271
  $(this).removeClass("hover-grid");
179
272
  },
180
273
  stop: function (e, ui) {
181
- ui.item.removeAttr('style');
274
+ ui.item.css({left: "", top: "", position: ""});
182
275
  if(!jQuery(ui.item).hasClass('grid-col-built')) parse_content_column(ui.item)
183
276
  ui.item.addClass('grid-col-built');
277
+ editor.trigger("auto_save");
184
278
  }
185
279
  });
186
280
 
187
- // column dropdown options
188
- jQuery('.panel_grid_body ', editor).on({
189
- click: function (e) {
190
- if(confirm("Are you sure to delete this block?")) jQuery(this).closest(".drg_column").fadeDestroy();
191
- e.preventDefault();
192
- }
193
- }, '.grid_col_remove').on({
194
- click: function (e) {
195
- var widget = jQuery(this).closest(".drg_column");
196
- var widget_clone = widget.clone();
197
- widget.after(widget_clone);
198
- grid_content_manager(widget_clone.find(".grid_sortable_items"));
199
- e.preventDefault();
200
- }
201
- }, '.grid_col_clone');
202
-
203
- // content dropdown options
204
- jQuery('.panel_grid_body ', editor).on({
205
- click: function (e) {
206
- if(confirm("Are you sure to delete this content?")) jQuery(this).closest(".drg_item").fadeDestroy();
207
- e.preventDefault();
208
- }
209
- }, '.drg_item .grid_content_remove').on({
210
- click: function (e) {
211
- var widget = jQuery(this).closest(".drg_item");
212
- var widget_clone = widget.clone();
213
- widget.after(widget_clone);
214
- e.preventDefault();
215
- }
216
- }, '.drg_item .grid_content_clone').on({
217
- click: function (e) {
218
- var panel_content = $(this).closest(".drg_item");
219
- var key = panel_content.attr("data-kind");
220
- $.fn.gridEditor_options[key]["callback"](panel_content.children(".grid_item_content"));
221
- e.preventDefault();
222
- }
223
- }, '.drg_item .grid_content_edit');
224
-
225
281
  function grid_content_manager(item) {
226
282
  // Sort the children (content elements)
227
283
  jQuery(item).sortable({
@@ -231,7 +287,7 @@ jQuery(function(){
231
287
  delay: 150,
232
288
  dropOnEmpty: true,
233
289
  items: ".drg_item",
234
- connectWith: '.grid_sortable_items',
290
+ connectWith: "#"+editor_id+' .grid_sortable_items',
235
291
  placeholder: "placeholder",
236
292
  start: function (e, ui) {
237
293
  ui.helper.css({'width': '' , 'height': ''}).addClass('col-md-12');
@@ -244,12 +300,233 @@ jQuery(function(){
244
300
  $(this).removeClass("hover-grid");
245
301
  },
246
302
  stop: function (e, ui) {
247
- ui.item.addClass('col-md-12').removeAttr('style');
303
+ ui.item.addClass('col-md-12').css({left: "", top: "", position: ""});
248
304
  if(!jQuery(ui.item).hasClass('grid-item-built')) parse_content_content(ui.item)
249
305
  ui.item.addClass('grid-item-built');
306
+ editor.trigger("auto_save");
250
307
  }
251
308
  });
252
309
  }
253
310
  return textarea;
254
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
+
255
532
  });