-
- Dashboard
- Basic Example
- Adding Modules
- Images Example
- Syntax Highlighting Example
-
-
+
+
Vue2Editor
+
-
-
+
diff --git a/dev/index.js b/dev/index.js
index ef7f54e..e476ca7 100644
--- a/dev/index.js
+++ b/dev/index.js
@@ -1,9 +1,13 @@
import Vue from "vue";
import App from "./App.vue";
-import router from "./router";
+import Vue2Editor from "./../dist/vue2-editor.esm.js";
+// import Vue2Editor from "./../src/lib.js";
+// import router from "./router";
+
+Vue.use(Vue2Editor);
new Vue({
el: "#app",
- router,
+ // router,
render: h => h(App)
});
diff --git a/dev/router.js b/dev/router.js
deleted file mode 100644
index f4d0fba..0000000
--- a/dev/router.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import Vue from "vue";
-import Router from "vue-router";
-import Basic from "./views/Basic.vue";
-import SyntaxHighlighting from "./views/SyntaxHighlighting.vue";
-import Dashboard from "./views/Dashboard.vue";
-import Modules from "./views/Modules.vue";
-import Images from "./views/Images.vue";
-
-Vue.use(Router);
-
-export default new Router({
- routes: [
- {
- path: "/",
- name: "dashboard",
- component: Dashboard
- },
- {
- path: "/basic",
- name: "basic",
- component: Basic
- },
- {
- path: "/modules",
- name: "modules",
- component: Modules
- },
- {
- path: "/images",
- name: "images",
- component: Images
- },
- {
- path: "/syntax-highlighting",
- name: "syntax-highlighting",
- component: SyntaxHighlighting
- }
- ]
-});
diff --git a/dev/views/Basic.vue b/dev/views/Basic.vue
deleted file mode 100644
index 4f5d9f6..0000000
--- a/dev/views/Basic.vue
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
Basic Example
-
-
-
-
Toggle
-
Set Focus
-
-
-
-
-
-
-
-
-
-
diff --git a/dev/views/CustomModules.vue b/dev/views/CustomModules.vue
deleted file mode 100644
index da9f987..0000000
--- a/dev/views/CustomModules.vue
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
-
diff --git a/dev/views/CustomToolbar.vue b/dev/views/CustomToolbar.vue
deleted file mode 100644
index 779b35e..0000000
--- a/dev/views/CustomToolbar.vue
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
-
diff --git a/dev/views/Customized.vue b/dev/views/Customized.vue
deleted file mode 100644
index 851cdf2..0000000
--- a/dev/views/Customized.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
Various Customizations Example
-
-
-
-
-
-
diff --git a/dev/views/Dashboard.vue b/dev/views/Dashboard.vue
deleted file mode 100644
index 4f563bb..0000000
--- a/dev/views/Dashboard.vue
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
Dashboard
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna ali...
-
-
diff --git a/dev/views/Images.vue b/dev/views/Images.vue
deleted file mode 100644
index 0373e11..0000000
--- a/dev/views/Images.vue
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
Custom Image Handler Example
-
-
-
-
-
-
diff --git a/dev/views/Modules.vue b/dev/views/Modules.vue
deleted file mode 100644
index 2cf92c8..0000000
--- a/dev/views/Modules.vue
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
diff --git a/dev/views/SyntaxHighlighting.vue b/dev/views/SyntaxHighlighting.vue
deleted file mode 100644
index 050011d..0000000
--- a/dev/views/SyntaxHighlighting.vue
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
Syntax Highlighting Example
-
-
-
-
-
-
diff --git a/dist/vue2-editor.cjs.js b/dist/vue2-editor.cjs.js
new file mode 100644
index 0000000..5fdf915
--- /dev/null
+++ b/dist/vue2-editor.cjs.js
@@ -0,0 +1,804 @@
+/*!
+ * vue2-editor v2.6.6
+ * (c) David Royer
+ */
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+
+var Quill$2 = _interopDefault(require('quill'));
+var merge = _interopDefault(require('lodash/merge'));
+var styleInject = _interopDefault(require('../node_modules/style-inject/dist/style-inject.es.js'));
+var __vue_normalize__ = _interopDefault(require('vue-runtime-helpers/dist/normalize-component.js'));
+
+var defaultToolbar = [[{
+ header: [false, 1, 2, 3, 4, 5, 6]
+}], ["bold", "italic", "underline", "strike"], // toggled buttons
+[{
+ align: ""
+}, {
+ align: "center"
+}, {
+ align: "right"
+}, {
+ align: "justify"
+}], ["blockquote", "code-block"], [{
+ list: "ordered"
+}, {
+ list: "bullet"
+}, {
+ list: "check"
+}], [{
+ indent: "-1"
+}, {
+ indent: "+1"
+}], // outdent/indent
+[{
+ color: []
+}, {
+ background: []
+}], // dropdown with defaults from theme
+["link", "image", "video"], ["clean"] // remove formatting button
+];
+
+var oldApi = {
+ props: {
+ customModules: Array
+ },
+ methods: {
+ registerCustomModules: function registerCustomModules(Quill) {
+ if (this.customModules !== undefined) {
+ this.customModules.forEach(function (customModule) {
+ Quill.register("modules/" + customModule.alias, customModule.module);
+ });
+ }
+ }
+ }
+};
+
+function _classCallCheck(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+}
+
+function _defineProperties(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+}
+
+function _createClass(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties(Constructor, staticProps);
+ return Constructor;
+}
+
+function _inherits(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf(subClass, superClass);
+}
+
+function _getPrototypeOf(o) {
+ _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf(o);
+}
+
+function _setPrototypeOf(o, p) {
+ _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+
+ return _setPrototypeOf(o, p);
+}
+
+function _assertThisInitialized(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+
+ return self;
+}
+
+function _possibleConstructorReturn(self, call) {
+ if (call && (typeof call === "object" || typeof call === "function")) {
+ return call;
+ }
+
+ return _assertThisInitialized(self);
+}
+
+function _slicedToArray(arr, i) {
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();
+}
+
+function _arrayWithHoles(arr) {
+ if (Array.isArray(arr)) return arr;
+}
+
+function _iterableToArrayLimit(arr, i) {
+ var _arr = [];
+ var _n = true;
+ var _d = false;
+ var _e = undefined;
+
+ try {
+ for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
+ _arr.push(_s.value);
+
+ if (i && _arr.length === i) break;
+ }
+ } catch (err) {
+ _d = true;
+ _e = err;
+ } finally {
+ try {
+ if (!_n && _i["return"] != null) _i["return"]();
+ } finally {
+ if (_d) throw _e;
+ }
+ }
+
+ return _arr;
+}
+
+function _nonIterableRest() {
+ throw new TypeError("Invalid attempt to destructure non-iterable instance");
+}
+
+var BlockEmbed = Quill$2.import("blots/block/embed");
+
+var HorizontalRule =
+/*#__PURE__*/
+function (_BlockEmbed) {
+ _inherits(HorizontalRule, _BlockEmbed);
+
+ function HorizontalRule() {
+ _classCallCheck(this, HorizontalRule);
+
+ return _possibleConstructorReturn(this, _getPrototypeOf(HorizontalRule).apply(this, arguments));
+ }
+
+ return HorizontalRule;
+}(BlockEmbed);
+
+HorizontalRule.blotName = "hr";
+HorizontalRule.tagName = "hr";
+Quill$2.register("formats/horizontal", HorizontalRule); // Quill.js Plugin - Markdown Shortcuts
+// This is a module for the Quill.js WYSIWYG editor (https://quilljs.com/)
+// which converts text entered as markdown to rich text.
+//
+// v0.0.5
+//
+// Author: Patrick Lee (me@patricklee.nyc)
+//
+// (c) Copyright 2017 Patrick Lee (me@patricklee.nyc).
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+
+var MarkdownShortcuts =
+/*#__PURE__*/
+function () {
+ function MarkdownShortcuts(quill, options) {
+ var _this = this;
+
+ _classCallCheck(this, MarkdownShortcuts);
+
+ this.quill = quill;
+ this.options = options;
+ this.ignoreTags = ["PRE"];
+ this.matches = [{
+ name: "header",
+ pattern: /^(#){1,6}\s/g,
+ action: function action(text, selection, pattern) {
+ var match = pattern.exec(text);
+ if (!match) { return; }
+ var size = match[0].length; // Need to defer this action https://github.com/quilljs/quill/issues/1134
+
+ setTimeout(function () {
+ _this.quill.formatLine(selection.index, 0, "header", size - 1);
+
+ _this.quill.deleteText(selection.index - size, size);
+ }, 0);
+ }
+ }, {
+ name: "blockquote",
+ pattern: /^(>)\s/g,
+ action: function action(text, selection) {
+ // Need to defer this action https://github.com/quilljs/quill/issues/1134
+ setTimeout(function () {
+ _this.quill.formatLine(selection.index, 1, "blockquote", true);
+
+ _this.quill.deleteText(selection.index - 2, 2);
+ }, 0);
+ }
+ }, {
+ name: "code-block",
+ pattern: /^`{3}(?:\s|\n)/g,
+ action: function action(text, selection) {
+ // Need to defer this action https://github.com/quilljs/quill/issues/1134
+ setTimeout(function () {
+ _this.quill.formatLine(selection.index, 1, "code-block", true);
+
+ _this.quill.deleteText(selection.index - 4, 4);
+ }, 0);
+ }
+ }, {
+ name: "bolditalic",
+ pattern: /(?:\*|_){3}(.+?)(?:\*|_){3}/g,
+ action: function action(text, selection, pattern, lineStart) {
+ var match = pattern.exec(text);
+ var annotatedText = match[0];
+ var matchedText = match[1];
+ var startIndex = lineStart + match.index;
+ if (text.match(/^([*_ \n]+)$/g)) { return; }
+ setTimeout(function () {
+ _this.quill.deleteText(startIndex, annotatedText.length);
+
+ _this.quill.insertText(startIndex, matchedText, {
+ bold: true,
+ italic: true
+ });
+
+ _this.quill.format("bold", false);
+ }, 0);
+ }
+ }, {
+ name: "bold",
+ pattern: /(?:\*|_){2}(.+?)(?:\*|_){2}/g,
+ action: function action(text, selection, pattern, lineStart) {
+ var match = pattern.exec(text);
+ var annotatedText = match[0];
+ var matchedText = match[1];
+ var startIndex = lineStart + match.index;
+ if (text.match(/^([*_ \n]+)$/g)) { return; }
+ setTimeout(function () {
+ _this.quill.deleteText(startIndex, annotatedText.length);
+
+ _this.quill.insertText(startIndex, matchedText, {
+ bold: true
+ });
+
+ _this.quill.format("bold", false);
+ }, 0);
+ }
+ }, {
+ name: "italic",
+ pattern: /(?:\*|_){1}(.+?)(?:\*|_){1}/g,
+ action: function action(text, selection, pattern, lineStart) {
+ var match = pattern.exec(text);
+ var annotatedText = match[0];
+ var matchedText = match[1];
+ var startIndex = lineStart + match.index;
+ if (text.match(/^([*_ \n]+)$/g)) { return; }
+ setTimeout(function () {
+ _this.quill.deleteText(startIndex, annotatedText.length);
+
+ _this.quill.insertText(startIndex, matchedText, {
+ italic: true
+ });
+
+ _this.quill.format("italic", false);
+ }, 0);
+ }
+ }, {
+ name: "strikethrough",
+ pattern: /(?:~~)(.+?)(?:~~)/g,
+ action: function action(text, selection, pattern, lineStart) {
+ var match = pattern.exec(text);
+ var annotatedText = match[0];
+ var matchedText = match[1];
+ var startIndex = lineStart + match.index;
+ if (text.match(/^([*_ \n]+)$/g)) { return; }
+ setTimeout(function () {
+ _this.quill.deleteText(startIndex, annotatedText.length);
+
+ _this.quill.insertText(startIndex, matchedText, {
+ strike: true
+ });
+
+ _this.quill.format("strike", false);
+ }, 0);
+ }
+ }, {
+ name: "code",
+ pattern: /(?:`)(.+?)(?:`)/g,
+ action: function action(text, selection, pattern, lineStart) {
+ var match = pattern.exec(text);
+ var annotatedText = match[0];
+ var matchedText = match[1];
+ var startIndex = lineStart + match.index;
+ if (text.match(/^([*_ \n]+)$/g)) { return; }
+ setTimeout(function () {
+ _this.quill.deleteText(startIndex, annotatedText.length);
+
+ _this.quill.insertText(startIndex, matchedText, {
+ code: true
+ });
+
+ _this.quill.format("code", false);
+
+ _this.quill.insertText(_this.quill.getSelection(), " ");
+ }, 0);
+ }
+ }, {
+ name: "hr",
+ pattern: /^([-*]\s?){3}/g,
+ action: function action(text, selection) {
+ var startIndex = selection.index - text.length;
+ setTimeout(function () {
+ _this.quill.deleteText(startIndex, text.length);
+
+ _this.quill.insertEmbed(startIndex + 1, "hr", true, Quill$2.sources.USER);
+
+ _this.quill.insertText(startIndex + 2, "\n", Quill$2.sources.SILENT);
+
+ _this.quill.setSelection(startIndex + 2, Quill$2.sources.SILENT);
+ }, 0);
+ }
+ }, {
+ name: "asterisk-ul",
+ pattern: /^(\*|\+)\s$/g,
+ action: function action(text, selection, pattern) {
+ setTimeout(function () {
+ _this.quill.formatLine(selection.index, 1, "list", "unordered");
+
+ _this.quill.deleteText(selection.index - 2, 2);
+ }, 0);
+ }
+ }, {
+ name: "image",
+ pattern: /(?:!\[(.+?)\])(?:\((.+?)\))/g,
+ action: function action(text, selection, pattern) {
+ var startIndex = text.search(pattern);
+ var matchedText = text.match(pattern)[0]; // const hrefText = text.match(/(?:!\[(.*?)\])/g)[0]
+
+ var hrefLink = text.match(/(?:\((.*?)\))/g)[0];
+ var start = selection.index - matchedText.length - 1;
+
+ if (startIndex !== -1) {
+ setTimeout(function () {
+ _this.quill.deleteText(start, matchedText.length);
+
+ _this.quill.insertEmbed(start, "image", hrefLink.slice(1, hrefLink.length - 1));
+ }, 0);
+ }
+ }
+ }, {
+ name: "link",
+ pattern: /(?:\[(.+?)\])(?:\((.+?)\))/g,
+ action: function action(text, selection, pattern) {
+ var startIndex = text.search(pattern);
+ var matchedText = text.match(pattern)[0];
+ var hrefText = text.match(/(?:\[(.*?)\])/g)[0];
+ var hrefLink = text.match(/(?:\((.*?)\))/g)[0];
+ var start = selection.index - matchedText.length - 1;
+
+ if (startIndex !== -1) {
+ setTimeout(function () {
+ _this.quill.deleteText(start, matchedText.length);
+
+ _this.quill.insertText(start, hrefText.slice(1, hrefText.length - 1), "link", hrefLink.slice(1, hrefLink.length - 1));
+ }, 0);
+ }
+ }
+ }]; // Handler that looks for insert deltas that match specific characters
+
+ this.quill.on("text-change", function (delta, oldContents, source) {
+ for (var i = 0; i < delta.ops.length; i++) {
+ if (delta.ops[i].hasOwnProperty("insert")) {
+ if (delta.ops[i].insert === " ") {
+ _this.onSpace();
+ } else if (delta.ops[i].insert === "\n") {
+ _this.onEnter();
+ }
+ }
+ }
+ });
+ }
+
+ _createClass(MarkdownShortcuts, [{
+ key: "isValid",
+ value: function isValid(text, tagName) {
+ return typeof text !== "undefined" && text && this.ignoreTags.indexOf(tagName) === -1;
+ }
+ }, {
+ key: "onSpace",
+ value: function onSpace() {
+ var selection = this.quill.getSelection();
+ if (!selection) { return; }
+
+ var _this$quill$getLine = this.quill.getLine(selection.index),
+ _this$quill$getLine2 = _slicedToArray(_this$quill$getLine, 2),
+ line = _this$quill$getLine2[0],
+ offset = _this$quill$getLine2[1];
+
+ var text = line.domNode.textContent;
+ var lineStart = selection.index - offset;
+
+ if (this.isValid(text, line.domNode.tagName)) {
+ var _iteratorNormalCompletion = true;
+ var _didIteratorError = false;
+ var _iteratorError = undefined;
+
+ try {
+ for (var _iterator = this.matches[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+ var match = _step.value;
+ var matchedText = text.match(match.pattern);
+
+ if (matchedText) {
+ // We need to replace only matched text not the whole line
+ console.log("matched:", match.name, text);
+ match.action(text, selection, match.pattern, lineStart);
+ return;
+ }
+ }
+ } catch (err) {
+ _didIteratorError = true;
+ _iteratorError = err;
+ } finally {
+ try {
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
+ _iterator.return();
+ }
+ } finally {
+ if (_didIteratorError) {
+ throw _iteratorError;
+ }
+ }
+ }
+ }
+ }
+ }, {
+ key: "onEnter",
+ value: function onEnter() {
+ var selection = this.quill.getSelection();
+ if (!selection) { return; }
+
+ var _this$quill$getLine3 = this.quill.getLine(selection.index),
+ _this$quill$getLine4 = _slicedToArray(_this$quill$getLine3, 2),
+ line = _this$quill$getLine4[0],
+ offset = _this$quill$getLine4[1];
+
+ var text = line.domNode.textContent + " ";
+ var lineStart = selection.index - offset;
+ selection.length = selection.index++;
+
+ if (this.isValid(text, line.domNode.tagName)) {
+ var _iteratorNormalCompletion2 = true;
+ var _didIteratorError2 = false;
+ var _iteratorError2 = undefined;
+
+ try {
+ for (var _iterator2 = this.matches[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
+ var match = _step2.value;
+ var matchedText = text.match(match.pattern);
+
+ if (matchedText) {
+ console.log("matched", match.name, text);
+ match.action(text, selection, match.pattern, lineStart);
+ return;
+ }
+ }
+ } catch (err) {
+ _didIteratorError2 = true;
+ _iteratorError2 = err;
+ } finally {
+ try {
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
+ _iterator2.return();
+ }
+ } finally {
+ if (_didIteratorError2) {
+ throw _iteratorError2;
+ }
+ }
+ }
+ }
+ }
+ }]);
+
+ return MarkdownShortcuts;
+}(); // module.exports = MarkdownShortcuts;
+
+//
+var Quill = window.Quill || Quill$2;
+var script = {
+ name: "VueEditor",
+ mixins: [oldApi],
+ props: {
+ id: {
+ type: String,
+ default: "quill-container"
+ },
+ placeholder: {
+ type: String,
+ default: ""
+ },
+ value: {
+ type: String,
+ default: ""
+ },
+ disabled: {
+ type: Boolean
+ },
+ editorToolbar: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ editorOptions: {
+ type: Object,
+ required: false,
+ default: function _default() {
+ return {};
+ }
+ },
+ useCustomImageHandler: {
+ type: Boolean,
+ default: false
+ },
+ useMarkdownShortcuts: {
+ type: Boolean,
+ default: false
+ }
+ },
+ data: function data() {
+ return {
+ quill: null
+ };
+ },
+ watch: {
+ value: function value(val) {
+ if (val != this.quill.root.innerHTML && !this.quill.hasFocus()) {
+ this.quill.root.innerHTML = val;
+ }
+ },
+ disabled: function disabled(status) {
+ this.quill.enable(!status);
+ }
+ },
+ mounted: function mounted() {
+ this.registerCustomModules(Quill);
+ this.registerPrototypes();
+ this.initializeEditor();
+ },
+ beforeDestroy: function beforeDestroy() {
+ this.quill = null;
+ delete this.quill;
+ },
+ methods: {
+ initializeEditor: function initializeEditor() {
+ this.setupQuillEditor();
+ this.checkForCustomImageHandler();
+ this.handleInitialContent();
+ this.registerEditorEventListeners();
+ this.$emit("ready", this.quill);
+ },
+ setupQuillEditor: function setupQuillEditor() {
+ var editorConfig = {
+ debug: false,
+ modules: this.setModules(),
+ theme: "snow",
+ placeholder: this.placeholder ? this.placeholder : "",
+ readOnly: this.disabled ? this.disabled : false
+ };
+ this.prepareEditorConfig(editorConfig);
+ this.quill = new Quill(this.$refs.quillContainer, editorConfig);
+ },
+ setModules: function setModules() {
+ var modules = {
+ toolbar: this.editorToolbar.length ? this.editorToolbar : defaultToolbar
+ };
+
+ if (this.useMarkdownShortcuts) {
+ Quill.register("modules/markdownShortcuts", MarkdownShortcuts, true);
+ modules["markdownShortcuts"] = {};
+ }
+
+ return modules;
+ },
+ prepareEditorConfig: function prepareEditorConfig(editorConfig) {
+ if (Object.keys(this.editorOptions).length > 0 && this.editorOptions.constructor === Object) {
+ if (this.editorOptions.modules && typeof this.editorOptions.modules.toolbar !== "undefined") {
+ // We don't want to merge default toolbar with provided toolbar.
+ delete editorConfig.modules.toolbar;
+ }
+
+ merge(editorConfig, this.editorOptions);
+ }
+ },
+ registerPrototypes: function registerPrototypes() {
+ Quill.prototype.getHTML = function () {
+ return this.container.querySelector(".ql-editor").innerHTML;
+ };
+
+ Quill.prototype.getWordCount = function () {
+ return this.container.querySelector(".ql-editor").innerText.length;
+ };
+ },
+ registerEditorEventListeners: function registerEditorEventListeners() {
+ this.quill.on("text-change", this.handleTextChange);
+ this.quill.on("selection-change", this.handleSelectionChange);
+ this.listenForEditorEvent("text-change");
+ this.listenForEditorEvent("selection-change");
+ this.listenForEditorEvent("editor-change");
+ },
+ listenForEditorEvent: function listenForEditorEvent(type) {
+ var _this = this;
+
+ this.quill.on(type, function () {
+ var arguments$1 = arguments;
+
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments$1[_key];
+ }
+
+ _this.$emit.apply(_this, [type].concat(args));
+ });
+ },
+ handleInitialContent: function handleInitialContent() {
+ if (this.value) { this.quill.root.innerHTML = this.value; } // Set initial editor content
+ },
+ handleSelectionChange: function handleSelectionChange(range, oldRange) {
+ if (!range && oldRange) { this.$emit("blur", this.quill); }else if (range && !oldRange) { this.$emit("focus", this.quill); }
+ },
+ handleTextChange: function handleTextChange() {
+ var editorContent = this.quill.getHTML() === "
" ? "" : this.quill.getHTML();
+ this.$emit("input", editorContent);
+ },
+ checkForCustomImageHandler: function checkForCustomImageHandler() {
+ this.useCustomImageHandler === true ? this.setupCustomImageHandler() : "";
+ },
+ setupCustomImageHandler: function setupCustomImageHandler() {
+ var toolbar = this.quill.getModule("toolbar");
+ toolbar.addHandler("image", this.customImageHandler);
+ },
+ customImageHandler: function customImageHandler(image, callback) {
+ this.$refs.fileInput.click();
+ },
+ emitImageInfo: function emitImageInfo($event) {
+ var resetUploader = function resetUploader() {
+ var uploader = document.getElementById("file-upload");
+ uploader.value = "";
+ };
+
+ var file = $event.target.files[0];
+ var Editor = this.quill;
+ var range = Editor.getSelection();
+ var cursorLocation = range.index;
+ this.$emit("imageAdded", file, Editor, cursorLocation, resetUploader);
+ }
+ }
+};
+
+var css = "/*!\n * Quill Editor v1.3.6\n * https://quilljs.com/\n * Copyright (c) 2014, Jason Chen\n * Copyright (c) 2013, salesforce.com\n */.ql-container{box-sizing:border-box;font-family:Helvetica,Arial,sans-serif;font-size:13px;height:100%;margin:0;position:relative}.ql-container.ql-disabled .ql-tooltip{visibility:hidden}.ql-container.ql-disabled .ql-editor ul[data-checked]>li::before{pointer-events:none}.ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.ql-clipboard p{margin:0;padding:0}.ql-editor{box-sizing:border-box;line-height:1.42;height:100%;outline:0;overflow-y:auto;padding:12px 15px;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap;word-wrap:break-word}.ql-editor>*{cursor:text}.ql-editor blockquote,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6,.ql-editor ol,.ql-editor p,.ql-editor pre,.ql-editor ul{margin:0;padding:0;counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol,.ql-editor ul{padding-left:1.5em}.ql-editor ol>li,.ql-editor ul>li{list-style-type:none}.ql-editor ul>li::before{content:'\\2022'}.ql-editor ul[data-checked=false],.ql-editor ul[data-checked=true]{pointer-events:none}.ql-editor ul[data-checked=false]>li *,.ql-editor ul[data-checked=true]>li *{pointer-events:all}.ql-editor ul[data-checked=false]>li::before,.ql-editor ul[data-checked=true]>li::before{color:#777;cursor:pointer;pointer-events:all}.ql-editor ul[data-checked=true]>li::before{content:'\\2611'}.ql-editor ul[data-checked=false]>li::before{content:'\\2610'}.ql-editor li::before{display:inline-block;white-space:nowrap;width:1.2em}.ql-editor li:not(.ql-direction-rtl)::before{margin-left:-1.5em;margin-right:.3em;text-align:right}.ql-editor li.ql-direction-rtl::before{margin-left:.3em;margin-right:-1.5em}.ql-editor ol li:not(.ql-direction-rtl),.ql-editor ul li:not(.ql-direction-rtl){padding-left:1.5em}.ql-editor ol li.ql-direction-rtl,.ql-editor ul li.ql-direction-rtl{padding-right:1.5em}.ql-editor ol li{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-0}.ql-editor ol li:before{content:counter(list-0,decimal) '. '}.ql-editor ol li.ql-indent-1{counter-increment:list-1}.ql-editor ol li.ql-indent-1:before{content:counter(list-1,lower-alpha) '. '}.ql-editor ol li.ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-2{counter-increment:list-2}.ql-editor ol li.ql-indent-2:before{content:counter(list-2,lower-roman) '. '}.ql-editor ol li.ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-3{counter-increment:list-3}.ql-editor ol li.ql-indent-3:before{content:counter(list-3,decimal) '. '}.ql-editor ol li.ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-4{counter-increment:list-4}.ql-editor ol li.ql-indent-4:before{content:counter(list-4,lower-alpha) '. '}.ql-editor ol li.ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-5{counter-increment:list-5}.ql-editor ol li.ql-indent-5:before{content:counter(list-5,lower-roman) '. '}.ql-editor ol li.ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-6{counter-increment:list-6}.ql-editor ol li.ql-indent-6:before{content:counter(list-6,decimal) '. '}.ql-editor ol li.ql-indent-6{counter-reset:list-7 list-8 list-9}.ql-editor ol li.ql-indent-7{counter-increment:list-7}.ql-editor ol li.ql-indent-7:before{content:counter(list-7,lower-alpha) '. '}.ql-editor ol li.ql-indent-7{counter-reset:list-8 list-9}.ql-editor ol li.ql-indent-8{counter-increment:list-8}.ql-editor ol li.ql-indent-8:before{content:counter(list-8,lower-roman) '. '}.ql-editor ol li.ql-indent-8{counter-reset:list-9}.ql-editor ol li.ql-indent-9{counter-increment:list-9}.ql-editor ol li.ql-indent-9:before{content:counter(list-9,decimal) '. '}.ql-editor .ql-indent-1:not(.ql-direction-rtl){padding-left:3em}.ql-editor li.ql-indent-1:not(.ql-direction-rtl){padding-left:4.5em}.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:3em}.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:4.5em}.ql-editor .ql-indent-2:not(.ql-direction-rtl){padding-left:6em}.ql-editor li.ql-indent-2:not(.ql-direction-rtl){padding-left:7.5em}.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:6em}.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:7.5em}.ql-editor .ql-indent-3:not(.ql-direction-rtl){padding-left:9em}.ql-editor li.ql-indent-3:not(.ql-direction-rtl){padding-left:10.5em}.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:9em}.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:10.5em}.ql-editor .ql-indent-4:not(.ql-direction-rtl){padding-left:12em}.ql-editor li.ql-indent-4:not(.ql-direction-rtl){padding-left:13.5em}.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:12em}.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:13.5em}.ql-editor .ql-indent-5:not(.ql-direction-rtl){padding-left:15em}.ql-editor li.ql-indent-5:not(.ql-direction-rtl){padding-left:16.5em}.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:15em}.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:16.5em}.ql-editor .ql-indent-6:not(.ql-direction-rtl){padding-left:18em}.ql-editor li.ql-indent-6:not(.ql-direction-rtl){padding-left:19.5em}.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:18em}.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:19.5em}.ql-editor .ql-indent-7:not(.ql-direction-rtl){padding-left:21em}.ql-editor li.ql-indent-7:not(.ql-direction-rtl){padding-left:22.5em}.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:21em}.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:22.5em}.ql-editor .ql-indent-8:not(.ql-direction-rtl){padding-left:24em}.ql-editor li.ql-indent-8:not(.ql-direction-rtl){padding-left:25.5em}.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:24em}.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:25.5em}.ql-editor .ql-indent-9:not(.ql-direction-rtl){padding-left:27em}.ql-editor li.ql-indent-9:not(.ql-direction-rtl){padding-left:28.5em}.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:27em}.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:28.5em}.ql-editor .ql-video{display:block;max-width:100%}.ql-editor .ql-video.ql-align-center{margin:0 auto}.ql-editor .ql-video.ql-align-right{margin:0 0 0 auto}.ql-editor .ql-bg-black{background-color:#000}.ql-editor .ql-bg-red{background-color:#e60000}.ql-editor .ql-bg-orange{background-color:#f90}.ql-editor .ql-bg-yellow{background-color:#ff0}.ql-editor .ql-bg-green{background-color:#008a00}.ql-editor .ql-bg-blue{background-color:#06c}.ql-editor .ql-bg-purple{background-color:#93f}.ql-editor .ql-color-white{color:#fff}.ql-editor .ql-color-red{color:#e60000}.ql-editor .ql-color-orange{color:#f90}.ql-editor .ql-color-yellow{color:#ff0}.ql-editor .ql-color-green{color:#008a00}.ql-editor .ql-color-blue{color:#06c}.ql-editor .ql-color-purple{color:#93f}.ql-editor .ql-font-serif{font-family:Georgia,Times New Roman,serif}.ql-editor .ql-font-monospace{font-family:Monaco,Courier New,monospace}.ql-editor .ql-size-small{font-size:.75em}.ql-editor .ql-size-large{font-size:1.5em}.ql-editor .ql-size-huge{font-size:2.5em}.ql-editor .ql-direction-rtl{direction:rtl;text-align:inherit}.ql-editor .ql-align-center{text-align:center}.ql-editor .ql-align-justify{text-align:justify}.ql-editor .ql-align-right{text-align:right}.ql-editor.ql-blank::before{color:rgba(0,0,0,.6);content:attr(data-placeholder);font-style:italic;left:15px;pointer-events:none;position:absolute;right:15px}.ql-snow .ql-toolbar:after,.ql-snow.ql-toolbar:after{clear:both;content:'';display:table}.ql-snow .ql-toolbar button,.ql-snow.ql-toolbar button{background:0 0;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.ql-snow .ql-toolbar button svg,.ql-snow.ql-toolbar button svg{float:left;height:100%}.ql-snow .ql-toolbar button:active:hover,.ql-snow.ql-toolbar button:active:hover{outline:0}.ql-snow .ql-toolbar input.ql-image[type=file],.ql-snow.ql-toolbar input.ql-image[type=file]{display:none}.ql-snow .ql-toolbar .ql-picker-item.ql-selected,.ql-snow .ql-toolbar .ql-picker-item:hover,.ql-snow .ql-toolbar .ql-picker-label.ql-active,.ql-snow .ql-toolbar .ql-picker-label:hover,.ql-snow .ql-toolbar button.ql-active,.ql-snow .ql-toolbar button:focus,.ql-snow .ql-toolbar button:hover,.ql-snow.ql-toolbar .ql-picker-item.ql-selected,.ql-snow.ql-toolbar .ql-picker-item:hover,.ql-snow.ql-toolbar .ql-picker-label.ql-active,.ql-snow.ql-toolbar .ql-picker-label:hover,.ql-snow.ql-toolbar button.ql-active,.ql-snow.ql-toolbar button:focus,.ql-snow.ql-toolbar button:hover{color:#06c}.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar button.ql-active .ql-fill,.ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:focus .ql-fill,.ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:hover .ql-fill,.ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar button.ql-active .ql-fill,.ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-snow.ql-toolbar button:focus .ql-fill,.ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill,.ql-snow.ql-toolbar button:hover .ql-fill,.ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill{fill:#06c}.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow .ql-toolbar button.ql-active .ql-stroke,.ql-snow .ql-toolbar button.ql-active .ql-stroke-miter,.ql-snow .ql-toolbar button:focus .ql-stroke,.ql-snow .ql-toolbar button:focus .ql-stroke-miter,.ql-snow .ql-toolbar button:hover .ql-stroke,.ql-snow .ql-toolbar button:hover .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow.ql-toolbar button.ql-active .ql-stroke,.ql-snow.ql-toolbar button.ql-active .ql-stroke-miter,.ql-snow.ql-toolbar button:focus .ql-stroke,.ql-snow.ql-toolbar button:focus .ql-stroke-miter,.ql-snow.ql-toolbar button:hover .ql-stroke,.ql-snow.ql-toolbar button:hover .ql-stroke-miter{stroke:#06c}@media (pointer:coarse){.ql-snow .ql-toolbar button:hover:not(.ql-active),.ql-snow.ql-toolbar button:hover:not(.ql-active){color:#444}.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill{fill:#444}.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter{stroke:#444}}.ql-snow{box-sizing:border-box}.ql-snow *{box-sizing:border-box}.ql-snow .ql-hidden{display:none}.ql-snow .ql-out-bottom,.ql-snow .ql-out-top{visibility:hidden}.ql-snow .ql-tooltip{position:absolute;transform:translateY(10px)}.ql-snow .ql-tooltip a{cursor:pointer;text-decoration:none}.ql-snow .ql-tooltip.ql-flip{transform:translateY(-10px)}.ql-snow .ql-formats{display:inline-block;vertical-align:middle}.ql-snow .ql-formats:after{clear:both;content:'';display:table}.ql-snow .ql-stroke{fill:none;stroke:#444;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.ql-snow .ql-stroke-miter{fill:none;stroke:#444;stroke-miterlimit:10;stroke-width:2}.ql-snow .ql-fill,.ql-snow .ql-stroke.ql-fill{fill:#444}.ql-snow .ql-empty{fill:none}.ql-snow .ql-even{fill-rule:evenodd}.ql-snow .ql-stroke.ql-thin,.ql-snow .ql-thin{stroke-width:1}.ql-snow .ql-transparent{opacity:.4}.ql-snow .ql-direction svg:last-child{display:none}.ql-snow .ql-direction.ql-active svg:last-child{display:inline}.ql-snow .ql-direction.ql-active svg:first-child{display:none}.ql-snow .ql-editor h1{font-size:2em}.ql-snow .ql-editor h2{font-size:1.5em}.ql-snow .ql-editor h3{font-size:1.17em}.ql-snow .ql-editor h4{font-size:1em}.ql-snow .ql-editor h5{font-size:.83em}.ql-snow .ql-editor h6{font-size:.67em}.ql-snow .ql-editor a{text-decoration:underline}.ql-snow .ql-editor blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}.ql-snow .ql-editor code,.ql-snow .ql-editor pre{background-color:#f0f0f0;border-radius:3px}.ql-snow .ql-editor pre{white-space:pre-wrap;margin-bottom:5px;margin-top:5px;padding:5px 10px}.ql-snow .ql-editor code{font-size:85%;padding:2px 4px}.ql-snow .ql-editor pre.ql-syntax{background-color:#23241f;color:#f8f8f2;overflow:visible}.ql-snow .ql-editor img{max-width:100%}.ql-snow .ql-picker{color:#444;display:inline-block;float:left;font-size:14px;font-weight:500;height:24px;position:relative;vertical-align:middle}.ql-snow .ql-picker-label{cursor:pointer;display:inline-block;height:100%;padding-left:8px;padding-right:2px;position:relative;width:100%}.ql-snow .ql-picker-label::before{display:inline-block;line-height:22px}.ql-snow .ql-picker-options{background-color:#fff;display:none;min-width:100%;padding:4px 8px;position:absolute;white-space:nowrap}.ql-snow .ql-picker-options .ql-picker-item{cursor:pointer;display:block;padding-bottom:5px;padding-top:5px}.ql-snow .ql-picker.ql-expanded .ql-picker-label{color:#ccc;z-index:2}.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill{fill:#ccc}.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke{stroke:#ccc}.ql-snow .ql-picker.ql-expanded .ql-picker-options{display:block;margin-top:-1px;top:100%;z-index:1}.ql-snow .ql-color-picker,.ql-snow .ql-icon-picker{width:28px}.ql-snow .ql-color-picker .ql-picker-label,.ql-snow .ql-icon-picker .ql-picker-label{padding:2px 4px}.ql-snow .ql-color-picker .ql-picker-label svg,.ql-snow .ql-icon-picker .ql-picker-label svg{right:4px}.ql-snow .ql-icon-picker .ql-picker-options{padding:4px 0}.ql-snow .ql-icon-picker .ql-picker-item{height:24px;width:24px;padding:2px 4px}.ql-snow .ql-color-picker .ql-picker-options{padding:3px 5px;width:152px}.ql-snow .ql-color-picker .ql-picker-item{border:1px solid transparent;float:left;height:16px;margin:2px;padding:0;width:16px}.ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg{position:absolute;margin-top:-9px;right:0;top:50%;width:18px}.ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before{content:attr(data-label)}.ql-snow .ql-picker.ql-header{width:98px}.ql-snow .ql-picker.ql-header .ql-picker-item::before,.ql-snow .ql-picker.ql-header .ql-picker-label::before{content:'Normal'}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"1\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"1\"]::before{content:'Heading 1'}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"2\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"2\"]::before{content:'Heading 2'}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"3\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"3\"]::before{content:'Heading 3'}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"4\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"4\"]::before{content:'Heading 4'}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"5\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"5\"]::before{content:'Heading 5'}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"6\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"6\"]::before{content:'Heading 6'}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"1\"]::before{font-size:2em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"2\"]::before{font-size:1.5em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"3\"]::before{font-size:1.17em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"4\"]::before{font-size:1em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"5\"]::before{font-size:.83em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"6\"]::before{font-size:.67em}.ql-snow .ql-picker.ql-font{width:108px}.ql-snow .ql-picker.ql-font .ql-picker-item::before,.ql-snow .ql-picker.ql-font .ql-picker-label::before{content:'Sans Serif'}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]::before{content:'Serif'}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before{content:'Monospace'}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before{font-family:Georgia,Times New Roman,serif}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before{font-family:Monaco,Courier New,monospace}.ql-snow .ql-picker.ql-size{width:98px}.ql-snow .ql-picker.ql-size .ql-picker-item::before,.ql-snow .ql-picker.ql-size .ql-picker-label::before{content:'Normal'}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]::before{content:'Small'}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]::before{content:'Large'}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]::before{content:'Huge'}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before{font-size:10px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before{font-size:18px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before{font-size:32px}.ql-snow .ql-color-picker.ql-background .ql-picker-item{background-color:#fff}.ql-snow .ql-color-picker.ql-color .ql-picker-item{background-color:#000}.ql-toolbar.ql-snow{border:1px solid #ccc;box-sizing:border-box;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:8px}.ql-toolbar.ql-snow .ql-formats{margin-right:15px}.ql-toolbar.ql-snow .ql-picker-label{border:1px solid transparent}.ql-toolbar.ql-snow .ql-picker-options{border:1px solid transparent;box-shadow:rgba(0,0,0,.2) 0 2px 8px}.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label{border-color:#ccc}.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options{border-color:#ccc}.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected,.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover{border-color:#000}.ql-toolbar.ql-snow+.ql-container.ql-snow{border-top:0}.ql-snow .ql-tooltip{background-color:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ddd;color:#444;padding:5px 12px;white-space:nowrap}.ql-snow .ql-tooltip::before{content:\"Visit URL:\";line-height:26px;margin-right:8px}.ql-snow .ql-tooltip input[type=text]{display:none;border:1px solid #ccc;font-size:13px;height:26px;margin:0;padding:3px 5px;width:170px}.ql-snow .ql-tooltip a.ql-preview{display:inline-block;max-width:200px;overflow-x:hidden;text-overflow:ellipsis;vertical-align:top}.ql-snow .ql-tooltip a.ql-action::after{border-right:1px solid #ccc;content:'Edit';margin-left:16px;padding-right:8px}.ql-snow .ql-tooltip a.ql-remove::before{content:'Remove';margin-left:8px}.ql-snow .ql-tooltip a{line-height:26px}.ql-snow .ql-tooltip.ql-editing a.ql-preview,.ql-snow .ql-tooltip.ql-editing a.ql-remove{display:none}.ql-snow .ql-tooltip.ql-editing input[type=text]{display:inline-block}.ql-snow .ql-tooltip.ql-editing a.ql-action::after{border-right:0;content:'Save';padding-right:0}.ql-snow .ql-tooltip[data-mode=link]::before{content:\"Enter link:\"}.ql-snow .ql-tooltip[data-mode=formula]::before{content:\"Enter formula:\"}.ql-snow .ql-tooltip[data-mode=video]::before{content:\"Enter video:\"}.ql-snow a{color:#06c}.ql-container.ql-snow{border:1px solid #ccc}";
+styleInject(css);
+
+var css$1 = ".ql-editor{min-height:200px;font-size:16px}.ql-snow .ql-stroke.ql-thin,.ql-snow .ql-thin{stroke-width:1px!important}.quillWrapper .ql-snow.ql-toolbar{padding-top:8px;padding-bottom:4px}.quillWrapper .ql-snow.ql-toolbar .ql-formats{margin-bottom:10px}.ql-snow .ql-toolbar button svg,.quillWrapper .ql-snow.ql-toolbar button svg{width:22px;height:22px}.quillWrapper .ql-editor ul[data-checked=false]>li::before,.quillWrapper .ql-editor ul[data-checked=true]>li::before{font-size:1.35em;vertical-align:baseline;bottom:-.065em;font-weight:900;color:#222}.quillWrapper .ql-snow .ql-stroke{stroke:rgba(63,63,63,.95);stroke-linecap:square;stroke-linejoin:initial;stroke-width:1.7px}.quillWrapper .ql-picker-label{font-size:15px}.quillWrapper .ql-snow .ql-active .ql-stroke{stroke-width:2.25px}.quillWrapper .ql-toolbar.ql-snow .ql-formats{vertical-align:top}.ql-picker:not(.ql-background){position:relative;top:2px}.ql-picker.ql-color-picker svg{width:22px!important;height:22px!important}.quillWrapper .imageResizeActive img{display:block;cursor:pointer}.quillWrapper .imageResizeActive~div svg{cursor:pointer}";
+styleInject(css$1);
+
+/* script */
+var __vue_script__ = script;
+/* template */
+
+var __vue_render__ = function __vue_render__() {
+ var _vm = this;
+
+ var _h = _vm.$createElement;
+
+ var _c = _vm._self._c || _h;
+
+ return _c('div', {
+ staticClass: "quillWrapper"
+ }, [_vm._t("toolbar"), _vm._v(" "), _c('div', {
+ ref: "quillContainer",
+ attrs: {
+ "id": _vm.id
+ }
+ }), _vm._v(" "), _vm.useCustomImageHandler ? _c('input', {
+ ref: "fileInput",
+ staticStyle: {
+ "display": "none"
+ },
+ attrs: {
+ "id": "file-upload",
+ "type": "file",
+ "accept": "image/*"
+ },
+ on: {
+ "change": function change($event) {
+ return _vm.emitImageInfo($event);
+ }
+ }
+ }) : _vm._e()], 2);
+};
+
+var __vue_staticRenderFns__ = [];
+/* style */
+
+var __vue_inject_styles__ = undefined;
+/* scoped */
+
+var __vue_scope_id__ = undefined;
+/* module identifier */
+
+var __vue_module_identifier__ = undefined;
+/* functional template */
+
+var __vue_is_functional_template__ = false;
+/* style inject */
+
+/* style inject SSR */
+
+var VueEditor = __vue_normalize__({
+ render: __vue_render__,
+ staticRenderFns: __vue_staticRenderFns__
+}, __vue_inject_styles__, __vue_script__, __vue_scope_id__, __vue_is_functional_template__, __vue_module_identifier__, undefined, undefined);
+
+// Import vue component
+var Quill$1 = window.Quill || Quill$2; // Declare install function executed by Vue.use()
+
+function install(Vue) {
+ if (install.installed) { return; }
+ install.installed = true;
+ Vue.component("VueEditor", VueEditor);
+} // Create module definition for Vue.use()
+
+var Vue2Editor = {
+ VueEditor: VueEditor,
+ install: install
+}; // Auto-install when vue is found (eg. in browser via
-
-
+
+
diff --git a/src/helpers/default-toolbar.js b/src/helpers/default-toolbar.js
old mode 100644
new mode 100755
diff --git a/src/helpers/fullToolbar.js b/src/helpers/fullToolbar.js
old mode 100644
new mode 100755
index 8ad6bda..538b324
--- a/src/helpers/fullToolbar.js
+++ b/src/helpers/fullToolbar.js
@@ -1,28 +1,33 @@
var fullToolbar = [
- [{ 'font': [] }],
+ [{ font: [] }],
- [{ 'header': [false, 1, 2, 3, 4, 5, 6, ] }],
+ [{ header: [false, 1, 2, 3, 4, 5, 6] }],
- [{ 'size': ['small', false, 'large', 'huge'] }],
+ [{ size: ["small", false, "large", "huge"] }],
- ['bold', 'italic', 'underline', 'strike'],
+ ["bold", "italic", "underline", "strike"],
- [{'align': ''}, {'align': 'center'}, {'align': 'right'}, {'align': 'justify'}],
+ [
+ { align: "" },
+ { align: "center" },
+ { align: "right" },
+ { align: "justify" }
+ ],
- [{ 'header': 1 }, { 'header': 2 }],
+ [{ header: 1 }, { header: 2 }],
- ['blockquote', 'code-block'],
+ ["blockquote", "code-block"],
- [{ 'list': 'ordered'}, { 'list': 'bullet' }, { 'list': 'check' }],
+ [{ list: "ordered" }, { list: "bullet" }, { list: "check" }],
- [{ 'script': 'sub'}, { 'script': 'super' }],
+ [{ script: "sub" }, { script: "super" }],
- [{ 'indent': '-1'}, { 'indent': '+1' }],
+ [{ indent: "-1" }, { indent: "+1" }],
- [{ 'color': [] }, { 'background': [] }],
+ [{ color: [] }, { background: [] }],
- ['link', 'image', 'video', 'formula'],
+ ["link", "image", "video", "formula"],
- [{ 'direction': 'rtl' }],
- ['clean'],
-]
+ [{ direction: "rtl" }],
+ ["clean"]
+];
diff --git a/src/helpers/markdown-shortcuts.js b/src/helpers/markdown-shortcuts.js
old mode 100644
new mode 100755
diff --git a/src/helpers/old-api.js b/src/helpers/old-api.js
old mode 100644
new mode 100755
diff --git a/src/index.js b/src/index.js
deleted file mode 100644
index 90bfb82..0000000
--- a/src/index.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Vue2-Editor
- */
-import VueEditor from './VueEditor.vue'
-import _Quill from 'quill'
-const Quill = window.Quill || _Quill
-
-const Vue2Editor = {
- VueEditor,
- install: function(Vue) {
- Vue.component(VueEditor.name, VueEditor)
- }
-}
-
-if (typeof window !== 'undefined' && window.Vue) {
- window.Vue.use(Vue2Editor)
-}
-
-export default Vue2Editor
-export { VueEditor, Quill }
diff --git a/src/lib.js b/src/lib.js
new file mode 100644
index 0000000..a12c62e
--- /dev/null
+++ b/src/lib.js
@@ -0,0 +1,32 @@
+// Import vue component
+import VueEditor from "./components/VueEditor.vue";
+import _Quill from "quill";
+const Quill = window.Quill || _Quill;
+
+// Declare install function executed by Vue.use()
+export function install(Vue) {
+ if (install.installed) return;
+ install.installed = true;
+ Vue.component("VueEditor", VueEditor);
+}
+
+// Create module definition for Vue.use()
+const Vue2Editor = {
+ VueEditor,
+ install
+};
+
+// Auto-install when vue is found (eg. in browser via