integral 1.1.0 → 1.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (633) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +6 -33
  3. data/Rakefile +1 -1
  4. data/app/assets/images/integral/defaults/no_image_available.jpg +0 -0
  5. data/app/assets/images/logo.png +0 -0
  6. data/app/assets/javascripts/ckeditor/my_config.js.erb +26 -18
  7. data/app/assets/javascripts/ckeditor/plugins/autoembed/lang/lv.js +8 -0
  8. data/app/assets/javascripts/ckeditor/plugins/autoembed/plugin.js +1 -1
  9. data/app/assets/javascripts/ckeditor/plugins/autogrow/plugin.js +14 -14
  10. data/app/assets/javascripts/ckeditor/plugins/autogrow/samples/autogrow.html +8 -8
  11. data/app/assets/javascripts/ckeditor/plugins/codemirror/css/codemirror.min.css +1 -1
  12. data/app/assets/javascripts/ckeditor/plugins/codemirror/icons/autoformat.png +0 -0
  13. data/app/assets/javascripts/ckeditor/plugins/codemirror/icons/searchcode.png +0 -0
  14. data/app/assets/javascripts/ckeditor/plugins/codemirror/icons/uncommentselectedrange.png +0 -0
  15. data/app/assets/javascripts/ckeditor/plugins/codemirror/images/autocomplete.png +0 -0
  16. data/app/assets/javascripts/ckeditor/plugins/codemirror/images/autoformat.png +0 -0
  17. data/app/assets/javascripts/ckeditor/plugins/codemirror/images/commentselectedrange.png +0 -0
  18. data/app/assets/javascripts/ckeditor/plugins/codemirror/images/searchcode.png +0 -0
  19. data/app/assets/javascripts/ckeditor/plugins/codemirror/images/uncommentselectedrange.png +0 -0
  20. data/app/assets/javascripts/ckeditor/plugins/codemirror/js/beautify.min.js +2 -2
  21. data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.addons.min.js +2 -2
  22. data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.addons.search.min.js +1 -1
  23. data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.min.js +1 -6
  24. data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.mode.bbcodemixed.min.js +1 -1
  25. data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.mode.handlebars.min.js +1 -0
  26. data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.mode.htmlmixed.min.js +2 -2
  27. data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.mode.javascript.min.js +1 -1
  28. data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.mode.php.min.js +3 -3
  29. data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.mode.twig.min.js +1 -1
  30. data/app/assets/javascripts/ckeditor/plugins/codemirror/lang/bg.js +7 -7
  31. data/app/assets/javascripts/ckeditor/plugins/codemirror/plugin.js +231 -217
  32. data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/darcula.css +46 -0
  33. data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/gruvbox-dark.css +34 -0
  34. data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/idea.css +42 -0
  35. data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/lesser-dark.css +1 -1
  36. data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/lucario.css +37 -0
  37. data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/monokai.css +5 -0
  38. data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/oceanic-next.css +44 -0
  39. data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/shadowfox.css +52 -0
  40. data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/ssms.css +16 -0
  41. data/app/assets/javascripts/ckeditor/plugins/embedbase/lang/ar.js +15 -0
  42. data/app/assets/javascripts/ckeditor/plugins/embedbase/lang/lv.js +15 -0
  43. data/app/assets/javascripts/ckeditor/plugins/embedbase/plugin.js +1 -1
  44. data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/copywidget.png +0 -0
  45. data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/editwidget.png +0 -0
  46. data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/hidpi/copywidget.png +0 -0
  47. data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/hidpi/editwidget.png +0 -0
  48. data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/hidpi/removewidget.png +0 -0
  49. data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/hidpi/widget.png +0 -0
  50. data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/removewidget.png +0 -0
  51. data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/widget.png +0 -0
  52. data/app/assets/javascripts/ckeditor/plugins/foundation-callout/plugin.js +86 -0
  53. data/app/assets/javascripts/ckeditor/plugins/image2/dev/assets/image1.jpg +0 -0
  54. data/app/assets/javascripts/ckeditor/plugins/image2/dev/assets/image2.jpg +0 -0
  55. data/app/assets/javascripts/ckeditor/plugins/image2/dev/contents.css +35 -0
  56. data/app/assets/javascripts/ckeditor/plugins/image2/dev/image2.html +339 -0
  57. data/app/assets/javascripts/ckeditor/plugins/image2/dialogs/image2.js +553 -0
  58. data/app/assets/javascripts/ckeditor/plugins/image2/icons/hidpi/image.png +0 -0
  59. data/app/assets/javascripts/ckeditor/plugins/image2/icons/image.png +0 -0
  60. data/app/assets/javascripts/ckeditor/plugins/image2/lang/af.js +21 -0
  61. data/app/assets/javascripts/ckeditor/plugins/image2/lang/ar.js +21 -0
  62. data/app/assets/javascripts/ckeditor/plugins/image2/lang/az.js +21 -0
  63. data/app/assets/javascripts/ckeditor/plugins/image2/lang/bg.js +21 -0
  64. data/app/assets/javascripts/ckeditor/plugins/image2/lang/bn.js +21 -0
  65. data/app/assets/javascripts/ckeditor/plugins/image2/lang/bs.js +21 -0
  66. data/app/assets/javascripts/ckeditor/plugins/image2/lang/ca.js +21 -0
  67. data/app/assets/javascripts/ckeditor/plugins/image2/lang/cs.js +21 -0
  68. data/app/assets/javascripts/ckeditor/plugins/image2/lang/cy.js +21 -0
  69. data/app/assets/javascripts/ckeditor/plugins/image2/lang/da.js +21 -0
  70. data/app/assets/javascripts/ckeditor/plugins/image2/lang/de-ch.js +21 -0
  71. data/app/assets/javascripts/ckeditor/plugins/image2/lang/de.js +21 -0
  72. data/app/assets/javascripts/ckeditor/plugins/image2/lang/el.js +21 -0
  73. data/app/assets/javascripts/ckeditor/plugins/image2/lang/en-au.js +21 -0
  74. data/app/assets/javascripts/ckeditor/plugins/image2/lang/en-ca.js +21 -0
  75. data/app/assets/javascripts/ckeditor/plugins/image2/lang/en-gb.js +21 -0
  76. data/app/assets/javascripts/ckeditor/plugins/image2/lang/en.js +21 -0
  77. data/app/assets/javascripts/ckeditor/plugins/image2/lang/eo.js +21 -0
  78. data/app/assets/javascripts/ckeditor/plugins/image2/lang/es-mx.js +21 -0
  79. data/app/assets/javascripts/ckeditor/plugins/image2/lang/es.js +21 -0
  80. data/app/assets/javascripts/ckeditor/plugins/image2/lang/et.js +21 -0
  81. data/app/assets/javascripts/ckeditor/plugins/image2/lang/eu.js +21 -0
  82. data/app/assets/javascripts/ckeditor/plugins/image2/lang/fa.js +21 -0
  83. data/app/assets/javascripts/ckeditor/plugins/image2/lang/fi.js +21 -0
  84. data/app/assets/javascripts/ckeditor/plugins/image2/lang/fo.js +21 -0
  85. data/app/assets/javascripts/ckeditor/plugins/image2/lang/fr-ca.js +21 -0
  86. data/app/assets/javascripts/ckeditor/plugins/image2/lang/fr.js +21 -0
  87. data/app/assets/javascripts/ckeditor/plugins/image2/lang/gl.js +21 -0
  88. data/app/assets/javascripts/ckeditor/plugins/image2/lang/gu.js +21 -0
  89. data/app/assets/javascripts/ckeditor/plugins/image2/lang/he.js +21 -0
  90. data/app/assets/javascripts/ckeditor/plugins/image2/lang/hi.js +21 -0
  91. data/app/assets/javascripts/ckeditor/plugins/image2/lang/hr.js +21 -0
  92. data/app/assets/javascripts/ckeditor/plugins/image2/lang/hu.js +21 -0
  93. data/app/assets/javascripts/ckeditor/plugins/image2/lang/id.js +21 -0
  94. data/app/assets/javascripts/ckeditor/plugins/image2/lang/is.js +21 -0
  95. data/app/assets/javascripts/ckeditor/plugins/image2/lang/it.js +21 -0
  96. data/app/assets/javascripts/ckeditor/plugins/image2/lang/ja.js +21 -0
  97. data/app/assets/javascripts/ckeditor/plugins/image2/lang/ka.js +21 -0
  98. data/app/assets/javascripts/ckeditor/plugins/image2/lang/km.js +21 -0
  99. data/app/assets/javascripts/ckeditor/plugins/image2/lang/ko.js +21 -0
  100. data/app/assets/javascripts/ckeditor/plugins/image2/lang/ku.js +21 -0
  101. data/app/assets/javascripts/ckeditor/plugins/image2/lang/lt.js +21 -0
  102. data/app/assets/javascripts/ckeditor/plugins/image2/lang/lv.js +21 -0
  103. data/app/assets/javascripts/ckeditor/plugins/image2/lang/mk.js +21 -0
  104. data/app/assets/javascripts/ckeditor/plugins/image2/lang/mn.js +21 -0
  105. data/app/assets/javascripts/ckeditor/plugins/image2/lang/ms.js +21 -0
  106. data/app/assets/javascripts/ckeditor/plugins/image2/lang/nb.js +21 -0
  107. data/app/assets/javascripts/ckeditor/plugins/image2/lang/nl.js +21 -0
  108. data/app/assets/javascripts/ckeditor/plugins/image2/lang/no.js +21 -0
  109. data/app/assets/javascripts/ckeditor/plugins/image2/lang/oc.js +21 -0
  110. data/app/assets/javascripts/ckeditor/plugins/image2/lang/pl.js +21 -0
  111. data/app/assets/javascripts/ckeditor/plugins/image2/lang/pt-br.js +21 -0
  112. data/app/assets/javascripts/ckeditor/plugins/image2/lang/pt.js +21 -0
  113. data/app/assets/javascripts/ckeditor/plugins/image2/lang/ro.js +21 -0
  114. data/app/assets/javascripts/ckeditor/plugins/image2/lang/ru.js +21 -0
  115. data/app/assets/javascripts/ckeditor/plugins/image2/lang/si.js +21 -0
  116. data/app/assets/javascripts/ckeditor/plugins/image2/lang/sk.js +21 -0
  117. data/app/assets/javascripts/ckeditor/plugins/image2/lang/sl.js +21 -0
  118. data/app/assets/javascripts/ckeditor/plugins/image2/lang/sq.js +21 -0
  119. data/app/assets/javascripts/ckeditor/plugins/image2/lang/sr-latn.js +21 -0
  120. data/app/assets/javascripts/ckeditor/plugins/image2/lang/sr.js +21 -0
  121. data/app/assets/javascripts/ckeditor/plugins/image2/lang/sv.js +21 -0
  122. data/app/assets/javascripts/ckeditor/plugins/image2/lang/th.js +21 -0
  123. data/app/assets/javascripts/ckeditor/plugins/image2/lang/tr.js +21 -0
  124. data/app/assets/javascripts/ckeditor/plugins/image2/lang/tt.js +21 -0
  125. data/app/assets/javascripts/ckeditor/plugins/image2/lang/ug.js +21 -0
  126. data/app/assets/javascripts/ckeditor/plugins/image2/lang/uk.js +21 -0
  127. data/app/assets/javascripts/ckeditor/plugins/image2/lang/vi.js +21 -0
  128. data/app/assets/javascripts/ckeditor/plugins/image2/lang/zh-cn.js +21 -0
  129. data/app/assets/javascripts/ckeditor/plugins/image2/lang/zh.js +21 -0
  130. data/app/assets/javascripts/ckeditor/plugins/image2/plugin.js +1720 -0
  131. data/app/assets/javascripts/ckeditor/plugins/image2/samples/assets/image1.jpg +0 -0
  132. data/app/assets/javascripts/ckeditor/plugins/image2/samples/assets/image2.jpg +0 -0
  133. data/app/assets/javascripts/ckeditor/plugins/image2/samples/image2.html +68 -0
  134. data/app/assets/javascripts/ckeditor/plugins/lineutils/dev/dnd.html +4 -4
  135. data/app/assets/javascripts/ckeditor/plugins/lineutils/dev/magicfinger.html +4 -4
  136. data/app/assets/javascripts/ckeditor/plugins/lineutils/plugin.js +7 -7
  137. data/app/assets/javascripts/ckeditor/plugins/linkballoon/README.md +5 -0
  138. data/app/assets/javascripts/ckeditor/plugins/linkballoon/assets/demo.png +0 -0
  139. data/app/assets/javascripts/ckeditor/plugins/linkballoon/plugin.js +25 -0
  140. data/app/assets/javascripts/ckeditor/plugins/notification/lang/az.js +7 -0
  141. data/app/assets/javascripts/ckeditor/plugins/notification/lang/bg.js +7 -0
  142. data/app/assets/javascripts/ckeditor/plugins/notification/lang/ca.js +7 -0
  143. data/app/assets/javascripts/ckeditor/plugins/notification/lang/cs.js +2 -2
  144. data/app/assets/javascripts/ckeditor/plugins/notification/lang/da.js +2 -2
  145. data/app/assets/javascripts/ckeditor/plugins/notification/lang/de-ch.js +2 -2
  146. data/app/assets/javascripts/ckeditor/plugins/notification/lang/de.js +2 -2
  147. data/app/assets/javascripts/ckeditor/plugins/notification/lang/en-au.js +7 -0
  148. data/app/assets/javascripts/ckeditor/plugins/notification/lang/en.js +2 -2
  149. data/app/assets/javascripts/ckeditor/plugins/notification/lang/eo.js +2 -2
  150. data/app/assets/javascripts/ckeditor/plugins/notification/lang/es-mx.js +7 -0
  151. data/app/assets/javascripts/ckeditor/plugins/notification/lang/es.js +7 -0
  152. data/app/assets/javascripts/ckeditor/plugins/notification/lang/et.js +7 -0
  153. data/app/assets/javascripts/ckeditor/plugins/notification/lang/eu.js +2 -2
  154. data/app/assets/javascripts/ckeditor/plugins/notification/lang/fa.js +7 -0
  155. data/app/assets/javascripts/ckeditor/plugins/notification/lang/fr.js +3 -3
  156. data/app/assets/javascripts/ckeditor/plugins/notification/lang/gl.js +2 -2
  157. data/app/assets/javascripts/ckeditor/plugins/notification/lang/hr.js +7 -0
  158. data/app/assets/javascripts/ckeditor/plugins/notification/lang/hu.js +7 -0
  159. data/app/assets/javascripts/ckeditor/plugins/notification/lang/id.js +2 -2
  160. data/app/assets/javascripts/ckeditor/plugins/notification/lang/it.js +2 -2
  161. data/app/assets/javascripts/ckeditor/plugins/notification/lang/ja.js +7 -0
  162. data/app/assets/javascripts/ckeditor/plugins/notification/lang/km.js +2 -2
  163. data/app/assets/javascripts/ckeditor/plugins/notification/lang/ko.js +2 -2
  164. data/app/assets/javascripts/ckeditor/plugins/notification/lang/ku.js +2 -2
  165. data/app/assets/javascripts/ckeditor/plugins/notification/lang/lv.js +7 -0
  166. data/app/assets/javascripts/ckeditor/plugins/notification/lang/nb.js +2 -2
  167. data/app/assets/javascripts/ckeditor/plugins/notification/lang/nl.js +2 -2
  168. data/app/assets/javascripts/ckeditor/plugins/notification/lang/oc.js +7 -0
  169. data/app/assets/javascripts/ckeditor/plugins/notification/lang/pl.js +2 -2
  170. data/app/assets/javascripts/ckeditor/plugins/notification/lang/pt-br.js +2 -2
  171. data/app/assets/javascripts/ckeditor/plugins/notification/lang/pt.js +2 -2
  172. data/app/assets/javascripts/ckeditor/plugins/notification/lang/ro.js +7 -0
  173. data/app/assets/javascripts/ckeditor/plugins/notification/lang/ru.js +2 -2
  174. data/app/assets/javascripts/ckeditor/plugins/notification/lang/sk.js +7 -0
  175. data/app/assets/javascripts/ckeditor/plugins/notification/lang/sq.js +7 -0
  176. data/app/assets/javascripts/ckeditor/plugins/notification/lang/sv.js +2 -2
  177. data/app/assets/javascripts/ckeditor/plugins/notification/lang/tr.js +2 -2
  178. data/app/assets/javascripts/ckeditor/plugins/notification/lang/ug.js +2 -2
  179. data/app/assets/javascripts/ckeditor/plugins/notification/lang/uk.js +2 -2
  180. data/app/assets/javascripts/ckeditor/plugins/notification/lang/zh-cn.js +3 -3
  181. data/app/assets/javascripts/ckeditor/plugins/notification/lang/zh.js +2 -2
  182. data/app/assets/javascripts/ckeditor/plugins/notification/plugin.js +794 -784
  183. data/app/assets/javascripts/ckeditor/plugins/openlink/README.md +50 -0
  184. data/app/assets/javascripts/ckeditor/plugins/openlink/icons/hidpi/openLink.png +0 -0
  185. data/app/assets/javascripts/ckeditor/plugins/openlink/icons/openLink.png +0 -0
  186. data/app/assets/javascripts/ckeditor/plugins/openlink/lang/bg.js +7 -0
  187. data/app/assets/javascripts/ckeditor/plugins/openlink/lang/de.js +7 -0
  188. data/app/assets/javascripts/ckeditor/plugins/openlink/lang/en.js +7 -0
  189. data/app/assets/javascripts/ckeditor/plugins/openlink/lang/pl.js +7 -0
  190. data/app/assets/javascripts/ckeditor/plugins/openlink/lang/ru.js +7 -0
  191. data/app/assets/javascripts/ckeditor/plugins/openlink/lang/uk.js +7 -0
  192. data/app/assets/javascripts/ckeditor/plugins/openlink/plugin.js +178 -0
  193. data/app/assets/javascripts/ckeditor/plugins/placeholder/dev/placeholder.html +5 -5
  194. data/app/assets/javascripts/ckeditor/plugins/placeholder/dialogs/placeholder.js +2 -2
  195. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/af.js +2 -2
  196. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ar.js +2 -2
  197. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/az.js +2 -2
  198. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/bg.js +5 -5
  199. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ca.js +2 -2
  200. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/cs.js +2 -2
  201. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/cy.js +2 -2
  202. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/da.js +2 -2
  203. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/de-ch.js +2 -2
  204. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/de.js +2 -2
  205. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/el.js +2 -2
  206. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/en-au.js +12 -0
  207. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/en-gb.js +2 -2
  208. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/en.js +2 -2
  209. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/eo.js +2 -2
  210. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/es-mx.js +2 -2
  211. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/es.js +2 -2
  212. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/et.js +2 -2
  213. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/eu.js +2 -2
  214. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/fa.js +2 -2
  215. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/fi.js +2 -2
  216. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/fr-ca.js +2 -2
  217. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/fr.js +2 -2
  218. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/gl.js +2 -2
  219. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/he.js +2 -2
  220. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/hr.js +2 -2
  221. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/hu.js +2 -2
  222. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/id.js +2 -2
  223. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/it.js +2 -2
  224. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ja.js +2 -2
  225. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/km.js +2 -2
  226. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ko.js +2 -2
  227. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ku.js +2 -2
  228. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/lv.js +5 -5
  229. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/nb.js +2 -2
  230. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/nl.js +2 -2
  231. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/no.js +2 -2
  232. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/oc.js +2 -2
  233. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/pl.js +2 -2
  234. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/pt-br.js +2 -2
  235. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/pt.js +2 -2
  236. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ro.js +12 -0
  237. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ru.js +2 -2
  238. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/si.js +2 -2
  239. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/sk.js +2 -2
  240. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/sl.js +2 -2
  241. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/sq.js +2 -2
  242. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/sv.js +2 -2
  243. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/th.js +2 -2
  244. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/tr.js +2 -2
  245. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/tt.js +2 -2
  246. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ug.js +2 -2
  247. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/uk.js +2 -2
  248. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/vi.js +2 -2
  249. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/zh-cn.js +2 -2
  250. data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/zh.js +2 -2
  251. data/app/assets/javascripts/ckeditor/plugins/placeholder/plugin.js +3 -3
  252. data/app/assets/javascripts/ckeditor/plugins/placeholder/samples/placeholder.html +6 -6
  253. data/app/assets/javascripts/ckeditor/plugins/widget/dev/assets/simplebox/dialogs/simplebox.js +4 -4
  254. data/app/assets/javascripts/ckeditor/plugins/widget/dev/assets/simplebox/plugin.js +3 -3
  255. data/app/assets/javascripts/ckeditor/plugins/widget/dev/console.js +2 -2
  256. data/app/assets/javascripts/ckeditor/plugins/widget/dev/nestedwidgets.html +2 -2
  257. data/app/assets/javascripts/ckeditor/plugins/widget/dev/widgetstyles.html +2 -2
  258. data/app/assets/javascripts/ckeditor/plugins/widget/lang/af.js +2 -2
  259. data/app/assets/javascripts/ckeditor/plugins/widget/lang/ar.js +2 -2
  260. data/app/assets/javascripts/ckeditor/plugins/widget/lang/az.js +2 -2
  261. data/app/assets/javascripts/ckeditor/plugins/widget/lang/bg.js +3 -3
  262. data/app/assets/javascripts/ckeditor/plugins/widget/lang/ca.js +2 -2
  263. data/app/assets/javascripts/ckeditor/plugins/widget/lang/cs.js +2 -2
  264. data/app/assets/javascripts/ckeditor/plugins/widget/lang/cy.js +2 -2
  265. data/app/assets/javascripts/ckeditor/plugins/widget/lang/da.js +2 -2
  266. data/app/assets/javascripts/ckeditor/plugins/widget/lang/de-ch.js +2 -2
  267. data/app/assets/javascripts/ckeditor/plugins/widget/lang/de.js +2 -2
  268. data/app/assets/javascripts/ckeditor/plugins/widget/lang/el.js +2 -2
  269. data/app/assets/javascripts/ckeditor/plugins/widget/lang/en-au.js +8 -0
  270. data/app/assets/javascripts/ckeditor/plugins/widget/lang/en-gb.js +2 -2
  271. data/app/assets/javascripts/ckeditor/plugins/widget/lang/en.js +2 -2
  272. data/app/assets/javascripts/ckeditor/plugins/widget/lang/eo.js +2 -2
  273. data/app/assets/javascripts/ckeditor/plugins/widget/lang/es-mx.js +2 -2
  274. data/app/assets/javascripts/ckeditor/plugins/widget/lang/es.js +2 -2
  275. data/app/assets/javascripts/ckeditor/plugins/widget/lang/et.js +8 -0
  276. data/app/assets/javascripts/ckeditor/plugins/widget/lang/eu.js +2 -2
  277. data/app/assets/javascripts/ckeditor/plugins/widget/lang/fa.js +3 -3
  278. data/app/assets/javascripts/ckeditor/plugins/widget/lang/fi.js +2 -2
  279. data/app/assets/javascripts/ckeditor/plugins/widget/lang/fr.js +2 -2
  280. data/app/assets/javascripts/ckeditor/plugins/widget/lang/gl.js +2 -2
  281. data/app/assets/javascripts/ckeditor/plugins/widget/lang/he.js +2 -2
  282. data/app/assets/javascripts/ckeditor/plugins/widget/lang/hr.js +2 -2
  283. data/app/assets/javascripts/ckeditor/plugins/widget/lang/hu.js +2 -2
  284. data/app/assets/javascripts/ckeditor/plugins/widget/lang/id.js +2 -2
  285. data/app/assets/javascripts/ckeditor/plugins/widget/lang/it.js +2 -2
  286. data/app/assets/javascripts/ckeditor/plugins/widget/lang/ja.js +2 -2
  287. data/app/assets/javascripts/ckeditor/plugins/widget/lang/km.js +2 -2
  288. data/app/assets/javascripts/ckeditor/plugins/widget/lang/ko.js +2 -2
  289. data/app/assets/javascripts/ckeditor/plugins/widget/lang/ku.js +2 -2
  290. data/app/assets/javascripts/ckeditor/plugins/widget/lang/lv.js +3 -3
  291. data/app/assets/javascripts/ckeditor/plugins/widget/lang/nb.js +2 -2
  292. data/app/assets/javascripts/ckeditor/plugins/widget/lang/nl.js +2 -2
  293. data/app/assets/javascripts/ckeditor/plugins/widget/lang/no.js +2 -2
  294. data/app/assets/javascripts/ckeditor/plugins/widget/lang/oc.js +2 -2
  295. data/app/assets/javascripts/ckeditor/plugins/widget/lang/pl.js +2 -2
  296. data/app/assets/javascripts/ckeditor/plugins/widget/lang/pt-br.js +2 -2
  297. data/app/assets/javascripts/ckeditor/plugins/widget/lang/pt.js +2 -2
  298. data/app/assets/javascripts/ckeditor/plugins/widget/lang/ro.js +8 -0
  299. data/app/assets/javascripts/ckeditor/plugins/widget/lang/ru.js +2 -2
  300. data/app/assets/javascripts/ckeditor/plugins/widget/lang/sk.js +2 -2
  301. data/app/assets/javascripts/ckeditor/plugins/widget/lang/sl.js +2 -2
  302. data/app/assets/javascripts/ckeditor/plugins/widget/lang/sq.js +3 -3
  303. data/app/assets/javascripts/ckeditor/plugins/widget/lang/sv.js +2 -2
  304. data/app/assets/javascripts/ckeditor/plugins/widget/lang/tr.js +2 -2
  305. data/app/assets/javascripts/ckeditor/plugins/widget/lang/tt.js +2 -2
  306. data/app/assets/javascripts/ckeditor/plugins/widget/lang/ug.js +2 -2
  307. data/app/assets/javascripts/ckeditor/plugins/widget/lang/uk.js +2 -2
  308. data/app/assets/javascripts/ckeditor/plugins/widget/lang/vi.js +2 -2
  309. data/app/assets/javascripts/ckeditor/plugins/widget/lang/zh-cn.js +2 -2
  310. data/app/assets/javascripts/ckeditor/plugins/widget/lang/zh.js +2 -2
  311. data/app/assets/javascripts/ckeditor/plugins/widget/plugin.js +235 -64
  312. data/app/assets/javascripts/ckeditor/plugins/widgetselection/plugin.js +6 -11
  313. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/ar.js +1 -0
  314. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/bg.js +17 -0
  315. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/ca.js +1 -0
  316. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/cs.js +15 -0
  317. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/da.js +1 -0
  318. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/de.js +1 -0
  319. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/el.js +1 -0
  320. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/en.js +5 -1
  321. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/es.js +1 -0
  322. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/eu.js +17 -0
  323. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/fa.js +13 -0
  324. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/fi.js +1 -0
  325. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/fr.js +1 -0
  326. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/he.js +1 -0
  327. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/hr.js +1 -0
  328. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/hu.js +14 -0
  329. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/it.js +4 -3
  330. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/ja.js +5 -5
  331. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/ko.js +16 -0
  332. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/nl.js +3 -2
  333. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/no.js +1 -0
  334. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/pl.js +4 -3
  335. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/pt-br.js +1 -0
  336. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/pt.js +1 -0
  337. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/ro.js +15 -0
  338. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/ru.js +2 -1
  339. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/sk.js +15 -0
  340. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/sv.js +5 -3
  341. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/tr.js +1 -0
  342. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/uk.js +17 -0
  343. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/zh-cn.js +1 -0
  344. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/zh.js +14 -0
  345. data/app/assets/javascripts/ckeditor/plugins/wordcount/plugin.js +485 -302
  346. data/app/assets/javascripts/ckeditor/plugins/wordcount/samples/maxParagraphs.html +26 -0
  347. data/app/assets/javascripts/integral/backend.js +196 -25
  348. data/app/assets/javascripts/integral/frontend.js +37 -2
  349. data/app/assets/javascripts/integral/support/character_counter.js +13 -8
  350. data/app/assets/javascripts/integral/support/confirm_modal.coffee +2 -2
  351. data/app/assets/javascripts/integral/support/date_picker.coffee +54 -59
  352. data/app/assets/javascripts/integral/support/gallery.coffee +71 -54
  353. data/app/assets/javascripts/integral/support/grid.coffee +11 -4
  354. data/app/assets/javascripts/integral/support/lib/lazysizes.js +755 -0
  355. data/app/assets/javascripts/integral/support/lib/materialize-tags.js +49 -44
  356. data/app/assets/javascripts/integral/support/list.coffee +1 -0
  357. data/app/assets/javascripts/integral/support/ls.instagram.js +57 -0
  358. data/app/assets/javascripts/integral/support/ls.twitter.js +66 -0
  359. data/app/assets/javascripts/integral/support/record_selector.coffee +3 -1
  360. data/app/assets/javascripts/integral/support/remote_form.coffee +18 -11
  361. data/app/assets/javascripts/integral/support/slug_generator.coffee +1 -0
  362. data/app/assets/stylesheets/integral/backend.sass +36 -24
  363. data/app/assets/stylesheets/integral/backend/_foundation_settings.scss +5 -6
  364. data/app/assets/stylesheets/integral/backend/dashboard-layout.scss +31 -64
  365. data/app/assets/stylesheets/integral/backend/devise.sass +2 -3
  366. data/app/assets/stylesheets/integral/backend/materialize-tags.sass +2 -1
  367. data/app/assets/stylesheets/integral/backend/modules/dropdown_pane_notifications.scss +150 -0
  368. data/app/assets/stylesheets/integral/backend/modules/dropdown_pane_profile.scss +59 -0
  369. data/app/assets/stylesheets/integral/backend/modules/timeline.scss +214 -0
  370. data/app/assets/stylesheets/integral/backend/shared.sass +121 -13
  371. data/app/assets/stylesheets/integral/frontend.scss +45 -0
  372. data/app/assets/stylesheets/integral/frontend/_foundation_settings.scss +2 -2
  373. data/app/assets/stylesheets/integral/frontend/blog.sass +155 -142
  374. data/app/assets/stylesheets/integral/frontend/layout.sass +13 -3
  375. data/app/assets/stylesheets/integral/frontend/modules/article-footer.scss +55 -0
  376. data/app/assets/stylesheets/integral/frontend/modules/article.scss +34 -0
  377. data/app/assets/stylesheets/integral/frontend/modules/horizontal-post.scss +44 -0
  378. data/app/assets/stylesheets/integral/frontend/modules/inline-articles.scss +23 -0
  379. data/app/assets/stylesheets/integral/frontend/modules/latest-post.scss +37 -0
  380. data/app/assets/stylesheets/integral/frontend/modules/list-widget.scss +50 -0
  381. data/app/assets/stylesheets/integral/frontend/modules/piped-list.scss +33 -0
  382. data/app/assets/stylesheets/integral/frontend/modules/post-tags.scss +19 -0
  383. data/app/assets/stylesheets/integral/frontend/modules/scroll-container.scss +9 -0
  384. data/app/assets/stylesheets/integral/frontend/modules/sidebar-articles.scss +42 -0
  385. data/app/assets/stylesheets/integral/frontend/modules/sidebar-tags.scss +6 -0
  386. data/app/assets/stylesheets/integral/frontend/modules/sidebar-widget.scss +47 -0
  387. data/app/assets/stylesheets/integral/frontend/modules/vertical-post.scss +31 -0
  388. data/app/assets/stylesheets/integral/frontend/share_modal.sass +0 -5
  389. data/app/assets/stylesheets/integral/support/gallery.sass +8 -0
  390. data/app/assets/stylesheets/integral/support/media-query-indicator.sass +9 -3
  391. data/app/controllers/integral/application_controller.rb +10 -3
  392. data/app/controllers/integral/backend/activities_controller.rb +31 -26
  393. data/app/controllers/integral/backend/base_controller.rb +265 -26
  394. data/app/controllers/integral/backend/categories_controller.rb +49 -0
  395. data/app/controllers/integral/backend/images_controller.rb +39 -54
  396. data/app/controllers/integral/backend/lists_controller.rb +16 -98
  397. data/app/controllers/integral/backend/notification_subscriptions_controller.rb +23 -0
  398. data/app/controllers/integral/backend/pages_controller.rb +15 -117
  399. data/app/controllers/integral/backend/posts_controller.rb +22 -108
  400. data/app/controllers/integral/backend/settings_controller.rb +7 -8
  401. data/app/controllers/integral/backend/static_pages_controller.rb +14 -0
  402. data/app/controllers/integral/backend/users_controller.rb +61 -79
  403. data/app/controllers/integral/blog_controller.rb +12 -0
  404. data/app/controllers/integral/categories_controller.rb +45 -0
  405. data/app/controllers/integral/pages_controller.rb +3 -3
  406. data/app/controllers/integral/posts_controller.rb +7 -9
  407. data/app/controllers/integral/tags_controller.rb +5 -2
  408. data/app/decorators/integral/base_decorator.rb +16 -0
  409. data/app/decorators/integral/category_decorator.rb +30 -0
  410. data/app/decorators/integral/image_decorator.rb +3 -3
  411. data/app/decorators/integral/list_decorator.rb +1 -13
  412. data/app/decorators/integral/notification/notification_decorator.rb +74 -0
  413. data/app/decorators/integral/page_decorator.rb +1 -13
  414. data/app/decorators/integral/paginating_decorator.rb +6 -0
  415. data/app/decorators/integral/post_decorator.rb +44 -4
  416. data/app/decorators/integral/user_decorator.rb +1 -13
  417. data/app/decorators/integral/version_decorator.rb +58 -15
  418. data/app/helpers/integral/application_helper.rb +7 -0
  419. data/app/helpers/integral/backend/base_helper.rb +135 -15
  420. data/app/helpers/integral/blog_helper.rb +46 -0
  421. data/app/helpers/integral/social_helper.rb +0 -23
  422. data/app/jobs/integral/application_job.rb +1 -0
  423. data/app/jobs/integral/newsletter_signup_job.rb +0 -2
  424. data/app/jobs/integral/webhook/delivery_job.rb +37 -0
  425. data/app/mailers/integral/contact_mailer.rb +4 -1
  426. data/app/mailers/integral/devise_mailer.rb +6 -0
  427. data/app/models/concerns/integral/lazy_contentable.rb +54 -0
  428. data/app/models/concerns/integral/notification/subscribable.rb +67 -0
  429. data/app/models/concerns/integral/webhook/delivery.rb +30 -0
  430. data/app/models/concerns/integral/webhook/observable.rb +23 -0
  431. data/app/models/integral/application_record.rb +9 -0
  432. data/app/models/integral/category.rb +29 -0
  433. data/app/models/integral/category_version.rb +8 -0
  434. data/app/models/integral/image.rb +40 -3
  435. data/app/models/integral/list.rb +11 -4
  436. data/app/models/integral/list_item.rb +15 -16
  437. data/app/models/integral/list_item_connection.rb +6 -0
  438. data/app/models/integral/notification/notification.rb +28 -0
  439. data/app/models/integral/notification/subscription.rb +14 -0
  440. data/app/models/integral/page.rb +32 -10
  441. data/app/models/integral/post.rb +39 -14
  442. data/app/models/integral/user.rb +51 -2
  443. data/app/models/integral/version.rb +2 -2
  444. data/app/models/integral/webhook/endpoint.rb +40 -0
  445. data/app/models/integral/webhook/event.rb +20 -0
  446. data/app/policies/integral/base_policy.rb +7 -11
  447. data/app/policies/integral/category_policy.rb +9 -0
  448. data/app/policies/integral/page_policy.rb +1 -0
  449. data/app/policies/integral/version_policy.rb +0 -8
  450. data/app/serializers/integral/post_serializer.rb +24 -0
  451. data/app/uploaders/integral/avatar_uploader.rb +1 -1
  452. data/app/views/devise/invitations/edit.haml +1 -4
  453. data/app/views/devise/mailer/invitation_instructions.inky-haml +20 -0
  454. data/app/views/devise/sessions/new.haml +2 -2
  455. data/app/views/integral/backend/activities/_activity.haml +21 -0
  456. data/app/views/integral/backend/activities/grid/_dropdown_actions.haml +1 -0
  457. data/app/views/integral/backend/activities/grid/_row_content.haml +13 -0
  458. data/app/views/integral/backend/activities/index.haml +7 -13
  459. data/app/views/integral/backend/activities/shared/_grid.haml +35 -19
  460. data/app/views/integral/backend/activities/shared/index.haml +15 -0
  461. data/app/views/integral/backend/activities/shared/{_log.haml → show.haml} +7 -7
  462. data/app/views/integral/backend/activities/show.haml +1 -1
  463. data/app/views/integral/backend/categories/_modal.haml +24 -0
  464. data/app/views/integral/backend/images/_form.haml +16 -28
  465. data/app/views/integral/backend/images/edit.haml +2 -2
  466. data/app/views/integral/backend/images/grid/_dropdown_actions.haml +5 -0
  467. data/app/views/integral/backend/images/grid/_row_content.haml +5 -0
  468. data/app/views/integral/backend/images/index.haml +11 -17
  469. data/app/views/integral/backend/images/list.haml +11 -0
  470. data/app/views/integral/backend/images/show.haml +26 -0
  471. data/app/views/integral/backend/lists/_form.haml +7 -20
  472. data/app/views/integral/backend/lists/_item_container.haml +1 -1
  473. data/app/views/integral/backend/lists/_item_modal.haml +3 -3
  474. data/app/views/integral/backend/lists/_list_item_fields.haml +3 -2
  475. data/app/views/integral/backend/lists/_manager.haml +11 -13
  476. data/app/views/integral/backend/lists/edit.haml +11 -11
  477. data/app/views/integral/backend/lists/grid/_dropdown_actions.haml +9 -0
  478. data/app/views/integral/backend/lists/grid/_row_content.haml +3 -0
  479. data/app/views/integral/backend/lists/index.haml +11 -17
  480. data/app/views/integral/backend/lists/list.haml +11 -0
  481. data/app/views/integral/backend/lists/show.haml +30 -0
  482. data/app/views/integral/backend/notifications/_notification.haml +21 -0
  483. data/app/views/integral/backend/pages/_form.haml +20 -47
  484. data/app/views/integral/backend/pages/edit.haml +18 -0
  485. data/app/views/integral/backend/pages/grid/_dropdown_actions.haml +11 -0
  486. data/app/views/integral/backend/pages/grid/_row_content.haml +5 -0
  487. data/app/views/integral/backend/pages/index.haml +11 -21
  488. data/app/views/integral/backend/pages/list.haml +15 -0
  489. data/app/views/integral/backend/pages/show.haml +32 -0
  490. data/app/views/integral/backend/posts/_form.haml +19 -51
  491. data/app/views/integral/backend/posts/edit.haml +5 -10
  492. data/app/views/integral/backend/posts/grid/_dropdown_actions.haml +10 -0
  493. data/app/views/integral/backend/posts/grid/_row_content.haml +6 -0
  494. data/app/views/integral/backend/posts/index.haml +13 -19
  495. data/app/views/integral/backend/posts/list.haml +13 -0
  496. data/app/views/integral/backend/posts/new.haml +0 -1
  497. data/app/views/integral/backend/posts/show.haml +31 -0
  498. data/app/views/integral/backend/settings/sections/_social.haml +1 -3
  499. data/app/views/integral/backend/shared/_activity_modal.haml +13 -0
  500. data/app/views/integral/backend/shared/_breadcrumbs.haml +7 -4
  501. data/app/views/integral/backend/shared/_image_preview.haml +10 -3
  502. data/app/views/integral/backend/shared/_image_selector.haml +1 -1
  503. data/app/views/integral/backend/shared/_notification_subscription_toggle.haml +22 -0
  504. data/app/views/integral/backend/shared/action_bar/_index.haml +9 -0
  505. data/app/views/integral/backend/shared/action_bar/_show.haml +3 -0
  506. data/app/views/integral/backend/shared/cards/_at_a_glance.haml +3 -3
  507. data/app/views/integral/backend/shared/cards/_categories.haml +33 -0
  508. data/app/views/integral/backend/{static_pages/_card.haml → shared/cards/_object.haml} +1 -1
  509. data/app/views/integral/backend/shared/cards/_recent_activity.haml +20 -0
  510. data/app/views/integral/backend/shared/cards/_recent_resources.haml +17 -0
  511. data/app/views/integral/backend/shared/cards/_recent_user_activity.haml +1 -0
  512. data/app/views/integral/backend/shared/cards/_top_post_authors.haml +18 -0
  513. data/app/views/integral/backend/shared/cards/_welcome.haml +24 -25
  514. data/app/views/integral/backend/shared/{_empty_grid.haml → grid/_empty.haml} +0 -0
  515. data/app/views/integral/backend/shared/grid/_form.haml +9 -0
  516. data/app/views/integral/backend/shared/grid/_grid.haml +21 -0
  517. data/app/views/integral/backend/shared/{_pagination.haml → grid/_pagination.haml} +0 -0
  518. data/app/views/integral/backend/shared/grid/_row_layout.haml +8 -0
  519. data/app/views/integral/backend/shared/record_selector/_collection.haml +1 -0
  520. data/app/views/integral/backend/shared/record_selector/_modal.haml +9 -10
  521. data/app/views/integral/backend/shared/record_selector/_record.haml +6 -4
  522. data/app/views/integral/backend/static_pages/dashboard.haml +17 -16
  523. data/app/views/integral/backend/users/_form.haml +35 -47
  524. data/app/views/integral/backend/users/edit.haml +1 -1
  525. data/app/views/integral/backend/users/grid/_dropdown_actions.haml +17 -0
  526. data/app/views/integral/backend/users/grid/_row_content.haml +8 -0
  527. data/app/views/integral/backend/users/index.haml +11 -17
  528. data/app/views/integral/backend/users/list.haml +12 -0
  529. data/app/views/integral/backend/users/show.haml +22 -19
  530. data/app/views/integral/categories/show.haml +5 -0
  531. data/app/views/integral/posts/_article_footer.haml +17 -0
  532. data/app/views/integral/posts/_card.haml +11 -0
  533. data/app/views/integral/posts/_latest_post.haml +8 -0
  534. data/app/views/integral/posts/_most_read_section.haml +8 -0
  535. data/app/views/integral/posts/_post.haml +11 -0
  536. data/app/views/integral/posts/_similar_posts.haml +5 -0
  537. data/app/views/integral/posts/index.haml +7 -5
  538. data/app/views/integral/posts/templates/default.haml +35 -35
  539. data/app/views/integral/shared/_share_modal.haml +0 -3
  540. data/app/views/integral/shared/_social_list_items.haml +6 -12
  541. data/app/views/integral/shared/_subscribe_modal.haml +14 -0
  542. data/app/views/integral/shared/blog/_categories.haml +15 -0
  543. data/app/views/integral/shared/blog/_layout.haml +9 -0
  544. data/app/views/integral/shared/blog/_sidebar.haml +10 -0
  545. data/app/views/integral/shared/gallery/_placeholder.haml +1 -1
  546. data/app/views/integral/shared/gallery/_slide.haml +2 -2
  547. data/app/views/integral/shared/gallery/gallery.haml +5 -2
  548. data/app/views/integral/shared/sidebar/_item.haml +8 -0
  549. data/app/views/integral/shared/sidebar/_newsletter_signup.haml +7 -0
  550. data/app/views/integral/shared/sidebar/_popular_posts.haml +7 -0
  551. data/app/views/integral/shared/sidebar/_popular_tags.haml +7 -0
  552. data/app/views/integral/shared/sidebar/_recent_posts.haml +7 -0
  553. data/app/views/integral/tags/index.haml +2 -2
  554. data/app/views/integral/tags/show.haml +3 -6
  555. data/app/views/layouts/integral/backend.html.haml +27 -5
  556. data/app/views/layouts/integral/backend/_create_dropdown.haml +1 -30
  557. data/app/views/layouts/integral/backend/_main_menu_items.haml +1 -91
  558. data/app/views/layouts/integral/frontend.html.haml +3 -3
  559. data/config/initializers/devise.rb +1 -1
  560. data/config/locales/en.yml +127 -55
  561. data/config/routes.rb +2 -0
  562. data/db/migrate/20190414172018_create_webhook_endpoints.rb +10 -0
  563. data/db/migrate/20190929191412_add_integral_post_categories.rb +13 -0
  564. data/db/migrate/20191203090008_add_image_to_integral_categories.rb +6 -0
  565. data/db/migrate/20200401210442_create_category_versions.rb +20 -0
  566. data/db/migrate/20200407022636_create_integral_notifications.rb +25 -0
  567. data/db/migrate/20200421223602_add_status_to_integral_users.rb +5 -0
  568. data/db/seeds.rb +15 -9
  569. data/lib/generators/integral/assets_generator.rb +2 -2
  570. data/lib/generators/integral/install_generator.rb +1 -1
  571. data/lib/generators/integral/views_generator.rb +1 -1
  572. data/lib/generators/templates/app.yml +0 -1
  573. data/lib/generators/templates/integral.rb +5 -0
  574. data/lib/integral.rb +4 -30
  575. data/lib/integral/acts_as_integral.rb +115 -0
  576. data/lib/integral/acts_as_listable.rb +3 -3
  577. data/lib/integral/chart_renderer/base.rb +2 -0
  578. data/lib/integral/content_renderer.rb +2 -2
  579. data/lib/integral/engine.rb +12 -2
  580. data/lib/integral/grids/activities_grid.rb +15 -2
  581. data/lib/integral/grids/lists_grid.rb +1 -0
  582. data/lib/integral/grids/posts_grid.rb +5 -1
  583. data/lib/integral/grids/users_grid.rb +5 -0
  584. data/lib/integral/list_item_renderer.rb +4 -2
  585. data/lib/integral/list_renderer.rb +6 -1
  586. data/lib/integral/middleware/page_router.rb +15 -6
  587. data/lib/integral/router.rb +42 -8
  588. data/lib/integral/version.rb +1 -1
  589. data/lib/integral/widgets/swiper_list.rb +3 -2
  590. data/public/images/integral/demo/continous-integration.png +0 -0
  591. data/public/images/integral/demo/foundation-frontend-framework.jpg +0 -0
  592. data/public/images/integral/demo/heroku.png +0 -0
  593. data/public/images/integral/demo/integral-cms-without-hassle.jpg +0 -0
  594. data/public/images/integral/demo/integral-features-activity-tracking.jpg +0 -0
  595. data/public/images/integral/demo/integral-features-contact-form.png +0 -0
  596. data/public/images/integral/demo/integral-features-design.jpg +0 -0
  597. data/public/images/integral/demo/integral-features-dynamic-pages.jpg +0 -0
  598. data/public/images/integral/demo/integral-features-image-management.jpg +0 -0
  599. data/public/images/integral/demo/integral-features-integrated-blog.jpg +0 -0
  600. data/public/images/integral/demo/integral-features-list-management.jpg +0 -0
  601. data/public/images/integral/demo/integral-features-seo-ready.jpg +0 -0
  602. data/public/images/integral/demo/integral-features-user-management.jpg +0 -0
  603. data/public/images/integral/demo/integral-presentation.png +0 -0
  604. data/public/integral/ckeditor_demo_content.html +0 -13
  605. data/spec/factories.rb +30 -8
  606. metadata +305 -113
  607. data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/jp.js +0 -13
  608. data/app/assets/javascripts/integral/support/date_picker/picker.date.js +0 -1435
  609. data/app/assets/javascripts/integral/support/date_picker/picker.js +0 -1132
  610. data/app/assets/stylesheets/integral/frontend.sass +0 -26
  611. data/app/assets/stylesheets/integral/support/date-picker.scss +0 -16
  612. data/app/assets/stylesheets/integral/support/date_picker/_default.date.scss +0 -452
  613. data/app/assets/stylesheets/integral/support/date_picker/_default.scss +0 -201
  614. data/app/assets/stylesheets/integral/support/date_picker/materialize_clockpicker.sass +0 -220
  615. data/app/views/devise/mailer/invitation_instructions.html.erb +0 -13
  616. data/app/views/integral/backend/activities/_grid.haml +0 -23
  617. data/app/views/integral/backend/activities/shared/_listing.haml +0 -14
  618. data/app/views/integral/backend/images/_grid.haml +0 -16
  619. data/app/views/integral/backend/lists/_grid.haml +0 -14
  620. data/app/views/integral/backend/pages/_grid.haml +0 -21
  621. data/app/views/integral/backend/pages/activities.haml +0 -2
  622. data/app/views/integral/backend/pages/activity.haml +0 -1
  623. data/app/views/integral/backend/pages/edit.html.haml +0 -15
  624. data/app/views/integral/backend/posts/_grid.haml +0 -25
  625. data/app/views/integral/backend/posts/activities.haml +0 -3
  626. data/app/views/integral/backend/posts/activity.haml +0 -1
  627. data/app/views/integral/backend/shared/_grid.haml +0 -18
  628. data/app/views/integral/backend/users/_grid.haml +0 -19
  629. data/app/views/integral/posts/_collection.haml +0 -4
  630. data/app/views/integral/posts/_item.haml +0 -16
  631. data/app/views/integral/shared/_blog_layout.haml +0 -15
  632. data/app/views/integral/shared/_blog_sidebar.haml +0 -49
  633. data/lib/integral/slack_bot.rb +0 -45
