camaleon_cms 0.0.1

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 (653) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +37 -0
  3. data/app/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  4. data/app/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  5. data/app/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  6. data/app/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  7. data/app/assets/images/admin/no_image.jpg +0 -0
  8. data/app/assets/images/bg-tree.jpeg +0 -0
  9. data/app/assets/images/camaleon-dark.png +0 -0
  10. data/app/assets/images/camaleon.png +0 -0
  11. data/app/assets/images/category-icon.png +0 -0
  12. data/app/assets/images/image-not-found.png +0 -0
  13. data/app/assets/images/language/de.png +0 -0
  14. data/app/assets/images/language/en.png +0 -0
  15. data/app/assets/images/language/es.png +0 -0
  16. data/app/assets/images/language/fr.png +0 -0
  17. data/app/assets/images/language/it.png +0 -0
  18. data/app/assets/images/language/pt.png +0 -0
  19. data/app/assets/images/language/zh.png +0 -0
  20. data/app/assets/images/loader.gif +0 -0
  21. data/app/assets/images/users/no-image.jpg +0 -0
  22. data/app/assets/javascripts/admin/actions.js +248 -0
  23. data/app/assets/javascripts/admin/admin-manifest.js +32 -0
  24. data/app/assets/javascripts/admin/bootstrap-colorpicker.js +540 -0
  25. data/app/assets/javascripts/admin/bootstrap-datepicker.js +1690 -0
  26. data/app/assets/javascripts/admin/bootstrap-datetimepicker.min.js +26 -0
  27. data/app/assets/javascripts/admin/bootstrap-select.js +1022 -0
  28. data/app/assets/javascripts/admin/core.js +267 -0
  29. data/app/assets/javascripts/admin/custom_fields.js +165 -0
  30. data/app/assets/javascripts/admin/data.js +78 -0
  31. data/app/assets/javascripts/admin/elfinder-manifest.js +7 -0
  32. data/app/assets/javascripts/admin/elfinder/elfinder.full.js +12646 -0
  33. data/app/assets/javascripts/admin/elfinder/i18n/elfinder.es.js +294 -0
  34. data/app/assets/javascripts/admin/elfinder/i18n/elfinder.fr.js +298 -0
  35. data/app/assets/javascripts/admin/elfinder/proxy/elFinderSupportVer1.js +338 -0
  36. data/app/assets/javascripts/admin/elfinder/upload_elfinder.js +236 -0
  37. data/app/assets/javascripts/admin/es.js +27 -0
  38. data/app/assets/javascripts/admin/form-builder/formbuilder.js +1250 -0
  39. data/app/assets/javascripts/admin/form-builder/vendor.js +3072 -0
  40. data/app/assets/javascripts/admin/form/cropper.min.js +9 -0
  41. data/app/assets/javascripts/admin/form/jquery.form.js +911 -0
  42. data/app/assets/javascripts/admin/jquery-sieve.js +6 -0
  43. data/app/assets/javascripts/admin/jquery-ui.min.js +10 -0
  44. data/app/assets/javascripts/admin/jquery.nestable.js +485 -0
  45. data/app/assets/javascripts/admin/jquery.slugify.js +65 -0
  46. data/app/assets/javascripts/admin/jquery.tagsinput.min.js +1 -0
  47. data/app/assets/javascripts/admin/jquery.validate.js +1415 -0
  48. data/app/assets/javascripts/admin/login.js.coffee +7 -0
  49. data/app/assets/javascripts/admin/login_manifest.js +18 -0
  50. data/app/assets/javascripts/admin/modal.js +94 -0
  51. data/app/assets/javascripts/admin/nav-menu.js +110 -0
  52. data/app/assets/javascripts/admin/plugins.js +637 -0
  53. data/app/assets/javascripts/admin/post.js +274 -0
  54. data/app/assets/javascripts/admin/tageditor/jquery.caret.min.js +2 -0
  55. data/app/assets/javascripts/admin/tageditor/jquery.tag-editor.js +352 -0
  56. data/app/assets/javascripts/admin/tinymce/langs/es.js +177 -0
  57. data/app/assets/javascripts/admin/tinymce/langs/readme.md +3 -0
  58. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-cool.gif +0 -0
  59. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-cry.gif +0 -0
  60. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-embarassed.gif +0 -0
  61. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif +0 -0
  62. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-frown.gif +0 -0
  63. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-innocent.gif +0 -0
  64. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-kiss.gif +0 -0
  65. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-laughing.gif +0 -0
  66. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-money-mouth.gif +0 -0
  67. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-sealed.gif +0 -0
  68. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-smile.gif +0 -0
  69. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-surprised.gif +0 -0
  70. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-tongue-out.gif +0 -0
  71. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-undecided.gif +0 -0
  72. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-wink.gif +0 -0
  73. data/app/assets/javascripts/admin/tinymce/plugins/emoticons/img/smiley-yell.gif +0 -0
  74. data/app/assets/javascripts/admin/tinymce/plugins/filemanager/plugin.min.js +31 -0
  75. data/app/assets/javascripts/admin/tinymce/plugins/visualblocks/css/visualblocks.css +135 -0
  76. data/app/assets/javascripts/admin/tinymce/skins/lightgray/content.min.css.scss +4 -0
  77. data/app/assets/javascripts/admin/tinymce/skins/lightgray/fonts/tinymce-small.eot +0 -0
  78. data/app/assets/javascripts/admin/tinymce/skins/lightgray/fonts/tinymce-small.svg +62 -0
  79. data/app/assets/javascripts/admin/tinymce/skins/lightgray/fonts/tinymce-small.ttf +0 -0
  80. data/app/assets/javascripts/admin/tinymce/skins/lightgray/fonts/tinymce-small.woff +0 -0
  81. data/app/assets/javascripts/admin/tinymce/skins/lightgray/fonts/tinymce.eot +0 -0
  82. data/app/assets/javascripts/admin/tinymce/skins/lightgray/fonts/tinymce.svg +83 -0
  83. data/app/assets/javascripts/admin/tinymce/skins/lightgray/fonts/tinymce.ttf +0 -0
  84. data/app/assets/javascripts/admin/tinymce/skins/lightgray/fonts/tinymce.woff +0 -0
  85. data/app/assets/javascripts/admin/tinymce/skins/lightgray/img/anchor.gif +0 -0
  86. data/app/assets/javascripts/admin/tinymce/skins/lightgray/img/loader.gif +0 -0
  87. data/app/assets/javascripts/admin/tinymce/skins/lightgray/img/object.gif +0 -0
  88. data/app/assets/javascripts/admin/tinymce/skins/lightgray/img/trans.gif +0 -0
  89. data/app/assets/javascripts/admin/tinymce/themes/modern/theme.min.js +1 -0
  90. data/app/assets/javascripts/admin/tinymce/tinymce.min.js +11 -0
  91. data/app/assets/javascripts/admin/translator.js +109 -0
  92. data/app/assets/javascripts/admin/underscore.js +1536 -0
  93. data/app/assets/javascripts/admin/widgets.js +53 -0
  94. data/app/assets/javascripts/audio/alert.mp3 +0 -0
  95. data/app/assets/javascripts/audio/fail.mp3 +0 -0
  96. data/app/assets/javascripts/bootstrap.min.js +7 -0
  97. data/app/assets/javascripts/elfinder_front.js +85 -0
  98. data/app/assets/javascripts/gibberish-aes.js +1017 -0
  99. data/app/assets/javascripts/jquery-1.11.3.min.js +5 -0
  100. data/app/assets/stylesheets/admin/admin-manifest.css +28 -0
  101. data/app/assets/stylesheets/admin/animate/animate.min.css +6 -0
  102. data/app/assets/stylesheets/admin/bootstrap/bootstrap-datetimepicker.css +339 -0
  103. data/app/assets/stylesheets/admin/bootstrap/bootstrap.min.css +5 -0
  104. data/app/assets/stylesheets/admin/bootstrap/images/glyphicons-halflings.png +0 -0
  105. data/app/assets/stylesheets/admin/core.scss +345 -0
  106. data/app/assets/stylesheets/admin/cropper/cropper.min.css +52 -0
  107. data/app/assets/stylesheets/admin/elfinder-manifest.css +6 -0
  108. data/app/assets/stylesheets/admin/elfinder/elfinder-theme.scss +191 -0
  109. data/app/assets/stylesheets/admin/elfinder/elfinder.css +1922 -0
  110. data/app/assets/stylesheets/admin/elfinder/images/arrows-active.png +0 -0
  111. data/app/assets/stylesheets/admin/elfinder/images/arrows-normal.png +0 -0
  112. data/app/assets/stylesheets/admin/elfinder/images/crop.gif +0 -0
  113. data/app/assets/stylesheets/admin/elfinder/images/dialogs.png +0 -0
  114. data/app/assets/stylesheets/admin/elfinder/images/icons-big.png +0 -0
  115. data/app/assets/stylesheets/admin/elfinder/images/icons-small.png +0 -0
  116. data/app/assets/stylesheets/admin/elfinder/images/logo.png +0 -0
  117. data/app/assets/stylesheets/admin/elfinder/images/progress.gif +0 -0
  118. data/app/assets/stylesheets/admin/elfinder/images/quicklook-bg.png +0 -0
  119. data/app/assets/stylesheets/admin/elfinder/images/quicklook-icons.png +0 -0
  120. data/app/assets/stylesheets/admin/elfinder/images/resize.png +0 -0
  121. data/app/assets/stylesheets/admin/elfinder/images/spinner-mini.gif +0 -0
  122. data/app/assets/stylesheets/admin/elfinder/images/toolbar.png +0 -0
  123. data/app/assets/stylesheets/admin/elfinder/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  124. data/app/assets/stylesheets/admin/elfinder/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  125. data/app/assets/stylesheets/admin/elfinder/images/ui-icons_222222_256x240.png +0 -0
  126. data/app/assets/stylesheets/admin/fonts/OpenSans-Regular-webfont.eot +0 -0
  127. data/app/assets/stylesheets/admin/fonts/OpenSans-Regular-webfont.svg +1831 -0
  128. data/app/assets/stylesheets/admin/fonts/OpenSans-Regular-webfont.ttf +0 -0
  129. data/app/assets/stylesheets/admin/fonts/OpenSans-Regular-webfont.woff +0 -0
  130. data/app/assets/stylesheets/admin/fonts/glyphicons-halflings-regular.eot +0 -0
  131. data/app/assets/stylesheets/admin/fonts/glyphicons-halflings-regular.svg +229 -0
  132. data/app/assets/stylesheets/admin/fonts/glyphicons-halflings-regular.ttf +0 -0
  133. data/app/assets/stylesheets/admin/fonts/glyphicons-halflings-regular.woff +0 -0
  134. data/app/assets/stylesheets/admin/form-builder/formbuilder.css +71 -0
  135. data/app/assets/stylesheets/admin/img/bg.png +0 -0
  136. data/app/assets/stylesheets/admin/img/colorpicker/alpha.png +0 -0
  137. data/app/assets/stylesheets/admin/img/colorpicker/hue.png +0 -0
  138. data/app/assets/stylesheets/admin/img/colorpicker/saturation.png +0 -0
  139. data/app/assets/stylesheets/admin/img/girls-1.jpg +0 -0
  140. data/app/assets/stylesheets/admin/img/jquery/resize-icon.png +0 -0
  141. data/app/assets/stylesheets/admin/img/loading.gif +1 -0
  142. data/app/assets/stylesheets/admin/img/logo-small.png +0 -0
  143. data/app/assets/stylesheets/admin/img/logo.png +0 -0
  144. data/app/assets/stylesheets/admin/img/no_image.jpg +0 -0
  145. data/app/assets/stylesheets/admin/img/rormeleon-white.png +0 -0
  146. data/app/assets/stylesheets/admin/img/thumb_no_found.jpg +0 -0
  147. data/app/assets/stylesheets/admin/jquery.tagsinput.css +72 -0
  148. data/app/assets/stylesheets/admin/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  149. data/app/assets/stylesheets/admin/jquery/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  150. data/app/assets/stylesheets/admin/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  151. data/app/assets/stylesheets/admin/jquery/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  152. data/app/assets/stylesheets/admin/jquery/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  153. data/app/assets/stylesheets/admin/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  154. data/app/assets/stylesheets/admin/jquery/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  155. data/app/assets/stylesheets/admin/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  156. data/app/assets/stylesheets/admin/jquery/images/ui-icons_222222_256x240.png +0 -0
  157. data/app/assets/stylesheets/admin/jquery/images/ui-icons_2e83ff_256x240.png +0 -0
  158. data/app/assets/stylesheets/admin/jquery/images/ui-icons_454545_256x240.png +0 -0
  159. data/app/assets/stylesheets/admin/jquery/images/ui-icons_888888_256x240.png +0 -0
  160. data/app/assets/stylesheets/admin/jquery/images/ui-icons_cd0a0a_256x240.png +0 -0
  161. data/app/assets/stylesheets/admin/jquery/jquery-ui.scss +1226 -0
  162. data/app/assets/stylesheets/admin/nav-menu.css +54 -0
  163. data/app/assets/stylesheets/admin/nestable/jquery.nestable.css +103 -0
  164. data/app/assets/stylesheets/admin/tageditor/delete.png +0 -0
  165. data/app/assets/stylesheets/admin/tageditor/delete.svg +4 -0
  166. data/app/assets/stylesheets/admin/tageditor/jquery.tag-editor.css +49 -0
  167. data/app/assets/stylesheets/admin/theme-default.scss +8462 -0
  168. data/app/assets/stylesheets/admin/widgets.css.scss +26 -0
  169. data/app/assets/stylesheets/bootstrap.min.css.scss +5 -0
  170. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/css/style.css +84 -0
  171. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/editor_plugin.js +1 -0
  172. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/editor_plugin_src.js +90 -0
  173. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/img/youtube.png +0 -0
  174. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/index.html +86 -0
  175. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/js/scripts.js +1 -0
  176. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/js/scripts_src.js +81 -0
  177. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/langs/en.js +3 -0
  178. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/langs/en_dlg.js +12 -0
  179. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/langs/es.js +3 -0
  180. data/app/assets/stylesheets/tinymce/plugins/youtubeIframe/langs/es_dlg.js +12 -0
  181. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/bootstrap.css +2228 -0
  182. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/content.css +189 -0
  183. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/dialog.css +295 -0
  184. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/butt2.png +0 -0
  185. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/button-bg.png +0 -0
  186. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/buttons.png +0 -0
  187. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/down_arrow.gif +0 -0
  188. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/fade-butt.png +0 -0
  189. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/icons.png +0 -0
  190. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/items.gif +0 -0
  191. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/menu-arrow.png +0 -0
  192. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/menu-check.png +0 -0
  193. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/progress.gif +0 -0
  194. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/tabs.gif +0 -0
  195. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/img/toolbarbg.png +0 -0
  196. data/app/assets/stylesheets/tinymce/themes/advanced/skins/bootstrap/ui.css +1163 -0
  197. data/app/controllers/admin/appearances/nav_menus_controller.rb +120 -0
  198. data/app/controllers/admin/appearances/themes_controller.rb +30 -0
  199. data/app/controllers/admin/appearances/widgets/assign_controller.rb +40 -0
  200. data/app/controllers/admin/appearances/widgets/main_controller.rb +57 -0
  201. data/app/controllers/admin/appearances/widgets/sidebar_controller.rb +59 -0
  202. data/app/controllers/admin/appearances_controller.rb +17 -0
  203. data/app/controllers/admin/categories_controller.rb +77 -0
  204. data/app/controllers/admin/comments_controller.rb +119 -0
  205. data/app/controllers/admin/installers_controller.rb +40 -0
  206. data/app/controllers/admin/media_controller.rb +55 -0
  207. data/app/controllers/admin/plugins_controller.rb +45 -0
  208. data/app/controllers/admin/post_tags_controller.rb +83 -0
  209. data/app/controllers/admin/posts/drafts_controller.rb +76 -0
  210. data/app/controllers/admin/posts_controller.rb +195 -0
  211. data/app/controllers/admin/sessions_controller.rb +144 -0
  212. data/app/controllers/admin/settings/custom_fields_controller.rb +85 -0
  213. data/app/controllers/admin/settings/post_types_controller.rb +73 -0
  214. data/app/controllers/admin/settings/sites_controller.rb +89 -0
  215. data/app/controllers/admin/settings_controller.rb +60 -0
  216. data/app/controllers/admin/user_roles_controller.rb +76 -0
  217. data/app/controllers/admin/users_controller.rb +120 -0
  218. data/app/controllers/admin_controller.rb +56 -0
  219. data/app/controllers/apps/plugins_admin_controller.rb +21 -0
  220. data/app/controllers/apps/plugins_front_controller.rb +21 -0
  221. data/app/controllers/apps/themes_admin_controller.rb +21 -0
  222. data/app/controllers/apps/themes_front_controller.rb +21 -0
  223. data/app/controllers/camaleon_controller.rb +87 -0
  224. data/app/controllers/concerns/frontend_concern.rb +57 -0
  225. data/app/controllers/frontend_controller.rb +240 -0
  226. data/app/decorators/application_decorator.rb +81 -0
  227. data/app/decorators/category_decorator.rb +61 -0
  228. data/app/decorators/custom_field_decorator.rb +31 -0
  229. data/app/decorators/custom_fields_concern.rb +33 -0
  230. data/app/decorators/metas_decorator_methods.rb +19 -0
  231. data/app/decorators/post_comment_decorator.rb +26 -0
  232. data/app/decorators/post_decorator.rb +162 -0
  233. data/app/decorators/post_tag_decorator.rb +36 -0
  234. data/app/decorators/post_type_decorator.rb +56 -0
  235. data/app/decorators/site_decorator.rb +136 -0
  236. data/app/decorators/term_taxonomy_decorator.rb +97 -0
  237. data/app/decorators/theme_decorator.rb +16 -0
  238. data/app/decorators/user_decorator.rb +67 -0
  239. data/app/decorators/widget_decorator.rb +13 -0
  240. data/app/helpers/admin/application_helper.rb +27 -0
  241. data/app/helpers/admin/breadcrumb_helper.rb +37 -0
  242. data/app/helpers/admin/category_helper.rb +22 -0
  243. data/app/helpers/admin/custom_fields_helper.rb +329 -0
  244. data/app/helpers/admin/menus_helper.rb +199 -0
  245. data/app/helpers/admin/post_type_helper.rb +50 -0
  246. data/app/helpers/camaleon_helper.rb +65 -0
  247. data/app/helpers/captcha_helper.rb +90 -0
  248. data/app/helpers/content_helper.rb +35 -0
  249. data/app/helpers/frontend/application_helper.rb +41 -0
  250. data/app/helpers/frontend/nav_menu_helper.rb +177 -0
  251. data/app/helpers/frontend/seo_helper.rb +60 -0
  252. data/app/helpers/frontend/site_helper.rb +60 -0
  253. data/app/helpers/hooks_helper.rb +54 -0
  254. data/app/helpers/html_helper.rb +114 -0
  255. data/app/helpers/plugins_helper.rb +129 -0
  256. data/app/helpers/session_helper.rb +108 -0
  257. data/app/helpers/short_code_helper.rb +82 -0
  258. data/app/helpers/site_helper.rb +124 -0
  259. data/app/helpers/theme_helper.rb +51 -0
  260. data/app/helpers/uploader_helper.rb +144 -0
  261. data/app/helpers/user_roles_helper.rb +14 -0
  262. data/app/mailers/html_mailer.rb +47 -0
  263. data/app/models/ability.rb +113 -0
  264. data/app/models/category.rb +55 -0
  265. data/app/models/concerns/categories_tags_for_posts.rb +140 -0
  266. data/app/models/concerns/custom_fields_read.rb +221 -0
  267. data/app/models/concerns/metas.rb +133 -0
  268. data/app/models/concerns/metas_saved.rb +10 -0
  269. data/app/models/concerns/site_public.rb +23 -0
  270. data/app/models/custom_field.rb +34 -0
  271. data/app/models/custom_field_group.rb +121 -0
  272. data/app/models/custom_fields_relationship.rb +26 -0
  273. data/app/models/meta.rb +16 -0
  274. data/app/models/nav_menu.rb +41 -0
  275. data/app/models/nav_menu_item.rb +36 -0
  276. data/app/models/plugin.rb +57 -0
  277. data/app/models/plugins.rb +13 -0
  278. data/app/models/post.rb +89 -0
  279. data/app/models/post_comment.rb +44 -0
  280. data/app/models/post_default.rb +78 -0
  281. data/app/models/post_relationship.rb +26 -0
  282. data/app/models/post_tag.rb +15 -0
  283. data/app/models/post_type.rb +125 -0
  284. data/app/models/site.rb +337 -0
  285. data/app/models/term_relationship.rb +26 -0
  286. data/app/models/term_taxonomy.rb +156 -0
  287. data/app/models/theme.rb +33 -0
  288. data/app/models/themes.rb +13 -0
  289. data/app/models/user.rb +172 -0
  290. data/app/models/user_relationship.rb +17 -0
  291. data/app/models/user_role.rb +139 -0
  292. data/app/models/widget.rb +13 -0
  293. data/app/models/widget/assigned.rb +34 -0
  294. data/app/models/widget/main.rb +52 -0
  295. data/app/models/widget/sidebar.rb +28 -0
  296. data/app/views/_flash_messages.html.erb +39 -0
  297. data/app/views/admin/appearances/_external_menu.html.erb +16 -0
  298. data/app/views/admin/appearances/menu.html.erb +199 -0
  299. data/app/views/admin/appearances/themes/index.html.erb +68 -0
  300. data/app/views/admin/appearances/themes/preview.html.erb +1 -0
  301. data/app/views/admin/appearances/themes/theme_load_data.html.erb +40 -0
  302. data/app/views/admin/appearances/widgets/assign/_form.html.erb +35 -0
  303. data/app/views/admin/appearances/widgets/main/form.html.erb +27 -0
  304. data/app/views/admin/appearances/widgets/main/index.html.erb +91 -0
  305. data/app/views/admin/appearances/widgets/sidebar/form.html.erb +23 -0
  306. data/app/views/admin/categories/_form.html.erb +42 -0
  307. data/app/views/admin/categories/edit.html.erb +18 -0
  308. data/app/views/admin/categories/index.html.erb +81 -0
  309. data/app/views/admin/comments/form.html.erb +55 -0
  310. data/app/views/admin/comments/index.html.erb +58 -0
  311. data/app/views/admin/comments/reply.html.erb +197 -0
  312. data/app/views/admin/dashboard/index.html.erb +25 -0
  313. data/app/views/admin/installers/form.html.erb +19 -0
  314. data/app/views/admin/installers/welcome.html.erb +8 -0
  315. data/app/views/admin/media/iframe.html.erb +33 -0
  316. data/app/views/admin/media/index.html.erb +31 -0
  317. data/app/views/admin/plugins/_plugins_list.html.erb +59 -0
  318. data/app/views/admin/plugins/index.html.erb +37 -0
  319. data/app/views/admin/post_tags/_form.html.erb +34 -0
  320. data/app/views/admin/post_tags/edit.html.erb +18 -0
  321. data/app/views/admin/post_tags/index.html.erb +79 -0
  322. data/app/views/admin/posts/_filter_posts.html.erb +6 -0
  323. data/app/views/admin/posts/form.html.erb +294 -0
  324. data/app/views/admin/posts/index.html.erb +121 -0
  325. data/app/views/admin/posts/show.html.erb +20 -0
  326. data/app/views/admin/sessions/forgot.html.erb +51 -0
  327. data/app/views/admin/sessions/login.html.erb +39 -0
  328. data/app/views/admin/sessions/register.html.erb +63 -0
  329. data/app/views/admin/settings/custom_fields/_meta_data.html.erb +102 -0
  330. data/app/views/admin/settings/custom_fields/_render.html.erb +73 -0
  331. data/app/views/admin/settings/custom_fields/fields/audio.html.erb +4 -0
  332. data/app/views/admin/settings/custom_fields/fields/checkbox.html.erb +3 -0
  333. data/app/views/admin/settings/custom_fields/fields/checkboxes.html.erb +5 -0
  334. data/app/views/admin/settings/custom_fields/fields/colorpicker.html.erb +7 -0
  335. data/app/views/admin/settings/custom_fields/fields/date.html.erb +7 -0
  336. data/app/views/admin/settings/custom_fields/fields/editor.html.erb +4 -0
  337. data/app/views/admin/settings/custom_fields/fields/email.html.erb +3 -0
  338. data/app/views/admin/settings/custom_fields/fields/field_attrs.html.erb +10 -0
  339. data/app/views/admin/settings/custom_fields/fields/file.html.erb +4 -0
  340. data/app/views/admin/settings/custom_fields/fields/image.html.erb +4 -0
  341. data/app/views/admin/settings/custom_fields/fields/numeric.html.erb +4 -0
  342. data/app/views/admin/settings/custom_fields/fields/phone.html.erb +3 -0
  343. data/app/views/admin/settings/custom_fields/fields/posts.html.erb +17 -0
  344. data/app/views/admin/settings/custom_fields/fields/radio.html.erb +5 -0
  345. data/app/views/admin/settings/custom_fields/fields/select.html.erb +7 -0
  346. data/app/views/admin/settings/custom_fields/fields/select_eval.html.erb +3 -0
  347. data/app/views/admin/settings/custom_fields/fields/text_area.html.erb +3 -0
  348. data/app/views/admin/settings/custom_fields/fields/text_box.html.erb +3 -0
  349. data/app/views/admin/settings/custom_fields/fields/url.html.erb +3 -0
  350. data/app/views/admin/settings/custom_fields/fields/users.html.erb +8 -0
  351. data/app/views/admin/settings/custom_fields/fields/video.html.erb +4 -0
  352. data/app/views/admin/settings/custom_fields/form.html.erb +249 -0
  353. data/app/views/admin/settings/custom_fields/get_items.html.erb +199 -0
  354. data/app/views/admin/settings/custom_fields/index.html.erb +69 -0
  355. data/app/views/admin/settings/languages.html.erb +68 -0
  356. data/app/views/admin/settings/post_types/_form.html.erb +93 -0
  357. data/app/views/admin/settings/post_types/edit.html.erb +18 -0
  358. data/app/views/admin/settings/post_types/index.html.erb +80 -0
  359. data/app/views/admin/settings/site.html.erb +124 -0
  360. data/app/views/admin/settings/sites/form.html.erb +50 -0
  361. data/app/views/admin/settings/sites/index.html.erb +56 -0
  362. data/app/views/admin/taxonomy/_form.html.erb +62 -0
  363. data/app/views/admin/taxonomy/edit.html.erb +18 -0
  364. data/app/views/admin/taxonomy/index.html.erb +79 -0
  365. data/app/views/admin/user_roles/form.html.erb +168 -0
  366. data/app/views/admin/user_roles/index.html.erb +54 -0
  367. data/app/views/admin/users/form.html.erb +305 -0
  368. data/app/views/admin/users/index.html.erb +58 -0
  369. data/app/views/admin/users/profile.html.erb +118 -0
  370. data/app/views/admin/users/profile/_activity.html.erb +180 -0
  371. data/app/views/admin/users/profile/_settings.html.erb +15 -0
  372. data/app/views/admin/users/profile_edit.html.erb +305 -0
  373. data/app/views/default_theme/admin/settings.html.erb +1 -0
  374. data/app/views/default_theme/category.html.erb +25 -0
  375. data/app/views/default_theme/category.rss.builder +23 -0
  376. data/app/views/default_theme/index.html.erb +70 -0
  377. data/app/views/default_theme/index.rss.builder +21 -0
  378. data/app/views/default_theme/layouts/_footer.html.erb +18 -0
  379. data/app/views/default_theme/layouts/_header.html.erb +38 -0
  380. data/app/views/default_theme/layouts/index.html.erb +34 -0
  381. data/app/views/default_theme/partials/_breadcrumb.html.erb +10 -0
  382. data/app/views/default_theme/partials/_categories_list.html.erb +23 -0
  383. data/app/views/default_theme/partials/_comments.html.erb +33 -0
  384. data/app/views/default_theme/partials/_comments_list.html.erb +21 -0
  385. data/app/views/default_theme/partials/_flash_messages.html.erb +26 -0
  386. data/app/views/default_theme/partials/_forms.html.erb +19 -0
  387. data/app/views/default_theme/partials/_post_list_item.html.erb +13 -0
  388. data/app/views/default_theme/partials/_render_custom_field.html.erb +57 -0
  389. data/app/views/default_theme/partials/_search_form.html.erb +10 -0
  390. data/app/views/default_theme/partials/_sidebar.html.erb +56 -0
  391. data/app/views/default_theme/post.html.erb +40 -0
  392. data/app/views/default_theme/post.rss.builder +12 -0
  393. data/app/views/default_theme/post_tag.html.erb +17 -0
  394. data/app/views/default_theme/post_tag.rss.builder +22 -0
  395. data/app/views/default_theme/post_type.html.erb +25 -0
  396. data/app/views/default_theme/post_type.rss.builder +22 -0
  397. data/app/views/default_theme/profile.html.erb +18 -0
  398. data/app/views/default_theme/robots.text.erb +1 -0
  399. data/app/views/default_theme/search.html.erb +13 -0
  400. data/app/views/default_theme/sitemap.html.erb +0 -0
  401. data/app/views/html_mailer/other.html.erb +3 -0
  402. data/app/views/html_mailer/sender.html.erb +25 -0
  403. data/app/views/layouts/admin.html.erb +164 -0
  404. data/app/views/layouts/admin/_ajax.html.erb +2 -0
  405. data/app/views/layouts/admin/_flash_messages.html.erb +49 -0
  406. data/app/views/layouts/admin/_form_error.html.erb +10 -0
  407. data/app/views/layouts/admin/_sidebar.html.erb +31 -0
  408. data/app/views/layouts/admin/installer.html.erb +36 -0
  409. data/app/views/layouts/application.html.erb +15 -0
  410. data/app/views/layouts/login.html.erb +40 -0
  411. data/app/views/shortcode_templates/form.html.erb +1 -0
  412. data/app/views/shortcode_templates/widget.html.erb +11 -0
  413. data/config/initializers/active_record_extension.rb +24 -0
  414. data/config/initializers/assets.rb +17 -0
  415. data/config/initializers/cache_helper.rb +9 -0
  416. data/config/initializers/elfinder.rb +79 -0
  417. data/config/initializers/fix_ssl.rb +14 -0
  418. data/config/initializers/mobu.rb +24 -0
  419. data/config/initializers/page_caching.rb +35 -0
  420. data/config/initializers/rufus_cron.rb +44 -0
  421. data/config/locales/admin/en.yml +561 -0
  422. data/config/locales/admin/es.yml +560 -0
  423. data/config/locales/ar.yml +275 -0
  424. data/config/locales/common.yml +125 -0
  425. data/config/locales/de.yml +210 -0
  426. data/config/locales/en.yml +207 -0
  427. data/config/locales/es.yml +198 -0
  428. data/config/locales/fr.yml +207 -0
  429. data/config/locales/languages.yml +19 -0
  430. data/config/locales/pl.yml +237 -0
  431. data/config/locales/pt.yml +201 -0
  432. data/config/locales/routes.yml +23 -0
  433. data/config/routes.rb +10 -0
  434. data/config/routes/admin.rb +119 -0
  435. data/config/routes/frontend.rb +35 -0
  436. data/config/sitemap.rb +52 -0
  437. data/config/system.json +16 -0
  438. data/db/migrate/20150611161134_post_table_into_utf8.rb +115 -0
  439. data/lib/ca-bundle.crt +3554 -0
  440. data/lib/camaleon_cms.rb +4 -0
  441. data/lib/camaleon_cms/engine.rb +60 -0
  442. data/lib/camaleon_cms/version.rb +3 -0
  443. data/lib/captcha/bumpyroad.ttf +0 -0
  444. data/lib/captcha/captcha_0.jpg +0 -0
  445. data/lib/captcha/captcha_1.jpg +0 -0
  446. data/lib/captcha/captcha_10.jpg +0 -0
  447. data/lib/captcha/captcha_11.jpg +0 -0
  448. data/lib/captcha/captcha_2.jpg +0 -0
  449. data/lib/captcha/captcha_3.jpg +0 -0
  450. data/lib/captcha/captcha_4.jpg +0 -0
  451. data/lib/captcha/captcha_5.jpg +0 -0
  452. data/lib/captcha/captcha_6.jpg +0 -0
  453. data/lib/captcha/captcha_7.jpg +0 -0
  454. data/lib/captcha/captcha_8.jpg +0 -0
  455. data/lib/captcha/captcha_9.jpg +0 -0
  456. data/lib/ext/aes_crypt.rb +246 -0
  457. data/lib/ext/array.rb +54 -0
  458. data/lib/ext/hash.rb +41 -0
  459. data/lib/ext/string.rb +159 -0
  460. data/lib/ext/translator.rb +83 -0
  461. data/lib/generators/camaleon_cms/install_generator.rb +20 -0
  462. data/lib/generators/camaleon_cms/install_template/apps/plugins/attack/admin_controller.rb +25 -0
  463. data/lib/generators/camaleon_cms/install_template/apps/plugins/attack/assets/docs/images/screenshot_1.jpg +0 -0
  464. data/lib/generators/camaleon_cms/install_template/apps/plugins/attack/assets/docs/images/screenshot_2.jpg +0 -0
  465. data/lib/generators/camaleon_cms/install_template/apps/plugins/attack/assets/docs/images/screenshot_3.jpg +0 -0
  466. data/lib/generators/camaleon_cms/install_template/apps/plugins/attack/assets/docs/index.html +60 -0
  467. data/lib/generators/camaleon_cms/install_template/apps/plugins/attack/attack_helper.rb +99 -0
  468. data/lib/generators/camaleon_cms/install_template/apps/plugins/attack/config/config.json +31 -0
  469. data/lib/generators/camaleon_cms/install_template/apps/plugins/attack/config/custom_models.rb +4 -0
  470. data/lib/generators/camaleon_cms/install_template/apps/plugins/attack/config/locales/readme.txt +1 -0
  471. data/lib/generators/camaleon_cms/install_template/apps/plugins/attack/config/locales/translation.yml +36 -0
  472. data/lib/generators/camaleon_cms/install_template/apps/plugins/attack/config/routes_admin.txt +2 -0
  473. data/lib/generators/camaleon_cms/install_template/apps/plugins/attack/models/attack.rb +12 -0
  474. data/lib/generators/camaleon_cms/install_template/apps/plugins/attack/views/admin/settings.html.erb +49 -0
  475. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/admin_forms_controller.rb +93 -0
  476. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/assets/css/admin/form-builder/formbuilder.css +70 -0
  477. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/assets/css/contact-form.css +8 -0
  478. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/assets/css/front/railsform.scss +94 -0
  479. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/assets/css/readme.txt +1 -0
  480. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/assets/docs/images/screenshot_1.jpg +0 -0
  481. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/assets/docs/images/screenshot_2.jpg +0 -0
  482. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/assets/docs/images/screenshot_3.jpg +0 -0
  483. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/assets/docs/images/screenshot_4.jpg +0 -0
  484. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/assets/docs/images/screenshot_5.jpg +0 -0
  485. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/assets/docs/index.html +89 -0
  486. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/assets/js/contact_form.js +2 -0
  487. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/assets/js/form-builder/formbuilder.js +1271 -0
  488. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/assets/js/form-builder/vendor.js +3072 -0
  489. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/assets/js/readme.txt +1 -0
  490. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/config/config.json +35 -0
  491. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/config/locales/readme.txt +1 -0
  492. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/config/locales/translation.yml +210 -0
  493. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/config/routes_admin.txt +4 -0
  494. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/config/routes_front.txt +2 -0
  495. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/contact_form_helper.rb +91 -0
  496. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/contact_form_html_helper.rb +157 -0
  497. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/front_controller.rb +106 -0
  498. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/models/contact_form.rb +26 -0
  499. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/views/admin_forms/_form.html.erb +33 -0
  500. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/views/admin_forms/edit.html.erb +375 -0
  501. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/views/admin_forms/index.html.erb +65 -0
  502. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/views/admin_forms/manual.html.erb +59 -0
  503. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/views/admin_forms/responses.html.erb +67 -0
  504. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/views/forms_shorcode.html.erb +27 -0
  505. data/lib/generators/camaleon_cms/install_template/apps/plugins/contact_form/views/front/index.html.erb +3 -0
  506. data/lib/generators/camaleon_cms/install_template/apps/plugins/front_cache/admin_controller.rb +35 -0
  507. data/lib/generators/camaleon_cms/install_template/apps/plugins/front_cache/assets/docs/images/screenshot_1.jpg +0 -0
  508. data/lib/generators/camaleon_cms/install_template/apps/plugins/front_cache/assets/docs/images/screenshot_2.jpg +0 -0
  509. data/lib/generators/camaleon_cms/install_template/apps/plugins/front_cache/assets/docs/index.html +58 -0
  510. data/lib/generators/camaleon_cms/install_template/apps/plugins/front_cache/config/config.json +21 -0
  511. data/lib/generators/camaleon_cms/install_template/apps/plugins/front_cache/config/locales/readme.txt +1 -0
  512. data/lib/generators/camaleon_cms/install_template/apps/plugins/front_cache/config/locales/translation.yml +37 -0
  513. data/lib/generators/camaleon_cms/install_template/apps/plugins/front_cache/config/routes_admin.txt +3 -0
  514. data/lib/generators/camaleon_cms/install_template/apps/plugins/front_cache/front_cache_helper.rb +154 -0
  515. data/lib/generators/camaleon_cms/install_template/apps/plugins/front_cache/views/admin/settings.html.erb +71 -0
  516. data/lib/generators/camaleon_cms/install_template/apps/plugins/visibility_post/assets/docs/images/screenshot_1.jpg +0 -0
  517. data/lib/generators/camaleon_cms/install_template/apps/plugins/visibility_post/assets/docs/images/screenshot_2.jpg +0 -0
  518. data/lib/generators/camaleon_cms/install_template/apps/plugins/visibility_post/assets/docs/images/screenshot_3.jpg +0 -0
  519. data/lib/generators/camaleon_cms/install_template/apps/plugins/visibility_post/assets/docs/images/screenshot_4.jpg +0 -0
  520. data/lib/generators/camaleon_cms/install_template/apps/plugins/visibility_post/assets/docs/index.html +62 -0
  521. data/lib/generators/camaleon_cms/install_template/apps/plugins/visibility_post/assets/js/form.js +29 -0
  522. data/lib/generators/camaleon_cms/install_template/apps/plugins/visibility_post/config/config.json +24 -0
  523. data/lib/generators/camaleon_cms/install_template/apps/plugins/visibility_post/visibility_post_helper.rb +132 -0
  524. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/assets/css/magnific-ver.css +394 -0
  525. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/assets/css/main.css +15 -0
  526. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/assets/css/style-ver.css.scss +224 -0
  527. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/assets/css/wpbase.css +1 -0
  528. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/assets/images/empe.jpg +0 -0
  529. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/assets/images/image.png +0 -0
  530. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/assets/images/loader.gif +0 -0
  531. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/assets/images/zoom.png +0 -0
  532. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/assets/js/hover.zoom.js +67 -0
  533. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/assets/js/magnific.min.js +3 -0
  534. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/assets/js/main-ver.js +46 -0
  535. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/assets/js/main.js +18 -0
  536. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/assets/js/modernizr.custom.js +4 -0
  537. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/config/config.json +14 -0
  538. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/main_helper.rb +43 -0
  539. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/views/admin/settings.html.erb +4 -0
  540. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/views/index.html.erb +28 -0
  541. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/views/layouts/index.html.erb +85 -0
  542. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/views/partials/readme.txt +1 -0
  543. data/lib/generators/camaleon_cms/install_template/apps/themes/camaleon_first/views/template_sample_page.html.erb +6 -0
  544. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/css/main.css +13 -0
  545. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/css/style.css.scss +3395 -0
  546. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/css/styles.css.scss +175 -0
  547. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/genericons/COPYING.txt +9 -0
  548. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/genericons/Genericons-Regular.otf +0 -0
  549. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/genericons/LICENSE.txt +339 -0
  550. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/genericons/README.txt +123 -0
  551. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/genericons/font/genericons-regular-webfont.eot +0 -0
  552. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/genericons/font/genericons-regular-webfont.svg +135 -0
  553. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/genericons/font/genericons-regular-webfont.ttf +0 -0
  554. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/genericons/font/genericons-regular-webfont.woff +0 -0
  555. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/genericons/genericons.css +197 -0
  556. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/images/circle.png +0 -0
  557. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/images/dotted-line-2x.png +0 -0
  558. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/images/dotted-line-light-2x.png +0 -0
  559. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/images/dotted-line-light.png +0 -0
  560. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/images/dotted-line.png +0 -0
  561. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/images/headers/circle-thumbnail.png +0 -0
  562. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/images/headers/circle.png +0 -0
  563. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/images/headers/diamond-thumbnail.png +0 -0
  564. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/images/headers/diamond.png +0 -0
  565. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/images/headers/star-thumbnail.png +0 -0
  566. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/images/headers/star.png +0 -0
  567. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/images/image.png +0 -0
  568. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/images/search-icon-2x.png +0 -0
  569. data/lib/generators/camaleon_cms/install_template/apps/themes/default/assets/images/search-icon.png +0 -0
  570. data/lib/generators/camaleon_cms/install_template/apps/themes/default/config/config.json +19 -0
  571. data/lib/generators/camaleon_cms/install_template/apps/themes/default/default_helper.rb +36 -0
  572. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/admin/settings.html.erb +1 -0
  573. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/category.html.erb +16 -0
  574. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/index.html.erb +35 -0
  575. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/layouts/index.html.erb +83 -0
  576. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/page.html.erb +22 -0
  577. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/partials/_breadcrumb.html.erb +10 -0
  578. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/partials/_categories_list.html.erb +23 -0
  579. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/partials/_comments.html.erb +25 -0
  580. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/partials/_comments_list.html.erb +20 -0
  581. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/partials/_flash_messages.html.erb +26 -0
  582. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/partials/_forms.html.erb +19 -0
  583. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/partials/_post_list_item.html.erb +34 -0
  584. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/partials/_search_form.html.erb +8 -0
  585. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/partials/_sidebar.html.erb +50 -0
  586. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/post.html.erb +22 -0
  587. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/post_tag.html.erb +14 -0
  588. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/post_type.html.erb +33 -0
  589. data/lib/generators/camaleon_cms/install_template/apps/themes/default/views/search.html.erb +17 -0
  590. data/lib/generators/camaleon_cms/install_template/apps/themes/new/assets/css/bootstrap/bootstrap.min.css +6735 -0
  591. data/lib/generators/camaleon_cms/install_template/apps/themes/new/assets/css/main.css +13 -0
  592. data/lib/generators/camaleon_cms/install_template/apps/themes/new/assets/css/styles.css.scss +175 -0
  593. data/lib/generators/camaleon_cms/install_template/apps/themes/new/assets/images/image.png +0 -0
  594. data/lib/generators/camaleon_cms/install_template/apps/themes/new/assets/js/main.js +15 -0
  595. data/lib/generators/camaleon_cms/install_template/apps/themes/new/assets/js/plugins/bootstrap/bootstrap.min.js +6 -0
  596. data/lib/generators/camaleon_cms/install_template/apps/themes/new/assets/js/plugins/jquery/jquery.min.js +4 -0
  597. data/lib/generators/camaleon_cms/install_template/apps/themes/new/assets/js/plugins/modal_elfinder.js +29 -0
  598. data/lib/generators/camaleon_cms/install_template/apps/themes/new/config/config.json +26 -0
  599. data/lib/generators/camaleon_cms/install_template/apps/themes/new/custom_helper.rb +37 -0
  600. data/lib/generators/camaleon_cms/install_template/apps/themes/new/data.json +1 -0
  601. data/lib/generators/camaleon_cms/install_template/apps/themes/new/image.png +0 -0
  602. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/admin/settings.html.erb +1 -0
  603. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/category.html.erb +33 -0
  604. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/index.html.erb +70 -0
  605. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/layouts/_footer.html.erb +18 -0
  606. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/layouts/_header.html.erb +38 -0
  607. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/layouts/index.html.erb +34 -0
  608. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/page.html.erb +24 -0
  609. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/partials/_breadcrumb.html.erb +10 -0
  610. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/partials/_categories_list.html.erb +23 -0
  611. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/partials/_comments.html.erb +32 -0
  612. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/partials/_comments_list.html.erb +21 -0
  613. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/partials/_flash_messages.html.erb +26 -0
  614. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/partials/_forms.html.erb +19 -0
  615. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/partials/_post_list_item.html.erb +13 -0
  616. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/partials/_search_form.html.erb +10 -0
  617. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/partials/_sidebar.html.erb +60 -0
  618. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/post.html.erb +20 -0
  619. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/post_tag.html.erb +22 -0
  620. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/post_type.html.erb +33 -0
  621. data/lib/generators/camaleon_cms/install_template/apps/themes/new/views/search.html.erb +18 -0
  622. data/lib/generators/camaleon_cms/install_template/plugin_routes.rb +311 -0
  623. data/lib/generators/camaleon_cms/install_template/system.json +11 -0
  624. data/lib/generators/cplugin_generator.rb +80 -0
  625. data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/admin_controller.rb +9 -0
  626. data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/assets/css/readme.txt +1 -0
  627. data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/assets/images/readme.txt +1 -0
  628. data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/assets/js/readme.txt +1 -0
  629. data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/config/config.json +18 -0
  630. data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/config/locales/readme.txt +1 -0
  631. data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/config/routes_admin.txt +1 -0
  632. data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/config/routes_front.txt +1 -0
  633. data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/front_controller.rb +9 -0
  634. data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/main_helper.rb +21 -0
  635. data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/models/my_plugin.rb +12 -0
  636. data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/views/admin/index.html.erb +2 -0
  637. data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/views/front/index.html.erb +2 -0
  638. data/lib/generators/cplugin_template/app/apps/plugins/my_plugin/views/layouts/readme.txt +2 -0
  639. data/lib/generators/ctheme_generator.rb +63 -0
  640. data/lib/generators/ctheme_template/app/apps/themes/my_theme/assets/css/main.css +12 -0
  641. data/lib/generators/ctheme_template/app/apps/themes/my_theme/assets/images/image.png +0 -0
  642. data/lib/generators/ctheme_template/app/apps/themes/my_theme/assets/js/main.js +14 -0
  643. data/lib/generators/ctheme_template/app/apps/themes/my_theme/config/config.json +14 -0
  644. data/lib/generators/ctheme_template/app/apps/themes/my_theme/main_helper.rb +25 -0
  645. data/lib/generators/ctheme_template/app/apps/themes/my_theme/views/admin/settings.html.erb +4 -0
  646. data/lib/generators/ctheme_template/app/apps/themes/my_theme/views/index.html.erb +25 -0
  647. data/lib/generators/ctheme_template/app/apps/themes/my_theme/views/layouts/index.html.erb +71 -0
  648. data/lib/generators/ctheme_template/app/apps/themes/my_theme/views/partials/readme.txt +1 -0
  649. data/lib/tasks/camaleon_cms_tasks.rake +4 -0
  650. data/test/camaleon_cms_test.rb +7 -0
  651. data/test/integration/navigation_test.rb +10 -0
  652. data/test/test_helper.rb +19 -0
  653. metadata +699 -0
