vue2-editor.common.js 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947
  1. /*!
  2. * vue2-editor v2.10.3
  3. * (c) 2021 David Royer
  4. * Released under the MIT License.
  5. */
  6. 'use strict';
  7. Object.defineProperty(exports, '__esModule', { value: true });
  8. function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
  9. var Quill = _interopDefault(require('quill'));
  10. var defaultToolbar = [[{
  11. header: [false, 1, 2, 3, 4, 5, 6]
  12. }], ["bold", "italic", "underline", "strike"], // toggled buttons
  13. [{
  14. align: ""
  15. }, {
  16. align: "center"
  17. }, {
  18. align: "right"
  19. }, {
  20. align: "justify"
  21. }], ["blockquote", "code-block"], [{
  22. list: "ordered"
  23. }, {
  24. list: "bullet"
  25. }, {
  26. list: "check"
  27. }], [{
  28. indent: "-1"
  29. }, {
  30. indent: "+1"
  31. }], // outdent/indent
  32. [{
  33. color: []
  34. }, {
  35. background: []
  36. }], // dropdown with defaults from theme
  37. ["link", "image", "video"], ["clean"] // remove formatting button
  38. ];
  39. var oldApi = {
  40. props: {
  41. customModules: Array
  42. },
  43. methods: {
  44. registerCustomModules: function registerCustomModules(Quill) {
  45. if (this.customModules !== undefined) {
  46. this.customModules.forEach(function (customModule) {
  47. Quill.register("modules/" + customModule.alias, customModule.module);
  48. });
  49. }
  50. }
  51. }
  52. };
  53. function _typeof(obj) {
  54. if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
  55. _typeof = function (obj) {
  56. return typeof obj;
  57. };
  58. } else {
  59. _typeof = function (obj) {
  60. return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
  61. };
  62. }
  63. return _typeof(obj);
  64. }
  65. function _classCallCheck(instance, Constructor) {
  66. if (!(instance instanceof Constructor)) {
  67. throw new TypeError("Cannot call a class as a function");
  68. }
  69. }
  70. function _defineProperties(target, props) {
  71. for (var i = 0; i < props.length; i++) {
  72. var descriptor = props[i];
  73. descriptor.enumerable = descriptor.enumerable || false;
  74. descriptor.configurable = true;
  75. if ("value" in descriptor) descriptor.writable = true;
  76. Object.defineProperty(target, descriptor.key, descriptor);
  77. }
  78. }
  79. function _createClass(Constructor, protoProps, staticProps) {
  80. if (protoProps) _defineProperties(Constructor.prototype, protoProps);
  81. if (staticProps) _defineProperties(Constructor, staticProps);
  82. return Constructor;
  83. }
  84. function _inherits(subClass, superClass) {
  85. if (typeof superClass !== "function" && superClass !== null) {
  86. throw new TypeError("Super expression must either be null or a function");
  87. }
  88. subClass.prototype = Object.create(superClass && superClass.prototype, {
  89. constructor: {
  90. value: subClass,
  91. writable: true,
  92. configurable: true
  93. }
  94. });
  95. if (superClass) _setPrototypeOf(subClass, superClass);
  96. }
  97. function _getPrototypeOf(o) {
  98. _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
  99. return o.__proto__ || Object.getPrototypeOf(o);
  100. };
  101. return _getPrototypeOf(o);
  102. }
  103. function _setPrototypeOf(o, p) {
  104. _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
  105. o.__proto__ = p;
  106. return o;
  107. };
  108. return _setPrototypeOf(o, p);
  109. }
  110. function _assertThisInitialized(self) {
  111. if (self === void 0) {
  112. throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  113. }
  114. return self;
  115. }
  116. function _possibleConstructorReturn(self, call) {
  117. if (call && (typeof call === "object" || typeof call === "function")) {
  118. return call;
  119. }
  120. return _assertThisInitialized(self);
  121. }
  122. function _slicedToArray(arr, i) {
  123. return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();
  124. }
  125. function _arrayWithHoles(arr) {
  126. if (Array.isArray(arr)) return arr;
  127. }
  128. function _iterableToArrayLimit(arr, i) {
  129. var _arr = [];
  130. var _n = true;
  131. var _d = false;
  132. var _e = undefined;
  133. try {
  134. for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
  135. _arr.push(_s.value);
  136. if (i && _arr.length === i) break;
  137. }
  138. } catch (err) {
  139. _d = true;
  140. _e = err;
  141. } finally {
  142. try {
  143. if (!_n && _i["return"] != null) _i["return"]();
  144. } finally {
  145. if (_d) throw _e;
  146. }
  147. }
  148. return _arr;
  149. }
  150. function _nonIterableRest() {
  151. throw new TypeError("Invalid attempt to destructure non-iterable instance");
  152. }
  153. /**
  154. * Performs a deep merge of `source` into `target`.
  155. * Mutates `target` only but not its objects and arrays.
  156. *
  157. */
  158. function mergeDeep(target, source) {
  159. var isObject = function isObject(obj) {
  160. return obj && _typeof(obj) === "object";
  161. };
  162. if (!isObject(target) || !isObject(source)) {
  163. return source;
  164. }
  165. Object.keys(source).forEach(function (key) {
  166. var targetValue = target[key];
  167. var sourceValue = source[key];
  168. if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {
  169. target[key] = targetValue.concat(sourceValue);
  170. } else if (isObject(targetValue) && isObject(sourceValue)) {
  171. target[key] = mergeDeep(Object.assign({}, targetValue), sourceValue);
  172. } else {
  173. target[key] = sourceValue;
  174. }
  175. });
  176. return target;
  177. }
  178. var BlockEmbed = Quill.import("blots/block/embed");
  179. var HorizontalRule =
  180. /*#__PURE__*/
  181. function (_BlockEmbed) {
  182. _inherits(HorizontalRule, _BlockEmbed);
  183. function HorizontalRule() {
  184. _classCallCheck(this, HorizontalRule);
  185. return _possibleConstructorReturn(this, _getPrototypeOf(HorizontalRule).apply(this, arguments));
  186. }
  187. return HorizontalRule;
  188. }(BlockEmbed);
  189. HorizontalRule.blotName = "hr";
  190. HorizontalRule.tagName = "hr";
  191. Quill.register("formats/horizontal", HorizontalRule);
  192. var MarkdownShortcuts =
  193. /*#__PURE__*/
  194. function () {
  195. function MarkdownShortcuts(quill, options) {
  196. var _this = this;
  197. _classCallCheck(this, MarkdownShortcuts);
  198. this.quill = quill;
  199. this.options = options;
  200. this.ignoreTags = ["PRE"];
  201. this.matches = [{
  202. name: "header",
  203. pattern: /^(#){1,6}\s/g,
  204. action: function action(text, selection, pattern) {
  205. var match = pattern.exec(text);
  206. if (!match) return;
  207. var size = match[0].length; // Need to defer this action https://github.com/quilljs/quill/issues/1134
  208. setTimeout(function () {
  209. _this.quill.formatLine(selection.index, 0, "header", size - 1);
  210. _this.quill.deleteText(selection.index - size, size);
  211. }, 0);
  212. }
  213. }, {
  214. name: "blockquote",
  215. pattern: /^(>)\s/g,
  216. action: function action(_text, selection) {
  217. // Need to defer this action https://github.com/quilljs/quill/issues/1134
  218. setTimeout(function () {
  219. _this.quill.formatLine(selection.index, 1, "blockquote", true);
  220. _this.quill.deleteText(selection.index - 2, 2);
  221. }, 0);
  222. }
  223. }, {
  224. name: "code-block",
  225. pattern: /^`{3}(?:\s|\n)/g,
  226. action: function action(_text, selection) {
  227. // Need to defer this action https://github.com/quilljs/quill/issues/1134
  228. setTimeout(function () {
  229. _this.quill.formatLine(selection.index, 1, "code-block", true);
  230. _this.quill.deleteText(selection.index - 4, 4);
  231. }, 0);
  232. }
  233. }, {
  234. name: "bolditalic",
  235. pattern: /(?:\*|_){3}(.+?)(?:\*|_){3}/g,
  236. action: function action(text, _selection, pattern, lineStart) {
  237. var match = pattern.exec(text);
  238. var annotatedText = match[0];
  239. var matchedText = match[1];
  240. var startIndex = lineStart + match.index;
  241. if (text.match(/^([*_ \n]+)$/g)) return;
  242. setTimeout(function () {
  243. _this.quill.deleteText(startIndex, annotatedText.length);
  244. _this.quill.insertText(startIndex, matchedText, {
  245. bold: true,
  246. italic: true
  247. });
  248. _this.quill.format("bold", false);
  249. }, 0);
  250. }
  251. }, {
  252. name: "bold",
  253. pattern: /(?:\*|_){2}(.+?)(?:\*|_){2}/g,
  254. action: function action(text, _selection, pattern, lineStart) {
  255. var match = pattern.exec(text);
  256. var annotatedText = match[0];
  257. var matchedText = match[1];
  258. var startIndex = lineStart + match.index;
  259. if (text.match(/^([*_ \n]+)$/g)) return;
  260. setTimeout(function () {
  261. _this.quill.deleteText(startIndex, annotatedText.length);
  262. _this.quill.insertText(startIndex, matchedText, {
  263. bold: true
  264. });
  265. _this.quill.format("bold", false);
  266. }, 0);
  267. }
  268. }, {
  269. name: "italic",
  270. pattern: /(?:\*|_){1}(.+?)(?:\*|_){1}/g,
  271. action: function action(text, _selection, pattern, lineStart) {
  272. var match = pattern.exec(text);
  273. var annotatedText = match[0];
  274. var matchedText = match[1];
  275. var startIndex = lineStart + match.index;
  276. if (text.match(/^([*_ \n]+)$/g)) return;
  277. setTimeout(function () {
  278. _this.quill.deleteText(startIndex, annotatedText.length);
  279. _this.quill.insertText(startIndex, matchedText, {
  280. italic: true
  281. });
  282. _this.quill.format("italic", false);
  283. }, 0);
  284. }
  285. }, {
  286. name: "strikethrough",
  287. pattern: /(?:~~)(.+?)(?:~~)/g,
  288. action: function action(text, _selection, pattern, lineStart) {
  289. var match = pattern.exec(text);
  290. var annotatedText = match[0];
  291. var matchedText = match[1];
  292. var startIndex = lineStart + match.index;
  293. if (text.match(/^([*_ \n]+)$/g)) return;
  294. setTimeout(function () {
  295. _this.quill.deleteText(startIndex, annotatedText.length);
  296. _this.quill.insertText(startIndex, matchedText, {
  297. strike: true
  298. });
  299. _this.quill.format("strike", false);
  300. }, 0);
  301. }
  302. }, {
  303. name: "code",
  304. pattern: /(?:`)(.+?)(?:`)/g,
  305. action: function action(text, _selection, pattern, lineStart) {
  306. var match = pattern.exec(text);
  307. var annotatedText = match[0];
  308. var matchedText = match[1];
  309. var startIndex = lineStart + match.index;
  310. if (text.match(/^([*_ \n]+)$/g)) return;
  311. setTimeout(function () {
  312. _this.quill.deleteText(startIndex, annotatedText.length);
  313. _this.quill.insertText(startIndex, matchedText, {
  314. code: true
  315. });
  316. _this.quill.format("code", false);
  317. _this.quill.insertText(_this.quill.getSelection(), " ");
  318. }, 0);
  319. }
  320. }, {
  321. name: "hr",
  322. pattern: /^([-*]\s?){3}/g,
  323. action: function action(text, selection) {
  324. var startIndex = selection.index - text.length;
  325. setTimeout(function () {
  326. _this.quill.deleteText(startIndex, text.length);
  327. _this.quill.insertEmbed(startIndex + 1, "hr", true, Quill.sources.USER);
  328. _this.quill.insertText(startIndex + 2, "\n", Quill.sources.SILENT);
  329. _this.quill.setSelection(startIndex + 2, Quill.sources.SILENT);
  330. }, 0);
  331. }
  332. }, {
  333. name: "asterisk-ul",
  334. pattern: /^(\*|\+)\s$/g,
  335. // eslint-disable-next-line no-unused-vars
  336. action: function action(_text, selection, _pattern) {
  337. setTimeout(function () {
  338. _this.quill.formatLine(selection.index, 1, "list", "unordered");
  339. _this.quill.deleteText(selection.index - 2, 2);
  340. }, 0);
  341. }
  342. }, {
  343. name: "image",
  344. pattern: /(?:!\[(.+?)\])(?:\((.+?)\))/g,
  345. action: function action(text, selection, pattern) {
  346. var startIndex = text.search(pattern);
  347. var matchedText = text.match(pattern)[0]; // const hrefText = text.match(/(?:!\[(.*?)\])/g)[0]
  348. var hrefLink = text.match(/(?:\((.*?)\))/g)[0];
  349. var start = selection.index - matchedText.length - 1;
  350. if (startIndex !== -1) {
  351. setTimeout(function () {
  352. _this.quill.deleteText(start, matchedText.length);
  353. _this.quill.insertEmbed(start, "image", hrefLink.slice(1, hrefLink.length - 1));
  354. }, 0);
  355. }
  356. }
  357. }, {
  358. name: "link",
  359. pattern: /(?:\[(.+?)\])(?:\((.+?)\))/g,
  360. action: function action(text, selection, pattern) {
  361. var startIndex = text.search(pattern);
  362. var matchedText = text.match(pattern)[0];
  363. var hrefText = text.match(/(?:\[(.*?)\])/g)[0];
  364. var hrefLink = text.match(/(?:\((.*?)\))/g)[0];
  365. var start = selection.index - matchedText.length - 1;
  366. if (startIndex !== -1) {
  367. setTimeout(function () {
  368. _this.quill.deleteText(start, matchedText.length);
  369. _this.quill.insertText(start, hrefText.slice(1, hrefText.length - 1), "link", hrefLink.slice(1, hrefLink.length - 1));
  370. }, 0);
  371. }
  372. }
  373. }]; // Handler that looks for insert deltas that match specific characters
  374. // eslint-disable-next-line no-unused-vars
  375. this.quill.on("text-change", function (delta, _oldContents, _source) {
  376. for (var i = 0; i < delta.ops.length; i++) {
  377. if (delta.ops[i].hasOwnProperty("insert")) {
  378. if (delta.ops[i].insert === " ") {
  379. _this.onSpace();
  380. } else if (delta.ops[i].insert === "\n") {
  381. _this.onEnter();
  382. }
  383. }
  384. }
  385. });
  386. }
  387. _createClass(MarkdownShortcuts, [{
  388. key: "isValid",
  389. value: function isValid(text, tagName) {
  390. return typeof text !== "undefined" && text && this.ignoreTags.indexOf(tagName) === -1;
  391. }
  392. }, {
  393. key: "onSpace",
  394. value: function onSpace() {
  395. var selection = this.quill.getSelection();
  396. if (!selection) return;
  397. var _this$quill$getLine = this.quill.getLine(selection.index),
  398. _this$quill$getLine2 = _slicedToArray(_this$quill$getLine, 2),
  399. line = _this$quill$getLine2[0],
  400. offset = _this$quill$getLine2[1];
  401. var text = line.domNode.textContent;
  402. var lineStart = selection.index - offset;
  403. if (this.isValid(text, line.domNode.tagName)) {
  404. var _iteratorNormalCompletion = true;
  405. var _didIteratorError = false;
  406. var _iteratorError = undefined;
  407. try {
  408. for (var _iterator = this.matches[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  409. var match = _step.value;
  410. var matchedText = text.match(match.pattern);
  411. if (matchedText) {
  412. // We need to replace only matched text not the whole line
  413. console.log("matched:", match.name, text);
  414. match.action(text, selection, match.pattern, lineStart);
  415. return;
  416. }
  417. }
  418. } catch (err) {
  419. _didIteratorError = true;
  420. _iteratorError = err;
  421. } finally {
  422. try {
  423. if (!_iteratorNormalCompletion && _iterator.return != null) {
  424. _iterator.return();
  425. }
  426. } finally {
  427. if (_didIteratorError) {
  428. throw _iteratorError;
  429. }
  430. }
  431. }
  432. }
  433. }
  434. }, {
  435. key: "onEnter",
  436. value: function onEnter() {
  437. var selection = this.quill.getSelection();
  438. if (!selection) return;
  439. var _this$quill$getLine3 = this.quill.getLine(selection.index),
  440. _this$quill$getLine4 = _slicedToArray(_this$quill$getLine3, 2),
  441. line = _this$quill$getLine4[0],
  442. offset = _this$quill$getLine4[1];
  443. var text = line.domNode.textContent + " ";
  444. var lineStart = selection.index - offset;
  445. selection.length = selection.index++;
  446. if (this.isValid(text, line.domNode.tagName)) {
  447. var _iteratorNormalCompletion2 = true;
  448. var _didIteratorError2 = false;
  449. var _iteratorError2 = undefined;
  450. try {
  451. for (var _iterator2 = this.matches[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  452. var match = _step2.value;
  453. var matchedText = text.match(match.pattern);
  454. if (matchedText) {
  455. console.log("matched", match.name, text);
  456. match.action(text, selection, match.pattern, lineStart);
  457. return;
  458. }
  459. }
  460. } catch (err) {
  461. _didIteratorError2 = true;
  462. _iteratorError2 = err;
  463. } finally {
  464. try {
  465. if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
  466. _iterator2.return();
  467. }
  468. } finally {
  469. if (_didIteratorError2) {
  470. throw _iteratorError2;
  471. }
  472. }
  473. }
  474. }
  475. }
  476. }]);
  477. return MarkdownShortcuts;
  478. }(); // module.exports = MarkdownShortcuts;
  479. //
  480. var script = {
  481. name: "VueEditor",
  482. mixins: [oldApi],
  483. props: {
  484. id: {
  485. type: String,
  486. default: "quill-container"
  487. },
  488. placeholder: {
  489. type: String,
  490. default: ""
  491. },
  492. value: {
  493. type: String,
  494. default: ""
  495. },
  496. disabled: {
  497. type: Boolean
  498. },
  499. editorToolbar: {
  500. type: Array,
  501. default: function _default() {
  502. return [];
  503. }
  504. },
  505. editorOptions: {
  506. type: Object,
  507. required: false,
  508. default: function _default() {
  509. return {};
  510. }
  511. },
  512. useCustomImageHandler: {
  513. type: Boolean,
  514. default: false
  515. },
  516. useMarkdownShortcuts: {
  517. type: Boolean,
  518. default: false
  519. }
  520. },
  521. data: function data() {
  522. return {
  523. quill: null
  524. };
  525. },
  526. watch: {
  527. value: function value(val) {
  528. if (val != this.quill.root.innerHTML && !this.quill.hasFocus()) {
  529. this.quill.root.innerHTML = val;
  530. }
  531. },
  532. disabled: function disabled(status) {
  533. this.quill.enable(!status);
  534. }
  535. },
  536. mounted: function mounted() {
  537. this.registerCustomModules(Quill);
  538. this.registerPrototypes();
  539. this.initializeEditor();
  540. },
  541. beforeDestroy: function beforeDestroy() {
  542. this.quill = null;
  543. delete this.quill;
  544. },
  545. methods: {
  546. initializeEditor: function initializeEditor() {
  547. this.setupQuillEditor();
  548. this.checkForCustomImageHandler();
  549. this.handleInitialContent();
  550. this.registerEditorEventListeners();
  551. this.$emit("ready", this.quill);
  552. },
  553. setupQuillEditor: function setupQuillEditor() {
  554. var editorConfig = {
  555. debug: false,
  556. modules: this.setModules(),
  557. theme: "snow",
  558. placeholder: this.placeholder ? this.placeholder : "",
  559. readOnly: this.disabled ? this.disabled : false
  560. };
  561. this.prepareEditorConfig(editorConfig);
  562. this.quill = new Quill(this.$refs.quillContainer, editorConfig);
  563. },
  564. setModules: function setModules() {
  565. var modules = {
  566. toolbar: this.editorToolbar.length ? this.editorToolbar : defaultToolbar
  567. };
  568. if (this.useMarkdownShortcuts) {
  569. Quill.register("modules/markdownShortcuts", MarkdownShortcuts, true);
  570. modules["markdownShortcuts"] = {};
  571. }
  572. return modules;
  573. },
  574. prepareEditorConfig: function prepareEditorConfig(editorConfig) {
  575. if (Object.keys(this.editorOptions).length > 0 && this.editorOptions.constructor === Object) {
  576. if (this.editorOptions.modules && typeof this.editorOptions.modules.toolbar !== "undefined") {
  577. // We don't want to merge default toolbar with provided toolbar.
  578. delete editorConfig.modules.toolbar;
  579. }
  580. mergeDeep(editorConfig, this.editorOptions);
  581. }
  582. },
  583. registerPrototypes: function registerPrototypes() {
  584. Quill.prototype.getHTML = function () {
  585. return this.container.querySelector(".ql-editor").innerHTML;
  586. };
  587. Quill.prototype.getWordCount = function () {
  588. return this.container.querySelector(".ql-editor").innerText.length;
  589. };
  590. },
  591. registerEditorEventListeners: function registerEditorEventListeners() {
  592. this.quill.on("text-change", this.handleTextChange);
  593. this.quill.on("selection-change", this.handleSelectionChange);
  594. this.listenForEditorEvent("text-change");
  595. this.listenForEditorEvent("selection-change");
  596. this.listenForEditorEvent("editor-change");
  597. },
  598. listenForEditorEvent: function listenForEditorEvent(type) {
  599. var _this = this;
  600. this.quill.on(type, function () {
  601. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  602. args[_key] = arguments[_key];
  603. }
  604. _this.$emit.apply(_this, [type].concat(args));
  605. });
  606. },
  607. handleInitialContent: function handleInitialContent() {
  608. if (this.value) this.quill.root.innerHTML = this.value; // Set initial editor content
  609. },
  610. handleSelectionChange: function handleSelectionChange(range, oldRange) {
  611. if (!range && oldRange) this.$emit("blur", this.quill);else if (range && !oldRange) this.$emit("focus", this.quill);
  612. },
  613. handleTextChange: function handleTextChange(delta, oldContents) {
  614. var editorContent = this.quill.getHTML() === "<p><br></p>" ? "" : this.quill.getHTML();
  615. this.$emit("input", editorContent);
  616. if (this.useCustomImageHandler) this.handleImageRemoved(delta, oldContents);
  617. },
  618. handleImageRemoved: function handleImageRemoved(delta, oldContents) {
  619. var _this2 = this;
  620. var currrentContents = this.quill.getContents();
  621. var deletedContents = currrentContents.diff(oldContents);
  622. var operations = deletedContents.ops;
  623. operations.map(function (operation) {
  624. if (operation.insert && operation.insert.hasOwnProperty("image")) {
  625. var image = operation.insert.image;
  626. _this2.$emit("image-removed", image);
  627. }
  628. });
  629. },
  630. checkForCustomImageHandler: function checkForCustomImageHandler() {
  631. this.useCustomImageHandler === true ? this.setupCustomImageHandler() : "";
  632. },
  633. setupCustomImageHandler: function setupCustomImageHandler() {
  634. var toolbar = this.quill.getModule("toolbar");
  635. toolbar.addHandler("image", this.customImageHandler);
  636. },
  637. customImageHandler: function customImageHandler() {
  638. this.$refs.fileInput.click();
  639. },
  640. emitImageInfo: function emitImageInfo($event) {
  641. var resetUploader = function resetUploader() {
  642. var uploader = document.getElementById("file-upload");
  643. uploader.value = "";
  644. };
  645. var file = $event.target.files[0];
  646. var Editor = this.quill;
  647. var range = Editor.getSelection();
  648. var cursorLocation = range.index;
  649. this.$emit("image-added", file, Editor, cursorLocation, resetUploader);
  650. }
  651. }
  652. };
  653. function normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier
  654. /* server only */
  655. , shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {
  656. if (typeof shadowMode !== 'boolean') {
  657. createInjectorSSR = createInjector;
  658. createInjector = shadowMode;
  659. shadowMode = false;
  660. } // Vue.extend constructor export interop.
  661. var options = typeof script === 'function' ? script.options : script; // render functions
  662. if (template && template.render) {
  663. options.render = template.render;
  664. options.staticRenderFns = template.staticRenderFns;
  665. options._compiled = true; // functional template
  666. if (isFunctionalTemplate) {
  667. options.functional = true;
  668. }
  669. } // scopedId
  670. if (scopeId) {
  671. options._scopeId = scopeId;
  672. }
  673. var hook;
  674. if (moduleIdentifier) {
  675. // server build
  676. hook = function hook(context) {
  677. // 2.3 injection
  678. context = context || // cached call
  679. this.$vnode && this.$vnode.ssrContext || // stateful
  680. this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext; // functional
  681. // 2.2 with runInNewContext: true
  682. if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
  683. context = __VUE_SSR_CONTEXT__;
  684. } // inject component styles
  685. if (style) {
  686. style.call(this, createInjectorSSR(context));
  687. } // register component module identifier for async chunk inference
  688. if (context && context._registeredComponents) {
  689. context._registeredComponents.add(moduleIdentifier);
  690. }
  691. }; // used by ssr in case component is cached and beforeCreate
  692. // never gets called
  693. options._ssrRegister = hook;
  694. } else if (style) {
  695. hook = shadowMode ? function () {
  696. style.call(this, createInjectorShadow(this.$root.$options.shadowRoot));
  697. } : function (context) {
  698. style.call(this, createInjector(context));
  699. };
  700. }
  701. if (hook) {
  702. if (options.functional) {
  703. // register for functional component in vue file
  704. var originalRender = options.render;
  705. options.render = function renderWithStyleInjection(h, context) {
  706. hook.call(context);
  707. return originalRender(h, context);
  708. };
  709. } else {
  710. // inject component registration as beforeCreate hook
  711. var existing = options.beforeCreate;
  712. options.beforeCreate = existing ? [].concat(existing, hook) : [hook];
  713. }
  714. }
  715. return script;
  716. }
  717. var normalizeComponent_1 = normalizeComponent;
  718. var isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());
  719. function createInjector(context) {
  720. return function (id, style) {
  721. return addStyle(id, style);
  722. };
  723. }
  724. var HEAD;
  725. var styles = {};
  726. function addStyle(id, css) {
  727. var group = isOldIE ? css.media || 'default' : id;
  728. var style = styles[group] || (styles[group] = {
  729. ids: new Set(),
  730. styles: []
  731. });
  732. if (!style.ids.has(id)) {
  733. style.ids.add(id);
  734. var code = css.source;
  735. if (css.map) {
  736. // https://developer.chrome.com/devtools/docs/javascript-debugging
  737. // this makes source maps inside style tags work properly in Chrome
  738. code += '\n/*# sourceURL=' + css.map.sources[0] + ' */'; // http://stackoverflow.com/a/26603875
  739. code += '\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) + ' */';
  740. }
  741. if (!style.element) {
  742. style.element = document.createElement('style');
  743. style.element.type = 'text/css';
  744. if (css.media) style.element.setAttribute('media', css.media);
  745. if (HEAD === undefined) {
  746. HEAD = document.head || document.getElementsByTagName('head')[0];
  747. }
  748. HEAD.appendChild(style.element);
  749. }
  750. if ('styleSheet' in style.element) {
  751. style.styles.push(code);
  752. style.element.styleSheet.cssText = style.styles.filter(Boolean).join('\n');
  753. } else {
  754. var index = style.ids.size - 1;
  755. var textNode = document.createTextNode(code);
  756. var nodes = style.element.childNodes;
  757. if (nodes[index]) style.element.removeChild(nodes[index]);
  758. if (nodes.length) style.element.insertBefore(textNode, nodes[index]);else style.element.appendChild(textNode);
  759. }
  760. }
  761. }
  762. var browser = createInjector;
  763. /* script */
  764. const __vue_script__ = script;
  765. /* template */
  766. var __vue_render__ = function () {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($event){return _vm.emitImageInfo($event)}}}):_vm._e()],2)};
  767. var __vue_staticRenderFns__ = [];
  768. /* style */
  769. const __vue_inject_styles__ = function (inject) {
  770. if (!inject) return
  771. inject("data-v-776e788e_0", { source: "/*!\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}", map: undefined, media: undefined })
  772. ,inject("data-v-776e788e_1", { source: ".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}", map: undefined, media: undefined });
  773. };
  774. /* scoped */
  775. const __vue_scope_id__ = undefined;
  776. /* module identifier */
  777. const __vue_module_identifier__ = undefined;
  778. /* functional template */
  779. const __vue_is_functional_template__ = false;
  780. /* style inject SSR */
  781. var VueEditor = normalizeComponent_1(
  782. { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
  783. __vue_inject_styles__,
  784. __vue_script__,
  785. __vue_scope_id__,
  786. __vue_is_functional_template__,
  787. __vue_module_identifier__,
  788. browser,
  789. undefined
  790. );
  791. var version = "2.10.3"; // Declare install function executed by Vue.use()
  792. function install(Vue) {
  793. if (install.installed) return;
  794. install.installed = true;
  795. Vue.component("VueEditor", VueEditor);
  796. }
  797. var VPlugin = {
  798. install: install,
  799. version: version,
  800. Quill: Quill,
  801. VueEditor: VueEditor
  802. }; // Auto-install when vue is found (eg. in browser via <script> tag)
  803. var GlobalVue = null;
  804. if (typeof window !== "undefined") {
  805. GlobalVue = window.Vue;
  806. } else if (typeof global !== "undefined") {
  807. GlobalVue = global.Vue;
  808. }
  809. if (GlobalVue) {
  810. GlobalVue.use(VPlugin);
  811. }
  812. /*************************************************/
  813. exports.Quill = Quill;
  814. exports.VueEditor = VueEditor;
  815. exports.default = VPlugin;
  816. exports.install = install;