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,65 @@
1
+ function slugFunc(v, sep){
2
+ if (!v) return '';
3
+ var map = {"2d":"-","20":"-","24":"s","26":"and","30":"0","31":"1","32":"2","33":"3","34":"4","35":"5","36":"6","37":"7","38":"8","39":"9","41":"A","42":"B","43":"C","44":"D","45":"E","46":"F","47":"G","48":"H","49":"I","50":"P","51":"Q","52":"R","53":"S","54":"T","55":"U","56":"V","57":"W","58":"X","59":"Y","61":"a","62":"b","63":"c","64":"d","65":"e","66":"f","67":"g","68":"h","69":"i","70":"p","71":"q","72":"r","73":"s","74":"t","75":"u","76":"v","77":"w","78":"x","79":"y","100":"A","101":"a","102":"A","103":"a","104":"A","105":"a","106":"C","107":"c","108":"C","109":"c","110":"D","111":"d","112":"E","113":"e","114":"E","115":"e","116":"E","117":"e","118":"E","119":"e","120":"G","121":"g","122":"G","123":"g","124":"H","125":"h","126":"H","127":"h","128":"I","129":"i","130":"I","131":"i","132":"IJ","133":"ij","134":"J","135":"j","136":"K","137":"k","138":"k","139":"L","140":"l","141":"L","142":"l","143":"N","144":"n","145":"N","146":"n","147":"N","148":"n","149":"n","150":"O","151":"o","152":"OE","153":"oe","154":"R","155":"r","156":"R","157":"r","158":"R","159":"r","160":"S","161":"s","162":"T","163":"t","164":"T","165":"t","166":"T","167":"t","168":"U","169":"u","170":"U","171":"u","172":"U","173":"u","174":"W","175":"w","176":"Y","177":"y","178":"Y","179":"Z","180":"b","181":"B","182":"b","183":"b","184":"b","185":"b","186":"C","187":"C","188":"c","189":"D","190":"E","191":"F","192":"f","193":"G","194":"Y","195":"h","196":"i","197":"I","198":"K","199":"k","200":"A","201":"a","202":"A","203":"a","204":"E","205":"e","206":"E","207":"e","208":"I","209":"i","210":"R","211":"r","212":"R","213":"r","214":"U","215":"u","216":"U","217":"u","218":"S","219":"s","220":"n","221":"d","222":"8","223":"8","224":"Z","225":"z","226":"A","227":"a","228":"E","229":"e","230":"O","231":"o","232":"Y","233":"y","234":"l","235":"n","236":"t","237":"j","238":"db","239":"qp","240":"<","241":"?","242":"?","243":"B","244":"U","245":"A","246":"E","247":"e","248":"J","249":"j","250":"a","251":"a","252":"a","253":"b","254":"c","255":"e","256":"d","257":"d","258":"e","259":"e","260":"g","261":"g","262":"g","263":"Y","264":"x","265":"u","266":"h","267":"h","268":"i","269":"i","270":"w","271":"m","272":"n","273":"n","274":"N","275":"o","276":"oe","277":"m","278":"o","279":"r","280":"R","281":"R","282":"S","283":"f","284":"f","285":"f","286":"f","287":"t","288":"t","289":"u","290":"Z","291":"Z","292":"3","293":"3","294":"?","295":"?","296":"5","297":"C","298":"O","299":"B","363":"a","364":"e","365":"i","366":"o","367":"u","368":"c","369":"d","386":"A","388":"E","389":"H","390":"i","391":"A","392":"B","393":"r","394":"A","395":"E","396":"Z","397":"H","398":"O","399":"I","400":"E","401":"E","402":"T","403":"r","404":"E","405":"S","406":"I","407":"I","408":"J","409":"jb","410":"A","411":"B","412":"B","413":"r","414":"D","415":"E","416":"X","417":"3","418":"N","419":"N","420":"P","421":"C","422":"T","423":"y","424":"O","425":"X","426":"U","427":"h","428":"W","429":"W","430":"a","431":"6","432":"B","433":"r","434":"d","435":"e","436":"x","437":"3","438":"N","439":"N","440":"P","441":"C","442":"T","443":"Y","444":"qp","445":"x","446":"U","447":"h","448":"W","449":"W","450":"e","451":"e","452":"h","453":"r","454":"e","455":"s","456":"i","457":"i","458":"j","459":"jb","460":"W","461":"w","462":"Tb","463":"tb","464":"IC","465":"ic","466":"A","467":"a","468":"IA","469":"ia","470":"Y","471":"y","472":"O","473":"o","474":"V","475":"v","476":"V","477":"v","478":"Oy","479":"oy","480":"C","481":"c","490":"R","491":"r","492":"F","493":"f","494":"H","495":"h","496":"X","497":"x","498":"3","499":"3","500":"d","501":"d","502":"d","503":"d","504":"R","505":"R","506":"R","507":"R","508":"JT","509":"JT","510":"E","511":"e","512":"JT","513":"jt","514":"JX","515":"JX","531":"U","532":"D","533":"Q","534":"N","535":"T","536":"2","537":"F","538":"r","539":"p","540":"z","541":"2","542":"n","543":"x","544":"U","545":"B","546":"j","547":"t","548":"n","549":"C","550":"R","551":"8","552":"R","553":"O","554":"P","555":"O","556":"S","561":"w","562":"f","563":"q","564":"n","565":"t","566":"q","567":"t","568":"n","569":"p","570":"h","571":"a","572":"n","573":"a","574":"u","575":"j","576":"u","577":"2","578":"n","579":"2","580":"n","581":"g","582":"l","583":"uh","584":"p","585":"o","586":"S","587":"u","4a":"J","4b":"K","4c":"L","4d":"M","4e":"N","4f":"O","5a":"Z","6a":"j","6b":"k","6c":"l","6d":"m","6e":"n","6f":"o","7a":"z","a2":"c","a3":"f","a5":"Y","a7":"s","a9":"c","aa":"a","ae":"r","b2":"2","b3":"3","b5":"u","b6":"p","b9":"1","c0":"A","c1":"A","c2":"A","c3":"A","c4":"A","c5":"A","c6":"AE","c7":"C","c8":"E","c9":"E","ca":"E","cb":"E","cc":"I","cd":"I","ce":"I","cf":"I","d0":"D","d1":"N","d2":"O","d3":"O","d4":"O","d5":"O","d6":"O","d7":"X","d8":"O","d9":"U","da":"U","db":"U","dc":"U","dd":"Y","de":"p","df":"b","e0":"a","e1":"a","e2":"a","e3":"a","e4":"a","e5":"a","e6":"ae","e7":"c","e8":"e","e9":"e","ea":"e","eb":"e","ec":"i","ed":"i","ee":"i","ef":"i","f0":"o","f1":"n","f2":"o","f3":"o","f4":"o","f5":"o","f6":"o","f8":"o","f9":"u","fa":"u","fb":"u","fc":"u","fd":"y","ff":"y","10a":"C","10b":"c","10c":"C","10d":"c","10e":"D","10f":"d","11a":"E","11b":"e","11c":"G","11d":"g","11e":"G","11f":"g","12a":"I","12b":"i","12c":"I","12d":"i","12e":"I","12f":"i","13a":"l","13b":"L","13c":"l","13d":"L","13e":"l","13f":"L","14a":"n","14b":"n","14c":"O","14d":"o","14e":"O","14f":"o","15a":"S","15b":"s","15c":"S","15d":"s","15e":"S","15f":"s","16a":"U","16b":"u","16c":"U","16d":"u","16e":"U","16f":"u","17a":"z","17b":"Z","17c":"z","17d":"Z","17e":"z","17f":"f","18a":"D","18b":"d","18c":"d","18d":"q","18e":"E","18f":"e","19a":"l","19b":"h","19c":"w","19d":"N","19e":"n","19f":"O","1a0":"O","1a1":"o","1a2":"P","1a3":"P","1a4":"P","1a5":"p","1a6":"R","1a7":"S","1a8":"s","1a9":"E","1aa":"l","1ab":"t","1ac":"T","1ad":"t","1ae":"T","1af":"U","1b0":"u","1b1":"U","1b2":"U","1b3":"Y","1b4":"y","1b5":"Z","1b6":"z","1b7":"3","1b8":"3","1b9":"3","1ba":"3","1bb":"2","1bc":"5","1bd":"5","1be":"5","1bf":"p","1c4":"DZ","1c5":"Dz","1c6":"dz","1c7":"Lj","1c8":"Lj","1c9":"lj","1ca":"NJ","1cb":"Nj","1cc":"nj","1cd":"A","1ce":"a","1cf":"I","1d0":"i","1d1":"O","1d2":"o","1d3":"U","1d4":"u","1d5":"U","1d6":"u","1d7":"U","1d8":"u","1d9":"U","1da":"u","1db":"U","1dc":"u","1dd":"e","1de":"A","1df":"a","1e0":"A","1e1":"a","1e2":"AE","1e3":"ae","1e4":"G","1e5":"g","1e6":"G","1e7":"g","1e8":"K","1e9":"k","1ea":"Q","1eb":"q","1ec":"Q","1ed":"q","1ee":"3","1ef":"3","1f0":"J","1f1":"dz","1f2":"dZ","1f3":"DZ","1f4":"g","1f5":"G","1f6":"h","1f7":"p","1f8":"N","1f9":"n","1fa":"A","1fb":"a","1fc":"AE","1fd":"ae","1fe":"O","1ff":"o","20a":"I","20b":"i","20c":"O","20d":"o","20e":"O","20f":"o","21a":"T","21b":"t","21c":"3","21d":"3","21e":"H","21f":"h","22a":"O","22b":"o","22c":"O","22d":"o","22e":"O","22f":"o","23a":"A","23b":"C","23c":"c","23d":"L","23e":"T","23f":"s","24a":"Q","24b":"q","24c":"R","24d":"r","24e":"Y","24f":"y","25a":"e","25b":"3","25c":"3","25d":"3","25e":"3","25f":"j","26a":"i","26b":"I","26c":"I","26d":"I","26e":"h","26f":"w","27a":"R","27b":"r","27c":"R","27d":"R","27e":"r","27f":"r","28a":"u","28b":"v","28c":"A","28d":"M","28e":"Y","28f":"Y","29a":"B","29b":"G","29c":"H","29d":"j","29e":"K","29f":"L","2a0":"q","2a1":"?","2a2":"c","2a3":"dz","2a4":"d3","2a5":"dz","2a6":"ts","2a7":"tf","2a8":"tc","2a9":"fn","2aa":"ls","2ab":"lz","2ac":"ww","2ae":"u","2af":"u","2b0":"h","2b1":"h","2b2":"j","2b3":"r","2b4":"r","2b5":"r","2b6":"R","2b7":"W","2b8":"Y","2df":"x","2e0":"Y","2e1":"1","2e2":"s","2e3":"x","2e4":"c","36a":"h","36b":"m","36c":"r","36d":"t","36e":"v","36f":"x","37b":"c","37c":"c","37d":"c","38a":"I","38c":"O","38e":"Y","38f":"O","39a":"K","39b":"A","39c":"M","39d":"N","39e":"E","39f":"O","3a0":"TT","3a1":"P","3a3":"E","3a4":"T","3a5":"Y","3a6":"O","3a7":"X","3a8":"Y","3a9":"O","3aa":"I","3ab":"Y","3ac":"a","3ad":"e","3ae":"n","3af":"i","3b0":"v","3b1":"a","3b2":"b","3b3":"y","3b4":"d","3b5":"e","3b6":"c","3b7":"n","3b8":"0","3b9":"1","3ba":"k","3bb":"j","3bc":"u","3bd":"v","3be":"c","3bf":"o","3c0":"tt","3c1":"p","3c2":"s","3c3":"o","3c4":"t","3c5":"u","3c6":"q","3c7":"X","3c8":"Y","3c9":"w","3ca":"i","3cb":"u","3cc":"o","3cd":"u","3ce":"w","3d0":"b","3d1":"e","3d2":"Y","3d3":"Y","3d4":"Y","3d5":"O","3d6":"w","3d7":"x","3d8":"Q","3d9":"q","3da":"C","3db":"c","3dc":"F","3dd":"f","3de":"N","3df":"N","3e2":"W","3e3":"w","3e4":"q","3e5":"q","3e6":"h","3e7":"e","3e8":"S","3e9":"s","3ea":"X","3eb":"x","3ec":"6","3ed":"6","3ee":"t","3ef":"t","3f0":"x","3f1":"e","3f2":"c","3f3":"j","3f4":"O","3f5":"E","3f6":"E","3f7":"p","3f8":"p","3f9":"C","3fa":"M","3fb":"M","3fc":"p","3fd":"C","3fe":"C","3ff":"C","40a":"Hb","40b":"Th","40c":"K","40d":"N","40e":"Y","40f":"U","41a":"K","41b":"jI","41c":"M","41d":"H","41e":"O","41f":"TT","42a":"b","42b":"bI","42c":"b","42d":"E","42e":"IO","42f":"R","43a":"K","43b":"JI","43c":"M","43d":"H","43e":"O","43f":"N","44a":"b","44b":"bI","44c":"b","44d":"e","44e":"io","44f":"r","45a":"Hb","45b":"h","45c":"k","45d":"n","45e":"y","45f":"u","46a":"mY","46b":"my","46c":"Im","46d":"Im","46e":"3","46f":"3","47a":"O","47b":"o","47c":"W","47d":"w","47e":"W","47f":"W","48a":"H","48b":"H","48c":"B","48d":"b","48e":"P","48f":"p","49a":"K","49b":"k","49c":"K","49d":"k","49e":"K","49f":"k","4a0":"K","4a1":"k","4a2":"H","4a3":"h","4a4":"H","4a5":"h","4a6":"Ih","4a7":"ih","4a8":"O","4a9":"o","4aa":"C","4ab":"c","4ac":"T","4ad":"t","4ae":"Y","4af":"y","4b0":"Y","4b1":"y","4b2":"X","4b3":"x","4b4":"TI","4b5":"ti","4b6":"H","4b7":"h","4b8":"H","4b9":"h","4ba":"H","4bb":"h","4bc":"E","4bd":"e","4be":"E","4bf":"e","4c0":"I","4c1":"X","4c2":"x","4c3":"K","4c4":"k","4c5":"jt","4c6":"jt","4c7":"H","4c8":"h","4c9":"H","4ca":"h","4cb":"H","4cc":"h","4cd":"M","4ce":"m","4cf":"l","4d0":"A","4d1":"a","4d2":"A","4d3":"a","4d4":"AE","4d5":"ae","4d6":"E","4d7":"e","4d8":"e","4d9":"e","4da":"E","4db":"e","4dc":"X","4dd":"X","4de":"3","4df":"3","4e0":"3","4e1":"3","4e2":"N","4e3":"n","4e4":"N","4e5":"n","4e6":"O","4e7":"o","4e8":"O","4e9":"o","4ea":"O","4eb":"o","4ec":"E","4ed":"e","4ee":"Y","4ef":"y","4f0":"Y","4f1":"y","4f2":"Y","4f3":"y","4f4":"H","4f5":"h","4f6":"R","4f7":"r","4f8":"bI","4f9":"bi","4fa":"F","4fb":"f","4fc":"X","4fd":"x","4fe":"X","4ff":"x","50a":"H","50b":"h","50c":"G","50d":"g","50e":"T","50f":"t","51a":"Q","51b":"q","51c":"W","51d":"w","53a":"d","53b":"r","53c":"L","53d":"Iu","53e":"O","53f":"y","54a":"m","54b":"o","54c":"N","54d":"U","54e":"Y","54f":"S","56a":"d","56b":"h","56c":"l","56d":"lu","56e":"d","56f":"y","57a":"w","57b":"2","57c":"n","57d":"u","57e":"y","57f":"un","5f":"_"};
4
+ var str = "";
5
+ for(var i = 0; i<v.length; i++){
6
+ str += map[ v.charCodeAt(i).toString(16) ] || "";
7
+ }
8
+ if(!sep) sep = '-'
9
+ return str.toLowerCase().replace(/_-+/g, sep).replace(/^-|-$/g, '');
10
+ }
11
+
12
+ (function ($) {
13
+
14
+ $.fn.slugify = function (source, options) {
15
+ var $target = this;
16
+ var $source = $(source);
17
+ var targetIsInput = $target.is('input') || $target.is('textarea');
18
+
19
+ var settings = $.extend({
20
+ slugFunc: (function (val, originalFunc) { return originalFunc(val); }),
21
+ change: function(){}
22
+ }, options);
23
+
24
+
25
+ var convertToSlug = function(val) {
26
+ return settings.slugFunc(val, (slugFunc)
27
+ );
28
+ };
29
+
30
+ var setLock = function () {
31
+ if($target.val() !== null && $target.val() !== '') {
32
+ $target.addClass('slugify-locked');
33
+ } else {
34
+ $target.removeClass('slugify-locked');
35
+ }
36
+ };
37
+
38
+ var updateSlug = function () {
39
+ var slug = convertToSlug($(this).val());
40
+ if (targetIsInput) {
41
+ $target.filter(':not(.slugify-locked)').val(slug);
42
+ } else {
43
+ $target.filter(':not(.slugify-locked)').text(slug);
44
+ }
45
+ if(settings.change && $target.filter(':not(.slugify-locked)').size() > 0){
46
+ settings.change(slug);
47
+ }
48
+ };
49
+
50
+
51
+ $source.keyup( updateSlug ).change( updateSlug );
52
+
53
+ $target.change(function () {
54
+ var slug = convertToSlug($(this).val());
55
+ // var slug = $(this).val();
56
+ $target.val(slug).text(slug);
57
+ setLock();
58
+ });
59
+
60
+ setLock();
61
+
62
+ return this;
63
+ };
64
+
65
+ })(jQuery);
@@ -0,0 +1 @@
1
+ (function(a){var b=new Array;var c=new Array;a.fn.doAutosize=function(b){var c=a(this).data("minwidth"),d=a(this).data("maxwidth"),e="",f=a(this),g=a("#"+a(this).data("tester_id"));if(e===(e=f.val())){return}var h=e.replace(/&/g,"&").replace(/\s/g," ").replace(/</g,"<").replace(/>/g,">");g.html(h);var i=g.width(),j=i+b.comfortZone>=c?i+b.comfortZone:c,k=f.width(),l=j<k&&j>=c||j>c&&j<d;if(l){f.width(j)}};a.fn.resetAutosize=function(b){var c=a(this).data("minwidth")||b.minInputWidth||a(this).width(),d=a(this).data("maxwidth")||b.maxInputWidth||a(this).closest(".tagsinput").width()-b.inputPadding,e="",f=a(this),g=a("<tester/>").css({position:"absolute",top:-9999,left:-9999,width:"auto",fontSize:f.css("fontSize"),fontFamily:f.css("fontFamily"),fontWeight:f.css("fontWeight"),letterSpacing:f.css("letterSpacing"),whiteSpace:"nowrap"}),h=a(this).attr("id")+"_autosize_tester";if(!a("#"+h).length>0){g.attr("id",h);g.appendTo("body")}f.data("minwidth",c);f.data("maxwidth",d);f.data("tester_id",h);f.css("width",c)};a.fn.addTag=function(d,e){e=jQuery.extend({focus:false,callback:true},e);this.each(function(){var f=a(this).attr("id");var g=a(this).val().split(b[f]);if(g[0]==""){g=new Array}d=jQuery.trim(d);if(e.unique){var h=a(g).tagExist(d);if(h==true){a("#"+f+"_tag").addClass("not_valid")}}else{var h=false}if(d!=""&&h!=true){a("<span>").addClass("tag").append(a("<span>").text(d).append("  "),a("<a>",{href:"#",title:"Removing tag",text:""}).click(function(){return a("#"+f).removeTag(escape(d))})).insertBefore("#"+f+"_addTag");g.push(d);a("#"+f+"_tag").val("");if(e.focus){a("#"+f+"_tag").focus()}else{a("#"+f+"_tag").blur()}a.fn.tagsInput.updateTagsField(this,g);if(e.callback&&c[f]&&c[f]["onAddTag"]){var i=c[f]["onAddTag"];i.call(this,d)}if(c[f]&&c[f]["onChange"]){var j=g.length;var i=c[f]["onChange"];i.call(this,a(this),g[j-1])}}});return false};a.fn.removeTag=function(d){d=unescape(d);this.each(function(){var e=a(this).attr("id");var f=a(this).val().split(b[e]);a("#"+e+"_tagsinput .tag").remove();str="";for(i=0;i<f.length;i++){if(f[i]!=d){str=str+b[e]+f[i]}}a.fn.tagsInput.importTags(this,str);if(c[e]&&c[e]["onRemoveTag"]){var g=c[e]["onRemoveTag"];g.call(this,d)}});return false};a.fn.tagExist=function(b){return jQuery.inArray(b,a(this))>=0};a.fn.importTags=function(b){id=a(this).attr("id");a("#"+id+"_tagsinput .tag").remove();a.fn.tagsInput.importTags(this,b)};a.fn.tagsInput=function(d){var e=jQuery.extend({interactive:true,defaultText:"add a tag",minChars:0,width:"300px",height:"100px",autocomplete:{selectFirst:false},hide:true,delimiter:",",unique:true,removeWithBackspace:true,placeholderColor:"#666666",autosize:true,comfortZone:20,inputPadding:6*2},d);this.each(function(){if(e.hide){a(this).hide()}var d=a(this).attr("id");if(!d||b[a(this).attr("id")]){d=a(this).attr("id","tags"+(new Date).getTime()).attr("id")}var f=jQuery.extend({pid:d,real_input:"#"+d,holder:"#"+d+"_tagsinput",input_wrapper:"#"+d+"_addTag",fake_input:"#"+d+"_tag"},e);b[d]=f.delimiter;if(e.onAddTag||e.onRemoveTag||e.onChange){c[d]=new Array;c[d]["onAddTag"]=e.onAddTag;c[d]["onRemoveTag"]=e.onRemoveTag;c[d]["onChange"]=e.onChange}var g='<div id="'+d+'_tagsinput" class="tagsinput"><div id="'+d+'_addTag">';if(e.interactive){g=g+'<input id="'+d+'_tag" value="" data-default="'+e.defaultText+'" />'}g=g+'</div><div class="tags_clear"></div></div>';a(g).insertAfter(this);a(f.holder).css("width",e.width);a(f.holder).css("height",e.height);if(a(f.real_input).val()!=""){a.fn.tagsInput.importTags(a(f.real_input),a(f.real_input).val())}if(e.interactive){a(f.fake_input).val(a(f.fake_input).attr("data-default"));a(f.fake_input).css("color",e.placeholderColor);a(f.fake_input).resetAutosize(e);a(f.holder).bind("click",f,function(b){a(b.data.fake_input).focus()});a(f.fake_input).bind("focus",f,function(b){if(a(b.data.fake_input).val()==a(b.data.fake_input).attr("data-default")){a(b.data.fake_input).val("")}a(b.data.fake_input).css("color","#000000")});if(e.autocomplete_url!=undefined){autocomplete_options={source:e.autocomplete_url};for(attrname in e.autocomplete){autocomplete_options[attrname]=e.autocomplete[attrname]}if(jQuery.Autocompleter!==undefined){a(f.fake_input).autocomplete(e.autocomplete_url,e.autocomplete);a(f.fake_input).bind("result",f,function(b,c,f){if(c){a("#"+d).addTag(c[0]+"",{focus:true,unique:e.unique})}})}else if(jQuery.ui.autocomplete!==undefined){a(f.fake_input).autocomplete(autocomplete_options);a(f.fake_input).bind("autocompleteselect",f,function(b,c){a(b.data.real_input).addTag(c.item.value,{focus:true,unique:e.unique});return false})}}else{a(f.fake_input).bind("blur",f,function(b){var c=a(this).attr("data-default");if(a(b.data.fake_input).val()!=""&&a(b.data.fake_input).val()!=c){if(b.data.minChars<=a(b.data.fake_input).val().length&&(!b.data.maxChars||b.data.maxChars>=a(b.data.fake_input).val().length))a(b.data.real_input).addTag(a(b.data.fake_input).val(),{focus:true,unique:e.unique})}else{a(b.data.fake_input).val(a(b.data.fake_input).attr("data-default"));a(b.data.fake_input).css("color",e.placeholderColor)}return false})}a(f.fake_input).bind("keypress",f,function(b){if(b.which==b.data.delimiter.charCodeAt(0)||b.which==13){b.preventDefault();if(b.data.minChars<=a(b.data.fake_input).val().length&&(!b.data.maxChars||b.data.maxChars>=a(b.data.fake_input).val().length))a(b.data.real_input).addTag(a(b.data.fake_input).val(),{focus:true,unique:e.unique});a(b.data.fake_input).resetAutosize(e);return false}else if(b.data.autosize){a(b.data.fake_input).doAutosize(e)}});f.removeWithBackspace&&a(f.fake_input).bind("keydown",function(b){if(b.keyCode==8&&a(this).val()==""){b.preventDefault();var c=a(this).closest(".tagsinput").find(".tag:last").text();var d=a(this).attr("id").replace(/_tag$/,"");c=c.replace(/[\s]+x$/,"");a("#"+d).removeTag(escape(c));a(this).trigger("focus")}});a(f.fake_input).blur();if(f.unique){a(f.fake_input).keydown(function(b){if(b.keyCode==8||String.fromCharCode(b.which).match(/\w+|[áéíóúÁÉÍÓÚñÑ,/]+/)){a(this).removeClass("not_valid")}})}}});return this};a.fn.tagsInput.updateTagsField=function(c,d){var e=a(c).attr("id");a(c).val(d.join(b[e]))};a.fn.tagsInput.importTags=function(d,e){a(d).val("");var f=a(d).attr("id");var g=e.split(b[f]);for(i=0;i<g.length;i++){a(d).addTag(g[i],{focus:false,callback:false})}if(c[f]&&c[f]["onChange"]){var h=c[f]["onChange"];h.call(d,d,g[i])}}})(jQuery);
@@ -0,0 +1,1415 @@
1
+ /*!
2
+ * jQuery Validation Plugin v1.13.0
3
+ *
4
+ * http://jqueryvalidation.org/
5
+ *
6
+ * Copyright (c) 2014 Jörn Zaefferer
7
+ * Released under the MIT license
8
+ */
9
+ (function( factory ) {
10
+ if ( typeof define === "function" && define.amd ) {
11
+ define( ["jquery"], factory );
12
+ } else {
13
+ factory( jQuery );
14
+ }
15
+ }(function( $ ) {
16
+
17
+ $.extend($.fn, {
18
+ // http://jqueryvalidation.org/validate/
19
+ validate: function( options ) {
20
+
21
+ // if nothing is selected, return nothing; can't chain anyway
22
+ if ( !this.length ) {
23
+ if ( options && options.debug && window.console ) {
24
+ console.warn( "Nothing selected, can't validate, returning nothing." );
25
+ }
26
+ return;
27
+ }
28
+
29
+ // check if a validator for this form was already created
30
+ var validator = $.data( this[ 0 ], "validator" );
31
+ if ( validator ) {
32
+ return validator;
33
+ }
34
+
35
+ // Add novalidate tag if HTML5.
36
+ this.attr( "novalidate", "novalidate" );
37
+
38
+ validator = new $.validator( options, this[ 0 ] );
39
+ $.data( this[ 0 ], "validator", validator );
40
+
41
+ if ( validator.settings.onsubmit ) {
42
+
43
+ this.validateDelegate( ":submit", "click", function( event ) {
44
+ if ( validator.settings.submitHandler ) {
45
+ validator.submitButton = event.target;
46
+ }
47
+ // allow suppressing validation by adding a cancel class to the submit button
48
+ if ( $( event.target ).hasClass( "cancel" ) ) {
49
+ validator.cancelSubmit = true;
50
+ }
51
+
52
+ // allow suppressing validation by adding the html5 formnovalidate attribute to the submit button
53
+ if ( $( event.target ).attr( "formnovalidate" ) !== undefined ) {
54
+ validator.cancelSubmit = true;
55
+ }
56
+ });
57
+
58
+ // validate the form on submit
59
+ this.submit( function( event ) {
60
+ if ( validator.settings.debug ) {
61
+ // prevent form submit to be able to see console output
62
+ event.preventDefault();
63
+ }
64
+ function handle() {
65
+ var hidden;
66
+ if ( validator.settings.submitHandler ) {
67
+ if ( validator.submitButton ) {
68
+ // insert a hidden input as a replacement for the missing submit button
69
+ hidden = $( "<input type='hidden'/>" )
70
+ .attr( "name", validator.submitButton.name )
71
+ .val( $( validator.submitButton ).val() )
72
+ .appendTo( validator.currentForm );
73
+ }
74
+ validator.settings.submitHandler.call( validator, validator.currentForm, event );
75
+ if ( validator.submitButton ) {
76
+ // and clean up afterwards; thanks to no-block-scope, hidden can be referenced
77
+ hidden.remove();
78
+ }
79
+ return false;
80
+ }
81
+ return true;
82
+ }
83
+
84
+ // prevent submit for invalid forms or custom submit handlers
85
+ if ( validator.cancelSubmit ) {
86
+ validator.cancelSubmit = false;
87
+ return handle();
88
+ }
89
+ if ( validator.form() ) {
90
+ if ( validator.pendingRequest ) {
91
+ validator.formSubmitted = true;
92
+ return false;
93
+ }
94
+ return handle();
95
+ } else {
96
+ validator.focusInvalid();
97
+ return false;
98
+ }
99
+ });
100
+ }
101
+
102
+ return validator;
103
+ },
104
+ // http://jqueryvalidation.org/valid/
105
+ valid: function() {
106
+ var valid, validator;
107
+
108
+ if ( $( this[ 0 ] ).is( "form" ) ) {
109
+ valid = this.validate().form();
110
+ } else {
111
+ valid = true;
112
+ validator = $( this[ 0 ].form ).validate();
113
+ this.each( function() {
114
+ valid = validator.element( this ) && valid;
115
+ });
116
+ }
117
+ return valid;
118
+ },
119
+ // attributes: space separated list of attributes to retrieve and remove
120
+ removeAttrs: function( attributes ) {
121
+ var result = {},
122
+ $element = this;
123
+ $.each( attributes.split( /\s/ ), function( index, value ) {
124
+ result[ value ] = $element.attr( value );
125
+ $element.removeAttr( value );
126
+ });
127
+ return result;
128
+ },
129
+ // http://jqueryvalidation.org/rules/
130
+ rules: function( command, argument ) {
131
+ var element = this[ 0 ],
132
+ settings, staticRules, existingRules, data, param, filtered;
133
+
134
+ if ( command ) {
135
+ settings = $.data( element.form, "validator" ).settings;
136
+ staticRules = settings.rules;
137
+ existingRules = $.validator.staticRules( element );
138
+ switch ( command ) {
139
+ case "add":
140
+ $.extend( existingRules, $.validator.normalizeRule( argument ) );
141
+ // remove messages from rules, but allow them to be set separately
142
+ delete existingRules.messages;
143
+ staticRules[ element.name ] = existingRules;
144
+ if ( argument.messages ) {
145
+ settings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );
146
+ }
147
+ break;
148
+ case "remove":
149
+ if ( !argument ) {
150
+ delete staticRules[ element.name ];
151
+ return existingRules;
152
+ }
153
+ filtered = {};
154
+ $.each( argument.split( /\s/ ), function( index, method ) {
155
+ filtered[ method ] = existingRules[ method ];
156
+ delete existingRules[ method ];
157
+ if ( method === "required" ) {
158
+ $( element ).removeAttr( "aria-required" );
159
+ }
160
+ });
161
+ return filtered;
162
+ }
163
+ }
164
+
165
+ data = $.validator.normalizeRules(
166
+ $.extend(
167
+ {},
168
+ $.validator.classRules( element ),
169
+ $.validator.attributeRules( element ),
170
+ $.validator.dataRules( element ),
171
+ $.validator.staticRules( element )
172
+ ), element );
173
+
174
+ // make sure required is at front
175
+ if ( data.required ) {
176
+ param = data.required;
177
+ delete data.required;
178
+ data = $.extend( { required: param }, data );
179
+ $( element ).attr( "aria-required", "true" );
180
+ }
181
+
182
+ // make sure remote is at back
183
+ if ( data.remote ) {
184
+ param = data.remote;
185
+ delete data.remote;
186
+ data = $.extend( data, { remote: param });
187
+ }
188
+
189
+ return data;
190
+ }
191
+ });
192
+
193
+ // Custom selectors
194
+ $.extend( $.expr[ ":" ], {
195
+ // http://jqueryvalidation.org/blank-selector/
196
+ blank: function( a ) {
197
+ return !$.trim( "" + $( a ).val() );
198
+ },
199
+ // http://jqueryvalidation.org/filled-selector/
200
+ filled: function( a ) {
201
+ return !!$.trim( "" + $( a ).val() );
202
+ },
203
+ // http://jqueryvalidation.org/unchecked-selector/
204
+ unchecked: function( a ) {
205
+ return !$( a ).prop( "checked" );
206
+ }
207
+ });
208
+
209
+ // constructor for validator
210
+ $.validator = function( options, form ) {
211
+ this.settings = $.extend( true, {}, $.validator.defaults, options );
212
+ this.currentForm = form;
213
+ this.init();
214
+ };
215
+
216
+ // http://jqueryvalidation.org/jQuery.validator.format/
217
+ $.validator.format = function( source, params ) {
218
+ if ( arguments.length === 1 ) {
219
+ return function() {
220
+ var args = $.makeArray( arguments );
221
+ args.unshift( source );
222
+ return $.validator.format.apply( this, args );
223
+ };
224
+ }
225
+ if ( arguments.length > 2 && params.constructor !== Array ) {
226
+ params = $.makeArray( arguments ).slice( 1 );
227
+ }
228
+ if ( params.constructor !== Array ) {
229
+ params = [ params ];
230
+ }
231
+ $.each( params, function( i, n ) {
232
+ source = source.replace( new RegExp( "\\{" + i + "\\}", "g" ), function() {
233
+ return n;
234
+ });
235
+ });
236
+ return source;
237
+ };
238
+
239
+ $.extend( $.validator, {
240
+
241
+ defaults: {
242
+ messages: {},
243
+ groups: {},
244
+ rules: {},
245
+ errorClass: "error",
246
+ validClass: "valid",
247
+ errorElement: "label",
248
+ focusInvalid: true,
249
+ errorContainer: $( [] ),
250
+ errorLabelContainer: $( [] ),
251
+ onsubmit: true,
252
+ ignore: ":hidden",
253
+ ignoreTitle: false,
254
+ onfocusin: function( element ) {
255
+ this.lastActive = element;
256
+
257
+ // hide error label and remove error class on focus if enabled
258
+ if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {
259
+ if ( this.settings.unhighlight ) {
260
+ this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
261
+ }
262
+ this.hideThese( this.errorsFor( element ) );
263
+ }
264
+ },
265
+ onfocusout: function( element ) {
266
+ if ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {
267
+ this.element( element );
268
+ }
269
+ },
270
+ onkeyup: function( element, event ) {
271
+ if ( event.which === 9 && this.elementValue( element ) === "" ) {
272
+ return;
273
+ } else if ( element.name in this.submitted || element === this.lastElement ) {
274
+ this.element( element );
275
+ }
276
+ },
277
+ onclick: function( element ) {
278
+ // click on selects, radiobuttons and checkboxes
279
+ if ( element.name in this.submitted ) {
280
+ this.element( element );
281
+
282
+ // or option elements, check parent select in that case
283
+ } else if ( element.parentNode.name in this.submitted ) {
284
+ this.element( element.parentNode );
285
+ }
286
+ },
287
+ highlight: function( element, errorClass, validClass ) {
288
+ if ( element.type === "radio" ) {
289
+ this.findByName( element.name ).addClass( errorClass ).removeClass( validClass );
290
+ } else {
291
+ $( element ).addClass( errorClass ).removeClass( validClass );
292
+ }
293
+ },
294
+ unhighlight: function( element, errorClass, validClass ) {
295
+ if ( element.type === "radio" ) {
296
+ this.findByName( element.name ).removeClass( errorClass ).addClass( validClass );
297
+ } else {
298
+ $( element ).removeClass( errorClass ).addClass( validClass );
299
+ }
300
+ }
301
+ },
302
+
303
+ // http://jqueryvalidation.org/jQuery.validator.setDefaults/
304
+ setDefaults: function( settings ) {
305
+ $.extend( $.validator.defaults, settings );
306
+ },
307
+
308
+ messages: {
309
+ required: "This field is required.",
310
+ remote: "Please fix this field.",
311
+ email: "Please enter a valid email address.",
312
+ url: "Please enter a valid URL.",
313
+ date: "Please enter a valid date.",
314
+ dateISO: "Please enter a valid date ( ISO ).",
315
+ number: "Please enter a valid number.",
316
+ digits: "Please enter only digits.",
317
+ creditcard: "Please enter a valid credit card number.",
318
+ equalTo: "Please enter the same value again.",
319
+ maxlength: $.validator.format( "Please enter no more than {0} characters." ),
320
+ minlength: $.validator.format( "Please enter at least {0} characters." ),
321
+ rangelength: $.validator.format( "Please enter a value between {0} and {1} characters long." ),
322
+ range: $.validator.format( "Please enter a value between {0} and {1}." ),
323
+ max: $.validator.format( "Please enter a value less than or equal to {0}." ),
324
+ min: $.validator.format( "Please enter a value greater than or equal to {0}." )
325
+ },
326
+
327
+ autoCreateRanges: false,
328
+
329
+ prototype: {
330
+
331
+ init: function() {
332
+ this.labelContainer = $( this.settings.errorLabelContainer );
333
+ this.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );
334
+ this.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );
335
+ this.submitted = {};
336
+ this.valueCache = {};
337
+ this.pendingRequest = 0;
338
+ this.pending = {};
339
+ this.invalid = {};
340
+ this.reset();
341
+
342
+ var groups = ( this.groups = {} ),
343
+ rules;
344
+ $.each( this.settings.groups, function( key, value ) {
345
+ if ( typeof value === "string" ) {
346
+ value = value.split( /\s/ );
347
+ }
348
+ $.each( value, function( index, name ) {
349
+ groups[ name ] = key;
350
+ });
351
+ });
352
+ rules = this.settings.rules;
353
+ $.each( rules, function( key, value ) {
354
+ rules[ key ] = $.validator.normalizeRule( value );
355
+ });
356
+
357
+ function delegate( event ) {
358
+ var validator = $.data( this[ 0 ].form, "validator" ),
359
+ eventType = "on" + event.type.replace( /^validate/, "" ),
360
+ settings = validator.settings;
361
+ if ( settings[ eventType ] && !this.is( settings.ignore ) ) {
362
+ settings[ eventType ].call( validator, this[ 0 ], event );
363
+ }
364
+ }
365
+ $( this.currentForm )
366
+ .validateDelegate( ":text, [type='password'], [type='file'], select, textarea, " +
367
+ "[type='number'], [type='search'] ,[type='tel'], [type='url'], " +
368
+ "[type='email'], [type='datetime'], [type='date'], [type='month'], " +
369
+ "[type='week'], [type='time'], [type='datetime-local'], " +
370
+ "[type='range'], [type='color'], [type='radio'], [type='checkbox']",
371
+ "focusin focusout keyup", delegate)
372
+ // Support: Chrome, oldIE
373
+ // "select" is provided as event.target when clicking a option
374
+ .validateDelegate("select, option, [type='radio'], [type='checkbox']", "click", delegate);
375
+
376
+ if ( this.settings.invalidHandler ) {
377
+ $( this.currentForm ).bind( "invalid-form.validate", this.settings.invalidHandler );
378
+ }
379
+
380
+ // Add aria-required to any Static/Data/Class required fields before first validation
381
+ // Screen readers require this attribute to be present before the initial submission http://www.w3.org/TR/WCAG-TECHS/ARIA2.html
382
+ $( this.currentForm ).find( "[required], [data-rule-required], .required" ).attr( "aria-required", "true" );
383
+ },
384
+
385
+ // http://jqueryvalidation.org/Validator.form/
386
+ form: function() {
387
+ this.checkForm();
388
+ $.extend( this.submitted, this.errorMap );
389
+ this.invalid = $.extend({}, this.errorMap );
390
+ if ( !this.valid() ) {
391
+ $( this.currentForm ).triggerHandler( "invalid-form", [ this ]);
392
+ }
393
+ this.showErrors();
394
+ return this.valid();
395
+ },
396
+
397
+ checkForm: function() {
398
+ this.prepareForm();
399
+ for ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {
400
+ this.check( elements[ i ] );
401
+ }
402
+ return this.valid();
403
+ },
404
+
405
+ // http://jqueryvalidation.org/Validator.element/
406
+ element: function( element ) {
407
+ var cleanElement = this.clean( element ),
408
+ checkElement = this.validationTargetFor( cleanElement ),
409
+ result = true;
410
+
411
+ this.lastElement = checkElement;
412
+
413
+ if ( checkElement === undefined ) {
414
+ delete this.invalid[ cleanElement.name ];
415
+ } else {
416
+ this.prepareElement( checkElement );
417
+ this.currentElements = $( checkElement );
418
+
419
+ result = this.check( checkElement ) !== false;
420
+ if ( result ) {
421
+ delete this.invalid[ checkElement.name ];
422
+ } else {
423
+ this.invalid[ checkElement.name ] = true;
424
+ }
425
+ }
426
+ // Add aria-invalid status for screen readers
427
+ $( element ).attr( "aria-invalid", !result );
428
+
429
+ if ( !this.numberOfInvalids() ) {
430
+ // Hide error containers on last error
431
+ this.toHide = this.toHide.add( this.containers );
432
+ }
433
+ this.showErrors();
434
+ return result;
435
+ },
436
+
437
+ // http://jqueryvalidation.org/Validator.showErrors/
438
+ showErrors: function( errors ) {
439
+ if ( errors ) {
440
+ // add items to error list and map
441
+ $.extend( this.errorMap, errors );
442
+ this.errorList = [];
443
+ for ( var name in errors ) {
444
+ this.errorList.push({
445
+ message: errors[ name ],
446
+ element: this.findByName( name )[ 0 ]
447
+ });
448
+ }
449
+ // remove items from success list
450
+ this.successList = $.grep( this.successList, function( element ) {
451
+ return !( element.name in errors );
452
+ });
453
+ }
454
+ if ( this.settings.showErrors ) {
455
+ this.settings.showErrors.call( this, this.errorMap, this.errorList );
456
+ } else {
457
+ this.defaultShowErrors();
458
+ }
459
+ },
460
+
461
+ // http://jqueryvalidation.org/Validator.resetForm/
462
+ resetForm: function() {
463
+ if ( $.fn.resetForm ) {
464
+ $( this.currentForm ).resetForm();
465
+ }
466
+ this.submitted = {};
467
+ this.lastElement = null;
468
+ this.prepareForm();
469
+ this.hideErrors();
470
+ this.elements()
471
+ .removeClass( this.settings.errorClass )
472
+ .removeData( "previousValue" )
473
+ .removeAttr( "aria-invalid" );
474
+ },
475
+
476
+ numberOfInvalids: function() {
477
+ return this.objectLength( this.invalid );
478
+ },
479
+
480
+ objectLength: function( obj ) {
481
+ /* jshint unused: false */
482
+ var count = 0,
483
+ i;
484
+ for ( i in obj ) {
485
+ count++;
486
+ }
487
+ return count;
488
+ },
489
+
490
+ hideErrors: function() {
491
+ this.hideThese( this.toHide );
492
+ },
493
+
494
+ hideThese: function( errors ) {
495
+ errors.not( this.containers ).text( "" );
496
+ this.addWrapper( errors ).hide();
497
+ },
498
+
499
+ valid: function() {
500
+ return this.size() === 0;
501
+ },
502
+
503
+ size: function() {
504
+ return this.errorList.length;
505
+ },
506
+
507
+ focusInvalid: function() {
508
+ if ( this.settings.focusInvalid ) {
509
+ try {
510
+ $( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [])
511
+ .filter( ":visible" )
512
+ .focus()
513
+ // manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find
514
+ .trigger( "focusin" );
515
+ } catch ( e ) {
516
+ // ignore IE throwing errors when focusing hidden elements
517
+ }
518
+ }
519
+ },
520
+
521
+ findLastActive: function() {
522
+ var lastActive = this.lastActive;
523
+ return lastActive && $.grep( this.errorList, function( n ) {
524
+ return n.element.name === lastActive.name;
525
+ }).length === 1 && lastActive;
526
+ },
527
+
528
+ elements: function() {
529
+ var validator = this,
530
+ rulesCache = {};
531
+
532
+ // select all valid inputs inside the form (no submit or reset buttons)
533
+ return $( this.currentForm )
534
+ .find( "input, select, textarea" )
535
+ .not( ":submit, :reset, :image, [disabled]" )
536
+ .not( this.settings.ignore )
537
+ .filter( function() {
538
+ if ( !this.name && validator.settings.debug && window.console ) {
539
+ console.error( "%o has no name assigned", this );
540
+ }
541
+
542
+ // select only the first element for each name, and only those with rules specified
543
+ if ( this.name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {
544
+ return false;
545
+ }
546
+
547
+ rulesCache[ this.name ] = true;
548
+ return true;
549
+ });
550
+ },
551
+
552
+ clean: function( selector ) {
553
+ return $( selector )[ 0 ];
554
+ },
555
+
556
+ errors: function() {
557
+ var errorClass = this.settings.errorClass.split( " " ).join( "." );
558
+ return $( this.settings.errorElement + "." + errorClass, this.errorContext );
559
+ },
560
+
561
+ reset: function() {
562
+ this.successList = [];
563
+ this.errorList = [];
564
+ this.errorMap = {};
565
+ this.toShow = $( [] );
566
+ this.toHide = $( [] );
567
+ this.currentElements = $( [] );
568
+ },
569
+
570
+ prepareForm: function() {
571
+ this.reset();
572
+ this.toHide = this.errors().add( this.containers );
573
+ },
574
+
575
+ prepareElement: function( element ) {
576
+ this.reset();
577
+ this.toHide = this.errorsFor( element );
578
+ },
579
+
580
+ elementValue: function( element ) {
581
+ var val,
582
+ $element = $( element ),
583
+ type = element.type;
584
+
585
+ if ( type === "radio" || type === "checkbox" ) {
586
+ return $( "input[name='" + element.name + "']:checked" ).val();
587
+ } else if ( type === "number" && typeof element.validity !== "undefined" ) {
588
+ return element.validity.badInput ? false : $element.val();
589
+ }
590
+
591
+ val = $element.val();
592
+ if ( typeof val === "string" ) {
593
+ return val.replace(/\r/g, "" );
594
+ }
595
+ return val;
596
+ },
597
+
598
+ check: function( element ) {
599
+ element = this.validationTargetFor( this.clean( element ) );
600
+
601
+ var rules = $( element ).rules(),
602
+ rulesCount = $.map( rules, function( n, i ) {
603
+ return i;
604
+ }).length,
605
+ dependencyMismatch = false,
606
+ val = this.elementValue( element ),
607
+ result, method, rule;
608
+
609
+ for ( method in rules ) {
610
+ rule = { method: method, parameters: rules[ method ] };
611
+ try {
612
+
613
+ result = $.validator.methods[ method ].call( this, val, element, rule.parameters );
614
+
615
+ // if a method indicates that the field is optional and therefore valid,
616
+ // don't mark it as valid when there are no other rules
617
+ if ( result === "dependency-mismatch" && rulesCount === 1 ) {
618
+ dependencyMismatch = true;
619
+ continue;
620
+ }
621
+ dependencyMismatch = false;
622
+
623
+ if ( result === "pending" ) {
624
+ this.toHide = this.toHide.not( this.errorsFor( element ) );
625
+ return;
626
+ }
627
+
628
+ if ( !result ) {
629
+ this.formatAndAdd( element, rule );
630
+ return false;
631
+ }
632
+ } catch ( e ) {
633
+ if ( this.settings.debug && window.console ) {
634
+ console.log( "Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method.", e );
635
+ }
636
+ throw e;
637
+ }
638
+ }
639
+ if ( dependencyMismatch ) {
640
+ return;
641
+ }
642
+ if ( this.objectLength( rules ) ) {
643
+ this.successList.push( element );
644
+ }
645
+ return true;
646
+ },
647
+
648
+ // return the custom message for the given element and validation method
649
+ // specified in the element's HTML5 data attribute
650
+ // return the generic message if present and no method specific message is present
651
+ customDataMessage: function( element, method ) {
652
+ return $( element ).data( "msg" + method.charAt( 0 ).toUpperCase() +
653
+ method.substring( 1 ).toLowerCase() ) || $( element ).data( "msg" );
654
+ },
655
+
656
+ // return the custom message for the given element name and validation method
657
+ customMessage: function( name, method ) {
658
+ var m = this.settings.messages[ name ];
659
+ return m && ( m.constructor === String ? m : m[ method ]);
660
+ },
661
+
662
+ // return the first defined argument, allowing empty strings
663
+ findDefined: function() {
664
+ for ( var i = 0; i < arguments.length; i++) {
665
+ if ( arguments[ i ] !== undefined ) {
666
+ return arguments[ i ];
667
+ }
668
+ }
669
+ return undefined;
670
+ },
671
+
672
+ defaultMessage: function( element, method ) {
673
+ return this.findDefined(
674
+ this.customMessage( element.name, method ),
675
+ this.customDataMessage( element, method ),
676
+ // title is never undefined, so handle empty string as undefined
677
+ !this.settings.ignoreTitle && element.title || undefined,
678
+ $.validator.messages[ method ],
679
+ "<strong>Warning: No message defined for " + element.name + "</strong>"
680
+ );
681
+ },
682
+
683
+ formatAndAdd: function( element, rule ) {
684
+ var message = this.defaultMessage( element, rule.method ),
685
+ theregex = /\$?\{(\d+)\}/g;
686
+ if ( typeof message === "function" ) {
687
+ message = message.call( this, rule.parameters, element );
688
+ } else if ( theregex.test( message ) ) {
689
+ message = $.validator.format( message.replace( theregex, "{$1}" ), rule.parameters );
690
+ }
691
+ this.errorList.push({
692
+ message: message,
693
+ element: element,
694
+ method: rule.method
695
+ });
696
+
697
+ this.errorMap[ element.name ] = message;
698
+ this.submitted[ element.name ] = message;
699
+ },
700
+
701
+ addWrapper: function( toToggle ) {
702
+ if ( this.settings.wrapper ) {
703
+ toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
704
+ }
705
+ return toToggle;
706
+ },
707
+
708
+ defaultShowErrors: function() {
709
+ var i, elements, error;
710
+ for ( i = 0; this.errorList[ i ]; i++ ) {
711
+ error = this.errorList[ i ];
712
+ if ( this.settings.highlight ) {
713
+ this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
714
+ }
715
+ this.showLabel( error.element, error.message );
716
+ }
717
+ if ( this.errorList.length ) {
718
+ this.toShow = this.toShow.add( this.containers );
719
+ }
720
+ if ( this.settings.success ) {
721
+ for ( i = 0; this.successList[ i ]; i++ ) {
722
+ this.showLabel( this.successList[ i ] );
723
+ }
724
+ }
725
+ if ( this.settings.unhighlight ) {
726
+ for ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {
727
+ this.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );
728
+ }
729
+ }
730
+ this.toHide = this.toHide.not( this.toShow );
731
+ this.hideErrors();
732
+ this.addWrapper( this.toShow ).show();
733
+ },
734
+
735
+ validElements: function() {
736
+ return this.currentElements.not( this.invalidElements() );
737
+ },
738
+
739
+ invalidElements: function() {
740
+ return $( this.errorList ).map(function() {
741
+ return this.element;
742
+ });
743
+ },
744
+
745
+ showLabel: function( element, message ) {
746
+ var place, group, errorID,
747
+ error = this.errorsFor( element ),
748
+ elementID = this.idOrName( element ),
749
+ describedBy = $( element ).attr( "aria-describedby" );
750
+ if ( error.length ) {
751
+ // refresh error/success class
752
+ error.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );
753
+ // replace message on existing label
754
+ error.html( message );
755
+ } else {
756
+ // create error element
757
+ error = $( "<" + this.settings.errorElement + ">" )
758
+ .attr( "id", elementID + "-error" )
759
+ .addClass( this.settings.errorClass )
760
+ .html( message || "" );
761
+
762
+ // Maintain reference to the element to be placed into the DOM
763
+ place = error;
764
+ if ( this.settings.wrapper ) {
765
+ // make sure the element is visible, even in IE
766
+ // actually showing the wrapped element is handled elsewhere
767
+ place = error.hide().show().wrap( "<" + this.settings.wrapper + "/>" ).parent();
768
+ }
769
+ if ( this.labelContainer.length ) {
770
+ this.labelContainer.append( place );
771
+ } else if ( this.settings.errorPlacement ) {
772
+ this.settings.errorPlacement( place, $( element ) );
773
+ } else {
774
+ place.insertAfter( element );
775
+ }
776
+
777
+ // Link error back to the element
778
+ if ( error.is( "label" ) ) {
779
+ // If the error is a label, then associate using 'for'
780
+ error.attr( "for", elementID );
781
+ } else if ( error.parents( "label[for='" + elementID + "']" ).length === 0 ) {
782
+ // If the element is not a child of an associated label, then it's necessary
783
+ // to explicitly apply aria-describedby
784
+
785
+ errorID = error.attr( "id" );
786
+ // Respect existing non-error aria-describedby
787
+ if ( !describedBy ) {
788
+ describedBy = errorID;
789
+ } else if ( !describedBy.match( new RegExp( "\b" + errorID + "\b" ) ) ) {
790
+ // Add to end of list if not already present
791
+ describedBy += " " + errorID;
792
+ }
793
+ $( element ).attr( "aria-describedby", describedBy );
794
+
795
+ // If this element is grouped, then assign to all elements in the same group
796
+ group = this.groups[ element.name ];
797
+ if ( group ) {
798
+ $.each( this.groups, function( name, testgroup ) {
799
+ if ( testgroup === group ) {
800
+ $( "[name='" + name + "']", this.currentForm )
801
+ .attr( "aria-describedby", error.attr( "id" ) );
802
+ }
803
+ });
804
+ }
805
+ }
806
+ }
807
+ if ( !message && this.settings.success ) {
808
+ error.text( "" );
809
+ if ( typeof this.settings.success === "string" ) {
810
+ error.addClass( this.settings.success );
811
+ } else {
812
+ this.settings.success( error, element );
813
+ }
814
+ }
815
+ this.toShow = this.toShow.add( error );
816
+ },
817
+
818
+ errorsFor: function( element ) {
819
+ var name = this.idOrName( element ),
820
+ describer = $( element ).attr( "aria-describedby" ),
821
+ selector = "label[for='" + name + "'], label[for='" + name + "'] *";
822
+ // aria-describedby should directly reference the error element
823
+ if ( describer ) {
824
+ selector = selector + ", #" + describer.replace( /\s+/g, ", #" );
825
+ }
826
+ return this
827
+ .errors()
828
+ .filter( selector );
829
+ },
830
+
831
+ idOrName: function( element ) {
832
+ return this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );
833
+ },
834
+
835
+ validationTargetFor: function( element ) {
836
+ // if radio/checkbox, validate first element in group instead
837
+ if ( this.checkable( element ) ) {
838
+ element = this.findByName( element.name ).not( this.settings.ignore )[ 0 ];
839
+ }
840
+ return element;
841
+ },
842
+
843
+ checkable: function( element ) {
844
+ return ( /radio|checkbox/i ).test( element.type );
845
+ },
846
+
847
+ findByName: function( name ) {
848
+ return $( this.currentForm ).find( "[name='" + name + "']" );
849
+ },
850
+
851
+ getLength: function( value, element ) {
852
+ switch ( element.nodeName.toLowerCase() ) {
853
+ case "select":
854
+ return $( "option:selected", element ).length;
855
+ case "input":
856
+ if ( this.checkable( element ) ) {
857
+ return this.findByName( element.name ).filter( ":checked" ).length;
858
+ }
859
+ }
860
+ return value.length;
861
+ },
862
+
863
+ depend: function( param, element ) {
864
+ return this.dependTypes[typeof param] ? this.dependTypes[typeof param]( param, element ) : true;
865
+ },
866
+
867
+ dependTypes: {
868
+ "boolean": function( param ) {
869
+ return param;
870
+ },
871
+ "string": function( param, element ) {
872
+ return !!$( param, element.form ).length;
873
+ },
874
+ "function": function( param, element ) {
875
+ return param( element );
876
+ }
877
+ },
878
+
879
+ optional: function( element ) {
880
+ var val = this.elementValue( element );
881
+ return !$.validator.methods.required.call( this, val, element ) && "dependency-mismatch";
882
+ },
883
+
884
+ startRequest: function( element ) {
885
+ if ( !this.pending[ element.name ] ) {
886
+ this.pendingRequest++;
887
+ this.pending[ element.name ] = true;
888
+ }
889
+ },
890
+
891
+ stopRequest: function( element, valid ) {
892
+ this.pendingRequest--;
893
+ // sometimes synchronization fails, make sure pendingRequest is never < 0
894
+ if ( this.pendingRequest < 0 ) {
895
+ this.pendingRequest = 0;
896
+ }
897
+ delete this.pending[ element.name ];
898
+ if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {
899
+ $( this.currentForm ).submit();
900
+ this.formSubmitted = false;
901
+ } else if (!valid && this.pendingRequest === 0 && this.formSubmitted ) {
902
+ $( this.currentForm ).triggerHandler( "invalid-form", [ this ]);
903
+ this.formSubmitted = false;
904
+ }
905
+ },
906
+
907
+ previousValue: function( element ) {
908
+ return $.data( element, "previousValue" ) || $.data( element, "previousValue", {
909
+ old: null,
910
+ valid: true,
911
+ message: this.defaultMessage( element, "remote" )
912
+ });
913
+ }
914
+
915
+ },
916
+
917
+ classRuleSettings: {
918
+ required: { required: true },
919
+ email: { email: true },
920
+ url: { url: true },
921
+ date: { date: true },
922
+ dateISO: { dateISO: true },
923
+ number: { number: true },
924
+ digits: { digits: true },
925
+ creditcard: { creditcard: true }
926
+ },
927
+
928
+ addClassRules: function( className, rules ) {
929
+ if ( className.constructor === String ) {
930
+ this.classRuleSettings[ className ] = rules;
931
+ } else {
932
+ $.extend( this.classRuleSettings, className );
933
+ }
934
+ },
935
+
936
+ classRules: function( element ) {
937
+ var rules = {},
938
+ classes = $( element ).attr( "class" );
939
+
940
+ if ( classes ) {
941
+ $.each( classes.split( " " ), function() {
942
+ if ( this in $.validator.classRuleSettings ) {
943
+ $.extend( rules, $.validator.classRuleSettings[ this ]);
944
+ }
945
+ });
946
+ }
947
+ return rules;
948
+ },
949
+
950
+ attributeRules: function( element ) {
951
+ var rules = {},
952
+ $element = $( element ),
953
+ type = element.getAttribute( "type" ),
954
+ method, value;
955
+
956
+ for ( method in $.validator.methods ) {
957
+
958
+ // support for <input required> in both html5 and older browsers
959
+ if ( method === "required" ) {
960
+ value = element.getAttribute( method );
961
+ // Some browsers return an empty string for the required attribute
962
+ // and non-HTML5 browsers might have required="" markup
963
+ if ( value === "" ) {
964
+ value = true;
965
+ }
966
+ // force non-HTML5 browsers to return bool
967
+ value = !!value;
968
+ } else {
969
+ value = $element.attr( method );
970
+ }
971
+
972
+ // convert the value to a number for number inputs, and for text for backwards compability
973
+ // allows type="date" and others to be compared as strings
974
+ if ( /min|max/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {
975
+ value = Number( value );
976
+ }
977
+
978
+ if ( value || value === 0 ) {
979
+ rules[ method ] = value;
980
+ } else if ( type === method && type !== "range" ) {
981
+ // exception: the jquery validate 'range' method
982
+ // does not test for the html5 'range' type
983
+ rules[ method ] = true;
984
+ }
985
+ }
986
+
987
+ // maxlength may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs
988
+ if ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {
989
+ delete rules.maxlength;
990
+ }
991
+
992
+ return rules;
993
+ },
994
+
995
+ dataRules: function( element ) {
996
+ var method, value,
997
+ rules = {}, $element = $( element );
998
+ for ( method in $.validator.methods ) {
999
+ value = $element.data( "rule" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );
1000
+ if ( value !== undefined ) {
1001
+ rules[ method ] = value;
1002
+ }
1003
+ }
1004
+ return rules;
1005
+ },
1006
+
1007
+ staticRules: function( element ) {
1008
+ var rules = {},
1009
+ validator = $.data( element.form, "validator" );
1010
+
1011
+ if ( validator.settings.rules ) {
1012
+ rules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};
1013
+ }
1014
+ return rules;
1015
+ },
1016
+
1017
+ normalizeRules: function( rules, element ) {
1018
+ // handle dependency check
1019
+ $.each( rules, function( prop, val ) {
1020
+ // ignore rule when param is explicitly false, eg. required:false
1021
+ if ( val === false ) {
1022
+ delete rules[ prop ];
1023
+ return;
1024
+ }
1025
+ if ( val.param || val.depends ) {
1026
+ var keepRule = true;
1027
+ switch ( typeof val.depends ) {
1028
+ case "string":
1029
+ keepRule = !!$( val.depends, element.form ).length;
1030
+ break;
1031
+ case "function":
1032
+ keepRule = val.depends.call( element, element );
1033
+ break;
1034
+ }
1035
+ if ( keepRule ) {
1036
+ rules[ prop ] = val.param !== undefined ? val.param : true;
1037
+ } else {
1038
+ delete rules[ prop ];
1039
+ }
1040
+ }
1041
+ });
1042
+
1043
+ // evaluate parameters
1044
+ $.each( rules, function( rule, parameter ) {
1045
+ rules[ rule ] = $.isFunction( parameter ) ? parameter( element ) : parameter;
1046
+ });
1047
+
1048
+ // clean number parameters
1049
+ $.each([ "minlength", "maxlength" ], function() {
1050
+ if ( rules[ this ] ) {
1051
+ rules[ this ] = Number( rules[ this ] );
1052
+ }
1053
+ });
1054
+ $.each([ "rangelength", "range" ], function() {
1055
+ var parts;
1056
+ if ( rules[ this ] ) {
1057
+ if ( $.isArray( rules[ this ] ) ) {
1058
+ rules[ this ] = [ Number( rules[ this ][ 0 ]), Number( rules[ this ][ 1 ] ) ];
1059
+ } else if ( typeof rules[ this ] === "string" ) {
1060
+ parts = rules[ this ].replace(/[\[\]]/g, "" ).split( /[\s,]+/ );
1061
+ rules[ this ] = [ Number( parts[ 0 ]), Number( parts[ 1 ] ) ];
1062
+ }
1063
+ }
1064
+ });
1065
+
1066
+ if ( $.validator.autoCreateRanges ) {
1067
+ // auto-create ranges
1068
+ if ( rules.min && rules.max ) {
1069
+ rules.range = [ rules.min, rules.max ];
1070
+ delete rules.min;
1071
+ delete rules.max;
1072
+ }
1073
+ if ( rules.minlength && rules.maxlength ) {
1074
+ rules.rangelength = [ rules.minlength, rules.maxlength ];
1075
+ delete rules.minlength;
1076
+ delete rules.maxlength;
1077
+ }
1078
+ }
1079
+
1080
+ return rules;
1081
+ },
1082
+
1083
+ // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
1084
+ normalizeRule: function( data ) {
1085
+ if ( typeof data === "string" ) {
1086
+ var transformed = {};
1087
+ $.each( data.split( /\s/ ), function() {
1088
+ transformed[ this ] = true;
1089
+ });
1090
+ data = transformed;
1091
+ }
1092
+ return data;
1093
+ },
1094
+
1095
+ // http://jqueryvalidation.org/jQuery.validator.addMethod/
1096
+ addMethod: function( name, method, message ) {
1097
+ $.validator.methods[ name ] = method;
1098
+ $.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];
1099
+ if ( method.length < 3 ) {
1100
+ $.validator.addClassRules( name, $.validator.normalizeRule( name ) );
1101
+ }
1102
+ },
1103
+
1104
+ methods: {
1105
+
1106
+ // http://jqueryvalidation.org/required-method/
1107
+ required: function( value, element, param ) {
1108
+ // check if dependency is met
1109
+ if ( !this.depend( param, element ) ) {
1110
+ return "dependency-mismatch";
1111
+ }
1112
+ if ( element.nodeName.toLowerCase() === "select" ) {
1113
+ // could be an array for select-multiple or a string, both are fine this way
1114
+ var val = $( element ).val();
1115
+ return val && val.length > 0;
1116
+ }
1117
+ if ( this.checkable( element ) ) {
1118
+ return this.getLength( value, element ) > 0;
1119
+ }
1120
+ return $.trim( value ).length > 0;
1121
+ },
1122
+
1123
+ // http://jqueryvalidation.org/email-method/
1124
+ email: function( value, element ) {
1125
+ // From http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e-mail-state-%28type=email%29
1126
+ // Retrieved 2014-01-14
1127
+ // If you have a problem with this implementation, report a bug against the above spec
1128
+ // Or use custom methods to implement your own email validation
1129
+ return this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );
1130
+ },
1131
+
1132
+ // http://jqueryvalidation.org/url-method/
1133
+ url: function( value, element ) {
1134
+ // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
1135
+ var url = false;
1136
+ url = this.optional( element ) || /^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test( value );
1137
+ //fix localhost:port
1138
+ if(url == false){
1139
+ url = this.optional( element ) || /^(https?|s?ftp):\/\/\localhost+(:[0-9]+)?\/?(\/[.\w]*)*$/i.test( value );
1140
+ }
1141
+ //fix localhost:port
1142
+ return url;
1143
+ },
1144
+
1145
+ // http://jqueryvalidation.org/date-method/
1146
+ date: function( value, element ) {
1147
+ return this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );
1148
+ },
1149
+
1150
+ // http://jqueryvalidation.org/dateISO-method/
1151
+ dateISO: function( value, element ) {
1152
+ return this.optional( element ) || /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );
1153
+ },
1154
+
1155
+ // http://jqueryvalidation.org/number-method/
1156
+ number: function( value, element ) {
1157
+ return this.optional( element ) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test( value );
1158
+ },
1159
+
1160
+ // http://jqueryvalidation.org/digits-method/
1161
+ digits: function( value, element ) {
1162
+ return this.optional( element ) || /^\d+$/.test( value );
1163
+ },
1164
+
1165
+ // http://jqueryvalidation.org/creditcard-method/
1166
+ // based on http://en.wikipedia.org/wiki/Luhn/
1167
+ creditcard: function( value, element ) {
1168
+ if ( this.optional( element ) ) {
1169
+ return "dependency-mismatch";
1170
+ }
1171
+ // accept only spaces, digits and dashes
1172
+ if ( /[^0-9 \-]+/.test( value ) ) {
1173
+ return false;
1174
+ }
1175
+ var nCheck = 0,
1176
+ nDigit = 0,
1177
+ bEven = false,
1178
+ n, cDigit;
1179
+
1180
+ value = value.replace( /\D/g, "" );
1181
+
1182
+ // Basing min and max length on
1183
+ // http://developer.ean.com/general_info/Valid_Credit_Card_Types
1184
+ if ( value.length < 13 || value.length > 19 ) {
1185
+ return false;
1186
+ }
1187
+
1188
+ for ( n = value.length - 1; n >= 0; n--) {
1189
+ cDigit = value.charAt( n );
1190
+ nDigit = parseInt( cDigit, 10 );
1191
+ if ( bEven ) {
1192
+ if ( ( nDigit *= 2 ) > 9 ) {
1193
+ nDigit -= 9;
1194
+ }
1195
+ }
1196
+ nCheck += nDigit;
1197
+ bEven = !bEven;
1198
+ }
1199
+
1200
+ return ( nCheck % 10 ) === 0;
1201
+ },
1202
+
1203
+ // http://jqueryvalidation.org/minlength-method/
1204
+ minlength: function( value, element, param ) {
1205
+ var length = $.isArray( value ) ? value.length : this.getLength( $.trim( value ), element );
1206
+ return this.optional( element ) || length >= param;
1207
+ },
1208
+
1209
+ // http://jqueryvalidation.org/maxlength-method/
1210
+ maxlength: function( value, element, param ) {
1211
+ var length = $.isArray( value ) ? value.length : this.getLength( $.trim( value ), element );
1212
+ return this.optional( element ) || length <= param;
1213
+ },
1214
+
1215
+ // http://jqueryvalidation.org/rangelength-method/
1216
+ rangelength: function( value, element, param ) {
1217
+ var length = $.isArray( value ) ? value.length : this.getLength( $.trim( value ), element );
1218
+ return this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );
1219
+ },
1220
+
1221
+ // http://jqueryvalidation.org/min-method/
1222
+ min: function( value, element, param ) {
1223
+ return this.optional( element ) || value >= param;
1224
+ },
1225
+
1226
+ // http://jqueryvalidation.org/max-method/
1227
+ max: function( value, element, param ) {
1228
+ return this.optional( element ) || value <= param;
1229
+ },
1230
+
1231
+ // http://jqueryvalidation.org/range-method/
1232
+ range: function( value, element, param ) {
1233
+ return this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );
1234
+ },
1235
+
1236
+ // http://jqueryvalidation.org/equalTo-method/
1237
+ equalTo: function( value, element, param ) {
1238
+ // bind to the blur event of the target in order to revalidate whenever the target field is updated
1239
+ // TODO find a way to bind the event just once, avoiding the unbind-rebind overhead
1240
+ var target = $( param );
1241
+ if ( this.settings.onfocusout ) {
1242
+ target.unbind( ".validate-equalTo" ).bind( "blur.validate-equalTo", function() {
1243
+ $( element ).valid();
1244
+ });
1245
+ }
1246
+ return value === target.val();
1247
+ },
1248
+
1249
+ // http://jqueryvalidation.org/remote-method/
1250
+ remote: function( value, element, param ) {
1251
+ if ( this.optional( element ) ) {
1252
+ return "dependency-mismatch";
1253
+ }
1254
+
1255
+ var previous = this.previousValue( element ),
1256
+ validator, data;
1257
+
1258
+ if (!this.settings.messages[ element.name ] ) {
1259
+ this.settings.messages[ element.name ] = {};
1260
+ }
1261
+ previous.originalMessage = this.settings.messages[ element.name ].remote;
1262
+ this.settings.messages[ element.name ].remote = previous.message;
1263
+
1264
+ param = typeof param === "string" && { url: param } || param;
1265
+
1266
+ if ( previous.old === value ) {
1267
+ return previous.valid;
1268
+ }
1269
+
1270
+ previous.old = value;
1271
+ validator = this;
1272
+ this.startRequest( element );
1273
+ data = {};
1274
+ data[ element.name ] = value;
1275
+ $.ajax( $.extend( true, {
1276
+ url: param,
1277
+ mode: "abort",
1278
+ port: "validate" + element.name,
1279
+ dataType: "json",
1280
+ data: data,
1281
+ context: validator.currentForm,
1282
+ success: function( response ) {
1283
+ var valid = response === true || response === "true",
1284
+ errors, message, submitted;
1285
+
1286
+ validator.settings.messages[ element.name ].remote = previous.originalMessage;
1287
+ if ( valid ) {
1288
+ submitted = validator.formSubmitted;
1289
+ validator.prepareElement( element );
1290
+ validator.formSubmitted = submitted;
1291
+ validator.successList.push( element );
1292
+ delete validator.invalid[ element.name ];
1293
+ validator.showErrors();
1294
+ } else {
1295
+ errors = {};
1296
+ message = response || validator.defaultMessage( element, "remote" );
1297
+ errors[ element.name ] = previous.message = $.isFunction( message ) ? message( value ) : message;
1298
+ validator.invalid[ element.name ] = true;
1299
+ validator.showErrors( errors );
1300
+ }
1301
+ previous.valid = valid;
1302
+ validator.stopRequest( element, valid );
1303
+ }
1304
+ }, param ) );
1305
+ return "pending";
1306
+ }
1307
+
1308
+ }
1309
+
1310
+ });
1311
+
1312
+ $.format = function deprecated() {
1313
+ throw "$.format has been deprecated. Please use $.validator.format instead.";
1314
+ };
1315
+
1316
+ // ajax mode: abort
1317
+ // usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
1318
+ // if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
1319
+
1320
+ var pendingRequests = {},
1321
+ ajax;
1322
+ // Use a prefilter if available (1.5+)
1323
+ if ( $.ajaxPrefilter ) {
1324
+ $.ajaxPrefilter(function( settings, _, xhr ) {
1325
+ var port = settings.port;
1326
+ if ( settings.mode === "abort" ) {
1327
+ if ( pendingRequests[port] ) {
1328
+ pendingRequests[port].abort();
1329
+ }
1330
+ pendingRequests[port] = xhr;
1331
+ }
1332
+ });
1333
+ } else {
1334
+ // Proxy ajax
1335
+ ajax = $.ajax;
1336
+ $.ajax = function( settings ) {
1337
+ var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode,
1338
+ port = ( "port" in settings ? settings : $.ajaxSettings ).port;
1339
+ if ( mode === "abort" ) {
1340
+ if ( pendingRequests[port] ) {
1341
+ pendingRequests[port].abort();
1342
+ }
1343
+ pendingRequests[port] = ajax.apply(this, arguments);
1344
+ return pendingRequests[port];
1345
+ }
1346
+ return ajax.apply(this, arguments);
1347
+ };
1348
+ }
1349
+
1350
+ // provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
1351
+ // handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target
1352
+
1353
+ $.extend($.fn, {
1354
+ validateDelegate: function( delegate, type, handler ) {
1355
+ return this.bind(type, function( event ) {
1356
+ var target = $(event.target);
1357
+ if ( target.is(delegate) ) {
1358
+ return handler.apply(target, arguments);
1359
+ }
1360
+ });
1361
+ }
1362
+ });
1363
+
1364
+ $.validator.addMethod("file_format", function(value, element) {
1365
+ function check_url(url) {
1366
+ var regYoutube = new RegExp(/^.*((youtu.be\/)|(v\/)|(\/u\/w\/)|(embed\/)|(watch?))??v?=?([^#&?]*).*/);
1367
+ var regVimeo = new RegExp(/^.*(vimeo.com\/)((channels\/[A-z]+\/)|(groups\/[A-z]+\/videos\/))?([0-9]+)/);
1368
+ var regDailymotion = new RegExp(/^.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/);
1369
+ var regMetacafe = new RegExp(/^.*(metacafe.com)(\/watch\/)(d+)(.*)/i);
1370
+ if(regYoutube.test(url)) {
1371
+ return 'youtube';
1372
+ }else if (regMetacafe.test(url)) {
1373
+ return 'metacafe';
1374
+ }else if(regDailymotion.test(url)){
1375
+ return 'dailymotion';
1376
+ }else if(regVimeo.test(url)) {
1377
+ return 'vimeo';
1378
+ }else{
1379
+ return false;
1380
+ }
1381
+ }
1382
+ var _formats = {
1383
+ jpg: "image",
1384
+ gif: "image",
1385
+ png: "image",
1386
+ bmp: "image",
1387
+ jpeg: "image",
1388
+
1389
+ mp3: "audio",
1390
+ ogg: "audio",
1391
+ mid: "audio",
1392
+ mod: "audio",
1393
+ wav: "audio",
1394
+
1395
+ mp4: "video",
1396
+ wmv: "video",
1397
+ avi: "video",
1398
+ swf: "video",
1399
+ mov: "video",
1400
+ mpeg: "video",
1401
+ mjpg: "video"
1402
+ }
1403
+ var formats = $(element).attr("data-formats");
1404
+ var ext = value.split(".").pop().toLowerCase();
1405
+ if(formats)
1406
+ return ($.inArray("video", formats.split(",")) >= 0 && check_url(value)) ||
1407
+ ($.inArray(_formats[ext], formats.split(",")) >= 0)
1408
+
1409
+ return true;
1410
+ }, "File format not accepted.");
1411
+ jQuery.validator.addClassRules({
1412
+ file_format : { file_format : true }
1413
+ });
1414
+
1415
+ }));