@@ -0,0 +1,274 @@
1
+ var App_post = {};
2
+ var $form = null;
3
+ function init_post(obj){
4
+ $form = $('#form-post');
5
+
6
+ if(obj.recover_draft == "true"){
7
+ $form.css('opacity',0).before('<h2 style="text-align: center">'+lang.mgs_recover+'</h2>');
8
+ }
9
+
10
+ var _draft_inited = false;
11
+ var class_translate = ".translate-item";
12
+
13
+ var post_id = obj.post_id;
14
+ var post_draft_id = obj.post_draft_id;
15
+ var post_status = obj.post_status;
16
+ var _post_path = obj._post_path;
17
+ var _drafts_path = obj._drafts_path;
18
+ var _posts_path = obj._posts_path;
19
+ var _ajax_path = obj._ajax_path;
20
+ var _post_tags_path = obj._post_tags_path;
21
+
22
+ App_post.save_draft_ajax = function(callback){
23
+ _draft_inited = true;
24
+ var data = $form.serializeObject();
25
+ data._method = post_draft_id ? 'patch': 'post';
26
+ data.post_id = post_id;
27
+ if(data.post.title && $form.data("hash") != get_hash_form()){
28
+ $.ajax({
29
+ type: 'POST',
30
+ url: _drafts_path,
31
+ data: data,
32
+ success: function(res){
33
+ if(res.error){
34
+ $.fn.alert({type: 'error', title: res.error.join(", "), icon: "times"})
35
+ }else{
36
+ if(res._drafts_path) _drafts_path = res._drafts_path
37
+ post_draft_id = res.draft.id
38
+ $("#post_draft_id").val(post_draft_id);
39
+ }
40
+ if(callback) callback(res);
41
+ },
42
+ dataType: 'json',
43
+ async:false
44
+ });
45
+ }
46
+
47
+ };
48
+
49
+ App_post.save_draft = function(){
50
+ App_post.save_draft_ajax(function(){
51
+ $form.data("submitted", 1);
52
+ location.href = _posts_path+'?notice='+lang.post_draft
53
+ });
54
+
55
+ }
56
+
57
+ var t = setInterval(function(){
58
+ App_post.save_draft_ajax();
59
+ }, 1*60*1000);
60
+
61
+ window.save_draft = App_post.save_draft_ajax;
62
+
63
+ if($(".title-post"+class_translate).size() == 0) class_translate = '';
64
+ $(".title-post"+class_translate).each(function(){
65
+ var $this = $(this);
66
+ if(!$this.hasClass('sluged')){
67
+ if(class_translate){
68
+ var lng = $this.attr("name").match(/-(.*)-/i).pop();
69
+ var $input_slug = $('.slug-post'+class_translate+'[name^="translation-'+lng+'"]')
70
+ var post_path = _post_path.replace('____', lng)
71
+ }else{
72
+ var $input_slug = $('.slug-post');
73
+ var post_path = _post_path.replace('/____', '');
74
+ }
75
+
76
+ var $link = $('<div class="sl-slug-edit">' +
77
+ '<strong>'+lang.permalink+':&nbsp;</strong><span class="sl-link"></span> <span>/ &nbsp;&nbsp;</span>' +
78
+ '<a href="#" class="btn btn-default btn-xs btn-edit">'+lang.edit+'</a> &nbsp;&nbsp; ' +
79
+ '<a href="#" class="btn btn-info btn-xs btn-preview" target="_blank">'+lang.preview+'</a> &nbsp;&nbsp; ' +
80
+ '<a href="#" class="btn btn-success btn-xs btn-view" style="display: none" target="_blank">'+lang.view_page+'</a>' +
81
+ '</div>').hide();
82
+ $this.addClass('sluged');
83
+ $this.after($link)
84
+
85
+ function set_slug(slug){
86
+ $link.show().find('.sl-link').html(post_path.replace('__-__', '<span class="sl-url">' + slug + '</span>'))
87
+ $link.find('.btn-preview').attr('href', post_path.replace('__-__', slug ) + '?draft_id='+post_draft_id)
88
+ $input_slug.trigger('change_in');
89
+ set_meta_slug();
90
+ }
91
+ var xhr = null;
92
+ function ajax_set_slug(slug){
93
+ if(xhr) xhr.abort();
94
+ xhr = $.ajax({
95
+ type: "POST",
96
+ url: _ajax_path,
97
+ data: {method: 'exist_slug', slug: slug, post_id: post_id},
98
+ success: function(res){
99
+ if(res.index > 0){
100
+ $input_slug.addClass('slugify-locked').val(res.slug);
101
+ set_slug(res.slug)
102
+ }
103
+
104
+ }
105
+ });
106
+ }
107
+
108
+ function set_meta_slug(){
109
+ $('#meta_slug').val($('.slug-post'+class_translate).map(function(){return this.value;}).get().join(","));
110
+ }
111
+ var slug_tmp = null;
112
+ $input_slug.slugify($this, {
113
+ change: function(slug) {
114
+ slug_tmp = slug;
115
+ set_slug(slug);
116
+ }
117
+ }
118
+ );
119
+
120
+ $this.change(function(){
121
+ if(slug_tmp) ajax_set_slug(slug_tmp);
122
+ if(!_draft_inited) App_post.save_draft_ajax();
123
+ });
124
+ if($input_slug.val()){
125
+ set_slug($input_slug.val());
126
+ if(post_status == "published") $link.find('.btn-view').show().attr('href', post_path.replace('__-__', $input_slug.val() ))
127
+ }
128
+ $link.find('.btn-preview').click(function(){
129
+ var href = $(this).attr('href');
130
+ App_post.save_draft_ajax();
131
+ var ar = href.split("draft_id=");
132
+ ar[1] = post_draft_id;
133
+ $(this).attr('href', ar.join("draft_id="))
134
+ });
135
+ $link.find('.btn-edit').click(function(){ log(lang);
136
+ var $btn = $(this);
137
+ var $btn_edit = $('<a href="#" class="btn btn-default btn-xs btn-edit">'+lang.accept+'</a> &nbsp; <a href="#" class="btn-cancel">'+lang.cancel+'</a>');
138
+ var $label = $link.find('.sl-url');
139
+ var $input = $("<input type='text' />");
140
+ $label.hide().after($input);
141
+ $btn.hide().after($btn_edit);
142
+ $input.val($label.text());
143
+
144
+ function set_delete(){
145
+ $label.show();
146
+ $btn.show();
147
+ $input.remove();
148
+ $btn_edit.remove();
149
+ }
150
+
151
+ $btn_edit.filter('.btn-cancel').click(function(){
152
+ set_delete();
153
+ set_meta_slug()
154
+ return false;
155
+ });
156
+ $btn_edit.filter('.btn-edit').click(function(){
157
+ var value_new_slug = slugFunc($input.val());
158
+ if(value_new_slug){
159
+ $input_slug.addClass('slugify-locked').val(value_new_slug);
160
+ ajax_set_slug(value_new_slug)
161
+ set_slug(value_new_slug)
162
+ set_delete();
163
+ }
164
+ return false;
165
+ });
166
+ return false;
167
+ });
168
+ }
169
+ });
170
+
171
+ tinymce.init($.extend({}, DATA.tiny_mce.advanced, {selector: '.tinymce_textarea:not(.translated-item)', language: CURRENT_LOCALE, height: '480px', onPostRender: onEditorPostRender}));
172
+
173
+ $form.validate({ focusInvalid: true, ignore: ".translated-item", errorPlacement: function (a,b) {
174
+ if(b.parent().hasClass('form-group')){
175
+ b.parent().addClass('has-error').append(a.addClass('help-block'));
176
+ }else if(b.parent().hasClass('tab-pane')){ // tabs
177
+ var parent = b.parent();
178
+ $("a[href='#"+ parent.attr('id') +"']").addClass('has-error').trigger('click');
179
+ parent.addClass('has-error').append(a.addClass('help-block'));
180
+ }else{
181
+ if(b.attr('name') == 'categories[]')
182
+ b.parent().before(a.addClass('help-block')).parent().addClass('has-error');
183
+ else
184
+ b.parent().after(a.addClass('help-block')).parent().addClass('has-error');
185
+ }
186
+ }, success: function(error, element){
187
+ $(element).parent().removeClass('has-error').parent().removeClass('has-error')
188
+ if($(element).parent().hasClass('tab-pane')) $("a[href='#"+ $(element).parent().attr('id') +"']").removeClass('has-error');
189
+ } });
190
+ /*
191
+ * skip translation inputs
192
+ submitHandler: function(form){
193
+ jQuery(form).find(".translate-item").prop("disabled", false).attr("disabled", "disabled");
194
+ form.submit();
195
+ }
196
+ * */
197
+
198
+ $("#post_status").change(function(){
199
+ $('#post-actions .btn[data-type]').hide();
200
+ $('#post-actions .btn[data-type="'+ $(this).val() +'"]').show();
201
+ })
202
+
203
+ // here all later actions
204
+ var form_later_actions = function(){
205
+ /*********** scroller (fix buttons position) ***************/
206
+ var panel_scroll = $("#form-post > .content-frame-right");
207
+ var fixed_position = panel_scroll.children(":first");
208
+ var fixed_offset_top = panel_scroll.offset().top;
209
+ $(window).scroll(function(){ if($(window).width() < 1024){ fixed_position.css({position: "", width: ""}); panel_scroll.css("padding-top", ""); return; } if ($(window).scrollTop() >= fixed_offset_top+10){ fixed_position.css({position: "fixed", width: "279px", top: 0, "z-index": 4}); panel_scroll.css("padding-top", fixed_position.height()+20) } else { fixed_position.css({position: "", width: "auto"}); panel_scroll.css("padding-top", "") }}).resize(function(){
210
+ if($(window).width() >= 1024){ panel_scroll.show(); }
211
+ });
212
+ /*********** end scroller buttons ***************/
213
+
214
+ /********** post tagEditor ******************/
215
+ var post_tags = $.ajax({
216
+ type: 'GET',
217
+ url: _post_tags_path,
218
+ dataType: "json",
219
+ async: false
220
+ }).responseText;
221
+
222
+ $form.find(".tagsinput").tagEditor({
223
+ autocomplete: { delay: 0, position: { collision: 'flip' }, source: $.parseJSON(post_tags) },
224
+ forceLowercase: false,
225
+ placeholder: lang.add_tag + '...'
226
+ });
227
+ /********** end post tagEditor **************/
228
+ ////// thumbnail
229
+ $form.on("click", ".gallery-item-remove", function(){
230
+ $('#feature-image').hide();
231
+ $('#feature-image input').val('');
232
+ return false;
233
+ });
234
+
235
+ // sidebar toggle
236
+ $("#admin_content .content-frame-right-toggle").on("click",function(){ $(".content-frame-right").is(":visible") ? $(".content-frame-right").hide() : $(".content-frame-right").show(); });
237
+
238
+ /*********** control save changes before unload form. ***************/
239
+ $form.submit(function(){ if($(this).valid()) $form.data("submitted", 1); });
240
+ window.onbeforeunload = function (){
241
+ if($form.data("submitted"))
242
+ return;
243
+ if($form.data("hash") != get_hash_form()){
244
+ return "You sure to leave the page without saving changes?";
245
+ }
246
+ if(!$form.data("submitted"))
247
+ return;
248
+ return "You sure to leave the page without saving changes?";
249
+ };
250
+ }
251
+ setTimeout(form_later_actions, 1000);
252
+
253
+ // wait for render editors
254
+ var wait_render;
255
+ function onEditorPostRender(editor){
256
+ if(wait_render) clearTimeout(wait_render);
257
+ wait_render = setTimeout(function(){
258
+ $form.data("hash", get_hash_form());
259
+ }, 1000);
260
+ }
261
+ function get_hash_form(){
262
+ for(editor in tinymce.editors){
263
+ editor = tinymce.editors[editor];
264
+ var i = $("#"+editor.id).val(tinymce.get(editor.id).getContent()).trigger("change");
265
+ }
266
+ return $form.serialize();
267
+ }
268
+
269
+ if(obj.recover_draft == "true"){
270
+ $form.data("validator").cancelSubmit = true;
271
+ $('#post_status').val('published');
272
+ $form.submit();
273
+ }
274
+ }
@@ -0,0 +1,2 @@
1
+ // http://code.accursoft.com/caret - 1.3.3
2
+ !function(e){e.fn.caret=function(e){var t=this[0],n="true"===t.contentEditable;if(0==arguments.length){if(window.getSelection){if(n){t.focus();var o=window.getSelection().getRangeAt(0),r=o.cloneRange();return r.selectNodeContents(t),r.setEnd(o.endContainer,o.endOffset),r.toString().length}return t.selectionStart}if(document.selection){if(t.focus(),n){var o=document.selection.createRange(),r=document.body.createTextRange();return r.moveToElementText(t),r.setEndPoint("EndToEnd",o),r.text.length}var e=0,c=t.createTextRange(),r=document.selection.createRange().duplicate(),a=r.getBookmark();for(c.moveToBookmark(a);0!==c.moveStart("character",-1);)e++;return e}return t.selectionStart?t.selectionStart:0}if(-1==e&&(e=this[n?"text":"val"]().length),window.getSelection)n?(t.focus(),window.getSelection().collapse(t.firstChild,e)):t.setSelectionRange(e,e);else if(document.body.createTextRange)if(n){var c=document.body.createTextRange();c.moveToElementText(t),c.moveStart("character",e),c.collapse(!0),c.select()}else{var c=t.createTextRange();c.move("character",e),c.select()}return n||t.focus(),e}}(jQuery);
@@ -0,0 +1,352 @@
1
+ /*
2
+ jQuery tagEditor v1.0.16
3
+ Copyright (c) 2014 Simon Steinberger / Pixabay
4
+ GitHub: https://github.com/Pixabay/jQuery-tagEditor
5
+ License: http://www.opensource.org/licenses/mit-license.php
6
+ */
7
+
8
+ (function($){
9
+ // auto grow input (stackoverflow.com/questions/931207)
10
+ $.fn.tagEditorInput=function(){var t=" ",e=$(this),n=parseInt(e.css("fontSize")),i=$("<span/>").css({position:"absolute",top:-9999,left:-9999,width:"auto",fontSize:e.css("fontSize"),fontFamily:e.css("fontFamily"),fontWeight:e.css("fontWeight"),letterSpacing:e.css("letterSpacing"),whiteSpace:"nowrap"}),s=function(){if(t!==(t=e.val())){i.html(t.replace(/&/g,"&amp;").replace(/\s/g,"&nbsp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"));var s=i.width()+n;20>s&&(s=20),s!=e.width()&&e.width(s)}};return i.insertAfter(e),e.bind("keyup keydown focus",s)};
11
+
12
+ // plugin with val as parameter for public methods
13
+ $.fn.tagEditor = function(options, val, blur){
14
+
15
+ // build options dictionary with default values
16
+ var blur_result, o = $.extend({}, $.fn.tagEditor.defaults, options), selector = this;
17
+
18
+ // store regex and default delimiter in options for later use
19
+ o.dregex = new RegExp('['+o.delimiter.replace('-', '\-')+']', 'g');
20
+
21
+ // public methods
22
+ if (typeof options == 'string') {
23
+
24
+ // depending on selector, response may contain tag lists of multiple editor instances
25
+ var response = [];
26
+ selector.each(function(){
27
+ // the editor is the next sibling to the hidden, original field
28
+ var el = $(this), o = el.data('options'), ed = el.next('.tag-editor');
29
+ if (options == 'getTags')
30
+ response.push({field: el[0], editor: ed, tags: ed.data('tags')});
31
+ else if (options == 'addTag') {
32
+ if (o.maxTags && ed.data('tags').length >= o.maxTags) return false;
33
+ // insert new tag
34
+ $('<li><div class="tag-editor-spacer">&nbsp;'+o.delimiter[0]+'</div><div class="tag-editor-tag"></div><div class="tag-editor-delete"><i></i></div></li>').appendTo(ed).find('.tag-editor-tag')
35
+ .html('<input type="text" maxlength="'+o.maxLength+'">').addClass('active').find('input').val(val).blur();
36
+ if (!blur) ed.click();
37
+ else $('.placeholder', ed).remove();
38
+ } else if (options == 'removeTag') {
39
+ // trigger delete on matching tag, then click editor to create a new tag
40
+ $('.tag-editor-tag', ed).filter(function(){return $(this).html()==val;}).closest('li').find('.tag-editor-delete').click();
41
+ if (!blur) ed.click();
42
+ } else if (options == 'destroy') {
43
+ el.removeClass('tag-editor-hidden-src').removeData('options').off('focus.tag-editor').next('.tag-editor').remove();
44
+ }
45
+ });
46
+ return options == 'getTags' ? response : this;
47
+ }
48
+
49
+ // delete selected tags on backspace, delete, ctrl+x
50
+ function delete_selected_tags(e){
51
+ if (e.which == 8 || e.which == 46 || e.ctrlKey && e.which == 88) {
52
+ try {
53
+ var sel = getSelection(), el = $(sel.getRangeAt(0).commonAncestorContainer);
54
+ } catch(e){ el = 0; }
55
+ if (el && el.hasClass('tag-editor')) {
56
+ var tags = [], splits = sel.toString().split(el.prev().data('options').dregex);
57
+ for (i=0; i<splits.length; i++){ var tag = $.trim(splits[i]); if (tag) tags.push(tag); }
58
+ $('.tag-editor-tag', el).each(function(){
59
+ if (~$.inArray($(this).html(), tags)) $(this).closest('li').find('.tag-editor-delete').click();
60
+ });
61
+ return false;
62
+ }
63
+ }
64
+ }
65
+ if (window.getSelection) $(document).off('keydown.tag-editor').on('keydown.tag-editor', delete_selected_tags);
66
+
67
+ return selector.each(function(){
68
+ var el = $(this), tag_list = []; // cache current tags
69
+
70
+ // create editor (ed) instance
71
+ var ed = $('<ul '+(o.clickDelete ? 'oncontextmenu="return false;" ' : '')+'class="tag-editor"></ul>').insertAfter(el);
72
+ el.addClass('tag-editor-hidden-src') // hide original field
73
+ .data('options', o) // set data on hidden field
74
+ .on('focus.tag-editor', function(){ ed.click(); }); // simulate tabindex
75
+
76
+ // add dummy item for min-height on empty editor
77
+ ed.append('<li style="width:1px">&nbsp;</li>');
78
+
79
+ // markup for new tag
80
+ var new_tag = '<li><div class="tag-editor-spacer">&nbsp;'+o.delimiter[0]+'</div><div class="tag-editor-tag"></div><div class="tag-editor-delete"><i></i></div></li>';
81
+
82
+ // helper: update global data
83
+ function set_placeholder(){
84
+ if (o.placeholder && !tag_list.length && !$('.deleted, .placeholder, input', ed).length)
85
+ ed.append('<li class="placeholder"><div>'+o.placeholder+'</div></li>');
86
+ }
87
+
88
+ // helper: update global data
89
+ function update_globals(init){
90
+ var old_tags = tag_list.toString();
91
+ tag_list = $('.tag-editor-tag:not(.deleted)', ed).map(function(i, e) {
92
+ var val = $.trim($(this).hasClass('active') ? $(this).find('input').val() : $(e).text());
93
+ if (val) return val;
94
+ }).get();
95
+ ed.data('tags', tag_list);
96
+ el.val(tag_list.join(o.delimiter[0]));
97
+ // change callback except for plugin init
98
+ if (!init) if (old_tags != tag_list.toString()) o.onChange(el, ed, tag_list);
99
+ set_placeholder();
100
+ }
101
+
102
+ ed.click(function(e, closest_tag){
103
+ var d, dist = 99999, loc;
104
+
105
+ // do not create tag when user selects tags by text selection
106
+ if (window.getSelection && getSelection() != '') return;
107
+
108
+ if (o.maxTags && ed.data('tags').length >= o.maxTags) { ed.find('input').blur(); return false; }
109
+
110
+ blur_result = true
111
+ $('input:focus', ed).blur();
112
+ if (!blur_result) return false;
113
+ blur_result = true
114
+
115
+ // always remove placeholder on click
116
+ $('.placeholder', ed).remove();
117
+ if (closest_tag && closest_tag.length)
118
+ loc = 'before';
119
+ else {
120
+ // calculate tag closest to click position
121
+ $('.tag-editor-tag', ed).each(function(){
122
+ var tag = $(this), to = tag.offset(), tag_x = to.left, tag_y = to.top;
123
+ if (e.pageY >= tag_y && e.pageY <= tag_y+tag.height()) {
124
+ if (e.pageX < tag_x) loc = 'before', d = tag_x - e.pageX;
125
+ else loc = 'after', d = e.pageX - tag_x - tag.width();
126
+ if (d < dist) dist = d, closest_tag = tag;
127
+ }
128
+ });
129
+ }
130
+
131
+ if (loc == 'before') {
132
+ $(new_tag).insertBefore(closest_tag.closest('li')).find('.tag-editor-tag').click();
133
+ } else if (loc == 'after')
134
+ $(new_tag).insertAfter(closest_tag.closest('li')).find('.tag-editor-tag').click();
135
+ else // empty editor
136
+ $(new_tag).appendTo(ed).find('.tag-editor-tag').click();
137
+ return false;
138
+ });
139
+
140
+ ed.on('click', '.tag-editor-delete', function(e){
141
+ // delete icon is hidden when input is visible; place cursor near invisible delete icon on click
142
+ if ($(this).prev().hasClass('active')) { $(this).closest('li').find('input').caret(-1); return false; }
143
+
144
+ var li = $(this).closest('li'), tag = li.find('.tag-editor-tag');
145
+ if (o.beforeTagDelete(el, ed, tag_list, tag.html()) === false) return false;
146
+ tag.addClass('deleted').animate({width: 0}, o.animateDelete, function(){ li.remove(); set_placeholder(); });
147
+ update_globals();
148
+ return false;
149
+ });
150
+
151
+ // delete on right mouse click or ctrl+click
152
+ if (o.clickDelete)
153
+ ed.on('mousedown', '.tag-editor-tag', function(e){
154
+ if (e.ctrlKey || e.which > 1) {
155
+ var li = $(this).closest('li'), tag = li.find('.tag-editor-tag');
156
+ if (o.beforeTagDelete(el, ed, tag_list, tag.html()) === false) return false;
157
+ tag.addClass('deleted').animate({width: 0}, o.animateDelete, function(){ li.remove(); set_placeholder(); });
158
+ update_globals();
159
+ return false;
160
+ }
161
+ });
162
+
163
+ ed.on('click', '.tag-editor-tag', function(e){
164
+ // delete on right click or ctrl+click -> exit
165
+ if (o.clickDelete && (e.ctrlKey || e.which > 1)) return false;
166
+
167
+ if (!$(this).hasClass('active')) {
168
+ var tag = $(this).html();
169
+ // guess cursor position in text input
170
+ var left_percent = Math.abs(($(this).offset().left - e.pageX)/$(this).width()), caret_pos = parseInt(tag.length*left_percent),
171
+ input = $(this).html('<input type="text" maxlength="'+o.maxLength+'" value="'+tag+'">').addClass('active').find('input');
172
+ input.data('old_tag', tag).tagEditorInput().focus().caret(caret_pos);
173
+ if (o.autocomplete) {
174
+ var aco = $.extend({}, o.autocomplete);
175
+ // extend user provided autocomplete select method
176
+ var ac_select = 'select' in aco ? o.autocomplete.select : '';
177
+ aco.select = function(e, ui){ if (ac_select) ac_select(e, ui); setTimeout(function(){
178
+ ed.trigger('click', [$('.active', ed).find('input').closest('li').next('li').find('.tag-editor-tag')]);
179
+ }, 20); };
180
+ input.autocomplete(aco);
181
+ }
182
+ }
183
+ return false;
184
+ });
185
+
186
+ // helper: split into multiple tags, e.g. after paste
187
+ function split_cleanup(input){
188
+ var li = input.closest('li'), sub_tags = input.val().replace(/ +/, ' ').split(o.dregex), old_tag = input.data('old_tag');
189
+ var old_tags = tag_list.slice(0), exceeded = false; // copy tag_list
190
+ for (var i=0; i<sub_tags.length; i++) {
191
+ tag = $.trim(sub_tags[i]).slice(0, o.maxLength);
192
+ if (tag) {
193
+ if (o.forceLowercase) tag = tag.toLowerCase();
194
+ tag = o.beforeTagSave(el, ed, old_tags, old_tag, tag) || tag;
195
+ // remove duplicates
196
+ if (o.removeDuplicates && ~$.inArray(tag, old_tags))
197
+ $('.tag-editor-tag', ed).each(function(){ if ($(this).html() == tag) $(this).closest('li').remove(); });
198
+ old_tags.push(tag);
199
+ li.before('<li><div class="tag-editor-spacer">&nbsp;'+o.delimiter[0]+'</div><div class="tag-editor-tag">'+tag+'</div><div class="tag-editor-delete"><i></i></div></li>');
200
+ }
201
+ if (o.maxTags && old_tags.length >= o.maxTags) { exceeded = true; break; }
202
+ }
203
+ input.attr('maxlength', o.maxLength).removeData('old_tag').val('')
204
+ if (exceeded) input.blur(); else input.focus();
205
+ update_globals();
206
+ }
207
+
208
+ ed.on('blur', 'input', function(e){
209
+ e.stopPropagation();
210
+ var input = $(this), old_tag = input.data('old_tag'), tag = $.trim(input.val().replace(/ +/, ' ').replace(o.dregex, o.delimiter[0]));
211
+ if (!tag) {
212
+ if (old_tag && o.beforeTagDelete(el, ed, tag_list, old_tag) === false) {
213
+ input.val(old_tag).focus();
214
+ blur_result = false;
215
+ update_globals();
216
+ return;
217
+ }
218
+ try { input.closest('li').remove(); } catch(e){}
219
+ if (old_tag) update_globals();
220
+ }
221
+ else if (tag.indexOf(o.delimiter[0])>=0) { split_cleanup(input); return; }
222
+ else if (tag != old_tag) {
223
+ if (o.forceLowercase) tag = tag.toLowerCase();
224
+ tag = o.beforeTagSave(el, ed, tag_list, old_tag, tag) || tag;
225
+ // remove duplicates
226
+ if (o.removeDuplicates)
227
+ $('.tag-editor-tag:not(.active)', ed).each(function(){ if ($(this).html() == tag) $(this).closest('li').remove(); });
228
+ }
229
+ input.parent().html(tag).removeClass('active');
230
+ if (tag != old_tag) update_globals();
231
+ set_placeholder();
232
+ });
233
+
234
+ var pasted_content;
235
+ ed.on('paste', 'input', function(e){
236
+ $(this).removeAttr('maxlength');
237
+ pasted_content = $(this);
238
+ setTimeout(function(){ split_cleanup(pasted_content); }, 30);
239
+ });
240
+
241
+ // keypress delimiter
242
+ var inp;
243
+ ed.on('keypress', 'input', function(e){
244
+ if (o.delimiter.indexOf(String.fromCharCode(e.which))>=0) {
245
+ inp = $(this);
246
+ setTimeout(function(){ split_cleanup(inp); }, 20);
247
+ }
248
+ });
249
+
250
+ ed.on('keydown', 'input', function(e){
251
+ var $t = $(this);
252
+
253
+ // left/up key + backspace key on empty field
254
+ if ((e.which == 37 || !o.autocomplete && e.which == 38) && !$t.caret() || e.which == 8 && !$t.val()) {
255
+ var prev_tag = $t.closest('li').prev('li').find('.tag-editor-tag');
256
+ if (prev_tag.length) prev_tag.click().find('input').caret(-1);
257
+ else if ($t.val() && !(o.maxTags && ed.data('tags').length >= o.maxTags)) $(new_tag).insertBefore($t.closest('li')).find('.tag-editor-tag').click();
258
+ return false;
259
+ }
260
+ // right/down key
261
+ else if ((e.which == 39 || !o.autocomplete && e.which == 40) && ($t.caret() == $t.val().length)) {
262
+ var next_tag = $t.closest('li').next('li').find('.tag-editor-tag');
263
+ if (next_tag.length) next_tag.click().find('input').caret(0);
264
+ else if ($t.val()) ed.click();
265
+ return false;
266
+ }
267
+ // tab key
268
+ else if (e.which == 9) {
269
+ // shift+tab
270
+ if (e.shiftKey) {
271
+ var prev_tag = $t.closest('li').prev('li').find('.tag-editor-tag');
272
+ if (prev_tag.length) prev_tag.click().find('input').caret(0);
273
+ else if ($t.val() && !(o.maxTags && ed.data('tags').length >= o.maxTags)) $(new_tag).insertBefore($t.closest('li')).find('.tag-editor-tag').click();
274
+ // allow tabbing to previous element
275
+ else {
276
+ el.attr('disabled', 'disabled');
277
+ setTimeout(function(){ el.removeAttr('disabled'); }, 30);
278
+ return;
279
+ }
280
+ return false;
281
+ // tab
282
+ } else {
283
+ var next_tag = $t.closest('li').next('li').find('.tag-editor-tag');
284
+ if (next_tag.length) next_tag.click().find('input').caret(0);
285
+ else if ($t.val()) ed.click();
286
+ else return; // allow tabbing to next element
287
+ return false;
288
+ }
289
+ }
290
+ // del key
291
+ else if (e.which == 46 && (!$.trim($t.val()) || ($t.caret() == $t.val().length))) {
292
+ var next_tag = $t.closest('li').next('li').find('.tag-editor-tag');
293
+ if (next_tag.length) next_tag.click().find('input').caret(0);
294
+ else if ($t.val()) ed.click();
295
+ return false;
296
+ }
297
+ // enter key
298
+ else if (e.which == 13) {
299
+ ed.trigger('click', [$t.closest('li').next('li').find('.tag-editor-tag')]);
300
+ return false;
301
+ }
302
+ // pos1
303
+ else if (e.which == 36 && !$t.caret()) ed.find('.tag-editor-tag').first().click();
304
+ // end
305
+ else if (e.which == 35 && $t.caret() == $t.val().length) ed.find('.tag-editor-tag').last().click();
306
+ // esc
307
+ else if (e.which == 27) {
308
+ $t.val($t.data('old_tag') ? $t.data('old_tag') : '').blur();
309
+ return false;
310
+ }
311
+ });
312
+
313
+ // create initial tags
314
+ var tags = o.initialTags.length ? o.initialTags : el.val().split(o.dregex);
315
+ for (var i=0; i<tags.length; i++) {
316
+ if (o.maxTags && i >= o.maxTags) break;
317
+ var tag = $.trim(tags[i].replace(/ +/, ' '));
318
+ if (tag) {
319
+ if (o.forceLowercase) tag = tag.toLowerCase();
320
+ tag_list.push(tag);
321
+ ed.append('<li><div class="tag-editor-spacer">&nbsp;'+o.delimiter[0]+'</div><div class="tag-editor-tag">'+tag+'</div><div class="tag-editor-delete"><i></i></div></li>');
322
+ }
323
+ }
324
+ update_globals(true); // true -> no onChange callback
325
+
326
+ // init sortable
327
+ if (o.sortable && $.fn.sortable) ed.sortable({
328
+ distance: 5, cancel: '.tag-editor-spacer, input', helper: 'clone',
329
+ update: function(){ update_globals(); }
330
+ });
331
+ });
332
+ };
333
+
334
+ $.fn.tagEditor.defaults = {
335
+ initialTags: [],
336
+ maxTags: 0,
337
+ maxLength: 50,
338
+ delimiter: ',;',
339
+ placeholder: '',
340
+ forceLowercase: true,
341
+ removeDuplicates: true,
342
+ clickDelete: false,
343
+ animateDelete: 175,
344
+ sortable: true, // jQuery UI sortable
345
+ autocomplete: null, // options dict for jQuery UI autocomplete
346
+
347
+ // callbacks
348
+ onChange: function(){},
349
+ beforeTagSave: function(){},
350
+ beforeTagDelete: function(){}
351
+ };
352
+ }(jQuery));