{"version":3,"file":"js/6152.f166adb1.js","mappings":"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","sources":["webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/index.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/_markerable.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/_section.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/atom-node.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/atom.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/card-node.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/card.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/image.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/lifecycle-callbacks.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/list-item.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/list-section.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/marker.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/markup-section.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/markup.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/post-node-builder.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/post.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/render-node.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/render-tree.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/models/types.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/parsers/dom.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/parsers/html.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/parsers/mobiledoc/0-2.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/parsers/mobiledoc/0-3.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/parsers/mobiledoc/index.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/parsers/section.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/parsers/text.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/renderers/editor-dom.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/renderers/mobiledoc/0-2.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/renderers/mobiledoc/0-3.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/renderers/mobiledoc/index.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/array-utils.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/assert.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/browser.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/characters.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/compiler.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/copy.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/cursor.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/cursor/position.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/cursor/range.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/deprecate.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/dom-utils.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/element-map.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/element-utils.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/fixed-queue.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/key.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/keycodes.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/linked-item.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/linked-list.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/log-manager.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/markuperable.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/merge.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/mixin.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/mobiledoc-error.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/parse-utils.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/placeholder-image-src.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/selection-utils.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/set.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/string-utils.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/utils/to-range.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/version.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/views/tooltip.js","webpack://dicom-frontend/./node_modules/mobiledoc-kit/dist/commonjs/mobiledoc-kit/views/view.js","webpack://dicom-frontend/./node_modules/mobiledoc-text-renderer/dist/commonjs/mobiledoc-text-renderer/cards/image.js","webpack://dicom-frontend/./node_modules/mobiledoc-text-renderer/dist/commonjs/mobiledoc-text-renderer/index.js","webpack://dicom-frontend/./node_modules/mobiledoc-text-renderer/dist/commonjs/mobiledoc-text-renderer/renderer-factory.js","webpack://dicom-frontend/./node_modules/mobiledoc-text-renderer/dist/commonjs/mobiledoc-text-renderer/renderers/0-2.js","webpack://dicom-frontend/./node_modules/mobiledoc-text-renderer/dist/commonjs/mobiledoc-text-renderer/renderers/0-3.js","webpack://dicom-frontend/./node_modules/mobiledoc-text-renderer/dist/commonjs/mobiledoc-text-renderer/utils/marker-types.js","webpack://dicom-frontend/./node_modules/mobiledoc-text-renderer/dist/commonjs/mobiledoc-text-renderer/utils/render-type.js","webpack://dicom-frontend/./node_modules/mobiledoc-text-renderer/dist/commonjs/mobiledoc-text-renderer/utils/section-types.js"],"sourcesContent":["'use strict';\n\nexports.registerGlobal = registerGlobal;\n\nvar _editorEditor = require('./editor/editor');\n\nvar _cardsImage = require('./cards/image');\n\nvar _utilsCursorRange = require('./utils/cursor/range');\n\nvar _utilsCursorPosition = require('./utils/cursor/position');\n\nvar _utilsMobiledocError = require('./utils/mobiledoc-error');\n\nvar _version = require('./version');\n\nvar Mobiledoc = {\n Editor: _editorEditor['default'],\n ImageCard: _cardsImage['default'],\n Range: _utilsCursorRange['default'],\n Position: _utilsCursorPosition['default'],\n Error: _utilsMobiledocError['default'],\n VERSION: _version['default']\n};\n\nfunction registerGlobal(global) {\n global.Mobiledoc = Mobiledoc;\n}\n\nexports.Editor = _editorEditor['default'];\nexports['default'] = Mobiledoc;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x5, _x6, _x7) { var _again = true; _function: while (_again) { var object = _x5, property = _x6, receiver = _x7; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x5 = parent; _x6 = property; _x7 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\nfunction _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _utilsArrayUtils = require('../utils/array-utils');\n\nvar _utilsSet = require('../utils/set');\n\nvar _utilsLinkedList = require('../utils/linked-list');\n\nvar _section = require('./_section');\n\nvar _utilsAssert = require('../utils/assert');\n\nvar Markerable = (function (_Section) {\n _inherits(Markerable, _Section);\n\n function Markerable(type, tagName) {\n var _this = this;\n\n var markers = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2];\n\n _classCallCheck(this, Markerable);\n\n _get(Object.getPrototypeOf(Markerable.prototype), 'constructor', this).call(this, type);\n this.isMarkerable = true;\n this.tagName = tagName;\n this.markers = new _utilsLinkedList['default']({\n adoptItem: function adoptItem(m) {\n (0, _utilsAssert['default'])('Can only insert markers and atoms into markerable (was: ' + m.type + ')', m.isMarker || m.isAtom);\n m.section = m.parent = _this;\n },\n freeItem: function freeItem(m) {\n return m.section = m.parent = null;\n }\n });\n\n markers.forEach(function (m) {\n return _this.markers.append(m);\n });\n }\n\n _createClass(Markerable, [{\n key: 'canJoin',\n value: function canJoin(other) {\n return other.isMarkerable && other.type === this.type && other.tagName === this.tagName;\n }\n }, {\n key: 'clone',\n value: function clone() {\n var newMarkers = this.markers.map(function (m) {\n return m.clone();\n });\n return this.builder.createMarkerableSection(this.type, this.tagName, newMarkers);\n }\n }, {\n key: 'textUntil',\n value: function textUntil(position) {\n (0, _utilsAssert['default'])('Cannot get textUntil for a position not in this section', position.section === this);\n var marker = position.marker;\n var offsetInMarker = position.offsetInMarker;\n\n var text = '';\n var currentMarker = this.markers.head;\n while (currentMarker) {\n if (currentMarker === marker) {\n text += currentMarker.textUntil(offsetInMarker);\n break;\n } else {\n text += currentMarker.text;\n currentMarker = currentMarker.next;\n }\n }\n return text;\n }\n\n /**\n * @param {Marker}\n * @param {Number} markerOffset The offset relative to the start of the marker\n *\n * @return {Number} The offset relative to the start of this section\n */\n }, {\n key: 'offsetOfMarker',\n value: function offsetOfMarker(marker) {\n var markerOffset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n (0, _utilsAssert['default'])('Cannot get offsetOfMarker for marker that is not child of this', marker.section === this);\n\n // FIXME it is possible, when we get a cursor position before having finished reparsing,\n // for markerOffset to be > marker.length. We shouldn't rely on this functionality.\n\n var offset = 0;\n var currentMarker = this.markers.head;\n while (currentMarker && currentMarker !== marker.next) {\n var _length = currentMarker === marker ? markerOffset : currentMarker.length;\n offset += _length;\n currentMarker = currentMarker.next;\n }\n\n return offset;\n }\n\n /**\n * Splits the marker at the offset, filters empty markers from the result,\n * and replaces this marker with the new non-empty ones\n * @param {Marker} marker the marker to split\n * @return {Array} the new markers that replaced `marker`\n */\n }, {\n key: 'splitMarker',\n value: function splitMarker(marker, offset) {\n var endOffset = arguments.length <= 2 || arguments[2] === undefined ? marker.length : arguments[2];\n return (function () {\n var newMarkers = (0, _utilsArrayUtils.filter)(marker.split(offset, endOffset), function (m) {\n return !m.isBlank;\n });\n this.markers.splice(marker, 1, newMarkers);\n return newMarkers;\n }).apply(this, arguments);\n }\n\n // puts clones of this.markers into beforeSection and afterSection,\n // all markers before the marker/offset split go in beforeSection, and all\n // after the marker/offset split go in afterSection\n // @return {Array} [beforeSection, afterSection], two new sections\n }, {\n key: '_redistributeMarkers',\n value: function _redistributeMarkers(beforeSection, afterSection, marker) {\n var offset = arguments.length <= 3 || arguments[3] === undefined ? 0 : arguments[3];\n\n var currentSection = beforeSection;\n (0, _utilsArrayUtils.forEach)(this.markers, function (m) {\n if (m === marker) {\n var _marker$split = marker.split(offset);\n\n var _marker$split2 = _toArray(_marker$split);\n\n var beforeMarker = _marker$split2[0];\n\n var afterMarkers = _marker$split2.slice(1);\n\n beforeSection.markers.append(beforeMarker);\n (0, _utilsArrayUtils.forEach)(afterMarkers, function (_m) {\n return afterSection.markers.append(_m);\n });\n currentSection = afterSection;\n } else {\n currentSection.markers.append(m.clone());\n }\n });\n\n return [beforeSection, afterSection];\n }\n }, {\n key: 'splitAtMarker',\n value: function splitAtMarker() /*marker, offset=0*/{\n (0, _utilsAssert['default'])('splitAtMarker must be implemented by sub-class', false);\n }\n\n /**\n * Split this section's marker (if any) at the given offset, so that\n * there is now a marker boundary at that offset (useful for later applying\n * a markup to a range)\n * @param {Number} sectionOffset The offset relative to start of this section\n * @return {EditObject} An edit object with 'removed' and 'added' keys with arrays of Markers. The added markers may be blank.\n * After calling `splitMarkerAtOffset(offset)`, there will always be a valid\n * result returned from `markerBeforeOffset(offset)`.\n */\n }, {\n key: 'splitMarkerAtOffset',\n value: function splitMarkerAtOffset(sectionOffset) {\n (0, _utilsAssert['default'])('Cannot splitMarkerAtOffset when offset is > length', sectionOffset <= this.length);\n var markerOffset = undefined;\n var len = 0;\n var currentMarker = this.markers.head;\n var edit = { added: [], removed: [] };\n\n if (!currentMarker) {\n var blankMarker = this.builder.createMarker();\n this.markers.prepend(blankMarker);\n edit.added.push(blankMarker);\n } else {\n while (currentMarker) {\n len += currentMarker.length;\n if (len === sectionOffset) {\n // nothing to do, there is a gap at the requested offset\n break;\n } else if (len > sectionOffset) {\n var _edit$added;\n\n markerOffset = currentMarker.length - (len - sectionOffset);\n var newMarkers = currentMarker.splitAtOffset(markerOffset);\n (_edit$added = edit.added).push.apply(_edit$added, _toConsumableArray(newMarkers));\n edit.removed.push(currentMarker);\n this.markers.splice(currentMarker, 1, newMarkers);\n break;\n } else {\n currentMarker = currentMarker.next;\n }\n }\n }\n\n return edit;\n }\n }, {\n key: 'splitAtPosition',\n value: function splitAtPosition(position) {\n var marker = position.marker;\n var offsetInMarker = position.offsetInMarker;\n\n return this.splitAtMarker(marker, offsetInMarker);\n }\n\n // returns the marker just before this offset.\n // It is an error to call this method with an offset that is in the middle\n // of a marker.\n }, {\n key: 'markerBeforeOffset',\n value: function markerBeforeOffset(sectionOffset) {\n var len = 0;\n var currentMarker = this.markers.head;\n\n while (currentMarker) {\n len += currentMarker.length;\n if (len === sectionOffset) {\n return currentMarker;\n } else {\n (0, _utilsAssert['default'])('markerBeforeOffset called with sectionOffset not between markers', len < sectionOffset);\n currentMarker = currentMarker.next;\n }\n }\n }\n }, {\n key: 'markerPositionAtOffset',\n value: function markerPositionAtOffset(offset) {\n var currentOffset = 0;\n var currentMarker = undefined;\n var remaining = offset;\n this.markers.detect(function (marker) {\n currentOffset = Math.min(remaining, marker.length);\n remaining -= currentOffset;\n if (remaining === 0) {\n currentMarker = marker;\n return true; // break out of detect\n }\n });\n\n return { marker: currentMarker, offset: currentOffset };\n }\n }, {\n key: 'markersFor',\n\n /**\n * @return {Array} New markers that match the boundaries of the\n * range. Does not change the existing markers in this section.\n */\n value: function markersFor(headOffset, tailOffset) {\n var range = { head: { section: this, offset: headOffset },\n tail: { section: this, offset: tailOffset } };\n\n var markers = [];\n this._markersInRange(range, function (marker, _ref) {\n var markerHead = _ref.markerHead;\n var markerTail = _ref.markerTail;\n var isContained = _ref.isContained;\n\n var cloned = marker.clone();\n if (!isContained) {\n // cannot do marker.value.slice if the marker is an atom -- this breaks the atom's \"atomic\" value\n // If a marker is an atom `isContained` should always be true so\n // we shouldn't hit this code path. FIXME add tests\n cloned.value = marker.value.slice(markerHead, markerTail);\n }\n markers.push(cloned);\n });\n return markers;\n }\n }, {\n key: 'markupsInRange',\n value: function markupsInRange(range) {\n var markups = new _utilsSet['default']();\n this._markersInRange(range, function (marker) {\n marker.markups.forEach(function (m) {\n return markups.add(m);\n });\n });\n return markups.toArray();\n }\n\n // calls the callback with (marker, {markerHead, markerTail, isContained})\n // for each marker that is wholly or partially contained in the range.\n }, {\n key: '_markersInRange',\n value: function _markersInRange(range, callback) {\n var head = range.head;\n var tail = range.tail;\n\n (0, _utilsAssert['default'])('Cannot call #_markersInRange if range expands beyond this section', head.section === this && tail.section === this);\n var headOffset = head.offset;var tailOffset = tail.offset;\n\n var currentHead = 0,\n currentTail = 0,\n currentMarker = this.markers.head;\n\n while (currentMarker) {\n currentTail += currentMarker.length;\n\n if (currentTail > headOffset && currentHead < tailOffset) {\n var markerHead = Math.max(headOffset - currentHead, 0);\n var markerTail = currentMarker.length - Math.max(currentTail - tailOffset, 0);\n var isContained = markerHead === 0 && markerTail === currentMarker.length;\n\n callback(currentMarker, { markerHead: markerHead, markerTail: markerTail, isContained: isContained });\n }\n\n currentHead += currentMarker.length;\n currentMarker = currentMarker.next;\n\n if (currentHead > tailOffset) {\n break;\n }\n }\n }\n\n // mutates this by appending the other section's (cloned) markers to it\n }, {\n key: 'join',\n value: function join(otherSection) {\n var _this2 = this;\n\n var beforeMarker = this.markers.tail;\n var afterMarker = null;\n\n otherSection.markers.forEach(function (m) {\n if (!m.isBlank) {\n m = m.clone();\n _this2.markers.append(m);\n if (!afterMarker) {\n afterMarker = m;\n }\n }\n });\n\n return { beforeMarker: beforeMarker, afterMarker: afterMarker };\n }\n }, {\n key: 'isBlank',\n get: function get() {\n if (!this.markers.length) {\n return true;\n }\n return this.markers.every(function (m) {\n return m.isBlank;\n });\n }\n }, {\n key: 'text',\n get: function get() {\n return (0, _utilsArrayUtils.reduce)(this.markers, function (prev, m) {\n return prev + m.value;\n }, '');\n }\n }, {\n key: 'length',\n get: function get() {\n return (0, _utilsArrayUtils.reduce)(this.markers, function (prev, m) {\n return prev + m.length;\n }, 0);\n }\n }]);\n\n return Markerable;\n})(_section['default']);\n\nexports['default'] = Markerable;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nvar _utilsLinkedItem = require('../utils/linked-item');\n\nvar _utilsAssert = require('../utils/assert');\n\nvar _utilsCursorPosition = require('../utils/cursor/position');\n\nfunction unimplementedMethod(methodName, me) {\n (0, _utilsAssert['default'])('`' + methodName + '()` must be implemented by ' + me.constructor.name, false);\n}\n\nvar Section = (function (_LinkedItem) {\n _inherits(Section, _LinkedItem);\n\n function Section(type) {\n _classCallCheck(this, Section);\n\n _get(Object.getPrototypeOf(Section.prototype), 'constructor', this).call(this);\n (0, _utilsAssert['default'])('Cannot create section without type', !!type);\n this.type = type;\n this.isSection = true;\n this.isMarkerable = false;\n this.isNested = false;\n this.isSection = true;\n this.isLeafSection = true;\n }\n\n _createClass(Section, [{\n key: 'isValidTagName',\n value: function isValidTagName() /* normalizedTagName */{\n unimplementedMethod('isValidTagName', this);\n }\n }, {\n key: 'clone',\n value: function clone() {\n unimplementedMethod('clone', this);\n }\n }, {\n key: 'canJoin',\n value: function canJoin() /* otherSection */{\n unimplementedMethod('canJoin', this);\n }\n\n /**\n * @return {Position} The position at the start of this section\n * @public\n */\n }, {\n key: 'headPosition',\n value: function headPosition() {\n return this.toPosition(0);\n }\n\n /**\n * @return {Position} The position at the end of this section\n * @public\n */\n }, {\n key: 'tailPosition',\n value: function tailPosition() {\n return this.toPosition(this.length);\n }\n\n /**\n * @param {Number} offset\n * @return {Position} The position in this section at the given offset\n * @public\n */\n }, {\n key: 'toPosition',\n value: function toPosition(offset) {\n (0, _utilsAssert['default'])(\"Must pass number to `toPosition`\", typeof offset === 'number');\n (0, _utilsAssert['default'])(\"Cannot call `toPosition` with offset > length\", offset <= this.length);\n\n return new _utilsCursorPosition['default'](this, offset);\n }\n\n /**\n * @return {Range} A range from this section's head to tail positions\n * @public\n */\n }, {\n key: 'toRange',\n value: function toRange() {\n return this.headPosition().toRange(this.tailPosition());\n }\n }, {\n key: 'join',\n value: function join() {\n unimplementedMethod('join', this);\n }\n }, {\n key: 'textUntil',\n value: function textUntil() /* position */{\n return '';\n }\n\n /**\n * Markerable sections should override this method\n */\n }, {\n key: 'splitMarkerAtOffset',\n value: function splitMarkerAtOffset() {\n var blankEdit = { added: [], removed: [] };\n return blankEdit;\n }\n }, {\n key: 'nextLeafSection',\n value: function nextLeafSection() {\n var next = this.next;\n if (next) {\n if (!!next.items) {\n return next.items.head;\n } else {\n return next;\n }\n } else {\n if (this.isNested) {\n return this.parent.nextLeafSection();\n }\n }\n }\n }, {\n key: 'immediatelyNextMarkerableSection',\n value: function immediatelyNextMarkerableSection() {\n var next = this.nextLeafSection();\n while (next && !next.isMarkerable) {\n next = next.nextLeafSection();\n }\n return next;\n }\n }, {\n key: 'previousLeafSection',\n value: function previousLeafSection() {\n var prev = this.prev;\n\n if (prev) {\n if (!!prev.items) {\n return prev.items.tail;\n } else {\n return prev;\n }\n } else {\n if (this.isNested) {\n return this.parent.previousLeafSection();\n }\n }\n }\n }, {\n key: 'tagName',\n set: function set(val) {\n var normalizedTagName = (0, _utilsDomUtils.normalizeTagName)(val);\n (0, _utilsAssert['default'])('Cannot set section tagName to ' + val, this.isValidTagName(normalizedTagName));\n this._tagName = normalizedTagName;\n },\n get: function get() {\n return this._tagName;\n }\n }, {\n key: 'length',\n get: function get() {\n return 0;\n }\n }, {\n key: 'isBlank',\n get: function get() {\n unimplementedMethod('isBlank', this);\n }\n }]);\n\n return Section;\n})(_utilsLinkedItem['default']);\n\nexports['default'] = Section;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _utilsAssert = require('../utils/assert');\n\nvar AtomNode = (function () {\n function AtomNode(editor, atom, model, element, atomOptions) {\n _classCallCheck(this, AtomNode);\n\n this.editor = editor;\n this.atom = atom;\n this.model = model;\n this.atomOptions = atomOptions;\n this.element = element;\n\n this._teardownCallback = null;\n this._rendered = null;\n }\n\n _createClass(AtomNode, [{\n key: 'render',\n value: function render() {\n if (!this._rendered) {\n var options = this.atomOptions;\n var env = this.env;\n var _model = this.model;\n var value = _model.value;\n var payload = _model.payload;\n\n // cache initial render\n this._rendered = this.atom.render({ options: options, env: env, value: value, payload: payload });\n }\n\n this._validateAndAppendRenderResult(this._rendered);\n }\n }, {\n key: 'teardown',\n value: function teardown() {\n if (this._teardownCallback) {\n this._teardownCallback();\n this._teardownCallback = null;\n }\n if (this._rendered) {\n this.element.removeChild(this._rendered);\n this._rendered = null;\n }\n }\n }, {\n key: '_validateAndAppendRenderResult',\n value: function _validateAndAppendRenderResult(rendered) {\n if (!rendered) {\n return;\n }\n\n var name = this.atom.name;\n\n (0, _utilsAssert['default'])('Atom \"' + name + '\" must return a DOM node (returned value was: \"' + rendered + '\")', !!rendered.nodeType);\n this.element.appendChild(rendered);\n }\n }, {\n key: 'env',\n get: function get() {\n var _this = this;\n\n return {\n name: this.atom.name,\n onTeardown: function onTeardown(callback) {\n return _this._teardownCallback = callback;\n },\n save: function save(value) {\n var payload = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n _this.model.value = value;\n _this.model.payload = payload;\n\n _this.editor._postDidChange();\n _this.teardown();\n _this.render();\n }\n };\n }\n }]);\n\n return AtomNode;\n})();\n\nexports['default'] = AtomNode;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x4, _x5, _x6) { var _again = true; _function: while (_again) { var object = _x4, property = _x5, receiver = _x6; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x4 = parent; _x5 = property; _x6 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _types = require('./types');\n\nvar _utilsMixin = require('../utils/mixin');\n\nvar _utilsMarkuperable = require('../utils/markuperable');\n\nvar _utilsLinkedItem = require('../utils/linked-item');\n\nvar _utilsAssert = require('../utils/assert');\n\nvar ATOM_LENGTH = 1;\n\nvar Atom = (function (_LinkedItem) {\n _inherits(Atom, _LinkedItem);\n\n function Atom(name, value, payload) {\n var _this = this;\n\n var markups = arguments.length <= 3 || arguments[3] === undefined ? [] : arguments[3];\n\n _classCallCheck(this, Atom);\n\n _get(Object.getPrototypeOf(Atom.prototype), 'constructor', this).call(this);\n this.name = name;\n this.value = value;\n this.text = ''; // An atom never has text, but it does have a value\n (0, _utilsAssert['default'])('Atom must have value', value !== undefined && value !== null);\n this.payload = payload;\n this.type = _types.ATOM_TYPE;\n this.isMarker = false;\n this.isAtom = true;\n\n this.markups = [];\n markups.forEach(function (m) {\n return _this.addMarkup(m);\n });\n }\n\n _createClass(Atom, [{\n key: 'clone',\n value: function clone() {\n var clonedMarkups = this.markups.slice();\n return this.builder.createAtom(this.name, this.value, this.payload, clonedMarkups);\n }\n }, {\n key: 'canJoin',\n value: function canJoin() /* other */{\n return false;\n }\n }, {\n key: 'textUntil',\n value: function textUntil() /* offset */{\n return '';\n }\n }, {\n key: 'split',\n value: function split() {\n var offset = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0];\n var endOffset = arguments.length <= 1 || arguments[1] === undefined ? offset : arguments[1];\n return (function () {\n var markers = [];\n\n if (endOffset === 0) {\n markers.push(this.builder.createMarker('', this.markups.slice()));\n }\n\n markers.push(this.clone());\n\n if (offset === ATOM_LENGTH) {\n markers.push(this.builder.createMarker('', this.markups.slice()));\n }\n\n return markers;\n }).apply(this, arguments);\n }\n }, {\n key: 'splitAtOffset',\n value: function splitAtOffset(offset) {\n (0, _utilsAssert['default'])('Cannot split a marker at an offset > its length', offset <= this.length);\n\n var builder = this.builder;\n\n var clone = this.clone();\n var blankMarker = builder.createMarker('');\n var pre = undefined,\n post = undefined;\n\n if (offset === 0) {\n pre = blankMarker;\n post = clone;\n } else if (offset === ATOM_LENGTH) {\n pre = clone;\n post = blankMarker;\n } else {\n (0, _utilsAssert['default'])('Invalid offset given to Atom#splitAtOffset: \"' + offset + '\"', false);\n }\n\n this.markups.forEach(function (markup) {\n pre.addMarkup(markup);\n post.addMarkup(markup);\n });\n return [pre, post];\n }\n }, {\n key: 'isBlank',\n get: function get() {\n return false;\n }\n }, {\n key: 'length',\n get: function get() {\n return ATOM_LENGTH;\n }\n }]);\n\n return Atom;\n})(_utilsLinkedItem['default']);\n\n(0, _utilsMixin['default'])(Atom, _utilsMarkuperable['default']);\n\nexports['default'] = Atom;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _utilsAssert = require('../utils/assert');\n\nvar CardNode = (function () {\n function CardNode(editor, card, section, element, options) {\n _classCallCheck(this, CardNode);\n\n this.editor = editor;\n this.card = card;\n this.section = section;\n this.element = element;\n this.options = options;\n\n this.mode = null;\n\n this._teardownCallback = null;\n this._rendered = null;\n }\n\n _createClass(CardNode, [{\n key: 'render',\n value: function render(mode) {\n if (this.mode === mode) {\n return;\n }\n\n this.teardown();\n\n this.mode = mode;\n\n var method = mode === 'display' ? 'render' : 'edit';\n method = this.card[method];\n\n (0, _utilsAssert['default'])('Card is missing \"' + method + '\" (tried to render mode: \"' + mode + '\")', !!method);\n var rendered = method({\n env: this.env,\n options: this.options,\n payload: this.section.payload\n });\n\n this._validateAndAppendRenderResult(rendered);\n }\n }, {\n key: 'teardown',\n value: function teardown() {\n if (this._teardownCallback) {\n this._teardownCallback();\n this._teardownCallback = null;\n }\n if (this._rendered) {\n this.element.removeChild(this._rendered);\n this._rendered = null;\n }\n }\n }, {\n key: 'didRender',\n value: function didRender() {\n if (this._didRenderCallback) {\n this._didRenderCallback();\n }\n }\n }, {\n key: 'display',\n value: function display() {\n this.render('display');\n }\n }, {\n key: 'edit',\n value: function edit() {\n this.render('edit');\n }\n }, {\n key: 'remove',\n value: function remove() {\n var _this = this;\n\n this.editor.run(function (postEditor) {\n return postEditor.removeSection(_this.section);\n });\n }\n }, {\n key: '_validateAndAppendRenderResult',\n value: function _validateAndAppendRenderResult(rendered) {\n if (!rendered) {\n return;\n }\n\n var name = this.card.name;\n\n (0, _utilsAssert['default'])('Card \"' + name + '\" must render dom (render value was: \"' + rendered + '\")', !!rendered.nodeType);\n this.element.appendChild(rendered);\n this._rendered = rendered;\n this.didRender();\n }\n }, {\n key: 'env',\n get: function get() {\n var _this2 = this;\n\n return {\n name: this.card.name,\n isInEditor: true,\n onTeardown: function onTeardown(callback) {\n return _this2._teardownCallback = callback;\n },\n didRender: function didRender(callback) {\n return _this2._didRenderCallback = callback;\n },\n edit: function edit() {\n return _this2.edit();\n },\n save: function save(payload) {\n var transition = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n _this2.section.payload = payload;\n\n _this2.editor._postDidChange();\n if (transition) {\n _this2.display();\n }\n },\n cancel: function cancel() {\n return _this2.display();\n },\n remove: function remove() {\n return _this2.remove();\n },\n postModel: this.section\n };\n }\n }]);\n\n return CardNode;\n})();\n\nexports['default'] = CardNode;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _section = require('./_section');\n\nvar _types = require('./types');\n\nvar _utilsCopy = require('../utils/copy');\n\nvar CARD_MODES = {\n DISPLAY: 'display',\n EDIT: 'edit'\n};\n\nexports.CARD_MODES = CARD_MODES;\nvar CARD_LENGTH = 1;\n\nvar DEFAULT_INITIAL_MODE = CARD_MODES.DISPLAY;\n\nvar Card = (function (_Section) {\n _inherits(Card, _Section);\n\n function Card(name, payload) {\n _classCallCheck(this, Card);\n\n _get(Object.getPrototypeOf(Card.prototype), 'constructor', this).call(this, _types.CARD_TYPE);\n this.name = name;\n this.payload = payload;\n this.setInitialMode(DEFAULT_INITIAL_MODE);\n this.isCardSection = true;\n }\n\n _createClass(Card, [{\n key: 'canJoin',\n value: function canJoin() {\n return false;\n }\n }, {\n key: 'clone',\n value: function clone() {\n var payload = (0, _utilsCopy.shallowCopyObject)(this.payload);\n var card = this.builder.createCardSection(this.name, payload);\n // If this card is currently rendered, clone the mode it is\n // currently in as the default mode of the new card.\n var mode = this._initialMode;\n if (this.renderNode && this.renderNode.cardNode) {\n mode = this.renderNode.cardNode.mode;\n }\n card.setInitialMode(mode);\n return card;\n }\n\n /**\n * set the mode that this will be rendered into initially\n * @private\n */\n }, {\n key: 'setInitialMode',\n value: function setInitialMode(initialMode) {\n // TODO validate initialMode\n this._initialMode = initialMode;\n }\n }, {\n key: 'isBlank',\n get: function get() {\n return false;\n }\n }, {\n key: 'length',\n get: function get() {\n return CARD_LENGTH;\n }\n }]);\n\n return Card;\n})(_section['default']);\n\nexports['default'] = Card;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _types = require('./types');\n\nvar _section = require('./_section');\n\nvar Image = (function (_Section) {\n _inherits(Image, _Section);\n\n function Image() {\n _classCallCheck(this, Image);\n\n _get(Object.getPrototypeOf(Image.prototype), 'constructor', this).call(this, _types.IMAGE_SECTION_TYPE);\n this.src = null;\n }\n\n _createClass(Image, [{\n key: 'canJoin',\n value: function canJoin() {\n return false;\n }\n }, {\n key: 'isBlank',\n get: function get() {\n return false;\n }\n }, {\n key: 'length',\n get: function get() {\n return 1;\n }\n }]);\n\n return Image;\n})(_section['default']);\n\nexports['default'] = Image;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _utilsAssert = require('../utils/assert');\n\nvar LifecycleCallbacks = (function () {\n function LifecycleCallbacks() {\n var _this = this;\n\n var queueNames = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n _classCallCheck(this, LifecycleCallbacks);\n\n this.callbackQueues = {};\n this.removalQueues = {};\n\n queueNames.forEach(function (name) {\n _this.callbackQueues[name] = [];\n _this.removalQueues[name] = [];\n });\n }\n\n _createClass(LifecycleCallbacks, [{\n key: 'runCallbacks',\n value: function runCallbacks(queueName) {\n var args = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];\n\n var queue = this._getQueue(queueName);\n queue.forEach(function (cb) {\n return cb.apply(undefined, _toConsumableArray(args));\n });\n\n var toRemove = this.removalQueues[queueName];\n toRemove.forEach(function (cb) {\n var index = queue.indexOf(cb);\n if (index !== -1) {\n queue.splice(index, 1);\n }\n });\n\n this.removalQueues[queueName] = [];\n }\n }, {\n key: 'addCallback',\n value: function addCallback(queueName, callback) {\n this._getQueue(queueName).push(callback);\n }\n }, {\n key: '_scheduleCallbackForRemoval',\n value: function _scheduleCallbackForRemoval(queueName, callback) {\n this.removalQueues[queueName].push(callback);\n }\n }, {\n key: 'addCallbackOnce',\n value: function addCallbackOnce(queueName, callback) {\n var queue = this._getQueue(queueName);\n if (queue.indexOf(callback) === -1) {\n queue.push(callback);\n this._scheduleCallbackForRemoval(queueName, callback);\n }\n }\n }, {\n key: '_getQueue',\n value: function _getQueue(queueName) {\n var queue = this.callbackQueues[queueName];\n (0, _utilsAssert['default'])('No queue found for \"' + queueName + '\"', !!queue);\n return queue;\n }\n }]);\n\n return LifecycleCallbacks;\n})();\n\nexports['default'] = LifecycleCallbacks;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x3, _x4, _x5) { var _again = true; _function: while (_again) { var object = _x3, property = _x4, receiver = _x5; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x3 = parent; _x4 = property; _x5 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _markerable = require('./_markerable');\n\nvar _types = require('./types');\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nvar _utilsArrayUtils = require('../utils/array-utils');\n\nvar VALID_LIST_ITEM_TAGNAMES = ['li'].map(_utilsDomUtils.normalizeTagName);\n\nexports.VALID_LIST_ITEM_TAGNAMES = VALID_LIST_ITEM_TAGNAMES;\n\nvar ListItem = (function (_Markerable) {\n _inherits(ListItem, _Markerable);\n\n function ListItem(tagName) {\n var markers = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];\n\n _classCallCheck(this, ListItem);\n\n _get(Object.getPrototypeOf(ListItem.prototype), 'constructor', this).call(this, _types.LIST_ITEM_TYPE, tagName, markers);\n this.isListItem = true;\n this.isNested = true;\n }\n\n _createClass(ListItem, [{\n key: 'isValidTagName',\n value: function isValidTagName(normalizedTagName) {\n return (0, _utilsArrayUtils.contains)(VALID_LIST_ITEM_TAGNAMES, normalizedTagName);\n }\n }, {\n key: 'splitAtMarker',\n value: function splitAtMarker(marker) {\n var offset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n // FIXME need to check if we are going to split into two list items\n // or a list item and a new markup section:\n var isLastItem = !this.next;\n var createNewSection = !marker && offset === 0 && isLastItem;\n\n var beforeSection = this.builder.createListItem();\n var afterSection = createNewSection ? this.builder.createMarkupSection() : this.builder.createListItem();\n\n return this._redistributeMarkers(beforeSection, afterSection, marker, offset);\n }\n }, {\n key: 'post',\n get: function get() {\n return this.section.post;\n }\n }]);\n\n return ListItem;\n})(_markerable['default']);\n\nexports['default'] = ListItem;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x3, _x4, _x5) { var _again = true; _function: while (_again) { var object = _x3, property = _x4, receiver = _x5; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x3 = parent; _x4 = property; _x5 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _utilsLinkedList = require('../utils/linked-list');\n\nvar _utilsArrayUtils = require('../utils/array-utils');\n\nvar _types = require('./types');\n\nvar _section = require('./_section');\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nvar _utilsAssert = require('../utils/assert');\n\nvar VALID_LIST_SECTION_TAGNAMES = ['ul', 'ol'].map(_utilsDomUtils.normalizeTagName);\n\nexports.VALID_LIST_SECTION_TAGNAMES = VALID_LIST_SECTION_TAGNAMES;\nvar DEFAULT_TAG_NAME = VALID_LIST_SECTION_TAGNAMES[0];\n\nexports.DEFAULT_TAG_NAME = DEFAULT_TAG_NAME;\n\nvar ListSection = (function (_Section) {\n _inherits(ListSection, _Section);\n\n function ListSection() {\n var _this = this;\n\n var tagName = arguments.length <= 0 || arguments[0] === undefined ? DEFAULT_TAG_NAME : arguments[0];\n var items = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];\n\n _classCallCheck(this, ListSection);\n\n _get(Object.getPrototypeOf(ListSection.prototype), 'constructor', this).call(this, _types.LIST_SECTION_TYPE);\n this.tagName = tagName;\n this.isListSection = true;\n this.isLeafSection = false;\n\n this.items = new _utilsLinkedList['default']({\n adoptItem: function adoptItem(i) {\n (0, _utilsAssert['default'])('Cannot insert non-list-item to list (is: ' + i.type + ')', i.isListItem);\n i.section = i.parent = _this;\n },\n freeItem: function freeItem(i) {\n return i.section = i.parent = null;\n }\n });\n this.sections = this.items;\n\n items.forEach(function (i) {\n return _this.items.append(i);\n });\n }\n\n _createClass(ListSection, [{\n key: 'canJoin',\n value: function canJoin() {\n return false;\n }\n }, {\n key: 'isValidTagName',\n value: function isValidTagName(normalizedTagName) {\n return (0, _utilsArrayUtils.contains)(VALID_LIST_SECTION_TAGNAMES, normalizedTagName);\n }\n }, {\n key: 'headPosition',\n value: function headPosition() {\n return this.items.head.headPosition();\n }\n }, {\n key: 'tailPosition',\n value: function tailPosition() {\n return this.items.tail.tailPosition();\n }\n }, {\n key: 'clone',\n value: function clone() {\n var newSection = this.builder.createListSection(this.tagName);\n (0, _utilsArrayUtils.forEach)(this.items, function (i) {\n return newSection.items.append(i.clone());\n });\n return newSection;\n }\n\n /**\n * Mutates this list\n * @param {ListSection|Markerable}\n * @return null\n */\n }, {\n key: 'join',\n value: function join(other) {\n var _this2 = this;\n\n if (other.isListSection) {\n other.items.forEach(function (i) {\n return _this2.join(i);\n });\n } else if (other.isMarkerable) {\n var item = this.builder.createListItem();\n item.join(other);\n this.items.append(item);\n }\n }\n }, {\n key: 'isBlank',\n get: function get() {\n return this.items.isEmpty;\n }\n }]);\n\n return ListSection;\n})(_section['default']);\n\nexports['default'] = ListSection;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x5, _x6, _x7) { var _again = true; _function: while (_again) { var object = _x5, property = _x6, receiver = _x7; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x5 = parent; _x6 = property; _x7 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _types = require('./types');\n\nvar _utilsMixin = require('../utils/mixin');\n\nvar _utilsMarkuperable = require('../utils/markuperable');\n\nvar _utilsLinkedItem = require('../utils/linked-item');\n\nvar _utilsAssert = require('../utils/assert');\n\nvar _utilsArrayUtils = require('../utils/array-utils');\n\n// Unicode uses a pair of \"surrogate\" characters\" (a high- and low-surrogate)\n// to encode characters outside the basic multilingual plane (like emoji and\n// some languages).\n// These values are the unicode code points for the start and end of the\n// high- and low-surrogate characters.\n// See \"high surrogate\" and \"low surrogate\" on\n// https://en.wikipedia.org/wiki/Unicode_block\nvar HIGH_SURROGATE_RANGE = [0xD800, 0xDBFF];\nexports.HIGH_SURROGATE_RANGE = HIGH_SURROGATE_RANGE;\nvar LOW_SURROGATE_RANGE = [0xDC00, 0xDFFF];\n\nexports.LOW_SURROGATE_RANGE = LOW_SURROGATE_RANGE;\nvar Marker = (function (_LinkedItem) {\n _inherits(Marker, _LinkedItem);\n\n function Marker() {\n var _this = this;\n\n var value = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];\n var markups = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];\n\n _classCallCheck(this, Marker);\n\n _get(Object.getPrototypeOf(Marker.prototype), 'constructor', this).call(this);\n this.value = value;\n (0, _utilsAssert['default'])('Marker must have value', value !== undefined && value !== null);\n this.markups = [];\n this.type = _types.MARKER_TYPE;\n this.isMarker = true;\n this.isAtom = false;\n markups.forEach(function (m) {\n return _this.addMarkup(m);\n });\n }\n\n _createClass(Marker, [{\n key: 'clone',\n value: function clone() {\n var clonedMarkups = this.markups.slice();\n return this.builder.createMarker(this.value, clonedMarkups);\n }\n }, {\n key: 'charAt',\n value: function charAt(offset) {\n return this.value.slice(offset, offset + 1);\n }\n\n /**\n * A marker's text is equal to its value.\n * Compare with an Atom which distinguishes between text and value\n */\n }, {\n key: 'deleteValueAtOffset',\n\n // delete the character at this offset,\n // update the value with the new value\n value: function deleteValueAtOffset(offset) {\n (0, _utilsAssert['default'])('Cannot delete value at offset outside bounds', offset >= 0 && offset <= this.length);\n\n var width = 1;\n var code = this.value.charCodeAt(offset);\n if (code >= HIGH_SURROGATE_RANGE[0] && code <= HIGH_SURROGATE_RANGE[1]) {\n width = 2;\n } else if (code >= LOW_SURROGATE_RANGE[0] && code <= LOW_SURROGATE_RANGE[1]) {\n width = 2;\n offset = offset - 1;\n }\n\n var left = this.value.slice(0, offset);\n var right = this.value.slice(offset + width);\n\n this.value = left + right;\n\n return width;\n }\n }, {\n key: 'canJoin',\n value: function canJoin(other) {\n return other && other.isMarker && (0, _utilsArrayUtils.isArrayEqual)(this.markups, other.markups);\n }\n }, {\n key: 'textUntil',\n value: function textUntil(offset) {\n return this.value.slice(0, offset);\n }\n }, {\n key: 'split',\n value: function split() {\n var offset = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0];\n var endOffset = arguments.length <= 1 || arguments[1] === undefined ? this.length : arguments[1];\n\n var markers = [this.builder.createMarker(this.value.substring(0, offset)), this.builder.createMarker(this.value.substring(offset, endOffset)), this.builder.createMarker(this.value.substring(endOffset))];\n\n this.markups.forEach(function (mu) {\n return markers.forEach(function (m) {\n return m.addMarkup(mu);\n });\n });\n return markers;\n }\n\n /**\n * @return {Array} 2 markers either or both of which could be blank\n */\n }, {\n key: 'splitAtOffset',\n value: function splitAtOffset(offset) {\n (0, _utilsAssert['default'])('Cannot split a marker at an offset > its length', offset <= this.length);\n var value = this.value;\n var builder = this.builder;\n\n var pre = builder.createMarker(value.substring(0, offset));\n var post = builder.createMarker(value.substring(offset));\n\n this.markups.forEach(function (markup) {\n pre.addMarkup(markup);\n post.addMarkup(markup);\n });\n\n return [pre, post];\n }\n }, {\n key: 'isEmpty',\n get: function get() {\n return this.isBlank;\n }\n }, {\n key: 'isBlank',\n get: function get() {\n return this.length === 0;\n }\n }, {\n key: 'text',\n get: function get() {\n return this.value;\n }\n }, {\n key: 'length',\n get: function get() {\n return this.value.length;\n }\n }]);\n\n return Marker;\n})(_utilsLinkedItem['default']);\n\n(0, _utilsMixin['default'])(Marker, _utilsMarkuperable['default']);\n\nexports['default'] = Marker;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x4, _x5, _x6) { var _again = true; _function: while (_again) { var object = _x4, property = _x5, receiver = _x6; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x4 = parent; _x5 = property; _x6 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _markerable = require('./_markerable');\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nvar _utilsArrayUtils = require('../utils/array-utils');\n\nvar _types = require('./types');\n\n// valid values of `tagName` for a MarkupSection\nvar VALID_MARKUP_SECTION_TAGNAMES = ['p', 'h3', 'h2', 'h1', 'blockquote', 'pull-quote'].map(_utilsDomUtils.normalizeTagName);\n\nexports.VALID_MARKUP_SECTION_TAGNAMES = VALID_MARKUP_SECTION_TAGNAMES;\n// valid element names for a MarkupSection. A MarkupSection with a tagName\n// not in this will be rendered as a div with a className matching the\n// tagName\nvar MARKUP_SECTION_ELEMENT_NAMES = ['p', 'h3', 'h2', 'h1', 'blockquote'].map(_utilsDomUtils.normalizeTagName);\nexports.MARKUP_SECTION_ELEMENT_NAMES = MARKUP_SECTION_ELEMENT_NAMES;\nvar DEFAULT_TAG_NAME = VALID_MARKUP_SECTION_TAGNAMES[0];\n\nexports.DEFAULT_TAG_NAME = DEFAULT_TAG_NAME;\nvar MarkupSection = (function (_Markerable) {\n _inherits(MarkupSection, _Markerable);\n\n function MarkupSection() {\n var tagName = arguments.length <= 0 || arguments[0] === undefined ? DEFAULT_TAG_NAME : arguments[0];\n var markers = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];\n\n _classCallCheck(this, MarkupSection);\n\n _get(Object.getPrototypeOf(MarkupSection.prototype), 'constructor', this).call(this, _types.MARKUP_SECTION_TYPE, tagName, markers);\n this.isMarkupSection = true;\n }\n\n _createClass(MarkupSection, [{\n key: 'isValidTagName',\n value: function isValidTagName(normalizedTagName) {\n return (0, _utilsArrayUtils.contains)(VALID_MARKUP_SECTION_TAGNAMES, normalizedTagName);\n }\n }, {\n key: 'splitAtMarker',\n value: function splitAtMarker(marker) {\n var offset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n var beforeSection = this.builder.createMarkupSection(this.tagName, []);\n var afterSection = this.builder.createMarkupSection();\n\n return this._redistributeMarkers(beforeSection, afterSection, marker, offset);\n }\n }]);\n\n return MarkupSection;\n})(_markerable['default']);\n\nexports['default'] = MarkupSection;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nvar _utilsArrayUtils = require('../utils/array-utils');\n\nvar _types = require('./types');\n\nvar _utilsAssert = require('../utils/assert');\n\nvar VALID_MARKUP_TAGNAMES = ['b', 'i', 'strong', 'em', 'a', 'u', 'sub', // subscript\n'sup', // superscript\n's' // strikethrough\n].map(_utilsDomUtils.normalizeTagName);\n\nexports.VALID_MARKUP_TAGNAMES = VALID_MARKUP_TAGNAMES;\nvar VALID_ATTRIBUTES = ['href', 'ref'];\n\nexports.VALID_ATTRIBUTES = VALID_ATTRIBUTES;\n\nvar Markup = (function () {\n /*\n * @param {Object} attributes key-values\n */\n\n function Markup(tagName) {\n var attributes = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n _classCallCheck(this, Markup);\n\n this.tagName = (0, _utilsDomUtils.normalizeTagName)(tagName);\n\n (0, _utilsAssert['default'])('Must use attributes object param (not array) for Markup', !Array.isArray(attributes));\n\n this.attributes = (0, _utilsArrayUtils.filterObject)(attributes, VALID_ATTRIBUTES);\n this.type = _types.MARKUP_TYPE;\n\n (0, _utilsAssert['default'])('Cannot create markup of tagName ' + tagName, VALID_MARKUP_TAGNAMES.indexOf(this.tagName) !== -1);\n }\n\n _createClass(Markup, [{\n key: 'isForwardInclusive',\n value: function isForwardInclusive() {\n return this.tagName === (0, _utilsDomUtils.normalizeTagName)(\"a\") ? false : true;\n }\n }, {\n key: 'isBackwardInclusive',\n value: function isBackwardInclusive() {\n return false;\n }\n }, {\n key: 'hasTag',\n value: function hasTag(tagName) {\n return this.tagName === (0, _utilsDomUtils.normalizeTagName)(tagName);\n }\n }, {\n key: 'getAttribute',\n value: function getAttribute(name) {\n return this.attributes[name];\n }\n }], [{\n key: 'isValidElement',\n value: function isValidElement(element) {\n var tagName = (0, _utilsDomUtils.normalizeTagName)(element.tagName);\n return VALID_MARKUP_TAGNAMES.indexOf(tagName) !== -1;\n }\n }]);\n\n return Markup;\n})();\n\nexports['default'] = Markup;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _modelsAtom = require('../models/atom');\n\nvar _modelsPost = require('../models/post');\n\nvar _modelsMarkupSection = require('../models/markup-section');\n\nvar _modelsListSection = require('../models/list-section');\n\nvar _modelsListItem = require('../models/list-item');\n\nvar _modelsImage = require('../models/image');\n\nvar _modelsMarker = require('../models/marker');\n\nvar _modelsMarkup = require('../models/markup');\n\nvar _modelsCard = require('../models/card');\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nvar _utilsArrayUtils = require('../utils/array-utils');\n\nvar _modelsTypes = require('../models/types');\n\nvar _utilsAssert = require('../utils/assert');\n\nfunction cacheKey(tagName, attributes) {\n return (0, _utilsDomUtils.normalizeTagName)(tagName) + '-' + (0, _utilsArrayUtils.objectToSortedKVArray)(attributes).join('-');\n}\n\nfunction addMarkupToCache(cache, markup) {\n cache[cacheKey(markup.tagName, markup.attributes)] = markup;\n}\n\nfunction findMarkupInCache(cache, tagName, attributes) {\n var key = cacheKey(tagName, attributes);\n return cache[key];\n}\n\n/**\n * The PostNodeBuilder is used to create new {@link Post} primitives, such\n * as a MarkupSection, a CardSection, a Markup, etc. Every instance of an\n * {@link Editor} has its own builder instance. The builder can be used\n * inside an {@link Editor#run} callback to programmatically create new\n * Post primitives to insert into the document.\n * A PostNodeBuilder should be read from the Editor, *not* instantiated on its own.\n */\n\nvar PostNodeBuilder = (function () {\n /**\n * @private\n */\n\n function PostNodeBuilder() {\n _classCallCheck(this, PostNodeBuilder);\n\n this.markupCache = {};\n }\n\n /**\n * @return {Post} A new, blank post\n */\n\n _createClass(PostNodeBuilder, [{\n key: 'createPost',\n value: function createPost() {\n var sections = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n var post = new _modelsPost['default']();\n post.builder = this;\n\n sections.forEach(function (s) {\n return post.sections.append(s);\n });\n\n return post;\n }\n }, {\n key: 'createMarkerableSection',\n value: function createMarkerableSection(type, tagName) {\n var markers = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2];\n\n switch (type) {\n case _modelsTypes.LIST_ITEM_TYPE:\n return this.createListItem(markers);\n case _modelsTypes.MARKUP_SECTION_TYPE:\n return this.createMarkupSection(tagName, markers);\n default:\n (0, _utilsAssert['default'])('Cannot create markerable section of type ' + type, false);\n }\n }\n\n /**\n * @param {tagName} [tagName='P']\n * @param {Marker[]} [markers=[]]\n * @return {MarkupSection}\n */\n }, {\n key: 'createMarkupSection',\n value: function createMarkupSection() {\n var tagName = arguments.length <= 0 || arguments[0] === undefined ? _modelsMarkupSection.DEFAULT_TAG_NAME : arguments[0];\n var markers = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];\n var isGenerated = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n tagName = (0, _utilsDomUtils.normalizeTagName)(tagName);\n var section = new _modelsMarkupSection['default'](tagName, markers);\n if (isGenerated) {\n section.isGenerated = true;\n }\n section.builder = this;\n return section;\n }\n }, {\n key: 'createListSection',\n value: function createListSection() {\n var tagName = arguments.length <= 0 || arguments[0] === undefined ? _modelsListSection.DEFAULT_TAG_NAME : arguments[0];\n var items = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];\n\n tagName = (0, _utilsDomUtils.normalizeTagName)(tagName);\n var section = new _modelsListSection['default'](tagName, items);\n section.builder = this;\n return section;\n }\n }, {\n key: 'createListItem',\n value: function createListItem() {\n var markers = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n var tagName = (0, _utilsDomUtils.normalizeTagName)('li');\n var item = new _modelsListItem['default'](tagName, markers);\n item.builder = this;\n return item;\n }\n }, {\n key: 'createImageSection',\n value: function createImageSection(url) {\n var section = new _modelsImage['default']();\n if (url) {\n section.src = url;\n }\n return section;\n }\n\n /**\n * @param {String} name\n * @param {Object} [payload={}]\n * @return {CardSection}\n */\n }, {\n key: 'createCardSection',\n value: function createCardSection(name) {\n var payload = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var card = new _modelsCard['default'](name, payload);\n card.builder = this;\n return card;\n }\n\n /**\n * @param {String} value\n * @param {Markup[]} [markups=[]]\n * @return {Marker}\n */\n }, {\n key: 'createMarker',\n value: function createMarker(value) {\n var markups = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];\n\n var marker = new _modelsMarker['default'](value, markups);\n marker.builder = this;\n return marker;\n }\n\n /**\n * @param {String} name\n * @param {String} [value='']\n * @param {Object} [payload={}]\n * @param {Markup[]} [markups=[]]\n * @return {Atom}\n */\n }, {\n key: 'createAtom',\n value: function createAtom(name) {\n var value = arguments.length <= 1 || arguments[1] === undefined ? '' : arguments[1];\n var payload = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n var markups = arguments.length <= 3 || arguments[3] === undefined ? [] : arguments[3];\n\n var atom = new _modelsAtom['default'](name, value, payload, markups);\n atom.builder = this;\n return atom;\n }\n\n /**\n * @param {String} tagName\n * @param {Object} attributes Key-value pairs of attributes for the markup\n * @return {Markup}\n */\n }, {\n key: 'createMarkup',\n value: function createMarkup(tagName) {\n var attributes = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n tagName = (0, _utilsDomUtils.normalizeTagName)(tagName);\n\n var markup = findMarkupInCache(this.markupCache, tagName, attributes);\n if (!markup) {\n markup = new _modelsMarkup['default'](tagName, attributes);\n markup.builder = this;\n addMarkupToCache(this.markupCache, markup);\n }\n\n return markup;\n }\n }]);\n\n return PostNodeBuilder;\n})();\n\nexports['default'] = PostNodeBuilder;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _types = require('./types');\n\nvar _utilsLinkedList = require('../utils/linked-list');\n\nvar _utilsArrayUtils = require('../utils/array-utils');\n\nvar _utilsSet = require('../utils/set');\n\nvar _utilsCursorPosition = require('../utils/cursor/position');\n\n/**\n * The Post is an in-memory representation of an editor's document.\n * An editor always has a single post. The post is organized into a list of\n * sections. Each section may be markerable (contains \"markers\", aka editable\n * text) or non-markerable (e.g., a card).\n * When persisting a post, it must first be serialized (loss-lessly) into\n * mobiledoc using {@link Editor#serialize}.\n */\n\nvar Post = (function () {\n /**\n * @private\n */\n\n function Post() {\n var _this = this;\n\n _classCallCheck(this, Post);\n\n this.type = _types.POST_TYPE;\n this.sections = new _utilsLinkedList['default']({\n adoptItem: function adoptItem(s) {\n return s.post = s.parent = _this;\n },\n freeItem: function freeItem(s) {\n return s.post = s.parent = null;\n }\n });\n }\n\n /**\n * @return {Position} The position at the start of the post (will be a {@link BlankPosition}\n * if the post is blank)\n * @public\n */\n\n _createClass(Post, [{\n key: 'headPosition',\n value: function headPosition() {\n if (this.isBlank) {\n return _utilsCursorPosition['default'].blankPosition();\n } else {\n return this.sections.head.headPosition();\n }\n }\n\n /**\n * @return {Position} The position at the end of the post (will be a {@link BlankPosition}\n * if the post is blank)\n * @public\n */\n }, {\n key: 'tailPosition',\n value: function tailPosition() {\n if (this.isBlank) {\n return _utilsCursorPosition['default'].blankPosition();\n } else {\n return this.sections.tail.tailPosition();\n }\n }\n\n /**\n * @return {Range} A range encompassing the entire post\n * @public\n */\n }, {\n key: 'toRange',\n value: function toRange() {\n return this.headPosition().toRange(this.tailPosition());\n }\n }, {\n key: 'markersContainedByRange',\n\n /**\n * @param {Range} range\n * @return {Array} markers that are completely contained by the range\n */\n value: function markersContainedByRange(range) {\n var markers = [];\n\n this.walkMarkerableSections(range, function (section) {\n section._markersInRange(range.trimTo(section), function (m, _ref) {\n var isContained = _ref.isContained;\n if (isContained) {\n markers.push(m);\n }\n });\n });\n\n return markers;\n }\n }, {\n key: 'cutMarkers',\n value: function cutMarkers(markers) {\n var firstSection = markers.length && markers[0].section,\n lastSection = markers.length && markers[markers.length - 1].section;\n\n var currentSection = firstSection;\n var removedSections = [],\n changedSections = (0, _utilsArrayUtils.compact)([firstSection, lastSection]);\n\n if (markers.length !== 0) {\n markers.forEach(function (marker) {\n if (marker.section !== currentSection) {\n // this marker is in a section we haven't seen yet\n if (marker.section !== firstSection && marker.section !== lastSection) {\n // section is wholly contained by markers, and can be removed\n removedSections.push(marker.section);\n }\n }\n\n currentSection = marker.section;\n currentSection.markers.remove(marker);\n });\n\n if (firstSection !== lastSection) {\n firstSection.join(lastSection);\n removedSections.push(lastSection);\n }\n }\n\n return { changedSections: changedSections, removedSections: removedSections };\n }\n\n /**\n * Invoke `callbackFn` for all markers between the headMarker and tailMarker (inclusive),\n * across sections\n * @private\n */\n }, {\n key: 'markersFrom',\n value: function markersFrom(headMarker, tailMarker, callbackFn) {\n var currentMarker = headMarker;\n while (currentMarker) {\n callbackFn(currentMarker);\n\n if (currentMarker === tailMarker) {\n currentMarker = null;\n } else if (currentMarker.next) {\n currentMarker = currentMarker.next;\n } else {\n var nextSection = this._nextMarkerableSection(currentMarker.section);\n // FIXME: This will fail across cards\n currentMarker = nextSection && nextSection.markers.head;\n }\n }\n }\n }, {\n key: 'markupsInRange',\n value: function markupsInRange(range) {\n var markups = new _utilsSet['default']();\n\n if (range.isCollapsed) {\n var pos = range.head;\n if (pos.isMarkerable) {\n var back = pos.markerIn(-1);\n var forward = pos.markerIn(1);\n\n if (back && forward && back === forward) {\n back.markups.forEach(function (m) {\n return markups.add(m);\n });\n } else {\n (back && back.markups || []).forEach(function (m) {\n if (m.isForwardInclusive()) {\n markups.add(m);\n }\n });\n (forward && forward.markups || []).forEach(function (m) {\n if (m.isBackwardInclusive()) {\n markups.add(m);\n }\n });\n }\n }\n } else {\n this.walkMarkerableSections(range, function (section) {\n (0, _utilsArrayUtils.forEach)(section.markupsInRange(range.trimTo(section)), function (m) {\n return markups.add(m);\n });\n });\n }\n\n return markups.toArray();\n }\n }, {\n key: 'walkAllLeafSections',\n value: function walkAllLeafSections(callback) {\n var range = this.headPosition().toRange(this.tailPosition());\n return this.walkLeafSections(range, callback);\n }\n }, {\n key: 'walkLeafSections',\n value: function walkLeafSections(range, callback) {\n var head = range.head;\n var tail = range.tail;\n\n var index = 0;\n var nextSection = undefined,\n shouldStop = undefined;\n var currentSection = head.section;\n\n while (currentSection) {\n nextSection = this._nextLeafSection(currentSection);\n shouldStop = currentSection === tail.section;\n\n callback(currentSection, index);\n index++;\n\n if (shouldStop) {\n break;\n } else {\n currentSection = nextSection;\n }\n }\n }\n }, {\n key: 'walkMarkerableSections',\n value: function walkMarkerableSections(range, callback) {\n this.walkLeafSections(range, function (section) {\n if (section.isMarkerable) {\n callback(section);\n }\n });\n }\n }, {\n key: '_nextMarkerableSection',\n value: function _nextMarkerableSection(section) {\n var nextSection = this._nextLeafSection(section);\n\n while (nextSection && !nextSection.isMarkerable) {\n nextSection = this._nextLeafSection(nextSection);\n }\n\n return nextSection;\n }\n\n // return the next section that has markers after this one,\n // possibly skipping non-markerable sections\n }, {\n key: '_nextLeafSection',\n value: function _nextLeafSection(section) {\n if (!section) {\n return null;\n }\n var hasChildren = function hasChildren(s) {\n return !!s.items;\n };\n var firstChild = function firstChild(s) {\n return s.items.head;\n };\n\n // FIXME this can be refactored to use `isLeafSection`\n var next = section.next;\n if (next) {\n if (hasChildren(next)) {\n // e.g. a ListSection\n return firstChild(next);\n } else {\n return next;\n }\n } else if (section.isNested) {\n // if there is no section after this, but this section is a child\n // (e.g. a ListItem inside a ListSection), check for a markerable\n // section after its parent\n return this._nextLeafSection(section.parent);\n }\n }\n\n /**\n * @param {Range} range\n * @return {Post} A new post, constrained to {range}\n */\n }, {\n key: 'trimTo',\n value: function trimTo(range) {\n var post = this.builder.createPost();\n var builder = this.builder;\n\n var sectionParent = post,\n listParent = null;\n this.walkLeafSections(range, function (section) {\n var newSection = undefined;\n if (section.isMarkerable) {\n if (section.isListItem) {\n if (listParent) {\n sectionParent = null;\n } else {\n listParent = builder.createListSection(section.parent.tagName);\n post.sections.append(listParent);\n sectionParent = null;\n }\n newSection = builder.createListItem();\n listParent.items.append(newSection);\n } else {\n listParent = null;\n sectionParent = post;\n newSection = builder.createMarkupSection(section.tagName);\n }\n\n var currentRange = range.trimTo(section);\n (0, _utilsArrayUtils.forEach)(section.markersFor(currentRange.headSectionOffset, currentRange.tailSectionOffset), function (m) {\n return newSection.markers.append(m);\n });\n } else {\n newSection = section.clone();\n }\n if (sectionParent) {\n sectionParent.sections.append(newSection);\n }\n });\n return post;\n }\n }, {\n key: 'isBlank',\n get: function get() {\n return this.sections.isEmpty;\n }\n\n /**\n * If the post has no sections, or only has one, blank section, then it does\n * not have content and this method returns false. Otherwise it is true.\n * @return {Boolean}\n * @public\n */\n }, {\n key: 'hasContent',\n get: function get() {\n if (this.sections.length > 1 || this.sections.length === 1 && !this.sections.head.isBlank) {\n return true;\n } else {\n return false;\n }\n }\n }]);\n\n return Post;\n})();\n\nexports['default'] = Post;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _utilsLinkedItem = require('../utils/linked-item');\n\nvar _utilsLinkedList = require('../utils/linked-list');\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nvar _utilsAssert = require('../utils/assert');\n\nvar RenderNode = (function (_LinkedItem) {\n _inherits(RenderNode, _LinkedItem);\n\n function RenderNode(postNode, renderTree) {\n _classCallCheck(this, RenderNode);\n\n _get(Object.getPrototypeOf(RenderNode.prototype), 'constructor', this).call(this);\n this.parent = null;\n this.isDirty = true;\n this.isRemoved = false;\n this.postNode = postNode;\n this._childNodes = null;\n this._element = null;\n this._cursorElement = null; // blank render nodes need a cursor element\n this.renderTree = renderTree;\n\n // RenderNodes for Markers keep track of their markupElement\n this.markupElement = null;\n\n // RenderNodes for Atoms use these properties\n this.headTextNode = null;\n this.tailTextNode = null;\n this.atomNode = null;\n\n // RenderNodes for cards use this property\n this.cardNode = null;\n }\n\n _createClass(RenderNode, [{\n key: 'isAttached',\n value: function isAttached() {\n (0, _utilsAssert['default'])('Cannot check if a renderNode is attached without an element.', !!this.element);\n return (0, _utilsDomUtils.containsNode)(this.renderTree.rootElement, this.element);\n }\n }, {\n key: 'scheduleForRemoval',\n value: function scheduleForRemoval() {\n this.isRemoved = true;\n if (this.parent) {\n this.parent.markDirty();\n }\n }\n }, {\n key: 'markDirty',\n value: function markDirty() {\n this.isDirty = true;\n if (this.parent) {\n this.parent.markDirty();\n }\n }\n }, {\n key: 'markClean',\n value: function markClean() {\n this.isDirty = false;\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.element = null;\n this.parent = null;\n this.postNode = null;\n this.renderTree = null;\n }\n }, {\n key: 'reparsesMutationOfChildNode',\n value: function reparsesMutationOfChildNode(node) {\n if (this.postNode.isCardSection) {\n return !(0, _utilsDomUtils.containsNode)(this.cardNode.element, node);\n } else if (this.postNode.isAtom) {\n return !(0, _utilsDomUtils.containsNode)(this.atomNode.element, node);\n }\n return true;\n }\n }, {\n key: 'childNodes',\n get: function get() {\n var _this = this;\n\n if (!this._childNodes) {\n this._childNodes = new _utilsLinkedList['default']({\n adoptItem: function adoptItem(item) {\n return item.parent = _this;\n },\n freeItem: function freeItem(item) {\n return item.destroy();\n }\n });\n }\n return this._childNodes;\n }\n }, {\n key: 'isRendered',\n get: function get() {\n return !!this.element;\n }\n }, {\n key: 'element',\n set: function set(element) {\n var currentElement = this._element;\n this._element = element;\n\n if (currentElement) {\n this.renderTree.removeElementRenderNode(currentElement);\n }\n\n if (element) {\n this.renderTree.setElementRenderNode(element, this);\n }\n },\n get: function get() {\n return this._element;\n }\n }, {\n key: 'cursorElement',\n set: function set(cursorElement) {\n this._cursorElement = cursorElement;\n },\n get: function get() {\n return this._cursorElement || this.element;\n }\n }]);\n\n return RenderNode;\n})(_utilsLinkedItem['default']);\n\nexports['default'] = RenderNode;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _modelsRenderNode = require('../models/render-node');\n\nvar _utilsElementMap = require('../utils/element-map');\n\nvar RenderTree = (function () {\n function RenderTree(rootPostNode) {\n _classCallCheck(this, RenderTree);\n\n this._rootNode = this.buildRenderNode(rootPostNode);\n this._elements = new _utilsElementMap['default']();\n }\n\n /*\n * @return {RenderNode} The root render node in this tree\n */\n\n _createClass(RenderTree, [{\n key: 'getElementRenderNode',\n\n /*\n * @param {DOMNode} element\n * @return {RenderNode} The renderNode for this element, if any\n */\n value: function getElementRenderNode(element) {\n return this._elements.get(element);\n }\n }, {\n key: 'setElementRenderNode',\n value: function setElementRenderNode(element, renderNode) {\n this._elements.set(element, renderNode);\n }\n }, {\n key: 'removeElementRenderNode',\n value: function removeElementRenderNode(element) {\n this._elements.remove(element);\n }\n\n /**\n * @param {DOMNode} element\n * Walk up from the dom element until we find a renderNode element\n */\n }, {\n key: 'findRenderNodeFromElement',\n value: function findRenderNodeFromElement(element) {\n var conditionFn = arguments.length <= 1 || arguments[1] === undefined ? function () {\n return true;\n } : arguments[1];\n\n var renderNode = undefined;\n while (element) {\n renderNode = this.getElementRenderNode(element);\n if (renderNode && conditionFn(renderNode)) {\n return renderNode;\n }\n\n // continue loop\n element = element.parentNode;\n\n // stop if we are at the root element\n if (element === this.rootElement) {\n if (conditionFn(this.rootNode)) {\n return this.rootNode;\n } else {\n return;\n }\n }\n }\n }\n }, {\n key: 'buildRenderNode',\n value: function buildRenderNode(postNode) {\n var renderNode = new _modelsRenderNode['default'](postNode, this);\n postNode.renderNode = renderNode;\n return renderNode;\n }\n }, {\n key: 'rootNode',\n get: function get() {\n return this._rootNode;\n }\n\n /**\n * @return {Boolean}\n */\n }, {\n key: 'isDirty',\n get: function get() {\n return this.rootNode && this.rootNode.isDirty;\n }\n\n /*\n * @return {DOMNode} The root DOM element in this tree\n */\n }, {\n key: 'rootElement',\n get: function get() {\n return this.rootNode.element;\n }\n }]);\n\n return RenderTree;\n})();\n\nexports['default'] = RenderTree;","'use strict';\n\nvar MARKUP_SECTION_TYPE = 'markup-section';\nexports.MARKUP_SECTION_TYPE = MARKUP_SECTION_TYPE;\nvar LIST_SECTION_TYPE = 'list-section';\nexports.LIST_SECTION_TYPE = LIST_SECTION_TYPE;\nvar MARKUP_TYPE = 'markup';\nexports.MARKUP_TYPE = MARKUP_TYPE;\nvar MARKER_TYPE = 'marker';\nexports.MARKER_TYPE = MARKER_TYPE;\nvar POST_TYPE = 'post';\nexports.POST_TYPE = POST_TYPE;\nvar LIST_ITEM_TYPE = 'list-item';\nexports.LIST_ITEM_TYPE = LIST_ITEM_TYPE;\nvar CARD_TYPE = 'card-section';\nexports.CARD_TYPE = CARD_TYPE;\nvar IMAGE_SECTION_TYPE = 'image-section';\nexports.IMAGE_SECTION_TYPE = IMAGE_SECTION_TYPE;\nvar ATOM_TYPE = 'atom';\nexports.ATOM_TYPE = ATOM_TYPE;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nexports.transformHTMLText = transformHTMLText;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _renderersEditorDom = require('../renderers/editor-dom');\n\nvar _modelsTypes = require('../models/types');\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nvar _utilsArrayUtils = require('../utils/array-utils');\n\nvar _utilsCharacters = require('../utils/characters');\n\nvar _parsersSection = require('../parsers/section');\n\nvar _modelsMarkup = require('../models/markup');\n\nvar GOOGLE_DOCS_CONTAINER_ID_REGEX = /^docs\\-internal\\-guid/;\n\nvar NO_BREAK_SPACE_REGEX = new RegExp(_renderersEditorDom.NO_BREAK_SPACE, 'g');\nvar TAB_CHARACTER_REGEX = new RegExp(_renderersEditorDom.TAB_CHARACTER, 'g');\n\nfunction transformHTMLText(textContent) {\n var text = textContent;\n text = text.replace(NO_BREAK_SPACE_REGEX, ' ');\n text = text.replace(TAB_CHARACTER_REGEX, _utilsCharacters.TAB);\n return text;\n}\n\nfunction isGoogleDocsContainer(element) {\n return !(0, _utilsDomUtils.isTextNode)(element) && !(0, _utilsDomUtils.isCommentNode)(element) && (0, _utilsDomUtils.normalizeTagName)(element.tagName) === (0, _utilsDomUtils.normalizeTagName)('b') && GOOGLE_DOCS_CONTAINER_ID_REGEX.test(element.id);\n}\n\nfunction detectRootElement(element) {\n var childNodes = element.childNodes || [];\n var googleDocsContainer = (0, _utilsArrayUtils.detect)(childNodes, isGoogleDocsContainer);\n\n if (googleDocsContainer) {\n return googleDocsContainer;\n } else {\n return element;\n }\n}\n\nvar TAG_REMAPPING = {\n 'b': 'strong',\n 'i': 'em'\n};\n\nfunction remapTagName(tagName) {\n var normalized = (0, _utilsDomUtils.normalizeTagName)(tagName);\n var remapped = TAG_REMAPPING[normalized];\n return remapped || normalized;\n}\n\nfunction trim(str) {\n return str.replace(/^\\s+/, '').replace(/\\s+$/, '');\n}\n\nfunction walkMarkerableNodes(parent, callback) {\n var currentNode = parent;\n\n if ((0, _utilsDomUtils.isTextNode)(currentNode) || (0, _utilsDomUtils.isElementNode)(currentNode) && currentNode.classList.contains(_renderersEditorDom.ATOM_CLASS_NAME)) {\n callback(currentNode);\n } else {\n currentNode = currentNode.firstChild;\n while (currentNode) {\n walkMarkerableNodes(currentNode, callback);\n currentNode = currentNode.nextSibling;\n }\n }\n}\n\n/**\n * Parses DOM element -> Post\n * @private\n */\n\nvar DOMParser = (function () {\n function DOMParser(builder) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n _classCallCheck(this, DOMParser);\n\n this.builder = builder;\n this.sectionParser = new _parsersSection['default'](this.builder, options);\n }\n\n _createClass(DOMParser, [{\n key: 'parse',\n value: function parse(element) {\n var _this = this;\n\n var post = this.builder.createPost();\n var rootElement = detectRootElement(element);\n\n this._eachChildNode(rootElement, function (child) {\n var sections = _this.parseSections(child);\n _this.appendSections(post, sections);\n });\n\n return post;\n }\n }, {\n key: 'appendSections',\n value: function appendSections(post, sections) {\n var _this2 = this;\n\n (0, _utilsArrayUtils.forEach)(sections, function (section) {\n return _this2.appendSection(post, section);\n });\n }\n }, {\n key: 'appendSection',\n value: function appendSection(post, section) {\n if (section.isBlank || section.isMarkerable && trim(section.text) === '') {\n return;\n }\n\n var lastSection = post.sections.tail;\n if (lastSection && lastSection._inferredTagName && section._inferredTagName && lastSection.tagName === section.tagName) {\n lastSection.join(section);\n } else {\n post.sections.append(section);\n }\n }\n }, {\n key: '_eachChildNode',\n value: function _eachChildNode(element, callback) {\n var nodes = (0, _utilsDomUtils.isTextNode)(element) ? [element] : element.childNodes;\n (0, _utilsArrayUtils.forEach)(nodes, function (node) {\n return callback(node);\n });\n }\n }, {\n key: 'parseSections',\n value: function parseSections(element) {\n return this.sectionParser.parse(element);\n }\n\n // walk up from the textNode until the rootNode, converting each\n // parentNode into a markup\n }, {\n key: 'collectMarkups',\n value: function collectMarkups(textNode, rootNode) {\n var markups = [];\n var currentNode = textNode.parentNode;\n while (currentNode && currentNode !== rootNode) {\n var markup = this.markupFromNode(currentNode);\n if (markup) {\n markups.push(markup);\n }\n\n currentNode = currentNode.parentNode;\n }\n return markups;\n }\n\n // Turn an element node into a markup\n }, {\n key: 'markupFromNode',\n value: function markupFromNode(node) {\n if (_modelsMarkup['default'].isValidElement(node)) {\n var tagName = remapTagName(node.tagName);\n var attributes = (0, _utilsDomUtils.getAttributes)(node);\n return this.builder.createMarkup(tagName, attributes);\n }\n }\n\n // FIXME should move to the section parser?\n // FIXME the `collectMarkups` logic could simplify the section parser?\n }, {\n key: 'reparseSection',\n value: function reparseSection(section, renderTree) {\n switch (section.type) {\n case _modelsTypes.LIST_SECTION_TYPE:\n return this.reparseListSection(section, renderTree);\n case _modelsTypes.LIST_ITEM_TYPE:\n return this.reparseListItem(section, renderTree);\n case _modelsTypes.MARKUP_SECTION_TYPE:\n return this.reparseMarkupSection(section, renderTree);\n default:\n return; // can only parse the above types\n }\n }\n }, {\n key: 'reparseMarkupSection',\n value: function reparseMarkupSection(section, renderTree) {\n return this._reparseSectionContainingMarkers(section, renderTree);\n }\n }, {\n key: 'reparseListItem',\n value: function reparseListItem(listItem, renderTree) {\n return this._reparseSectionContainingMarkers(listItem, renderTree);\n }\n }, {\n key: 'reparseListSection',\n value: function reparseListSection(listSection, renderTree) {\n var _this3 = this;\n\n listSection.items.forEach(function (li) {\n return _this3.reparseListItem(li, renderTree);\n });\n }\n }, {\n key: '_reparseSectionContainingMarkers',\n value: function _reparseSectionContainingMarkers(section, renderTree) {\n var _this4 = this;\n\n var element = section.renderNode.element;\n var seenRenderNodes = [];\n var previousMarker = undefined;\n\n walkMarkerableNodes(element, function (node) {\n var marker = undefined;\n var renderNode = renderTree.getElementRenderNode(node);\n if (renderNode) {\n if (renderNode.postNode.isMarker) {\n var text = transformHTMLText(node.textContent);\n var markups = _this4.collectMarkups(node, element);\n if (text.length) {\n marker = renderNode.postNode;\n marker.value = text;\n marker.markups = markups;\n } else {\n renderNode.scheduleForRemoval();\n }\n } else if (renderNode.postNode.isAtom) {\n var _renderNode = renderNode;\n var headTextNode = _renderNode.headTextNode;\n var tailTextNode = _renderNode.tailTextNode;\n\n if (headTextNode.textContent !== _renderersEditorDom.ZWNJ) {\n var value = headTextNode.textContent.replace(new RegExp(_renderersEditorDom.ZWNJ, 'g'), '');\n headTextNode.textContent = _renderersEditorDom.ZWNJ;\n if (previousMarker && previousMarker.isMarker) {\n previousMarker.value += value;\n if (previousMarker.renderNode) {\n previousMarker.renderNode.markDirty();\n }\n } else {\n var postNode = renderNode.postNode;\n var newMarkups = postNode.markups.slice();\n var newPreviousMarker = _this4.builder.createMarker(value, newMarkups);\n section.markers.insertBefore(newPreviousMarker, postNode);\n\n var newPreviousRenderNode = renderTree.buildRenderNode(newPreviousMarker);\n newPreviousRenderNode.markDirty();\n section.renderNode.markDirty();\n\n seenRenderNodes.push(newPreviousRenderNode);\n section.renderNode.childNodes.insertBefore(newPreviousRenderNode, renderNode);\n }\n }\n if (tailTextNode.textContent !== _renderersEditorDom.ZWNJ) {\n var value = tailTextNode.textContent.replace(new RegExp(_renderersEditorDom.ZWNJ, 'g'), '');\n tailTextNode.textContent = _renderersEditorDom.ZWNJ;\n\n if (renderNode.postNode.next && renderNode.postNode.next.isMarker) {\n var nextMarker = renderNode.postNode.next;\n\n if (nextMarker.renderNode) {\n var nextValue = nextMarker.renderNode.element.textContent;\n nextMarker.renderNode.element.textContent = value + nextValue;\n } else {\n var nextValue = value + nextMarker.value;\n nextMarker.value = nextValue;\n }\n } else {\n var postNode = renderNode.postNode;\n var newMarkups = postNode.markups.slice();\n var newMarker = _this4.builder.createMarker(value, newMarkups);\n\n section.markers.insertAfter(newMarker, postNode);\n\n var newRenderNode = renderTree.buildRenderNode(newMarker);\n seenRenderNodes.push(newRenderNode);\n\n newRenderNode.markDirty();\n section.renderNode.markDirty();\n\n section.renderNode.childNodes.insertAfter(newRenderNode, renderNode);\n }\n }\n if (renderNode) {\n marker = renderNode.postNode;\n }\n }\n } else if ((0, _utilsDomUtils.isTextNode)(node)) {\n var text = transformHTMLText(node.textContent);\n var markups = _this4.collectMarkups(node, element);\n marker = _this4.builder.createMarker(text, markups);\n\n renderNode = renderTree.buildRenderNode(marker);\n renderNode.element = node;\n renderNode.markClean();\n section.renderNode.markDirty();\n\n var previousRenderNode = previousMarker && previousMarker.renderNode;\n section.markers.insertAfter(marker, previousMarker);\n section.renderNode.childNodes.insertAfter(renderNode, previousRenderNode);\n }\n\n if (renderNode) {\n seenRenderNodes.push(renderNode);\n }\n previousMarker = marker;\n });\n\n var renderNode = section.renderNode.childNodes.head;\n while (renderNode) {\n if (seenRenderNodes.indexOf(renderNode) === -1) {\n renderNode.scheduleForRemoval();\n }\n renderNode = renderNode.next;\n }\n }\n }]);\n\n return DOMParser;\n})();\n\nexports['default'] = DOMParser;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nvar _utilsAssert = require('../utils/assert');\n\nvar _dom = require('./dom');\n\nvar HTMLParser = (function () {\n function HTMLParser(builder) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n _classCallCheck(this, HTMLParser);\n\n (0, _utilsAssert['default'])('Must pass builder to HTMLParser', builder);\n this.builder = builder;\n this.options = options;\n }\n\n /**\n * @param {String} html to parse\n * @return {Post} A post abstract\n */\n\n _createClass(HTMLParser, [{\n key: 'parse',\n value: function parse(html) {\n var dom = (0, _utilsDomUtils.parseHTML)(html);\n var parser = new _dom['default'](this.builder, this.options);\n return parser.parse(dom);\n }\n }]);\n\n return HTMLParser;\n})();\n\nexports['default'] = HTMLParser;","'use strict';\n\nvar _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _renderersMobiledoc02 = require('../../renderers/mobiledoc/0-2');\n\nvar _utilsArrayUtils = require(\"../../utils/array-utils\");\n\nvar _utilsAssert = require('../../utils/assert');\n\n/*\n * Parses from mobiledoc -> post\n */\n\nvar MobiledocParser = (function () {\n function MobiledocParser(builder) {\n _classCallCheck(this, MobiledocParser);\n\n this.builder = builder;\n }\n\n /**\n * @param {Mobiledoc}\n * @return {Post}\n */\n\n _createClass(MobiledocParser, [{\n key: 'parse',\n value: function parse(_ref) {\n var version = _ref.version;\n var sectionData = _ref.sections;\n\n try {\n var markerTypes = sectionData[0];\n var sections = sectionData[1];\n\n var post = this.builder.createPost();\n\n this.markups = [];\n this.markerTypes = this.parseMarkerTypes(markerTypes);\n this.parseSections(sections, post);\n\n return post;\n } catch (e) {\n (0, _utilsAssert['default'])('Unable to parse mobiledoc: ' + e.message, false);\n }\n }\n }, {\n key: 'parseMarkerTypes',\n value: function parseMarkerTypes(markerTypes) {\n var _this = this;\n\n return markerTypes.map(function (markerType) {\n return _this.parseMarkerType(markerType);\n });\n }\n }, {\n key: 'parseMarkerType',\n value: function parseMarkerType(_ref2) {\n var _ref22 = _slicedToArray(_ref2, 2);\n\n var tagName = _ref22[0];\n var attributesArray = _ref22[1];\n\n var attributesObject = (0, _utilsArrayUtils.kvArrayToObject)(attributesArray || []);\n return this.builder.createMarkup(tagName, attributesObject);\n }\n }, {\n key: 'parseSections',\n value: function parseSections(sections, post) {\n var _this2 = this;\n\n sections.forEach(function (section) {\n return _this2.parseSection(section, post);\n });\n }\n }, {\n key: 'parseSection',\n value: function parseSection(section, post) {\n var _section = _slicedToArray(section, 1);\n\n var type = _section[0];\n\n switch (type) {\n case _renderersMobiledoc02.MOBILEDOC_MARKUP_SECTION_TYPE:\n this.parseMarkupSection(section, post);\n break;\n case _renderersMobiledoc02.MOBILEDOC_IMAGE_SECTION_TYPE:\n this.parseImageSection(section, post);\n break;\n case _renderersMobiledoc02.MOBILEDOC_CARD_SECTION_TYPE:\n this.parseCardSection(section, post);\n break;\n case _renderersMobiledoc02.MOBILEDOC_LIST_SECTION_TYPE:\n this.parseListSection(section, post);\n break;\n default:\n (0, _utilsAssert['default'])('Unexpected section type ' + type, false);\n }\n }\n }, {\n key: 'parseCardSection',\n value: function parseCardSection(_ref3, post) {\n var _ref32 = _slicedToArray(_ref3, 3);\n\n var type = _ref32[0];\n var name = _ref32[1];\n var payload = _ref32[2];\n\n var section = this.builder.createCardSection(name, payload);\n post.sections.append(section);\n }\n }, {\n key: 'parseImageSection',\n value: function parseImageSection(_ref4, post) {\n var _ref42 = _slicedToArray(_ref4, 2);\n\n var type = _ref42[0];\n var src = _ref42[1];\n\n var section = this.builder.createImageSection(src);\n post.sections.append(section);\n }\n }, {\n key: 'parseMarkupSection',\n value: function parseMarkupSection(_ref5, post) {\n var _ref52 = _slicedToArray(_ref5, 3);\n\n var type = _ref52[0];\n var tagName = _ref52[1];\n var markers = _ref52[2];\n\n var section = this.builder.createMarkupSection(tagName);\n post.sections.append(section);\n this.parseMarkers(markers, section);\n // Strip blank markers after they have been created. This ensures any\n // markup they include has been correctly populated.\n (0, _utilsArrayUtils.filter)(section.markers, function (m) {\n return m.isBlank;\n }).forEach(function (m) {\n section.markers.remove(m);\n });\n }\n }, {\n key: 'parseListSection',\n value: function parseListSection(_ref6, post) {\n var _ref62 = _slicedToArray(_ref6, 3);\n\n var type = _ref62[0];\n var tagName = _ref62[1];\n var items = _ref62[2];\n\n var section = this.builder.createListSection(tagName);\n post.sections.append(section);\n this.parseListItems(items, section);\n }\n }, {\n key: 'parseListItems',\n value: function parseListItems(items, section) {\n var _this3 = this;\n\n items.forEach(function (i) {\n return _this3.parseListItem(i, section);\n });\n }\n }, {\n key: 'parseListItem',\n value: function parseListItem(markers, section) {\n var item = this.builder.createListItem();\n this.parseMarkers(markers, item);\n section.items.append(item);\n }\n }, {\n key: 'parseMarkers',\n value: function parseMarkers(markers, parent) {\n var _this4 = this;\n\n markers.forEach(function (m) {\n return _this4.parseMarker(m, parent);\n });\n }\n }, {\n key: 'parseMarker',\n value: function parseMarker(_ref7, parent) {\n var _this5 = this;\n\n var _ref72 = _slicedToArray(_ref7, 3);\n\n var markerTypeIndexes = _ref72[0];\n var closeCount = _ref72[1];\n var value = _ref72[2];\n\n markerTypeIndexes.forEach(function (index) {\n _this5.markups.push(_this5.markerTypes[index]);\n });\n var marker = this.builder.createMarker(value, this.markups.slice());\n parent.markers.append(marker);\n this.markups = this.markups.slice(0, this.markups.length - closeCount);\n }\n }]);\n\n return MobiledocParser;\n})();\n\nexports['default'] = MobiledocParser;","'use strict';\n\nvar _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _renderersMobiledoc03 = require('../../renderers/mobiledoc/0-3');\n\nvar _utilsArrayUtils = require(\"../../utils/array-utils\");\n\nvar _utilsAssert = require('../../utils/assert');\n\n/*\n * Parses from mobiledoc -> post\n */\n\nvar MobiledocParser = (function () {\n function MobiledocParser(builder) {\n _classCallCheck(this, MobiledocParser);\n\n this.builder = builder;\n }\n\n /**\n * @param {Mobiledoc}\n * @return {Post}\n */\n\n _createClass(MobiledocParser, [{\n key: 'parse',\n value: function parse(_ref) {\n var version = _ref.version;\n var sections = _ref.sections;\n var markerTypes = _ref.markups;\n var cardTypes = _ref.cards;\n var atomTypes = _ref.atoms;\n\n try {\n var post = this.builder.createPost();\n\n this.markups = [];\n this.markerTypes = this.parseMarkerTypes(markerTypes);\n this.cardTypes = this.parseCardTypes(cardTypes);\n this.atomTypes = this.parseAtomTypes(atomTypes);\n this.parseSections(sections, post);\n\n return post;\n } catch (e) {\n (0, _utilsAssert['default'])('Unable to parse mobiledoc: ' + e.message, false);\n }\n }\n }, {\n key: 'parseMarkerTypes',\n value: function parseMarkerTypes(markerTypes) {\n var _this = this;\n\n return markerTypes.map(function (markerType) {\n return _this.parseMarkerType(markerType);\n });\n }\n }, {\n key: 'parseMarkerType',\n value: function parseMarkerType(_ref2) {\n var _ref22 = _slicedToArray(_ref2, 2);\n\n var tagName = _ref22[0];\n var attributesArray = _ref22[1];\n\n var attributesObject = (0, _utilsArrayUtils.kvArrayToObject)(attributesArray || []);\n return this.builder.createMarkup(tagName, attributesObject);\n }\n }, {\n key: 'parseCardTypes',\n value: function parseCardTypes(cardTypes) {\n var _this2 = this;\n\n return cardTypes.map(function (cardType) {\n return _this2.parseCardType(cardType);\n });\n }\n }, {\n key: 'parseCardType',\n value: function parseCardType(_ref3) {\n var _ref32 = _slicedToArray(_ref3, 2);\n\n var cardName = _ref32[0];\n var cardPayload = _ref32[1];\n\n return [cardName, cardPayload];\n }\n }, {\n key: 'parseAtomTypes',\n value: function parseAtomTypes(atomTypes) {\n var _this3 = this;\n\n return atomTypes.map(function (atomType) {\n return _this3.parseAtomType(atomType);\n });\n }\n }, {\n key: 'parseAtomType',\n value: function parseAtomType(_ref4) {\n var _ref42 = _slicedToArray(_ref4, 3);\n\n var atomName = _ref42[0];\n var atomValue = _ref42[1];\n var atomPayload = _ref42[2];\n\n return [atomName, atomValue, atomPayload];\n }\n }, {\n key: 'parseSections',\n value: function parseSections(sections, post) {\n var _this4 = this;\n\n sections.forEach(function (section) {\n return _this4.parseSection(section, post);\n });\n }\n }, {\n key: 'parseSection',\n value: function parseSection(section, post) {\n var _section = _slicedToArray(section, 1);\n\n var type = _section[0];\n\n switch (type) {\n case _renderersMobiledoc03.MOBILEDOC_MARKUP_SECTION_TYPE:\n this.parseMarkupSection(section, post);\n break;\n case _renderersMobiledoc03.MOBILEDOC_IMAGE_SECTION_TYPE:\n this.parseImageSection(section, post);\n break;\n case _renderersMobiledoc03.MOBILEDOC_CARD_SECTION_TYPE:\n this.parseCardSection(section, post);\n break;\n case _renderersMobiledoc03.MOBILEDOC_LIST_SECTION_TYPE:\n this.parseListSection(section, post);\n break;\n default:\n (0, _utilsAssert['default'])('Unexpected section type ${type}', false);\n }\n }\n }, {\n key: 'getAtomTypeFromIndex',\n value: function getAtomTypeFromIndex(index) {\n var atomType = this.atomTypes[index];\n (0, _utilsAssert['default'])('No atom definition found at index ' + index, !!atomType);\n return atomType;\n }\n }, {\n key: 'getCardTypeFromIndex',\n value: function getCardTypeFromIndex(index) {\n var cardType = this.cardTypes[index];\n (0, _utilsAssert['default'])('No card definition found at index ' + index, !!cardType);\n return cardType;\n }\n }, {\n key: 'parseCardSection',\n value: function parseCardSection(_ref5, post) {\n var _ref52 = _slicedToArray(_ref5, 2);\n\n var type = _ref52[0];\n var cardIndex = _ref52[1];\n\n var _getCardTypeFromIndex = this.getCardTypeFromIndex(cardIndex);\n\n var _getCardTypeFromIndex2 = _slicedToArray(_getCardTypeFromIndex, 2);\n\n var name = _getCardTypeFromIndex2[0];\n var payload = _getCardTypeFromIndex2[1];\n\n var section = this.builder.createCardSection(name, payload);\n post.sections.append(section);\n }\n }, {\n key: 'parseImageSection',\n value: function parseImageSection(_ref6, post) {\n var _ref62 = _slicedToArray(_ref6, 2);\n\n var type = _ref62[0];\n var src = _ref62[1];\n\n var section = this.builder.createImageSection(src);\n post.sections.append(section);\n }\n }, {\n key: 'parseMarkupSection',\n value: function parseMarkupSection(_ref7, post) {\n var _ref72 = _slicedToArray(_ref7, 3);\n\n var type = _ref72[0];\n var tagName = _ref72[1];\n var markers = _ref72[2];\n\n var section = this.builder.createMarkupSection(tagName);\n post.sections.append(section);\n this.parseMarkers(markers, section);\n // Strip blank markers after they have been created. This ensures any\n // markup they include has been correctly populated.\n (0, _utilsArrayUtils.filter)(section.markers, function (m) {\n return m.isBlank;\n }).forEach(function (m) {\n section.markers.remove(m);\n });\n }\n }, {\n key: 'parseListSection',\n value: function parseListSection(_ref8, post) {\n var _ref82 = _slicedToArray(_ref8, 3);\n\n var type = _ref82[0];\n var tagName = _ref82[1];\n var items = _ref82[2];\n\n var section = this.builder.createListSection(tagName);\n post.sections.append(section);\n this.parseListItems(items, section);\n }\n }, {\n key: 'parseListItems',\n value: function parseListItems(items, section) {\n var _this5 = this;\n\n items.forEach(function (i) {\n return _this5.parseListItem(i, section);\n });\n }\n }, {\n key: 'parseListItem',\n value: function parseListItem(markers, section) {\n var item = this.builder.createListItem();\n this.parseMarkers(markers, item);\n section.items.append(item);\n }\n }, {\n key: 'parseMarkers',\n value: function parseMarkers(markers, parent) {\n var _this6 = this;\n\n markers.forEach(function (m) {\n return _this6.parseMarker(m, parent);\n });\n }\n }, {\n key: 'parseMarker',\n value: function parseMarker(_ref9, parent) {\n var _this7 = this;\n\n var _ref92 = _slicedToArray(_ref9, 4);\n\n var type = _ref92[0];\n var markerTypeIndexes = _ref92[1];\n var closeCount = _ref92[2];\n var value = _ref92[3];\n\n markerTypeIndexes.forEach(function (index) {\n _this7.markups.push(_this7.markerTypes[index]);\n });\n\n var marker = this.buildMarkerType(type, value);\n parent.markers.append(marker);\n\n this.markups = this.markups.slice(0, this.markups.length - closeCount);\n }\n }, {\n key: 'buildMarkerType',\n value: function buildMarkerType(type, value) {\n switch (type) {\n case _renderersMobiledoc03.MOBILEDOC_MARKUP_MARKER_TYPE:\n return this.builder.createMarker(value, this.markups.slice());\n case _renderersMobiledoc03.MOBILEDOC_ATOM_MARKER_TYPE:\n var _getAtomTypeFromIndex = this.getAtomTypeFromIndex(value),\n _getAtomTypeFromIndex2 = _slicedToArray(_getAtomTypeFromIndex, 3),\n atomName = _getAtomTypeFromIndex2[0],\n atomValue = _getAtomTypeFromIndex2[1],\n atomPayload = _getAtomTypeFromIndex2[2];\n\n return this.builder.createAtom(atomName, atomValue, atomPayload, this.markups.slice());\n default:\n (0, _utilsAssert['default'])('Unexpected marker type ' + type, false);\n }\n }\n }]);\n\n return MobiledocParser;\n})();\n\nexports['default'] = MobiledocParser;","'use strict';\n\nvar _ = require('./0-2');\n\nvar _2 = require('./0-3');\n\nvar _renderersMobiledoc02 = require('../../renderers/mobiledoc/0-2');\n\nvar _renderersMobiledoc03 = require('../../renderers/mobiledoc/0-3');\n\nvar _utilsAssert = require('../../utils/assert');\n\nfunction parseVersion(mobiledoc) {\n return mobiledoc.version;\n}\n\nexports['default'] = {\n parse: function parse(builder, mobiledoc) {\n var version = parseVersion(mobiledoc);\n switch (version) {\n case _renderersMobiledoc02.MOBILEDOC_VERSION:\n return new _['default'](builder).parse(mobiledoc);\n case _renderersMobiledoc03.MOBILEDOC_VERSION:\n return new _2['default'](builder).parse(mobiledoc);\n default:\n (0, _utilsAssert['default'])('Unknown version of mobiledoc parser requested: ' + version, false);\n }\n }\n};","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _modelsMarkupSection = require('../models/markup-section');\n\nvar _modelsListSection = require('../models/list-section');\n\nvar _modelsListItem = require('../models/list-item');\n\nvar _modelsTypes = require('../models/types');\n\nvar _modelsMarkup = require('../models/markup');\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nvar _utilsArrayUtils = require('../utils/array-utils');\n\nvar _parsersDom = require('../parsers/dom');\n\nvar _utilsAssert = require('../utils/assert');\n\nvar SKIPPABLE_ELEMENT_TAG_NAMES = ['style', 'head', 'title', 'meta'].map(_utilsDomUtils.normalizeTagName);\n\n/**\n * parses an element into a section, ignoring any non-markup\n * elements contained within\n * @private\n */\n\nvar SectionParser = (function () {\n function SectionParser(builder) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n _classCallCheck(this, SectionParser);\n\n this.builder = builder;\n this.plugins = options.plugins || [];\n }\n\n _createClass(SectionParser, [{\n key: 'parse',\n value: function parse(element) {\n var _this = this;\n\n if (this._isSkippable(element)) {\n return [];\n }\n this.sections = [];\n this.state = {};\n\n this._updateStateFromElement(element);\n\n var childNodes = (0, _utilsDomUtils.isTextNode)(element) ? [element] : element.childNodes;\n\n if (this.state.section.isListSection) {\n this.parseListItems(childNodes);\n } else {\n (0, _utilsArrayUtils.forEach)(childNodes, function (el) {\n _this.parseNode(el);\n });\n }\n\n this._closeCurrentSection();\n\n return this.sections;\n }\n }, {\n key: 'parseListItems',\n value: function parseListItems(childNodes) {\n var _this2 = this;\n\n var state = this.state;\n\n (0, _utilsArrayUtils.forEach)(childNodes, function (el) {\n var parsed = new _this2.constructor(_this2.builder).parse(el);\n var li = parsed[0];\n if (li && li.isListItem) {\n state.section.items.append(li);\n }\n });\n }\n }, {\n key: 'runPlugins',\n value: function runPlugins(node) {\n var _this3 = this;\n\n var isNodeFinished = false;\n var env = {\n addSection: function addSection(section) {\n _this3._closeCurrentSection();\n _this3.sections.push(section);\n },\n addMarkerable: function addMarkerable(marker) {\n var state = _this3.state;\n var section = state.section;\n\n (0, _utilsAssert['default'])('Markerables can only be appended to markup sections and list item sections', section && section.isMarkerable);\n if (state.text) {\n _this3._createMarker();\n }\n section.markers.append(marker);\n },\n nodeFinished: function nodeFinished() {\n isNodeFinished = true;\n }\n };\n for (var i = 0; i < this.plugins.length; i++) {\n var plugin = this.plugins[i];\n plugin(node, this.builder, env);\n if (isNodeFinished) {\n return true;\n }\n }\n return false;\n }\n }, {\n key: 'parseNode',\n value: function parseNode(node) {\n if (!this.state.section) {\n this._updateStateFromElement(node);\n }\n\n var nodeFinished = this.runPlugins(node);\n if (nodeFinished) {\n return;\n }\n\n switch (node.nodeType) {\n case _utilsDomUtils.NODE_TYPES.TEXT:\n this.parseTextNode(node);\n break;\n case _utilsDomUtils.NODE_TYPES.ELEMENT:\n this.parseElementNode(node);\n break;\n }\n }\n }, {\n key: 'parseElementNode',\n value: function parseElementNode(element) {\n var _state$markups,\n _this4 = this;\n\n var state = this.state;\n\n var markups = this._markupsFromElement(element);\n if (markups.length && state.text.length) {\n this._createMarker();\n }\n (_state$markups = state.markups).push.apply(_state$markups, _toConsumableArray(markups));\n\n (0, _utilsArrayUtils.forEach)(element.childNodes, function (node) {\n _this4.parseNode(node);\n });\n\n if (markups.length && state.text.length) {\n // create the marker started for this node\n this._createMarker();\n }\n\n // pop the current markups from the stack\n state.markups.splice(-markups.length, markups.length);\n }\n }, {\n key: 'parseTextNode',\n value: function parseTextNode(textNode) {\n var state = this.state;\n\n state.text += textNode.textContent;\n }\n }, {\n key: '_updateStateFromElement',\n value: function _updateStateFromElement(element) {\n var state = this.state;\n\n state.section = this._createSectionFromElement(element);\n state.markups = this._markupsFromElement(element);\n state.text = '';\n }\n }, {\n key: '_closeCurrentSection',\n value: function _closeCurrentSection() {\n var sections = this.sections;\n var state = this.state;\n\n if (!state.section) {\n return;\n }\n\n // close a trailing text node if it exists\n if (state.text.length) {\n this._createMarker();\n }\n\n sections.push(state.section);\n state.section = null;\n }\n }, {\n key: '_markupsFromElement',\n value: function _markupsFromElement(element) {\n var builder = this.builder;\n\n var markups = [];\n if ((0, _utilsDomUtils.isTextNode)(element)) {\n return markups;\n }\n\n var tagName = (0, _utilsDomUtils.normalizeTagName)(element.tagName);\n if (this._isValidMarkupForElement(tagName, element)) {\n markups.push(builder.createMarkup(tagName, (0, _utilsDomUtils.getAttributes)(element)));\n }\n\n this._markupsFromElementStyle(element).forEach(function (markup) {\n return markups.push(markup);\n });\n\n return markups;\n }\n }, {\n key: '_isValidMarkupForElement',\n value: function _isValidMarkupForElement(tagName, element) {\n if (_modelsMarkup.VALID_MARKUP_TAGNAMES.indexOf(tagName) === -1) {\n return false;\n } else if (tagName === 'b') {\n // google docs add a that should not\n // create a \"b\" markup\n return element.style.fontWeight !== 'normal';\n }\n return true;\n }\n }, {\n key: '_markupsFromElementStyle',\n value: function _markupsFromElementStyle(element) {\n var builder = this.builder;\n\n var markups = [];\n var _element$style = element.style;\n var fontStyle = _element$style.fontStyle;\n var fontWeight = _element$style.fontWeight;\n\n if (fontStyle === 'italic') {\n markups.push(builder.createMarkup('em'));\n }\n if (fontWeight === 'bold' || fontWeight === '700') {\n markups.push(builder.createMarkup('strong'));\n }\n return markups;\n }\n }, {\n key: '_createMarker',\n value: function _createMarker() {\n var state = this.state;\n\n var text = (0, _parsersDom.transformHTMLText)(state.text);\n var marker = this.builder.createMarker(text, state.markups);\n state.section.markers.append(marker);\n state.text = '';\n }\n }, {\n key: '_getSectionDetails',\n value: function _getSectionDetails(element) {\n var sectionType = undefined,\n tagName = undefined,\n inferredTagName = false;\n if ((0, _utilsDomUtils.isTextNode)(element)) {\n tagName = _modelsMarkupSection.DEFAULT_TAG_NAME;\n sectionType = _modelsTypes.MARKUP_SECTION_TYPE;\n inferredTagName = true;\n } else {\n tagName = (0, _utilsDomUtils.normalizeTagName)(element.tagName);\n\n if ((0, _utilsArrayUtils.contains)(_modelsListSection.VALID_LIST_SECTION_TAGNAMES, tagName)) {\n sectionType = _modelsTypes.LIST_SECTION_TYPE;\n } else if ((0, _utilsArrayUtils.contains)(_modelsListItem.VALID_LIST_ITEM_TAGNAMES, tagName)) {\n sectionType = _modelsTypes.LIST_ITEM_TYPE;\n } else if ((0, _utilsArrayUtils.contains)(_modelsMarkupSection.VALID_MARKUP_SECTION_TAGNAMES, tagName)) {\n sectionType = _modelsTypes.MARKUP_SECTION_TYPE;\n } else {\n sectionType = _modelsTypes.MARKUP_SECTION_TYPE;\n tagName = _modelsMarkupSection.DEFAULT_TAG_NAME;\n inferredTagName = true;\n }\n }\n\n return { sectionType: sectionType, tagName: tagName, inferredTagName: inferredTagName };\n }\n }, {\n key: '_createSectionFromElement',\n value: function _createSectionFromElement(element) {\n var builder = this.builder;\n\n var section = undefined;\n\n var _getSectionDetails2 = this._getSectionDetails(element);\n\n var tagName = _getSectionDetails2.tagName;\n var sectionType = _getSectionDetails2.sectionType;\n var inferredTagName = _getSectionDetails2.inferredTagName;\n\n switch (sectionType) {\n case _modelsTypes.LIST_SECTION_TYPE:\n section = builder.createListSection(tagName);\n break;\n case _modelsTypes.LIST_ITEM_TYPE:\n section = builder.createListItem();\n break;\n case _modelsTypes.MARKUP_SECTION_TYPE:\n section = builder.createMarkupSection(tagName);\n section._inferredTagName = inferredTagName;\n break;\n default:\n (0, _utilsAssert['default'])('Cannot parse section from element', false);\n }\n\n return section;\n }\n }, {\n key: '_isSkippable',\n value: function _isSkippable(element) {\n return (0, _utilsDomUtils.isCommentNode)(element) || element.nodeType === _utilsDomUtils.NODE_TYPES.ELEMENT && (0, _utilsArrayUtils.contains)(SKIPPABLE_ELEMENT_TAG_NAMES, (0, _utilsDomUtils.normalizeTagName)(element.tagName));\n }\n }]);\n\n return SectionParser;\n})();\n\nexports['default'] = SectionParser;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _utilsAssert = require('../utils/assert');\n\nvar _modelsTypes = require('../models/types');\n\nvar _modelsMarkupSection = require('../models/markup-section');\n\nvar UL_LI_REGEX = /^\\* (.*)$/;\nvar OL_LI_REGEX = /^\\d\\.? (.*)$/;\nvar CR = '\\r';\nvar LF = '\\n';\nvar CR_REGEX = new RegExp(CR, 'g');\nvar CR_LF_REGEX = new RegExp(CR + LF, 'g');\n\nvar SECTION_BREAK = LF;\n\nexports.SECTION_BREAK = SECTION_BREAK;\nfunction normalizeLineEndings(text) {\n return text.replace(CR_LF_REGEX, LF).replace(CR_REGEX, LF);\n}\n\nvar TextParser = (function () {\n function TextParser(builder, options) {\n _classCallCheck(this, TextParser);\n\n this.builder = builder;\n this.options = options;\n\n this.post = this.builder.createPost();\n this.prevSection = null;\n }\n\n /**\n * @param {String} text to parse\n * @return {Post} a post abstract\n */\n\n _createClass(TextParser, [{\n key: 'parse',\n value: function parse(text) {\n var _this = this;\n\n text = normalizeLineEndings(text);\n text.split(SECTION_BREAK).forEach(function (text) {\n var section = _this._parseSection(text);\n _this._appendSection(section);\n });\n\n return this.post;\n }\n }, {\n key: '_parseSection',\n value: function _parseSection(text) {\n var tagName = _modelsMarkupSection.DEFAULT_TAG_NAME,\n type = _modelsTypes.MARKUP_SECTION_TYPE,\n section = undefined;\n\n if (UL_LI_REGEX.test(text)) {\n tagName = 'ul';\n type = _modelsTypes.LIST_SECTION_TYPE;\n text = text.match(UL_LI_REGEX)[1];\n } else if (OL_LI_REGEX.test(text)) {\n tagName = 'ol';\n type = _modelsTypes.LIST_SECTION_TYPE;\n text = text.match(OL_LI_REGEX)[1];\n }\n\n var markers = [this.builder.createMarker(text)];\n\n switch (type) {\n case _modelsTypes.LIST_SECTION_TYPE:\n var item = this.builder.createListItem(markers);\n var list = this.builder.createListSection(tagName, [item]);\n section = list;\n break;\n case _modelsTypes.MARKUP_SECTION_TYPE:\n section = this.builder.createMarkupSection(tagName, markers);\n break;\n default:\n (0, _utilsAssert['default'])('Unknown type encountered ' + type, false);\n }\n\n return section;\n }\n }, {\n key: '_appendSection',\n value: function _appendSection(section) {\n var _this2 = this;\n\n var isSameListSection = section.isListSection && this.prevSection && this.prevSection.isListSection && this.prevSection.tagName === section.tagName;\n\n if (isSameListSection) {\n section.items.forEach(function (item) {\n _this2.prevSection.items.append(item.clone());\n });\n } else {\n this.post.sections.insertAfter(section, this.prevSection);\n this.prevSection = section;\n }\n }\n }]);\n\n return TextParser;\n})();\n\nexports['default'] = TextParser;","'use strict';\n\nvar _destroyHooks;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _modelsCardNode = require('../models/card-node');\n\nvar _utilsArrayUtils = require('../utils/array-utils');\n\nvar _modelsAtomNode = require('../models/atom-node');\n\nvar _modelsTypes = require('../models/types');\n\nvar _utilsStringUtils = require('../utils/string-utils');\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nvar _modelsMarkupSection = require('../models/markup-section');\n\nvar _utilsAssert = require('../utils/assert');\n\nvar _utilsCharacters = require('../utils/characters');\n\nvar CARD_ELEMENT_CLASS_NAME = '__mobiledoc-card';\nexports.CARD_ELEMENT_CLASS_NAME = CARD_ELEMENT_CLASS_NAME;\nvar NO_BREAK_SPACE = ' ';\nexports.NO_BREAK_SPACE = NO_BREAK_SPACE;\nvar TAB_CHARACTER = ' ';\nexports.TAB_CHARACTER = TAB_CHARACTER;\nvar SPACE = ' ';\nexports.SPACE = SPACE;\nvar ZWNJ = '‌';\nexports.ZWNJ = ZWNJ;\nvar ATOM_CLASS_NAME = '-mobiledoc-kit__atom';\nexports.ATOM_CLASS_NAME = ATOM_CLASS_NAME;\nvar EDITOR_HAS_NO_CONTENT_CLASS_NAME = '__has-no-content';\nexports.EDITOR_HAS_NO_CONTENT_CLASS_NAME = EDITOR_HAS_NO_CONTENT_CLASS_NAME;\nvar EDITOR_ELEMENT_CLASS_NAME = '__mobiledoc-editor';\n\nexports.EDITOR_ELEMENT_CLASS_NAME = EDITOR_ELEMENT_CLASS_NAME;\nfunction createElementFromMarkup(doc, markup) {\n var element = doc.createElement(markup.tagName);\n Object.keys(markup.attributes).forEach(function (k) {\n element.setAttribute(k, markup.attributes[k]);\n });\n return element;\n}\n\nvar TWO_SPACES = '' + SPACE + SPACE;\nvar SPACE_AND_NO_BREAK = '' + SPACE + NO_BREAK_SPACE;\nvar SPACES_REGEX = new RegExp(TWO_SPACES, 'g');\nvar TAB_REGEX = new RegExp(_utilsCharacters.TAB, 'g');\nvar endsWithSpace = function endsWithSpace(text) {\n return (0, _utilsStringUtils.endsWith)(text, SPACE);\n};\nvar startsWithSpace = function startsWithSpace(text) {\n return (0, _utilsStringUtils.startsWith)(text, SPACE);\n};\n\n// FIXME: This can be done more efficiently with a single pass\n// building a correct string based on the original.\nfunction renderHTMLText(marker) {\n var text = marker.value;\n text = text.replace(SPACES_REGEX, SPACE_AND_NO_BREAK).replace(TAB_REGEX, TAB_CHARACTER);\n\n // If the first marker has a leading space or the last marker has a\n // trailing space, the browser will collapse the space when we position\n // the cursor.\n // See https://github.com/bustlelabs/mobiledoc-kit/issues/68\n // and https://github.com/bustlelabs/mobiledoc-kit/issues/75\n if (marker.isMarker && endsWithSpace(text) && !marker.next) {\n text = text.substr(0, text.length - 1) + NO_BREAK_SPACE;\n }\n if (marker.isMarker && startsWithSpace(text) && (!marker.prev || marker.prev.isMarker && endsWithSpace(marker.prev.value))) {\n text = NO_BREAK_SPACE + text.substr(1);\n }\n return text;\n}\n\n// ascends from element upward, returning the last parent node that is not\n// parentElement\nfunction penultimateParentOf(element, parentElement) {\n while (parentElement && element.parentNode !== parentElement && element.parentNode !== document.body // ensure the while loop stops\n ) {\n element = element.parentNode;\n }\n return element;\n}\n\nfunction renderMarkupSection(section) {\n var element = undefined;\n if (_modelsMarkupSection.MARKUP_SECTION_ELEMENT_NAMES.indexOf(section.tagName) !== -1) {\n element = document.createElement(section.tagName);\n } else {\n element = document.createElement('div');\n (0, _utilsDomUtils.addClassName)(element, section.tagName);\n }\n\n return element;\n}\n\nfunction renderListSection(section) {\n return document.createElement(section.tagName);\n}\n\nfunction renderListItem() {\n return document.createElement('li');\n}\n\nfunction renderCursorPlaceholder() {\n return document.createElement('br');\n}\n\nfunction renderInlineCursorPlaceholder() {\n return document.createTextNode(ZWNJ);\n}\n\nfunction renderCard() {\n var wrapper = document.createElement('div');\n var cardElement = document.createElement('div');\n cardElement.contentEditable = false;\n (0, _utilsDomUtils.addClassName)(cardElement, CARD_ELEMENT_CLASS_NAME);\n wrapper.appendChild(renderInlineCursorPlaceholder());\n wrapper.appendChild(cardElement);\n wrapper.appendChild(renderInlineCursorPlaceholder());\n return { wrapper: wrapper, cardElement: cardElement };\n}\n\n/**\n * Wrap the element in all of the opened markups\n * @return {DOMElement} the wrapped element\n * @private\n */\nfunction wrapElement(element, openedMarkups) {\n var wrappedElement = element;\n\n for (var i = openedMarkups.length - 1; i >= 0; i--) {\n var markup = openedMarkups[i];\n var openedElement = createElementFromMarkup(document, markup);\n openedElement.appendChild(wrappedElement);\n wrappedElement = openedElement;\n }\n\n return wrappedElement;\n}\n\n// Attach the element to its parent element at the correct position based on the\n// previousRenderNode\nfunction attachElementToParent(element, parentElement) {\n var previousRenderNode = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];\n\n if (previousRenderNode) {\n var previousSibling = previousRenderNode.element;\n var previousSiblingPenultimate = penultimateParentOf(previousSibling, parentElement);\n parentElement.insertBefore(element, previousSiblingPenultimate.nextSibling);\n } else {\n parentElement.insertBefore(element, parentElement.firstChild);\n }\n}\n\nfunction renderAtom(atom, element, previousRenderNode) {\n var atomElement = document.createElement('span');\n atomElement.contentEditable = false;\n\n var wrapper = document.createElement('span');\n (0, _utilsDomUtils.addClassName)(wrapper, ATOM_CLASS_NAME);\n var headTextNode = renderInlineCursorPlaceholder();\n var tailTextNode = renderInlineCursorPlaceholder();\n\n wrapper.appendChild(headTextNode);\n wrapper.appendChild(atomElement);\n wrapper.appendChild(tailTextNode);\n\n var wrappedElement = wrapElement(wrapper, atom.openedMarkups);\n attachElementToParent(wrappedElement, element, previousRenderNode);\n\n return {\n markupElement: wrappedElement,\n wrapper: wrapper,\n atomElement: atomElement,\n headTextNode: headTextNode,\n tailTextNode: tailTextNode\n };\n}\n\nfunction getNextMarkerElement(renderNode) {\n var element = renderNode.element.parentNode;\n var marker = renderNode.postNode;\n var closedCount = marker.closedMarkups.length;\n\n while (closedCount--) {\n element = element.parentNode;\n }\n return element;\n}\n\n/**\n * Render the marker\n * @param {Marker} marker the marker to render\n * @param {DOMNode} element the element to attach the rendered marker to\n * @param {RenderNode} [previousRenderNode] The render node before this one, which\n * affects the determination of where to insert this rendered marker.\n * @return {Object} With properties `element` and `markupElement`.\n * The element (textNode) that has the text for\n * this marker, and the outermost rendered element. If the marker has no\n * markups, element and markupElement will be the same textNode\n * @private\n */\nfunction renderMarker(marker, parentElement, previousRenderNode) {\n var text = renderHTMLText(marker);\n\n var element = document.createTextNode(text);\n var markupElement = wrapElement(element, marker.openedMarkups);\n attachElementToParent(markupElement, parentElement, previousRenderNode);\n\n return { element: element, markupElement: markupElement };\n}\n\n// Attach the render node's element to the DOM,\n// replacing the originalElement if it exists\nfunction attachRenderNodeElementToDOM(renderNode) {\n var originalElement = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n var element = renderNode.element;\n var hasRendered = !!originalElement;\n\n if (hasRendered) {\n var parentElement = renderNode.parent.element;\n parentElement.replaceChild(element, originalElement);\n } else {\n var parentElement = undefined,\n nextSiblingElement = undefined;\n if (renderNode.prev) {\n var previousElement = renderNode.prev.element;\n parentElement = previousElement.parentNode;\n nextSiblingElement = previousElement.nextSibling;\n } else {\n parentElement = renderNode.parent.element;\n nextSiblingElement = parentElement.firstChild;\n }\n parentElement.insertBefore(element, nextSiblingElement);\n }\n}\n\nfunction removeRenderNodeSectionFromParent(renderNode, section) {\n var parent = renderNode.parent.postNode;\n parent.sections.remove(section);\n}\n\nfunction removeRenderNodeElementFromParent(renderNode) {\n if (renderNode.element && renderNode.element.parentNode) {\n renderNode.element.parentNode.removeChild(renderNode.element);\n }\n}\n\nfunction validateCards() {\n var cards = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n (0, _utilsArrayUtils.forEach)(cards, function (card) {\n (0, _utilsAssert['default'])('Card \"' + card.name + '\" must define type \"dom\", has: \"' + card.type + '\"', card.type === 'dom');\n (0, _utilsAssert['default'])('Card \"' + card.name + '\" must define `render` method', !!card.render);\n });\n return cards;\n}\n\nfunction validateAtoms() {\n var atoms = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n (0, _utilsArrayUtils.forEach)(atoms, function (atom) {\n (0, _utilsAssert['default'])('Atom \"' + atom.name + '\" must define type \"dom\", has: \"' + atom.type + '\"', atom.type === 'dom');\n (0, _utilsAssert['default'])('Atom \"' + atom.name + '\" must define `render` method', !!atom.render);\n });\n return atoms;\n}\n\nvar Visitor = (function () {\n function Visitor(editor, cards, atoms, unknownCardHandler, unknownAtomHandler, options) {\n _classCallCheck(this, Visitor);\n\n this.editor = editor;\n this.cards = validateCards(cards);\n this.atoms = validateAtoms(atoms);\n this.unknownCardHandler = unknownCardHandler;\n this.unknownAtomHandler = unknownAtomHandler;\n this.options = options;\n }\n\n _createClass(Visitor, [{\n key: '_findCard',\n value: function _findCard(cardName) {\n var card = (0, _utilsArrayUtils.detect)(this.cards, function (card) {\n return card.name === cardName;\n });\n return card || this._createUnknownCard(cardName);\n }\n }, {\n key: '_createUnknownCard',\n value: function _createUnknownCard(cardName) {\n (0, _utilsAssert['default'])('Unknown card \"' + cardName + '\" found, but no unknownCardHandler is defined', !!this.unknownCardHandler);\n\n return {\n name: cardName,\n type: 'dom',\n render: this.unknownCardHandler,\n edit: this.unknownCardHandler\n };\n }\n }, {\n key: '_findAtom',\n value: function _findAtom(atomName) {\n var atom = (0, _utilsArrayUtils.detect)(this.atoms, function (atom) {\n return atom.name === atomName;\n });\n return atom || this._createUnknownAtom(atomName);\n }\n }, {\n key: '_createUnknownAtom',\n value: function _createUnknownAtom(atomName) {\n (0, _utilsAssert['default'])('Unknown atom \"' + atomName + '\" found, but no unknownAtomHandler is defined', !!this.unknownAtomHandler);\n\n return {\n name: atomName,\n type: 'dom',\n render: this.unknownAtomHandler\n };\n }\n }, {\n key: _modelsTypes.POST_TYPE,\n value: function value(renderNode, post, visit) {\n if (!renderNode.element) {\n renderNode.element = document.createElement('div');\n }\n (0, _utilsDomUtils.addClassName)(renderNode.element, EDITOR_ELEMENT_CLASS_NAME);\n if (post.hasContent) {\n (0, _utilsDomUtils.removeClassName)(renderNode.element, EDITOR_HAS_NO_CONTENT_CLASS_NAME);\n } else {\n (0, _utilsDomUtils.addClassName)(renderNode.element, EDITOR_HAS_NO_CONTENT_CLASS_NAME);\n }\n visit(renderNode, post.sections);\n }\n }, {\n key: _modelsTypes.MARKUP_SECTION_TYPE,\n value: function value(renderNode, section, visit) {\n var originalElement = renderNode.element;\n\n // Always rerender the section -- its tag name or attributes may have changed.\n // TODO make this smarter, only rerendering and replacing the element when necessary\n renderNode.element = renderMarkupSection(section);\n renderNode.cursorElement = null;\n attachRenderNodeElementToDOM(renderNode, originalElement);\n\n if (section.isBlank) {\n var cursorPlaceholder = renderCursorPlaceholder();\n renderNode.element.appendChild(cursorPlaceholder);\n renderNode.cursorElement = cursorPlaceholder;\n } else {\n var visitAll = true;\n visit(renderNode, section.markers, visitAll);\n }\n }\n }, {\n key: _modelsTypes.LIST_SECTION_TYPE,\n value: function value(renderNode, section, visit) {\n var originalElement = renderNode.element;\n\n renderNode.element = renderListSection(section);\n attachRenderNodeElementToDOM(renderNode, originalElement);\n\n var visitAll = true;\n visit(renderNode, section.items, visitAll);\n }\n }, {\n key: _modelsTypes.LIST_ITEM_TYPE,\n value: function value(renderNode, item, visit) {\n // FIXME do we need to do anything special for rerenders?\n renderNode.element = renderListItem();\n renderNode.cursorElement = null;\n attachRenderNodeElementToDOM(renderNode, null);\n\n if (item.isBlank) {\n var cursorPlaceholder = renderCursorPlaceholder();\n renderNode.element.appendChild(cursorPlaceholder);\n renderNode.cursorElement = cursorPlaceholder;\n } else {\n var visitAll = true;\n visit(renderNode, item.markers, visitAll);\n }\n }\n }, {\n key: _modelsTypes.MARKER_TYPE,\n value: function value(renderNode, marker) {\n var parentElement = undefined;\n\n if (renderNode.prev) {\n parentElement = getNextMarkerElement(renderNode.prev);\n } else {\n parentElement = renderNode.parent.element;\n }\n\n var _renderMarker = renderMarker(marker, parentElement, renderNode.prev);\n\n var element = _renderMarker.element;\n var markupElement = _renderMarker.markupElement;\n\n renderNode.element = element;\n renderNode.markupElement = markupElement;\n }\n }, {\n key: _modelsTypes.IMAGE_SECTION_TYPE,\n value: function value(renderNode, section) {\n if (renderNode.element) {\n if (renderNode.element.src !== section.src) {\n renderNode.element.src = section.src;\n }\n } else {\n var element = document.createElement('img');\n element.src = section.src;\n if (renderNode.prev) {\n var previousElement = renderNode.prev.element;\n var nextElement = previousElement.nextSibling;\n if (nextElement) {\n nextElement.parentNode.insertBefore(element, nextElement);\n }\n }\n if (!element.parentNode) {\n renderNode.parent.element.appendChild(element);\n }\n renderNode.element = element;\n }\n }\n }, {\n key: _modelsTypes.CARD_TYPE,\n value: function value(renderNode, section) {\n var originalElement = renderNode.element;\n var editor = this.editor;\n var options = this.options;\n\n var card = this._findCard(section.name);\n\n var _renderCard = renderCard();\n\n var wrapper = _renderCard.wrapper;\n var cardElement = _renderCard.cardElement;\n\n renderNode.element = wrapper;\n attachRenderNodeElementToDOM(renderNode, originalElement);\n\n var cardNode = new _modelsCardNode['default'](editor, card, section, cardElement, options);\n renderNode.cardNode = cardNode;\n\n var initialMode = section._initialMode;\n cardNode[initialMode]();\n }\n }, {\n key: _modelsTypes.ATOM_TYPE,\n value: function value(renderNode, atomModel) {\n var parentElement = undefined;\n\n if (renderNode.prev) {\n parentElement = getNextMarkerElement(renderNode.prev);\n } else {\n parentElement = renderNode.parent.element;\n }\n\n var editor = this.editor;\n var options = this.options;\n\n var _renderAtom = renderAtom(atomModel, parentElement, renderNode.prev);\n\n var wrapper = _renderAtom.wrapper;\n var markupElement = _renderAtom.markupElement;\n var atomElement = _renderAtom.atomElement;\n var headTextNode = _renderAtom.headTextNode;\n var tailTextNode = _renderAtom.tailTextNode;\n\n var atom = this._findAtom(atomModel.name);\n\n var atomNode = renderNode.atomNode;\n if (!atomNode) {\n // create new AtomNode\n atomNode = new _modelsAtomNode['default'](editor, atom, atomModel, atomElement, options);\n } else {\n // retarget atomNode to new atom element\n atomNode.element = atomElement;\n }\n\n atomNode.render();\n\n renderNode.atomNode = atomNode;\n renderNode.element = wrapper;\n renderNode.headTextNode = headTextNode;\n renderNode.tailTextNode = tailTextNode;\n renderNode.markupElement = markupElement;\n }\n }]);\n\n return Visitor;\n})();\n\nvar destroyHooks = (_destroyHooks = {}, _defineProperty(_destroyHooks, _modelsTypes.POST_TYPE, function () /*renderNode, post*/{\n (0, _utilsAssert['default'])('post destruction is not supported by the renderer', false);\n}), _defineProperty(_destroyHooks, _modelsTypes.MARKUP_SECTION_TYPE, function (renderNode, section) {\n removeRenderNodeSectionFromParent(renderNode, section);\n removeRenderNodeElementFromParent(renderNode);\n}), _defineProperty(_destroyHooks, _modelsTypes.LIST_SECTION_TYPE, function (renderNode, section) {\n removeRenderNodeSectionFromParent(renderNode, section);\n removeRenderNodeElementFromParent(renderNode);\n}), _defineProperty(_destroyHooks, _modelsTypes.LIST_ITEM_TYPE, function (renderNode, li) {\n removeRenderNodeSectionFromParent(renderNode, li);\n removeRenderNodeElementFromParent(renderNode);\n}), _defineProperty(_destroyHooks, _modelsTypes.MARKER_TYPE, function (renderNode, marker) {\n // FIXME before we render marker, should delete previous renderNode's element\n // and up until the next marker element\n\n // If an atom throws during render we may end up later destroying a renderNode\n // that has not rendered yet, so exit early here if so.\n if (!renderNode.isRendered) {\n return;\n }\n var markupElement = renderNode.markupElement;\n\n if (marker.section) {\n marker.section.markers.remove(marker);\n }\n\n if (markupElement.parentNode) {\n // if no parentNode, the browser already removed this element\n markupElement.parentNode.removeChild(markupElement);\n }\n}), _defineProperty(_destroyHooks, _modelsTypes.IMAGE_SECTION_TYPE, function (renderNode, section) {\n removeRenderNodeSectionFromParent(renderNode, section);\n removeRenderNodeElementFromParent(renderNode);\n}), _defineProperty(_destroyHooks, _modelsTypes.CARD_TYPE, function (renderNode, section) {\n if (renderNode.cardNode) {\n renderNode.cardNode.teardown();\n }\n removeRenderNodeSectionFromParent(renderNode, section);\n removeRenderNodeElementFromParent(renderNode);\n}), _defineProperty(_destroyHooks, _modelsTypes.ATOM_TYPE, function (renderNode, atom) {\n if (renderNode.atomNode) {\n renderNode.atomNode.teardown();\n }\n\n // an atom is a kind of marker so just call its destroy hook vs copying here\n destroyHooks[_modelsTypes.MARKER_TYPE](renderNode, atom);\n}), _destroyHooks);\n\n// removes children from parentNode (a RenderNode) that are scheduled for removal\nfunction removeDestroyedChildren(parentNode) {\n var forceRemoval = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n var child = parentNode.childNodes.head;\n var nextChild = undefined,\n method = undefined;\n while (child) {\n nextChild = child.next;\n if (child.isRemoved || forceRemoval) {\n removeDestroyedChildren(child, true);\n method = child.postNode.type;\n (0, _utilsAssert['default'])('editor-dom cannot destroy \"' + method + '\"', !!destroyHooks[method]);\n destroyHooks[method](child, child.postNode);\n parentNode.childNodes.remove(child);\n }\n child = nextChild;\n }\n}\n\n// Find an existing render node for the given postNode, or\n// create one, insert it into the tree, and return it\nfunction lookupNode(renderTree, parentNode, postNode, previousNode) {\n if (postNode.renderNode) {\n return postNode.renderNode;\n } else {\n var renderNode = renderTree.buildRenderNode(postNode);\n parentNode.childNodes.insertAfter(renderNode, previousNode);\n return renderNode;\n }\n}\n\nvar Renderer = (function () {\n function Renderer(editor, cards, atoms, unknownCardHandler, unknownAtomHandler, options) {\n _classCallCheck(this, Renderer);\n\n this.editor = editor;\n this.visitor = new Visitor(editor, cards, atoms, unknownCardHandler, unknownAtomHandler, options);\n this.nodes = [];\n this.hasRendered = false;\n }\n\n _createClass(Renderer, [{\n key: 'destroy',\n value: function destroy() {\n if (!this.hasRendered) {\n return;\n }\n var renderNode = this.renderTree.rootNode;\n var force = true;\n removeDestroyedChildren(renderNode, force);\n }\n }, {\n key: 'visit',\n value: function visit(renderTree, parentNode, postNodes) {\n var _this = this;\n\n var visitAll = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n\n var previousNode = undefined;\n postNodes.forEach(function (postNode) {\n var node = lookupNode(renderTree, parentNode, postNode, previousNode);\n if (node.isDirty || visitAll) {\n _this.nodes.push(node);\n }\n previousNode = node;\n });\n }\n }, {\n key: 'render',\n value: function render(renderTree) {\n var _this2 = this;\n\n this.hasRendered = true;\n this.renderTree = renderTree;\n var renderNode = renderTree.rootNode;\n var method = undefined,\n postNode = undefined;\n\n while (renderNode) {\n removeDestroyedChildren(renderNode);\n postNode = renderNode.postNode;\n\n method = postNode.type;\n (0, _utilsAssert['default'])('EditorDom visitor cannot handle type ' + method, !!this.visitor[method]);\n // jshint -W083\n this.visitor[method](renderNode, postNode, function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _this2.visit.apply(_this2, [renderTree].concat(args));\n });\n // jshint +W083\n renderNode.markClean();\n renderNode = this.nodes.shift();\n }\n }\n }]);\n\n return Renderer;\n})();\n\nexports['default'] = Renderer;","'use strict';\n\nvar _visitor;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _utilsCompiler = require('../../utils/compiler');\n\nvar _utilsArrayUtils = require('../../utils/array-utils');\n\nvar _modelsTypes = require('../../models/types');\n\nvar MOBILEDOC_VERSION = '0.2.0';\nexports.MOBILEDOC_VERSION = MOBILEDOC_VERSION;\nvar MOBILEDOC_MARKUP_SECTION_TYPE = 1;\nexports.MOBILEDOC_MARKUP_SECTION_TYPE = MOBILEDOC_MARKUP_SECTION_TYPE;\nvar MOBILEDOC_IMAGE_SECTION_TYPE = 2;\nexports.MOBILEDOC_IMAGE_SECTION_TYPE = MOBILEDOC_IMAGE_SECTION_TYPE;\nvar MOBILEDOC_LIST_SECTION_TYPE = 3;\nexports.MOBILEDOC_LIST_SECTION_TYPE = MOBILEDOC_LIST_SECTION_TYPE;\nvar MOBILEDOC_CARD_SECTION_TYPE = 10;\n\nexports.MOBILEDOC_CARD_SECTION_TYPE = MOBILEDOC_CARD_SECTION_TYPE;\nvar visitor = (_visitor = {}, _defineProperty(_visitor, _modelsTypes.POST_TYPE, function (node, opcodes) {\n opcodes.push(['openPost']);\n (0, _utilsCompiler.visitArray)(visitor, node.sections, opcodes);\n}), _defineProperty(_visitor, _modelsTypes.MARKUP_SECTION_TYPE, function (node, opcodes) {\n opcodes.push(['openMarkupSection', node.tagName]);\n (0, _utilsCompiler.visitArray)(visitor, node.markers, opcodes);\n}), _defineProperty(_visitor, _modelsTypes.LIST_SECTION_TYPE, function (node, opcodes) {\n opcodes.push(['openListSection', node.tagName]);\n (0, _utilsCompiler.visitArray)(visitor, node.items, opcodes);\n}), _defineProperty(_visitor, _modelsTypes.LIST_ITEM_TYPE, function (node, opcodes) {\n opcodes.push(['openListItem']);\n (0, _utilsCompiler.visitArray)(visitor, node.markers, opcodes);\n}), _defineProperty(_visitor, _modelsTypes.IMAGE_SECTION_TYPE, function (node, opcodes) {\n opcodes.push(['openImageSection', node.src]);\n}), _defineProperty(_visitor, _modelsTypes.CARD_TYPE, function (node, opcodes) {\n opcodes.push(['openCardSection', node.name, node.payload]);\n}), _defineProperty(_visitor, _modelsTypes.MARKER_TYPE, function (node, opcodes) {\n opcodes.push(['openMarker', node.closedMarkups.length, node.value]);\n (0, _utilsCompiler.visitArray)(visitor, node.openedMarkups, opcodes);\n}), _defineProperty(_visitor, _modelsTypes.MARKUP_TYPE, function (node, opcodes) {\n opcodes.push(['openMarkup', node.tagName, (0, _utilsArrayUtils.objectToSortedKVArray)(node.attributes)]);\n}), _visitor);\n\nvar postOpcodeCompiler = {\n openMarker: function openMarker(closeCount, value) {\n this.markupMarkerIds = [];\n this.markers.push([this.markupMarkerIds, closeCount, value || '']);\n },\n openMarkupSection: function openMarkupSection(tagName) {\n this.markers = [];\n this.sections.push([MOBILEDOC_MARKUP_SECTION_TYPE, tagName, this.markers]);\n },\n openListSection: function openListSection(tagName) {\n this.items = [];\n this.sections.push([MOBILEDOC_LIST_SECTION_TYPE, tagName, this.items]);\n },\n openListItem: function openListItem() {\n this.markers = [];\n this.items.push(this.markers);\n },\n openImageSection: function openImageSection(url) {\n this.sections.push([MOBILEDOC_IMAGE_SECTION_TYPE, url]);\n },\n openCardSection: function openCardSection(name, payload) {\n this.sections.push([MOBILEDOC_CARD_SECTION_TYPE, name, payload]);\n },\n openPost: function openPost() {\n this.markerTypes = [];\n this.sections = [];\n this.result = {\n version: MOBILEDOC_VERSION,\n sections: [this.markerTypes, this.sections]\n };\n },\n openMarkup: function openMarkup(tagName, attributes) {\n var index = this._findOrAddMarkerTypeIndex(tagName, attributes);\n this.markupMarkerIds.push(index);\n },\n _findOrAddMarkerTypeIndex: function _findOrAddMarkerTypeIndex(tagName, attributesArray) {\n if (!this._markerTypeCache) {\n this._markerTypeCache = {};\n }\n var key = tagName + '-' + attributesArray.join('-');\n\n var index = this._markerTypeCache[key];\n if (index === undefined) {\n var markerType = [tagName];\n if (attributesArray.length) {\n markerType.push(attributesArray);\n }\n this.markerTypes.push(markerType);\n\n index = this.markerTypes.length - 1;\n this._markerTypeCache[key] = index;\n }\n\n return index;\n }\n};\n\n/**\n * Render from post -> mobiledoc\n */\nexports['default'] = {\n /**\n * @param {Post}\n * @return {Mobiledoc}\n */\n render: function render(post) {\n var opcodes = [];\n (0, _utilsCompiler.visit)(visitor, post, opcodes);\n var compiler = Object.create(postOpcodeCompiler);\n (0, _utilsCompiler.compile)(compiler, opcodes);\n return compiler.result;\n }\n};","'use strict';\n\nvar _visitor;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _utilsCompiler = require('../../utils/compiler');\n\nvar _utilsArrayUtils = require('../../utils/array-utils');\n\nvar _modelsTypes = require('../../models/types');\n\nvar MOBILEDOC_VERSION = '0.3.0';\nexports.MOBILEDOC_VERSION = MOBILEDOC_VERSION;\nvar MOBILEDOC_MARKUP_SECTION_TYPE = 1;\nexports.MOBILEDOC_MARKUP_SECTION_TYPE = MOBILEDOC_MARKUP_SECTION_TYPE;\nvar MOBILEDOC_IMAGE_SECTION_TYPE = 2;\nexports.MOBILEDOC_IMAGE_SECTION_TYPE = MOBILEDOC_IMAGE_SECTION_TYPE;\nvar MOBILEDOC_LIST_SECTION_TYPE = 3;\nexports.MOBILEDOC_LIST_SECTION_TYPE = MOBILEDOC_LIST_SECTION_TYPE;\nvar MOBILEDOC_CARD_SECTION_TYPE = 10;\n\nexports.MOBILEDOC_CARD_SECTION_TYPE = MOBILEDOC_CARD_SECTION_TYPE;\nvar MOBILEDOC_MARKUP_MARKER_TYPE = 0;\nexports.MOBILEDOC_MARKUP_MARKER_TYPE = MOBILEDOC_MARKUP_MARKER_TYPE;\nvar MOBILEDOC_ATOM_MARKER_TYPE = 1;\n\nexports.MOBILEDOC_ATOM_MARKER_TYPE = MOBILEDOC_ATOM_MARKER_TYPE;\nvar visitor = (_visitor = {}, _defineProperty(_visitor, _modelsTypes.POST_TYPE, function (node, opcodes) {\n opcodes.push(['openPost']);\n (0, _utilsCompiler.visitArray)(visitor, node.sections, opcodes);\n}), _defineProperty(_visitor, _modelsTypes.MARKUP_SECTION_TYPE, function (node, opcodes) {\n opcodes.push(['openMarkupSection', node.tagName]);\n (0, _utilsCompiler.visitArray)(visitor, node.markers, opcodes);\n}), _defineProperty(_visitor, _modelsTypes.LIST_SECTION_TYPE, function (node, opcodes) {\n opcodes.push(['openListSection', node.tagName]);\n (0, _utilsCompiler.visitArray)(visitor, node.items, opcodes);\n}), _defineProperty(_visitor, _modelsTypes.LIST_ITEM_TYPE, function (node, opcodes) {\n opcodes.push(['openListItem']);\n (0, _utilsCompiler.visitArray)(visitor, node.markers, opcodes);\n}), _defineProperty(_visitor, _modelsTypes.IMAGE_SECTION_TYPE, function (node, opcodes) {\n opcodes.push(['openImageSection', node.src]);\n}), _defineProperty(_visitor, _modelsTypes.CARD_TYPE, function (node, opcodes) {\n opcodes.push(['openCardSection', node.name, node.payload]);\n}), _defineProperty(_visitor, _modelsTypes.MARKER_TYPE, function (node, opcodes) {\n opcodes.push(['openMarker', node.closedMarkups.length, node.value]);\n (0, _utilsCompiler.visitArray)(visitor, node.openedMarkups, opcodes);\n}), _defineProperty(_visitor, _modelsTypes.MARKUP_TYPE, function (node, opcodes) {\n opcodes.push(['openMarkup', node.tagName, (0, _utilsArrayUtils.objectToSortedKVArray)(node.attributes)]);\n}), _defineProperty(_visitor, _modelsTypes.ATOM_TYPE, function (node, opcodes) {\n opcodes.push(['openAtom', node.closedMarkups.length, node.name, node.value, node.payload]);\n (0, _utilsCompiler.visitArray)(visitor, node.openedMarkups, opcodes);\n}), _visitor);\n\nvar postOpcodeCompiler = {\n openMarker: function openMarker(closeCount, value) {\n this.markupMarkerIds = [];\n this.markers.push([MOBILEDOC_MARKUP_MARKER_TYPE, this.markupMarkerIds, closeCount, value || '']);\n },\n openMarkupSection: function openMarkupSection(tagName) {\n this.markers = [];\n this.sections.push([MOBILEDOC_MARKUP_SECTION_TYPE, tagName, this.markers]);\n },\n openListSection: function openListSection(tagName) {\n this.items = [];\n this.sections.push([MOBILEDOC_LIST_SECTION_TYPE, tagName, this.items]);\n },\n openListItem: function openListItem() {\n this.markers = [];\n this.items.push(this.markers);\n },\n openImageSection: function openImageSection(url) {\n this.sections.push([MOBILEDOC_IMAGE_SECTION_TYPE, url]);\n },\n openCardSection: function openCardSection(name, payload) {\n var index = this._addCardTypeIndex(name, payload);\n this.sections.push([MOBILEDOC_CARD_SECTION_TYPE, index]);\n },\n openAtom: function openAtom(closeCount, name, value, payload) {\n var index = this._addAtomTypeIndex(name, value, payload);\n this.markupMarkerIds = [];\n this.markers.push([MOBILEDOC_ATOM_MARKER_TYPE, this.markupMarkerIds, closeCount, index]);\n },\n openPost: function openPost() {\n this.atomTypes = [];\n this.cardTypes = [];\n this.markerTypes = [];\n this.sections = [];\n this.result = {\n version: MOBILEDOC_VERSION,\n atoms: this.atomTypes,\n cards: this.cardTypes,\n markups: this.markerTypes,\n sections: this.sections\n };\n },\n openMarkup: function openMarkup(tagName, attributes) {\n var index = this._findOrAddMarkerTypeIndex(tagName, attributes);\n this.markupMarkerIds.push(index);\n },\n _addCardTypeIndex: function _addCardTypeIndex(cardName, payload) {\n var cardType = [cardName, payload];\n this.cardTypes.push(cardType);\n return this.cardTypes.length - 1;\n },\n _addAtomTypeIndex: function _addAtomTypeIndex(atomName, atomValue, payload) {\n var atomType = [atomName, atomValue, payload];\n this.atomTypes.push(atomType);\n return this.atomTypes.length - 1;\n },\n _findOrAddMarkerTypeIndex: function _findOrAddMarkerTypeIndex(tagName, attributesArray) {\n if (!this._markerTypeCache) {\n this._markerTypeCache = {};\n }\n var key = tagName + '-' + attributesArray.join('-');\n\n var index = this._markerTypeCache[key];\n if (index === undefined) {\n var markerType = [tagName];\n if (attributesArray.length) {\n markerType.push(attributesArray);\n }\n this.markerTypes.push(markerType);\n\n index = this.markerTypes.length - 1;\n this._markerTypeCache[key] = index;\n }\n\n return index;\n }\n};\n\n/**\n * Render from post -> mobiledoc\n */\nexports['default'] = {\n /**\n * @param {Post}\n * @return {Mobiledoc}\n */\n render: function render(post) {\n var opcodes = [];\n (0, _utilsCompiler.visit)(visitor, post, opcodes);\n var compiler = Object.create(postOpcodeCompiler);\n (0, _utilsCompiler.compile)(compiler, opcodes);\n return compiler.result;\n }\n};","'use strict';\n\nvar _ = require('./0-2');\n\nvar _2 = require('./0-3');\n\nvar _utilsAssert = require('../../utils/assert');\n\nvar MOBILEDOC_VERSION = _2.MOBILEDOC_VERSION;\n\nexports.MOBILEDOC_VERSION = MOBILEDOC_VERSION;\nexports['default'] = {\n render: function render(post, version) {\n switch (version) {\n case _.MOBILEDOC_VERSION:\n return _['default'].render(post);\n case undefined:\n case null:\n case _2.MOBILEDOC_VERSION:\n return _2['default'].render(post);\n default:\n (0, _utilsAssert['default'])('Unknown version of mobiledoc renderer requested: ' + version, false);\n }\n }\n};","\"use strict\";\n\nfunction detect(enumerable, callback) {\n if (enumerable.detect) {\n return enumerable.detect(callback);\n } else {\n for (var i = 0; i < enumerable.length; i++) {\n if (callback(enumerable[i])) {\n return enumerable[i];\n }\n }\n }\n}\n\nfunction any(enumerable, callback) {\n if (enumerable.any) {\n return enumerable.any(callback);\n }\n\n for (var i = 0; i < enumerable.length; i++) {\n if (callback(enumerable[i])) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction every(enumerable, callback) {\n if (enumerable.every) {\n return enumerable.every(callback);\n }\n\n for (var i = 0; i < enumerable.length; i++) {\n if (!callback(enumerable[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction toArray(arrayLike) {\n return Array.prototype.slice.call(arrayLike);\n}\n\n/**\n * Useful for array-like things that aren't\n * actually arrays, like NodeList\n * @private\n */\nfunction forEach(enumerable, callback) {\n if (enumerable.forEach) {\n enumerable.forEach(callback);\n } else {\n for (var i = 0; i < enumerable.length; i++) {\n callback(enumerable[i], i);\n }\n }\n}\n\nfunction filter(enumerable, conditionFn) {\n var filtered = [];\n forEach(enumerable, function (i) {\n if (conditionFn(i)) {\n filtered.push(i);\n }\n });\n return filtered;\n}\n\n/**\n * @return {Integer} the number of items that are the same, starting from the 0th index, in a and b\n * @private\n */\nfunction commonItemLength(listA, listB) {\n var offset = 0;\n while (offset < listA.length && offset < listB.length) {\n if (listA[offset] !== listB[offset]) {\n break;\n }\n offset++;\n }\n return offset;\n}\n\n/**\n * @return {Array} the items that are the same, starting from the 0th index, in a and b\n * @private\n */\nfunction commonItems(listA, listB) {\n var offset = 0;\n while (offset < listA.length && offset < listB.length) {\n if (listA[offset] !== listB[offset]) {\n break;\n }\n offset++;\n }\n return listA.slice(0, offset);\n}\n\n// return new array without falsy items like ruby's `compact`\nfunction compact(enumerable) {\n return filter(enumerable, function (i) {\n return !!i;\n });\n}\n\nfunction reduce(enumerable, callback, initialValue) {\n var previousValue = initialValue;\n forEach(enumerable, function (val, index) {\n previousValue = callback(previousValue, val, index);\n });\n return previousValue;\n}\n\n/**\n * @param {Array} array of key1,value1,key2,value2,...\n * @return {Object} {key1:value1, key2:value2, ...}\n * @private\n */\nfunction kvArrayToObject(array) {\n var obj = {};\n for (var i = 0; i < array.length; i += 2) {\n var key = array[i];\n var value = array[i + 1];\n\n obj[key] = value;\n }\n return obj;\n}\n\nfunction objectToSortedKVArray(obj) {\n var keys = Object.keys(obj).sort();\n var result = [];\n keys.forEach(function (k) {\n result.push(k);\n result.push(obj[k]);\n });\n return result;\n}\n\n// check shallow equality of two non-nested arrays\nfunction isArrayEqual(arr1, arr2) {\n var l1 = arr1.length,\n l2 = arr2.length;\n if (l1 !== l2) {\n return false;\n }\n\n for (var i = 0; i < l1; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\n// return an object with only the valid keys\nfunction filterObject(object) {\n var validKeys = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];\n\n var result = {};\n forEach(filter(Object.keys(object), function (key) {\n return validKeys.indexOf(key) !== -1;\n }), function (key) {\n return result[key] = object[key];\n });\n return result;\n}\n\nfunction contains(array, item) {\n return array.indexOf(item) !== -1;\n}\n\nfunction values(object) {\n return Object.keys(object).map(function (key) {\n return object[key];\n });\n}\n\nexports.detect = detect;\nexports.forEach = forEach;\nexports.any = any;\nexports.every = every;\nexports.filter = filter;\nexports.commonItemLength = commonItemLength;\nexports.commonItems = commonItems;\nexports.compact = compact;\nexports.reduce = reduce;\nexports.objectToSortedKVArray = objectToSortedKVArray;\nexports.kvArrayToObject = kvArrayToObject;\nexports.isArrayEqual = isArrayEqual;\nexports.toArray = toArray;\nexports.filterObject = filterObject;\nexports.contains = contains;\nexports.values = values;","'use strict';\n\nvar _mobiledocError = require('./mobiledoc-error');\n\nexports['default'] = function (message, conditional) {\n if (!conditional) {\n throw new _mobiledocError['default'](message);\n }\n};","'use strict';\n\nexports['default'] = {\n isMac: function isMac() {\n return typeof window !== 'undefined' && window.navigator && /Mac/.test(window.navigator.platform);\n },\n isWin: function isWin() {\n return typeof window !== 'undefined' && window.navigator && /Win/.test(window.navigator.platform);\n }\n};","'use strict';\n\nvar TAB = '\\t';\nexports.TAB = TAB;\nvar ENTER = '\\n';\nexports.ENTER = ENTER;\nvar SPACE = ' ';\nexports.SPACE = SPACE;","'use strict';\n\nexports.visit = visit;\nexports.compile = compile;\nexports.visitArray = visitArray;\n\nfunction _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }\n\nvar _arrayUtils = require('./array-utils');\n\nvar _assert = require('./assert');\n\nfunction visit(visitor, node, opcodes) {\n var method = node.type;\n (0, _assert['default'])('Cannot visit unknown type ' + method, !!visitor[method]);\n visitor[method](node, opcodes);\n}\n\nfunction compile(compiler, opcodes) {\n for (var i = 0, l = opcodes.length; i < l; i++) {\n var _opcodes$i = _toArray(opcodes[i]);\n\n var method = _opcodes$i[0];\n\n var params = _opcodes$i.slice(1);\n\n var _length = params.length;\n if (_length === 0) {\n compiler[method].call(compiler);\n } else if (_length === 1) {\n compiler[method].call(compiler, params[0]);\n } else if (_length === 2) {\n compiler[method].call(compiler, params[0], params[1]);\n } else {\n compiler[method].apply(compiler, params);\n }\n }\n}\n\nfunction visitArray(visitor, nodes, opcodes) {\n if (!nodes || nodes.length === 0) {\n return;\n }\n (0, _arrayUtils.forEach)(nodes, function (node) {\n visit(visitor, node, opcodes);\n });\n}","\"use strict\";\n\nfunction shallowCopyObject(object) {\n var copy = {};\n Object.keys(object).forEach(function (key) {\n copy[key] = object[key];\n });\n return copy;\n}\n\nexports.shallowCopyObject = shallowCopyObject;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _utilsSelectionUtils = require('../utils/selection-utils');\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nvar _cursorPosition = require('./cursor/position');\n\nvar _cursorRange = require('./cursor/range');\n\nvar _utilsKey = require('../utils/key');\n\nexports.Position = _cursorPosition['default'];\nexports.Range = _cursorRange['default'];\n\nvar Cursor = (function () {\n function Cursor(editor) {\n _classCallCheck(this, Cursor);\n\n this.editor = editor;\n this.renderTree = editor._renderTree;\n this.post = editor.post;\n }\n\n _createClass(Cursor, [{\n key: 'clearSelection',\n value: function clearSelection() {\n (0, _utilsSelectionUtils.clearSelection)();\n }\n\n /**\n * @return {Boolean} true when there is either a collapsed cursor in the\n * editor's element or a selection that is contained in the editor's element\n */\n }, {\n key: 'hasCursor',\n value: function hasCursor() {\n return this.editor.hasRendered && (this._hasCollapsedSelection() || this._hasSelection());\n }\n }, {\n key: 'hasSelection',\n value: function hasSelection() {\n return this.editor.hasRendered && this._hasSelection();\n }\n\n /**\n * @return {Boolean} Can the cursor be on this element?\n */\n }, {\n key: 'isAddressable',\n value: function isAddressable(element) {\n var renderTree = this.renderTree;\n\n var renderNode = renderTree.findRenderNodeFromElement(element);\n if (renderNode && renderNode.postNode.isCardSection) {\n var renderedElement = renderNode.element;\n\n // card sections have addressable text nodes containing ‌\n // as their first and last child\n if (element !== renderedElement && element !== renderedElement.firstChild && element !== renderedElement.lastChild) {\n return false;\n }\n }\n\n return !!renderNode;\n }\n\n /*\n * @return {Range} Cursor#Range object\n */\n }, {\n key: '_findNodeForPosition',\n value: function _findNodeForPosition(position) {\n var section = position.section;\n\n var node = undefined,\n offset = undefined;\n if (section.isCardSection) {\n offset = 0;\n if (position.offset === 0) {\n node = section.renderNode.element.firstChild;\n } else {\n node = section.renderNode.element.lastChild;\n }\n } else if (section.isBlank) {\n node = section.renderNode.cursorElement;\n offset = 0;\n } else {\n var marker = position.marker;\n var offsetInMarker = position.offsetInMarker;\n\n if (marker.isAtom) {\n if (offsetInMarker > 0) {\n // FIXME -- if there is a next marker, focus on it?\n offset = 0;\n node = marker.renderNode.tailTextNode;\n } else {\n offset = 0;\n node = marker.renderNode.headTextNode;\n }\n } else {\n node = marker.renderNode.element;\n offset = offsetInMarker;\n }\n }\n\n return { node: node, offset: offset };\n }\n }, {\n key: 'selectRange',\n value: function selectRange(range) {\n if (range.isBlank) {\n this.clearSelection();\n return;\n }\n\n var head = range.head;\n var tail = range.tail;\n var direction = range.direction;\n\n var _findNodeForPosition2 = this._findNodeForPosition(head);\n\n var headNode = _findNodeForPosition2.node;\n var headOffset = _findNodeForPosition2.offset;\n\n var _findNodeForPosition3 = this._findNodeForPosition(tail);\n\n var tailNode = _findNodeForPosition3.node;\n var tailOffset = _findNodeForPosition3.offset;\n\n this._moveToNode(headNode, headOffset, tailNode, tailOffset, direction);\n\n // Firefox sometimes doesn't keep focus in the editor after adding a card\n this.editor._ensureFocus();\n }\n }, {\n key: 'selectedText',\n value: function selectedText() {\n // FIXME remove this\n return this.selection.toString();\n }\n\n /**\n * @param {textNode} node\n * @param {integer} offset\n * @param {textNode} endNode\n * @param {integer} endOffset\n * @param {integer} direction forward or backward, default forward\n * @private\n */\n }, {\n key: '_moveToNode',\n value: function _moveToNode(node, offset, endNode, endOffset) {\n var direction = arguments.length <= 4 || arguments[4] === undefined ? _utilsKey.DIRECTION.FORWARD : arguments[4];\n\n this.clearSelection();\n\n if (direction === _utilsKey.DIRECTION.BACKWARD) {\n var _ref = [endNode, endOffset, node, offset];\n node = _ref[0];\n offset = _ref[1];\n endNode = _ref[2];\n endOffset = _ref[3];\n }\n\n var range = document.createRange();\n range.setStart(node, offset);\n if (direction === _utilsKey.DIRECTION.BACKWARD && !!this.selection.extend) {\n this.selection.addRange(range);\n this.selection.extend(endNode, endOffset);\n } else {\n range.setEnd(endNode, endOffset);\n this.selection.addRange(range);\n }\n }\n }, {\n key: '_hasSelection',\n value: function _hasSelection() {\n var element = this.editor.element;\n var _selectionRange = this._selectionRange;\n\n if (!_selectionRange || _selectionRange.collapsed) {\n return false;\n }\n\n return (0, _utilsDomUtils.containsNode)(element, this.selection.anchorNode) && (0, _utilsDomUtils.containsNode)(element, this.selection.focusNode);\n }\n }, {\n key: '_hasCollapsedSelection',\n value: function _hasCollapsedSelection() {\n var _selectionRange = this._selectionRange;\n\n if (!_selectionRange) {\n return false;\n }\n\n var element = this.editor.element;\n return (0, _utilsDomUtils.containsNode)(element, this.selection.anchorNode);\n }\n }, {\n key: 'offsets',\n get: function get() {\n if (!this.hasCursor()) {\n return _cursorRange['default'].blankRange();\n }\n\n var selection = this.selection;\n var renderTree = this.renderTree;\n\n var _comparePosition = (0, _utilsSelectionUtils.comparePosition)(selection);\n\n var headNode = _comparePosition.headNode;\n var headOffset = _comparePosition.headOffset;\n var tailNode = _comparePosition.tailNode;\n var tailOffset = _comparePosition.tailOffset;\n var direction = _comparePosition.direction;\n\n var headPosition = _cursorPosition['default'].fromNode(renderTree, headNode, headOffset);\n var tailPosition = _cursorPosition['default'].fromNode(renderTree, tailNode, tailOffset);\n\n return new _cursorRange['default'](headPosition, tailPosition, direction);\n }\n }, {\n key: 'selection',\n get: function get() {\n return window.getSelection();\n }\n }, {\n key: '_selectionRange',\n get: function get() {\n var selection = this.selection;\n\n if (selection.rangeCount === 0) {\n return null;\n }\n return selection.getRangeAt(0);\n }\n }]);\n\n return Cursor;\n})();\n\nexports['default'] = Cursor;","'use strict';\n\nvar _get = function get(_x4, _x5, _x6) { var _again = true; _function: while (_again) { var object = _x4, property = _x5, receiver = _x6; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x4 = parent; _x5 = property; _x6 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _utilsDomUtils = require('../../utils/dom-utils');\n\nvar _utilsAssert = require('../../utils/assert');\n\nvar _modelsMarker = require('../../models/marker');\n\nvar _utilsSelectionUtils = require('../../utils/selection-utils');\n\nvar _utilsKey = require('../../utils/key');\n\nvar _range = require('./range');\n\nvar FORWARD = _utilsKey.DIRECTION.FORWARD;\nvar BACKWARD = _utilsKey.DIRECTION.BACKWARD;\n\nvar WORD_CHAR_REGEX = /\\w|_|:/;\n\nfunction findParentSectionFromNode(renderTree, node) {\n var renderNode = renderTree.findRenderNodeFromElement(node, function (renderNode) {\n return renderNode.postNode.isSection;\n });\n\n return renderNode && renderNode.postNode;\n}\n\nfunction findOffsetInMarkerable(markerable, node, offset) {\n var offsetInSection = 0;\n var marker = markerable.markers.head;\n while (marker) {\n var markerNode = marker.renderNode.element;\n if (markerNode === node) {\n return offsetInSection + offset;\n } else if (marker.isAtom) {\n if (marker.renderNode.headTextNode === node) {\n return offsetInSection;\n } else if (marker.renderNode.tailTextNode === node) {\n return offsetInSection + 1;\n }\n }\n\n offsetInSection += marker.length;\n marker = marker.next;\n }\n\n return offsetInSection;\n}\n\nfunction findOffsetInSection(section, node, offset) {\n if (section.isMarkerable) {\n return findOffsetInMarkerable(section, node, offset);\n } else {\n (0, _utilsAssert['default'])('findOffsetInSection must be called with markerable or card section', section.isCardSection);\n\n var wrapperNode = section.renderNode.element;\n var endTextNode = wrapperNode.lastChild;\n if (node === endTextNode) {\n return 1;\n }\n return 0;\n }\n}\n\nvar Position = undefined,\n BlankPosition = undefined;\n\nPosition = (function () {\n /**\n * A position is a logical location (zero-width, or \"collapsed\") in a post,\n * typically between two characters in a section.\n * Two positions (a head and a tail) make up a {@link Range}.\n * @constructor\n */\n\n function Position(section) {\n var offset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n var isBlank = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n _classCallCheck(this, Position);\n\n if (!isBlank) {\n (0, _utilsAssert['default'])('Position must have a section that is addressable by the cursor', section && section.isLeafSection);\n (0, _utilsAssert['default'])('Position must have numeric offset', typeof offset === 'number');\n }\n\n this.section = section;\n this.offset = offset;\n this.isBlank = isBlank;\n }\n\n /**\n * @param {integer} x x-position in current viewport\n * @param {integer} y y-position in current viewport\n * @param {Editor} editor\n * @return {Position|null}\n */\n\n _createClass(Position, [{\n key: 'toRange',\n\n /**\n * Returns a range from this position to the given tail. If no explicit\n * tail is given this returns a collapsed range focused on this position.\n * @param {Position} [tail=this] The ending position\n * @return {Range}\n * @public\n */\n value: function toRange() {\n var tail = arguments.length <= 0 || arguments[0] === undefined ? this : arguments[0];\n\n return new _range['default'](this, tail);\n }\n }, {\n key: 'markerIn',\n\n /**\n * Returns the marker in `direction` from this position.\n * If the position is in the middle of a marker, the direction is irrelevant.\n * Otherwise, if the position is at a boundary between two markers, returns the\n * marker to the left if `direction` === BACKWARD and the marker to the right\n * if `direction` === FORWARD (assuming left-to-right text direction).\n * @param {Direction}\n * @return {Marker|undefined}\n */\n value: function markerIn(direction) {\n if (!this.isMarkerable) {\n return;\n }\n\n var marker = this.marker;\n var offsetInMarker = this.offsetInMarker;\n\n if (!marker) {\n return;\n }\n\n if (offsetInMarker > 0 && offsetInMarker < marker.length) {\n return marker;\n } else if (offsetInMarker === 0) {\n return direction === BACKWARD ? marker : marker.prev;\n } else if (offsetInMarker === marker.length) {\n return direction === FORWARD ? marker.next : marker;\n }\n }\n }, {\n key: 'isEqual',\n value: function isEqual(position) {\n return this.section === position.section && this.offset === position.offset;\n }\n\n /**\n * @return {Boolean} If this position is at the head of the post\n */\n }, {\n key: 'isHeadOfPost',\n value: function isHeadOfPost() {\n return this.move(BACKWARD).isEqual(this);\n }\n\n /**\n * @return {Boolean} If this position is at the tail of the post\n */\n }, {\n key: 'isTailOfPost',\n value: function isTailOfPost() {\n return this.move(FORWARD).isEqual(this);\n }\n\n /**\n * @return {Boolean} If this position is at the head of its section\n */\n }, {\n key: 'isHead',\n value: function isHead() {\n return this.isEqual(this.section.headPosition());\n }\n\n /**\n * @return {Boolean} If this position is at the head of its section\n */\n }, {\n key: 'isTail',\n value: function isTail() {\n return this.isEqual(this.section.tailPosition());\n }\n\n /**\n * Move the position 1 unit in `direction`.\n *\n * @param {Number} units to move. > 0 moves right, < 0 moves left\n * @return {Position} Return a new position one unit in the given\n * direction. If the position is moving left and at the beginning of the post,\n * the same position will be returned. Same if the position is moving right and\n * at the end of the post.\n */\n }, {\n key: 'move',\n value: function move(units) {\n (0, _utilsAssert['default'])('Must pass integer to Position#move', typeof units === 'number');\n\n if (units < 0) {\n return this.moveLeft().move(++units);\n } else if (units > 0) {\n return this.moveRight().move(--units);\n } else {\n return this;\n }\n }\n\n /**\n * @param {Number} direction (FORWARD or BACKWARD)\n * @return {Position} The result of moving 1 \"word\" unit in `direction`\n */\n }, {\n key: 'moveWord',\n value: function moveWord(direction) {\n var isPostBoundary = direction === BACKWARD ? this.isHeadOfPost() : this.isTailOfPost();\n if (isPostBoundary) {\n return this;\n }\n\n if (!this.isMarkerable) {\n return this.move(direction);\n }\n\n var pos = this;\n\n // Helper fn to check if the pos is at the `dir` boundary of its section\n var isBoundary = function isBoundary(pos, dir) {\n return dir === BACKWARD ? pos.isHead() : pos.isTail();\n };\n // Get the char at this position (looking forward/right)\n var getChar = function getChar(pos) {\n var marker = pos.marker;\n var offsetInMarker = pos.offsetInMarker;\n\n return marker.charAt(offsetInMarker);\n };\n // Get the char in `dir` at this position\n var peekChar = function peekChar(pos, dir) {\n return dir === BACKWARD ? getChar(pos.move(BACKWARD)) : getChar(pos);\n };\n // Whether there is an atom in `dir` from this position\n var isAtom = function isAtom(pos, dir) {\n // Special case when position is at end, the marker associated with it is\n // the marker to its left. Normally `pos#marker` is the marker to the right of the pos's offset.\n if (dir === BACKWARD && pos.isTail() && pos.marker.isAtom) {\n return true;\n }\n return dir === BACKWARD ? pos.move(BACKWARD).marker.isAtom : pos.marker.isAtom;\n };\n\n if (isBoundary(pos, direction)) {\n // extend movement into prev/next section\n return pos.move(direction).moveWord(direction);\n }\n\n var seekWord = function seekWord(pos) {\n return !isBoundary(pos, direction) && !isAtom(pos, direction) && !WORD_CHAR_REGEX.test(peekChar(pos, direction));\n };\n\n // move(dir) while we are seeking the first word char\n while (seekWord(pos)) {\n pos = pos.move(direction);\n }\n\n if (isAtom(pos, direction)) {\n return pos.move(direction);\n }\n\n var seekBoundary = function seekBoundary(pos) {\n return !isBoundary(pos, direction) && !isAtom(pos, direction) && WORD_CHAR_REGEX.test(peekChar(pos, direction));\n };\n\n // move(dir) while we are seeking the first boundary position\n while (seekBoundary(pos)) {\n pos = pos.move(direction);\n }\n\n return pos;\n }\n\n /**\n * The position to the left of this position.\n * If this position is the post's headPosition it returns itself.\n * @return {Position}\n * @private\n */\n }, {\n key: 'moveLeft',\n value: function moveLeft() {\n if (this.isHead()) {\n var prev = this.section.previousLeafSection();\n return prev ? prev.tailPosition() : this;\n } else {\n var offset = this.offset - 1;\n if (this.isMarkerable && this.marker) {\n var code = this.marker.value.charCodeAt(offset);\n if (code >= _modelsMarker.LOW_SURROGATE_RANGE[0] && code <= _modelsMarker.LOW_SURROGATE_RANGE[1]) {\n offset = offset - 1;\n }\n }\n return new Position(this.section, offset);\n }\n }\n\n /**\n * The position to the right of this position.\n * If this position is the post's tailPosition it returns itself.\n * @return {Position}\n * @private\n */\n }, {\n key: 'moveRight',\n value: function moveRight() {\n if (this.isTail()) {\n var next = this.section.nextLeafSection();\n return next ? next.headPosition() : this;\n } else {\n var offset = this.offset + 1;\n if (this.isMarkerable && this.marker) {\n var code = this.marker.value.charCodeAt(offset - 1);\n if (code >= _modelsMarker.HIGH_SURROGATE_RANGE[0] && code <= _modelsMarker.HIGH_SURROGATE_RANGE[1]) {\n offset = offset + 1;\n }\n }\n return new Position(this.section, offset);\n }\n }\n }, {\n key: 'leafSectionIndex',\n get: function get() {\n var _this = this;\n\n var post = this.section.post;\n var leafSectionIndex = undefined;\n post.walkAllLeafSections(function (section, index) {\n if (section === _this.section) {\n leafSectionIndex = index;\n }\n });\n return leafSectionIndex;\n }\n }, {\n key: 'isMarkerable',\n get: function get() {\n return this.section && this.section.isMarkerable;\n }\n\n /**\n * Returns the marker at this position, in the backward direction\n * (i.e., the marker to the left of the cursor if the cursor is on a marker boundary and text is left-to-right)\n * @return {Marker|undefined}\n */\n }, {\n key: 'marker',\n get: function get() {\n return this.isMarkerable && this.markerPosition.marker;\n }\n }, {\n key: 'offsetInMarker',\n get: function get() {\n return this.markerPosition.offset;\n }\n }, {\n key: 'markerPosition',\n\n /**\n * @private\n */\n get: function get() {\n (0, _utilsAssert['default'])('Cannot get markerPosition without a section', !!this.section);\n (0, _utilsAssert['default'])('cannot get markerPosition of a non-markerable', !!this.section.isMarkerable);\n return this.section.markerPositionAtOffset(this.offset);\n }\n }], [{\n key: 'atPoint',\n value: function atPoint(x, y, editor) {\n var _renderTree = editor._renderTree;\n var rootElement = editor.element;\n\n var elementFromPoint = document.elementFromPoint(x, y);\n if (!(0, _utilsDomUtils.containsNode)(rootElement, elementFromPoint)) {\n return;\n }\n\n var _findOffsetInNode = (0, _utilsSelectionUtils.findOffsetInNode)(elementFromPoint, { left: x, top: y });\n\n var node = _findOffsetInNode.node;\n var offset = _findOffsetInNode.offset;\n\n return Position.fromNode(_renderTree, node, offset);\n }\n }, {\n key: 'blankPosition',\n value: function blankPosition() {\n return new BlankPosition();\n }\n }, {\n key: 'fromNode',\n value: function fromNode(renderTree, node, offset) {\n if ((0, _utilsDomUtils.isTextNode)(node)) {\n return Position.fromTextNode(renderTree, node, offset);\n } else {\n return Position.fromElementNode(renderTree, node, offset);\n }\n }\n }, {\n key: 'fromTextNode',\n value: function fromTextNode(renderTree, textNode, offsetInNode) {\n var renderNode = renderTree.getElementRenderNode(textNode);\n var section = undefined,\n offsetInSection = undefined;\n\n if (renderNode) {\n var marker = renderNode.postNode;\n section = marker.section;\n\n (0, _utilsAssert['default'])('Could not find parent section for mapped text node \"' + textNode.textContent + '\"', !!section);\n offsetInSection = section.offsetOfMarker(marker, offsetInNode);\n } else {\n // all text nodes should be rendered by markers except:\n // * text nodes inside cards\n // * text nodes created by the browser during text input\n // both of these should have rendered parent sections, though\n section = findParentSectionFromNode(renderTree, textNode);\n (0, _utilsAssert['default'])('Could not find parent section for un-mapped text node \"' + textNode.textContent + '\"', !!section);\n\n offsetInSection = findOffsetInSection(section, textNode, offsetInNode);\n }\n\n return new Position(section, offsetInSection);\n }\n }, {\n key: 'fromElementNode',\n value: function fromElementNode(renderTree, elementNode, offset) {\n var position = undefined;\n\n // The browser may change the reported selection to equal the editor's root\n // element if the user clicks an element that is immediately removed,\n // which can happen when clicking to remove a card.\n if (elementNode === renderTree.rootElement) {\n var post = renderTree.rootNode.postNode;\n position = offset === 0 ? post.headPosition() : post.tailPosition();\n } else {\n var section = findParentSectionFromNode(renderTree, elementNode);\n (0, _utilsAssert['default'])('Could not find parent section from element node', !!section);\n\n if (section.isCardSection) {\n // Selections in cards are usually made on a text node\n // containing a ‌ on one side or the other of the card but\n // some scenarios (Firefox) will result in selecting the\n // card's wrapper div. If the offset is 2 we've selected\n // the final zwnj and should consider the cursor at the\n // end of the card (offset 1). Otherwise, the cursor is at\n // the start of the card\n position = offset < 2 ? section.headPosition() : section.tailPosition();\n } else {\n\n // In Firefox it is possible for the cursor to be on an atom's wrapper\n // element. (In Chrome/Safari, the browser corrects this to be on\n // one of the text nodes surrounding the wrapper).\n // This code corrects for when the browser reports the cursor position\n // to be on the wrapper element itself\n var renderNode = renderTree.getElementRenderNode(elementNode);\n var postNode = renderNode && renderNode.postNode;\n if (postNode && postNode.isAtom) {\n var sectionOffset = section.offsetOfMarker(postNode);\n if (offset > 1) {\n // we are on the tail side of the atom\n sectionOffset += postNode.length;\n }\n position = new Position(section, sectionOffset);\n } else {\n // The offset is 0 if the cursor is on a non-atom-wrapper element node\n // (e.g., a
tag in a blank markup section)\n position = section.headPosition();\n }\n }\n }\n\n return position;\n }\n }]);\n\n return Position;\n})();\n\nBlankPosition = (function (_Position) {\n _inherits(BlankPosition, _Position);\n\n function BlankPosition() {\n _classCallCheck(this, BlankPosition);\n\n _get(Object.getPrototypeOf(BlankPosition.prototype), 'constructor', this).call(this, null, 0, true);\n }\n\n _createClass(BlankPosition, [{\n key: 'isEqual',\n value: function isEqual(other) {\n return other && other.isBlank;\n }\n }, {\n key: 'toRange',\n value: function toRange() {\n return _range['default'].blankRange();\n }\n }, {\n key: 'isHeadOfPost',\n value: function isHeadOfPost() {\n return false;\n }\n }, {\n key: 'isTailOfPost',\n value: function isTailOfPost() {\n return false;\n }\n }, {\n key: 'isHead',\n value: function isHead() {\n return false;\n }\n }, {\n key: 'isTail',\n value: function isTail() {\n return false;\n }\n }, {\n key: 'move',\n value: function move() {\n return this;\n }\n }, {\n key: 'moveWord',\n value: function moveWord() {\n return this;\n }\n }, {\n key: 'leafSectionIndex',\n get: function get() {\n (0, _utilsAssert['default'])('must implement get leafSectionIndex', false);\n }\n }, {\n key: 'isMarkerable',\n get: function get() {\n return false;\n }\n }, {\n key: 'marker',\n get: function get() {\n return false;\n }\n }, {\n key: 'markerPosition',\n get: function get() {\n return {};\n }\n }]);\n\n return BlankPosition;\n})(Position);\n\nexports['default'] = Position;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _position = require('./position');\n\nvar _key = require('../key');\n\nvar _utilsAssert = require('../../utils/assert');\n\n/**\n * A logical range of a {@link Post}.\n * Usually an instance of Range will be read from the {@link Editor#range} property,\n * but it may be useful to instantiate a range directly when programmatically modifying a Post.\n */\n\nvar Range = (function () {\n /**\n * @param {Position} head\n * @param {Position} [tail=head]\n * @param {Direction} [direction=null]\n * @return {Range}\n * @private\n */\n\n function Range(head) {\n var tail = arguments.length <= 1 || arguments[1] === undefined ? head : arguments[1];\n var direction = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];\n return (function () {\n _classCallCheck(this, Range);\n\n /** @property {Position} head */\n this.head = head;\n\n /** @property {Position} tail */\n this.tail = tail;\n\n /** @property {Direction} direction */\n this.direction = direction;\n }).apply(this, arguments);\n }\n\n /**\n * Shorthand to create a new range from a section(s) and offset(s).\n * When given only a head section and offset, creates a collapsed range.\n * @param {Section} headSection\n * @param {number} headOffset\n * @param {Section} [tailSection=headSection]\n * @param {number} [tailOffset=headOffset]\n * @param {Direction} [direction=null]\n * @return {Range}\n */\n\n _createClass(Range, [{\n key: 'trimTo',\n\n /**\n * @param {Markerable} section\n * @return {Range} A range that is constrained to only the part that\n * includes the section.\n * FIXME -- if the section isn't the head or tail, it's assumed to be\n * wholly contained. It's possible to call `trimTo` with a selection that is\n * outside of the range, though, which would invalidate that assumption.\n * There's no efficient way to determine if a section is within a range, yet.\n * @private\n */\n value: function trimTo(section) {\n var length = section.length;\n\n var headOffset = section === this.head.section ? Math.min(this.head.offset, length) : 0;\n var tailOffset = section === this.tail.section ? Math.min(this.tail.offset, length) : length;\n\n return Range.create(section, headOffset, section, tailOffset);\n }\n\n /**\n * Expands the range 1 unit in the given direction\n * If the range is expandable in the given direction, always returns a\n * non-collapsed range.\n * @param {Number} units If units is > 0, the range is extended to the right,\n * otherwise range is extended to the left.\n * @return {Range}\n * @public\n */\n }, {\n key: 'extend',\n value: function extend(units) {\n (0, _utilsAssert['default'])('Must pass integer to Range#extend', typeof units === 'number');\n\n if (units === 0) {\n return this;\n }\n\n var head = this.head;\n var tail = this.tail;\n var currentDirection = this.direction;\n\n switch (currentDirection) {\n case _key.DIRECTION.FORWARD:\n return new Range(head, tail.move(units), currentDirection);\n case _key.DIRECTION.BACKWARD:\n return new Range(head.move(units), tail, currentDirection);\n default:\n var newDirection = units > 0 ? _key.DIRECTION.FORWARD : _key.DIRECTION.BACKWARD;\n return new Range(head, tail, newDirection).extend(units);\n }\n }\n\n /**\n * Moves this range 1 unit in the given direction.\n * If the range is collapsed, returns a collapsed range shifted by 1 unit,\n * otherwise collapses this range to the position at the `direction` end of the range.\n * Always returns a collapsed range.\n * @param {Direction} direction\n * @return {Range}\n * @public\n */\n }, {\n key: 'move',\n value: function move(direction) {\n (0, _utilsAssert['default'])('Must pass DIRECTION.FORWARD (' + _key.DIRECTION.FORWARD + ') or DIRECTION.BACKWARD (' + _key.DIRECTION.BACKWARD + ') to Range#move', direction === _key.DIRECTION.FORWARD || direction === _key.DIRECTION.BACKWARD);\n\n var focusedPosition = this.focusedPosition;\n var isCollapsed = this.isCollapsed;\n\n if (isCollapsed) {\n return new Range(focusedPosition.move(direction));\n } else {\n return this._collapse(direction);\n }\n }\n }, {\n key: '_collapse',\n value: function _collapse(direction) {\n return new Range(direction === _key.DIRECTION.BACKWARD ? this.head : this.tail);\n }\n }, {\n key: 'isEqual',\n value: function isEqual(other) {\n return other && this.head.isEqual(other.head) && this.tail.isEqual(other.tail);\n }\n }, {\n key: 'focusedPosition',\n get: function get() {\n return this.direction === _key.DIRECTION.BACKWARD ? this.head : this.tail;\n }\n }, {\n key: 'isBlank',\n get: function get() {\n return this.head.isBlank && this.tail.isBlank;\n }\n\n // \"legacy\" APIs\n }, {\n key: 'headSection',\n get: function get() {\n return this.head.section;\n }\n }, {\n key: 'tailSection',\n get: function get() {\n return this.tail.section;\n }\n }, {\n key: 'headSectionOffset',\n get: function get() {\n return this.head.offset;\n }\n }, {\n key: 'tailSectionOffset',\n get: function get() {\n return this.tail.offset;\n }\n }, {\n key: 'isCollapsed',\n get: function get() {\n return this.head.isEqual(this.tail);\n }\n }, {\n key: 'headMarker',\n get: function get() {\n return this.head.marker;\n }\n }, {\n key: 'tailMarker',\n get: function get() {\n return this.tail.marker;\n }\n }, {\n key: 'headMarkerOffset',\n get: function get() {\n return this.head.offsetInMarker;\n }\n }, {\n key: 'tailMarkerOffset',\n get: function get() {\n return this.tail.offsetInMarker;\n }\n }], [{\n key: 'create',\n value: function create(headSection, headOffset) {\n var tailSection = arguments.length <= 2 || arguments[2] === undefined ? headSection : arguments[2];\n var tailOffset = arguments.length <= 3 || arguments[3] === undefined ? headOffset : arguments[3];\n var direction = arguments.length <= 4 || arguments[4] === undefined ? null : arguments[4];\n return (function () {\n return new Range(new _position['default'](headSection, headOffset), new _position['default'](tailSection, tailOffset), direction);\n })();\n }\n }, {\n key: 'blankRange',\n value: function blankRange() {\n return new Range(_position['default'].blankPosition(), _position['default'].blankPosition());\n }\n }]);\n\n return Range;\n})();\n\nexports['default'] = Range;","\"use strict\";\n\nexports[\"default\"] = deprecate;\n\nfunction deprecate(message) {\n console.log(\"[mobiledoc-kit] [DEPRECATED]: \" + message); // jshint ignore:line\n}","'use strict';\n\nvar _arrayUtils = require('./array-utils');\n\nvar NODE_TYPES = {\n ELEMENT: 1,\n TEXT: 3,\n COMMENT: 8\n};\n\nexports.NODE_TYPES = NODE_TYPES;\nfunction isTextNode(node) {\n return node.nodeType === NODE_TYPES.TEXT;\n}\n\nfunction isCommentNode(node) {\n return node.nodeType === NODE_TYPES.COMMENT;\n}\n\nfunction isElementNode(node) {\n return node.nodeType === NODE_TYPES.ELEMENT;\n}\n\n// perform a pre-order tree traversal of the dom, calling `callbackFn(node)`\n// for every node for which `conditionFn(node)` is true\nfunction walkDOM(topNode) {\n var callbackFn = arguments.length <= 1 || arguments[1] === undefined ? function () {} : arguments[1];\n var conditionFn = arguments.length <= 2 || arguments[2] === undefined ? function () {\n return true;\n } : arguments[2];\n\n var currentNode = topNode;\n\n if (conditionFn(currentNode)) {\n callbackFn(currentNode);\n }\n\n currentNode = currentNode.firstChild;\n\n while (currentNode) {\n walkDOM(currentNode, callbackFn, conditionFn);\n currentNode = currentNode.nextSibling;\n }\n}\n\nfunction walkTextNodes(topNode) {\n var callbackFn = arguments.length <= 1 || arguments[1] === undefined ? function () {} : arguments[1];\n\n var conditionFn = function conditionFn(node) {\n return isTextNode(node);\n };\n walkDOM(topNode, callbackFn, conditionFn);\n}\n\nfunction clearChildNodes(element) {\n while (element.childNodes.length) {\n element.removeChild(element.childNodes[0]);\n }\n}\n\n/**\n * @return {Boolean} true when the child node is contained or the same as\n * (e.g., inclusive containment) the parent node\n * see https://github.com/webmodules/node-contains/blob/master/index.js\n * Mimics the behavior of `Node.contains`, which is broken in IE 10\n * @private\n */\nfunction containsNode(parentNode, childNode) {\n if (parentNode === childNode) {\n return true;\n }\n var position = parentNode.compareDocumentPosition(childNode);\n return !!(position & Node.DOCUMENT_POSITION_CONTAINED_BY);\n}\n\n/**\n * converts the element's NamedNodeMap of attrs into\n * an object with key-value pairs\n * @param {DOMNode} element\n * @return {Object} key-value pairs\n * @private\n */\nfunction getAttributes(element) {\n var result = {};\n if (element.hasAttributes()) {\n (0, _arrayUtils.forEach)(element.attributes, function (_ref) {\n var name = _ref.name;\n var value = _ref.value;\n\n result[name] = value;\n });\n }\n return result;\n}\n\nfunction addClassName(element, className) {\n // FIXME-IE IE10+\n element.classList.add(className);\n}\n\nfunction removeClassName(element, className) {\n element.classList.remove(className);\n}\n\nfunction normalizeTagName(tagName) {\n return tagName.toLowerCase();\n}\n\nfunction parseHTML(html) {\n var div = document.createElement('div');\n div.innerHTML = html;\n return div;\n}\n\nexports.containsNode = containsNode;\nexports.clearChildNodes = clearChildNodes;\nexports.getAttributes = getAttributes;\nexports.walkDOM = walkDOM;\nexports.walkTextNodes = walkTextNodes;\nexports.addClassName = addClassName;\nexports.removeClassName = removeClassName;\nexports.normalizeTagName = normalizeTagName;\nexports.isTextNode = isTextNode;\nexports.isCommentNode = isCommentNode;\nexports.isElementNode = isElementNode;\nexports.parseHTML = parseHTML;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _utilsAssert = require('../utils/assert');\n\n// start at one to make the falsy semantics easier\nvar uuidGenerator = 1;\n\nvar ElementMap = (function () {\n function ElementMap() {\n _classCallCheck(this, ElementMap);\n\n this._map = {};\n }\n\n _createClass(ElementMap, [{\n key: 'set',\n value: function set(key, value) {\n var uuid = key._uuid;\n if (!uuid) {\n key._uuid = uuid = '' + uuidGenerator++;\n }\n this._map[uuid] = value;\n }\n }, {\n key: 'get',\n value: function get(key) {\n if (key._uuid) {\n return this._map[key._uuid];\n }\n return null;\n }\n }, {\n key: 'remove',\n value: function remove(key) {\n (0, _utilsAssert['default'])('tried to fetch a value for an element not seen before', !!key._uuid);\n delete this._map[key._uuid];\n }\n }]);\n\n return ElementMap;\n})();\n\nexports['default'] = ElementMap;","'use strict';\n\nvar _utilsStringUtils = require('../utils/string-utils');\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nfunction getEventTargetMatchingTag(tagName, target, container) {\n tagName = (0, _utilsDomUtils.normalizeTagName)(tagName);\n // Traverses up DOM from an event target to find the node matching specifed tag\n while (target && target !== container) {\n if ((0, _utilsDomUtils.normalizeTagName)(target.tagName) === tagName) {\n return target;\n }\n target = target.parentNode;\n }\n}\n\nfunction getElementRelativeOffset(element) {\n var offset = { left: 0, top: -window.pageYOffset };\n var offsetParent = element.offsetParent;\n var offsetParentPosition = window.getComputedStyle(offsetParent).position;\n var offsetParentRect;\n\n if (offsetParentPosition === 'relative') {\n offsetParentRect = offsetParent.getBoundingClientRect();\n offset.left = offsetParentRect.left;\n offset.top = offsetParentRect.top;\n }\n return offset;\n}\n\nfunction getElementComputedStyleNumericProp(element, prop) {\n return parseFloat(window.getComputedStyle(element)[prop]);\n}\n\nfunction positionElementToRect(element, rect, topOffset, leftOffset) {\n var relativeOffset = getElementRelativeOffset(element);\n var style = element.style;\n var round = Math.round;\n var left, top;\n\n topOffset = topOffset || 0;\n leftOffset = leftOffset || 0;\n left = round(rect.left - relativeOffset.left - leftOffset);\n top = round(rect.top - relativeOffset.top - topOffset);\n style.left = left + 'px';\n style.top = top + 'px';\n return { left: left, top: top };\n}\n\nfunction positionElementHorizontallyCenteredToRect(element, rect, topOffset) {\n var horizontalCenter = element.offsetWidth / 2 - rect.width / 2;\n return positionElementToRect(element, rect, topOffset, horizontalCenter);\n}\n\nfunction positionElementCenteredBelow(element, belowElement) {\n var elementMargin = getElementComputedStyleNumericProp(element, 'marginTop');\n return positionElementHorizontallyCenteredToRect(element, belowElement.getBoundingClientRect(), -element.offsetHeight - elementMargin);\n}\n\nfunction setData(element, name, value) {\n if (element.dataset) {\n element.dataset[name] = value;\n } else {\n var dataName = (0, _utilsStringUtils.dasherize)(name);\n return element.setAttribute(dataName, value);\n }\n}\n\nexports.setData = setData;\nexports.getEventTargetMatchingTag = getEventTargetMatchingTag;\nexports.getElementRelativeOffset = getElementRelativeOffset;\nexports.getElementComputedStyleNumericProp = getElementComputedStyleNumericProp;\nexports.positionElementToRect = positionElementToRect;\nexports.positionElementHorizontallyCenteredToRect = positionElementHorizontallyCenteredToRect;\nexports.positionElementCenteredBelow = positionElementCenteredBelow;","\"use strict\";\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar FixedQueue = (function () {\n function FixedQueue() {\n var length = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0];\n\n _classCallCheck(this, FixedQueue);\n\n this._maxLength = length;\n this._items = [];\n }\n\n _createClass(FixedQueue, [{\n key: \"pop\",\n value: function pop() {\n return this._items.pop();\n }\n }, {\n key: \"push\",\n value: function push(item) {\n this._items.push(item);\n if (this.length > this._maxLength) {\n this._items.shift();\n }\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this._items = [];\n }\n }, {\n key: \"toArray\",\n value: function toArray() {\n return this._items;\n }\n }, {\n key: \"length\",\n get: function get() {\n return this._items.length;\n }\n }]);\n\n return FixedQueue;\n})();\n\nexports[\"default\"] = FixedQueue;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nexports.modifierMask = modifierMask;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _keycodes = require('./keycodes');\n\n/**\n * @typedef Direction\n * @enum {number}\n * @property {number} FORWARD\n * @property {number} BACKWARD\n */\n\nvar _assert = require('./assert');\n\nvar DIRECTION = {\n FORWARD: 1,\n BACKWARD: -1\n};\nexports.DIRECTION = DIRECTION;\nvar MODIFIERS = {\n META: 1, // also called \"command\" on OS X\n CTRL: 2,\n SHIFT: 4,\n ALT: 8 // also called \"option\" on OS X\n};\n\nexports.MODIFIERS = MODIFIERS;\n\nfunction modifierMask(event) {\n var metaKey = event.metaKey;\n var shiftKey = event.shiftKey;\n var ctrlKey = event.ctrlKey;\n var altKey = event.altKey;\n\n var modVal = function modVal(val, modifier) {\n return val && modifier || 0;\n };\n return modVal(metaKey, MODIFIERS.META) + modVal(shiftKey, MODIFIERS.SHIFT) + modVal(ctrlKey, MODIFIERS.CTRL) + modVal(altKey, MODIFIERS.ALT);\n}\n\nvar SPECIAL_KEYS = {\n BACKSPACE: _keycodes['default'].BACKSPACE,\n TAB: _keycodes['default'].TAB,\n ENTER: _keycodes['default'].ENTER,\n ESC: _keycodes['default'].ESC,\n SPACE: _keycodes['default'].SPACE,\n PAGEUP: _keycodes['default'].PAGEUP,\n PAGEDOWN: _keycodes['default'].PAGEDOWN,\n END: _keycodes['default'].END,\n HOME: _keycodes['default'].HOME,\n LEFT: _keycodes['default'].LEFT,\n UP: _keycodes['default'].UP,\n RIGHT: _keycodes['default'].RIGHT,\n DOWN: _keycodes['default'].DOWN,\n INS: _keycodes['default'].INS,\n DEL: _keycodes['default'].DELETE\n};\n\nexports.SPECIAL_KEYS = SPECIAL_KEYS;\n// heuristic for determining if `event` is a key event\nfunction isKeyEvent(event) {\n return (/^key/.test(event.type)\n );\n}\n\n/**\n * An abstraction around a KeyEvent\n * that key listeners in the editor can use\n * to determine what sort of key was pressed\n */\nvar Key = (function () {\n function Key(event) {\n _classCallCheck(this, Key);\n\n this.keyCode = event.keyCode;\n this.charCode = event.charCode;\n this.event = event;\n this.modifierMask = modifierMask(event);\n }\n\n _createClass(Key, [{\n key: 'toString',\n value: function toString() {\n return String.fromCharCode(this.charCode);\n }\n }, {\n key: 'isEscape',\n value: function isEscape() {\n return this.keyCode === _keycodes['default'].ESC;\n }\n }, {\n key: 'isDelete',\n value: function isDelete() {\n return this.keyCode === _keycodes['default'].BACKSPACE || this.keyCode === _keycodes['default'].DELETE;\n }\n }, {\n key: 'isForwardDelete',\n value: function isForwardDelete() {\n return this.keyCode === _keycodes['default'].DELETE;\n }\n }, {\n key: 'isArrow',\n value: function isArrow() {\n return this.isHorizontalArrow() || this.isVerticalArrow();\n }\n }, {\n key: 'isHorizontalArrow',\n value: function isHorizontalArrow() {\n return this.keyCode === _keycodes['default'].LEFT || this.keyCode === _keycodes['default'].RIGHT;\n }\n }, {\n key: 'isHorizontalArrowWithoutModifiersOtherThanShift',\n value: function isHorizontalArrowWithoutModifiersOtherThanShift() {\n return this.isHorizontalArrow() && !(this.ctrlKey || this.metaKey || this.altKey);\n }\n }, {\n key: 'isVerticalArrow',\n value: function isVerticalArrow() {\n return this.keyCode === _keycodes['default'].UP || this.keyCode === _keycodes['default'].DOWN;\n }\n }, {\n key: 'isLeftArrow',\n value: function isLeftArrow() {\n return this.keyCode === _keycodes['default'].LEFT;\n }\n }, {\n key: 'isRightArrow',\n value: function isRightArrow() {\n return this.keyCode === _keycodes['default'].RIGHT;\n }\n }, {\n key: 'isHome',\n value: function isHome() {\n return this.keyCode === _keycodes['default'].HOME;\n }\n }, {\n key: 'isEnd',\n value: function isEnd() {\n return this.keyCode === _keycodes['default'].END;\n }\n }, {\n key: 'isSpace',\n value: function isSpace() {\n return this.keyCode === _keycodes['default'].SPACE;\n }\n }, {\n key: 'isTab',\n value: function isTab() {\n return this.keyCode === _keycodes['default'].TAB;\n }\n }, {\n key: 'isEnter',\n value: function isEnter() {\n return this.keyCode === _keycodes['default'].ENTER;\n }\n\n /**\n * If the shift key is depressed.\n * For example, while holding down meta+shift, pressing the \"v\"\n * key would result in an event whose `Key` had `isShift()` with a truthy value,\n * because the shift key is down when pressing the \"v\".\n * @see {isShiftKey} which checks if the key is actually the shift key itself.\n * @return {bool}\n */\n }, {\n key: 'isShift',\n value: function isShift() {\n return this.shiftKey;\n }\n\n /*\n * If the key is the actual shift key. This is false when the shift key\n * is held down and the source `event` is not the shift key.\n * @see {isShift}\n * @return {bool}\n */\n }, {\n key: 'isShiftKey',\n value: function isShiftKey() {\n return this.keyCode === _keycodes['default'].SHIFT;\n }\n\n /*\n * If the key is the actual alt key (aka \"option\" on mac). This is false when the alt key\n * is held down and the source `event` is not the alt key.\n * @return {bool}\n */\n }, {\n key: 'isAltKey',\n value: function isAltKey() {\n return this.keyCode === _keycodes['default'].ALT;\n }\n\n /*\n * If the key is the actual ctrl key. This is false when the ctrl key\n * is held down and the source `event` is not the ctrl key.\n * @return {bool}\n */\n }, {\n key: 'isCtrlKey',\n value: function isCtrlKey() {\n return this.keyCode === _keycodes['default'].CTRL;\n }\n }, {\n key: 'hasModifier',\n value: function hasModifier(modifier) {\n return modifier & this.modifierMask;\n }\n }, {\n key: 'hasAnyModifier',\n value: function hasAnyModifier() {\n return !!this.modifierMask;\n }\n }, {\n key: 'isPrintable',\n\n /**\n * See https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Printable_keys_in_standard_position\n * and http://stackoverflow.com/a/12467610/137784\n */\n value: function isPrintable() {\n if (this.ctrlKey || this.metaKey) {\n return false;\n }\n\n var code = this.keyCode;\n\n // Firefox calls keypress events for arrow keys, but they should not be\n // considered printable\n if (this.isArrow()) {\n return false;\n }\n\n return code !== 0 || this.toString().length > 0 || code >= _keycodes['default']['0'] && code <= _keycodes['default']['9'] || // number keys\n this.isSpace() || this.isTab() || this.isEnter() || code >= _keycodes['default'].A && code <= _keycodes['default'].Z || // letter keys\n code >= _keycodes['default'].a && code <= _keycodes['default'].z || code >= _keycodes['default'].NUMPAD_0 && code <= _keycodes['default'].NUMPAD_9 || // numpad keys\n code >= _keycodes['default'][';'] && code <= _keycodes['default']['`'] || // punctuation\n code >= _keycodes['default']['['] && code <= _keycodes['default']['\"'] ||\n // FIXME the IME action seems to get lost when we issue an `editor.deleteSelection`\n // before it (in Chrome)\n code === _keycodes['default'].IME;\n }\n }, {\n key: 'direction',\n get: function get() {\n switch (true) {\n case this.isDelete():\n return this.isForwardDelete() ? DIRECTION.FORWARD : DIRECTION.BACKWARD;\n case this.isHorizontalArrow():\n return this.isRightArrow() ? DIRECTION.FORWARD : DIRECTION.BACKWARD;\n }\n }\n }, {\n key: 'ctrlKey',\n get: function get() {\n return MODIFIERS.CTRL & this.modifierMask;\n }\n }, {\n key: 'metaKey',\n get: function get() {\n return MODIFIERS.META & this.modifierMask;\n }\n }, {\n key: 'shiftKey',\n get: function get() {\n return MODIFIERS.SHIFT & this.modifierMask;\n }\n }, {\n key: 'altKey',\n get: function get() {\n return MODIFIERS.ALT & this.modifierMask;\n }\n }], [{\n key: 'fromEvent',\n value: function fromEvent(event) {\n (0, _assert['default'])('Must pass a Key event to Key.fromEvent', event && isKeyEvent(event));\n return new Key(event);\n }\n }]);\n\n return Key;\n})();\n\nexports['default'] = Key;","'use strict';\n\nexports['default'] = {\n BACKSPACE: 8,\n SPACE: 32,\n ENTER: 13,\n SHIFT: 16,\n ESC: 27,\n DELETE: 46,\n '0': 48,\n '9': 57,\n A: 65,\n Z: 90,\n a: 97,\n z: 122,\n 'NUMPAD_0': 186,\n 'NUMPAD_9': 111,\n ';': 186,\n '.': 190,\n '`': 192,\n '[': 219,\n '\"': 222,\n\n // Input Method Editor uses multiple keystrokes to display characters.\n // Example on mac: press option-i then i. This fires 2 key events in Chrome\n // with keyCode 229 and displays ˆ and then î.\n // See http://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html#fixed-virtual-key-codes\n IME: 229,\n\n TAB: 9,\n PAGEUP: 33,\n PAGEDOWN: 34,\n END: 35,\n HOME: 36,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n INS: 45,\n META: 91,\n ALT: 18,\n CTRL: 17\n};","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar LinkedItem = function LinkedItem() {\n _classCallCheck(this, LinkedItem);\n\n this.next = null;\n this.prev = null;\n};\n\nexports[\"default\"] = LinkedItem;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _assert = require('./assert');\n\nvar PARENT_PROP = '__parent';\n\nvar LinkedList = (function () {\n function LinkedList(options) {\n _classCallCheck(this, LinkedList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n\n if (options) {\n var adoptItem = options.adoptItem;\n var freeItem = options.freeItem;\n\n this._adoptItem = adoptItem;\n this._freeItem = freeItem;\n }\n }\n\n _createClass(LinkedList, [{\n key: 'adoptItem',\n value: function adoptItem(item) {\n item[PARENT_PROP] = this;\n this.length++;\n if (this._adoptItem) {\n this._adoptItem(item);\n }\n }\n }, {\n key: 'freeItem',\n value: function freeItem(item) {\n item[PARENT_PROP] = null;\n this.length--;\n if (this._freeItem) {\n this._freeItem(item);\n }\n }\n }, {\n key: 'prepend',\n value: function prepend(item) {\n this.insertBefore(item, this.head);\n }\n }, {\n key: 'append',\n value: function append(item) {\n this.insertBefore(item, null);\n }\n }, {\n key: 'insertAfter',\n value: function insertAfter(item, prevItem) {\n var nextItem = prevItem ? prevItem.next : this.head;\n this.insertBefore(item, nextItem);\n }\n }, {\n key: '_ensureItemIsNotAlreadyInList',\n value: function _ensureItemIsNotAlreadyInList(item) {\n (0, _assert['default'])('Cannot insert an item into a list if it is already in a list', !item.next && !item.prev && this.head !== item);\n }\n }, {\n key: 'insertBefore',\n value: function insertBefore(item, nextItem) {\n this._ensureItemIsNotInList(item);\n this.adoptItem(item);\n\n var insertPos = undefined;\n if (nextItem && nextItem.prev) {\n insertPos = 'middle';\n } else if (nextItem) {\n insertPos = 'start';\n } else {\n insertPos = 'end';\n }\n\n switch (insertPos) {\n case 'start':\n if (this.head) {\n item.next = this.head;\n this.head.prev = item;\n }\n this.head = item;\n\n break;\n case 'middle':\n var prevItem = nextItem.prev;\n item.next = nextItem;\n item.prev = prevItem;\n nextItem.prev = item;\n prevItem.next = item;\n\n break;\n case 'end':\n var tail = this.tail;\n item.prev = tail;\n\n if (tail) {\n tail.next = item;\n } else {\n this.head = item;\n }\n this.tail = item;\n\n break;\n }\n }\n }, {\n key: 'remove',\n value: function remove(item) {\n if (!item[PARENT_PROP]) {\n return;\n }\n this._ensureItemIsInThisList(item);\n this.freeItem(item);\n\n var prev = item.prev;\n var next = item.next;\n\n item.prev = null;\n item.next = null;\n\n if (prev) {\n prev.next = next;\n } else {\n this.head = next;\n }\n\n if (next) {\n next.prev = prev;\n } else {\n this.tail = prev;\n }\n }\n }, {\n key: 'forEach',\n value: function forEach(callback) {\n var item = this.head;\n var index = 0;\n while (item) {\n callback(item, index++);\n item = item.next;\n }\n }\n }, {\n key: 'map',\n value: function map(callback) {\n var result = [];\n this.forEach(function (i) {\n return result.push(callback(i));\n });\n return result;\n }\n }, {\n key: 'walk',\n value: function walk(startItem, endItem, callback) {\n var item = startItem || this.head;\n while (item) {\n callback(item);\n if (item === endItem) {\n break;\n }\n item = item.next;\n }\n }\n }, {\n key: 'readRange',\n value: function readRange(startItem, endItem) {\n var items = [];\n this.walk(startItem, endItem, function (item) {\n items.push(item);\n });\n return items;\n }\n }, {\n key: 'toArray',\n value: function toArray() {\n return this.readRange();\n }\n }, {\n key: 'detect',\n value: function detect(callback) {\n var item = arguments.length <= 1 || arguments[1] === undefined ? this.head : arguments[1];\n\n while (item) {\n if (callback(item)) {\n return item;\n }\n item = item.next;\n }\n }\n }, {\n key: 'any',\n value: function any(callback) {\n return !!this.detect(callback);\n }\n }, {\n key: 'every',\n value: function every(callback) {\n var item = this.head;\n while (item) {\n if (!callback(item)) {\n return false;\n }\n item = item.next;\n }\n return true;\n }\n }, {\n key: 'objectAt',\n value: function objectAt(targetIndex) {\n var index = -1;\n return this.detect(function () {\n index++;\n return targetIndex === index;\n });\n }\n }, {\n key: 'splice',\n value: function splice(targetItem, removalCount, newItems) {\n var _this = this;\n\n var item = targetItem;\n var nextItem = item.next;\n var count = 0;\n while (item && count < removalCount) {\n count++;\n nextItem = item.next;\n this.remove(item);\n item = nextItem;\n }\n newItems.forEach(function (newItem) {\n _this.insertBefore(newItem, nextItem);\n });\n }\n }, {\n key: 'removeBy',\n value: function removeBy(conditionFn) {\n var item = this.head;\n while (item) {\n var nextItem = item.next;\n\n if (conditionFn(item)) {\n this.remove(item);\n }\n\n item = nextItem;\n }\n }\n }, {\n key: '_ensureItemIsNotInList',\n value: function _ensureItemIsNotInList(item) {\n (0, _assert['default'])('Cannot insert an item into a list if it is already in a list', !item[PARENT_PROP]);\n }\n }, {\n key: '_ensureItemIsInThisList',\n value: function _ensureItemIsInThisList(item) {\n (0, _assert['default'])('Cannot remove item that is in another list', item[PARENT_PROP] === this);\n }\n }, {\n key: 'isEmpty',\n get: function get() {\n return this.length === 0;\n }\n }]);\n\n return LinkedList;\n})();\n\nexports['default'] = LinkedList;","\"use strict\";\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Logger = (function () {\n function Logger(type, manager) {\n _classCallCheck(this, Logger);\n\n this.type = type;\n this.manager = manager;\n }\n\n _createClass(Logger, [{\n key: \"isEnabled\",\n value: function isEnabled() {\n return this.manager.isEnabled(this.type);\n }\n }, {\n key: \"log\",\n value: function log() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n args.unshift(\"[\" + this.type + \"]\");\n if (this.isEnabled()) {\n var _window$console;\n\n (_window$console = window.console).log.apply(_window$console, args);\n }\n }\n }]);\n\n return Logger;\n})();\n\nvar LogManager = (function () {\n function LogManager() {\n _classCallCheck(this, LogManager);\n\n this.enabledTypes = [];\n this.allEnabled = false;\n }\n\n _createClass(LogManager, [{\n key: \"for\",\n value: function _for(type) {\n return new Logger(type, this);\n }\n }, {\n key: \"enableAll\",\n value: function enableAll() {\n this.allEnabled = true;\n }\n }, {\n key: \"enableTypes\",\n value: function enableTypes(types) {\n this.enabledTypes = this.enabledTypes.concat(types);\n }\n }, {\n key: \"disable\",\n value: function disable() {\n this.enabledTypes = [];\n this.allEnabled = false;\n }\n }, {\n key: \"isEnabled\",\n value: function isEnabled(type) {\n return this.allEnabled || this.enabledTypes.indexOf(type) !== -1;\n }\n }]);\n\n return LogManager;\n})();\n\nexports[\"default\"] = LogManager;","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nvar _utilsArrayUtils = require('../utils/array-utils');\n\nvar Markerupable = (function () {\n function Markerupable() {\n _classCallCheck(this, Markerupable);\n }\n\n _createClass(Markerupable, [{\n key: 'clearMarkups',\n value: function clearMarkups() {\n this.markups = [];\n }\n }, {\n key: 'addMarkup',\n value: function addMarkup(markup) {\n this.markups.push(markup);\n }\n }, {\n key: 'addMarkupAtIndex',\n value: function addMarkupAtIndex(markup, index) {\n this.markups.splice(index, 0, markup);\n }\n }, {\n key: 'removeMarkup',\n value: function removeMarkup(markupOrMarkupCallback) {\n var _this = this;\n\n var callback = undefined;\n if (typeof markupOrMarkupCallback === 'function') {\n callback = markupOrMarkupCallback;\n } else {\n (function () {\n var markup = markupOrMarkupCallback;\n callback = function (_markup) {\n return _markup === markup;\n };\n })();\n }\n\n (0, _utilsArrayUtils.forEach)((0, _utilsArrayUtils.filter)(this.markups, callback), function (m) {\n return _this._removeMarkup(m);\n });\n }\n }, {\n key: '_removeMarkup',\n value: function _removeMarkup(markup) {\n var index = this.markups.indexOf(markup);\n if (index !== -1) {\n this.markups.splice(index, 1);\n }\n }\n }, {\n key: 'hasMarkup',\n value: function hasMarkup(tagNameOrMarkup) {\n return !!this.getMarkup(tagNameOrMarkup);\n }\n }, {\n key: 'getMarkup',\n value: function getMarkup(tagNameOrMarkup) {\n var _this2 = this;\n\n if (typeof tagNameOrMarkup === 'string') {\n var _ret2 = (function () {\n var tagName = (0, _utilsDomUtils.normalizeTagName)(tagNameOrMarkup);\n return {\n v: (0, _utilsArrayUtils.detect)(_this2.markups, function (markup) {\n return markup.tagName === tagName;\n })\n };\n })();\n\n if (typeof _ret2 === 'object') return _ret2.v;\n } else {\n var _ret3 = (function () {\n var targetMarkup = tagNameOrMarkup;\n return {\n v: (0, _utilsArrayUtils.detect)(_this2.markups, function (markup) {\n return markup === targetMarkup;\n })\n };\n })();\n\n if (typeof _ret3 === 'object') return _ret3.v;\n }\n }\n }, {\n key: 'openedMarkups',\n get: function get() {\n var count = 0;\n if (this.prev) {\n count = (0, _utilsArrayUtils.commonItemLength)(this.markups, this.prev.markups);\n }\n\n return this.markups.slice(count);\n }\n }, {\n key: 'closedMarkups',\n get: function get() {\n var count = 0;\n if (this.next) {\n count = (0, _utilsArrayUtils.commonItemLength)(this.markups, this.next.markups);\n }\n\n return this.markups.slice(count);\n }\n }]);\n\n return Markerupable;\n})();\n\nexports['default'] = Markerupable;","\"use strict\";\n\nfunction mergeWithOptions(original, updates, options) {\n options = options || {};\n for (var prop in updates) {\n if (options.hasOwnProperty(prop)) {\n original[prop] = options[prop];\n } else if (updates.hasOwnProperty(prop)) {\n original[prop] = updates[prop];\n }\n }\n return original;\n}\n\n/**\n * Merges properties of one object into another\n * @private\n */\nfunction merge(original, updates) {\n return mergeWithOptions(original, updates);\n}\n\nexports.mergeWithOptions = mergeWithOptions;\nexports.merge = merge;","'use strict';\n\nexports['default'] = mixin;\nvar CONSTRUCTOR_FN_NAME = 'constructor';\n\nfunction mixin(target, source) {\n target = target.prototype;\n // Fallback to just `source` to allow mixing in a plain object (pojo)\n source = source.prototype || source;\n\n Object.getOwnPropertyNames(source).forEach(function (name) {\n if (name !== CONSTRUCTOR_FN_NAME) {\n var descriptor = Object.getOwnPropertyDescriptor(source, name);\n\n Object.defineProperty(target, name, descriptor);\n }\n });\n}","'use strict';\n\nvar errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction MobiledocError() {\n var tmp = Error.apply(this, arguments);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n}\n\nMobiledocError.prototype = Object.create(Error.prototype);\n\nexports['default'] = MobiledocError;","/* global JSON */\n'use strict';\n\nexports.getContentFromPasteEvent = getContentFromPasteEvent;\nexports.setClipboardData = setClipboardData;\nexports.parsePostFromPaste = parsePostFromPaste;\nexports.parsePostFromDrop = parsePostFromDrop;\n\nvar _parsersMobiledoc = require('../parsers/mobiledoc');\n\nvar _parsersHtml = require('../parsers/html');\n\nvar _parsersText = require('../parsers/text');\n\nvar MIME_TEXT_PLAIN = 'text/plain';\nexports.MIME_TEXT_PLAIN = MIME_TEXT_PLAIN;\nvar MIME_TEXT_HTML = 'text/html';\nexports.MIME_TEXT_HTML = MIME_TEXT_HTML;\nvar NONSTANDARD_IE_TEXT_TYPE = 'Text';\n\nexports.NONSTANDARD_IE_TEXT_TYPE = NONSTANDARD_IE_TEXT_TYPE;\nvar MOBILEDOC_REGEX = new RegExp(/data\\-mobiledoc='(.*?)'>/);\n\n/**\n * @return {Post}\n * @private\n */\nfunction parsePostFromHTML(html, builder, plugins) {\n var post = undefined;\n\n if (MOBILEDOC_REGEX.test(html)) {\n var mobiledocString = html.match(MOBILEDOC_REGEX)[1];\n var mobiledoc = JSON.parse(mobiledocString);\n post = _parsersMobiledoc['default'].parse(builder, mobiledoc);\n } else {\n post = new _parsersHtml['default'](builder, { plugins: plugins }).parse(html);\n }\n\n return post;\n}\n\n/**\n * @return {Post}\n * @private\n */\nfunction parsePostFromText(text, builder, plugins) {\n var parser = new _parsersText['default'](builder, { plugins: plugins });\n var post = parser.parse(text);\n return post;\n}\n\n/**\n * @return {{html: String, text: String}}\n * @private\n */\n\nfunction getContentFromPasteEvent(event, window) {\n var html = '',\n text = '';\n\n var clipboardData = event.clipboardData;\n\n if (clipboardData && clipboardData.getData) {\n html = clipboardData.getData(MIME_TEXT_HTML);\n text = clipboardData.getData(MIME_TEXT_PLAIN);\n } else if (window.clipboardData && window.clipboardData.getData) {\n // IE\n // The Internet Explorers (including Edge) have a non-standard way of interacting with the\n // Clipboard API (see http://caniuse.com/#feat=clipboard). In short, they expose a global window.clipboardData\n // object instead of the per-event event.clipboardData object on the other browsers.\n html = window.clipboardData.getData(NONSTANDARD_IE_TEXT_TYPE);\n }\n\n return { html: html, text: text };\n}\n\n/**\n * @return {{html: String, text: String}}\n * @private\n */\nfunction getContentFromDropEvent(event, logger) {\n var html = '',\n text = '';\n\n try {\n html = event.dataTransfer.getData(MIME_TEXT_HTML);\n text = event.dataTransfer.getData(MIME_TEXT_PLAIN);\n } catch (e) {\n // FIXME IE11 does not include any data in the 'text/html' or 'text/plain'\n // mimetypes. It throws an error 'Invalid argument' when attempting to read\n // these properties.\n if (logger) {\n logger.log('Error getting drop data: ', e);\n }\n }\n\n return { html: html, text: text };\n}\n\n/**\n * @param {CopyEvent|CutEvent}\n * @param {Editor}\n * @param {Window}\n * @private\n */\n\nfunction setClipboardData(event, _ref, window) {\n var mobiledoc = _ref.mobiledoc;\n var html = _ref.html;\n var text = _ref.text;\n\n if (mobiledoc && html) {\n html = '
' + html + '
';\n }\n\n var clipboardData = event.clipboardData;\n var nonstandardClipboardData = window.clipboardData;\n\n if (clipboardData && clipboardData.setData) {\n clipboardData.setData(MIME_TEXT_HTML, html);\n clipboardData.setData(MIME_TEXT_PLAIN, text);\n } else if (nonstandardClipboardData && nonstandardClipboardData.setData) {\n // The Internet Explorers (including Edge) have a non-standard way of interacting with the\n // Clipboard API (see http://caniuse.com/#feat=clipboard). In short, they expose a global window.clipboardData\n // object instead of the per-event event.clipboardData object on the other browsers.\n nonstandardClipboardData.setData(NONSTANDARD_IE_TEXT_TYPE, html);\n }\n}\n\n/**\n * @param {PasteEvent}\n * @param {{builder: Builder, _parserPlugins: Array}} options\n * @return {Post}\n * @private\n */\n\nfunction parsePostFromPaste(pasteEvent, _ref2) {\n var builder = _ref2.builder;\n var plugins = _ref2._parserPlugins;\n\n var _ref3 = arguments.length <= 2 || arguments[2] === undefined ? { targetFormat: 'html' } : arguments[2];\n\n var targetFormat = _ref3.targetFormat;\n\n var _getContentFromPasteEvent = getContentFromPasteEvent(pasteEvent, window);\n\n var html = _getContentFromPasteEvent.html;\n var text = _getContentFromPasteEvent.text;\n\n if (targetFormat === 'html' && html && html.length) {\n return parsePostFromHTML(html, builder, plugins);\n } else if (text && text.length) {\n return parsePostFromText(text, builder, plugins);\n }\n}\n\n/**\n * @param {DropEvent}\n * @param {Editor} editor\n * @param {Object} [options={}] Can pass a logger\n * @return {Post}\n * @private\n */\n\nfunction parsePostFromDrop(dropEvent, editor) {\n var _ref4 = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n var logger = _ref4.logger;\n var builder = editor.builder;\n var plugins = editor._parserPlugins;\n\n var _getContentFromDropEvent = getContentFromDropEvent(dropEvent, logger);\n\n var html = _getContentFromDropEvent.html;\n var text = _getContentFromDropEvent.text;\n\n if (html && html.length) {\n return parsePostFromHTML(html, builder, plugins);\n } else if (text && text.length) {\n return parsePostFromText(text, builder, plugins);\n }\n}","\"use strict\";\n\nvar placeholderImageSrc = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAAMFBMVEXp7vG6vsHm6+63u77Hy868wMPe4+bO09bh5unr8fTR1djAxMfM0NPX3N/c4eTBxcjXRf5TAAACh0lEQVR4nO3b6ZKqMBSFUSQMYZL3f9tbBq/NEEDiqUqOfusn1ZXKbjcQlGQZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACC6RkbsGHuabChEtHmiGYfS3EQYM+Sxw/gMQvmcNnYaj6oTDHi73WPn2eqnj9B8zo3TJXcq5uNjXmVff86VwSR3JtryMa1BYqi7S1hJDCVpSigyLcGhJJEwzlCSNtPKrbVhVwsdCfOhH7uuaG3ARV9DwsaOzxt3N1yPqCHhvXytTUz92VDpmE/LLhZwl++R6Sds6sUa/PL6K/2E2fIhw1xdRKefsFolrPc+xNx/N0k/4fpBsdhL2HfeiN+TsDCms8dDpeRyS3P3QDl6Iqaf8L0rTf+80m6Lmn7Ct+4Wxf+/2RY1/YRv3PHz/u+fsCmqgoTnq7Z+8SGviqoh4dnKu1ieqauiakh4/PQ0r6ivqDoSHj0B97eNRVG1JNxV+L4bnxdVecJtRTdFVZ7QU9F1UXUn9FZ0VVRlCav5ob2KLouqKmFjy676u2HsVnRRVFUJq3J+8KCi86IqSthMvyl209Hjijqm3RsqAZ5pNfa5PJ2KelJRjQmr1/r7cfy0ouoSNvOfvbvhvKLaEr4qOin9kTQnrN7LpDZhE/Zmhp6Eq4p+YcKgiipKGFhRRQkDK6ooYfgLbiSMioQkJGF8P5XwHv4O+7AaKiXzaeXh1kMl5AffTUxiKEm/krD94BR8Gdxl1fceSlR58ZhXKbEpyD2amNiBtmrJLTMHL1LF8/rpXkSZXEmz8K8uvAFFNm6Iq0aBLUFOmeCuJ6exrcCmoLpN7kYx891bSAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgh/wDdr8peyRHLogAAAAASUVORK5CYII=\";\n\nexports[\"default\"] = placeholderImageSrc;","'use strict';\n\nvar _utilsKey = require('../utils/key');\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nfunction clearSelection() {\n window.getSelection().removeAllRanges();\n}\n\nfunction textNodeRects(node) {\n var range = document.createRange();\n range.setEnd(node, node.nodeValue.length);\n range.setStart(node, 0);\n return range.getClientRects();\n}\n\nfunction findOffsetInTextNode(node, coords) {\n var len = node.nodeValue.length;\n var range = document.createRange();\n for (var i = 0; i < len; i++) {\n range.setEnd(node, i + 1);\n range.setStart(node, i);\n var rect = range.getBoundingClientRect();\n if (rect.top === rect.bottom) {\n continue;\n }\n if (rect.left <= coords.left && rect.right >= coords.left && rect.top <= coords.top && rect.bottom >= coords.top) {\n return { node: node, offset: i + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0) };\n }\n }\n return { node: node, offset: 0 };\n}\n\n/*\n * @param {Object} coords with `top` and `left`\n * @see https://github.com/ProseMirror/prosemirror/blob/4c22e3fe97d87a355a0534e25d65aaf0c0d83e57/src/edit/dompos.js\n * @return {Object} {node, offset}\n */\nfunction findOffsetInNode(_x, _x2) {\n var _again = true;\n\n _function: while (_again) {\n var node = _x,\n coords = _x2;\n _again = false;\n\n var closest = undefined,\n dyClosest = 1e8,\n coordsClosest = undefined,\n offset = 0;\n for (var child = node.firstChild; child; child = child.nextSibling) {\n var rects = undefined;\n if ((0, _utilsDomUtils.isElementNode)(child)) {\n rects = child.getClientRects();\n } else if ((0, _utilsDomUtils.isTextNode)(child)) {\n rects = textNodeRects(child);\n } else {\n continue;\n }\n\n for (var i = 0; i < rects.length; i++) {\n var rect = rects[i];\n if (rect.left <= coords.left && rect.right >= coords.left) {\n var dy = rect.top > coords.top ? rect.top - coords.top : rect.bottom < coords.top ? coords.top - rect.bottom : 0;\n if (dy < dyClosest) {\n closest = child;\n dyClosest = dy;\n coordsClosest = dy ? { left: coords.left, top: rect.top } : coords;\n if ((0, _utilsDomUtils.isElementNode)(child) && !child.firstChild) {\n offset = i + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0);\n }\n continue;\n }\n }\n if (!closest && (coords.top >= rect.bottom || coords.top >= rect.top && coords.left >= rect.right)) {\n offset = i + 1;\n }\n }\n }\n if (!closest) {\n return { node: node, offset: offset };\n }\n if ((0, _utilsDomUtils.isTextNode)(closest)) {\n return findOffsetInTextNode(closest, coordsClosest);\n }\n if (closest.firstChild) {\n _x = closest;\n _x2 = coordsClosest;\n _again = true;\n closest = dyClosest = coordsClosest = offset = child = rects = i = rect = dy = undefined;\n continue _function;\n }\n return { node: node, offset: offset };\n }\n}\n\nfunction comparePosition(_x3) {\n var _again2 = true;\n\n _function2: while (_again2) {\n var selection = _x3;\n _again2 = false;\n var anchorNode = selection.anchorNode;\n var focusNode = selection.focusNode;\n var anchorOffset = selection.anchorOffset;\n var focusOffset = selection.focusOffset;\n\n var headNode = undefined,\n tailNode = undefined,\n headOffset = undefined,\n tailOffset = undefined,\n direction = undefined;\n\n var position = anchorNode.compareDocumentPosition(focusNode);\n\n // IE may select return focus and anchor nodes far up the DOM tree instead of\n // picking the deepest, most specific possible node. For example in\n //\n //
abcdef
\n //\n // with a cursor between c and d, IE might say the focusNode is
with\n // an offset of 1. However the anchorNode for a selection might still be\n // 2 if there was a selection.\n //\n // This code walks down the DOM tree until a good comparison of position can be\n // made.\n //\n if (position & Node.DOCUMENT_POSITION_CONTAINS) {\n if (focusOffset < focusNode.childNodes.length) {\n focusNode = focusNode.childNodes[focusOffset];\n focusOffset = 0;\n } else {\n // This situation happens on IE when triple-clicking to select.\n // Set the focus to the very last character inside the node.\n while (focusNode.lastChild) {\n focusNode = focusNode.lastChild;\n }\n focusOffset = focusNode.textContent.length;\n }\n\n _x3 = {\n focusNode: focusNode,\n focusOffset: focusOffset,\n anchorNode: anchorNode, anchorOffset: anchorOffset\n };\n _again2 = true;\n anchorNode = focusNode = anchorOffset = focusOffset = headNode = tailNode = headOffset = tailOffset = direction = position = undefined;\n continue _function2;\n } else if (position & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n var offset = anchorOffset - 1;\n if (offset < 0) {\n offset = 0;\n }\n _x3 = {\n anchorNode: anchorNode.childNodes[offset],\n anchorOffset: 0,\n focusNode: focusNode, focusOffset: focusOffset\n };\n _again2 = true;\n anchorNode = focusNode = anchorOffset = focusOffset = headNode = tailNode = headOffset = tailOffset = direction = position = offset = undefined;\n continue _function2;\n\n // The meat of translating anchor and focus nodes to head and tail nodes\n } else if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n headNode = anchorNode;tailNode = focusNode;\n headOffset = anchorOffset;tailOffset = focusOffset;\n direction = _utilsKey.DIRECTION.FORWARD;\n } else if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n headNode = focusNode;tailNode = anchorNode;\n headOffset = focusOffset;tailOffset = anchorOffset;\n direction = _utilsKey.DIRECTION.BACKWARD;\n } else {\n // same node\n headNode = tailNode = anchorNode;\n headOffset = anchorOffset;\n tailOffset = focusOffset;\n if (tailOffset < headOffset) {\n // Swap the offset order\n headOffset = focusOffset;\n tailOffset = anchorOffset;\n direction = _utilsKey.DIRECTION.BACKWARD;\n } else if (headOffset < tailOffset) {\n direction = _utilsKey.DIRECTION.FORWARD;\n } else {\n direction = null;\n }\n }\n\n return { headNode: headNode, headOffset: headOffset, tailNode: tailNode, tailOffset: tailOffset, direction: direction };\n }\n}\n\nexports.clearSelection = clearSelection;\nexports.comparePosition = comparePosition;\nexports.findOffsetInNode = findOffsetInNode;","\"use strict\";\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Set = (function () {\n function Set() {\n var _this = this;\n\n var items = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n _classCallCheck(this, Set);\n\n this.items = [];\n items.forEach(function (i) {\n return _this.add(i);\n });\n }\n\n _createClass(Set, [{\n key: \"add\",\n value: function add(item) {\n if (!this.has(item)) {\n this.items.push(item);\n }\n }\n }, {\n key: \"has\",\n value: function has(item) {\n return this.items.indexOf(item) !== -1;\n }\n }, {\n key: \"toArray\",\n value: function toArray() {\n return this.items;\n }\n }, {\n key: \"length\",\n get: function get() {\n return this.items.length;\n }\n }]);\n\n return Set;\n})();\n\nexports[\"default\"] = Set;","/*\n * @param {String} string\n * @return {String} a dasherized string. 'modelIndex' -> 'model-index', etc\n */\n'use strict';\n\nexports.dasherize = dasherize;\nexports.capitalize = capitalize;\nexports.startsWith = startsWith;\nexports.endsWith = endsWith;\n\nfunction dasherize(string) {\n return string.replace(/[A-Z]/g, function (match, offset) {\n var lower = match.toLowerCase();\n\n return offset === 0 ? lower : '-' + lower;\n });\n}\n\nfunction capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nfunction startsWith(string, character) {\n return string.charAt(0) === character;\n}\n\nfunction endsWith(string, endString) {\n var index = string.lastIndexOf(endString);\n return index !== -1 && index === string.length - endString.length;\n}","'use strict';\n\nexports['default'] = toRange;\n\nvar _utilsCursorRange = require('../utils/cursor/range');\n\nvar _utilsCursorPosition = require('../utils/cursor/position');\n\nvar _utilsAssert = require('../utils/assert');\n\nfunction toRange(rangeLike) {\n (0, _utilsAssert['default'])('Must pass non-blank object to \"toRange\"', !!rangeLike);\n\n if (rangeLike instanceof _utilsCursorRange['default']) {\n return rangeLike;\n } else if (rangeLike instanceof _utilsCursorPosition['default']) {\n return rangeLike.toRange();\n }\n\n (0, _utilsAssert['default'])('Incorrect structure for rangeLike: ' + rangeLike, false);\n}","'use strict';\n\nexports['default'] = '0.10.8';","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _view = require('./view');\n\nvar _utilsElementUtils = require('../utils/element-utils');\n\nvar DELAY = 200;\n\nvar Tooltip = (function (_View) {\n _inherits(Tooltip, _View);\n\n function Tooltip(options) {\n var _this = this;\n\n _classCallCheck(this, Tooltip);\n\n var rootElement = options.rootElement;\n\n var timeout = undefined;\n options.classNames = ['__mobiledoc-tooltip'];\n _get(Object.getPrototypeOf(Tooltip.prototype), 'constructor', this).call(this, options);\n\n this.addEventListener(rootElement, 'mouseover', function (e) {\n var target = (0, _utilsElementUtils.getEventTargetMatchingTag)(options.showForTag, e.target, rootElement);\n if (target && target.isContentEditable) {\n timeout = setTimeout(function () {\n _this.showLink(target.href, target);\n }, DELAY);\n }\n });\n\n this.addEventListener(rootElement, 'mouseout', function (e) {\n clearTimeout(timeout);\n var toElement = e.toElement || e.relatedTarget;\n if (toElement && toElement.className !== _this.element.className) {\n _this.hide();\n }\n });\n }\n\n _createClass(Tooltip, [{\n key: 'showMessage',\n value: function showMessage(message, element) {\n var tooltipElement = this.element;\n tooltipElement.innerHTML = message;\n this.show();\n (0, _utilsElementUtils.positionElementCenteredBelow)(tooltipElement, element);\n }\n }, {\n key: 'showLink',\n value: function showLink(link, element) {\n var message = '' + link + '';\n this.showMessage(message, element);\n }\n }]);\n\n return Tooltip;\n})(_view['default']);\n\nexports['default'] = Tooltip;","'use strict';\n\nvar _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _utilsDomUtils = require('../utils/dom-utils');\n\nvar View = (function () {\n function View() {\n var _this = this;\n\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n _classCallCheck(this, View);\n\n options.tagName = options.tagName || 'div';\n options.container = options.container || document.body;\n\n this.element = document.createElement(options.tagName);\n this.container = options.container;\n this.isShowing = false;\n\n var classNames = options.classNames || [];\n classNames.forEach(function (name) {\n return (0, _utilsDomUtils.addClassName)(_this.element, name);\n });\n this._eventListeners = [];\n }\n\n _createClass(View, [{\n key: 'addEventListener',\n value: function addEventListener(element, type, listener) {\n element.addEventListener(type, listener);\n this._eventListeners.push([element, type, listener]);\n }\n }, {\n key: 'removeAllEventListeners',\n value: function removeAllEventListeners() {\n this._eventListeners.forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 3);\n\n var element = _ref2[0];\n var type = _ref2[1];\n var listener = _ref2[2];\n\n element.removeEventListener(type, listener);\n });\n }\n }, {\n key: 'show',\n value: function show() {\n if (!this.isShowing) {\n this.container.appendChild(this.element);\n this.isShowing = true;\n return true;\n }\n }\n }, {\n key: 'hide',\n value: function hide() {\n if (this.isShowing) {\n this.container.removeChild(this.element);\n this.isShowing = false;\n return true;\n }\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeAllEventListeners();\n this.hide();\n this.isDestroyed = true;\n }\n }]);\n\n return View;\n})();\n\nexports['default'] = View;","'use strict';\n\nexports['default'] = {\n name: 'image-card',\n type: 'text',\n render: function render() {}\n};","'use strict';\n\nexports.registerGlobal = registerGlobal;\n\nvar _rendererFactory = require('./renderer-factory');\n\nvar _utilsRenderType = require('./utils/render-type');\n\nfunction registerGlobal(window) {\n window.MobiledocTextRenderer = _rendererFactory['default'];\n}\n\nexports.RENDER_TYPE = _utilsRenderType['default'];\nexports['default'] = _rendererFactory['default'];","'use strict';\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _renderers02 = require('./renderers/0-2');\n\nvar _renderers03 = require('./renderers/0-3');\n\nvar _utilsRenderType = require('./utils/render-type');\n\n/**\n * runtime Text renderer\n * renders a mobiledoc to Text\n *\n * input: mobiledoc\n * output: Text (string)\n */\n\nfunction validateCards(cards) {\n if (!Array.isArray(cards)) {\n throw new Error('`cards` must be passed as an array');\n }\n for (var i = 0; i < cards.length; i++) {\n var card = cards[i];\n if (card.type !== _utilsRenderType['default']) {\n throw new Error('Card \"' + card.name + '\" must be type \"' + _utilsRenderType['default'] + '\", was \"' + card.type + '\"');\n }\n if (!card.render) {\n throw new Error('Card \"' + card.name + '\" must define `render`');\n }\n }\n}\n\nfunction validateAtoms(atoms) {\n if (!Array.isArray(atoms)) {\n throw new Error('`atoms` must be passed as an array');\n }\n for (var i = 0; i < atoms.length; i++) {\n var atom = atoms[i];\n if (atom.type !== _utilsRenderType['default']) {\n throw new Error('Atom \"' + atom.name + '\" must be type \"' + _utilsRenderType['default'] + '\", was \"' + atom.type + '\"');\n }\n if (!atom.render) {\n throw new Error('Atom \"' + atom.name + '\" must define `render`');\n }\n }\n}\n\nvar RendererFactory = (function () {\n function RendererFactory() {\n var _ref = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n var cards = _ref.cards;\n var atoms = _ref.atoms;\n var cardOptions = _ref.cardOptions;\n var unknownCardHandler = _ref.unknownCardHandler;\n var unknownAtomHandler = _ref.unknownAtomHandler;\n\n _classCallCheck(this, RendererFactory);\n\n cards = cards || [];\n validateCards(cards);\n atoms = atoms || [];\n validateAtoms(atoms);\n cardOptions = cardOptions || {};\n\n this.state = { cards: cards, atoms: atoms, cardOptions: cardOptions, unknownCardHandler: unknownCardHandler, unknownAtomHandler: unknownAtomHandler };\n }\n\n _createClass(RendererFactory, [{\n key: 'render',\n value: function render(mobiledoc) {\n var version = mobiledoc.version;\n\n switch (version) {\n case _renderers02.MOBILEDOC_VERSION:\n return new _renderers02['default'](mobiledoc, this.state).render();\n case undefined:\n case null:\n case _renderers03.MOBILEDOC_VERSION_0_3:\n case _renderers03.MOBILEDOC_VERSION_0_3_1:\n return new _renderers03['default'](mobiledoc, this.state).render();\n default:\n throw new Error('Unexpected Mobiledoc version \"' + version + '\"');\n }\n }\n }]);\n\n return RendererFactory;\n})();\n\nexports['default'] = RendererFactory;","/**\n * runtime Text renderer\n * renders a mobiledoc to Text\n *\n * input: mobiledoc\n * output: Text (string)\n */\n'use strict';\n\nvar _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _cardsImage = require('../cards/image');\n\nvar _utilsRenderType = require('../utils/render-type');\n\nvar _utilsSectionTypes = require('../utils/section-types');\n\nvar LINE_BREAK = '\\n';\n\nvar MOBILEDOC_VERSION = '0.2.0';\n\nexports.MOBILEDOC_VERSION = MOBILEDOC_VERSION;\nfunction validateVersion(version) {\n if (version !== MOBILEDOC_VERSION) {\n throw new Error('Unexpected Mobiledoc version \"' + version + '\"');\n }\n}\n\nvar Renderer = (function () {\n function Renderer(mobiledoc, state) {\n _classCallCheck(this, Renderer);\n\n var cards = state.cards;\n var cardOptions = state.cardOptions;\n var atoms = state.atoms;\n var unknownCardHandler = state.unknownCardHandler;\n var version = mobiledoc.version;\n var sectionData = mobiledoc.sections;\n\n validateVersion(version);\n\n var _sectionData = _slicedToArray(sectionData, 2);\n\n var sections = _sectionData[1];\n\n this.root = [];\n this.sections = sections;\n this.cards = cards;\n this.atoms = atoms;\n this.cardOptions = cardOptions;\n this.unknownCardHandler = unknownCardHandler || this._defaultUnknownCardHandler;\n\n this._teardownCallbacks = [];\n }\n\n _createClass(Renderer, [{\n key: 'render',\n value: function render() {\n var _this = this;\n\n this.sections.forEach(function (section) {\n _this.root.push(_this.renderSection(section));\n });\n\n var result = this.root.join(LINE_BREAK);\n return { result: result, teardown: function teardown() {\n return _this.teardown();\n } };\n }\n }, {\n key: 'teardown',\n value: function teardown() {\n for (var i = 0; i < this._teardownCallbacks.length; i++) {\n this._teardownCallbacks[i]();\n }\n }\n }, {\n key: 'renderSection',\n\n // for the text renderer, a missing card is a no-op\n value: function renderSection(section) {\n var _section = _slicedToArray(section, 1);\n\n var type = _section[0];\n\n switch (type) {\n case _utilsSectionTypes.MARKUP_SECTION_TYPE:\n return this.renderMarkupSection(section);\n case _utilsSectionTypes.IMAGE_SECTION_TYPE:\n return this.renderImageSection(section);\n case _utilsSectionTypes.LIST_SECTION_TYPE:\n return this.renderListSection(section);\n case _utilsSectionTypes.CARD_SECTION_TYPE:\n return this.renderCardSection(section);\n default:\n throw new Error('Unimplemented renderer for type ' + type);\n }\n }\n }, {\n key: 'renderImageSection',\n value: function renderImageSection() {\n return '';\n }\n }, {\n key: 'renderListSection',\n value: function renderListSection(_ref) {\n var _this2 = this;\n\n var _ref2 = _slicedToArray(_ref, 3);\n\n var type = _ref2[0];\n var tagName = _ref2[1];\n var items = _ref2[2];\n\n return items.map(function (li) {\n return _this2.renderListItem(li);\n }).join(LINE_BREAK);\n }\n }, {\n key: 'renderListItem',\n value: function renderListItem(markers) {\n return this.renderMarkers(markers);\n }\n }, {\n key: 'findCard',\n value: function findCard(name) {\n for (var i = 0; i < this.cards.length; i++) {\n if (this.cards[i].name === name) {\n return this.cards[i];\n }\n }\n if (name === _cardsImage['default'].name) {\n return _cardsImage['default'];\n }\n return this._createUnknownCard(name);\n }\n }, {\n key: '_createUnknownCard',\n value: function _createUnknownCard(name) {\n return {\n name: name,\n type: _utilsRenderType['default'],\n render: this.unknownCardHandler\n };\n }\n }, {\n key: 'renderCardSection',\n value: function renderCardSection(_ref3) {\n var _ref32 = _slicedToArray(_ref3, 3);\n\n var type = _ref32[0];\n var name = _ref32[1];\n var payload = _ref32[2];\n\n var card = this.findCard(name);\n\n var cardArg = this._createCardArgument(card, payload);\n var rendered = card.render(cardArg);\n\n this._validateCardRender(rendered, card.name);\n\n return rendered || '';\n }\n }, {\n key: '_validateCardRender',\n value: function _validateCardRender(rendered, cardName) {\n if (!rendered) {\n return;\n }\n\n if (typeof rendered !== 'string') {\n throw new Error('Card \"' + cardName + '\" must render ' + _utilsRenderType['default'] + ', but result was ' + typeof rendered + '\"');\n }\n }\n }, {\n key: '_registerTeardownCallback',\n value: function _registerTeardownCallback(callback) {\n this._teardownCallbacks.push(callback);\n }\n }, {\n key: '_createCardArgument',\n value: function _createCardArgument(card) {\n var _this3 = this;\n\n var payload = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var env = {\n name: card.name,\n isInEditor: false,\n onTeardown: function onTeardown(callback) {\n return _this3._registerTeardownCallback(callback);\n }\n };\n\n var options = this.cardOptions;\n\n return { env: env, options: options, payload: payload };\n }\n }, {\n key: 'renderMarkupSection',\n value: function renderMarkupSection(_ref4) {\n var _ref42 = _slicedToArray(_ref4, 3);\n\n var type = _ref42[0];\n var tagName = _ref42[1];\n var markers = _ref42[2];\n\n return this.renderMarkers(markers);\n }\n }, {\n key: 'renderMarkers',\n value: function renderMarkers(markers) {\n var str = '';\n markers.forEach(function (m) {\n var _m = _slicedToArray(m, 3);\n\n var text = _m[2];\n\n str += text;\n });\n return str;\n }\n }, {\n key: '_defaultUnknownCardHandler',\n get: function get() {\n return function () {};\n }\n }]);\n\n return Renderer;\n})();\n\nexports['default'] = Renderer;","/**\n * runtime Text renderer\n * renders a mobiledoc to Text\n *\n * input: mobiledoc\n * output: Text (string)\n */\n'use strict';\n\nvar _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _cardsImage = require('../cards/image');\n\nvar _utilsRenderType = require('../utils/render-type');\n\nvar _utilsSectionTypes = require('../utils/section-types');\n\nvar _utilsMarkerTypes = require('../utils/marker-types');\n\nvar LINE_BREAK = '\\n';\n\nvar MOBILEDOC_VERSION_0_3 = '0.3.0';\nexports.MOBILEDOC_VERSION_0_3 = MOBILEDOC_VERSION_0_3;\nvar MOBILEDOC_VERSION_0_3_1 = '0.3.1';\nexports.MOBILEDOC_VERSION_0_3_1 = MOBILEDOC_VERSION_0_3_1;\nvar MOBILEDOC_VERSION = MOBILEDOC_VERSION_0_3_1;\n\nexports.MOBILEDOC_VERSION = MOBILEDOC_VERSION;\nfunction validateVersion(version) {\n if (version !== MOBILEDOC_VERSION_0_3 && version !== MOBILEDOC_VERSION_0_3_1) {\n throw new Error('Unexpected Mobiledoc version \"' + version + '\"');\n }\n}\n\nvar Renderer = (function () {\n function Renderer(mobiledoc, state) {\n _classCallCheck(this, Renderer);\n\n var cards = state.cards;\n var cardOptions = state.cardOptions;\n var atoms = state.atoms;\n var unknownCardHandler = state.unknownCardHandler;\n var unknownAtomHandler = state.unknownAtomHandler;\n var version = mobiledoc.version;\n var sections = mobiledoc.sections;\n var atomTypes = mobiledoc.atoms;\n var cardTypes = mobiledoc.cards;\n\n validateVersion(version);\n\n this.root = [];\n this.sections = sections;\n this.atomTypes = atomTypes;\n this.cardTypes = cardTypes;\n this.cards = cards;\n this.atoms = atoms;\n this.cardOptions = cardOptions;\n this.unknownCardHandler = unknownCardHandler || this._defaultUnknownCardHandler;\n this.unknownAtomHandler = unknownAtomHandler || this._defaultUnknownAtomHandler;\n\n this._teardownCallbacks = [];\n }\n\n _createClass(Renderer, [{\n key: 'render',\n value: function render() {\n var _this = this;\n\n this.sections.forEach(function (section) {\n _this.root.push(_this.renderSection(section));\n });\n\n var result = this.root.join(LINE_BREAK);\n return { result: result, teardown: function teardown() {\n return _this.teardown();\n } };\n }\n }, {\n key: 'teardown',\n value: function teardown() {\n for (var i = 0; i < this._teardownCallbacks.length; i++) {\n this._teardownCallbacks[i]();\n }\n }\n }, {\n key: 'renderSection',\n value: function renderSection(section) {\n var _section = _slicedToArray(section, 1);\n\n var type = _section[0];\n\n switch (type) {\n case _utilsSectionTypes.MARKUP_SECTION_TYPE:\n return this.renderMarkupSection(section);\n case _utilsSectionTypes.IMAGE_SECTION_TYPE:\n return this.renderImageSection(section);\n case _utilsSectionTypes.LIST_SECTION_TYPE:\n return this.renderListSection(section);\n case _utilsSectionTypes.CARD_SECTION_TYPE:\n return this.renderCardSection(section);\n default:\n throw new Error('Unimplemented renderer for type ' + type);\n }\n }\n }, {\n key: 'renderImageSection',\n value: function renderImageSection() {\n return '';\n }\n }, {\n key: 'renderListSection',\n value: function renderListSection(_ref) {\n var _this2 = this;\n\n var _ref2 = _slicedToArray(_ref, 3);\n\n var type = _ref2[0];\n var tagName = _ref2[1];\n var items = _ref2[2];\n\n return items.map(function (li) {\n return _this2.renderListItem(li);\n }).join(LINE_BREAK);\n }\n }, {\n key: 'renderListItem',\n value: function renderListItem(markers) {\n return this.renderMarkers(markers);\n }\n }, {\n key: 'findCard',\n value: function findCard(name) {\n for (var i = 0; i < this.cards.length; i++) {\n if (this.cards[i].name === name) {\n return this.cards[i];\n }\n }\n if (name === _cardsImage['default'].name) {\n return _cardsImage['default'];\n }\n return this._createUnknownCard(name);\n }\n }, {\n key: '_findCardByIndex',\n value: function _findCardByIndex(index) {\n var cardType = this.cardTypes[index];\n if (!cardType) {\n throw new Error('No card definition found at index ' + index);\n }\n\n var _cardType = _slicedToArray(cardType, 2);\n\n var name = _cardType[0];\n var payload = _cardType[1];\n\n var card = this.findCard(name);\n\n return {\n card: card,\n payload: payload\n };\n }\n }, {\n key: '_createUnknownCard',\n value: function _createUnknownCard(name) {\n return {\n name: name,\n type: _utilsRenderType['default'],\n render: this.unknownCardHandler\n };\n }\n }, {\n key: 'renderCardSection',\n value: function renderCardSection(_ref3) {\n var _ref32 = _slicedToArray(_ref3, 2);\n\n var type = _ref32[0];\n var index = _ref32[1];\n\n var _findCardByIndex2 = this._findCardByIndex(index);\n\n var card = _findCardByIndex2.card;\n var payload = _findCardByIndex2.payload;\n\n var cardArg = this._createCardArgument(card, payload);\n var rendered = card.render(cardArg);\n\n this._validateCardRender(rendered, card.name);\n\n return rendered || '';\n }\n }, {\n key: '_validateCardRender',\n value: function _validateCardRender(rendered, cardName) {\n if (!rendered) {\n return;\n }\n\n if (typeof rendered !== 'string') {\n throw new Error('Card \"' + cardName + '\" must render ' + _utilsRenderType['default'] + ', but result was ' + typeof rendered + '\"');\n }\n }\n }, {\n key: '_registerTeardownCallback',\n value: function _registerTeardownCallback(callback) {\n this._teardownCallbacks.push(callback);\n }\n }, {\n key: '_createCardArgument',\n value: function _createCardArgument(card) {\n var _this3 = this;\n\n var payload = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var env = {\n name: card.name,\n isInEditor: false,\n onTeardown: function onTeardown(callback) {\n return _this3._registerTeardownCallback(callback);\n }\n };\n\n var options = this.cardOptions;\n\n return { env: env, options: options, payload: payload };\n }\n }, {\n key: 'renderMarkupSection',\n value: function renderMarkupSection(_ref4) {\n var _ref42 = _slicedToArray(_ref4, 3);\n\n var type = _ref42[0];\n var tagName = _ref42[1];\n var markers = _ref42[2];\n\n return this.renderMarkers(markers);\n }\n }, {\n key: 'findAtom',\n value: function findAtom(name) {\n for (var i = 0; i < this.atoms.length; i++) {\n if (this.atoms[i].name === name) {\n return this.atoms[i];\n }\n }\n return this._createUnknownAtom(name);\n }\n }, {\n key: '_createUnknownAtom',\n value: function _createUnknownAtom(name) {\n return {\n name: name,\n type: _utilsRenderType['default'],\n render: this.unknownAtomHandler\n };\n }\n }, {\n key: '_createAtomArgument',\n value: function _createAtomArgument(atom, value, payload) {\n var _this4 = this;\n\n var env = {\n name: atom.name,\n onTeardown: function onTeardown(callback) {\n return _this4._registerTeardownCallback(callback);\n }\n };\n\n var options = this.cardOptions;\n\n return { env: env, options: options, value: value, payload: payload };\n }\n }, {\n key: '_validateAtomRender',\n value: function _validateAtomRender(rendered, atomName) {\n if (!rendered) {\n return;\n }\n\n if (typeof rendered !== 'string') {\n throw new Error('Atom \"' + atomName + '\" must render ' + _utilsRenderType['default'] + ', but result was ' + typeof rendered + '\"');\n }\n }\n }, {\n key: '_findAtomByIndex',\n value: function _findAtomByIndex(index) {\n var atomType = this.atomTypes[index];\n if (!atomType) {\n throw new Error('No atom definition found at index ' + index);\n }\n\n var _atomType = _slicedToArray(atomType, 3);\n\n var name = _atomType[0];\n var value = _atomType[1];\n var payload = _atomType[2];\n\n var atom = this.findAtom(name);\n\n return {\n atom: atom,\n value: value,\n payload: payload\n };\n }\n }, {\n key: '_renderAtom',\n value: function _renderAtom(index) {\n var _findAtomByIndex2 = this._findAtomByIndex(index);\n\n var atom = _findAtomByIndex2.atom;\n var value = _findAtomByIndex2.value;\n var payload = _findAtomByIndex2.payload;\n\n var atomArg = this._createAtomArgument(atom, value, payload);\n var rendered = atom.render(atomArg);\n\n this._validateAtomRender(rendered, atom.name);\n\n return rendered || '';\n }\n }, {\n key: 'renderMarkers',\n value: function renderMarkers(markers) {\n var _this5 = this;\n\n var str = '';\n markers.forEach(function (m) {\n var _m = _slicedToArray(m, 4);\n\n var type = _m[0];\n var value = _m[3];\n\n switch (type) {\n case _utilsMarkerTypes.MARKUP_MARKER_TYPE:\n str += value;\n break;\n case _utilsMarkerTypes.ATOM_MARKER_TYPE:\n str += _this5._renderAtom(value);\n break;\n default:\n throw new Error('Unknown markup type (' + type + ')');\n }\n });\n return str;\n }\n }, {\n key: '_defaultUnknownCardHandler',\n get: function get() {\n return function () {\n // for the text renderer, a missing card is a no-op\n };\n }\n }, {\n key: '_defaultUnknownAtomHandler',\n get: function get() {\n return function (_ref5) {\n var value = _ref5.value;\n\n return value || '';\n };\n }\n }]);\n\n return Renderer;\n})();\n\nexports['default'] = Renderer;","\"use strict\";\n\nvar MARKUP_MARKER_TYPE = 0;\nexports.MARKUP_MARKER_TYPE = MARKUP_MARKER_TYPE;\nvar ATOM_MARKER_TYPE = 1;\nexports.ATOM_MARKER_TYPE = ATOM_MARKER_TYPE;","'use strict';\n\nexports['default'] = 'text';","\"use strict\";\n\nvar MARKUP_SECTION_TYPE = 1;\nexports.MARKUP_SECTION_TYPE = MARKUP_SECTION_TYPE;\nvar IMAGE_SECTION_TYPE = 2;\nexports.IMAGE_SECTION_TYPE = IMAGE_SECTION_TYPE;\nvar LIST_SECTION_TYPE = 3;\nexports.LIST_SECTION_TYPE = LIST_SECTION_TYPE;\nvar CARD_SECTION_TYPE = 10;\nexports.CARD_SECTION_TYPE = CARD_SECTION_TYPE;"],"names":["_editorEditor","_cardsImage","_utilsCursorRange","_utilsCursorPosition","_utilsMobiledocError","_version","Mobiledoc","Editor","ImageCard","Range","Position","Error","VERSION","registerGlobal","global","exports","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","Constructor","protoProps","staticProps","prototype","_get","_x5","_x6","_x7","_again","object","property","receiver","Function","desc","getOwnPropertyDescriptor","undefined","value","getter","get","call","parent","getPrototypeOf","_toConsumableArray","arr","Array","isArray","arr2","from","_toArray","_classCallCheck","instance","TypeError","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","_utilsArrayUtils","_utilsSet","_utilsLinkedList","_section","_utilsAssert","Markerable","_Section","type","tagName","_this","this","markers","arguments","isMarkerable","adoptItem","m","isMarker","isAtom","section","freeItem","forEach","append","other","newMarkers","map","clone","builder","createMarkerableSection","position","marker","offsetInMarker","text","currentMarker","head","textUntil","next","markerOffset","offset","_length","endOffset","filter","split","isBlank","splice","apply","beforeSection","afterSection","currentSection","_marker$split","_marker$split2","beforeMarker","afterMarkers","slice","_m","sectionOffset","len","edit","added","removed","_edit$added","splitAtOffset","push","blankMarker","createMarker","prepend","splitAtMarker","currentOffset","remaining","detect","Math","min","headOffset","tailOffset","range","tail","_markersInRange","_ref","markerHead","markerTail","isContained","cloned","markups","add","toArray","callback","currentHead","currentTail","max","otherSection","_this2","afterMarker","every","reduce","prev","_x","_x2","_x3","_utilsDomUtils","_utilsLinkedItem","unimplementedMethod","methodName","me","name","Section","_LinkedItem","isSection","isNested","isLeafSection","toPosition","headPosition","toRange","tailPosition","blankEdit","items","nextLeafSection","previousLeafSection","set","val","normalizedTagName","normalizeTagName","isValidTagName","_tagName","AtomNode","editor","atom","model","element","atomOptions","_teardownCallback","_rendered","options","env","_model","payload","render","_validateAndAppendRenderResult","removeChild","rendered","nodeType","appendChild","onTeardown","save","_postDidChange","teardown","_x4","_types","_utilsMixin","_utilsMarkuperable","ATOM_LENGTH","Atom","ATOM_TYPE","addMarkup","clonedMarkups","createAtom","pre","post","markup","CardNode","card","mode","method","_didRenderCallback","run","postEditor","removeSection","didRender","isInEditor","transition","display","cancel","remove","postModel","_utilsCopy","CARD_MODES","DISPLAY","EDIT","CARD_LENGTH","DEFAULT_INITIAL_MODE","Card","CARD_TYPE","setInitialMode","isCardSection","shallowCopyObject","createCardSection","_initialMode","renderNode","cardNode","initialMode","Image","IMAGE_SECTION_TYPE","src","LifecycleCallbacks","queueNames","callbackQueues","removalQueues","queueName","args","queue","_getQueue","cb","toRemove","index","indexOf","_scheduleCallbackForRemoval","_markerable","VALID_LIST_ITEM_TAGNAMES","ListItem","_Markerable","LIST_ITEM_TYPE","isListItem","contains","isLastItem","createNewSection","createListItem","createMarkupSection","_redistributeMarkers","VALID_LIST_SECTION_TAGNAMES","DEFAULT_TAG_NAME","ListSection","LIST_SECTION_TYPE","isListSection","sections","newSection","createListSection","join","item","isEmpty","HIGH_SURROGATE_RANGE","LOW_SURROGATE_RANGE","Marker","MARKER_TYPE","width","code","charCodeAt","left","right","isArrayEqual","substring","mu","VALID_MARKUP_SECTION_TAGNAMES","MARKUP_SECTION_ELEMENT_NAMES","MarkupSection","MARKUP_SECTION_TYPE","isMarkupSection","VALID_MARKUP_TAGNAMES","VALID_ATTRIBUTES","Markup","attributes","filterObject","MARKUP_TYPE","_modelsAtom","_modelsPost","_modelsMarkupSection","_modelsListSection","_modelsListItem","_modelsImage","_modelsMarker","_modelsMarkup","_modelsCard","_modelsTypes","cacheKey","objectToSortedKVArray","addMarkupToCache","cache","findMarkupInCache","PostNodeBuilder","markupCache","s","isGenerated","url","Post","POST_TYPE","blankPosition","walkMarkerableSections","trimTo","firstSection","lastSection","removedSections","changedSections","compact","headMarker","tailMarker","callbackFn","nextSection","_nextMarkerableSection","isCollapsed","pos","back","markerIn","forward","isForwardInclusive","isBackwardInclusive","markupsInRange","walkLeafSections","shouldStop","_nextLeafSection","hasChildren","firstChild","createPost","sectionParent","listParent","currentRange","markersFor","headSectionOffset","tailSectionOffset","RenderNode","postNode","renderTree","isDirty","isRemoved","_childNodes","_element","_cursorElement","markupElement","headTextNode","tailTextNode","atomNode","containsNode","rootElement","markDirty","node","destroy","currentElement","removeElementRenderNode","setElementRenderNode","cursorElement","_modelsRenderNode","_utilsElementMap","RenderTree","rootPostNode","_rootNode","buildRenderNode","_elements","conditionFn","getElementRenderNode","parentNode","rootNode","transformHTMLText","_renderersEditorDom","_utilsCharacters","_parsersSection","GOOGLE_DOCS_CONTAINER_ID_REGEX","NO_BREAK_SPACE_REGEX","RegExp","NO_BREAK_SPACE","TAB_CHARACTER_REGEX","TAB_CHARACTER","textContent","replace","TAB","isGoogleDocsContainer","isTextNode","isCommentNode","test","id","detectRootElement","childNodes","googleDocsContainer","TAG_REMAPPING","remapTagName","normalized","remapped","trim","str","walkMarkerableNodes","currentNode","isElementNode","classList","ATOM_CLASS_NAME","nextSibling","DOMParser","sectionParser","_eachChildNode","child","parseSections","appendSections","appendSection","_inferredTagName","nodes","parse","textNode","markupFromNode","isValidElement","getAttributes","createMarkup","reparseListSection","reparseListItem","reparseMarkupSection","_reparseSectionContainingMarkers","listItem","listSection","_this3","li","_this4","seenRenderNodes","previousMarker","collectMarkups","scheduleForRemoval","_renderNode","ZWNJ","newMarkups","newPreviousMarker","insertBefore","newPreviousRenderNode","nextMarker","nextValue","newMarker","insertAfter","newRenderNode","markClean","previousRenderNode","_dom","HTMLParser","html","dom","parseHTML","parser","_slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","_i","Symbol","iterator","done","err","_renderersMobiledoc02","MobiledocParser","version","sectionData","markerTypes","parseMarkerTypes","e","message","markerType","parseMarkerType","_ref2","_ref22","attributesArray","attributesObject","kvArrayToObject","parseSection","MOBILEDOC_MARKUP_SECTION_TYPE","parseMarkupSection","MOBILEDOC_IMAGE_SECTION_TYPE","parseImageSection","MOBILEDOC_CARD_SECTION_TYPE","parseCardSection","MOBILEDOC_LIST_SECTION_TYPE","parseListSection","_ref3","_ref32","_ref4","_ref42","createImageSection","_ref5","_ref52","parseMarkers","_ref6","_ref62","parseListItems","parseListItem","parseMarker","_ref7","_this5","_ref72","markerTypeIndexes","closeCount","_renderersMobiledoc03","cardTypes","cards","atomTypes","atoms","parseCardTypes","parseAtomTypes","cardType","parseCardType","cardName","cardPayload","atomType","parseAtomType","atomName","atomValue","atomPayload","cardIndex","_getCardTypeFromIndex","getCardTypeFromIndex","_getCardTypeFromIndex2","_ref8","_ref82","_this6","_ref9","_this7","_ref92","buildMarkerType","MOBILEDOC_MARKUP_MARKER_TYPE","MOBILEDOC_ATOM_MARKER_TYPE","_getAtomTypeFromIndex","getAtomTypeFromIndex","_getAtomTypeFromIndex2","_","_2","parseVersion","mobiledoc","MOBILEDOC_VERSION","_parsersDom","SKIPPABLE_ELEMENT_TAG_NAMES","SectionParser","plugins","_isSkippable","state","_updateStateFromElement","el","parseNode","_closeCurrentSection","parsed","isNodeFinished","addSection","addMarkerable","_createMarker","nodeFinished","plugin","runPlugins","NODE_TYPES","TEXT","parseTextNode","ELEMENT","parseElementNode","_state$markups","_markupsFromElement","_createSectionFromElement","_isValidMarkupForElement","_markupsFromElementStyle","style","fontWeight","_element$style","fontStyle","sectionType","inferredTagName","_getSectionDetails2","_getSectionDetails","UL_LI_REGEX","OL_LI_REGEX","CR","LF","CR_REGEX","CR_LF_REGEX","SECTION_BREAK","normalizeLineEndings","TextParser","prevSection","_parseSection","_appendSection","match","list","isSameListSection","_destroyHooks","_defineProperty","obj","_modelsCardNode","_modelsAtomNode","_utilsStringUtils","CARD_ELEMENT_CLASS_NAME","SPACE","EDITOR_HAS_NO_CONTENT_CLASS_NAME","EDITOR_ELEMENT_CLASS_NAME","createElementFromMarkup","doc","createElement","keys","k","setAttribute","TWO_SPACES","SPACE_AND_NO_BREAK","SPACES_REGEX","TAB_REGEX","endsWithSpace","endsWith","startsWithSpace","startsWith","renderHTMLText","substr","penultimateParentOf","parentElement","document","body","renderMarkupSection","addClassName","renderListSection","renderListItem","renderCursorPlaceholder","renderInlineCursorPlaceholder","createTextNode","renderCard","wrapper","cardElement","contentEditable","wrapElement","openedMarkups","wrappedElement","openedElement","attachElementToParent","previousSibling","previousSiblingPenultimate","renderAtom","atomElement","getNextMarkerElement","closedCount","closedMarkups","renderMarker","attachRenderNodeElementToDOM","originalElement","hasRendered","replaceChild","nextSiblingElement","previousElement","removeRenderNodeSectionFromParent","removeRenderNodeElementFromParent","validateCards","validateAtoms","Visitor","unknownCardHandler","unknownAtomHandler","_createUnknownCard","_createUnknownAtom","visit","hasContent","removeClassName","cursorPlaceholder","visitAll","_renderMarker","nextElement","_findCard","_renderCard","atomModel","_renderAtom","_findAtom","destroyHooks","isRendered","removeDestroyedChildren","forceRemoval","nextChild","lookupNode","previousNode","Renderer","visitor","force","postNodes","_len","_key","concat","shift","_visitor","_utilsCompiler","opcodes","visitArray","postOpcodeCompiler","openMarker","markupMarkerIds","openMarkupSection","openListSection","openListItem","openImageSection","openCardSection","openPost","result","openMarkup","_findOrAddMarkerTypeIndex","_markerTypeCache","compiler","compile","_addCardTypeIndex","openAtom","_addAtomTypeIndex","any","arrayLike","filtered","commonItemLength","listA","listB","commonItems","initialValue","previousValue","array","sort","arr1","l1","l2","validKeys","values","_mobiledocError","conditional","isMac","window","navigator","platform","isWin","ENTER","_arrayUtils","_assert","l","_opcodes$i","params","copy","_utilsSelectionUtils","_cursorPosition","_cursorRange","_utilsKey","Cursor","_renderTree","clearSelection","_hasCollapsedSelection","_hasSelection","findRenderNodeFromElement","renderedElement","lastChild","direction","_findNodeForPosition2","_findNodeForPosition","headNode","_findNodeForPosition3","tailNode","_moveToNode","_ensureFocus","selection","toString","endNode","DIRECTION","FORWARD","BACKWARD","createRange","setStart","extend","addRange","setEnd","_selectionRange","collapsed","anchorNode","focusNode","hasCursor","blankRange","_comparePosition","comparePosition","fromNode","getSelection","rangeCount","getRangeAt","_range","WORD_CHAR_REGEX","findParentSectionFromNode","findOffsetInMarkerable","markerable","offsetInSection","markerNode","findOffsetInSection","wrapperNode","endTextNode","BlankPosition","move","isEqual","units","moveLeft","moveRight","isPostBoundary","isHeadOfPost","isTailOfPost","isBoundary","dir","isHead","isTail","getChar","charAt","peekChar","moveWord","seekWord","seekBoundary","leafSectionIndex","walkAllLeafSections","markerPosition","markerPositionAtOffset","x","y","elementFromPoint","_findOffsetInNode","findOffsetInNode","top","fromTextNode","fromElementNode","offsetInNode","offsetOfMarker","elementNode","_Position","_position","currentDirection","newDirection","focusedPosition","_collapse","headSection","tailSection","deprecate","console","log","COMMENT","walkDOM","topNode","walkTextNodes","clearChildNodes","childNode","compareDocumentPosition","Node","DOCUMENT_POSITION_CONTAINED_BY","hasAttributes","className","toLowerCase","div","innerHTML","uuidGenerator","ElementMap","_map","uuid","_uuid","getEventTargetMatchingTag","container","getElementRelativeOffset","offsetParentRect","pageYOffset","offsetParent","offsetParentPosition","getComputedStyle","getBoundingClientRect","getElementComputedStyleNumericProp","prop","parseFloat","positionElementToRect","rect","topOffset","leftOffset","relativeOffset","round","positionElementHorizontallyCenteredToRect","horizontalCenter","offsetWidth","positionElementCenteredBelow","belowElement","elementMargin","offsetHeight","setData","dataset","dataName","dasherize","FixedQueue","_maxLength","_items","pop","modifierMask","_keycodes","MODIFIERS","META","CTRL","SHIFT","ALT","event","metaKey","shiftKey","ctrlKey","altKey","modVal","modifier","SPECIAL_KEYS","BACKSPACE","ESC","PAGEUP","PAGEDOWN","END","HOME","LEFT","UP","RIGHT","DOWN","INS","DEL","DELETE","isKeyEvent","Key","keyCode","charCode","String","fromCharCode","isHorizontalArrow","isVerticalArrow","isArrow","isSpace","isTab","isEnter","A","Z","a","z","NUMPAD_0","NUMPAD_9","IME","isDelete","isForwardDelete","isRightArrow","LinkedItem","PARENT_PROP","LinkedList","_adoptItem","_freeItem","prevItem","nextItem","_ensureItemIsNotInList","insertPos","_ensureItemIsInThisList","startItem","endItem","walk","readRange","targetIndex","targetItem","removalCount","newItems","count","newItem","Logger","manager","isEnabled","_window$console","unshift","LogManager","enabledTypes","allEnabled","types","Markerupable","markupOrMarkupCallback","_markup","_removeMarkup","tagNameOrMarkup","getMarkup","_ret2","v","_ret3","targetMarkup","mergeWithOptions","original","updates","hasOwnProperty","merge","mixin","CONSTRUCTOR_FN_NAME","source","getOwnPropertyNames","errorProps","MobiledocError","tmp","captureStackTrace","idx","getContentFromPasteEvent","setClipboardData","parsePostFromPaste","parsePostFromDrop","_parsersMobiledoc","_parsersHtml","_parsersText","MIME_TEXT_PLAIN","MIME_TEXT_HTML","NONSTANDARD_IE_TEXT_TYPE","MOBILEDOC_REGEX","parsePostFromHTML","mobiledocString","JSON","parsePostFromText","clipboardData","getData","getContentFromDropEvent","logger","dataTransfer","stringify","nonstandardClipboardData","pasteEvent","_parserPlugins","targetFormat","_getContentFromPasteEvent","dropEvent","_getContentFromDropEvent","placeholderImageSrc","removeAllRanges","textNodeRects","nodeValue","getClientRects","findOffsetInTextNode","coords","bottom","closest","dyClosest","coordsClosest","rects","dy","_again2","anchorOffset","focusOffset","DOCUMENT_POSITION_CONTAINS","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","Set","has","string","lower","capitalize","toUpperCase","character","endString","lastIndexOf","rangeLike","_view","_utilsElementUtils","DELAY","Tooltip","_View","timeout","classNames","addEventListener","showForTag","isContentEditable","setTimeout","showLink","href","clearTimeout","toElement","relatedTarget","hide","tooltipElement","show","link","showMessage","View","isShowing","_eventListeners","listener","removeEventListener","removeAllEventListeners","isDestroyed","_rendererFactory","_utilsRenderType","MobiledocTextRenderer","RENDER_TYPE","_renderers02","_renderers03","RendererFactory","cardOptions","MOBILEDOC_VERSION_0_3","MOBILEDOC_VERSION_0_3_1","_utilsSectionTypes","LINE_BREAK","validateVersion","_sectionData","root","_defaultUnknownCardHandler","_teardownCallbacks","renderSection","renderImageSection","CARD_SECTION_TYPE","renderCardSection","renderMarkers","findCard","cardArg","_createCardArgument","_validateCardRender","_registerTeardownCallback","_utilsMarkerTypes","_defaultUnknownAtomHandler","_cardType","_findCardByIndex2","_findCardByIndex","_atomType","findAtom","_findAtomByIndex2","_findAtomByIndex","atomArg","_createAtomArgument","_validateAtomRender","MARKUP_MARKER_TYPE","ATOM_MARKER_TYPE"],"sourceRoot":""}