promethee 1.4.8 → 1.4.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -6
- data/app/assets/javascripts/promethee.js +4 -0
- data/app/assets/stylesheets/promethee-edit.sass +1 -0
- data/config/initializers/assets.rb +1 -0
- data/lib/promethee/rails/version.rb +1 -1
- data/node_modules/angular-summernote/CHANGELOG.md +149 -0
- data/node_modules/angular-summernote/LICENSE-MIT +22 -0
- data/node_modules/angular-summernote/README.md +270 -0
- data/node_modules/angular-summernote/bower.json +49 -0
- data/{vendor/assets/javascripts → node_modules/angular-summernote/dist}/angular-summernote.js +0 -0
- data/node_modules/angular-summernote/dist/angular-summernote.min.js +2 -0
- data/node_modules/angular-summernote/examples/fontstyle-plugin.html +48 -0
- data/node_modules/angular-summernote/examples/index.html +180 -0
- data/node_modules/angular-summernote/examples/index2.html +60 -0
- data/node_modules/angular-summernote/examples/index3.html +57 -0
- data/node_modules/angular-summernote/gulpfile.js +115 -0
- data/node_modules/angular-summernote/package.json +53 -0
- data/node_modules/angular-summernote/src/angular-summernote.js +206 -0
- data/node_modules/angular-summernote/test/angular-summernote.test.js +660 -0
- data/node_modules/angular-summernote/test/chai.conf.js +6 -0
- data/node_modules/angular-summernote/test/coverage/Chrome 37.0.2062 (Mac OS X 10.9.4)/index.html +350 -0
- data/node_modules/angular-summernote/test/coverage/Chrome 37.0.2062 (Mac OS X 10.9.4)/prettify.css +1 -0
- data/node_modules/angular-summernote/test/coverage/Chrome 37.0.2062 (Mac OS X 10.9.4)/prettify.js +1 -0
- data/node_modules/angular-summernote/test/coverage/Chrome 37.0.2062 (Mac OS X 10.9.4)/src/angular-summernote.js.html +694 -0
- data/node_modules/angular-summernote/test/coverage/Chrome 37.0.2062 (Mac OS X 10.9.4)/src/index.html +350 -0
- data/node_modules/angular-summernote/test/karma-angular-1-2-x.conf.js +33 -0
- data/node_modules/angular-summernote/test/karma-angular-1-3-x.conf.js +33 -0
- data/node_modules/angular-summernote/test/karma-angular-1-4-x.conf.js +33 -0
- data/node_modules/angular-summernote/test/karma-shared.conf.js +64 -0
- data/node_modules/angular-summernote/test/karma.conf.js +33 -0
- data/{vendor/assets/javascripts/summernote/locales/de-DE.js → node_modules/angular-summernote/test/lang/summernote-de-DE.js} +2 -17
- data/node_modules/angular-summernote/test/mocha.conf.js +3 -0
- data/node_modules/angular-ui-sortable/API.md +84 -0
- data/node_modules/angular-ui-sortable/CONTRIBUTING.md +12 -0
- data/node_modules/angular-ui-sortable/LICENSE +21 -0
- data/node_modules/angular-ui-sortable/README.md +350 -0
- data/node_modules/angular-ui-sortable/bower.json +26 -0
- data/node_modules/angular-ui-sortable/demo/demo.css +34 -0
- data/node_modules/angular-ui-sortable/demo/demo.html +29 -0
- data/node_modules/angular-ui-sortable/demo/demo.js +41 -0
- data/node_modules/angular-ui-sortable/dist/sortable.js +593 -0
- data/node_modules/angular-ui-sortable/dist/sortable.min.js +8 -0
- data/node_modules/angular-ui-sortable/gruntFile.js +202 -0
- data/node_modules/angular-ui-sortable/package.json +48 -0
- data/node_modules/angular-ui-sortable/publish.js +41 -0
- data/{vendor/assets/javascripts/ui-sortable.js → node_modules/angular-ui-sortable/src/sortable.js} +106 -200
- data/node_modules/angular-ui-sortable/test/bower_overrides.json +13 -0
- data/node_modules/angular-ui-sortable/test/karma.conf.js +85 -0
- data/node_modules/angular-ui-sortable/test/libs/jquery.simulate.dragandrevert.js +60 -0
- data/node_modules/angular-ui-sortable/test/sortable.e2e.callbacks.attr.spec.js +199 -0
- data/node_modules/angular-ui-sortable/test/sortable.e2e.callbacks.spec.js +729 -0
- data/node_modules/angular-ui-sortable/test/sortable.e2e.directiveoptions.spec.js +554 -0
- data/node_modules/angular-ui-sortable/test/sortable.e2e.directives.spec.js +371 -0
- data/node_modules/angular-ui-sortable/test/sortable.e2e.events.spec.js +167 -0
- data/node_modules/angular-ui-sortable/test/sortable.e2e.multi.spec.js +1232 -0
- data/node_modules/angular-ui-sortable/test/sortable.e2e.nested.spec.js +186 -0
- data/node_modules/angular-ui-sortable/test/sortable.e2e.spec.js +895 -0
- data/node_modules/angular-ui-sortable/test/sortable.spec.js +440 -0
- data/node_modules/angular-ui-sortable/test/sortable.test-directives.js +54 -0
- data/node_modules/angular-ui-sortable/test/sortable.test-helper.js +114 -0
- data/node_modules/angular-ui-sortable/test/sortable.tests.css +12 -0
- data/node_modules/ng-file-upload/LICENSE +20 -0
- data/node_modules/ng-file-upload/README.md +616 -0
- data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/FileAPI.flash.swf +0 -0
- data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/FileAPI.js +0 -0
- data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/FileAPI.min.js +0 -0
- data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/ng-file-upload-all.js +0 -0
- data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/ng-file-upload-all.min.js +0 -0
- data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/ng-file-upload-shim.js +0 -0
- data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/ng-file-upload-shim.min.js +0 -0
- data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/ng-file-upload.js +0 -0
- data/{vendor/assets/javascripts/ng-file-upload → node_modules/ng-file-upload/dist}/ng-file-upload.min.js +0 -0
- data/node_modules/ng-file-upload/index.js +2 -0
- data/node_modules/ng-file-upload/package.json +42 -0
- data/node_modules/summernote/CODE_OF_CONDUCT.md +46 -0
- data/node_modules/summernote/CONTRIBUTING.md +67 -0
- data/node_modules/summernote/ISSUE_TEMPLATE.md +14 -0
- data/node_modules/summernote/LICENSE +21 -0
- data/node_modules/summernote/PULL_REQUEST_TEMPLATE.md +28 -0
- data/node_modules/summernote/README.md +90 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/base.css +213 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/index.html +262 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/prettify.css +1 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/prettify.js +1 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/sort-arrow-sprite.png +0 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/sorter.js +158 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/Context.js.html +758 -0
- 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
- 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
- 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
- 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
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/index.html +171 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/index.html +145 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/index.html +119 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/index.html +353 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/renderer.js.html +263 -0
- 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
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs3/index.html +106 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs3/settings.js.html +956 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs3/ui.js.html +776 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs4/index.html +106 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs4/settings.js.html +968 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs4/ui.js.html +791 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/index.html +93 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/index.html +106 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/settings.js.html +953 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui.js.html +1919 -0
- 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
- 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
- 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
- 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
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/index.html +132 -0
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/summernote.js.html +203 -0
- 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
- 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
- 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
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/index.html +145 -0
- 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
- 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
- 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
- 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
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/editing/index.html +106 -0
- 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
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/index.html +93 -0
- 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
- 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
- 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
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/module/index.html +119 -0
- 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
- 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
- data/node_modules/summernote/coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/bs/module/index.html +106 -0
- data/node_modules/summernote/dist/font/summernote.eot +0 -0
- data/node_modules/summernote/dist/font/summernote.ttf +0 -0
- data/node_modules/summernote/dist/font/summernote.woff +0 -0
- data/{vendor/assets/javascripts/summernote/locales/ar-AR.js → node_modules/summernote/dist/lang/summernote-ar-AR.js} +55 -4
- data/node_modules/summernote/dist/lang/summernote-ar-AR.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/bg-BG.js → node_modules/summernote/dist/lang/summernote-bg-BG.js} +60 -4
- data/node_modules/summernote/dist/lang/summernote-bg-BG.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/ca-ES.js → node_modules/summernote/dist/lang/summernote-ca-ES.js} +12 -4
- data/node_modules/summernote/dist/lang/summernote-ca-ES.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/cs-CZ.js → node_modules/summernote/dist/lang/summernote-cs-CZ.js} +50 -4
- data/node_modules/summernote/dist/lang/summernote-cs-CZ.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/da-DK.js → node_modules/summernote/dist/lang/summernote-da-DK.js} +46 -5
- data/node_modules/summernote/dist/lang/summernote-da-DK.min.js +3 -0
- data/node_modules/summernote/dist/lang/summernote-de-DE.js +154 -0
- data/node_modules/summernote/dist/lang/summernote-de-DE.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/el-GR.js → node_modules/summernote/dist/lang/summernote-el-GR.js} +11 -3
- data/node_modules/summernote/dist/lang/summernote-el-GR.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/es-ES.js → node_modules/summernote/dist/lang/summernote-es-ES.js} +12 -4
- data/node_modules/summernote/dist/lang/summernote-es-ES.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/es-EU.js → node_modules/summernote/dist/lang/summernote-es-EU.js} +55 -4
- data/node_modules/summernote/dist/lang/summernote-es-EU.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/fa-IR.js → node_modules/summernote/dist/lang/summernote-fa-IR.js} +55 -5
- data/node_modules/summernote/dist/lang/summernote-fa-IR.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/fi-FI.js → node_modules/summernote/dist/lang/summernote-fi-FI.js} +52 -3
- data/node_modules/summernote/dist/lang/summernote-fi-FI.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/fr-FR.js → node_modules/summernote/dist/lang/summernote-fr-FR.js} +3 -2
- data/node_modules/summernote/dist/lang/summernote-fr-FR.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/gl-ES.js → node_modules/summernote/dist/lang/summernote-gl-ES.js} +12 -4
- data/node_modules/summernote/dist/lang/summernote-gl-ES.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/he-IL.js → node_modules/summernote/dist/lang/summernote-he-IL.js} +51 -3
- data/node_modules/summernote/dist/lang/summernote-he-IL.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/hr-HR.js → node_modules/summernote/dist/lang/summernote-hr-HR.js} +54 -3
- data/node_modules/summernote/dist/lang/summernote-hr-HR.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/hu-HU.js → node_modules/summernote/dist/lang/summernote-hu-HU.js} +25 -5
- data/node_modules/summernote/dist/lang/summernote-hu-HU.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/id-ID.js → node_modules/summernote/dist/lang/summernote-id-ID.js} +56 -4
- data/node_modules/summernote/dist/lang/summernote-id-ID.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/it-IT.js → node_modules/summernote/dist/lang/summernote-it-IT.js} +55 -4
- data/node_modules/summernote/dist/lang/summernote-it-IT.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/ja-JP.js → node_modules/summernote/dist/lang/summernote-ja-JP.js} +32 -10
- data/node_modules/summernote/dist/lang/summernote-ja-JP.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/ko-KR.js → node_modules/summernote/dist/lang/summernote-ko-KR.js} +44 -4
- data/node_modules/summernote/dist/lang/summernote-ko-KR.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/lt-LT.js → node_modules/summernote/dist/lang/summernote-lt-LT.js} +52 -4
- data/node_modules/summernote/dist/lang/summernote-lt-LT.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/lt-LV.js → node_modules/summernote/dist/lang/summernote-lt-LV.js} +27 -7
- data/node_modules/summernote/dist/lang/summernote-lt-LV.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/mn-MN.js → node_modules/summernote/dist/lang/summernote-mn-MN.js} +43 -4
- data/node_modules/summernote/dist/lang/summernote-mn-MN.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/nb-NO.js → node_modules/summernote/dist/lang/summernote-nb-NO.js} +53 -3
- data/node_modules/summernote/dist/lang/summernote-nb-NO.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/nl-NL.js → node_modules/summernote/dist/lang/summernote-nl-NL.js} +55 -4
- data/node_modules/summernote/dist/lang/summernote-nl-NL.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/pl-PL.js → node_modules/summernote/dist/lang/summernote-pl-PL.js} +46 -3
- data/node_modules/summernote/dist/lang/summernote-pl-PL.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/pt-BR.js → node_modules/summernote/dist/lang/summernote-pt-BR.js} +25 -8
- data/node_modules/summernote/dist/lang/summernote-pt-BR.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/pt-PT.js → node_modules/summernote/dist/lang/summernote-pt-PT.js} +54 -3
- data/node_modules/summernote/dist/lang/summernote-pt-PT.min.js +3 -0
- data/node_modules/summernote/dist/lang/summernote-ro-RO.js +155 -0
- data/node_modules/summernote/dist/lang/summernote-ro-RO.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/ru-RU.js → node_modules/summernote/dist/lang/summernote-ru-RU.js} +46 -3
- data/node_modules/summernote/dist/lang/summernote-ru-RU.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/sk-SK.js → node_modules/summernote/dist/lang/summernote-sk-SK.js} +54 -3
- data/node_modules/summernote/dist/lang/summernote-sk-SK.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/sl-SI.js → node_modules/summernote/dist/lang/summernote-sl-SI.js} +53 -4
- data/node_modules/summernote/dist/lang/summernote-sl-SI.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/sr-RS-Latin.js → node_modules/summernote/dist/lang/summernote-sr-RS-Latin.js} +54 -3
- data/node_modules/summernote/dist/lang/summernote-sr-RS-Latin.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/sr-RS.js → node_modules/summernote/dist/lang/summernote-sr-RS.js} +54 -3
- data/node_modules/summernote/dist/lang/summernote-sr-RS.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/sv-SE.js → node_modules/summernote/dist/lang/summernote-sv-SE.js} +55 -4
- data/node_modules/summernote/dist/lang/summernote-sv-SE.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/ta-IN.js → node_modules/summernote/dist/lang/summernote-ta-IN.js} +46 -4
- data/node_modules/summernote/dist/lang/summernote-ta-IN.min.js +3 -0
- data/node_modules/summernote/dist/lang/summernote-th-TH.js +155 -0
- data/node_modules/summernote/dist/lang/summernote-th-TH.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/tr-TR.js → node_modules/summernote/dist/lang/summernote-tr-TR.js} +3 -2
- data/node_modules/summernote/dist/lang/summernote-tr-TR.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/uk-UA.js → node_modules/summernote/dist/lang/summernote-uk-UA.js} +48 -4
- data/node_modules/summernote/dist/lang/summernote-uk-UA.min.js +3 -0
- data/node_modules/summernote/dist/lang/summernote-uz-UZ.js +112 -0
- data/node_modules/summernote/dist/lang/summernote-uz-UZ.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/vi-VN.js → node_modules/summernote/dist/lang/summernote-vi-VN.js} +55 -4
- data/node_modules/summernote/dist/lang/summernote-vi-VN.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/zh-CN.js → node_modules/summernote/dist/lang/summernote-zh-CN.js} +20 -7
- data/node_modules/summernote/dist/lang/summernote-zh-CN.min.js +3 -0
- data/{vendor/assets/javascripts/summernote/locales/zh-TW.js → node_modules/summernote/dist/lang/summernote-zh-TW.js} +45 -3
- data/node_modules/summernote/dist/lang/summernote-zh-TW.min.js +3 -0
- data/node_modules/summernote/dist/summernote-0.8.10-dist.zip +0 -0
- data/node_modules/summernote/dist/summernote-bs4.css +1 -0
- data/node_modules/summernote/dist/summernote-bs4.js +7323 -0
- data/node_modules/summernote/dist/summernote-bs4.js.map +1 -0
- data/node_modules/summernote/dist/summernote-bs4.min.js +3 -0
- data/node_modules/summernote/dist/summernote-lite.css +1 -0
- data/node_modules/summernote/dist/summernote-lite.js +7837 -0
- data/node_modules/summernote/dist/summernote-lite.js.map +1 -0
- data/node_modules/summernote/dist/summernote.css +1 -0
- data/node_modules/summernote/dist/summernote.js +7315 -0
- data/node_modules/summernote/dist/summernote.js.map +1 -0
- data/node_modules/summernote/dist/summernote.min.js +3 -0
- data/node_modules/summernote/examples/airmode.html +35 -0
- data/node_modules/summernote/examples/bs3.html +60 -0
- data/node_modules/summernote/examples/bs4.html +57 -0
- data/node_modules/summernote/examples/codemirror.html +45 -0
- data/node_modules/summernote/examples/external-api.html +76 -0
- data/node_modules/summernote/examples/hint-emoji.html +61 -0
- data/node_modules/summernote/examples/hint-symbols_mathematical-symbols_Greek-letters.html +54 -0
- data/node_modules/summernote/examples/hint-userdefine.html +48 -0
- data/node_modules/summernote/examples/ie8.html +32 -0
- data/node_modules/summernote/examples/jquery-custom-event.html +119 -0
- data/node_modules/summernote/examples/jquery19lt.html +25 -0
- data/node_modules/summernote/examples/lang.html +33 -0
- data/node_modules/summernote/examples/link-blank.html +33 -0
- data/node_modules/summernote/examples/lite.html +24 -0
- data/node_modules/summernote/examples/nativestyle.html +32 -0
- data/node_modules/summernote/examples/ondialog-multitab.html +77 -0
- data/node_modules/summernote/examples/ondialog.html +58 -0
- data/node_modules/summernote/examples/plugin-hello.html +37 -0
- data/node_modules/summernote/examples/rtl.html +32 -0
- data/node_modules/summernote/examples/symbols_mathematical-symbols_Greek-letters.json +1118 -0
- data/node_modules/summernote/examples/textarea.html +46 -0
- data/node_modules/summernote/examples/toolbar-container.html +35 -0
- data/node_modules/summernote/examples/with-google-font.html +50 -0
- data/node_modules/summernote/index.html +33 -0
- data/node_modules/summernote/karma.conf.js +42 -0
- data/node_modules/summernote/lang/summernote-ar-AR.js +155 -0
- data/node_modules/summernote/lang/summernote-bg-BG.js +155 -0
- data/node_modules/summernote/lang/summernote-ca-ES.js +155 -0
- data/node_modules/summernote/lang/summernote-cs-CZ.js +149 -0
- data/node_modules/summernote/lang/summernote-da-DK.js +155 -0
- data/node_modules/summernote/lang/summernote-de-DE.js +154 -0
- data/node_modules/summernote/lang/summernote-el-GR.js +155 -0
- data/node_modules/summernote/lang/summernote-es-ES.js +155 -0
- data/node_modules/summernote/lang/summernote-es-EU.js +154 -0
- data/node_modules/summernote/lang/summernote-fa-IR.js +155 -0
- data/node_modules/summernote/lang/summernote-fi-FI.js +153 -0
- data/node_modules/summernote/lang/summernote-fr-FR.js +155 -0
- data/node_modules/summernote/lang/summernote-gl-ES.js +155 -0
- data/node_modules/summernote/lang/summernote-he-IL.js +155 -0
- data/node_modules/summernote/lang/summernote-hr-HR.js +155 -0
- data/node_modules/summernote/lang/summernote-hu-HU.js +155 -0
- data/node_modules/summernote/lang/summernote-id-ID.js +155 -0
- data/node_modules/summernote/lang/summernote-it-IT.js +155 -0
- data/node_modules/summernote/lang/summernote-ja-JP.js +155 -0
- data/node_modules/summernote/lang/summernote-ko-KR.js +155 -0
- data/node_modules/summernote/lang/summernote-lt-LT.js +155 -0
- data/node_modules/summernote/lang/summernote-lt-LV.js +155 -0
- data/node_modules/summernote/lang/summernote-mn-MN.js +157 -0
- data/node_modules/summernote/lang/summernote-nb-NO.js +154 -0
- data/node_modules/summernote/lang/summernote-nl-NL.js +155 -0
- data/node_modules/summernote/lang/summernote-pl-PL.js +155 -0
- data/node_modules/summernote/lang/summernote-pt-BR.js +155 -0
- data/node_modules/summernote/lang/summernote-pt-PT.js +154 -0
- data/node_modules/summernote/lang/summernote-ro-RO.js +155 -0
- data/node_modules/summernote/lang/summernote-ru-RU.js +155 -0
- data/node_modules/summernote/lang/summernote-sk-SK.js +153 -0
- data/node_modules/summernote/lang/summernote-sl-SI.js +155 -0
- data/node_modules/summernote/lang/summernote-sr-RS-Latin.js +155 -0
- data/node_modules/summernote/lang/summernote-sr-RS.js +155 -0
- data/node_modules/summernote/lang/summernote-sv-SE.js +155 -0
- data/node_modules/summernote/lang/summernote-ta-IN.js +155 -0
- data/node_modules/summernote/lang/summernote-th-TH.js +155 -0
- data/node_modules/summernote/lang/summernote-tr-TR.js +155 -0
- data/node_modules/summernote/lang/summernote-uk-UA.js +155 -0
- data/node_modules/summernote/lang/summernote-uz-UZ.js +112 -0
- data/node_modules/summernote/lang/summernote-vi-VN.js +155 -0
- data/node_modules/summernote/lang/summernote-zh-CN.js +155 -0
- data/node_modules/summernote/lang/summernote-zh-TW.js +155 -0
- data/node_modules/summernote/package.json +87 -0
- data/{vendor/assets/javascripts → node_modules}/summernote/plugin/databasic/summernote-ext-databasic.css +0 -0
- data/{vendor/assets/javascripts → node_modules}/summernote/plugin/databasic/summernote-ext-databasic.js +62 -73
- data/{vendor/assets/javascripts → node_modules}/summernote/plugin/hello/summernote-ext-hello.js +9 -10
- data/{vendor/assets/javascripts → node_modules}/summernote/plugin/specialchars/summernote-ext-specialchars.js +22 -25
- data/node_modules/summernote/src/icons/align-center.svg +11 -0
- data/node_modules/summernote/src/icons/align-indent.svg +11 -0
- data/node_modules/summernote/src/icons/align-justify.svg +11 -0
- data/node_modules/summernote/src/icons/align-left.svg +12 -0
- data/node_modules/summernote/src/icons/align-outdent.svg +11 -0
- data/node_modules/summernote/src/icons/align-right.svg +11 -0
- data/node_modules/summernote/src/icons/align.svg +8 -0
- data/node_modules/summernote/src/icons/arrow-circle-down.svg +1 -0
- data/node_modules/summernote/src/icons/arrow-circle-left.svg +1 -0
- data/node_modules/summernote/src/icons/arrow-circle-right.svg +1 -0
- data/node_modules/summernote/src/icons/arrow-circle-up.svg +1 -0
- data/node_modules/summernote/src/icons/arrows-alt.svg +11 -0
- data/node_modules/summernote/src/icons/arrows-h.svg +1 -0
- data/node_modules/summernote/src/icons/arrows-v.svg +1 -0
- data/node_modules/summernote/src/icons/bold.svg +11 -0
- data/node_modules/summernote/src/icons/caret.svg +9 -0
- data/node_modules/summernote/src/icons/chain-broken.svg +47 -0
- data/node_modules/summernote/src/icons/circle.svg +10 -0
- data/node_modules/summernote/src/icons/close.svg +16 -0
- data/node_modules/summernote/src/icons/code.svg +11 -0
- data/node_modules/summernote/src/icons/col-after.svg +96 -0
- data/node_modules/summernote/src/icons/col-before.svg +19 -0
- data/node_modules/summernote/src/icons/col-remove.svg +19 -0
- data/node_modules/summernote/src/icons/dist/font/summernote.eot +0 -0
- data/node_modules/summernote/src/icons/dist/font/summernote.ttf +0 -0
- data/node_modules/summernote/src/icons/dist/font/summernote.woff +0 -0
- data/node_modules/summernote/src/icons/dist/summernote.html +536 -0
- data/node_modules/summernote/src/icons/dist/summernote.less +511 -0
- data/node_modules/summernote/src/icons/eraser.svg +13 -0
- data/node_modules/summernote/src/icons/font.svg +11 -0
- data/node_modules/summernote/src/icons/frame.svg +10 -0
- data/node_modules/summernote/src/icons/italic.svg +11 -0
- data/node_modules/summernote/src/icons/link.svg +21 -0
- data/node_modules/summernote/src/icons/magic.svg +10 -0
- data/node_modules/summernote/src/icons/menu-check.svg +8 -0
- data/node_modules/summernote/src/icons/minus.svg +11 -0
- data/node_modules/summernote/src/icons/orderedlist.svg +12 -0
- data/node_modules/summernote/src/icons/pencil.svg +8 -0
- data/node_modules/summernote/src/icons/picture.svg +11 -0
- data/node_modules/summernote/src/icons/question.svg +10 -0
- data/node_modules/summernote/src/icons/redo.svg +10 -0
- data/node_modules/summernote/src/icons/row-above.svg +19 -0
- data/node_modules/summernote/src/icons/row-below.svg +19 -0
- data/node_modules/summernote/src/icons/row-remove.svg +19 -0
- data/node_modules/summernote/src/icons/special-character.svg +10 -0
- data/node_modules/summernote/src/icons/square.svg +10 -0
- data/node_modules/summernote/src/icons/strikethrough.svg +11 -0
- data/node_modules/summernote/src/icons/subscript.svg +11 -0
- data/node_modules/summernote/src/icons/summernote.svg +11 -0
- data/node_modules/summernote/src/icons/superscript.svg +11 -0
- data/node_modules/summernote/src/icons/table.svg +11 -0
- data/node_modules/summernote/src/icons/templates/summernote.css +110 -0
- data/node_modules/summernote/src/icons/templates/summernote.json +5 -0
- data/node_modules/summernote/src/icons/text-height.svg +11 -0
- data/node_modules/summernote/src/icons/trash.svg +17 -0
- data/node_modules/summernote/src/icons/underline.svg +11 -0
- data/node_modules/summernote/src/icons/undo.svg +10 -0
- data/node_modules/summernote/src/icons/unorderedlist.svg +9 -0
- data/node_modules/summernote/src/icons/video.svg +9 -0
- data/node_modules/summernote/src/js/base/Context.js +231 -0
- data/node_modules/summernote/src/js/base/core/async.js +47 -0
- data/node_modules/summernote/src/js/base/core/dom.js +1088 -0
- data/node_modules/summernote/src/js/base/core/env.js +107 -0
- data/node_modules/summernote/src/js/base/core/func.js +162 -0
- data/node_modules/summernote/src/js/base/core/key.js +92 -0
- data/node_modules/summernote/src/js/base/core/lists.js +210 -0
- data/node_modules/summernote/src/js/base/core/range.js +792 -0
- data/node_modules/summernote/src/js/base/editing/Bullet.js +201 -0
- data/node_modules/summernote/src/js/base/editing/History.js +105 -0
- data/node_modules/summernote/src/js/base/editing/Style.js +158 -0
- data/node_modules/summernote/src/js/base/editing/Table.js +574 -0
- data/node_modules/summernote/src/js/base/editing/Typing.js +90 -0
- data/node_modules/summernote/src/js/base/module/AirPopover.js +73 -0
- data/node_modules/summernote/src/js/base/module/AutoLink.js +61 -0
- data/node_modules/summernote/src/js/base/module/AutoSync.js +19 -0
- data/node_modules/summernote/src/js/base/module/Buttons.js +813 -0
- data/node_modules/summernote/src/js/base/module/Clipboard.js +28 -0
- data/node_modules/summernote/src/js/base/module/Codeview.js +123 -0
- data/node_modules/summernote/src/js/base/module/Dropzone.js +115 -0
- data/node_modules/summernote/src/js/base/module/Editor.js +861 -0
- data/node_modules/summernote/src/js/base/module/Fullscreen.js +51 -0
- data/node_modules/summernote/src/js/base/module/Handle.js +143 -0
- data/node_modules/summernote/src/js/base/module/HelpDialog.js +79 -0
- data/node_modules/summernote/src/js/base/module/HintPopover.js +226 -0
- data/node_modules/summernote/src/js/base/module/ImageDialog.js +131 -0
- data/node_modules/summernote/src/js/base/module/ImagePopover.js +58 -0
- data/node_modules/summernote/src/js/base/module/LinkDialog.js +174 -0
- data/node_modules/summernote/src/js/base/module/LinkPopover.js +69 -0
- data/node_modules/summernote/src/js/base/module/Placeholder.js +39 -0
- data/node_modules/summernote/src/js/base/module/Statusbar.js +42 -0
- data/node_modules/summernote/src/js/base/module/TablePopover.js +71 -0
- data/node_modules/summernote/src/js/base/module/Toolbar.js +136 -0
- data/node_modules/summernote/src/js/base/module/VideoDialog.js +205 -0
- data/node_modules/summernote/src/js/base/renderer.js +66 -0
- data/node_modules/summernote/src/js/base/summernote-en-US.js +159 -0
- data/node_modules/summernote/src/js/bs3/settings.js +297 -0
- data/node_modules/summernote/src/js/bs3/ui.js +237 -0
- data/node_modules/summernote/src/js/bs4/settings.js +301 -0
- data/node_modules/summernote/src/js/bs4/ui.js +242 -0
- data/node_modules/summernote/src/js/lite/settings.js +296 -0
- data/node_modules/summernote/src/js/lite/ui.js +618 -0
- data/node_modules/summernote/src/js/lite/ui/DropdownUI.js +65 -0
- data/node_modules/summernote/src/js/lite/ui/ModalUI.js +34 -0
- data/node_modules/summernote/src/js/lite/ui/PopoverUI.js +94 -0
- data/node_modules/summernote/src/js/lite/ui/TooltipUI.js +93 -0
- data/node_modules/summernote/src/js/summernote.js +46 -0
- data/node_modules/summernote/src/less/elements.less +149 -0
- data/node_modules/summernote/src/less/elements.scss +149 -0
- data/node_modules/summernote/src/less/lite-ui/all.less +15 -0
- data/node_modules/summernote/src/less/lite-ui/btn-group.less +51 -0
- data/node_modules/summernote/src/less/lite-ui/buttons.less +102 -0
- data/node_modules/summernote/src/less/lite-ui/common.less +20 -0
- data/node_modules/summernote/src/less/lite-ui/dropdown.less +39 -0
- data/node_modules/summernote/src/less/lite-ui/form.less +43 -0
- data/node_modules/summernote/src/less/lite-ui/mixins.less +1 -0
- data/node_modules/summernote/src/less/lite-ui/mixins/buttons.less +40 -0
- data/node_modules/summernote/src/less/lite-ui/modal.less +104 -0
- data/node_modules/summernote/src/less/lite-ui/popover.less +121 -0
- data/node_modules/summernote/src/less/lite-ui/toolbar.less +4 -0
- data/node_modules/summernote/src/less/lite-ui/tooltip.less +66 -0
- data/node_modules/summernote/src/less/lite-ui/variables.less +81 -0
- data/node_modules/summernote/src/less/summernote-bs4.less +577 -0
- data/node_modules/summernote/src/less/summernote-bs4.scss +560 -0
- data/node_modules/summernote/src/less/summernote-lite.less +601 -0
- data/node_modules/summernote/src/less/summernote.less +576 -0
- data/node_modules/summernote/src/less/summernote.scss +560 -0
- data/node_modules/summernote/tsconfig.json +12 -0
- metadata +459 -69
- data/vendor/assets/fonts/summernote.eot +0 -0
- data/vendor/assets/fonts/summernote.ttf +0 -0
- data/vendor/assets/fonts/summernote.woff +0 -0
- data/vendor/assets/javascripts/summernote/index.js +0 -1
- data/vendor/assets/javascripts/summernote/locales/index.js +0 -1
- data/vendor/assets/javascripts/summernote/locales/ro-RO.js +0 -102
- data/vendor/assets/javascripts/summernote/locales/th-TH.js +0 -106
- data/vendor/assets/javascripts/summernote/summernote-bs4.js +0 -7990
- data/vendor/assets/javascripts/summernote/summernote-lite.js +0 -8598
- data/vendor/assets/javascripts/summernote/summernote.js +0 -7987
- data/vendor/assets/stylesheets/summernote-bs4.css +0 -1
- data/vendor/assets/stylesheets/summernote-lite.css +0 -1
- data/vendor/assets/stylesheets/summernote.scss +0 -1
@@ -0,0 +1,17 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
4
|
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
5
|
+
width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve">
|
6
|
+
<g>
|
7
|
+
<g>
|
8
|
+
<path fill="#040507" d="M684.868,95.723c-38.258,0-69.273-30.712-69.273-68.606H389.834c0,37.891-31.018,68.606-69.276,68.606
|
9
|
+
H15.731v69.894h978.333V95.723H684.868z M224.755,996.884h560.281L924.92,234.799H84.871L224.755,996.884z M688.173,355.88
|
10
|
+
c0-22.491,18.415-40.721,41.121-40.721c22.71,0,41.12,18.23,41.12,40.721l-60.545,515.828c0,22.491-18.415,40.719-41.118,40.719
|
11
|
+
c-22.707,0-41.116-18.229-41.116-40.719L688.173,355.88z M464.44,355.88c0-22.491,18.413-40.721,41.123-40.721
|
12
|
+
c22.708,0,41.115,18.23,41.115,40.721v515.828c0,22.491-18.407,40.719-41.115,40.719c-22.712,0-41.123-18.229-41.123-40.719
|
13
|
+
V355.88z M269.712,315.159c22.711,0,41.118,18.23,41.118,40.721l70.229,515.828c0,22.491-18.405,40.719-41.113,40.719
|
14
|
+
c-22.712,0-41.123-18.229-41.123-40.719L228.593,355.88C228.594,333.39,247.004,315.159,269.712,315.159z"/>
|
15
|
+
</g>
|
16
|
+
</g>
|
17
|
+
</svg>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024">
|
2
|
+
<defs>
|
3
|
+
<style>
|
4
|
+
.cls-1 {
|
5
|
+
fill: #000;
|
6
|
+
fill-rule: evenodd;
|
7
|
+
}
|
8
|
+
</style>
|
9
|
+
</defs>
|
10
|
+
<path d="M908.526,146.582 C888.706,156.816 875.010,171.009 867.419,189.175 C859.828,207.341 856.035,232.713 856.035,265.284 L856.035,549.047 C856.035,610.022 852.133,659.822 844.334,698.446 C836.531,737.077 818.089,774.240 788.998,809.946 C759.903,845.651 719.429,874.367 667.570,896.077 C615.711,917.783 558.158,928.648 494.914,928.648 C428.718,928.648 369.376,917.893 316.885,896.388 C264.394,874.886 224.231,847.742 196.405,814.955 C168.579,782.175 149.702,746.473 139.800,707.842 C129.892,669.218 124.938,623.384 124.938,570.343 L124.938,235.218 C124.938,195.125 117.984,167.780 104.071,153.158 C90.153,138.544 59.799,131.235 12.997,131.235 L12.997,61.702 L465.824,61.702 L465.824,131.235 L451.278,131.235 C408.686,131.235 381.077,138.965 368.428,154.410 C355.779,169.867 349.453,196.799 349.453,235.218 L349.453,570.343 C349.453,631.319 354.515,679.338 364.635,714.418 C374.750,749.498 396.886,779.359 431.039,803.995 C465.192,828.639 506.081,840.953 553.732,840.953 C605.591,840.953 649.958,827.796 686.861,801.487 C723.745,775.177 747.670,743.134 758.639,705.333 C769.599,667.544 775.085,614.819 775.085,547.168 L775.085,261.527 C775.085,174.671 732.709,131.235 647.962,131.235 L647.962,61.702 L965.447,61.702 L965.447,131.235 C947.312,131.235 928.341,136.351 908.526,146.582 ZM932.995,1046.691 L70.468,1046.691 L70.468,975.619 L932.995,975.619 L932.995,1046.691 Z" class="cls-1"/>
|
11
|
+
</svg>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024">
|
2
|
+
<defs>
|
3
|
+
<style>
|
4
|
+
.cls-1 {
|
5
|
+
fill-rule: evenodd;
|
6
|
+
}
|
7
|
+
</style>
|
8
|
+
</defs>
|
9
|
+
<path id="Shape_29_copy_2" data-name="Shape 29 copy 2" class="cls-1" d="M-84.808,193.372V728.531H480.079L325.064,580.294s-21.019-241.2,341.56-241.2S1176.34,648.131,1176.34,648.131s-147.14-482.4-546.5-482.4c-364.362,0-567.515,165.824-567.515,165.824Z"/>
|
10
|
+
</svg>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
4
|
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
5
|
+
width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve">
|
6
|
+
<path d="M1032.671,90.351H270.806v170.108h761.865V90.351L1032.671,90.351z M271.531,428.395v168.558h761.97V428.395H271.531z
|
7
|
+
M270.806,933.649h761.865V765.3H270.806V933.649z M160.712,90.351H-9.5v170.108h170.212V90.351L160.712,90.351z M-8.982,596.951
|
8
|
+
h170.314V428.395H-8.982V596.951z M-9.397,933.649h170.212V765.3H-9.397V933.649L-9.397,933.649z"/>
|
9
|
+
</svg>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
4
|
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
5
|
+
width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve">
|
6
|
+
<path d="M-70.443,728.622l284.268-120.036V416.415L-70.443,296.266V728.622z M962.801,200.673H329.249
|
7
|
+
c-39.146,0-71.374,31.489-71.374,69.789v484.301c0,38.076,32.118,69.564,71.374,69.564h633.552
|
8
|
+
c39.256,0,71.263-31.488,71.263-69.564V270.351C1034.064,232.162,1001.946,200.673,962.801,200.673z"/>
|
9
|
+
</svg>
|
@@ -0,0 +1,231 @@
|
|
1
|
+
import $ from 'jquery';
|
2
|
+
import func from './core/func';
|
3
|
+
import lists from './core/lists';
|
4
|
+
import dom from './core/dom';
|
5
|
+
|
6
|
+
export default class Context {
|
7
|
+
/**
|
8
|
+
* @param {jQuery} $note
|
9
|
+
* @param {Object} options
|
10
|
+
*/
|
11
|
+
constructor($note, options) {
|
12
|
+
this.ui = $.summernote.ui;
|
13
|
+
this.$note = $note;
|
14
|
+
|
15
|
+
this.memos = {};
|
16
|
+
this.modules = {};
|
17
|
+
this.layoutInfo = {};
|
18
|
+
this.options = options;
|
19
|
+
|
20
|
+
this.initialize();
|
21
|
+
}
|
22
|
+
|
23
|
+
/**
|
24
|
+
* create layout and initialize modules and other resources
|
25
|
+
*/
|
26
|
+
initialize() {
|
27
|
+
this.layoutInfo = this.ui.createLayout(this.$note, this.options);
|
28
|
+
this._initialize();
|
29
|
+
this.$note.hide();
|
30
|
+
return this;
|
31
|
+
}
|
32
|
+
|
33
|
+
/**
|
34
|
+
* destroy modules and other resources and remove layout
|
35
|
+
*/
|
36
|
+
destroy() {
|
37
|
+
this._destroy();
|
38
|
+
this.$note.removeData('summernote');
|
39
|
+
this.ui.removeLayout(this.$note, this.layoutInfo);
|
40
|
+
}
|
41
|
+
|
42
|
+
/**
|
43
|
+
* destory modules and other resources and initialize it again
|
44
|
+
*/
|
45
|
+
reset() {
|
46
|
+
const disabled = this.isDisabled();
|
47
|
+
this.code(dom.emptyPara);
|
48
|
+
this._destroy();
|
49
|
+
this._initialize();
|
50
|
+
|
51
|
+
if (disabled) {
|
52
|
+
this.disable();
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
_initialize() {
|
57
|
+
// add optional buttons
|
58
|
+
const buttons = $.extend({}, this.options.buttons);
|
59
|
+
Object.keys(buttons).forEach((key) => {
|
60
|
+
this.memo('button.' + key, buttons[key]);
|
61
|
+
});
|
62
|
+
|
63
|
+
const modules = $.extend({}, this.options.modules, $.summernote.plugins || {});
|
64
|
+
|
65
|
+
// add and initialize modules
|
66
|
+
Object.keys(modules).forEach((key) => {
|
67
|
+
this.module(key, modules[key], true);
|
68
|
+
});
|
69
|
+
|
70
|
+
Object.keys(this.modules).forEach((key) => {
|
71
|
+
this.initializeModule(key);
|
72
|
+
});
|
73
|
+
}
|
74
|
+
|
75
|
+
_destroy() {
|
76
|
+
// destroy modules with reversed order
|
77
|
+
Object.keys(this.modules).reverse().forEach((key) => {
|
78
|
+
this.removeModule(key);
|
79
|
+
});
|
80
|
+
|
81
|
+
Object.keys(this.memos).forEach((key) => {
|
82
|
+
this.removeMemo(key);
|
83
|
+
});
|
84
|
+
// trigger custom onDestroy callback
|
85
|
+
this.triggerEvent('destroy', this);
|
86
|
+
}
|
87
|
+
|
88
|
+
code(html) {
|
89
|
+
const isActivated = this.invoke('codeview.isActivated');
|
90
|
+
|
91
|
+
if (html === undefined) {
|
92
|
+
this.invoke('codeview.sync');
|
93
|
+
return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();
|
94
|
+
} else {
|
95
|
+
if (isActivated) {
|
96
|
+
this.layoutInfo.codable.val(html);
|
97
|
+
} else {
|
98
|
+
this.layoutInfo.editable.html(html);
|
99
|
+
}
|
100
|
+
this.$note.val(html);
|
101
|
+
this.triggerEvent('change', html);
|
102
|
+
}
|
103
|
+
}
|
104
|
+
|
105
|
+
isDisabled() {
|
106
|
+
return this.layoutInfo.editable.attr('contenteditable') === 'false';
|
107
|
+
}
|
108
|
+
|
109
|
+
enable() {
|
110
|
+
this.layoutInfo.editable.attr('contenteditable', true);
|
111
|
+
this.invoke('toolbar.activate', true);
|
112
|
+
this.triggerEvent('disable', false);
|
113
|
+
}
|
114
|
+
|
115
|
+
disable() {
|
116
|
+
// close codeview if codeview is opend
|
117
|
+
if (this.invoke('codeview.isActivated')) {
|
118
|
+
this.invoke('codeview.deactivate');
|
119
|
+
}
|
120
|
+
this.layoutInfo.editable.attr('contenteditable', false);
|
121
|
+
this.invoke('toolbar.deactivate', true);
|
122
|
+
|
123
|
+
this.triggerEvent('disable', true);
|
124
|
+
}
|
125
|
+
|
126
|
+
triggerEvent() {
|
127
|
+
const namespace = lists.head(arguments);
|
128
|
+
const args = lists.tail(lists.from(arguments));
|
129
|
+
|
130
|
+
const callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')];
|
131
|
+
if (callback) {
|
132
|
+
callback.apply(this.$note[0], args);
|
133
|
+
}
|
134
|
+
this.$note.trigger('summernote.' + namespace, args);
|
135
|
+
}
|
136
|
+
|
137
|
+
initializeModule(key) {
|
138
|
+
const module = this.modules[key];
|
139
|
+
module.shouldInitialize = module.shouldInitialize || func.ok;
|
140
|
+
if (!module.shouldInitialize()) {
|
141
|
+
return;
|
142
|
+
}
|
143
|
+
|
144
|
+
// initialize module
|
145
|
+
if (module.initialize) {
|
146
|
+
module.initialize();
|
147
|
+
}
|
148
|
+
|
149
|
+
// attach events
|
150
|
+
if (module.events) {
|
151
|
+
dom.attachEvents(this.$note, module.events);
|
152
|
+
}
|
153
|
+
}
|
154
|
+
|
155
|
+
module(key, ModuleClass, withoutIntialize) {
|
156
|
+
if (arguments.length === 1) {
|
157
|
+
return this.modules[key];
|
158
|
+
}
|
159
|
+
|
160
|
+
this.modules[key] = new ModuleClass(this);
|
161
|
+
|
162
|
+
if (!withoutIntialize) {
|
163
|
+
this.initializeModule(key);
|
164
|
+
}
|
165
|
+
}
|
166
|
+
|
167
|
+
removeModule(key) {
|
168
|
+
const module = this.modules[key];
|
169
|
+
if (module.shouldInitialize()) {
|
170
|
+
if (module.events) {
|
171
|
+
dom.detachEvents(this.$note, module.events);
|
172
|
+
}
|
173
|
+
|
174
|
+
if (module.destroy) {
|
175
|
+
module.destroy();
|
176
|
+
}
|
177
|
+
}
|
178
|
+
|
179
|
+
delete this.modules[key];
|
180
|
+
}
|
181
|
+
|
182
|
+
memo(key, obj) {
|
183
|
+
if (arguments.length === 1) {
|
184
|
+
return this.memos[key];
|
185
|
+
}
|
186
|
+
this.memos[key] = obj;
|
187
|
+
}
|
188
|
+
|
189
|
+
removeMemo(key) {
|
190
|
+
if (this.memos[key] && this.memos[key].destroy) {
|
191
|
+
this.memos[key].destroy();
|
192
|
+
}
|
193
|
+
|
194
|
+
delete this.memos[key];
|
195
|
+
}
|
196
|
+
|
197
|
+
/**
|
198
|
+
* Some buttons need to change their visual style immediately once they get pressed
|
199
|
+
*/
|
200
|
+
createInvokeHandlerAndUpdateState(namespace, value) {
|
201
|
+
return (event) => {
|
202
|
+
this.createInvokeHandler(namespace, value)(event);
|
203
|
+
this.invoke('buttons.updateCurrentStyle');
|
204
|
+
};
|
205
|
+
}
|
206
|
+
|
207
|
+
createInvokeHandler(namespace, value) {
|
208
|
+
return (event) => {
|
209
|
+
event.preventDefault();
|
210
|
+
const $target = $(event.target);
|
211
|
+
this.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target);
|
212
|
+
};
|
213
|
+
}
|
214
|
+
|
215
|
+
invoke() {
|
216
|
+
const namespace = lists.head(arguments);
|
217
|
+
const args = lists.tail(lists.from(arguments));
|
218
|
+
|
219
|
+
const splits = namespace.split('.');
|
220
|
+
const hasSeparator = splits.length > 1;
|
221
|
+
const moduleName = hasSeparator && lists.head(splits);
|
222
|
+
const methodName = hasSeparator ? lists.last(splits) : lists.head(splits);
|
223
|
+
|
224
|
+
const module = this.modules[moduleName || 'editor'];
|
225
|
+
if (!moduleName && this[methodName]) {
|
226
|
+
return this[methodName].apply(this, args);
|
227
|
+
} else if (module && module[methodName] && module.shouldInitialize()) {
|
228
|
+
return module[methodName].apply(module, args);
|
229
|
+
}
|
230
|
+
}
|
231
|
+
}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
import $ from 'jquery';
|
2
|
+
|
3
|
+
/**
|
4
|
+
* @method readFileAsDataURL
|
5
|
+
*
|
6
|
+
* read contents of file as representing URL
|
7
|
+
*
|
8
|
+
* @param {File} file
|
9
|
+
* @return {Promise} - then: dataUrl
|
10
|
+
*/
|
11
|
+
export function readFileAsDataURL(file) {
|
12
|
+
return $.Deferred((deferred) => {
|
13
|
+
$.extend(new FileReader(), {
|
14
|
+
onload: (e) => {
|
15
|
+
const dataURL = e.target.result;
|
16
|
+
deferred.resolve(dataURL);
|
17
|
+
},
|
18
|
+
onerror: (err) => {
|
19
|
+
deferred.reject(err);
|
20
|
+
}
|
21
|
+
}).readAsDataURL(file);
|
22
|
+
}).promise();
|
23
|
+
}
|
24
|
+
|
25
|
+
/**
|
26
|
+
* @method createImage
|
27
|
+
*
|
28
|
+
* create `<image>` from url string
|
29
|
+
*
|
30
|
+
* @param {String} url
|
31
|
+
* @return {Promise} - then: $image
|
32
|
+
*/
|
33
|
+
export function createImage(url) {
|
34
|
+
return $.Deferred((deferred) => {
|
35
|
+
const $img = $('<img>');
|
36
|
+
|
37
|
+
$img.one('load', () => {
|
38
|
+
$img.off('error abort');
|
39
|
+
deferred.resolve($img);
|
40
|
+
}).one('error abort', () => {
|
41
|
+
$img.off('load').detach();
|
42
|
+
deferred.reject($img);
|
43
|
+
}).css({
|
44
|
+
display: 'none'
|
45
|
+
}).appendTo(document.body).attr('src', url);
|
46
|
+
}).promise();
|
47
|
+
}
|
@@ -0,0 +1,1088 @@
|
|
1
|
+
import $ from 'jquery';
|
2
|
+
import func from './func';
|
3
|
+
import lists from './lists';
|
4
|
+
import env from './env';
|
5
|
+
|
6
|
+
const NBSP_CHAR = String.fromCharCode(160);
|
7
|
+
const ZERO_WIDTH_NBSP_CHAR = '\ufeff';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @method isEditable
|
11
|
+
*
|
12
|
+
* returns whether node is `note-editable` or not.
|
13
|
+
*
|
14
|
+
* @param {Node} node
|
15
|
+
* @return {Boolean}
|
16
|
+
*/
|
17
|
+
function isEditable(node) {
|
18
|
+
return node && $(node).hasClass('note-editable');
|
19
|
+
}
|
20
|
+
|
21
|
+
/**
|
22
|
+
* @method isControlSizing
|
23
|
+
*
|
24
|
+
* returns whether node is `note-control-sizing` or not.
|
25
|
+
*
|
26
|
+
* @param {Node} node
|
27
|
+
* @return {Boolean}
|
28
|
+
*/
|
29
|
+
function isControlSizing(node) {
|
30
|
+
return node && $(node).hasClass('note-control-sizing');
|
31
|
+
}
|
32
|
+
|
33
|
+
/**
|
34
|
+
* @method makePredByNodeName
|
35
|
+
*
|
36
|
+
* returns predicate which judge whether nodeName is same
|
37
|
+
*
|
38
|
+
* @param {String} nodeName
|
39
|
+
* @return {Function}
|
40
|
+
*/
|
41
|
+
function makePredByNodeName(nodeName) {
|
42
|
+
nodeName = nodeName.toUpperCase();
|
43
|
+
return function(node) {
|
44
|
+
return node && node.nodeName.toUpperCase() === nodeName;
|
45
|
+
};
|
46
|
+
}
|
47
|
+
|
48
|
+
/**
|
49
|
+
* @method isText
|
50
|
+
*
|
51
|
+
*
|
52
|
+
*
|
53
|
+
* @param {Node} node
|
54
|
+
* @return {Boolean} true if node's type is text(3)
|
55
|
+
*/
|
56
|
+
function isText(node) {
|
57
|
+
return node && node.nodeType === 3;
|
58
|
+
}
|
59
|
+
|
60
|
+
/**
|
61
|
+
* @method isElement
|
62
|
+
*
|
63
|
+
*
|
64
|
+
*
|
65
|
+
* @param {Node} node
|
66
|
+
* @return {Boolean} true if node's type is element(1)
|
67
|
+
*/
|
68
|
+
function isElement(node) {
|
69
|
+
return node && node.nodeType === 1;
|
70
|
+
}
|
71
|
+
|
72
|
+
/**
|
73
|
+
* ex) br, col, embed, hr, img, input, ...
|
74
|
+
* @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements
|
75
|
+
*/
|
76
|
+
function isVoid(node) {
|
77
|
+
return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT/.test(node.nodeName.toUpperCase());
|
78
|
+
}
|
79
|
+
|
80
|
+
function isPara(node) {
|
81
|
+
if (isEditable(node)) {
|
82
|
+
return false;
|
83
|
+
}
|
84
|
+
|
85
|
+
// Chrome(v31.0), FF(v25.0.1) use DIV for paragraph
|
86
|
+
return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());
|
87
|
+
}
|
88
|
+
|
89
|
+
function isHeading(node) {
|
90
|
+
return node && /^H[1-7]/.test(node.nodeName.toUpperCase());
|
91
|
+
}
|
92
|
+
|
93
|
+
const isPre = makePredByNodeName('PRE');
|
94
|
+
|
95
|
+
const isLi = makePredByNodeName('LI');
|
96
|
+
|
97
|
+
function isPurePara(node) {
|
98
|
+
return isPara(node) && !isLi(node);
|
99
|
+
}
|
100
|
+
|
101
|
+
const isTable = makePredByNodeName('TABLE');
|
102
|
+
|
103
|
+
const isData = makePredByNodeName('DATA');
|
104
|
+
|
105
|
+
function isInline(node) {
|
106
|
+
return !isBodyContainer(node) &&
|
107
|
+
!isList(node) &&
|
108
|
+
!isHr(node) &&
|
109
|
+
!isPara(node) &&
|
110
|
+
!isTable(node) &&
|
111
|
+
!isBlockquote(node) &&
|
112
|
+
!isData(node);
|
113
|
+
}
|
114
|
+
|
115
|
+
function isList(node) {
|
116
|
+
return node && /^UL|^OL/.test(node.nodeName.toUpperCase());
|
117
|
+
}
|
118
|
+
|
119
|
+
const isHr = makePredByNodeName('HR');
|
120
|
+
|
121
|
+
function isCell(node) {
|
122
|
+
return node && /^TD|^TH/.test(node.nodeName.toUpperCase());
|
123
|
+
}
|
124
|
+
|
125
|
+
const isBlockquote = makePredByNodeName('BLOCKQUOTE');
|
126
|
+
|
127
|
+
function isBodyContainer(node) {
|
128
|
+
return isCell(node) || isBlockquote(node) || isEditable(node);
|
129
|
+
}
|
130
|
+
|
131
|
+
const isAnchor = makePredByNodeName('A');
|
132
|
+
|
133
|
+
function isParaInline(node) {
|
134
|
+
return isInline(node) && !!ancestor(node, isPara);
|
135
|
+
}
|
136
|
+
|
137
|
+
function isBodyInline(node) {
|
138
|
+
return isInline(node) && !ancestor(node, isPara);
|
139
|
+
}
|
140
|
+
|
141
|
+
const isBody = makePredByNodeName('BODY');
|
142
|
+
|
143
|
+
/**
|
144
|
+
* returns whether nodeB is closest sibling of nodeA
|
145
|
+
*
|
146
|
+
* @param {Node} nodeA
|
147
|
+
* @param {Node} nodeB
|
148
|
+
* @return {Boolean}
|
149
|
+
*/
|
150
|
+
function isClosestSibling(nodeA, nodeB) {
|
151
|
+
return nodeA.nextSibling === nodeB ||
|
152
|
+
nodeA.previousSibling === nodeB;
|
153
|
+
}
|
154
|
+
|
155
|
+
/**
|
156
|
+
* returns array of closest siblings with node
|
157
|
+
*
|
158
|
+
* @param {Node} node
|
159
|
+
* @param {function} [pred] - predicate function
|
160
|
+
* @return {Node[]}
|
161
|
+
*/
|
162
|
+
function withClosestSiblings(node, pred) {
|
163
|
+
pred = pred || func.ok;
|
164
|
+
|
165
|
+
const siblings = [];
|
166
|
+
if (node.previousSibling && pred(node.previousSibling)) {
|
167
|
+
siblings.push(node.previousSibling);
|
168
|
+
}
|
169
|
+
siblings.push(node);
|
170
|
+
if (node.nextSibling && pred(node.nextSibling)) {
|
171
|
+
siblings.push(node.nextSibling);
|
172
|
+
}
|
173
|
+
return siblings;
|
174
|
+
}
|
175
|
+
|
176
|
+
/**
|
177
|
+
* blank HTML for cursor position
|
178
|
+
* - [workaround] old IE only works with
|
179
|
+
* - [workaround] IE11 and other browser works with bogus br
|
180
|
+
*/
|
181
|
+
const blankHTML = env.isMSIE && env.browserVersion < 11 ? ' ' : '<br>';
|
182
|
+
|
183
|
+
/**
|
184
|
+
* @method nodeLength
|
185
|
+
*
|
186
|
+
* returns #text's text size or element's childNodes size
|
187
|
+
*
|
188
|
+
* @param {Node} node
|
189
|
+
*/
|
190
|
+
function nodeLength(node) {
|
191
|
+
if (isText(node)) {
|
192
|
+
return node.nodeValue.length;
|
193
|
+
}
|
194
|
+
|
195
|
+
if (node) {
|
196
|
+
return node.childNodes.length;
|
197
|
+
}
|
198
|
+
|
199
|
+
return 0;
|
200
|
+
}
|
201
|
+
|
202
|
+
/**
|
203
|
+
* returns whether node is empty or not.
|
204
|
+
*
|
205
|
+
* @param {Node} node
|
206
|
+
* @return {Boolean}
|
207
|
+
*/
|
208
|
+
function isEmpty(node) {
|
209
|
+
const len = nodeLength(node);
|
210
|
+
|
211
|
+
if (len === 0) {
|
212
|
+
return true;
|
213
|
+
} else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {
|
214
|
+
// ex) <p><br></p>, <span><br></span>
|
215
|
+
return true;
|
216
|
+
} else if (lists.all(node.childNodes, isText) && node.innerHTML === '') {
|
217
|
+
// ex) <p></p>, <span></span>
|
218
|
+
return true;
|
219
|
+
}
|
220
|
+
|
221
|
+
return false;
|
222
|
+
}
|
223
|
+
|
224
|
+
/**
|
225
|
+
* padding blankHTML if node is empty (for cursor position)
|
226
|
+
*/
|
227
|
+
function paddingBlankHTML(node) {
|
228
|
+
if (!isVoid(node) && !nodeLength(node)) {
|
229
|
+
node.innerHTML = blankHTML;
|
230
|
+
}
|
231
|
+
}
|
232
|
+
|
233
|
+
/**
|
234
|
+
* find nearest ancestor predicate hit
|
235
|
+
*
|
236
|
+
* @param {Node} node
|
237
|
+
* @param {Function} pred - predicate function
|
238
|
+
*/
|
239
|
+
function ancestor(node, pred) {
|
240
|
+
while (node) {
|
241
|
+
if (pred(node)) { return node; }
|
242
|
+
if (isEditable(node)) { break; }
|
243
|
+
|
244
|
+
node = node.parentNode;
|
245
|
+
}
|
246
|
+
return null;
|
247
|
+
}
|
248
|
+
|
249
|
+
/**
|
250
|
+
* find nearest ancestor only single child blood line and predicate hit
|
251
|
+
*
|
252
|
+
* @param {Node} node
|
253
|
+
* @param {Function} pred - predicate function
|
254
|
+
*/
|
255
|
+
function singleChildAncestor(node, pred) {
|
256
|
+
node = node.parentNode;
|
257
|
+
|
258
|
+
while (node) {
|
259
|
+
if (nodeLength(node) !== 1) { break; }
|
260
|
+
if (pred(node)) { return node; }
|
261
|
+
if (isEditable(node)) { break; }
|
262
|
+
|
263
|
+
node = node.parentNode;
|
264
|
+
}
|
265
|
+
return null;
|
266
|
+
}
|
267
|
+
|
268
|
+
/**
|
269
|
+
* returns new array of ancestor nodes (until predicate hit).
|
270
|
+
*
|
271
|
+
* @param {Node} node
|
272
|
+
* @param {Function} [optional] pred - predicate function
|
273
|
+
*/
|
274
|
+
function listAncestor(node, pred) {
|
275
|
+
pred = pred || func.fail;
|
276
|
+
|
277
|
+
const ancestors = [];
|
278
|
+
ancestor(node, function(el) {
|
279
|
+
if (!isEditable(el)) {
|
280
|
+
ancestors.push(el);
|
281
|
+
}
|
282
|
+
|
283
|
+
return pred(el);
|
284
|
+
});
|
285
|
+
return ancestors;
|
286
|
+
}
|
287
|
+
|
288
|
+
/**
|
289
|
+
* find farthest ancestor predicate hit
|
290
|
+
*/
|
291
|
+
function lastAncestor(node, pred) {
|
292
|
+
const ancestors = listAncestor(node);
|
293
|
+
return lists.last(ancestors.filter(pred));
|
294
|
+
}
|
295
|
+
|
296
|
+
/**
|
297
|
+
* returns common ancestor node between two nodes.
|
298
|
+
*
|
299
|
+
* @param {Node} nodeA
|
300
|
+
* @param {Node} nodeB
|
301
|
+
*/
|
302
|
+
function commonAncestor(nodeA, nodeB) {
|
303
|
+
const ancestors = listAncestor(nodeA);
|
304
|
+
for (let n = nodeB; n; n = n.parentNode) {
|
305
|
+
if ($.inArray(n, ancestors) > -1) { return n; }
|
306
|
+
}
|
307
|
+
return null; // difference document area
|
308
|
+
}
|
309
|
+
|
310
|
+
/**
|
311
|
+
* listing all previous siblings (until predicate hit).
|
312
|
+
*
|
313
|
+
* @param {Node} node
|
314
|
+
* @param {Function} [optional] pred - predicate function
|
315
|
+
*/
|
316
|
+
function listPrev(node, pred) {
|
317
|
+
pred = pred || func.fail;
|
318
|
+
|
319
|
+
const nodes = [];
|
320
|
+
while (node) {
|
321
|
+
if (pred(node)) { break; }
|
322
|
+
nodes.push(node);
|
323
|
+
node = node.previousSibling;
|
324
|
+
}
|
325
|
+
return nodes;
|
326
|
+
}
|
327
|
+
|
328
|
+
/**
|
329
|
+
* listing next siblings (until predicate hit).
|
330
|
+
*
|
331
|
+
* @param {Node} node
|
332
|
+
* @param {Function} [pred] - predicate function
|
333
|
+
*/
|
334
|
+
function listNext(node, pred) {
|
335
|
+
pred = pred || func.fail;
|
336
|
+
|
337
|
+
const nodes = [];
|
338
|
+
while (node) {
|
339
|
+
if (pred(node)) { break; }
|
340
|
+
nodes.push(node);
|
341
|
+
node = node.nextSibling;
|
342
|
+
}
|
343
|
+
return nodes;
|
344
|
+
}
|
345
|
+
|
346
|
+
/**
|
347
|
+
* listing descendant nodes
|
348
|
+
*
|
349
|
+
* @param {Node} node
|
350
|
+
* @param {Function} [pred] - predicate function
|
351
|
+
*/
|
352
|
+
function listDescendant(node, pred) {
|
353
|
+
const descendants = [];
|
354
|
+
pred = pred || func.ok;
|
355
|
+
|
356
|
+
// start DFS(depth first search) with node
|
357
|
+
(function fnWalk(current) {
|
358
|
+
if (node !== current && pred(current)) {
|
359
|
+
descendants.push(current);
|
360
|
+
}
|
361
|
+
for (let idx = 0, len = current.childNodes.length; idx < len; idx++) {
|
362
|
+
fnWalk(current.childNodes[idx]);
|
363
|
+
}
|
364
|
+
})(node);
|
365
|
+
|
366
|
+
return descendants;
|
367
|
+
}
|
368
|
+
|
369
|
+
/**
|
370
|
+
* wrap node with new tag.
|
371
|
+
*
|
372
|
+
* @param {Node} node
|
373
|
+
* @param {Node} tagName of wrapper
|
374
|
+
* @return {Node} - wrapper
|
375
|
+
*/
|
376
|
+
function wrap(node, wrapperName) {
|
377
|
+
const parent = node.parentNode;
|
378
|
+
const wrapper = $('<' + wrapperName + '>')[0];
|
379
|
+
|
380
|
+
parent.insertBefore(wrapper, node);
|
381
|
+
wrapper.appendChild(node);
|
382
|
+
|
383
|
+
return wrapper;
|
384
|
+
}
|
385
|
+
|
386
|
+
/**
|
387
|
+
* insert node after preceding
|
388
|
+
*
|
389
|
+
* @param {Node} node
|
390
|
+
* @param {Node} preceding - predicate function
|
391
|
+
*/
|
392
|
+
function insertAfter(node, preceding) {
|
393
|
+
const next = preceding.nextSibling;
|
394
|
+
let parent = preceding.parentNode;
|
395
|
+
if (next) {
|
396
|
+
parent.insertBefore(node, next);
|
397
|
+
} else {
|
398
|
+
parent.appendChild(node);
|
399
|
+
}
|
400
|
+
return node;
|
401
|
+
}
|
402
|
+
|
403
|
+
/**
|
404
|
+
* append elements.
|
405
|
+
*
|
406
|
+
* @param {Node} node
|
407
|
+
* @param {Collection} aChild
|
408
|
+
*/
|
409
|
+
function appendChildNodes(node, aChild) {
|
410
|
+
$.each(aChild, function(idx, child) {
|
411
|
+
node.appendChild(child);
|
412
|
+
});
|
413
|
+
return node;
|
414
|
+
}
|
415
|
+
|
416
|
+
/**
|
417
|
+
* returns whether boundaryPoint is left edge or not.
|
418
|
+
*
|
419
|
+
* @param {BoundaryPoint} point
|
420
|
+
* @return {Boolean}
|
421
|
+
*/
|
422
|
+
function isLeftEdgePoint(point) {
|
423
|
+
return point.offset === 0;
|
424
|
+
}
|
425
|
+
|
426
|
+
/**
|
427
|
+
* returns whether boundaryPoint is right edge or not.
|
428
|
+
*
|
429
|
+
* @param {BoundaryPoint} point
|
430
|
+
* @return {Boolean}
|
431
|
+
*/
|
432
|
+
function isRightEdgePoint(point) {
|
433
|
+
return point.offset === nodeLength(point.node);
|
434
|
+
}
|
435
|
+
|
436
|
+
/**
|
437
|
+
* returns whether boundaryPoint is edge or not.
|
438
|
+
*
|
439
|
+
* @param {BoundaryPoint} point
|
440
|
+
* @return {Boolean}
|
441
|
+
*/
|
442
|
+
function isEdgePoint(point) {
|
443
|
+
return isLeftEdgePoint(point) || isRightEdgePoint(point);
|
444
|
+
}
|
445
|
+
|
446
|
+
/**
|
447
|
+
* returns whether node is left edge of ancestor or not.
|
448
|
+
*
|
449
|
+
* @param {Node} node
|
450
|
+
* @param {Node} ancestor
|
451
|
+
* @return {Boolean}
|
452
|
+
*/
|
453
|
+
function isLeftEdgeOf(node, ancestor) {
|
454
|
+
while (node && node !== ancestor) {
|
455
|
+
if (position(node) !== 0) {
|
456
|
+
return false;
|
457
|
+
}
|
458
|
+
node = node.parentNode;
|
459
|
+
}
|
460
|
+
|
461
|
+
return true;
|
462
|
+
}
|
463
|
+
|
464
|
+
/**
|
465
|
+
* returns whether node is right edge of ancestor or not.
|
466
|
+
*
|
467
|
+
* @param {Node} node
|
468
|
+
* @param {Node} ancestor
|
469
|
+
* @return {Boolean}
|
470
|
+
*/
|
471
|
+
function isRightEdgeOf(node, ancestor) {
|
472
|
+
if (!ancestor) {
|
473
|
+
return false;
|
474
|
+
}
|
475
|
+
while (node && node !== ancestor) {
|
476
|
+
if (position(node) !== nodeLength(node.parentNode) - 1) {
|
477
|
+
return false;
|
478
|
+
}
|
479
|
+
node = node.parentNode;
|
480
|
+
}
|
481
|
+
|
482
|
+
return true;
|
483
|
+
}
|
484
|
+
|
485
|
+
/**
|
486
|
+
* returns whether point is left edge of ancestor or not.
|
487
|
+
* @param {BoundaryPoint} point
|
488
|
+
* @param {Node} ancestor
|
489
|
+
* @return {Boolean}
|
490
|
+
*/
|
491
|
+
function isLeftEdgePointOf(point, ancestor) {
|
492
|
+
return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor);
|
493
|
+
}
|
494
|
+
|
495
|
+
/**
|
496
|
+
* returns whether point is right edge of ancestor or not.
|
497
|
+
* @param {BoundaryPoint} point
|
498
|
+
* @param {Node} ancestor
|
499
|
+
* @return {Boolean}
|
500
|
+
*/
|
501
|
+
function isRightEdgePointOf(point, ancestor) {
|
502
|
+
return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor);
|
503
|
+
}
|
504
|
+
|
505
|
+
/**
|
506
|
+
* returns offset from parent.
|
507
|
+
*
|
508
|
+
* @param {Node} node
|
509
|
+
*/
|
510
|
+
function position(node) {
|
511
|
+
let offset = 0;
|
512
|
+
while ((node = node.previousSibling)) {
|
513
|
+
offset += 1;
|
514
|
+
}
|
515
|
+
return offset;
|
516
|
+
}
|
517
|
+
|
518
|
+
function hasChildren(node) {
|
519
|
+
return !!(node && node.childNodes && node.childNodes.length);
|
520
|
+
}
|
521
|
+
|
522
|
+
/**
|
523
|
+
* returns previous boundaryPoint
|
524
|
+
*
|
525
|
+
* @param {BoundaryPoint} point
|
526
|
+
* @param {Boolean} isSkipInnerOffset
|
527
|
+
* @return {BoundaryPoint}
|
528
|
+
*/
|
529
|
+
function prevPoint(point, isSkipInnerOffset) {
|
530
|
+
let node;
|
531
|
+
let offset;
|
532
|
+
|
533
|
+
if (point.offset === 0) {
|
534
|
+
if (isEditable(point.node)) {
|
535
|
+
return null;
|
536
|
+
}
|
537
|
+
|
538
|
+
node = point.node.parentNode;
|
539
|
+
offset = position(point.node);
|
540
|
+
} else if (hasChildren(point.node)) {
|
541
|
+
node = point.node.childNodes[point.offset - 1];
|
542
|
+
offset = nodeLength(node);
|
543
|
+
} else {
|
544
|
+
node = point.node;
|
545
|
+
offset = isSkipInnerOffset ? 0 : point.offset - 1;
|
546
|
+
}
|
547
|
+
|
548
|
+
return {
|
549
|
+
node: node,
|
550
|
+
offset: offset
|
551
|
+
};
|
552
|
+
}
|
553
|
+
|
554
|
+
/**
|
555
|
+
* returns next boundaryPoint
|
556
|
+
*
|
557
|
+
* @param {BoundaryPoint} point
|
558
|
+
* @param {Boolean} isSkipInnerOffset
|
559
|
+
* @return {BoundaryPoint}
|
560
|
+
*/
|
561
|
+
function nextPoint(point, isSkipInnerOffset) {
|
562
|
+
let node, offset;
|
563
|
+
|
564
|
+
if (nodeLength(point.node) === point.offset) {
|
565
|
+
if (isEditable(point.node)) {
|
566
|
+
return null;
|
567
|
+
}
|
568
|
+
|
569
|
+
node = point.node.parentNode;
|
570
|
+
offset = position(point.node) + 1;
|
571
|
+
} else if (hasChildren(point.node)) {
|
572
|
+
node = point.node.childNodes[point.offset];
|
573
|
+
offset = 0;
|
574
|
+
} else {
|
575
|
+
node = point.node;
|
576
|
+
offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;
|
577
|
+
}
|
578
|
+
|
579
|
+
return {
|
580
|
+
node: node,
|
581
|
+
offset: offset
|
582
|
+
};
|
583
|
+
}
|
584
|
+
|
585
|
+
/**
|
586
|
+
* returns whether pointA and pointB is same or not.
|
587
|
+
*
|
588
|
+
* @param {BoundaryPoint} pointA
|
589
|
+
* @param {BoundaryPoint} pointB
|
590
|
+
* @return {Boolean}
|
591
|
+
*/
|
592
|
+
function isSamePoint(pointA, pointB) {
|
593
|
+
return pointA.node === pointB.node && pointA.offset === pointB.offset;
|
594
|
+
}
|
595
|
+
|
596
|
+
/**
|
597
|
+
* returns whether point is visible (can set cursor) or not.
|
598
|
+
*
|
599
|
+
* @param {BoundaryPoint} point
|
600
|
+
* @return {Boolean}
|
601
|
+
*/
|
602
|
+
function isVisiblePoint(point) {
|
603
|
+
if (isText(point.node) || !hasChildren(point.node) || isEmpty(point.node)) {
|
604
|
+
return true;
|
605
|
+
}
|
606
|
+
|
607
|
+
const leftNode = point.node.childNodes[point.offset - 1];
|
608
|
+
const rightNode = point.node.childNodes[point.offset];
|
609
|
+
if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) {
|
610
|
+
return true;
|
611
|
+
}
|
612
|
+
|
613
|
+
return false;
|
614
|
+
}
|
615
|
+
|
616
|
+
/**
|
617
|
+
* @method prevPointUtil
|
618
|
+
*
|
619
|
+
* @param {BoundaryPoint} point
|
620
|
+
* @param {Function} pred
|
621
|
+
* @return {BoundaryPoint}
|
622
|
+
*/
|
623
|
+
function prevPointUntil(point, pred) {
|
624
|
+
while (point) {
|
625
|
+
if (pred(point)) {
|
626
|
+
return point;
|
627
|
+
}
|
628
|
+
|
629
|
+
point = prevPoint(point);
|
630
|
+
}
|
631
|
+
|
632
|
+
return null;
|
633
|
+
}
|
634
|
+
|
635
|
+
/**
|
636
|
+
* @method nextPointUntil
|
637
|
+
*
|
638
|
+
* @param {BoundaryPoint} point
|
639
|
+
* @param {Function} pred
|
640
|
+
* @return {BoundaryPoint}
|
641
|
+
*/
|
642
|
+
function nextPointUntil(point, pred) {
|
643
|
+
while (point) {
|
644
|
+
if (pred(point)) {
|
645
|
+
return point;
|
646
|
+
}
|
647
|
+
|
648
|
+
point = nextPoint(point);
|
649
|
+
}
|
650
|
+
|
651
|
+
return null;
|
652
|
+
}
|
653
|
+
|
654
|
+
/**
|
655
|
+
* returns whether point has character or not.
|
656
|
+
*
|
657
|
+
* @param {Point} point
|
658
|
+
* @return {Boolean}
|
659
|
+
*/
|
660
|
+
function isCharPoint(point) {
|
661
|
+
if (!isText(point.node)) {
|
662
|
+
return false;
|
663
|
+
}
|
664
|
+
|
665
|
+
const ch = point.node.nodeValue.charAt(point.offset - 1);
|
666
|
+
return ch && (ch !== ' ' && ch !== NBSP_CHAR);
|
667
|
+
}
|
668
|
+
|
669
|
+
/**
|
670
|
+
* @method walkPoint
|
671
|
+
*
|
672
|
+
* @param {BoundaryPoint} startPoint
|
673
|
+
* @param {BoundaryPoint} endPoint
|
674
|
+
* @param {Function} handler
|
675
|
+
* @param {Boolean} isSkipInnerOffset
|
676
|
+
*/
|
677
|
+
function walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) {
|
678
|
+
let point = startPoint;
|
679
|
+
|
680
|
+
while (point) {
|
681
|
+
handler(point);
|
682
|
+
|
683
|
+
if (isSamePoint(point, endPoint)) {
|
684
|
+
break;
|
685
|
+
}
|
686
|
+
|
687
|
+
const isSkipOffset = isSkipInnerOffset &&
|
688
|
+
startPoint.node !== point.node &&
|
689
|
+
endPoint.node !== point.node;
|
690
|
+
point = nextPoint(point, isSkipOffset);
|
691
|
+
}
|
692
|
+
}
|
693
|
+
|
694
|
+
/**
|
695
|
+
* @method makeOffsetPath
|
696
|
+
*
|
697
|
+
* return offsetPath(array of offset) from ancestor
|
698
|
+
*
|
699
|
+
* @param {Node} ancestor - ancestor node
|
700
|
+
* @param {Node} node
|
701
|
+
*/
|
702
|
+
function makeOffsetPath(ancestor, node) {
|
703
|
+
const ancestors = listAncestor(node, func.eq(ancestor));
|
704
|
+
return ancestors.map(position).reverse();
|
705
|
+
}
|
706
|
+
|
707
|
+
/**
|
708
|
+
* @method fromOffsetPath
|
709
|
+
*
|
710
|
+
* return element from offsetPath(array of offset)
|
711
|
+
*
|
712
|
+
* @param {Node} ancestor - ancestor node
|
713
|
+
* @param {array} offsets - offsetPath
|
714
|
+
*/
|
715
|
+
function fromOffsetPath(ancestor, offsets) {
|
716
|
+
let current = ancestor;
|
717
|
+
for (let i = 0, len = offsets.length; i < len; i++) {
|
718
|
+
if (current.childNodes.length <= offsets[i]) {
|
719
|
+
current = current.childNodes[current.childNodes.length - 1];
|
720
|
+
} else {
|
721
|
+
current = current.childNodes[offsets[i]];
|
722
|
+
}
|
723
|
+
}
|
724
|
+
return current;
|
725
|
+
}
|
726
|
+
|
727
|
+
/**
|
728
|
+
* @method splitNode
|
729
|
+
*
|
730
|
+
* split element or #text
|
731
|
+
*
|
732
|
+
* @param {BoundaryPoint} point
|
733
|
+
* @param {Object} [options]
|
734
|
+
* @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false
|
735
|
+
* @param {Boolean} [options.isNotSplitEdgePoint] - default: false
|
736
|
+
* @return {Node} right node of boundaryPoint
|
737
|
+
*/
|
738
|
+
function splitNode(point, options) {
|
739
|
+
const isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;
|
740
|
+
const isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;
|
741
|
+
|
742
|
+
// edge case
|
743
|
+
if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {
|
744
|
+
if (isLeftEdgePoint(point)) {
|
745
|
+
return point.node;
|
746
|
+
} else if (isRightEdgePoint(point)) {
|
747
|
+
return point.node.nextSibling;
|
748
|
+
}
|
749
|
+
}
|
750
|
+
|
751
|
+
// split #text
|
752
|
+
if (isText(point.node)) {
|
753
|
+
return point.node.splitText(point.offset);
|
754
|
+
} else {
|
755
|
+
const childNode = point.node.childNodes[point.offset];
|
756
|
+
const clone = insertAfter(point.node.cloneNode(false), point.node);
|
757
|
+
appendChildNodes(clone, listNext(childNode));
|
758
|
+
|
759
|
+
if (!isSkipPaddingBlankHTML) {
|
760
|
+
paddingBlankHTML(point.node);
|
761
|
+
paddingBlankHTML(clone);
|
762
|
+
}
|
763
|
+
|
764
|
+
return clone;
|
765
|
+
}
|
766
|
+
}
|
767
|
+
|
768
|
+
/**
|
769
|
+
* @method splitTree
|
770
|
+
*
|
771
|
+
* split tree by point
|
772
|
+
*
|
773
|
+
* @param {Node} root - split root
|
774
|
+
* @param {BoundaryPoint} point
|
775
|
+
* @param {Object} [options]
|
776
|
+
* @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false
|
777
|
+
* @param {Boolean} [options.isNotSplitEdgePoint] - default: false
|
778
|
+
* @return {Node} right node of boundaryPoint
|
779
|
+
*/
|
780
|
+
function splitTree(root, point, options) {
|
781
|
+
// ex) [#text, <span>, <p>]
|
782
|
+
const ancestors = listAncestor(point.node, func.eq(root));
|
783
|
+
|
784
|
+
if (!ancestors.length) {
|
785
|
+
return null;
|
786
|
+
} else if (ancestors.length === 1) {
|
787
|
+
return splitNode(point, options);
|
788
|
+
}
|
789
|
+
|
790
|
+
return ancestors.reduce(function(node, parent) {
|
791
|
+
if (node === point.node) {
|
792
|
+
node = splitNode(point, options);
|
793
|
+
}
|
794
|
+
|
795
|
+
return splitNode({
|
796
|
+
node: parent,
|
797
|
+
offset: node ? position(node) : nodeLength(parent)
|
798
|
+
}, options);
|
799
|
+
});
|
800
|
+
}
|
801
|
+
|
802
|
+
/**
|
803
|
+
* split point
|
804
|
+
*
|
805
|
+
* @param {Point} point
|
806
|
+
* @param {Boolean} isInline
|
807
|
+
* @return {Object}
|
808
|
+
*/
|
809
|
+
function splitPoint(point, isInline) {
|
810
|
+
// find splitRoot, container
|
811
|
+
// - inline: splitRoot is a child of paragraph
|
812
|
+
// - block: splitRoot is a child of bodyContainer
|
813
|
+
const pred = isInline ? isPara : isBodyContainer;
|
814
|
+
const ancestors = listAncestor(point.node, pred);
|
815
|
+
const topAncestor = lists.last(ancestors) || point.node;
|
816
|
+
|
817
|
+
let splitRoot, container;
|
818
|
+
if (pred(topAncestor)) {
|
819
|
+
splitRoot = ancestors[ancestors.length - 2];
|
820
|
+
container = topAncestor;
|
821
|
+
} else {
|
822
|
+
splitRoot = topAncestor;
|
823
|
+
container = splitRoot.parentNode;
|
824
|
+
}
|
825
|
+
|
826
|
+
// if splitRoot is exists, split with splitTree
|
827
|
+
let pivot = splitRoot && splitTree(splitRoot, point, {
|
828
|
+
isSkipPaddingBlankHTML: isInline,
|
829
|
+
isNotSplitEdgePoint: isInline
|
830
|
+
});
|
831
|
+
|
832
|
+
// if container is point.node, find pivot with point.offset
|
833
|
+
if (!pivot && container === point.node) {
|
834
|
+
pivot = point.node.childNodes[point.offset];
|
835
|
+
}
|
836
|
+
|
837
|
+
return {
|
838
|
+
rightNode: pivot,
|
839
|
+
container: container
|
840
|
+
};
|
841
|
+
}
|
842
|
+
|
843
|
+
function create(nodeName) {
|
844
|
+
return document.createElement(nodeName);
|
845
|
+
}
|
846
|
+
|
847
|
+
function createText(text) {
|
848
|
+
return document.createTextNode(text);
|
849
|
+
}
|
850
|
+
|
851
|
+
/**
|
852
|
+
* @method remove
|
853
|
+
*
|
854
|
+
* remove node, (isRemoveChild: remove child or not)
|
855
|
+
*
|
856
|
+
* @param {Node} node
|
857
|
+
* @param {Boolean} isRemoveChild
|
858
|
+
*/
|
859
|
+
function remove(node, isRemoveChild) {
|
860
|
+
if (!node || !node.parentNode) { return; }
|
861
|
+
if (node.removeNode) { return node.removeNode(isRemoveChild); }
|
862
|
+
|
863
|
+
const parent = node.parentNode;
|
864
|
+
if (!isRemoveChild) {
|
865
|
+
const nodes = [];
|
866
|
+
for (let i = 0, len = node.childNodes.length; i < len; i++) {
|
867
|
+
nodes.push(node.childNodes[i]);
|
868
|
+
}
|
869
|
+
|
870
|
+
for (let i = 0, len = nodes.length; i < len; i++) {
|
871
|
+
parent.insertBefore(nodes[i], node);
|
872
|
+
}
|
873
|
+
}
|
874
|
+
|
875
|
+
parent.removeChild(node);
|
876
|
+
}
|
877
|
+
|
878
|
+
/**
|
879
|
+
* @method removeWhile
|
880
|
+
*
|
881
|
+
* @param {Node} node
|
882
|
+
* @param {Function} pred
|
883
|
+
*/
|
884
|
+
function removeWhile(node, pred) {
|
885
|
+
while (node) {
|
886
|
+
if (isEditable(node) || !pred(node)) {
|
887
|
+
break;
|
888
|
+
}
|
889
|
+
|
890
|
+
const parent = node.parentNode;
|
891
|
+
remove(node);
|
892
|
+
node = parent;
|
893
|
+
}
|
894
|
+
}
|
895
|
+
|
896
|
+
/**
|
897
|
+
* @method replace
|
898
|
+
*
|
899
|
+
* replace node with provided nodeName
|
900
|
+
*
|
901
|
+
* @param {Node} node
|
902
|
+
* @param {String} nodeName
|
903
|
+
* @return {Node} - new node
|
904
|
+
*/
|
905
|
+
function replace(node, nodeName) {
|
906
|
+
if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {
|
907
|
+
return node;
|
908
|
+
}
|
909
|
+
|
910
|
+
const newNode = create(nodeName);
|
911
|
+
|
912
|
+
if (node.style.cssText) {
|
913
|
+
newNode.style.cssText = node.style.cssText;
|
914
|
+
}
|
915
|
+
|
916
|
+
appendChildNodes(newNode, lists.from(node.childNodes));
|
917
|
+
insertAfter(newNode, node);
|
918
|
+
remove(node);
|
919
|
+
|
920
|
+
return newNode;
|
921
|
+
}
|
922
|
+
|
923
|
+
const isTextarea = makePredByNodeName('TEXTAREA');
|
924
|
+
|
925
|
+
/**
|
926
|
+
* @param {jQuery} $node
|
927
|
+
* @param {Boolean} [stripLinebreaks] - default: false
|
928
|
+
*/
|
929
|
+
function value($node, stripLinebreaks) {
|
930
|
+
const val = isTextarea($node[0]) ? $node.val() : $node.html();
|
931
|
+
if (stripLinebreaks) {
|
932
|
+
return val.replace(/[\n\r]/g, '');
|
933
|
+
}
|
934
|
+
return val;
|
935
|
+
}
|
936
|
+
|
937
|
+
/**
|
938
|
+
* @method html
|
939
|
+
*
|
940
|
+
* get the HTML contents of node
|
941
|
+
*
|
942
|
+
* @param {jQuery} $node
|
943
|
+
* @param {Boolean} [isNewlineOnBlock]
|
944
|
+
*/
|
945
|
+
function html($node, isNewlineOnBlock) {
|
946
|
+
let markup = value($node);
|
947
|
+
|
948
|
+
if (isNewlineOnBlock) {
|
949
|
+
const regexTag = /<(\/?)(\b(?!!)[^>\s]*)(.*?)(\s*\/?>)/g;
|
950
|
+
markup = markup.replace(regexTag, function(match, endSlash, name) {
|
951
|
+
name = name.toUpperCase();
|
952
|
+
const isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) &&
|
953
|
+
!!endSlash;
|
954
|
+
const isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);
|
955
|
+
|
956
|
+
return match + ((isEndOfInlineContainer || isBlockNode) ? '\n' : '');
|
957
|
+
});
|
958
|
+
markup = $.trim(markup);
|
959
|
+
}
|
960
|
+
|
961
|
+
return markup;
|
962
|
+
}
|
963
|
+
|
964
|
+
function posFromPlaceholder(placeholder) {
|
965
|
+
const $placeholder = $(placeholder);
|
966
|
+
const pos = $placeholder.offset();
|
967
|
+
const height = $placeholder.outerHeight(true); // include margin
|
968
|
+
|
969
|
+
return {
|
970
|
+
left: pos.left,
|
971
|
+
top: pos.top + height
|
972
|
+
};
|
973
|
+
}
|
974
|
+
|
975
|
+
function attachEvents($node, events) {
|
976
|
+
Object.keys(events).forEach(function(key) {
|
977
|
+
$node.on(key, events[key]);
|
978
|
+
});
|
979
|
+
}
|
980
|
+
|
981
|
+
function detachEvents($node, events) {
|
982
|
+
Object.keys(events).forEach(function(key) {
|
983
|
+
$node.off(key, events[key]);
|
984
|
+
});
|
985
|
+
}
|
986
|
+
|
987
|
+
/**
|
988
|
+
* @method isCustomStyleTag
|
989
|
+
*
|
990
|
+
* assert if a node contains a "note-styletag" class,
|
991
|
+
* which implies that's a custom-made style tag node
|
992
|
+
*
|
993
|
+
* @param {Node} an HTML DOM node
|
994
|
+
*/
|
995
|
+
function isCustomStyleTag(node) {
|
996
|
+
return node && !isText(node) && lists.contains(node.classList, 'note-styletag');
|
997
|
+
}
|
998
|
+
|
999
|
+
export default {
|
1000
|
+
/** @property {String} NBSP_CHAR */
|
1001
|
+
NBSP_CHAR,
|
1002
|
+
/** @property {String} ZERO_WIDTH_NBSP_CHAR */
|
1003
|
+
ZERO_WIDTH_NBSP_CHAR,
|
1004
|
+
/** @property {String} blank */
|
1005
|
+
blank: blankHTML,
|
1006
|
+
/** @property {String} emptyPara */
|
1007
|
+
emptyPara: `<p>${blankHTML}</p>`,
|
1008
|
+
makePredByNodeName,
|
1009
|
+
isEditable,
|
1010
|
+
isControlSizing,
|
1011
|
+
isText,
|
1012
|
+
isElement,
|
1013
|
+
isVoid,
|
1014
|
+
isPara,
|
1015
|
+
isPurePara,
|
1016
|
+
isHeading,
|
1017
|
+
isInline,
|
1018
|
+
isBlock: func.not(isInline),
|
1019
|
+
isBodyInline,
|
1020
|
+
isBody,
|
1021
|
+
isParaInline,
|
1022
|
+
isPre,
|
1023
|
+
isList,
|
1024
|
+
isTable,
|
1025
|
+
isData,
|
1026
|
+
isCell,
|
1027
|
+
isBlockquote,
|
1028
|
+
isBodyContainer,
|
1029
|
+
isAnchor,
|
1030
|
+
isDiv: makePredByNodeName('DIV'),
|
1031
|
+
isLi,
|
1032
|
+
isBR: makePredByNodeName('BR'),
|
1033
|
+
isSpan: makePredByNodeName('SPAN'),
|
1034
|
+
isB: makePredByNodeName('B'),
|
1035
|
+
isU: makePredByNodeName('U'),
|
1036
|
+
isS: makePredByNodeName('S'),
|
1037
|
+
isI: makePredByNodeName('I'),
|
1038
|
+
isImg: makePredByNodeName('IMG'),
|
1039
|
+
isTextarea,
|
1040
|
+
isEmpty,
|
1041
|
+
isEmptyAnchor: func.and(isAnchor, isEmpty),
|
1042
|
+
isClosestSibling,
|
1043
|
+
withClosestSiblings,
|
1044
|
+
nodeLength,
|
1045
|
+
isLeftEdgePoint,
|
1046
|
+
isRightEdgePoint,
|
1047
|
+
isEdgePoint,
|
1048
|
+
isLeftEdgeOf,
|
1049
|
+
isRightEdgeOf,
|
1050
|
+
isLeftEdgePointOf,
|
1051
|
+
isRightEdgePointOf,
|
1052
|
+
prevPoint,
|
1053
|
+
nextPoint,
|
1054
|
+
isSamePoint,
|
1055
|
+
isVisiblePoint,
|
1056
|
+
prevPointUntil,
|
1057
|
+
nextPointUntil,
|
1058
|
+
isCharPoint,
|
1059
|
+
walkPoint,
|
1060
|
+
ancestor,
|
1061
|
+
singleChildAncestor,
|
1062
|
+
listAncestor,
|
1063
|
+
lastAncestor,
|
1064
|
+
listNext,
|
1065
|
+
listPrev,
|
1066
|
+
listDescendant,
|
1067
|
+
commonAncestor,
|
1068
|
+
wrap,
|
1069
|
+
insertAfter,
|
1070
|
+
appendChildNodes,
|
1071
|
+
position,
|
1072
|
+
hasChildren,
|
1073
|
+
makeOffsetPath,
|
1074
|
+
fromOffsetPath,
|
1075
|
+
splitTree,
|
1076
|
+
splitPoint,
|
1077
|
+
create,
|
1078
|
+
createText,
|
1079
|
+
remove,
|
1080
|
+
removeWhile,
|
1081
|
+
replace,
|
1082
|
+
html,
|
1083
|
+
value,
|
1084
|
+
posFromPlaceholder,
|
1085
|
+
attachEvents,
|
1086
|
+
detachEvents,
|
1087
|
+
isCustomStyleTag
|
1088
|
+
};
|