promethee 1.4.8 → 1.4.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (476) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -6
  3. data/app/assets/javascripts/promethee.js +4 -0
  4. data/app/assets/stylesheets/promethee-edit.sass +1 -0
  5. data/config/initializers/assets.rb +1 -0
  6. data/lib/promethee/rails/version.rb +1 -1
  7. data/node_modules/angular-summernote/CHANGELOG.md +149 -0
  8. data/node_modules/angular-summernote/LICENSE-MIT +22 -0
  9. data/node_modules/angular-summernote/README.md +270 -0
  10. data/node_modules/angular-summernote/bower.json +49 -0
  11. data/{vendor/assets/javascripts → node_modules/angular-summernote/dist}/angular-summernote.js +0 -0
  12. data/node_modules/angular-summernote/dist/angular-summernote.min.js +2 -0
  13. data/node_modules/angular-summernote/examples/fontstyle-plugin.html +48 -0
  14. data/node_modules/angular-summernote/examples/index.html +180 -0
  15. data/node_modules/angular-summernote/examples/index2.html +60 -0
  16. data/node_modules/angular-summernote/examples/index3.html +57 -0
  17. data/node_modules/angular-summernote/gulpfile.js +115 -0
  18. data/node_modules/angular-summernote/package.json +53 -0
  19. data/node_modules/angular-summernote/src/angular-summernote.js +206 -0
  20. data/node_modules/angular-summernote/test/angular-summernote.test.js +660 -0
  21. data/node_modules/angular-summernote/test/chai.conf.js +6 -0
  22. data/node_modules/angular-summernote/test/coverage/Chrome 37.0.2062 (Mac OS X 10.9.4)/index.html +350 -0
  23. data/node_modules/angular-summernote/test/coverage/Chrome 37.0.2062 (Mac OS X 10.9.4)/prettify.css +1 -0
  24. data/node_modules/angular-summernote/test/coverage/Chrome 37.0.2062 (Mac OS X 10.9.4)/prettify.js +1 -0
  25. data/node_modules/angular-summernote/test/coverage/Chrome 37.0.2062 (Mac OS X 10.9.4)/src/angular-summernote.js.html +694 -0
  26. data/node_modules/angular-summernote/test/coverage/Chrome 37.0.2062 (Mac OS X 10.9.4)/src/index.html +350 -0
  27. data/node_modules/angular-summernote/test/karma-angular-1-2-x.conf.js +33 -0
  28. data/node_modules/angular-summernote/test/karma-angular-1-3-x.conf.js +33 -0
  29. data/node_modules/angular-summernote/test/karma-angular-1-4-x.conf.js +33 -0
  30. data/node_modules/angular-summernote/test/karma-shared.conf.js +64 -0
  31. data/node_modules/angular-summernote/test/karma.conf.js +33 -0
  32. data/{vendor/assets/javascripts/summernote/locales/de-DE.js → node_modules/angular-summernote/test/lang/summernote-de-DE.js} +2 -17
  33. data/node_modules/angular-summernote/test/mocha.conf.js +3 -0
  34. data/node_modules/angular-ui-sortable/API.md +84 -0
  35. data/node_modules/angular-ui-sortable/CONTRIBUTING.md +12 -0
  36. data/node_modules/angular-ui-sortable/LICENSE +21 -0
  37. data/node_modules/angular-ui-sortable/README.md +350 -0
  38. data/node_modules/angular-ui-sortable/bower.json +26 -0
  39. data/node_modules/angular-ui-sortable/demo/demo.css +34 -0
  40. data/node_modules/angular-ui-sortable/demo/demo.html +29 -0
  41. data/node_modules/angular-ui-sortable/demo/demo.js +41 -0
  42. data/node_modules/angular-ui-sortable/dist/sortable.js +593 -0
  43. data/node_modules/angular-ui-sortable/dist/sortable.min.js +8 -0
  44. data/node_modules/angular-ui-sortable/gruntFile.js +202 -0
  45. data/node_modules/angular-ui-sortable/package.json +48 -0
  46. data/node_modules/angular-ui-sortable/publish.js +41 -0
  47. data/{vendor/assets/javascripts/ui-sortable.js → node_modules/angular-ui-sortable/src/sortable.js} +106 -200
  48. data/node_modules/angular-ui-sortable/test/bower_overrides.json +13 -0
  49. data/node_modules/angular-ui-sortable/test/karma.conf.js +85 -0
  50. data/node_modules/angular-ui-sortable/test/libs/jquery.simulate.dragandrevert.js +60 -0
  51. data/node_modules/angular-ui-sortable/test/sortable.e2e.callbacks.attr.spec.js +199 -0
  52. data/node_modules/angular-ui-sortable/test/sortable.e2e.callbacks.spec.js +729 -0
  53. data/node_modules/angular-ui-sortable/test/sortable.e2e.directiveoptions.spec.js +554 -0
  54. data/node_modules/angular-ui-sortable/test/sortable.e2e.directives.spec.js +371 -0
  55. data/node_modules/angular-ui-sortable/test/sortable.e2e.events.spec.js +167 -0
  56. data/node_modules/angular-ui-sortable/test/sortable.e2e.multi.spec.js +1232 -0
  57. data/node_modules/angular-ui-sortable/test/sortable.e2e.nested.spec.js +186 -0
  58. data/node_modules/angular-ui-sortable/test/sortable.e2e.spec.js +895 -0
  59. data/node_modules/angular-ui-sortable/test/sortable.spec.js +440 -0
  60. data/node_modules/angular-ui-sortable/test/sortable.test-directives.js +54 -0
  61. data/node_modules/angular-ui-sortable/test/sortable.test-helper.js +114 -0
  62. data/node_modules/angular-ui-sortable/test/sortable.tests.css +12 -0
  63. data/node_modules/ng-file-upload/LICENSE +20 -0
  64. data/node_modules/ng-file-upload/README.md +616 -0
  65. data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/FileAPI.flash.swf +0 -0
  66. data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/FileAPI.js +0 -0
  67. data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/FileAPI.min.js +0 -0
  68. data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/ng-file-upload-all.js +0 -0
  69. data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/ng-file-upload-all.min.js +0 -0
  70. data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/ng-file-upload-shim.js +0 -0
  71. data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/ng-file-upload-shim.min.js +0 -0
  72. data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/ng-file-upload.js +0 -0
  73. data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/ng-file-upload.min.js +0 -0
  74. data/node_modules/ng-file-upload/index.js +2 -0
  75. data/node_modules/ng-file-upload/package.json +42 -0
  76. data/node_modules/summernote/CODE_OF_CONDUCT.md +46 -0
  77. data/node_modules/summernote/CONTRIBUTING.md +67 -0
  78. data/node_modules/summernote/ISSUE_TEMPLATE.md +14 -0
  79. data/node_modules/summernote/LICENSE +21 -0
  80. data/node_modules/summernote/PULL_REQUEST_TEMPLATE.md +28 -0
  81. data/node_modules/summernote/README.md +90 -0
  82. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/base.css +213 -0
  83. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/index.html +262 -0
  84. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/prettify.css +1 -0
  85. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/prettify.js +1 -0
  86. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/sort-arrow-sprite.png +0 -0
  87. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/sorter.js +158 -0
  88. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/Context.js.html +758 -0
  89. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/async.js.html +206 -0
  90. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/dom.js.html +3329 -0
  91. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/env.js.html +386 -0
  92. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/func.js.html +551 -0
  93. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/index.html +171 -0
  94. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/key.js.html +341 -0
  95. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/lists.js.html +695 -0
  96. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/range.js.html +2441 -0
  97. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/Bullet.js.html +668 -0
  98. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/History.js.html +380 -0
  99. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/Style.js.html +539 -0
  100. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/Table.js.html +1787 -0
  101. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/Typing.js.html +335 -0
  102. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/index.html +145 -0
  103. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/index.html +119 -0
  104. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/AirPopover.js.html +284 -0
  105. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/AutoLink.js.html +248 -0
  106. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/AutoSync.js.html +122 -0
  107. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Buttons.js.html +2504 -0
  108. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Clipboard.js.html +149 -0
  109. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Codeview.js.html +434 -0
  110. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Dropzone.js.html +410 -0
  111. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Editor.js.html +2648 -0
  112. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Fullscreen.js.html +218 -0
  113. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Handle.js.html +494 -0
  114. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/HelpDialog.js.html +302 -0
  115. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/HintPopover.js.html +743 -0
  116. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/ImageDialog.js.html +458 -0
  117. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/ImagePopover.js.html +239 -0
  118. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/LinkDialog.js.html +587 -0
  119. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/LinkPopover.js.html +272 -0
  120. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Placeholder.js.html +182 -0
  121. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Statusbar.js.html +191 -0
  122. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/TablePopover.js.html +278 -0
  123. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Toolbar.js.html +473 -0
  124. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/VideoDialog.js.html +680 -0
  125. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/index.html +353 -0
  126. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/renderer.js.html +263 -0
  127. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/summernote-en-US.js.html +542 -0
  128. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs3/index.html +106 -0
  129. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs3/settings.js.html +956 -0
  130. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs3/ui.js.html +776 -0
  131. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs4/index.html +106 -0
  132. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs4/settings.js.html +968 -0
  133. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs4/ui.js.html +791 -0
  134. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/index.html +93 -0
  135. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/index.html +106 -0
  136. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/settings.js.html +953 -0
  137. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui.js.html +1919 -0
  138. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/DropdownUI.js.html +260 -0
  139. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/ModalUI.js.html +167 -0
  140. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/PopoverUI.js.html +347 -0
  141. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/TooltipUI.js.html +344 -0
  142. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/index.html +132 -0
  143. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/summernote.js.html +203 -0
  144. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/Context.spec.js.html +323 -0
  145. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/dom.spec.js.html +1046 -0
  146. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/func.spec.js.html +482 -0
  147. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/index.html +145 -0
  148. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/key.spec.js.html +140 -0
  149. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/lists.spec.js.html +419 -0
  150. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/range.spec.js.html +1286 -0
  151. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/editing/Table.spec.js.html +1724 -0
  152. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/editing/index.html +106 -0
  153. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/editing/style.spec.js.html +341 -0
  154. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/index.html +93 -0
  155. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/module/Codeview.spec.js.html +161 -0
  156. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/module/Editor.spec.js.html +1235 -0
  157. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/module/Fullscreen.spec.js.html +161 -0
  158. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/module/index.html +119 -0
  159. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/bs/module/Buttons.spec.js.html +770 -0
  160. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/bs/module/VideoDialog.spec.js.html +209 -0
  161. data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/bs/module/index.html +106 -0
  162. data/node_modules/summernote/dist/font/summernote.eot +0 -0
  163. data/node_modules/summernote/dist/font/summernote.ttf +0 -0
  164. data/node_modules/summernote/dist/font/summernote.woff +0 -0
  165. data/{vendor/assets/javascripts/summernote/locales/ar-AR.js → node_modules/summernote/dist/lang/summernote-ar-AR.js} +55 -4
  166. data/node_modules/summernote/dist/lang/summernote-ar-AR.min.js +3 -0
  167. data/{vendor/assets/javascripts/summernote/locales/bg-BG.js → node_modules/summernote/dist/lang/summernote-bg-BG.js} +60 -4
  168. data/node_modules/summernote/dist/lang/summernote-bg-BG.min.js +3 -0
  169. data/{vendor/assets/javascripts/summernote/locales/ca-ES.js → node_modules/summernote/dist/lang/summernote-ca-ES.js} +12 -4
  170. data/node_modules/summernote/dist/lang/summernote-ca-ES.min.js +3 -0
  171. data/{vendor/assets/javascripts/summernote/locales/cs-CZ.js → node_modules/summernote/dist/lang/summernote-cs-CZ.js} +50 -4
  172. data/node_modules/summernote/dist/lang/summernote-cs-CZ.min.js +3 -0
  173. data/{vendor/assets/javascripts/summernote/locales/da-DK.js → node_modules/summernote/dist/lang/summernote-da-DK.js} +46 -5
  174. data/node_modules/summernote/dist/lang/summernote-da-DK.min.js +3 -0
  175. data/node_modules/summernote/dist/lang/summernote-de-DE.js +154 -0
  176. data/node_modules/summernote/dist/lang/summernote-de-DE.min.js +3 -0
  177. data/{vendor/assets/javascripts/summernote/locales/el-GR.js → node_modules/summernote/dist/lang/summernote-el-GR.js} +11 -3
  178. data/node_modules/summernote/dist/lang/summernote-el-GR.min.js +3 -0
  179. data/{vendor/assets/javascripts/summernote/locales/es-ES.js → node_modules/summernote/dist/lang/summernote-es-ES.js} +12 -4
  180. data/node_modules/summernote/dist/lang/summernote-es-ES.min.js +3 -0
  181. data/{vendor/assets/javascripts/summernote/locales/es-EU.js → node_modules/summernote/dist/lang/summernote-es-EU.js} +55 -4
  182. data/node_modules/summernote/dist/lang/summernote-es-EU.min.js +3 -0
  183. data/{vendor/assets/javascripts/summernote/locales/fa-IR.js → node_modules/summernote/dist/lang/summernote-fa-IR.js} +55 -5
  184. data/node_modules/summernote/dist/lang/summernote-fa-IR.min.js +3 -0
  185. data/{vendor/assets/javascripts/summernote/locales/fi-FI.js → node_modules/summernote/dist/lang/summernote-fi-FI.js} +52 -3
  186. data/node_modules/summernote/dist/lang/summernote-fi-FI.min.js +3 -0
  187. data/{vendor/assets/javascripts/summernote/locales/fr-FR.js → node_modules/summernote/dist/lang/summernote-fr-FR.js} +3 -2
  188. data/node_modules/summernote/dist/lang/summernote-fr-FR.min.js +3 -0
  189. data/{vendor/assets/javascripts/summernote/locales/gl-ES.js → node_modules/summernote/dist/lang/summernote-gl-ES.js} +12 -4
  190. data/node_modules/summernote/dist/lang/summernote-gl-ES.min.js +3 -0
  191. data/{vendor/assets/javascripts/summernote/locales/he-IL.js → node_modules/summernote/dist/lang/summernote-he-IL.js} +51 -3
  192. data/node_modules/summernote/dist/lang/summernote-he-IL.min.js +3 -0
  193. data/{vendor/assets/javascripts/summernote/locales/hr-HR.js → node_modules/summernote/dist/lang/summernote-hr-HR.js} +54 -3
  194. data/node_modules/summernote/dist/lang/summernote-hr-HR.min.js +3 -0
  195. data/{vendor/assets/javascripts/summernote/locales/hu-HU.js → node_modules/summernote/dist/lang/summernote-hu-HU.js} +25 -5
  196. data/node_modules/summernote/dist/lang/summernote-hu-HU.min.js +3 -0
  197. data/{vendor/assets/javascripts/summernote/locales/id-ID.js → node_modules/summernote/dist/lang/summernote-id-ID.js} +56 -4
  198. data/node_modules/summernote/dist/lang/summernote-id-ID.min.js +3 -0
  199. data/{vendor/assets/javascripts/summernote/locales/it-IT.js → node_modules/summernote/dist/lang/summernote-it-IT.js} +55 -4
  200. data/node_modules/summernote/dist/lang/summernote-it-IT.min.js +3 -0
  201. data/{vendor/assets/javascripts/summernote/locales/ja-JP.js → node_modules/summernote/dist/lang/summernote-ja-JP.js} +32 -10
  202. data/node_modules/summernote/dist/lang/summernote-ja-JP.min.js +3 -0
  203. data/{vendor/assets/javascripts/summernote/locales/ko-KR.js → node_modules/summernote/dist/lang/summernote-ko-KR.js} +44 -4
  204. data/node_modules/summernote/dist/lang/summernote-ko-KR.min.js +3 -0
  205. data/{vendor/assets/javascripts/summernote/locales/lt-LT.js → node_modules/summernote/dist/lang/summernote-lt-LT.js} +52 -4
  206. data/node_modules/summernote/dist/lang/summernote-lt-LT.min.js +3 -0
  207. data/{vendor/assets/javascripts/summernote/locales/lt-LV.js → node_modules/summernote/dist/lang/summernote-lt-LV.js} +27 -7
  208. data/node_modules/summernote/dist/lang/summernote-lt-LV.min.js +3 -0
  209. data/{vendor/assets/javascripts/summernote/locales/mn-MN.js → node_modules/summernote/dist/lang/summernote-mn-MN.js} +43 -4
  210. data/node_modules/summernote/dist/lang/summernote-mn-MN.min.js +3 -0
  211. data/{vendor/assets/javascripts/summernote/locales/nb-NO.js → node_modules/summernote/dist/lang/summernote-nb-NO.js} +53 -3
  212. data/node_modules/summernote/dist/lang/summernote-nb-NO.min.js +3 -0
  213. data/{vendor/assets/javascripts/summernote/locales/nl-NL.js → node_modules/summernote/dist/lang/summernote-nl-NL.js} +55 -4
  214. data/node_modules/summernote/dist/lang/summernote-nl-NL.min.js +3 -0
  215. data/{vendor/assets/javascripts/summernote/locales/pl-PL.js → node_modules/summernote/dist/lang/summernote-pl-PL.js} +46 -3
  216. data/node_modules/summernote/dist/lang/summernote-pl-PL.min.js +3 -0
  217. data/{vendor/assets/javascripts/summernote/locales/pt-BR.js → node_modules/summernote/dist/lang/summernote-pt-BR.js} +25 -8
  218. data/node_modules/summernote/dist/lang/summernote-pt-BR.min.js +3 -0
  219. data/{vendor/assets/javascripts/summernote/locales/pt-PT.js → node_modules/summernote/dist/lang/summernote-pt-PT.js} +54 -3
  220. data/node_modules/summernote/dist/lang/summernote-pt-PT.min.js +3 -0
  221. data/node_modules/summernote/dist/lang/summernote-ro-RO.js +155 -0
  222. data/node_modules/summernote/dist/lang/summernote-ro-RO.min.js +3 -0
  223. data/{vendor/assets/javascripts/summernote/locales/ru-RU.js → node_modules/summernote/dist/lang/summernote-ru-RU.js} +46 -3
  224. data/node_modules/summernote/dist/lang/summernote-ru-RU.min.js +3 -0
  225. data/{vendor/assets/javascripts/summernote/locales/sk-SK.js → node_modules/summernote/dist/lang/summernote-sk-SK.js} +54 -3
  226. data/node_modules/summernote/dist/lang/summernote-sk-SK.min.js +3 -0
  227. data/{vendor/assets/javascripts/summernote/locales/sl-SI.js → node_modules/summernote/dist/lang/summernote-sl-SI.js} +53 -4
  228. data/node_modules/summernote/dist/lang/summernote-sl-SI.min.js +3 -0
  229. data/{vendor/assets/javascripts/summernote/locales/sr-RS-Latin.js → node_modules/summernote/dist/lang/summernote-sr-RS-Latin.js} +54 -3
  230. data/node_modules/summernote/dist/lang/summernote-sr-RS-Latin.min.js +3 -0
  231. data/{vendor/assets/javascripts/summernote/locales/sr-RS.js → node_modules/summernote/dist/lang/summernote-sr-RS.js} +54 -3
  232. data/node_modules/summernote/dist/lang/summernote-sr-RS.min.js +3 -0
  233. data/{vendor/assets/javascripts/summernote/locales/sv-SE.js → node_modules/summernote/dist/lang/summernote-sv-SE.js} +55 -4
  234. data/node_modules/summernote/dist/lang/summernote-sv-SE.min.js +3 -0
  235. data/{vendor/assets/javascripts/summernote/locales/ta-IN.js → node_modules/summernote/dist/lang/summernote-ta-IN.js} +46 -4
  236. data/node_modules/summernote/dist/lang/summernote-ta-IN.min.js +3 -0
  237. data/node_modules/summernote/dist/lang/summernote-th-TH.js +155 -0
  238. data/node_modules/summernote/dist/lang/summernote-th-TH.min.js +3 -0
  239. data/{vendor/assets/javascripts/summernote/locales/tr-TR.js → node_modules/summernote/dist/lang/summernote-tr-TR.js} +3 -2
  240. data/node_modules/summernote/dist/lang/summernote-tr-TR.min.js +3 -0
  241. data/{vendor/assets/javascripts/summernote/locales/uk-UA.js → node_modules/summernote/dist/lang/summernote-uk-UA.js} +48 -4
  242. data/node_modules/summernote/dist/lang/summernote-uk-UA.min.js +3 -0
  243. data/node_modules/summernote/dist/lang/summernote-uz-UZ.js +112 -0
  244. data/node_modules/summernote/dist/lang/summernote-uz-UZ.min.js +3 -0
  245. data/{vendor/assets/javascripts/summernote/locales/vi-VN.js → node_modules/summernote/dist/lang/summernote-vi-VN.js} +55 -4
  246. data/node_modules/summernote/dist/lang/summernote-vi-VN.min.js +3 -0
  247. data/{vendor/assets/javascripts/summernote/locales/zh-CN.js → node_modules/summernote/dist/lang/summernote-zh-CN.js} +20 -7
  248. data/node_modules/summernote/dist/lang/summernote-zh-CN.min.js +3 -0
  249. data/{vendor/assets/javascripts/summernote/locales/zh-TW.js → node_modules/summernote/dist/lang/summernote-zh-TW.js} +45 -3
  250. data/node_modules/summernote/dist/lang/summernote-zh-TW.min.js +3 -0
  251. data/node_modules/summernote/dist/summernote-0.8.10-dist.zip +0 -0
  252. data/node_modules/summernote/dist/summernote-bs4.css +1 -0
  253. data/node_modules/summernote/dist/summernote-bs4.js +7323 -0
  254. data/node_modules/summernote/dist/summernote-bs4.js.map +1 -0
  255. data/node_modules/summernote/dist/summernote-bs4.min.js +3 -0
  256. data/node_modules/summernote/dist/summernote-lite.css +1 -0
  257. data/node_modules/summernote/dist/summernote-lite.js +7837 -0
  258. data/node_modules/summernote/dist/summernote-lite.js.map +1 -0
  259. data/node_modules/summernote/dist/summernote.css +1 -0
  260. data/node_modules/summernote/dist/summernote.js +7315 -0
  261. data/node_modules/summernote/dist/summernote.js.map +1 -0
  262. data/node_modules/summernote/dist/summernote.min.js +3 -0
  263. data/node_modules/summernote/examples/airmode.html +35 -0
  264. data/node_modules/summernote/examples/bs3.html +60 -0
  265. data/node_modules/summernote/examples/bs4.html +57 -0
  266. data/node_modules/summernote/examples/codemirror.html +45 -0
  267. data/node_modules/summernote/examples/external-api.html +76 -0
  268. data/node_modules/summernote/examples/hint-emoji.html +61 -0
  269. data/node_modules/summernote/examples/hint-symbols_mathematical-symbols_Greek-letters.html +54 -0
  270. data/node_modules/summernote/examples/hint-userdefine.html +48 -0
  271. data/node_modules/summernote/examples/ie8.html +32 -0
  272. data/node_modules/summernote/examples/jquery-custom-event.html +119 -0
  273. data/node_modules/summernote/examples/jquery19lt.html +25 -0
  274. data/node_modules/summernote/examples/lang.html +33 -0
  275. data/node_modules/summernote/examples/link-blank.html +33 -0
  276. data/node_modules/summernote/examples/lite.html +24 -0
  277. data/node_modules/summernote/examples/nativestyle.html +32 -0
  278. data/node_modules/summernote/examples/ondialog-multitab.html +77 -0
  279. data/node_modules/summernote/examples/ondialog.html +58 -0
  280. data/node_modules/summernote/examples/plugin-hello.html +37 -0
  281. data/node_modules/summernote/examples/rtl.html +32 -0
  282. data/node_modules/summernote/examples/symbols_mathematical-symbols_Greek-letters.json +1118 -0
  283. data/node_modules/summernote/examples/textarea.html +46 -0
  284. data/node_modules/summernote/examples/toolbar-container.html +35 -0
  285. data/node_modules/summernote/examples/with-google-font.html +50 -0
  286. data/node_modules/summernote/index.html +33 -0
  287. data/node_modules/summernote/karma.conf.js +42 -0
  288. data/node_modules/summernote/lang/summernote-ar-AR.js +155 -0
  289. data/node_modules/summernote/lang/summernote-bg-BG.js +155 -0
  290. data/node_modules/summernote/lang/summernote-ca-ES.js +155 -0
  291. data/node_modules/summernote/lang/summernote-cs-CZ.js +149 -0
  292. data/node_modules/summernote/lang/summernote-da-DK.js +155 -0
  293. data/node_modules/summernote/lang/summernote-de-DE.js +154 -0
  294. data/node_modules/summernote/lang/summernote-el-GR.js +155 -0
  295. data/node_modules/summernote/lang/summernote-es-ES.js +155 -0
  296. data/node_modules/summernote/lang/summernote-es-EU.js +154 -0
  297. data/node_modules/summernote/lang/summernote-fa-IR.js +155 -0
  298. data/node_modules/summernote/lang/summernote-fi-FI.js +153 -0
  299. data/node_modules/summernote/lang/summernote-fr-FR.js +155 -0
  300. data/node_modules/summernote/lang/summernote-gl-ES.js +155 -0
  301. data/node_modules/summernote/lang/summernote-he-IL.js +155 -0
  302. data/node_modules/summernote/lang/summernote-hr-HR.js +155 -0
  303. data/node_modules/summernote/lang/summernote-hu-HU.js +155 -0
  304. data/node_modules/summernote/lang/summernote-id-ID.js +155 -0
  305. data/node_modules/summernote/lang/summernote-it-IT.js +155 -0
  306. data/node_modules/summernote/lang/summernote-ja-JP.js +155 -0
  307. data/node_modules/summernote/lang/summernote-ko-KR.js +155 -0
  308. data/node_modules/summernote/lang/summernote-lt-LT.js +155 -0
  309. data/node_modules/summernote/lang/summernote-lt-LV.js +155 -0
  310. data/node_modules/summernote/lang/summernote-mn-MN.js +157 -0
  311. data/node_modules/summernote/lang/summernote-nb-NO.js +154 -0
  312. data/node_modules/summernote/lang/summernote-nl-NL.js +155 -0
  313. data/node_modules/summernote/lang/summernote-pl-PL.js +155 -0
  314. data/node_modules/summernote/lang/summernote-pt-BR.js +155 -0
  315. data/node_modules/summernote/lang/summernote-pt-PT.js +154 -0
  316. data/node_modules/summernote/lang/summernote-ro-RO.js +155 -0
  317. data/node_modules/summernote/lang/summernote-ru-RU.js +155 -0
  318. data/node_modules/summernote/lang/summernote-sk-SK.js +153 -0
  319. data/node_modules/summernote/lang/summernote-sl-SI.js +155 -0
  320. data/node_modules/summernote/lang/summernote-sr-RS-Latin.js +155 -0
  321. data/node_modules/summernote/lang/summernote-sr-RS.js +155 -0
  322. data/node_modules/summernote/lang/summernote-sv-SE.js +155 -0
  323. data/node_modules/summernote/lang/summernote-ta-IN.js +155 -0
  324. data/node_modules/summernote/lang/summernote-th-TH.js +155 -0
  325. data/node_modules/summernote/lang/summernote-tr-TR.js +155 -0
  326. data/node_modules/summernote/lang/summernote-uk-UA.js +155 -0
  327. data/node_modules/summernote/lang/summernote-uz-UZ.js +112 -0
  328. data/node_modules/summernote/lang/summernote-vi-VN.js +155 -0
  329. data/node_modules/summernote/lang/summernote-zh-CN.js +155 -0
  330. data/node_modules/summernote/lang/summernote-zh-TW.js +155 -0
  331. data/node_modules/summernote/package.json +87 -0
  332. data/{vendor/assets/javascripts → node_modules}/summernote/plugin/databasic/summernote-ext-databasic.css +0 -0
  333. data/{vendor/assets/javascripts → node_modules}/summernote/plugin/databasic/summernote-ext-databasic.js +62 -73
  334. data/{vendor/assets/javascripts → node_modules}/summernote/plugin/hello/summernote-ext-hello.js +9 -10
  335. data/{vendor/assets/javascripts → node_modules}/summernote/plugin/specialchars/summernote-ext-specialchars.js +22 -25
  336. data/node_modules/summernote/src/icons/align-center.svg +11 -0
  337. data/node_modules/summernote/src/icons/align-indent.svg +11 -0
  338. data/node_modules/summernote/src/icons/align-justify.svg +11 -0
  339. data/node_modules/summernote/src/icons/align-left.svg +12 -0
  340. data/node_modules/summernote/src/icons/align-outdent.svg +11 -0
  341. data/node_modules/summernote/src/icons/align-right.svg +11 -0
  342. data/node_modules/summernote/src/icons/align.svg +8 -0
  343. data/node_modules/summernote/src/icons/arrow-circle-down.svg +1 -0
  344. data/node_modules/summernote/src/icons/arrow-circle-left.svg +1 -0
  345. data/node_modules/summernote/src/icons/arrow-circle-right.svg +1 -0
  346. data/node_modules/summernote/src/icons/arrow-circle-up.svg +1 -0
  347. data/node_modules/summernote/src/icons/arrows-alt.svg +11 -0
  348. data/node_modules/summernote/src/icons/arrows-h.svg +1 -0
  349. data/node_modules/summernote/src/icons/arrows-v.svg +1 -0
  350. data/node_modules/summernote/src/icons/bold.svg +11 -0
  351. data/node_modules/summernote/src/icons/caret.svg +9 -0
  352. data/node_modules/summernote/src/icons/chain-broken.svg +47 -0
  353. data/node_modules/summernote/src/icons/circle.svg +10 -0
  354. data/node_modules/summernote/src/icons/close.svg +16 -0
  355. data/node_modules/summernote/src/icons/code.svg +11 -0
  356. data/node_modules/summernote/src/icons/col-after.svg +96 -0
  357. data/node_modules/summernote/src/icons/col-before.svg +19 -0
  358. data/node_modules/summernote/src/icons/col-remove.svg +19 -0
  359. data/node_modules/summernote/src/icons/dist/font/summernote.eot +0 -0
  360. data/node_modules/summernote/src/icons/dist/font/summernote.ttf +0 -0
  361. data/node_modules/summernote/src/icons/dist/font/summernote.woff +0 -0
  362. data/node_modules/summernote/src/icons/dist/summernote.html +536 -0
  363. data/node_modules/summernote/src/icons/dist/summernote.less +511 -0
  364. data/node_modules/summernote/src/icons/eraser.svg +13 -0
  365. data/node_modules/summernote/src/icons/font.svg +11 -0
  366. data/node_modules/summernote/src/icons/frame.svg +10 -0
  367. data/node_modules/summernote/src/icons/italic.svg +11 -0
  368. data/node_modules/summernote/src/icons/link.svg +21 -0
  369. data/node_modules/summernote/src/icons/magic.svg +10 -0
  370. data/node_modules/summernote/src/icons/menu-check.svg +8 -0
  371. data/node_modules/summernote/src/icons/minus.svg +11 -0
  372. data/node_modules/summernote/src/icons/orderedlist.svg +12 -0
  373. data/node_modules/summernote/src/icons/pencil.svg +8 -0
  374. data/node_modules/summernote/src/icons/picture.svg +11 -0
  375. data/node_modules/summernote/src/icons/question.svg +10 -0
  376. data/node_modules/summernote/src/icons/redo.svg +10 -0
  377. data/node_modules/summernote/src/icons/row-above.svg +19 -0
  378. data/node_modules/summernote/src/icons/row-below.svg +19 -0
  379. data/node_modules/summernote/src/icons/row-remove.svg +19 -0
  380. data/node_modules/summernote/src/icons/special-character.svg +10 -0
  381. data/node_modules/summernote/src/icons/square.svg +10 -0
  382. data/node_modules/summernote/src/icons/strikethrough.svg +11 -0
  383. data/node_modules/summernote/src/icons/subscript.svg +11 -0
  384. data/node_modules/summernote/src/icons/summernote.svg +11 -0
  385. data/node_modules/summernote/src/icons/superscript.svg +11 -0
  386. data/node_modules/summernote/src/icons/table.svg +11 -0
  387. data/node_modules/summernote/src/icons/templates/summernote.css +110 -0
  388. data/node_modules/summernote/src/icons/templates/summernote.json +5 -0
  389. data/node_modules/summernote/src/icons/text-height.svg +11 -0
  390. data/node_modules/summernote/src/icons/trash.svg +17 -0
  391. data/node_modules/summernote/src/icons/underline.svg +11 -0
  392. data/node_modules/summernote/src/icons/undo.svg +10 -0
  393. data/node_modules/summernote/src/icons/unorderedlist.svg +9 -0
  394. data/node_modules/summernote/src/icons/video.svg +9 -0
  395. data/node_modules/summernote/src/js/base/Context.js +231 -0
  396. data/node_modules/summernote/src/js/base/core/async.js +47 -0
  397. data/node_modules/summernote/src/js/base/core/dom.js +1088 -0
  398. data/node_modules/summernote/src/js/base/core/env.js +107 -0
  399. data/node_modules/summernote/src/js/base/core/func.js +162 -0
  400. data/node_modules/summernote/src/js/base/core/key.js +92 -0
  401. data/node_modules/summernote/src/js/base/core/lists.js +210 -0
  402. data/node_modules/summernote/src/js/base/core/range.js +792 -0
  403. data/node_modules/summernote/src/js/base/editing/Bullet.js +201 -0
  404. data/node_modules/summernote/src/js/base/editing/History.js +105 -0
  405. data/node_modules/summernote/src/js/base/editing/Style.js +158 -0
  406. data/node_modules/summernote/src/js/base/editing/Table.js +574 -0
  407. data/node_modules/summernote/src/js/base/editing/Typing.js +90 -0
  408. data/node_modules/summernote/src/js/base/module/AirPopover.js +73 -0
  409. data/node_modules/summernote/src/js/base/module/AutoLink.js +61 -0
  410. data/node_modules/summernote/src/js/base/module/AutoSync.js +19 -0
  411. data/node_modules/summernote/src/js/base/module/Buttons.js +813 -0
  412. data/node_modules/summernote/src/js/base/module/Clipboard.js +28 -0
  413. data/node_modules/summernote/src/js/base/module/Codeview.js +123 -0
  414. data/node_modules/summernote/src/js/base/module/Dropzone.js +115 -0
  415. data/node_modules/summernote/src/js/base/module/Editor.js +861 -0
  416. data/node_modules/summernote/src/js/base/module/Fullscreen.js +51 -0
  417. data/node_modules/summernote/src/js/base/module/Handle.js +143 -0
  418. data/node_modules/summernote/src/js/base/module/HelpDialog.js +79 -0
  419. data/node_modules/summernote/src/js/base/module/HintPopover.js +226 -0
  420. data/node_modules/summernote/src/js/base/module/ImageDialog.js +131 -0
  421. data/node_modules/summernote/src/js/base/module/ImagePopover.js +58 -0
  422. data/node_modules/summernote/src/js/base/module/LinkDialog.js +174 -0
  423. data/node_modules/summernote/src/js/base/module/LinkPopover.js +69 -0
  424. data/node_modules/summernote/src/js/base/module/Placeholder.js +39 -0
  425. data/node_modules/summernote/src/js/base/module/Statusbar.js +42 -0
  426. data/node_modules/summernote/src/js/base/module/TablePopover.js +71 -0
  427. data/node_modules/summernote/src/js/base/module/Toolbar.js +136 -0
  428. data/node_modules/summernote/src/js/base/module/VideoDialog.js +205 -0
  429. data/node_modules/summernote/src/js/base/renderer.js +66 -0
  430. data/node_modules/summernote/src/js/base/summernote-en-US.js +159 -0
  431. data/node_modules/summernote/src/js/bs3/settings.js +297 -0
  432. data/node_modules/summernote/src/js/bs3/ui.js +237 -0
  433. data/node_modules/summernote/src/js/bs4/settings.js +301 -0
  434. data/node_modules/summernote/src/js/bs4/ui.js +242 -0
  435. data/node_modules/summernote/src/js/lite/settings.js +296 -0
  436. data/node_modules/summernote/src/js/lite/ui.js +618 -0
  437. data/node_modules/summernote/src/js/lite/ui/DropdownUI.js +65 -0
  438. data/node_modules/summernote/src/js/lite/ui/ModalUI.js +34 -0
  439. data/node_modules/summernote/src/js/lite/ui/PopoverUI.js +94 -0
  440. data/node_modules/summernote/src/js/lite/ui/TooltipUI.js +93 -0
  441. data/node_modules/summernote/src/js/summernote.js +46 -0
  442. data/node_modules/summernote/src/less/elements.less +149 -0
  443. data/node_modules/summernote/src/less/elements.scss +149 -0
  444. data/node_modules/summernote/src/less/lite-ui/all.less +15 -0
  445. data/node_modules/summernote/src/less/lite-ui/btn-group.less +51 -0
  446. data/node_modules/summernote/src/less/lite-ui/buttons.less +102 -0
  447. data/node_modules/summernote/src/less/lite-ui/common.less +20 -0
  448. data/node_modules/summernote/src/less/lite-ui/dropdown.less +39 -0
  449. data/node_modules/summernote/src/less/lite-ui/form.less +43 -0
  450. data/node_modules/summernote/src/less/lite-ui/mixins.less +1 -0
  451. data/node_modules/summernote/src/less/lite-ui/mixins/buttons.less +40 -0
  452. data/node_modules/summernote/src/less/lite-ui/modal.less +104 -0
  453. data/node_modules/summernote/src/less/lite-ui/popover.less +121 -0
  454. data/node_modules/summernote/src/less/lite-ui/toolbar.less +4 -0
  455. data/node_modules/summernote/src/less/lite-ui/tooltip.less +66 -0
  456. data/node_modules/summernote/src/less/lite-ui/variables.less +81 -0
  457. data/node_modules/summernote/src/less/summernote-bs4.less +577 -0
  458. data/node_modules/summernote/src/less/summernote-bs4.scss +560 -0
  459. data/node_modules/summernote/src/less/summernote-lite.less +601 -0
  460. data/node_modules/summernote/src/less/summernote.less +576 -0
  461. data/node_modules/summernote/src/less/summernote.scss +560 -0
  462. data/node_modules/summernote/tsconfig.json +12 -0
  463. metadata +459 -69
  464. data/vendor/assets/fonts/summernote.eot +0 -0
  465. data/vendor/assets/fonts/summernote.ttf +0 -0
  466. data/vendor/assets/fonts/summernote.woff +0 -0
  467. data/vendor/assets/javascripts/summernote/index.js +0 -1
  468. data/vendor/assets/javascripts/summernote/locales/index.js +0 -1
  469. data/vendor/assets/javascripts/summernote/locales/ro-RO.js +0 -102
  470. data/vendor/assets/javascripts/summernote/locales/th-TH.js +0 -106
  471. data/vendor/assets/javascripts/summernote/summernote-bs4.js +0 -7990
  472. data/vendor/assets/javascripts/summernote/summernote-lite.js +0 -8598
  473. data/vendor/assets/javascripts/summernote/summernote.js +0 -7987
  474. data/vendor/assets/stylesheets/summernote-bs4.css +0 -1
  475. data/vendor/assets/stylesheets/summernote-lite.css +0 -1
  476. data/vendor/assets/stylesheets/summernote.scss +0 -1
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "angular-summernote",
3
+ "description": "AngularJS directive to Summernote",
4
+ "version": "0.8.1",
5
+ "author": {
6
+ "name": "\"Outsider\" Jeonghoon Byun",
7
+ "email": "outsideris@gmail.com",
8
+ "url": "http://blog.outsider.ne.kr/"
9
+ },
10
+ "keywords": [
11
+ "editor",
12
+ "bootstrap",
13
+ "WYSIWYG",
14
+ "angular",
15
+ "angular.js"
16
+ ],
17
+ "homepage": "https://github.com/summernote/angular-summernote",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/outsideris/involved.git"
21
+ },
22
+ "licenses": [
23
+ {
24
+ "type": "MIT",
25
+ "url": "http://outsider.mit-license.org/"
26
+ }
27
+ ],
28
+ "devDependencies": {
29
+ "del": "^2.1.0",
30
+ "gulp": "^3.9.0",
31
+ "gulp-coveralls": "^0.1.4",
32
+ "gulp-header": "^1.7.1",
33
+ "gulp-jshint": "^1.11.2",
34
+ "gulp-nuget-pack": "0.0.6",
35
+ "gulp-rename": "^1.2.2",
36
+ "gulp-uglify": "^1.4.2",
37
+ "jshint-stylish": "^2.0.1",
38
+ "karma": "~0.13.9",
39
+ "karma-chrome-launcher": "~0.2.0",
40
+ "karma-coffee-preprocessor": "~0.3.0",
41
+ "karma-coverage": "^0.5.0",
42
+ "karma-firefox-launcher": "~0.1.3",
43
+ "karma-html2js-preprocessor": "~0.1.0",
44
+ "karma-mocha": "~0.2.0",
45
+ "karma-phantomjs-launcher": "~0.2.0",
46
+ "karma-requirejs": "~0.2.1",
47
+ "karma-script-launcher": "~0.1.0",
48
+ "mocha": "~2.2.0",
49
+ "requirejs": "~2.1.10",
50
+ "run-sequence": "^1.1.5"
51
+ },
52
+ "dependencies": {}
53
+ }
@@ -0,0 +1,206 @@
1
+ /* global angular */
2
+ angular.module('summernote', [])
3
+
4
+ .controller('SummernoteController', ['$scope', '$attrs', '$timeout', function($scope, $attrs, $timeout) {
5
+ 'use strict';
6
+
7
+ var currentElement,
8
+ summernoteConfig = angular.copy($scope.summernoteConfig) || {};
9
+
10
+ if (angular.isDefined($attrs.height)) { summernoteConfig.height = +$attrs.height; }
11
+ if (angular.isDefined($attrs.minHeight)) { summernoteConfig.minHeight = +$attrs.minHeight; }
12
+ if (angular.isDefined($attrs.maxHeight)) { summernoteConfig.maxHeight = +$attrs.maxHeight; }
13
+ if (angular.isDefined($attrs.placeholder)) { summernoteConfig.placeholder = $attrs.placeholder; }
14
+ if (angular.isDefined($attrs.focus)) { summernoteConfig.focus = true; }
15
+ if (angular.isDefined($attrs.airmode)) { summernoteConfig.airMode = true; }
16
+ if (angular.isDefined($attrs.dialogsinbody)) { summernoteConfig.dialogsInBody = true; }
17
+ if (angular.isDefined($attrs.lang)) {
18
+ if (!angular.isDefined($.summernote.lang[$attrs.lang])) {
19
+ throw new Error('"' + $attrs.lang + '" lang file must be exist.');
20
+ }
21
+ summernoteConfig.lang = $attrs.lang;
22
+ }
23
+
24
+ summernoteConfig.callbacks = summernoteConfig.callbacks || {};
25
+
26
+ if (angular.isDefined($attrs.onInit)) {
27
+ summernoteConfig.callbacks.onInit = function(evt) {
28
+ $scope.init({evt:evt});
29
+ };
30
+ }
31
+ if (angular.isDefined($attrs.onEnter)) {
32
+ summernoteConfig.callbacks.onEnter = function(evt) {
33
+ $scope.enter({evt:evt});
34
+ };
35
+ }
36
+ if (angular.isDefined($attrs.onFocus)) {
37
+ summernoteConfig.callbacks.onFocus = function(evt) {
38
+ $scope.focus({evt:evt});
39
+ };
40
+ }
41
+ if (angular.isDefined($attrs.onPaste)) {
42
+ summernoteConfig.callbacks.onPaste = function(evt) {
43
+ $scope.paste({evt:evt});
44
+ };
45
+ }
46
+ if (angular.isDefined($attrs.onKeyup)) {
47
+ summernoteConfig.callbacks.onKeyup = function(evt) {
48
+ $scope.keyup({evt:evt});
49
+ };
50
+ }
51
+ if (angular.isDefined($attrs.onKeydown)) {
52
+ summernoteConfig.callbacks.onKeydown = function(evt) {
53
+ $scope.keydown({evt:evt});
54
+ };
55
+ }
56
+ if (angular.isDefined($attrs.onImageUpload)) {
57
+ summernoteConfig.callbacks.onImageUpload = function(files) {
58
+ $scope.imageUpload({files:files, editable: $scope.editable});
59
+ };
60
+ }
61
+ if (angular.isDefined($attrs.onMediaDelete)) {
62
+ summernoteConfig.callbacks.onMediaDelete = function(target) {
63
+ // make new object that has information of target to avoid error:isecdom
64
+ var removedMedia = {attrs: {}};
65
+ removedMedia.tagName = target[0].tagName;
66
+ angular.forEach(target[0].attributes, function(attr) {
67
+ removedMedia.attrs[attr.name] = attr.value;
68
+ });
69
+ $scope.mediaDelete({target: removedMedia});
70
+ };
71
+ }
72
+
73
+ this.activate = function(scope, element, ngModel) {
74
+ var updateNgModel = function() {
75
+ var newValue = element.summernote('code');
76
+ if (element.summernote('isEmpty')) { newValue = ''; }
77
+ if (ngModel && ngModel.$viewValue !== newValue) {
78
+ $timeout(function() {
79
+ ngModel.$setViewValue(newValue);
80
+ }, 0);
81
+ }
82
+ };
83
+
84
+ var originalOnChange = summernoteConfig.callbacks.onChange;
85
+ summernoteConfig.callbacks.onChange = function (contents) {
86
+ $timeout(function () {
87
+ if (element.summernote('isEmpty')) {
88
+ contents = '';
89
+ }
90
+ updateNgModel();
91
+ }, 0);
92
+ if (angular.isDefined($attrs.onChange)) {
93
+ $scope.change({contents: contents, editable: $scope.editable});
94
+ } else if (angular.isFunction(originalOnChange)) {
95
+ originalOnChange.apply(this, arguments);
96
+ }
97
+ };
98
+ if (angular.isDefined($attrs.onBlur)) {
99
+ summernoteConfig.callbacks.onBlur = function (evt) {
100
+ (!summernoteConfig.airMode) && element.blur();
101
+ $scope.blur({evt: evt});
102
+ };
103
+ }
104
+ element.summernote(summernoteConfig);
105
+
106
+ var editor$ = element.next('.note-editor'),
107
+ unwatchNgModel;
108
+ editor$.find('.note-toolbar').click(function() {
109
+ updateNgModel();
110
+
111
+ // sync ngModel in codeview mode
112
+ if (editor$.hasClass('codeview')) {
113
+ editor$.on('keyup', updateNgModel);
114
+ if (ngModel) {
115
+ unwatchNgModel = scope.$watch(function () {
116
+ return ngModel.$modelValue;
117
+ }, function(newValue) {
118
+ editor$.find('.note-codable').val(newValue);
119
+ });
120
+ }
121
+ } else {
122
+ editor$.off('keyup', updateNgModel);
123
+ if (angular.isFunction(unwatchNgModel)) {
124
+ unwatchNgModel();
125
+ }
126
+ }
127
+ });
128
+
129
+ if (ngModel) {
130
+ ngModel.$render = function() {
131
+ if (ngModel.$viewValue) {
132
+ element.summernote('code', ngModel.$viewValue);
133
+ } else {
134
+ element.summernote('empty');
135
+ }
136
+ };
137
+ }
138
+
139
+ // set editable to avoid error:isecdom since Angular v1.3
140
+ if (angular.isDefined($attrs.editable)) {
141
+ $scope.editable = editor$.find('.note-editable');
142
+ }
143
+ if (angular.isDefined($attrs.editor)) {
144
+ $scope.editor = element;
145
+ }
146
+
147
+ currentElement = element;
148
+ // use jquery Event binding instead $on('$destroy') to preserve options data of DOM
149
+ element.on('$destroy', function() {
150
+ element.summernote('destroy');
151
+ $scope.summernoteDestroyed = true;
152
+ });
153
+ };
154
+
155
+ $scope.$on('$destroy', function () {
156
+ // when destroying scope directly
157
+ if (!$scope.summernoteDestroyed) {
158
+ currentElement.summernote('destroy');
159
+ }
160
+ });
161
+ }])
162
+ .directive('summernote', [function() {
163
+ 'use strict';
164
+
165
+ return {
166
+ restrict: 'EA',
167
+ transclude: 'element',
168
+ replace: true,
169
+ require: ['summernote', '?ngModel'],
170
+ controller: 'SummernoteController',
171
+ scope: {
172
+ summernoteConfig: '=config',
173
+ editable: '=',
174
+ editor: '=',
175
+ init: '&onInit',
176
+ enter: '&onEnter',
177
+ focus: '&onFocus',
178
+ blur: '&onBlur',
179
+ paste: '&onPaste',
180
+ keyup: '&onKeyup',
181
+ keydown: '&onKeydown',
182
+ change: '&onChange',
183
+ imageUpload: '&onImageUpload',
184
+ mediaDelete: '&onMediaDelete'
185
+ },
186
+ template: '<div class="summernote"></div>',
187
+ link: function(scope, element, attrs, ctrls, transclude) {
188
+ var summernoteController = ctrls[0],
189
+ ngModel = ctrls[1];
190
+
191
+ if (!ngModel) {
192
+ transclude(scope, function(clone, scope) {
193
+ // to prevent binding to angular scope (It require `tranclude: 'element'`)
194
+ element.append(clone.html());
195
+ });
196
+ summernoteController.activate(scope, element, ngModel);
197
+ } else {
198
+ var clearWatch = scope.$watch(function() { return ngModel.$viewValue; }, function(value) {
199
+ clearWatch();
200
+ element.append(value);
201
+ summernoteController.activate(scope, element, ngModel);
202
+ }, true);
203
+ }
204
+ }
205
+ };
206
+ }]);
@@ -0,0 +1,660 @@
1
+ /**
2
+ * Copyright (c) 2013 JeongHoon Byun aka "Outsider", <http://blog.outsider.ne.kr/>
3
+ * Licensed under the MIT license.
4
+ * <http://outsider.mit-license.org/>
5
+ */
6
+ describe('Summernote directive', function() {
7
+ 'use strict';
8
+
9
+ var $rootScope, $compile, $timeout;
10
+
11
+ beforeEach(module('summernote'));
12
+ beforeEach(inject(function(_$compile_, _$rootScope_, _$timeout_) {
13
+ $compile = _$compile_;
14
+ $rootScope = _$rootScope_;
15
+ $timeout = _$timeout_;
16
+ }));
17
+
18
+ describe('initialization', function() {
19
+
20
+ it('has "summernote" class', function () {
21
+ var element = $compile('<summernote></summernote>')($rootScope);
22
+ $rootScope.$digest();
23
+
24
+ expect($(element.get(0)).hasClass('summernote')).to.be.true;
25
+ });
26
+
27
+ it('works with "summernote" element', function () {
28
+ var element = $compile('<summernote></summernote>')($rootScope);
29
+ $rootScope.$digest();
30
+
31
+ expect(element.next().hasClass('note-editor')).to.be.true;
32
+ });
33
+
34
+ it('works with "summernote" attribute', function () {
35
+ var element = $compile('<div summernote></div>')($rootScope);
36
+ $rootScope.$digest();
37
+
38
+ expect(element.next().hasClass('note-editor')).to.be.true;
39
+ });
40
+
41
+ it('works with multiple "summernote" elements', function () {
42
+ var element = $compile('<summernote></summernote><br><summernote></summernote>')($rootScope);
43
+ $rootScope.$digest();
44
+
45
+ expect(element.next('.note-editor')).to.length(2);
46
+ });
47
+ });
48
+
49
+ describe('"height" option', function() {
50
+
51
+ it('should be 0 unless it specified', function () {
52
+ var element = $compile('<summernote></summernote>')($rootScope);
53
+ $rootScope.$digest();
54
+
55
+ expect(element.next().find('.note-editable').outerHeight()).to.be.equal(0);
56
+ });
57
+
58
+ it('should be 400 if it specified', function () {
59
+ var element = $compile('<summernote height="400"></summernote>')($rootScope);
60
+ $rootScope.$digest();
61
+
62
+ expect(element.next().find('.note-editable').outerHeight()).to.be.equal(400);
63
+ });
64
+
65
+ it('should set with multiple directives', function () {
66
+ var element = $compile('<summernote height="200"></summernote><br><summernote height="400"></summernote>')($rootScope);
67
+ $rootScope.$digest();
68
+
69
+ expect(element.next().find('.note-editable').eq(0).outerHeight()).to.be.equal(200);
70
+ expect(element.next().find('.note-editable').eq(1).outerHeight()).to.be.equal(400);
71
+ });
72
+ });
73
+
74
+ describe('"min-height" option', function() {
75
+ it('should be 300 if it specified', function () {
76
+ var element = $compile('<summernote min-height="300"></summernote>')($rootScope);
77
+ $rootScope.$digest();
78
+
79
+ expect(element.next().find('.note-editable').css('min-height')).to.be.equal('300px');
80
+ });
81
+ });
82
+
83
+ describe('"max-height" option', function() {
84
+ it('should be 500 if it specified', function () {
85
+ var element = $compile('<summernote max-height="500"></summernote>')($rootScope);
86
+ $rootScope.$digest();
87
+
88
+ expect(element.next().find('.note-editable').css('max-height')).to.be.equal('500px');
89
+ });
90
+ });
91
+
92
+ describe('"placeholder" option', function() {
93
+ it('should placeholder', function () {
94
+ var element = $compile('<summernote placeholder="This is a placeholder"></summernote>')($rootScope);
95
+ $rootScope.$digest();
96
+
97
+ expect(element.next().find('.note-placeholder')).to.length(1);
98
+ expect(element.next().find('.note-placeholder').text()).to.be.equal('This is a placeholder');
99
+ });
100
+ });
101
+
102
+ describe('"focus" option', function() {
103
+ it('should be focused if it specified', function () {
104
+ var el = $('<summernote focus height="400"></summernote>').appendTo(document.body);
105
+ var element = $compile(el)($rootScope);
106
+ $rootScope.$digest();
107
+
108
+ expect(element.next().find('.note-editable').get(0)).to.be.equal(document.activeElement);
109
+
110
+ el.next().remove();
111
+ el.remove();
112
+ });
113
+ });
114
+
115
+ describe('"airmode" option', function() {
116
+
117
+ it('should be on', function () {
118
+ var element = $compile('<summernote airMode></summernote>')($rootScope);
119
+ $rootScope.$digest();
120
+
121
+ expect(element.data('summernote').options.airMode).to.be.true;
122
+ });
123
+
124
+
125
+ it('should be on using config', function () {
126
+ var scope = $rootScope.$new();
127
+ scope.summernoteConfig = {airMode: true};
128
+ var element = $compile('<summernote config="summernoteConfig"></summernote>')(scope);
129
+ $rootScope.$digest();
130
+
131
+ expect(element.data('summernote').options.airMode).to.be.true;
132
+
133
+ element.next().remove();
134
+ element.remove();
135
+ });
136
+
137
+ });
138
+
139
+ describe('summernoteConfig', function() {
140
+ var scope;
141
+
142
+ beforeEach(function() {
143
+ scope = $rootScope.$new();
144
+ scope.summernoteConfig = {
145
+ height: 300,
146
+ minHeight: 200,
147
+ maxHeight: 500,
148
+ focus: true,
149
+ toolbar: [
150
+ ['style', ['bold', 'italic', 'underline', 'clear']],
151
+ ['fontsize', ['fontsize']],
152
+ ['color', ['color']],
153
+ ['para', ['ul', 'ol', 'paragraph']],
154
+ ['height', ['height']]
155
+ ]
156
+ };
157
+ });
158
+
159
+ it('"height" should be 300', function() {
160
+ var element = $compile('<summernote config="summernoteConfig"></summernote>')(scope);
161
+ $rootScope.$digest();
162
+
163
+ expect(element.next().find('.note-editable').outerHeight()).to.be.equal(300);
164
+ });
165
+
166
+ it('"minHeight" should be 300', function() {
167
+ var element = $compile('<summernote config="summernoteConfig"></summernote>')(scope);
168
+ $rootScope.$digest();
169
+
170
+ expect(element.next().find('.note-editable').css('min-height')).to.be.equal('200px');
171
+ });
172
+
173
+ it('"maxHeight" should be 300', function() {
174
+ var element = $compile('<summernote config="summernoteConfig"></summernote>')(scope);
175
+ $rootScope.$digest();
176
+
177
+ expect(element.next().find('.note-editable').css('max-height')).to.be.equal('500px');
178
+ });
179
+
180
+ it('toolbar should be customized', function() {
181
+ var element = $compile('<summernote config="summernoteConfig"></summernote>')(scope);
182
+ $rootScope.$digest();
183
+
184
+ expect(element.next().find('.note-toolbar > .note-fontsize')).to.length(1);
185
+ expect(element.next().find('.note-toolbar > .note-help')).to.length(0);
186
+ });
187
+
188
+ it('"lang" needs the lang file', function() {
189
+ var fn = $compile('<summernote lang="ko-KR"></summernote>');
190
+
191
+ try {
192
+ fn($rootScope);
193
+ } catch(e) {
194
+ expect(e.message).to.be.exist;
195
+ }
196
+ });
197
+
198
+ it('"lang" load the lang file correctly', function() {
199
+ var element = $compile('<summernote lang="de-DE"></summernote>')(scope);
200
+ $rootScope.$digest();
201
+
202
+ expect(element.next().find('.note-toolbar > .note-view .btn-fullscreen').attr('data-original-title'))
203
+ .to.be.equal('Vollbild');
204
+ });
205
+ });
206
+
207
+ describe('destroy', function() {
208
+ var scope;
209
+
210
+ beforeEach(function() {
211
+ scope = $rootScope.$new();
212
+ });
213
+
214
+ it('shoud be destroyed when scope is destroyed.', function() {
215
+ // given
216
+ var element = $compile('<summernote></summernote>')(scope);
217
+ scope.$digest();
218
+ expect(element.next().hasClass('note-editor')).to.be.true;
219
+ // when
220
+ scope.$destroy();
221
+ // then
222
+ expect(element.next().hasClass('note-editor')).to.be.false;
223
+ });
224
+
225
+ it('should clean up summernnote', function () {
226
+ // given
227
+ scope.summernoteConfig = {height: 300};
228
+ scope.test = [];
229
+ var element = $compile('<div ng-repeat="t in test"><summernote ng-model="t.c" config="summernoteConfig"></summernote></div>')(scope);
230
+ scope.$digest();
231
+
232
+ scope.test.push({c: ''});
233
+ scope.$digest();
234
+ expect($(element.next().children().get(0)).hasClass('summernote')).to.be.true;
235
+
236
+ // when
237
+ scope.test.pop();
238
+ scope.$digest();
239
+
240
+ // then
241
+ expect($(element.next().children().get(0)).hasClass('summernote')).to.be.false;
242
+ });
243
+ });
244
+
245
+ describe('ngModel', function() {
246
+ var scope;
247
+
248
+ beforeEach(function() {
249
+ scope = $rootScope.$new();
250
+ scope.summernoteConfig = {focus: true};
251
+ });
252
+
253
+ it('text should be synchronized when value are changed in outer scope', function() {
254
+ // given
255
+ var oldText = 'Hello World!', newText = 'new text';
256
+ scope.text = oldText;
257
+ var element = $compile('<summernote ng-model="text"></summernote>')(scope);
258
+ scope.$digest();
259
+ expect(element.summernote('code')).to.be.equal(oldText);
260
+ // when
261
+ scope.text = newText;
262
+ scope.$digest();
263
+ // then
264
+ expect(element.summernote('code')).to.be.equal(newText);
265
+ });
266
+
267
+ it('text should be synchronized when value are changed in summernote', function() {
268
+ var oldText = 'Hello World!', newText = 'new text';
269
+ // given
270
+ scope.text = oldText;
271
+ var el = $('<summernote ng-Model="text"></summernote>').appendTo(document.body);
272
+ var element = $compile(el)(scope);
273
+ scope.$digest();
274
+ expect(element.summernote('code')).to.be.equal(oldText);
275
+ // when
276
+ element.summernote('code', newText);
277
+ $(element.next().find('.note-editable').eq(0)).trigger('input'); // to trigger onChange
278
+ scope.$digest();
279
+ // then
280
+ $timeout.flush();
281
+ expect(scope.text).to.be.equal(newText);
282
+
283
+ el.next().remove();
284
+ el.remove();
285
+ });
286
+
287
+ it('element text should be blank in outer scope before digesting', function() {
288
+ // given
289
+ var blankText = '', helloText = 'Hello World';
290
+ var element = $compile('<summernote ng-model="text"></summernote>')(scope);
291
+ scope.text = helloText;
292
+ expect(element.html()).to.be.equal(blankText);
293
+ // when
294
+ scope.$digest();
295
+ // then
296
+ expect(element.html()).to.be.equal(helloText);
297
+ });
298
+
299
+ it('text should be synchronized when text is changed using toolbar', function() {
300
+ var selectText = function(element){
301
+ var doc = document,
302
+ range;
303
+ if (doc.body.createTextRange) {
304
+ range = document.body.createTextRange();
305
+ range.moveToElementText(element);
306
+ range.select();
307
+ } else if (window.getSelection) {
308
+ var selection = window.getSelection();
309
+ range = document.createRange();
310
+ range.selectNodeContents(element);
311
+ selection.removeAllRanges();
312
+ selection.addRange(range);
313
+ }
314
+ };
315
+
316
+ var oldText = 'Hello World!';
317
+ // given
318
+ scope.text = oldText;
319
+ var el = $('<summernote ng-Model="text"></summernote>').appendTo(document.body);
320
+ var element = $compile(el)(scope);
321
+ scope.$digest();
322
+ expect(element.summernote('code')).to.be.equal(oldText);
323
+ // when
324
+ selectText($(element.next().find('.note-editable'))[0]);
325
+ $(element.next().find('.note-font').find('button').eq(0)).click();
326
+ scope.$digest();
327
+ // then
328
+ $timeout.flush();
329
+ expect(scope.text).to.be.equal(element.summernote('code'));
330
+
331
+ el.next().remove();
332
+ el.remove();
333
+ });
334
+
335
+ it('text chould be synchronized when text is changed in codeview mode', function() {
336
+ var oldText = 'Hello World!', newText = 'new text';
337
+ // given
338
+ scope.text = oldText;
339
+ var el = $('<summernote ng-Model="text"></summernote>').appendTo(document.body);
340
+ var element = $compile(el)(scope);
341
+ scope.$digest();
342
+ expect(element.summernote('code')).to.be.equal(oldText);
343
+ // when
344
+ element.next().find('.note-view').find('button.btn-codeview').click();
345
+ scope.text = newText;
346
+ scope.$digest();
347
+ // then
348
+ expect(element.summernote('code')).to.be.equal(newText);
349
+
350
+ el.next().remove();
351
+ el.remove();
352
+ });
353
+
354
+ it('text should be synchronized in use codeview when text is changed in outer scope', function() {
355
+ var oldText = 'Hello World!', newText = 'new text';
356
+ // given
357
+ scope.text = oldText;
358
+ var el = $('<summernote ng-Model="text"></summernote>').appendTo(document.body);
359
+ var element = $compile(el)(scope);
360
+ scope.$digest();
361
+ expect(element.summernote('code')).to.be.equal(oldText);
362
+ // when
363
+ element.next().find('.note-view').find('button.btn-codeview').click();
364
+ element.next().find('.note-codable').val(newText);
365
+ $(element.next().find('.note-codable').eq(0)).trigger('keyup');
366
+ scope.$digest();
367
+ // then
368
+ $timeout.flush();
369
+ expect(scope.text).to.be.equal(newText);
370
+
371
+ el.next().remove();
372
+ el.remove();
373
+ });
374
+
375
+ it('should be synchronized when image inserted', function(done) {
376
+ // given
377
+ var text = 'Hello World';
378
+ scope.text = text;
379
+ var el = $('<summernote ng-Model="text"></summernote>').appendTo(document.body);
380
+ var element = $compile(el)(scope);
381
+ scope.$digest();
382
+ // when
383
+ var preventBubbling = function(e) { e.stopPropagation(); };
384
+ $('.note-toolbar').on('click', preventBubbling);
385
+
386
+ $(element.next().find('.note-insert').find('button[data-original-title=Picture]')).click(); // image
387
+
388
+ var imageModal$ = element.next().find('.modal.in .modal-dialog');
389
+ expect(imageModal$).to.length(1);
390
+ var imgUrl = 'https://www.gravatar.com/avatar/748a6dc8b4eaba0fde62909e39be7987?s=200';
391
+ imageModal$.find('.note-image-url').val(imgUrl);
392
+ imageModal$.find('.note-image-url').trigger('keyup');
393
+ imageModal$.find('.note-image-btn').click();
394
+
395
+ // then
396
+ var timer = setInterval(function() {
397
+ if (element.summernote('code') !== text) {
398
+ expect(element.summernote('code')).to.match(/gravatar/);
399
+
400
+ // tear down
401
+ $('.note-toolbar').off('click', preventBubbling);
402
+ el.next().remove();
403
+ el.remove();
404
+ clearInterval(timer);
405
+ done();
406
+ }
407
+ }, 200);
408
+ });
409
+
410
+ it('should empty summernote when model is empty', function() {
411
+ // given
412
+ scope.text = 'Hello World';
413
+ var element = $compile($('<summernote ng-Model="text"></summernote>').appendTo(document.body))(scope);
414
+ scope.$digest();
415
+
416
+ // when
417
+ scope.text = '';
418
+ scope.$digest();
419
+
420
+ // then
421
+ expect(element.summernote('code')).to.not.equal('');
422
+ expect(element.summernote('isEmpty')).to.equal(true);
423
+ });
424
+ });
425
+
426
+ describe('callbacks', function() {
427
+ var scope;
428
+
429
+ beforeEach(function() {
430
+ scope = $rootScope.$new();
431
+ scope.summernoteConfig = {focus: false};
432
+ });
433
+
434
+ it('onInit should be invoked', function(done) {
435
+ scope.init = function() {
436
+ expect(true).to.be.true;
437
+ done();
438
+ };
439
+ $compile('<summernote on-init="init()"></summernote>')(scope);
440
+ scope.$digest();
441
+ });
442
+
443
+ it('onEnter should be invoked', function(done) {
444
+ scope.enter = function() {
445
+ // then
446
+ expect(true).to.be.true;
447
+ done();
448
+ };
449
+ // given
450
+ var el = $('<summernote on-enter="enter()"></summernote>').appendTo(document.body);
451
+ var element = $compile(el)(scope);
452
+ scope.$digest();
453
+ // when
454
+ var e= jQuery.Event('keydown');
455
+ e.keyCode = 13; // Enter key
456
+ element.next().find('.note-editable').trigger(e);
457
+ scope.$digest();
458
+ // tear down
459
+ el.next().remove();
460
+ el.remove();
461
+ });
462
+
463
+ it('onFocus should be invoked', function(done) {
464
+ scope.focus = function(e) {
465
+ // then
466
+ expect(e).to.be.exist;
467
+ done();
468
+ };
469
+ // given
470
+ var el = $('<summernote on-focus="focus(evt)"></summernote>').appendTo(document.body);
471
+ var element = $compile(el)(scope);
472
+ scope.$digest();
473
+ // when
474
+ // TODO: check the reason why it need triggering focus twice
475
+ element.next().find('.note-editable').focus().focus();
476
+ scope.$digest();
477
+ // tear down
478
+ el.next().remove();
479
+ el.remove();
480
+ });
481
+
482
+ it('onBlur should be invoked', function(done) {
483
+ scope.blur = function(e) {
484
+ // then
485
+ expect(e).to.be.exist;
486
+ done();
487
+ };
488
+ // given
489
+ var el = $('<summernote on-blur="blur(evt)"></summernote>').appendTo(document.body);
490
+ var element = $compile(el)(scope);
491
+ scope.$digest();
492
+ // when
493
+ element.next().find('.note-editable').blur();
494
+ scope.$digest();
495
+ // tear down
496
+ el.next().remove();
497
+ el.remove();
498
+ });
499
+
500
+ it('onPaste should be invoked', function(done) {
501
+ scope.paste = function() {
502
+ // then
503
+ expect(true).to.be.true;
504
+ done();
505
+ };
506
+ // given
507
+ var el = $('<summernote on-paste="paste(evt)"></summernote>').appendTo(document.body);
508
+ var element = $compile(el)(scope);
509
+ scope.$digest();
510
+ // when
511
+ var event = jQuery.Event('paste');
512
+ event.originalEvent = '';
513
+ element.next().find('.note-editable').trigger(event);
514
+
515
+ scope.$digest();
516
+ // tear down
517
+ el.next().remove();
518
+ el.remove();
519
+ });
520
+
521
+ it('onKeyup should be invoked', function(done) {
522
+ scope.keyup = function(e) {
523
+ // then
524
+ expect(e).to.be.exist;
525
+ done();
526
+ };
527
+ // given
528
+ var el = $('<summernote on-keyup="keyup(evt)"></summernote>').appendTo(document.body);
529
+ var element = $compile(el)(scope);
530
+ scope.$digest();
531
+ // when
532
+ element.next().find('.note-editable').keyup();
533
+ scope.$digest();
534
+ // tear down
535
+ el.next().remove();
536
+ el.remove();
537
+ });
538
+
539
+ it('onKeydown should be invoked', function(done) {
540
+ scope.keydown = function(e) {
541
+ // then
542
+ expect(e).to.be.exist;
543
+ done();
544
+ };
545
+ // given
546
+ var el = $('<summernote on-keydown="keydown(evt)"></summernote>').appendTo(document.body);
547
+ var element = $compile(el)(scope);
548
+ scope.$digest();
549
+ // when
550
+ element.next().find('.note-editable').keydown();
551
+ scope.$digest();
552
+ // tear down
553
+ el.next().remove();
554
+ el.remove();
555
+ });
556
+
557
+ it('onChange should be invoked', function(done) {
558
+ var selectText = function(element){
559
+ var doc = document,
560
+ range;
561
+ if (doc.body.createTextRange) {
562
+ range = document.body.createTextRange();
563
+ range.moveToElementText(element);
564
+ range.select();
565
+ } else if (window.getSelection) {
566
+ var selection = window.getSelection();
567
+ range = document.createRange();
568
+ range.selectNodeContents(element);
569
+ selection.removeAllRanges();
570
+ selection.addRange(range);
571
+ }
572
+ };
573
+
574
+ scope.change = function(contents) {
575
+ // then
576
+ // FIXME: summernote v0.7.0 has a bug, so `contents` is Event obejct not string of contents
577
+ //expect(/Hello World/.test(contents)).to.be.ok;
578
+ expect(true).to.be.ok;
579
+ done();
580
+ };
581
+ // given
582
+ var oldText = 'Hello World!';
583
+ scope.text = oldText;
584
+ var el = $('<summernote ng-Model="text" on-change="change(contents)"></summernote>')
585
+ .appendTo(document.body);
586
+ var element = $compile(el)(scope);
587
+ scope.$digest();
588
+ // when
589
+ selectText($(element.next().find('.note-editable'))[0]);
590
+ $(element.next().find('.note-font').find('button').eq(0)).click();
591
+ scope.$digest();
592
+ // tear down
593
+ el.next().remove();
594
+ el.remove();
595
+ });
596
+
597
+ // TODO: add tests for onImageUpload
598
+ });
599
+
600
+ describe('"editable" attribute', function() {
601
+ var scope;
602
+
603
+ beforeEach(function() {
604
+ scope = $rootScope.$new();
605
+ });
606
+
607
+ it('should be assigned as editable object', function () {
608
+ var el = $('<summernote editable="myEditable"></summernote>');
609
+ var element = $compile(el)(scope);
610
+ scope.$digest();
611
+
612
+ expect(element.next().find('.note-editable').get(0)).to.be.equal(scope.myEditable.get(0));
613
+
614
+ el.next().remove();
615
+ el.remove();
616
+ });
617
+ });
618
+
619
+ describe('"editor" attribute', function() {
620
+ var scope;
621
+
622
+ beforeEach(function() {
623
+ scope = $rootScope.$new();
624
+ });
625
+
626
+ it('should be assigned as editor object', function () {
627
+ var el = $('<summernote editor="snote"></summernote>');
628
+ var element = $compile(el)(scope);
629
+ scope.$digest();
630
+
631
+ expect(element.get(0)).to.be.equal(scope.snote.get(0));
632
+
633
+ el.next().remove();
634
+ el.remove();
635
+ });
636
+ });
637
+
638
+ describe('transclude', function() {
639
+ it('set initialize text with inner text', function() {
640
+ // given
641
+ var scope = $rootScope.$new();
642
+ var html = '<span style="font-weight: bold;">init text</span>';
643
+ // when
644
+ var element = $compile('<summernote>'+html+'</summernote>')(scope);
645
+ scope.$digest();
646
+ // then
647
+ expect(element.summernote('code')).to.be.equal(html);
648
+ });
649
+
650
+ it('set blank html if no text in summernote directive', function() {
651
+ // given
652
+ var scope = $rootScope.$new();
653
+ // when
654
+ var element = $compile('<summernote></summernote>')(scope);
655
+ scope.$digest();
656
+ // then
657
+ expect(element.summernote('code')).to.be.equal('<p><br></p>');
658
+ });
659
+ });
660
+ });