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,114 @@
1
+ 'use strict';
2
+
3
+ angular.module('ui.sortable.testHelper', [])
4
+ .factory('sortableTestHelper', function () {
5
+ var EXTRA_DY_PERCENTAGE = 0.25;
6
+
7
+ function listContent (list, contentSelector) {
8
+ if (!contentSelector) {
9
+ contentSelector = '[ng-repeat], [data-ng-repeat], [x-ng-repeat]';
10
+ }
11
+
12
+ if (list && list.length) {
13
+ return list.children(contentSelector).map(function(){ return this.innerHTML; }).toArray();
14
+ }
15
+ return [];
16
+ }
17
+
18
+ function listFindContent (list, contentSelector) {
19
+ if (!contentSelector) {
20
+ contentSelector = '.sortable-item';
21
+ }
22
+
23
+ if (list && list.length) {
24
+ return list.find(contentSelector).map(function(){ return this.innerHTML; }).toArray();
25
+ }
26
+ return [];
27
+ }
28
+
29
+ function listInnerContent (list, contentSelector) {
30
+ if (!contentSelector) {
31
+ contentSelector = '.itemContent';
32
+ }
33
+
34
+ if (list && list.length) {
35
+ return list.children().map(function(){ return $(this).find(contentSelector).html(); }).toArray();
36
+ }
37
+ return [];
38
+ }
39
+
40
+ function simulateElementDrag(draggedElement, dropTarget, options) {
41
+ var dragOptions = {
42
+ dx: dropTarget.position().left - draggedElement.position().left,
43
+ dy: dropTarget.position().top - draggedElement.position().top,
44
+ moves: 30,
45
+ action: (options && options.action) || 'drag'
46
+ };
47
+
48
+ if (options === 'above') {
49
+ options = { place: 'above' };
50
+ } else if (options === 'below') {
51
+ options = { place: 'below' };
52
+ }
53
+
54
+ if (typeof options === 'object') {
55
+ if ('place' in options) {
56
+ if (options.place === 'above') {
57
+ dragOptions.dy -= EXTRA_DY_PERCENTAGE * draggedElement.outerHeight();
58
+ } else if (options.place === 'below') {
59
+ dragOptions.dy += EXTRA_DY_PERCENTAGE * draggedElement.outerHeight();
60
+ }
61
+ }
62
+
63
+ if (isFinite(options.dx)) {
64
+ dragOptions.dx = options.dx;
65
+ }
66
+ if (isFinite(options.dy)) {
67
+ dragOptions.dy = options.dy;
68
+ }
69
+
70
+ if (isFinite(options.extrady)) {
71
+ dragOptions.dy += options.extrady;
72
+ }
73
+
74
+ if (isFinite(options.extradx)) {
75
+ dragOptions.dx += options.extradx;
76
+ }
77
+
78
+ if (isFinite(options.moves) && options.moves > 0) {
79
+ dragOptions.moves = options.moves;
80
+ }
81
+ }
82
+
83
+ draggedElement.simulate(dragOptions.action, dragOptions);
84
+ }
85
+
86
+ function hasUndefinedProperties(testObject) {
87
+ return testObject && Object.keys(testObject)
88
+ .filter(function(key) {
89
+ return testObject.hasOwnProperty(key) &&
90
+ testObject[key] !== undefined;
91
+ })
92
+ .length === 0;
93
+ }
94
+
95
+ return {
96
+ EXTRA_DY_PERCENTAGE: EXTRA_DY_PERCENTAGE,
97
+ listContent: listContent,
98
+ listFindContent: listFindContent,
99
+ listInnerContent: listInnerContent,
100
+ simulateElementDrag: simulateElementDrag,
101
+ hasUndefinedProperties: hasUndefinedProperties,
102
+ extraElements: {
103
+ beforeLiElement: '<li>extra element</li>',
104
+ afterLiElement: '<li>extra element</li>',
105
+ beforeTrElement: '<tr><td>extra element</td></tr>',
106
+ afterTrElement: '<tr><td>extra element</td></tr>',
107
+ beforeDivElement: '<div>extra element</div>',
108
+ afterDivElement: '<div>extra element</div>'
109
+ }
110
+ };
111
+ })
112
+ .controller('dummyController', function ($scope) {
113
+ $scope.testItems = ['One', 'Two', 'Three'];
114
+ });
@@ -0,0 +1,12 @@
1
+ .inline-block {
2
+ display: inline-block;
3
+ }
4
+
5
+ .floatleft,
6
+ .cross-sortable {
7
+ float: left;
8
+ }
9
+
10
+ .clear {
11
+ clear: both;
12
+ }
@@ -0,0 +1,20 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2013 danialfarid
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,616 @@
1
+ [![npm version](https://badge.fury.io/js/ng-file-upload.svg)](http://badge.fury.io/js/ng-file-upload)
2
+ [![Downloads](http://img.shields.io/npm/dm/ng-file-upload.svg)](https://npmjs.org/package/ng-file-upload)
3
+ [![Issue Stats](http://issuestats.com/github/danialfarid/ng-file-upload/badge/pr)](http://issuestats.com/github/danialfarid/ng-file-upload)
4
+ [![Issue Stats](http://issuestats.com/github/danialfarid/ng-file-upload/badge/issue)](http://issuestats.com/github/danialfarid/ng-file-upload)<br/>
5
+ [![PayPayl donate button](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=danial%2efarid%40gmail%2ecom&lc=CA&item_name=ng%2dfile%2dupload&item_number=ng%2dfile%2dupload&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted)
6
+ [![Gratipay donate button](https://img.shields.io/gratipay/danialfarid.svg?label=donate)](https://gratipay.com/ng-file-upload/)
7
+
8
+ ng-file-upload
9
+ ===================
10
+
11
+ Lightweight Angular directive to upload files.
12
+
13
+ **See the <a href="https://angular-file-upload.appspot.com/" target="_blank">DEMO</a> page.** Reference docs [here](https://github.com/danialfarid/ng-file-upload/blob/master/README.md#full-reference)
14
+
15
+ **Migration notes**: [version 3.0.x](https://github.com/danialfarid/ng-file-upload/releases/tag/3.0.0) [version 3.1.x](https://github.com/danialfarid/ng-file-upload/releases/tag/3.1.0) [version 3.2.x](https://github.com/danialfarid/ng-file-upload/releases/tag/3.2.3) [version 4.x.x](https://github.com/danialfarid/ng-file-upload/releases/tag/4.0.0) [version 5.x.x](https://github.com/danialfarid/ng-file-upload/releases/tag/5.0.0) [version 6.x.x](https://github.com/danialfarid/ng-file-upload/releases/tag/6.0.0) [version 6.2.x](https://github.com/danialfarid/ng-file-upload/releases/tag/6.2.0) [version 7.0.x](https://github.com/danialfarid/ng-file-upload/releases/tag/7.0.0) [version 7.2.x](https://github.com/danialfarid/ng-file-upload/releases/tag/7.2.0) [version 8.0.x](https://github.com/danialfarid/ng-file-upload/releases/tag/8.0.1) [version 9.0.x](https://github.com/danialfarid/ng-file-upload/releases/tag/9.0.0) [version 10.0.x](https://github.com/danialfarid/ng-file-upload/releases/tag/10.0.0) [version 11.0.x](https://github.com/danialfarid/ng-file-upload/releases/tag/11.0.0) [version 12.0.x](https://github.com/danialfarid/ng-file-upload/releases/tag/12.0.0) [version 12.1.x](https://github.com/danialfarid/ng-file-upload/releases/tag/12.1.0) [version 12.2.x](https://github.com/danialfarid/ng-file-upload/releases/tag/12.2.3)
16
+
17
+
18
+
19
+ Ask questions on [StackOverflow](http://stackoverflow.com/) under the [ng-file-upload](http://stackoverflow.com/tags/ng-file-upload/) tag.<br/>
20
+ For bug report or feature request please search through existing [issues](https://github.com/danialfarid/ng-file-upload/issues) first then open a new one [here](https://github.com/danialfarid/ng-file-upload/issues/new). For faster response provide steps to reproduce/versions with a jsfiddle link. If you need support for your company contact [me](mailto:danial.farid@gmail.com).<br/>
21
+ If you like this plugin give it a thumbs up at [ngmodules](http://ngmodules.org/modules/ng-file-upload) or get me a <a target="_blank" href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=danial%2efarid%40gmail%2ecom&lc=CA&item_name=ng%2dfile%2dupload&item_number=ng%2dfile%2dupload&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">cup of tea <img src="https://angular-file-upload.appspot.com/img/tea.png" width="40" height="24" title="Icon made by Freepik.com"></a>. Contributions are welcomed.
22
+
23
+
24
+ Table of Content:
25
+ * [Features](#features)
26
+ * [Install](#install) ([Manual](#manual), [Bower](#bower), [NuGet](#nuget), [NPM](#npm))
27
+ * [Usage](#usage)
28
+ * [Old Browsers](#old_browsers)
29
+ * [Server Side](#server)
30
+ * [Samples](#server) ([Java](#java), [Spring](#spring), [Node.js](#node), [Rails](#rails), [PHP](#php), [.Net](#net))
31
+ * [CORS](#cors)
32
+ * [Amazon S3 Upload](#s3)
33
+
34
+ ##<a name="features"></a> Features
35
+ * file upload progress, cancel/abort
36
+ * file drag and drop (html5 only)
37
+ * image paste from clipboard and drag and drop from browser pages (html5 only).
38
+ * image resize and center crop (native) and user controlled crop through [ngImgCrop](https://github.com/alexk111/ngImgCrop). See [crop sample](http://jsfiddle.net/danialfarid/xxo3sk41/590/) (html5 only)
39
+ * orientation fix for jpeg image files with exif orientation data
40
+ * resumable uploads: pause/resume upload (html5 only)
41
+ * native validation support for file type/size, image width/height/aspect ratio, video/audio duration, and `ng-required` with pluggable custom sync or async validations.
42
+ * show thumbnail or preview of selected images/audio/videos
43
+ * supports CORS and direct upload of file's binary data using `Upload.$http()`
44
+ * plenty of sample server side code, available on nuget
45
+ * on demand flash [FileAPI](https://github.com/mailru/FileAPI) shim loading no extra load for html5 browsers.
46
+ * HTML5 FileReader.readAsDataURL shim for IE8-9
47
+ * available on [npm](https://www.npmjs.com/package/ng-file-upload), [bower](https://libraries.io/bower/ng-file-upload), [meteor](https://atmospherejs.com/danialf/ng-file-upload), [nuget](https://www.nuget.org/packages/angular-file-upload)
48
+
49
+ ##<a name="install"></a> Install
50
+
51
+ * <a name="manual"></a>**Manual**: download latest from [here](https://github.com/danialfarid/ng-file-upload-bower/releases/latest)
52
+ * <a name="bower"></a>**Bower**:
53
+ * `bower install ng-file-upload-shim --save`(for non html5 suppport)
54
+ * `bower install ng-file-upload --save`
55
+ * <a name="nuget"></a>**NuGet**: `PM> Install-Package angular-file-upload` (thanks to [Georgios Diamantopoulos](https://github.com/georgiosd))
56
+ * <a name="npm"></a>**NPM**: `npm install ng-file-upload`
57
+ ```html
58
+ <script src="angular(.min).js"></script>
59
+ <script src="ng-file-upload-shim(.min).js"></script> <!-- for no html5 browsers support -->
60
+ <script src="ng-file-upload(.min).js"></script>
61
+ ```
62
+
63
+ ##<a name="usage"></a> Usage
64
+
65
+ ###Samples:
66
+ * Upload with form submit and validations: [http://jsfiddle.net/danialfarid/maqbzv15/1118/](http://jsfiddle.net/danialfarid/maqbzv15/1118/)
67
+ * Upload multiple files one by one on file select:
68
+ [http://jsfiddle.net/danialfarid/2vq88rfs/136/](http://jsfiddle.net/danialfarid/2vq88rfs/136/)
69
+ * Upload multiple files in one request on file select (html5 only):
70
+ [http://jsfiddle.net/danialfarid/huhjo9jm/5/](http://jsfiddle.net/danialfarid/huhjo9jm/5/)
71
+ * Upload single file on file select:
72
+ [http://jsfiddle.net/danialfarid/0mz6ff9o/135/](http://jsfiddle.net/danialfarid/0mz6ff9o/135/)
73
+ * Drop and upload with $watch:
74
+ [http://jsfiddle.net/danialfarid/s8kc7wg0/400/](http://jsfiddle.net/danialfarid/s8kc7wg0/400/)
75
+ * Image Crop and Upload
76
+ [http://jsfiddle.net/danialfarid/xxo3sk41/590/](http://jsfiddle.net/danialfarid/xxo3sk41/590/)
77
+ ```html
78
+ <script src="angular.min.js"></script>
79
+ <!-- shim is needed to support non-HTML5 FormData browsers (IE8-9)-->
80
+ <script src="ng-file-upload-shim.min.js"></script>
81
+ <script src="ng-file-upload.min.js"></script>
82
+
83
+ Upload on form submit or button click
84
+ <form ng-app="fileUpload" ng-controller="MyCtrl" name="form">
85
+ Single Image with validations
86
+ <div class="button" ngf-select ng-model="file" name="file" ngf-pattern="'image/*'"
87
+ ngf-accept="'image/*'" ngf-max-size="20MB" ngf-min-height="100"
88
+ ngf-resize="{width: 100, height: 100}">Select</div>
89
+ Multiple files
90
+ <div class="button" ngf-select ng-model="files" ngf-multiple="true">Select</div>
91
+ Drop files: <div ngf-drop ng-model="files" class="drop-box">Drop</div>
92
+ <button type="submit" ng-click="submit()">submit</button>
93
+ </form>
94
+
95
+ Upload right away after file selection:
96
+ <div class="button" ngf-select="upload($file)">Upload on file select</div>
97
+ <div class="button" ngf-select="uploadFiles($files)" multiple="multiple">Upload on file select</div>
98
+ Drop File:
99
+ <div ngf-drop="uploadFiles($files)" class="drop-box"
100
+ ngf-drag-over-class="'dragover'" ngf-multiple="true"
101
+ ngf-pattern="'image/*,application/pdf'">Drop Images or PDFs files here</div>
102
+ <div ngf-no-file-drop>File Drag/Drop is not supported for this browser</div>
103
+
104
+ Image thumbnail: <img ngf-thumbnail="file || '/thumb.jpg'">
105
+ Audio preview: <audio controls ngf-src="file"></audio>
106
+ Video preview: <video controls ngf-src="file"></video>
107
+ ```
108
+ Javascript code:
109
+ ```js
110
+ //inject directives and services.
111
+ var app = angular.module('fileUpload', ['ngFileUpload']);
112
+
113
+ app.controller('MyCtrl', ['$scope', 'Upload', function ($scope, Upload) {
114
+ // upload later on form submit or something similar
115
+ $scope.submit = function() {
116
+ if ($scope.form.file.$valid && $scope.file) {
117
+ $scope.upload($scope.file);
118
+ }
119
+ };
120
+
121
+ // upload on file select or drop
122
+ $scope.upload = function (file) {
123
+ Upload.upload({
124
+ url: 'upload/url',
125
+ data: {file: file, 'username': $scope.username}
126
+ }).then(function (resp) {
127
+ console.log('Success ' + resp.config.data.file.name + 'uploaded. Response: ' + resp.data);
128
+ }, function (resp) {
129
+ console.log('Error status: ' + resp.status);
130
+ }, function (evt) {
131
+ var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
132
+ console.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name);
133
+ });
134
+ };
135
+ // for multiple files:
136
+ $scope.uploadFiles = function (files) {
137
+ if (files && files.length) {
138
+ for (var i = 0; i < files.length; i++) {
139
+ Upload.upload({..., data: {file: files[i]}, ...})...;
140
+ }
141
+ // or send them all together for HTML5 browsers:
142
+ Upload.upload({..., data: {file: files}, ...})...;
143
+ }
144
+ }
145
+ }]);
146
+ ```
147
+
148
+ ### Full reference
149
+
150
+ #### File select and drop
151
+
152
+ At least one of the `ngf-select` or `ngf-drop` are mandatory for the plugin to link to the element.
153
+ `ngf-select` only attributes are marked with * and `ngf-drop` only attributes are marked with +.
154
+
155
+ ```html
156
+ <div|button|input type="file"|ngf-select|ngf-drop...
157
+ ngf-select="" or "upload($files, ...)" // called when files are selected or cleared
158
+ ngf-drop="" or "upload($files, ...)" // called when files being dropped
159
+ // You can use ng-model or ngf-change instead of specifying function for ngf-drop and ngf-select
160
+ // function parameters are the same as ngf-change
161
+ ngf-change="upload($files, $file, $newFiles, $duplicateFiles, $invalidFiles, $event)"
162
+ // called when files are selected, dropped, or cleared
163
+ ng-model="myFiles" // binds the valid selected/dropped file or files to the scope model
164
+ // could be an array or single file depending on ngf-multiple and ngf-keep values.
165
+ ngf-model-options="{updateOn: 'change click drop dropUrl paste', allowInvalid: false, debounce: 0}"
166
+ // updateOn could be used to disable resetting on click, or updating on paste, browser image drop, etc.
167
+ // allowInvalid default is false could allow invalid files in the model
168
+ // debouncing will postpone model update (miliseconds). See angular ng-model-options for more details.
169
+ ngf-model-invalid="invalidFile(s)" // binds the invalid selected/dropped file or files to this model.
170
+ ngf-before-model-change="beforeChange($files, ...)" // called after file select/drop and before
171
+ // model change, validation and resize is processed
172
+ ng-disabled="boolean" // disables this element
173
+ ngf-select-disabled="boolean" // default false, disables file select on this element
174
+ ngf-drop-disabled="boolean" // default false, disables file drop on this element
175
+ ngf-multiple="boolean" // default false, allows selecting multiple files
176
+ ngf-keep="true|false|'distinct'" // default false, keep the previous ng-model files and
177
+ // append the new files. "'distinct'" removes duplicate files
178
+ // $newFiles and $duplicateFiles are set in ngf-change/select/drop functions.
179
+ ngf-fix-orientation="boolean" //default false, would rotate the jpeg image files that have
180
+ // exif orientation data. See #745. Could be a boolean function like shouldFixOrientation($file)
181
+ // to decide wethere to fix that file or not.
182
+
183
+ *ngf-capture="'camera'" or "'other'" // allows mobile devices to capture using camera
184
+ *ngf-accept="'image/*'" // standard HTML accept attr, browser specific select popup window
185
+
186
+ +ngf-allow-dir="boolean" // default true, allow dropping files only for Chrome webkit browser
187
+ +ngf-include-dir="boolean" //default false, include directories in the dropped file array.
188
+ //You can detect if they are directory or not by checking the type === 'directory'.
189
+ +ngf-drag-over-class="{pattern: 'image/*', accept:'acceptClass', reject:'rejectClass', delay:100}"
190
+ or "'myDragOverClass'" or "calcDragOverClass($event)"
191
+ // default "dragover". drag over css class behaviour. could be a string, a function
192
+ // returning class name or a json object.
193
+ // accept/reject class only works in Chrome, validating only the file mime type.
194
+ // if pattern is not specified ngf-pattern will be used. See following docs for more info.
195
+ +ngf-drag="drag($isDragging, $class, $event)" // function called on drag over/leave events.
196
+ // $isDragging: boolean true if is dragging over(dragover), false if drag has left (dragleave)
197
+ // $class is the class that is being set for the element calculated by ngf-drag-over-class
198
+ +ngf-drop-available="dropSupported" // set the value of scope model to true or false based on file
199
+ // drag&drop support for this browser
200
+ +ngf-stop-propagation="boolean" // default false, whether to propagate drag/drop events.
201
+ +ngf-hide-on-drop-not-available="boolean" // default false, hides element if file drag&drop is not
202
+ +ngf-enable-firefox-paste="boolean" // *experimental* default false, enable firefox image paste by making element contenteditable
203
+
204
+ ngf-resize="{width: 100, height: 100, quality: .8, type: 'image/jpeg',
205
+ ratio: '1:2', centerCrop: true, pattern='.jpg', restoreExif: false}"
206
+ or resizeOptions() // a function returning a promise which resolves into the options.
207
+ // resizes the image to the given width/height or ratio. Quality is optional between 0.1 and 1.0),
208
+ // type is optional convert it to the given image type format.
209
+ // centerCrop true will center crop the image if it does not fit within the given width/height or ratio.
210
+ // centerCrop false (default) will not crop the image and will fit it within the given width/height or ratio
211
+ // so the resulting image width (or height) could be less than given width (or height).
212
+ // pattern is to resize only the files that their name or type matches the pattern similar to ngf-pattern.
213
+ // restoreExif boolean default true, will restore exif info on the resized image.
214
+ ngf-resize-if="$width > 1000 || $height > 1000" or "resizeCondition($file, $width, $height)"
215
+ // apply ngf-resize only if this function returns true. To filter specific images to be resized.
216
+ ngf-validate-after-resize="boolean" // default false, if true all validation will be run after
217
+ // the images are being resized, so any validation error before resize will be ignored.
218
+
219
+ //validations:
220
+ ngf-max-files="10" // maximum number of files allowed to be selected or dropped, validate error name: maxFiles
221
+ ngf-pattern="'.pdf,.jpg,video/*,!.jog'" // comma separated wildcard to filter file names and types allowed
222
+ // you can exclude specific files by ! at the beginning.
223
+ // validate error name: pattern
224
+ ngf-min-size, ngf-max-size, ngf-max-total-size="100" in bytes or "'10KB'" or "'10MB'" or "'10GB'"
225
+ // validate as form.file.$error.maxSize=true and file.$error='maxSize'
226
+ // ngf-max-total-size is for multiple file select and validating the total size of all files.
227
+ ngf-min-height, ngf-max-height, ngf-min-width, ngf-max-width="1000" in pixels only images
228
+ // validate error names: minHeight, maxHeight, minWidth, maxWidth
229
+ ngf-ratio="8:10,1.6" // list of comma separated valid aspect ratio of images in float or 2:3 format
230
+ // validate error name: ratio
231
+ ngf-min-ratio, ngf-max-ratio="8:10" // min or max allowed aspect ratio for the image.
232
+ ngf-dimensions="$width > 1000 || $height > 1000" or "validateDimension($file, $width, $height)"
233
+ // validate the image dimensions, validate error name: dimensions
234
+ ngf-min-duration, ngf-max-duration="100.5" in seconds or "'10s'" or "'10m'" or "'10h'" only audio, video
235
+ // validate error name: maxDuration
236
+ ngf-duration="$duration > 1000" or "validateDuration($file, $duration)"
237
+ // validate the media duration, validate error name: duration
238
+
239
+ ngf-validate="{size: {min: 10, max: '20MB'}, width: {min: 100, max:10000}, height: {min: 100, max: 300}
240
+ ratio: '2x1', duration: {min: '10s', max: '5m'}, pattern: '.jpg'}"
241
+ shorthand form for above validations in one place.
242
+ ngf-validate-fn="validate($file)" // custom validation function, return boolean or string containing the error.
243
+ // validate error name: validateFn
244
+ ngf-validate-async-fn="validate($file)" // custom validation function, return a promise that resolve to
245
+ // boolean or string containing the error. validate error name: validateAsyncFn
246
+ ngf-validate-force="boolean" // default false, if true file.$error will be set if the dimension or duration
247
+ // values for validations cannot be calculated for example image load error or unsupported video by the browser.
248
+ // by default it would assume the file is valid if the duration or dimension cannot be calculated by the browser.
249
+ ngf-ignore-invalid="'pattern maxSize'" // ignore the files that fail the specified validations. They will
250
+ // just be ignored and will not show up in ngf-model-invalid or make the form invalid.
251
+ // space separated list of validate error names.
252
+ ngf-run-all-validations="boolean" // default false. Runs all the specified validate directives. By default
253
+ // once a validation fails for a file it would stop running other validations for that file.
254
+
255
+ >Upload/Drop</div>
256
+
257
+ <div|... ngf-no-file-drop>File Drag/drop is not supported</div>
258
+
259
+ // filter to convert the file to base64 data url.
260
+ <a href="file | ngfDataUrl">image</a>
261
+ ```
262
+
263
+ #### File preview
264
+ ```html
265
+ <img|audio|video|div
266
+ *ngf-src="file" //To preview the selected file, sets src attribute to the file data url.
267
+ *ngf-background="file" //sets background-image style to the file data url.
268
+ ngf-resize="{width: 20, height: 20, quality: 0.9}" // only for image resizes the image before setting it
269
+ // as src or background image. quality is optional.
270
+ ngf-no-object-url="true or false" // see #887 to force base64 url generation instead of object url. Default false
271
+ >
272
+
273
+ <div|span|...
274
+ *ngf-thumbnail="file" //Generates a thumbnail version of the image file
275
+ ngf-size="{width: 20, height: 20, quality: 0.9}" the image will be resized to this size
276
+ // if not specified will be resized to this element`s client width and height.
277
+ ngf-as-background="boolean" //if true it will set the background image style instead of src attribute.
278
+ >
279
+ ```
280
+
281
+ #### Upload service:
282
+ ```js
283
+ var upload = Upload.upload({
284
+ *url: 'server/upload/url', // upload.php script, node.js route, or servlet url
285
+ /*
286
+ Specify the file and optional data to be sent to the server.
287
+ Each field including nested objects will be sent as a form data multipart.
288
+ Samples: {pic: file, username: username}
289
+ {files: files, otherInfo: {id: id, person: person,...}} multiple files (html5)
290
+ {profiles: {[{pic: file1, username: username1}, {pic: file2, username: username2}]} nested array multiple files (html5)
291
+ {file: file, info: Upload.json({id: id, name: name, ...})} send fields as json string
292
+ {file: file, info: Upload.jsonBlob({id: id, name: name, ...})} send fields as json blob, 'application/json' content_type
293
+ {picFile: Upload.rename(file, 'profile.jpg'), title: title} send file with picFile key and profile.jpg file name*/
294
+ *data: {key: file, otherInfo: uploadInfo},
295
+ /*
296
+ This is to accommodate server implementations expecting nested data object keys in .key or [key] format.
297
+ Example: data: {rec: {name: 'N', pic: file}} sent as: rec[name] -> N, rec[pic] -> file
298
+ data: {rec: {name: 'N', pic: file}}, objectKey: '.k' sent as: rec.name -> N, rec.pic -> file */
299
+ objectKey: '[k]' or '.k' // default is '[k]'
300
+ /*
301
+ This is to accommodate server implementations expecting array data object keys in '[i]' or '[]' or
302
+ ''(multiple entries with same key) format.
303
+ Example: data: {rec: [file[0], file[1], ...]} sent as: rec[0] -> file[0], rec[1] -> file[1],...
304
+ data: {rec: {rec: [f[0], f[1], ...], arrayKey: '[]'} sent as: rec[] -> f[0], rec[] -> f[1],...*/
305
+ arrayKey: '[i]' or '[]' or '.i' or '' //default is '[i]'
306
+ method: 'POST' or 'PUT'(html5), default POST,
307
+ headers: {'Authorization': 'xxx'}, // only for html5
308
+ withCredentials: boolean,
309
+ /*
310
+ See resumable upload guide below the code for more details (html5 only) */
311
+ resumeSizeUrl: '/uploaded/size/url?file=' + file.name // uploaded file size so far on the server.
312
+ resumeSizeResponseReader: function(data) {return data.size;} // reads the uploaded file size from resumeSizeUrl GET response
313
+ resumeSize: function() {return promise;} // function that returns a prommise which will be
314
+ // resolved to the upload file size on the server.
315
+ resumeChunkSize: 10000 or '10KB' or '10MB' // upload in chunks of specified size
316
+ disableProgress: boolean // default false, experimental as hotfix for potential library conflicts with other plugins
317
+ ... and all other angular $http() options could be used here.
318
+ })
319
+
320
+ // returns a promise
321
+ upload.then(function(resp) {
322
+ // file is uploaded successfully
323
+ console.log('file ' + resp.config.data.file.name + 'is uploaded successfully. Response: ' + resp.data);
324
+ }, function(resp) {
325
+ // handle error
326
+ }, function(evt) {
327
+ // progress notify
328
+ console.log('progress: ' + parseInt(100.0 * evt.loaded / evt.total) + '% file :'+ evt.config.data.file.name);
329
+ });
330
+ upload.catch(errorCallback);
331
+ upload.finally(callback, notifyCallback);
332
+
333
+ /* access or attach event listeners to the underlying XMLHttpRequest */
334
+ upload.xhr(function(xhr){
335
+ xhr.upload.addEventListener(...)
336
+ });
337
+
338
+ /* cancel/abort the upload in progress. */
339
+ upload.abort();
340
+
341
+ /*
342
+ alternative way of uploading, send the file binary with the file's content-type.
343
+ Could be used to upload files to CouchDB, imgur, etc... html5 FileReader is needed.
344
+ This is equivalent to angular $http() but allow you to listen to the progress event for HTML5 browsers.*/
345
+ Upload.http({
346
+ url: '/server/upload/url',
347
+ headers : {
348
+ 'Content-Type': file.type
349
+ },
350
+ data: file
351
+ })
352
+
353
+ /* Set the default values for ngf-select and ngf-drop directives*/
354
+ Upload.setDefaults({ngfMinSize: 20000, ngfMaxSize:20000000, ...})
355
+
356
+ // These two defaults could be decreased if you experience out of memory issues
357
+ // or could be increased if your app needs to show many images on the page.
358
+ // Each image in ngf-src, ngf-background or ngf-thumbnail is stored and referenced as a blob url
359
+ // and will only be released if the max value of the followings is reached.
360
+ Upload.defaults.blobUrlsMaxMemory = 268435456 // default max total size of files stored in blob urls.
361
+ Upload.defaults.blobUrlsMaxQueueSize = 200 // default max number of blob urls stored by this application.
362
+
363
+ /* Convert a single file or array of files to a single or array of
364
+ base64 data url representation of the file(s).
365
+ Could be used to send file in base64 format inside json to the databases */
366
+ Upload.base64DataUrl(files).then(function(urls){...});
367
+
368
+ /* Convert the file to blob url object or base64 data url based on boolean disallowObjectUrl value */
369
+ Upload.dataUrl(file, boolean).then(function(url){...});
370
+
371
+ /* Get image file dimensions*/
372
+ Upload.imageDimensions(file).then(function(dimensions){console.log(dimensions.width, dimensions.height);});
373
+
374
+ /* Get audio/video duration*/
375
+ Upload.mediaDuration(file).then(function(durationInSeconds){...});
376
+
377
+ /* Resizes an image. Returns a promise */
378
+ // options: width, height, quality, type, ratio, centerCrop, resizeIf, restoreExif
379
+ //resizeIf(width, height) returns boolean. See ngf-resize directive for more details of options.
380
+ Upload.resize(file, options).then(function(resizedFile){...});
381
+
382
+ /* returns boolean showing if image resize is supported by this browser*/
383
+ Upload.isResizeSupported()
384
+ /* returns boolean showing if resumable upload is supported by this browser*/
385
+ Upload.isResumeSupported()
386
+
387
+ /* returns a file which will be uploaded with the newName instead of original file name */
388
+ Upload.rename(file, newName)
389
+ /* converts the object to a Blob object with application/json content type
390
+ for jsob byte streaming support #359 (html5 only)*/
391
+ Upload.jsonBlob(obj)
392
+ /* converts the value to json to send data as json string. Same as angular.toJson(obj) */
393
+ Upload.json(obj)
394
+ /* converts a dataUrl to Blob object.*/
395
+ var blob = upload.dataUrltoBlob(dataurl, name);
396
+ /* returns true if there is an upload in progress. Can be used to prompt user before closing browser tab */
397
+ Upload.isUploadInProgress() boolean
398
+ /* downloads and converts a given url to Blob object which could be added to files model */
399
+ Upload.urlToBlob(url).then(function(blob) {...});
400
+ /* returns boolean to check if the object is file and could be used as file in Upload.upload()/http() */
401
+ Upload.isFile(obj);
402
+ /* fixes the exif orientation of the jpeg image file*/
403
+ Upload.applyExifRotation(file).then(...)
404
+ ```
405
+ **ng-model**
406
+ The model value will be a single file instead of an array if all of the followings are true:
407
+ * `ngf-multiple` is not set or is resolved to false.
408
+ * `multiple` attribute is not set on the element
409
+ * `ngf-keep` is not set or is resolved to false.
410
+
411
+ **validation**
412
+ When any of the validation directives specified the form validation will take place and
413
+ you can access the value of the validation using `myForm.myFileInputName.$error.<validate error name>`
414
+ for example `form.file.$error.pattern`.
415
+ If multiple file selection is allowed you can specify `ngf-model-invalid="invalidFiles"` to assing the invalid files to
416
+ a model and find the error of each individual file with `file.$error` and description of it with `file.$errorParam`.
417
+ You can use angular ngf-model-options to allow invalid files to be set to the ng-model `ngf-model-options="{allowInvalid: true}"`.
418
+
419
+ **Upload multiple files**: Only for HTML5 FormData browsers (not IE8-9) you have an array of files or more than one file in your `data` to
420
+ send them all in one request . Non-html5 browsers due to flash limitation will upload each file one by one in a separate request.
421
+ You should iterate over the files and send them one by one for a cross browser solution.
422
+
423
+ **drag and drop styling**: For file drag and drop, `ngf-drag-over-class` could be used to style the drop zone.
424
+ It can be a function that returns a class name based on the $event. Default is "dragover" string.
425
+ Only in chrome It could be a json object `{accept: 'a', 'reject': 'r', pattern: 'image/*', delay: 10}` that specify the
426
+ class name for the accepted or rejected drag overs. The `pattern` specified or `ngf-pattern` will be used to validate the file's `mime-type`
427
+ since that is the only property of the file that is reported by the browser on drag. So you cannot validate
428
+ the file name/extension, size or other validations on drag. There is also some limitation on some file types which are not reported by Chrome.
429
+ `delay` default is 100, and is used to fix css3 transition issues from dragging over/out/over [#277](https://github.com/danialfarid/angular-file-upload/issues/277).
430
+
431
+ **Upload.setDefaults()**:
432
+ If you have many file selects or drops you can set the default values for the directives by calling `Upload.setDefaults(options)`. `options` would be a json object with directive names in camelcase and their default values.
433
+
434
+ **Resumable Uploads:**
435
+ The plugin supports resumable uploads for large files.
436
+ On your server you need to keep track of what files are being uploaded and how much of the file is uploaded.
437
+ * `url` upload endpoint need to reassemble the file chunks by appending uploading content to the end of the file or correct chunk position if it already exists.
438
+ * `resumeSizeUrl` server endpoint to return uploaded file size so far on the server to be able to resume the upload from
439
+ where it is ended. It should return zero if the file has not been uploaded yet. <br/>A GET request will be made to that
440
+ url for each upload to determine if part of the file is already uploaded or not. You need a unique way of identifying the file
441
+ on the server so you can pass the file name or generated id for the file as a request parameter.<br/>
442
+ By default it will assume that the response
443
+ content is an integer or a json object with `size` integer property. If you return other formats from the endpoint you can specify
444
+ `resumeSizeResponseReader` function to return the size value from the response. Alternatively instead of `resumeSizeUrl` you can use
445
+ `resumeSize` function which returns a promise that resolves to the size of the uploaded file so far.
446
+ Make sure when the file is fully uploaded without any error/abort this endpoint returns zero for the file size
447
+ if you want to let the user to upload the same file again. Or optionally you could have a restart endpoint to
448
+ set that back to zero to allow re-uploading the same file.
449
+ * `resumeChunkSize` optionally you can specify this to upload the file in chunks to the server. This will allow uploading to GAE or other servers that have
450
+ file size limitation and trying to upload the whole request before passing it for internal processing.<br/>
451
+ If this option is set the requests will have the following extra fields:
452
+ `_chunkSize`, `_currentChunkSize`, `_chunkNumber` (zero starting), and `_totalSize` to help the server to write the uploaded chunk to
453
+ the correct position.
454
+ Uploading in chunks could slow down the overall upload time specially if the chunk size is too small.
455
+ When you provide `resumeChunkSize` option one of the `resumeSizeUrl` or `resumeSize` is mandatory to know how much of the file is uploaded so far.
456
+
457
+
458
+
459
+
460
+ ##<a name="old_browsers"></a> Old browsers
461
+
462
+ For browsers not supporting HTML5 FormData (IE8, IE9, ...) [FileAPI](https://github.com/mailru/FileAPI) module is used.
463
+ **Note**: You need Flash installed on your browser since `FileAPI` uses Flash to upload files.
464
+
465
+ These two files **`FileAPI.min.js`, `FileAPI.flash.swf`** will be loaded by the module on demand (no need to be included in the html) if the browser does not supports HTML5 FormData to avoid extra load for HTML5 browsers.
466
+ You can place these two files beside `angular-file-upload-shim(.min).js` on your server to be loaded automatically from the same path or you can specify the path to those files if they are in a different path using the following script:
467
+ ```html
468
+ <script>
469
+ //optional need to be loaded before angular-file-upload-shim(.min).js
470
+ FileAPI = {
471
+ //only one of jsPath or jsUrl.
472
+ jsPath: '/js/FileAPI.min.js/folder/',
473
+ jsUrl: 'yourcdn.com/js/FileAPI.min.js',
474
+
475
+ //only one of staticPath or flashUrl.
476
+ staticPath: '/flash/FileAPI.flash.swf/folder/',
477
+ flashUrl: 'yourcdn.com/js/FileAPI.flash.swf',
478
+
479
+ //forceLoad: true, html5: false //to debug flash in HTML5 browsers
480
+ //noContentTimeout: 10000 (see #528)
481
+ }
482
+ </script>
483
+ <script src="angular-file-upload-shim.min.js"></script>...
484
+ ```
485
+ **Old browsers known issues**:
486
+ * Because of a Flash limitation/bug if the server doesn't send any response body the status code of the response will be always `204 'No Content'`. So if you have access to your server upload code at least return a character in the response for the status code to work properly.
487
+ * Custom headers will not work due to a Flash limitation [#111](https://github.com/danialfarid/ng-file-upload/issues/111) [#224](https://github.com/danialfarid/ng-file-upload/issues/224) [#129](https://github.com/danialfarid/ng-file-upload/issues/129)
488
+ * Due to Flash bug [#92](https://github.com/danialfarid/ng-file-upload/issues/92) Server HTTP error code 400 will be returned as 200 to the client. So avoid returning 400 on your server side for upload response otherwise it will be treated as a success response on the client side.
489
+ * In case of an error response (http code >= 400) the custom error message returned from the server may not be available. For some error codes flash just provide a generic error message and ignores the response text. [#310](https://github.com/danialfarid/ng-file-upload/issues/310)
490
+ * Older browsers won't allow `PUT` requests. [#261](https://github.com/danialfarid/ng-file-upload/issues/261)
491
+
492
+ ##<a name="server"></a>Server Side
493
+
494
+ * <a name="java"></a>**Java**
495
+ You can find the sample server code in Java/GAE [here](https://github.com/danialfarid/ng-file-upload/blob/master/demo/src/main/java/com/df/angularfileupload/)
496
+ * <a name="spring"></a>**Spring MVC**
497
+ [Wiki Sample](https://github.com/danialfarid/ng-file-upload/wiki/spring-mvc-example) provided by [zouroto](https://github.com/zouroto)
498
+ * <a name="node"></a>**Node.js**
499
+ [Wiki Sample](https://github.com/danialfarid/ng-file-upload/wiki/node.js-example) provided by [chovy](https://github.com/chovy).
500
+ [Another wiki](https://github.com/danialfarid/ng-file-upload/wiki/Node-example) using Express 4.0 and the Multiparty provided by [Jonathan White](https://github.com/JonathanZWhite)
501
+ * <a name="rails"></a>**Rails**
502
+ * [Wiki Sample](https://github.com/danialfarid/ng-file-upload/wiki/Rails-Example) provided by [guptapriyank](https://github.com/guptapriyank).
503
+ * [Blog post](http://www.coshx.com/blog/2015/07/10/file-attachments-in-angular/)
504
+ provided by [Coshx Labs](http://www.coshx.com/).
505
+ * **Rails progress event**: If your server is Rails and Apache you may need to modify server configurations for the server to support upload progress. See [#207](https://github.com/danialfarid/ng-file-upload/issues/207)
506
+ * <a name="php"></a>**PHP**
507
+ [Wiki Sample] (https://github.com/danialfarid/ng-file-upload/wiki/PHP-Example) and related issue [only one file in $_FILES when uploading multiple files] (https://github.com/danialfarid/ng-file-upload/issues/475)
508
+ * <a name="net"></a>**.Net**
509
+ * [Demo](https://github.com/stewartm83/angular-fileupload-sample) showing how to use ng-file-upload with Asp.Net Web Api.
510
+ * Sample client and server code [demo/C#] (https://github.com/danialfarid/ng-file-upload/tree/master/demo/C%23) provided by [AtomStar](https://github.com/AtomStar)
511
+
512
+ ##<a name="cors"></a>CORS
513
+ To support CORS upload your server needs to allow cross domain requests. You can achieve that by having a filter or interceptor on your upload file server to add CORS headers to the response similar to this:
514
+ ([sample java code](https://github.com/danialfarid/ng-file-upload/blob/master/demo/src/main/java/com/df/angularfileupload/CORSFilter.java))
515
+ ```java
516
+ httpResp.setHeader("Access-Control-Allow-Methods", "POST, PUT, OPTIONS");
517
+ httpResp.setHeader("Access-Control-Allow-Origin", "your.other.server.com");
518
+ httpResp.setHeader("Access-Control-Allow-Headers", "Content-Type"));
519
+ ```
520
+ For non-HTML5 IE8-9 browsers you would also need a `crossdomain.xml` file at the root of your server to allow CORS for flash:
521
+ <a name="crossdomain"></a>([sample xml](https://angular-file-upload.appspot.com/crossdomain.xml))
522
+ ```xml
523
+ <cross-domain-policy>
524
+ <site-control permitted-cross-domain-policies="all"/>
525
+ <allow-access-from domain="angular-file-upload.appspot.com"/>
526
+ <allow-http-request-headers-from domain="*" headers="*" secure="false"/>
527
+ </cross-domain-policy>
528
+ ```
529
+
530
+ #### <a name="s3"></a>Amazon AWS S3 Upload
531
+ For Amazon authentication version 4 [see this comment](https://github.com/danialfarid/ng-file-upload/issues/1128#issuecomment-196203268)
532
+
533
+ The <a href="https://angular-file-upload.appspot.com/" target="_blank">demo</a> page has an option to upload to S3.
534
+ Here is a sample config options:
535
+ ```js
536
+ Upload.upload({
537
+ url: 'https://angular-file-upload.s3.amazonaws.com/', //S3 upload url including bucket name
538
+ method: 'POST',
539
+ data: {
540
+ key: file.name, // the key to store the file on S3, could be file name or customized
541
+ AWSAccessKeyId: <YOUR AWS AccessKey Id>,
542
+ acl: 'private', // sets the access to the uploaded file in the bucket: private, public-read, ...
543
+ policy: $scope.policy, // base64-encoded json policy (see article below)
544
+ signature: $scope.signature, // base64-encoded signature based on policy string (see article below)
545
+ "Content-Type": file.type != '' ? file.type : 'application/octet-stream', // content type of the file (NotEmpty)
546
+ filename: file.name, // this is needed for Flash polyfill IE8-9
547
+ file: file
548
+ }
549
+ });
550
+ ```
551
+ [This article](http://aws.amazon.com/articles/1434/) explains more about these fields and provides instructions on how to generate the policy and signature using a server side tool.
552
+ These two values are generated from the json policy document which looks like this:
553
+ ```js
554
+ {
555
+ "expiration": "2020-01-01T00:00:00Z",
556
+ "conditions": [
557
+ {"bucket": "angular-file-upload"},
558
+ ["starts-with", "$key", ""],
559
+ {"acl": "private"},
560
+ ["starts-with", "$Content-Type", ""],
561
+ ["starts-with", "$filename", ""],
562
+ ["content-length-range", 0, 524288000]
563
+ ]
564
+ }
565
+ ```
566
+ The [demo](https://angular-file-upload.appspot.com/) page provide a helper tool to generate the policy and signature from you from the json policy document. **Note**: Please use https protocol to access demo page if you are using this tool to generate signature and policy to protect your aws secret key which should never be shared.
567
+
568
+ Make sure that you provide upload and CORS post to your bucket at AWS -> S3 -> bucket name -> Properties -> Edit bucket policy and Edit CORS Configuration. Samples of these two files:
569
+ ```js
570
+ {
571
+ "Version": "2012-10-17",
572
+ "Statement": [
573
+ {
574
+ "Sid": "UploadFile",
575
+ "Effect": "Allow",
576
+ "Principal": {
577
+ "AWS": "arn:aws:iam::xxxx:user/xxx"
578
+ },
579
+ "Action": [
580
+ "s3:GetObject",
581
+ "s3:PutObject"
582
+ ],
583
+ "Resource": "arn:aws:s3:::angular-file-upload/*"
584
+ },
585
+ {
586
+ "Sid": "crossdomainAccess",
587
+ "Effect": "Allow",
588
+ "Principal": "*",
589
+ "Action": "s3:GetObject",
590
+ "Resource": "arn:aws:s3:::angular-file-upload/crossdomain.xml"
591
+ }
592
+ ]
593
+ }
594
+ ```
595
+ ```xml
596
+ <?xml version="1.0" encoding="UTF-8"?>
597
+ <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
598
+ <CORSRule>
599
+ <AllowedOrigin>http://angular-file-upload.appspot.com</AllowedOrigin>
600
+ <AllowedMethod>POST</AllowedMethod>
601
+ <AllowedMethod>GET</AllowedMethod>
602
+ <AllowedMethod>HEAD</AllowedMethod>
603
+ <MaxAgeSeconds>3000</MaxAgeSeconds>
604
+ <AllowedHeader>*</AllowedHeader>
605
+ </CORSRule>
606
+ </CORSConfiguration>
607
+ ```
608
+
609
+ For IE8-9 flash polyfill you need to have a <a href='#crossdomain'>crossdomain.xml</a> file at the root of you S3 bucket. Make sure the content-type of crossdomain.xml is text/xml and you provide read access to this file in your bucket policy.
610
+
611
+
612
+ You can also have a look at [https://github.com/nukulb/s3-angular-file-upload](https://github.com/nukulb/s3-angular-file-upload) for another example with [this](https://github.com/danialfarid/ng-file-upload/issues/814#issuecomment-112198426) fix.
613
+
614
+
615
+
616
+