@@ -7,10 +7,10 @@
7
7
  */
8
8
 
9
9
  (function() {
10
- CKEDITOR.plugins.add('codemirror', {
11
- icons: 'searchcode,autoformat,commentselectedrange,uncommentselectedrange,autocomplete', // %REMOVE_LINE_CORE%
12
- lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en-au,en-ca,en-gb,en,eo,es,et,eu,fa,fi,fo,fr-ca,fr,gl,gu,he,hi,hr,hu,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt-br,pt,ro,ru,sk,sl,sr-latn,sr,sv,th,tr,ug,uk,vi,zh-cn,zh', // %REMOVE_LINE_CORE%
13
- version: '1.17.3',
10
+ CKEDITOR.plugins.add("codemirror", {
11
+ icons: "searchcode,autoformat,commentselectedrange,uncommentselectedrange,autocomplete", // %REMOVE_LINE_CORE%
12
+ lang: "af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en-au,en-ca,en-gb,en,eo,es,et,eu,fa,fi,fo,fr-ca,fr,gl,gu,he,hi,hr,hu,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt-br,pt,ro,ru,sk,sl,sr-latn,sr,sv,th,tr,ug,uk,vi,zh-cn,zh", // %REMOVE_LINE_CORE%
13
+ version: "1.17.8",
14
14
  init: function (editor) {
15
15
  var rootPath = this.path,
16
16
  defaultConfig = {
@@ -27,7 +27,7 @@
27
27
  indentWithTabs: false,
28
28
  lineNumbers: true,
29
29
  lineWrapping: true,
30
- mode: 'htmlmixed',
30
+ mode: "htmlmixed",
31
31
  matchBrackets: true,
32
32
  maxHighlightLineLength: 1000,
33
33
  matchTags: true,
@@ -38,7 +38,7 @@
38
38
  showTrailingSpace: true,
39
39
  showUncommentButton: true,
40
40
  styleActiveLine: true,
41
- theme: 'default',
41
+ theme: "default",
42
42
  useBeautifyOnStart: false
43
43
  };
44
44
 
@@ -58,59 +58,66 @@
58
58
  if (editor.plugins.bbcode && config.mode.indexOf("bbcode") <= 0) {
59
59
  config.mode = "bbcode";
60
60
  }
61
- var requirePresent = "function" === typeof require;
62
-
61
+ var requirePresent = "function" === typeof require && "function" === typeof require.config;
62
+ var pluginRequire;
63
63
  if (requirePresent){
64
- var location = window.CKEDITOR_GETURL('plugins/codemirror/js');
65
- require.config({
64
+ var requireContext = config.requireContext || "_";
65
+ var location = CKEDITOR.getUrl("plugins/codemirror/js");
66
+ pluginRequire = require.config({
67
+ context: requireContext,
66
68
  packages: [{
67
- name: 'codemirror',
69
+ name: "codemirror",
70
+ location: location,
71
+ main: "codemirror.min.js"
72
+ }, {
73
+ name: "codemirror-mode-handlebars",
68
74
  location: location,
69
- main: 'codemirror.min.js'
75
+ main: "codemirror.mode.handlebars.min.js"
70
76
  }, {
71
- name: 'codemirror-mode-twig',
77
+ name: "codemirror-mode-twig",
72
78
  location: location,
73
- main: 'codemirror.mode.twig.min.js'
79
+ main: "codemirror.mode.twig.min.js"
74
80
  }, {
75
- name: 'codemirror-mode-html',
81
+ name: "codemirror-mode-html",
76
82
  location: location,
77
- main: 'codemirror.mode.htmlmixed.min.js'
83
+ main: "codemirror.mode.htmlmixed.min.js"
78
84
  }, {
79
- name: 'codemirror-mode-php',
85
+ name: "codemirror-mode-php",
80
86
  location: location,
81
- main: 'codemirror.mode.php.min.js'
87
+ main: "codemirror.mode.php.min.js"
82
88
  }, {
83
- name: 'codemirror-mode-js',
89
+ name: "codemirror-mode-js",
84
90
  location: location,
85
- main: 'codemirror.mode.js.min.js'
91
+ main: "codemirror.mode.js.min.js"
86
92
  }, {
87
- name: 'codemirror-addons',
93
+ name: "codemirror-addons",
88
94
  location: location,
89
- main: 'codemirror.addons.min.js'
95
+ main: "codemirror.addons.min.js"
90
96
  }, {
91
- name: 'codemirror-addon-search',
97
+ name: "codemirror-addon-search",
92
98
  location: location,
93
- main: 'codemirror.addons.search.min.js'
99
+ main: "codemirror.addons.search.min.js"
94
100
  }, {
95
- name: 'codemirror-beautify',
101
+ name: "codemirror-beautify",
96
102
  location: location,
97
- main: 'beautify.min.js'
103
+ main: "beautify.min.js"
98
104
  }],
99
105
  bundles: {
100
- 'codemirror': ['core', 'codemirror.js'],
101
- 'codemirror-mode-twig': ['modeTwig'],
102
- 'codemirror-mode-html': ['modeHtml'],
103
- 'codemirror-mode-php': ['modePHP'],
104
- 'codemirror-mode-js': ['modeJS'],
105
- 'codemirror-addons': ['addons'],
106
- 'codemirror-addon-search': ['addonSearch'],
107
- 'codemirror-beautify': ['beautifyModule']
106
+ 'codemirror': ["core", "codemirror.js"],
107
+ 'codemirror-mode-handlebars': ["modeHandlebars"],
108
+ 'codemirror-mode-twig': ["modeTwig"],
109
+ 'codemirror-mode-html': ["modeHtml"],
110
+ 'codemirror-mode-php': ["modePHP"],
111
+ 'codemirror-mode-js': ["modeJS"],
112
+ 'codemirror-addons': ["addons"],
113
+ 'codemirror-addon-search': ["addonSearch"],
114
+ 'codemirror-beautify': ["beautifyModule"]
108
115
  },
109
116
  map: {
110
117
  '*': {
111
118
  //all the requires pointing to ../../lib/codemirror from addons will be redirected to module named codemirror.js
112
119
  //which is located in bundle 'codemirror' whose js file is codemirror.min.js
113
- 'lib/codemirror': 'codemirror.js'
120
+ 'lib/codemirror': "codemirror.js"
114
121
  }
115
122
  }
116
123
  });
@@ -119,7 +126,7 @@
119
126
  if (editor.elementMode === CKEDITOR.ELEMENT_MODE_INLINE || editor.plugins.sourcedialog) {
120
127
 
121
128
  // Override Source Dialog
122
- CKEDITOR.dialog.add('sourcedialog', function (editor) {
129
+ CKEDITOR.dialog.add("sourcedialog", function (editor) {
123
130
  var sizeDialog = CKEDITOR.document.getWindow().getViewPaneSize(),
124
131
  minWidth = Math.min(sizeDialog.width - 70, 800),
125
132
  minHeight = sizeDialog.height / 1.5,
@@ -131,7 +138,7 @@
131
138
  height = size.height / 1.5;
132
139
 
133
140
  window["codemirror_" + editor.id] = CodeMirror.fromTextArea(textarea, {
134
- mode: config.mode,
141
+ mode: config.mode === "handlebars" ? { name: "handlebars", base: "text/html" } : config.mode,
135
142
  matchBrackets: config.matchBrackets,
136
143
  maxHighlightLineLength: config.maxHighlightLineLength,
137
144
  matchTags: config.matchTags,
@@ -163,8 +170,8 @@
163
170
  });
164
171
 
165
172
 
166
- var holderHeight = height + 'px';
167
- var holderWidth = width + 'px';
173
+ var holderHeight = height + "px";
174
+ var holderWidth = width + "px";
168
175
 
169
176
  // Store config so we can access it within commands etc.
170
177
  window["codemirror_" + editor.id].config = config;
@@ -172,8 +179,8 @@
172
179
  if (config.autoFormatOnStart) {
173
180
  if (config.useBeautifyOnStart) {
174
181
  var indent_size = 4,
175
- indent_char = ' ',
176
- brace_style = 'collapse'; //collapse, expand, end-expand
182
+ indent_char = " ",
183
+ brace_style = "collapse"; //collapse, expand, end-expand
177
184
 
178
185
  var source = window["codemirror_" + editor.id].getValue();
179
186
 
@@ -198,7 +205,7 @@
198
205
 
199
206
  window["codemirror_" + editor.id].on("change", function () {
200
207
  window["codemirror_" + editor.id].save();
201
- editor.fire('change', this);
208
+ editor.fire("change", this);
202
209
  });
203
210
 
204
211
 
@@ -209,13 +216,13 @@
209
216
  window["codemirror_" + editor.id].on("gutterClick", window["foldFunc_" + editor.id]);
210
217
  }
211
218
  // Run config.onLoad callback, if present.
212
- if (typeof config.onLoad === 'function') {
219
+ if (typeof config.onLoad === "function") {
213
220
  config.onLoad(window["codemirror_" + editor.id], editor);
214
221
  }
215
222
 
216
223
  // inherit blur event
217
224
  window["codemirror_" + editor.id].on("blur", function () {
218
- editor.fire('blur', this);
225
+ editor.fire("blur", this);
219
226
  });
220
227
 
221
228
  window["codemirror_" + editor.id].on("keypress", function (codeMirror_Editor, evt) {
@@ -242,7 +249,7 @@
242
249
 
243
250
  start = OffSetToLineChannel(window["codemirror_" + editor.id], textRange.startOffset);
244
251
 
245
- if (typeof (textRange.endOffset) == 'undefined') {
252
+ if (typeof (textRange.endOffset) == "undefined") {
246
253
  window["codemirror_" + editor.id].focus();
247
254
  window["codemirror_" + editor.id].setCursor(start);
248
255
  } else {
@@ -260,14 +267,14 @@
260
267
  minHeight: minHeight,
261
268
  resizable: CKEDITOR.DIALOG_RESIZE_BOTH,
262
269
  onLoad: function() {
263
- this.on('resize',
270
+ this.on("resize",
264
271
  function (event) {
265
272
  var parts = event.sender.parts;
266
273
  var title = parts.title;
267
274
  var footer = parts.footer;
268
275
 
269
- var holderHeight = (event.data.height - title.$.offsetHeight - footer.$.offsetHeight) + 'px';
270
- var holderWidth = event.data.width + 'px';
276
+ var holderHeight = (event.data.height - title.$.offsetHeight - footer.$.offsetHeight) + "px";
277
+ var holderWidth = event.data.width + "px";
271
278
 
272
279
  window["codemirror_" + editor.id].setSize(holderWidth, holderHeight);
273
280
  },
@@ -275,33 +282,33 @@
275
282
  },
276
283
  onShow: function (event) {
277
284
  // Set Elements
278
- this.getContentElement('main', 'data').focus();
279
- this.getContentElement('main', 'AutoComplete').setValue(config.autoCloseTags, true);
285
+ this.getContentElement("main", "data").focus();
286
+ this.getContentElement("main", "AutoComplete").setValue(config.autoCloseTags, true);
280
287
 
281
- var textArea = this.getContentElement('main', 'data').getInputElement().$;
288
+ var textArea = this.getContentElement("main", "data").getInputElement().$;
282
289
 
283
290
  // Load the content
284
- this.setValueOf('main', 'data', oldData = editor.getData());
291
+ this.setValueOf("main", "data", oldData = editor.getData());
285
292
 
286
293
  if (config.autoLoadCodeMirror) {
287
294
 
288
- if (!IsStyleSheetAlreadyLoaded(rootPath + 'css/codemirror.min.css')) {
289
- CKEDITOR.document.appendStyleSheet(rootPath + 'css/codemirror.min.css');
295
+ if (!IsStyleSheetAlreadyLoaded(rootPath + "css/codemirror.min.css")) {
296
+ CKEDITOR.document.appendStyleSheet(rootPath + "css/codemirror.min.css");
290
297
  }
291
298
 
292
299
  if (config.theme.length &&
293
- config.theme != 'default' &&
294
- !IsStyleSheetAlreadyLoaded(rootPath + 'theme/' + config.theme + '.css')) {
295
- CKEDITOR.document.appendStyleSheet(rootPath + 'theme/' + config.theme + '.css');
300
+ config.theme != "default" &&
301
+ !IsStyleSheetAlreadyLoaded(rootPath + "theme/" + config.theme + ".css")) {
302
+ CKEDITOR.document.appendStyleSheet(rootPath + "theme/" + config.theme + ".css");
296
303
  }
297
304
  if(requirePresent) {
298
- require(getCodeMirrorDependencies(),function (codemirror, addons){
305
+ pluginRequire(getCodeMirrorDependencies(),function (codemirror, addons){
299
306
  loadCodeMirrorInline(editor, textArea, event.sender);
300
307
  });
301
308
  } else {
302
- if (typeof (CodeMirror) == 'undefined') {
309
+ if (typeof (CodeMirror) == "undefined") {
303
310
 
304
- CKEDITOR.scriptLoader.load(rootPath + 'js/codemirror.min.js',
311
+ CKEDITOR.scriptLoader.load(rootPath + "js/codemirror.min.js",
305
312
  function() {
306
313
 
307
314
  CKEDITOR.scriptLoader.load(getCodeMirrorScripts(),
@@ -312,7 +319,7 @@
312
319
 
313
320
 
314
321
  } else {
315
- if (CodeMirror.prototype['autoFormatAll']) {
322
+ if (CodeMirror.prototype["autoFormatAll"]) {
316
323
  loadCodeMirrorInline(editor, textArea, event.sender);
317
324
  } else {
318
325
  // loading the add-on scripts.
@@ -332,8 +339,8 @@
332
339
  // Free Memory
333
340
  window["codemirror_" + editor.id] = null;
334
341
 
335
- editor.fire('blur', this);
336
- editor.fire('focus', this);
342
+ editor.fire("blur", this);
343
+ editor.fire("focus", this);
337
344
  }
338
345
  },
339
346
  onOk: (function () {
@@ -358,21 +365,21 @@
358
365
  window["codemirror_" + editor.id] = null;
359
366
 
360
367
  // Remove CR from input data for reliable comparison with editor data.
361
- var newData = this.getValueOf('main', 'data').replace(/\r/g, '');
368
+ var newData = this.getValueOf("main", "data").replace(/\r/g, "");
362
369
 
363
370
  // Avoid unnecessary setData. Also preserve selection
364
371
  // when user changed his mind and goes back to wysiwyg editing.
365
372
  if (newData === oldData) {
366
- editor.fire('blur', this);
367
- editor.fire('focus', this);
373
+ editor.fire("blur", this);
374
+ editor.fire("focus", this);
368
375
  return true;
369
376
  }
370
377
 
371
378
  // Set data asynchronously to avoid errors in IE.
372
379
  CKEDITOR.env.ie ? CKEDITOR.tools.setTimeout(setData, 0, this, newData) : setData.call(this, newData);
373
380
 
374
- editor.fire('blur', this);
375
- editor.fire('focus', this);
381
+ editor.fire("blur", this);
382
+ editor.fire("focus", this);
376
383
 
377
384
  // Don't let the dialog close before setData is over.
378
385
  return false;
@@ -380,29 +387,29 @@
380
387
  })(),
381
388
 
382
389
  contents: [{
383
- id: 'main',
390
+ id: "main",
384
391
  label: editor.lang.sourcedialog.title,
385
392
  elements: [
386
393
  {
387
- type: 'hbox',
388
- style: 'width: 80px;margin:0;',
389
- widths: ['20px', '20px', '20px', '20px'],
394
+ type: "hbox",
395
+ style: "width: 80px;margin:0;",
396
+ widths: ["20px", "20px", "20px", "20px"],
390
397
  children: [
391
398
  {
392
- type: 'button',
393
- id: 'searchCode',
394
- label: '',
399
+ type: "button",
400
+ id: "searchCode",
401
+ label: "",
395
402
  title: lang.searchCode,
396
- 'class': 'searchCodeButton',
403
+ 'class': "searchCodeButton",
397
404
  onClick: function() {
398
405
  CodeMirror.commands.find(window["codemirror_" + editor.id]);
399
406
  }
400
407
  }, {
401
- type: 'button',
402
- id: 'autoFormat',
403
- label: '',
408
+ type: "button",
409
+ id: "autoFormat",
410
+ label: "",
404
411
  title: lang.autoFormat,
405
- 'class': 'autoFormat',
412
+ 'class': "autoFormat",
406
413
  onClick: function() {
407
414
  var range = {
408
415
  from: window["codemirror_" + editor.id].getCursor(true),
@@ -411,11 +418,11 @@
411
418
  window["codemirror_" + editor.id].autoFormatRange(range.from, range.to);
412
419
  }
413
420
  }, {
414
- type: 'button',
415
- id: 'CommentSelectedRange',
416
- label: '',
421
+ type: "button",
422
+ id: "CommentSelectedRange",
423
+ label: "",
417
424
  title: lang.commentSelectedRange,
418
- 'class': 'CommentSelectedRange',
425
+ 'class': "CommentSelectedRange",
419
426
  onClick: function () {
420
427
  var range = {
421
428
  from: window["codemirror_" + editor.id].getCursor(true),
@@ -424,11 +431,11 @@
424
431
  window["codemirror_" + editor.id].commentRange(true, range.from, range.to);
425
432
  }
426
433
  }, {
427
- type: 'button',
428
- id: 'UncommentSelectedRange',
429
- label: '',
434
+ type: "button",
435
+ id: "UncommentSelectedRange",
436
+ label: "",
430
437
  title: lang.uncommentSelectedRange,
431
- 'class': 'UncommentSelectedRange',
438
+ 'class': "UncommentSelectedRange",
432
439
  onClick: function () {
433
440
  var range = {
434
441
  from: window["codemirror_" + editor.id].getCursor(true),
@@ -441,23 +448,23 @@
441
448
  }
442
449
  }]
443
450
  }, {
444
- type: 'checkbox',
445
- id: 'AutoComplete',
451
+ type: "checkbox",
452
+ id: "AutoComplete",
446
453
  label: lang.autoCompleteToggle,
447
454
  title: lang.autoCompleteToggle,
448
455
  onChange: function () {
449
456
  window["codemirror_" + editor.id].setOption("autoCloseTags", this.getValue());
450
457
  }
451
458
  }, {
452
- type: 'textarea',
453
- id: 'data',
454
- dir: 'ltr',
455
- inputStyle: 'cursor:auto;' +
456
- 'width:' + minWidth + 'px;' +
457
- 'height:' + minHeight + 'px;' +
458
- 'tab-size:4;' +
459
- 'text-align:left;',
460
- 'class': 'cke_source cke_enable_context_menu'
459
+ type: "textarea",
460
+ id: "data",
461
+ dir: "ltr",
462
+ inputStyle: "cursor:auto;" +
463
+ "width:" + minWidth + "px;" +
464
+ "height:" + minHeight + "px;" +
465
+ "tab-size:4;" +
466
+ "text-align:left;",
467
+ 'class': "cke_source cke_enable_context_menu"
461
468
  }
462
469
  ]
463
470
  }]
@@ -506,8 +513,8 @@
506
513
  };
507
514
 
508
515
  editor.commands.find.exec = function() {
509
- if (editor.mode === 'wysiwyg') {
510
- editor.openDialog('find');
516
+ if (editor.mode === "wysiwyg") {
517
+ editor.openDialog("find");
511
518
  } else {
512
519
  CodeMirror.commands.find(window["codemirror_" + editor.id]);
513
520
  }
@@ -522,8 +529,8 @@
522
529
  };
523
530
 
524
531
  editor.commands.replace.exec = function () {
525
- if (editor.mode === 'wysiwyg') {
526
- editor.openDialog('replace');
532
+ if (editor.mode === "wysiwyg") {
533
+ editor.openDialog("replace");
527
534
  } else {
528
535
  CodeMirror.commands.replace(window["codemirror_" + editor.id]);
529
536
  }
@@ -544,11 +551,11 @@
544
551
  editorFocus: false,
545
552
  readOnly: 1,
546
553
  exec: function(editorInstance) {
547
- if (editorInstance.mode === 'wysiwyg') {
548
- editorInstance.fire('saveSnapshot');
554
+ if (editorInstance.mode === "wysiwyg") {
555
+ editorInstance.fire("saveSnapshot");
549
556
  }
550
- editorInstance.getCommand('source').setState(CKEDITOR.TRISTATE_DISABLED);
551
- editorInstance.setMode(editorInstance.mode === 'source' ? 'wysiwyg' : 'source');
557
+ editorInstance.getCommand("source").setState(CKEDITOR.TRISTATE_DISABLED);
558
+ editorInstance.setMode(editorInstance.mode === "source" ? "wysiwyg" : "source");
552
559
  },
553
560
  canUndo: false
554
561
  },
@@ -638,30 +645,30 @@
638
645
  };
639
646
  }
640
647
 
641
- editor.addMode('source', function (callback) {
648
+ editor.addMode("source", function (callback) {
642
649
  if (!config.autoLoadCodeMirror) {
643
650
  return;
644
651
  }
645
652
 
646
- if (!IsStyleSheetAlreadyLoaded(rootPath + 'css/codemirror.min.css')) {
647
- CKEDITOR.document.appendStyleSheet(rootPath + 'css/codemirror.min.css');
653
+ if (!IsStyleSheetAlreadyLoaded(rootPath + "css/codemirror.min.css")) {
654
+ CKEDITOR.document.appendStyleSheet(rootPath + "css/codemirror.min.css");
648
655
  }
649
656
 
650
657
  if (config.theme.length &&
651
- config.theme != 'default' &&
652
- !IsStyleSheetAlreadyLoaded(rootPath + 'theme/' + config.theme + '.css')) {
653
- CKEDITOR.document.appendStyleSheet(rootPath + 'theme/' + config.theme + '.css');
658
+ config.theme != "default" &&
659
+ !IsStyleSheetAlreadyLoaded(rootPath + "theme/" + config.theme + ".css")) {
660
+ CKEDITOR.document.appendStyleSheet(rootPath + "theme/" + config.theme + ".css");
654
661
  }
655
662
 
656
663
  if (requirePresent) {
657
- require(getCodeMirrorDependencies(), function () {
664
+ pluginRequire(getCodeMirrorDependencies(), function () {
658
665
  loadCodeMirror(editor);
659
666
  callback();
660
667
  });
661
668
  } else {
662
- if (typeof (CodeMirror) == 'undefined') {
669
+ if (typeof (CodeMirror) == "undefined") {
663
670
 
664
- CKEDITOR.scriptLoader.load(rootPath + 'js/codemirror.min.js',
671
+ CKEDITOR.scriptLoader.load(rootPath + "js/codemirror.min.js",
665
672
  function() {
666
673
 
667
674
  CKEDITOR.scriptLoader.load(getCodeMirrorScripts(),
@@ -671,7 +678,7 @@
671
678
  });
672
679
  });
673
680
  } else {
674
- if (CodeMirror.prototype['autoFormatAll']) {
681
+ if (CodeMirror.prototype["autoFormatAll"]) {
675
682
  loadCodeMirror(editor);
676
683
  callback();
677
684
  } else {
@@ -687,127 +694,134 @@
687
694
 
688
695
  });
689
696
  function getCodeMirrorDependencies() {
690
- var dependencies = ['core', 'addons'];
697
+ var dependencies = ["core", "addons"];
691
698
  switch (config.mode) {
692
699
  case "bbcode":
693
700
  case "bbcodemixed":
694
- dependencies.push('modeHtml');
701
+ dependencies.push("modeHtml");
695
702
  break;
696
703
  case "application/x-httpd-php":
697
- dependencies.push('modePHP');
704
+ dependencies.push("modePHP");
698
705
  break;
699
706
  case "text/javascript":
700
- dependencies.push('modeJs');
707
+ dependencies.push("modeJs");
708
+ break;
709
+ case "handlebars":
710
+ dependencies.push("modeHandlebars");
701
711
  break;
702
712
  case "twig":
703
- dependencies.push('modeTwig');
713
+ dependencies.push("modeTwig");
704
714
  break;
705
715
  case "htmlmixed":
706
716
  case "text/html":
707
717
  default:
708
- dependencies.push('modeHtml');
718
+ dependencies.push("modeHtml");
709
719
  }
710
720
 
711
721
  if (config.useBeautifyOnStart) {
712
- dependencies.push('beautifyModule');
722
+ dependencies.push("beautifyModule");
713
723
  }
714
724
 
715
725
  if (config.enableSearchTools) {
716
- dependencies.push('addonSearch');
726
+ dependencies.push("addonSearch");
717
727
  }
718
728
  return dependencies;
719
729
  }
720
730
 
721
731
  function getCodeMirrorScripts() {
722
- var scriptFiles = [rootPath + 'js/codemirror.addons.min.js'];
732
+ var scriptFiles = [rootPath + "js/codemirror.addons.min.js"];
723
733
 
724
734
  switch (config.mode) {
735
+ case 'handlebars':
736
+ {
737
+ scriptFiles.push(rootPath + "js/codemirror.mode.handlebars.min.js");
738
+ }
725
739
  case "bbcode":
726
740
  {
727
- scriptFiles.push(rootPath + 'js/codemirror.mode.bbcode.min.js');
741
+ scriptFiles.push(rootPath + "js/codemirror.mode.bbcode.min.js");
728
742
  }
729
743
 
730
744
  break;
731
745
  case "bbcodemixed":
732
746
  {
733
- scriptFiles.push(rootPath + 'js/codemirror.mode.bbcodemixed.min.js');
747
+ scriptFiles.push(rootPath + "js/codemirror.mode.bbcodemixed.min.js");
734
748
  }
735
749
 
736
750
  break;
737
751
  case "htmlmixed":
738
752
  {
739
- scriptFiles.push(rootPath + 'js/codemirror.mode.htmlmixed.min.js');
753
+ scriptFiles.push(rootPath + "js/codemirror.mode.htmlmixed.min.js");
740
754
  }
741
755
 
742
756
  break;
743
757
  case "text/html":
744
758
  {
745
- scriptFiles.push(rootPath + 'js/codemirror.mode.htmlmixed.min.js');
759
+ scriptFiles.push(rootPath + "js/codemirror.mode.htmlmixed.min.js");
746
760
  }
747
761
 
748
762
  break;
749
763
  case "application/x-httpd-php":
750
764
  {
751
- scriptFiles.push(rootPath + 'js/codemirror.mode.php.min.js');
765
+ scriptFiles.push(rootPath + "js/codemirror.mode.php.min.js");
752
766
  }
753
767
 
754
768
  break;
755
769
  case "text/javascript":
756
770
  {
757
- scriptFiles.push(rootPath + 'js/codemirror.mode.javascript.min.js');
771
+ scriptFiles.push(rootPath + "js/codemirror.mode.javascript.min.js");
758
772
  }
759
773
 
760
774
  break;
761
775
  case "twig":
762
776
  {
763
- scriptFiles.push(rootPath + 'js/codemirror.mode.twig.min.js');
777
+ scriptFiles.push(rootPath + "js/codemirror.mode.twig.min.js");
764
778
  }
765
779
 
766
780
  break;
767
781
  default:
768
- scriptFiles.push(rootPath + 'js/codemirror.mode.htmlmixed.min.js');
782
+ scriptFiles.push(rootPath + "js/codemirror.mode.htmlmixed.min.js");
769
783
  }
770
784
 
771
785
  if (config.useBeautifyOnStart) {
772
- scriptFiles.push(rootPath + 'js/beautify.min.js');
786
+ scriptFiles.push(rootPath + "js/beautify.min.js");
773
787
  }
774
788
 
775
789
  if (config.enableSearchTools) {
776
- scriptFiles.push(rootPath + 'js/codemirror.addons.search.min.js');
790
+ scriptFiles.push(rootPath + "js/codemirror.addons.search.min.js");
777
791
  }
778
792
  return scriptFiles;
779
793
  }
780
794
 
781
795
  function loadCodeMirror(editor) {
782
- var contentsSpace = editor.ui.space('contents'),
783
- textarea = contentsSpace.getDocument().createElement('textarea');
796
+ var contentsSpace = editor.ui.space("contents"),
797
+ textarea = contentsSpace.getDocument().createElement("textarea");
784
798
 
785
799
  textarea.setStyles(
786
800
  CKEDITOR.tools.extend({
787
801
  // IE7 has overflow the <textarea> from wrapping table cell.
788
- width: CKEDITOR.env.ie7Compat ? '99%' : '100%',
789
- height: '100%',
790
- resize: 'none',
791
- outline: 'none',
792
- 'text-align': 'left'
802
+ width: CKEDITOR.env.ie7Compat ? "99%" : "100%",
803
+ height: "100%",
804
+ resize: "none",
805
+ outline: "none",
806
+ 'text-align': "left"
793
807
  },
794
- CKEDITOR.tools.cssVendorPrefix('tab-size', editor.config.sourceAreaTabSize || 4)));
795
- var ariaLabel = [editor.lang.editor, editor.name].join(',');
808
+ CKEDITOR.tools.cssVendorPrefix("tab-size", editor.config.sourceAreaTabSize || 4)));
809
+ var ariaLabel = [editor.lang.editor, editor.name].join(",");
796
810
  textarea.setAttributes({
797
- dir: 'ltr',
811
+ dir: "ltr",
798
812
  tabIndex: CKEDITOR.env.webkit ? -1 : editor.tabIndex,
799
- 'role': 'textbox',
813
+ 'role': "textbox",
800
814
  'aria-label': ariaLabel
801
815
  });
802
- textarea.addClass('cke_source');
803
- textarea.addClass('cke_reset');
804
- textarea.addClass('cke_enable_context_menu');
805
- editor.ui.space('contents').append(textarea);
816
+ textarea.addClass("cke_source");
817
+ textarea.addClass("cke_reset");
818
+ textarea.addClass("cke_enable_context_menu");
819
+ editor.ui.space("contents").append(textarea);
806
820
  window["editable_" + editor.id] = editor.editable(new sourceEditable(editor, textarea));
807
821
  // Fill the textarea with the current editor data.
808
822
  window["editable_" + editor.id].setData(editor.getData(1));
809
823
  window["editable_" + editor.id].editorID = editor.id;
810
- editor.fire('ariaWidget', this);
824
+ editor.fire("ariaWidget", this);
811
825
 
812
826
  var sourceAreaElement = window["editable_" + editor.id],
813
827
  holderElement = sourceAreaElement.getParent();
@@ -867,7 +881,7 @@
867
881
  addCKEditorKeystrokes(extraKeys);
868
882
 
869
883
  window["codemirror_" + editor.id] = CodeMirror.fromTextArea(sourceAreaElement.$, {
870
- mode: config.mode,
884
+ mode: config.mode === "handlebars" ? { name: "handlebars", base: "text/html" } : config.mode,
871
885
  matchBrackets: config.matchBrackets,
872
886
  maxHighlightLineLength: config.maxHighlightLineLength,
873
887
  matchTags: config.matchTags,
@@ -891,16 +905,16 @@
891
905
  gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"]
892
906
  });
893
907
 
894
- var holderHeight = holderElement.$.clientHeight == 0 ? editor.ui.space('contents').getStyle('height') : holderElement.$.clientHeight + 'px';
895
- var holderWidth = holderElement.$.clientWidth + 'px';
908
+ var holderHeight = holderElement.$.clientHeight == 0 ? editor.ui.space("contents").getStyle("height") : holderElement.$.clientHeight + "px";
909
+ var holderWidth = holderElement.$.clientWidth + "px";
896
910
 
897
911
  // Store config so we can access it within commands etc.
898
912
  window["codemirror_" + editor.id].config = config;
899
913
  if (config.autoFormatOnStart) {
900
914
  if (config.useBeautifyOnStart) {
901
915
  var indent_size = 4;
902
- var indent_char = ' ';
903
- var brace_style = 'collapse'; //collapse, expand, end-expand
916
+ var indent_char = " ";
917
+ var brace_style = "collapse"; //collapse, expand, end-expand
904
918
 
905
919
  var source = window["codemirror_" + editor.id].getValue();
906
920
 
@@ -925,7 +939,7 @@
925
939
 
926
940
  window["codemirror_" + editor.id].on("change", function () {
927
941
  window["codemirror_" + editor.id].save();
928
- editor.fire('change', this);
942
+ editor.fire("change", this);
929
943
  });
930
944
 
931
945
  window["codemirror_" + editor.id].setSize(null, holderHeight);
@@ -936,13 +950,13 @@
936
950
  }
937
951
 
938
952
  // Run config.onLoad callback, if present.
939
- if (typeof config.onLoad === 'function') {
953
+ if (typeof config.onLoad === "function") {
940
954
  config.onLoad(window["codemirror_" + editor.id], editor);
941
955
  }
942
956
 
943
957
  // inherit blur event
944
958
  window["codemirror_" + editor.id].on("blur", function () {
945
- editor.fire('blur', this);
959
+ editor.fire("blur", this);
946
960
  });
947
961
 
948
962
  window["codemirror_" + editor.id].on("keypress", function (codeMirror_Editor, evt) {
@@ -964,65 +978,65 @@
964
978
  });
965
979
  }
966
980
 
967
- editor.addCommand('source', sourcearea.commands.source);
981
+ editor.addCommand("source", sourcearea.commands.source);
968
982
  if (editor.ui.addButton) {
969
- editor.ui.addButton('Source', {
983
+ editor.ui.addButton("Source", {
970
984
  label: editor.lang.codemirror.toolbar,
971
- command: 'source',
972
- toolbar: 'mode,10'
985
+ command: "source",
986
+ toolbar: "mode,10"
973
987
  });
974
988
  }
975
989
  if (config.enableCodeFormatting) {
976
- editor.addCommand('searchCode', sourcearea.commands.searchCode);
977
- editor.addCommand('autoFormat', sourcearea.commands.autoFormat);
978
- editor.addCommand('commentSelectedRange', sourcearea.commands.commentSelectedRange);
979
- editor.addCommand('uncommentSelectedRange', sourcearea.commands.uncommentSelectedRange);
980
- editor.addCommand('autoCompleteToggle', sourcearea.commands.autoCompleteToggle);
990
+ editor.addCommand("searchCode", sourcearea.commands.searchCode);
991
+ editor.addCommand("autoFormat", sourcearea.commands.autoFormat);
992
+ editor.addCommand("commentSelectedRange", sourcearea.commands.commentSelectedRange);
993
+ editor.addCommand("uncommentSelectedRange", sourcearea.commands.uncommentSelectedRange);
994
+ editor.addCommand("autoCompleteToggle", sourcearea.commands.autoCompleteToggle);
981
995
 
982
996
  if (editor.ui.addButton) {
983
997
  if (config.showFormatButton || config.showCommentButton || config.showUncommentButton || config.showSearchButton) {
984
- editor.ui.add('-', CKEDITOR.UI_SEPARATOR, { toolbar: 'mode,30' });
998
+ editor.ui.add("-", CKEDITOR.UI_SEPARATOR, { toolbar: "mode,30" });
985
999
  }
986
1000
  if (config.showSearchButton && config.enableSearchTools) {
987
- editor.ui.addButton('searchCode', {
1001
+ editor.ui.addButton("searchCode", {
988
1002
  label: lang.searchCode,
989
- command: 'searchCode',
990
- toolbar: 'mode,40'
1003
+ command: "searchCode",
1004
+ toolbar: "mode,40"
991
1005
  });
992
1006
  }
993
1007
  if (config.showFormatButton) {
994
- editor.ui.addButton('autoFormat', {
1008
+ editor.ui.addButton("autoFormat", {
995
1009
  label: lang.autoFormat,
996
- command: 'autoFormat',
997
- toolbar: 'mode,50'
1010
+ command: "autoFormat",
1011
+ toolbar: "mode,50"
998
1012
  });
999
1013
  }
1000
1014
  if (config.showCommentButton) {
1001
- editor.ui.addButton('CommentSelectedRange', {
1015
+ editor.ui.addButton("CommentSelectedRange", {
1002
1016
  label: lang.commentSelectedRange,
1003
- command: 'commentSelectedRange',
1004
- toolbar: 'mode,60'
1017
+ command: "commentSelectedRange",
1018
+ toolbar: "mode,60"
1005
1019
  });
1006
1020
  }
1007
1021
  if (config.showUncommentButton) {
1008
- editor.ui.addButton('UncommentSelectedRange', {
1022
+ editor.ui.addButton("UncommentSelectedRange", {
1009
1023
  label: lang.uncommentSelectedRange,
1010
- command: 'uncommentSelectedRange',
1011
- toolbar: 'mode,70'
1024
+ command: "uncommentSelectedRange",
1025
+ toolbar: "mode,70"
1012
1026
  });
1013
1027
  }
1014
1028
  if (config.showAutoCompleteButton) {
1015
- editor.ui.addButton('AutoComplete', {
1029
+ editor.ui.addButton("AutoComplete", {
1016
1030
  label: lang.autoCompleteToggle,
1017
- command: 'autoCompleteToggle',
1018
- toolbar: 'mode,80'
1031
+ command: "autoCompleteToggle",
1032
+ toolbar: "mode,80"
1019
1033
  });
1020
1034
  }
1021
1035
  }
1022
1036
  }
1023
1037
 
1024
- editor.on('beforeModeUnload', function (evt) {
1025
- if (editor.mode === 'source' && editor.plugins.textselection && !editor.config.fullPage) {
1038
+ editor.on("beforeModeUnload", function (evt) {
1039
+ if (editor.mode === "source" && editor.plugins.textselection && !editor.config.fullPage) {
1026
1040
 
1027
1041
  var range = editor.getTextSelection();
1028
1042
 
@@ -1041,11 +1055,11 @@
1041
1055
  evt.data = range.content;
1042
1056
  }
1043
1057
  });
1044
- editor.on('mode', function () {
1045
- editor.getCommand('source').setState(editor.mode === 'source' ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF);
1058
+ editor.on("mode", function () {
1059
+ editor.getCommand("source").setState(editor.mode === "source" ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF);
1046
1060
 
1047
- if (editor.mode === 'source') {
1048
- editor.getCommand('autoCompleteToggle').setState(window["codemirror_" + editor.id].config.autoCloseTags ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF);
1061
+ if (editor.mode === "source") {
1062
+ editor.getCommand("autoCompleteToggle").setState(window["codemirror_" + editor.id].config.autoCloseTags ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF);
1049
1063
 
1050
1064
  if (editor.plugins.textselection && textRange && !editor.config.fullPage) {
1051
1065
 
@@ -1056,7 +1070,7 @@
1056
1070
 
1057
1071
  start = OffSetToLineChannel(window["codemirror_" + editor.id], textRange.startOffset);
1058
1072
 
1059
- if (typeof (textRange.endOffset) == 'undefined') {
1073
+ if (typeof (textRange.endOffset) == "undefined") {
1060
1074
  window["codemirror_" + editor.id].focus();
1061
1075
  window["codemirror_" + editor.id].setCursor(start);
1062
1076
  } else {
@@ -1068,22 +1082,22 @@
1068
1082
  }
1069
1083
 
1070
1084
  });
1071
- editor.on('resize', function() {
1072
- if (window["editable_" + editor.id] && editor.mode === 'source') {
1085
+ editor.on("resize", function() {
1086
+ if (window["editable_" + editor.id] && editor.mode === "source") {
1073
1087
  var holderElement = window["editable_" + editor.id].getParent();
1074
- var holderHeight = holderElement.$.clientHeight + 'px';
1075
- var holderWidth = holderElement.$.clientWidth + 'px';
1088
+ var holderHeight = holderElement.$.clientHeight + "px";
1089
+ var holderWidth = holderElement.$.clientWidth + "px";
1076
1090
  window["codemirror_" + editor.id].setSize(holderWidth, holderHeight);
1077
1091
  }
1078
1092
  });
1079
1093
 
1080
- editor.on('readOnly', function () {
1081
- if (window["editable_" + editor.id] && editor.mode === 'source') {
1094
+ editor.on("readOnly", function () {
1095
+ if (window["editable_" + editor.id] && editor.mode === "source") {
1082
1096
  window["codemirror_" + editor.id].setOption("readOnly", this.readOnly);
1083
1097
  }
1084
1098
  });
1085
1099
 
1086
- editor.on('instanceReady', function (evt) {
1100
+ editor.on("instanceReady", function (evt) {
1087
1101
 
1088
1102
  //editor.container.getPrivate().events.contextmenu.listeners.splice(0, 1);
1089
1103
 
@@ -1092,7 +1106,7 @@
1092
1106
  // Replace Complete SelectAll command from the plugin, otherwise it will not work in IE10
1093
1107
  if (selectAllCommand != null) {
1094
1108
  selectAllCommand.exec = function () {
1095
- if (editor.mode === 'source') {
1109
+ if (editor.mode === "source") {
1096
1110
  window["codemirror_" + editor.id].setSelection({
1097
1111
  line: 0,
1098
1112
  ch: 0
@@ -1102,8 +1116,8 @@
1102
1116
  });
1103
1117
  } else {
1104
1118
  var editable = editor.editable();
1105
- if (editable.is('body'))
1106
- editor.document.$.execCommand('SelectAll', false, null);
1119
+ if (editable.is("body"))
1120
+ editor.document.$.execCommand("SelectAll", false, null);
1107
1121
  else {
1108
1122
  var range = editor.createRange();
1109
1123
  range.selectNodeContents(editable);
@@ -1118,15 +1132,15 @@
1118
1132
  }
1119
1133
  });
1120
1134
 
1121
- if (typeof (jQuery) != 'undefined' && jQuery('a[data-toggle="tab"]') && window["codemirror_" + editor.id]) {
1122
- jQuery('a[data-toggle="tab"]').on('shown.bs.tab', function() {
1135
+ if (typeof (jQuery) != "undefined" && jQuery('a[data-toggle="tab"]') && window["codemirror_" + editor.id]) {
1136
+ jQuery('a[data-toggle="tab"]').on("shown.bs.tab", function() {
1123
1137
  window["codemirror_" + editor.id].refresh();
1124
1138
  });
1125
1139
  }
1126
1140
 
1127
- editor.on('setData', function(data) {
1141
+ editor.on("setData", function(data) {
1128
1142
 
1129
- if (window["editable_" + data.editor.id] && data.editor.mode === 'source') {
1143
+ if (window["editable_" + data.editor.id] && data.editor.mode === "source") {
1130
1144
  window["codemirror_" + data.editor.id].setValue(data.data.dataValue);
1131
1145
  }
1132
1146
  });
@@ -1139,11 +1153,11 @@
1139
1153
 
1140
1154
  this.setValue(data);
1141
1155
 
1142
- if (window["editable_" + this.editor.id] && this.editor.mode === 'source') {
1156
+ if (window["editable_" + this.editor.id] && this.editor.mode === "source") {
1143
1157
  window["codemirror_" + this.editor.id].setValue(data);
1144
1158
  }
1145
1159
 
1146
- this.editor.fire('dataReady');
1160
+ this.editor.fire("dataReady");
1147
1161
  },
1148
1162
  getData: function() {
1149
1163
  return this.getValue();
@@ -1157,7 +1171,7 @@
1157
1171
  },
1158
1172
  // Read-only support for textarea.
1159
1173
  setReadOnly: function(isReadOnly) {
1160
- this[(isReadOnly ? 'set' : 'remove') + 'Attribute']('readOnly', 'readonly');
1174
+ this[(isReadOnly ? "set" : "remove") + "Attribute"]("readOnly", "readonly");
1161
1175
  },
1162
1176
  editorID: null,
1163
1177
  detach: function() {
@@ -1185,12 +1199,12 @@ CKEDITOR.plugins.sourcearea = {
1185
1199
  editorFocus: false,
1186
1200
  readOnly: 1,
1187
1201
  exec: function(editor) {
1188
- if (editor.mode === 'wysiwyg') {
1189
- editor.fire('saveSnapshot');
1202
+ if (editor.mode === "wysiwyg") {
1203
+ editor.fire("saveSnapshot");
1190
1204
  }
1191
1205
 
1192
- editor.getCommand('source').setState(CKEDITOR.TRISTATE_DISABLED);
1193
- editor.setMode(editor.mode === 'source' ? 'wysiwyg' : 'source');
1206
+ editor.getCommand("source").setState(CKEDITOR.TRISTATE_DISABLED);
1207
+ editor.setMode(editor.mode === "source" ? "wysiwyg" : "source");
1194
1208
  },
1195
1209
  canUndo: false
1196
1210
  },
@@ -1213,7 +1227,7 @@ CKEDITOR.plugins.sourcearea = {
1213
1227
  },
1214
1228
  editorFocus: false,
1215
1229
  readOnly: 0,
1216
- exec: function (editor) {
1230
+ exec: function(editor) {
1217
1231
  var range = {
1218
1232
  from: window["codemirror_" + editor.id].getCursor(true),
1219
1233
  to: window["codemirror_" + editor.id].getCursor(false)
@@ -1229,7 +1243,7 @@ CKEDITOR.plugins.sourcearea = {
1229
1243
  },
1230
1244
  editorFocus: false,
1231
1245
  readOnly: 0,
1232
- exec: function (editor) {
1246
+ exec: function(editor) {
1233
1247
  var range = {
1234
1248
  from: window["codemirror_" + editor.id].getCursor(true),
1235
1249
  to: window["codemirror_" + editor.id].getCursor(false)
@@ -1266,7 +1280,7 @@ CKEDITOR.plugins.sourcearea = {
1266
1280
  },
1267
1281
  editorFocus: false,
1268
1282
  readOnly: 1,
1269
- exec: function (editor) {
1283
+ exec: function(editor) {
1270
1284
  if (this.state == CKEDITOR.TRISTATE_ON) {
1271
1285
  window["codemirror_" + editor.id].setOption("autoCloseTags", false);
1272
1286
  } else if (this.state == CKEDITOR.TRISTATE_OFF) {
@@ -1308,4 +1322,4 @@ function OffSetToLineChannel(ed, n) {
1308
1322
 
1309
1323
  function IsStyleSheetAlreadyLoaded(href) {
1310
1324
  return CKEDITOR.document.getHead().findOne('link[href="' + href + '"]') != null;
1311
- }
1325
+ }