vue2-editor.esm.js 51 KB

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