latex-editor
Version:
Super Simple Collaborative Latex Editor
1 lines • 12.4 kB
Source Map (JSON)
{"version":3,"sources":["../yjs/node_modules/browserify/node_modules/browser-pack/_prelude.js","src/Array.js"],"names":[],"mappings":"AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"y-array.es6","sourceRoot":"/source/","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","/* global Y */\n'use strict'\n\nfunction extend (Y) {\n class YArray {\n constructor (os, _model, _content) {\n this.os = os\n this._model = _model\n // Array of all the neccessary content\n this._content = _content\n this.eventHandler = new Y.utils.EventHandler((op) => {\n if (op.struct === 'Insert') {\n let pos\n // we check op.left only!,\n // because op.right might not be defined when this is called\n if (op.left === null) {\n pos = 0\n } else {\n pos = 1 + this._content.findIndex(function (c) {\n return Y.utils.compareIds(c.id, op.left)\n })\n if (pos <= 0) {\n throw new Error('Unexpected operation!')\n }\n }\n var values\n var length\n if (op.hasOwnProperty('opContent')) {\n this._content.splice(pos, 0, {\n id: op.id,\n type: op.opContent\n })\n let opContent = op.opContent\n length = 1\n values = () => {\n return new Promise((resolve) => {\n this.os.requestTransaction(function *() {\n var type = yield* this.getType(opContent)\n resolve([type])\n })\n })\n }\n } else {\n var contents = op.content.map(function (c, i) {\n return {\n id: [op.id[0], op.id[1] + i],\n val: c\n }\n })\n // insert value in _content\n this._content.splice.apply(this._content, [pos, 0].concat(contents))\n values = op.content\n length = op.content.length\n }\n this.eventHandler.callEventListeners({\n type: 'insert',\n object: this,\n index: pos,\n values: values,\n // valueId: valueId, // TODO: does this still work as expected?\n length: length\n })\n } else if (op.struct === 'Delete') {\n var i = 0 // current position in _content\n for (; i < this._content.length && op.length > 0; i++) {\n var c = this._content[i]\n if (Y.utils.inDeletionRange(op, c.id)) {\n // is in deletion range!\n var delLength\n // check how many character to delete in one flush\n for (delLength = 1;\n delLength < op.length && i + delLength < this._content.length && Y.utils.inDeletionRange(op, this._content[i + delLength].id);\n delLength++) {}\n // last operation thas will be deleted\n c = this._content[i + delLength - 1]\n // update delete operation\n op.length -= c.id[1] - op.target[1] + 1\n op.target = [c.id[0], c.id[1] + 1]\n // apply deletion & find send event\n let content = this._content.splice(i, delLength)\n // TODO: how about return types\n let values = content.map(function (c) { return c.val })\n this.eventHandler.callEventListeners({\n type: 'delete',\n object: this,\n index: i,\n values: values,\n _content: content,\n length: delLength\n })\n // with the fresh delete op, we can continue\n // note: we don't have to increment i, because the i-th content was deleted\n // but on the other had, the (i+delLength)-th was not in deletion range\n // So we don't do i--\n }\n }\n } else {\n throw new Error('Unexpected struct!')\n }\n })\n }\n _destroy () {\n this.eventHandler.destroy()\n this.eventHandler = null\n this._content = null\n this._model = null\n this.os = null\n }\n get length () {\n return this._content.length\n }\n get (pos) {\n if (pos == null || typeof pos !== 'number') {\n throw new Error('pos must be a number!')\n }\n if (pos >= this._content.length) {\n return undefined\n }\n if (this._content[pos].type == null) {\n return this._content[pos].val\n } else {\n var oid = this._content[pos].type\n return new Promise((resolve) => {\n this.os.requestTransaction(function *() {\n var type = yield* this.getType(oid)\n resolve(type)\n })\n })\n }\n }\n // only returns primitive values\n toArray () {\n return this._content.map(function (x, i) {\n return x.val\n })\n }\n push (contents) {\n return this.insert(this._content.length, contents)\n }\n insert (pos, contents) {\n if (typeof pos !== 'number') {\n throw new Error('pos must be a number!')\n }\n if (!(contents instanceof Array)) {\n throw new Error('contents must be an Array of objects!')\n }\n if (contents.length === 0) {\n return\n }\n if (pos > this._content.length || pos < 0) {\n throw new Error('This position exceeds the range of the array!')\n }\n var mostLeft = pos === 0 ? null : this._content[pos - 1].id\n\n var ops = []\n var newTypes = []\n var prevId = mostLeft\n for (var i = 0; i < contents.length;) {\n var op = {\n left: prevId,\n origin: prevId,\n // right: mostRight,\n // NOTE: I intentionally do not define right here, because it could be deleted\n // at the time of inserting this operation (when we get the transaction),\n // and would therefore not defined in this._content\n parent: this._model,\n struct: 'Insert'\n }\n var _content = []\n var typeDefinition\n while (i < contents.length) {\n var val = contents[i++]\n typeDefinition = Y.utils.isTypeDefinition(val)\n if (!typeDefinition) {\n _content.push(val)\n } else if (_content.length > 0) {\n i-- // come back again later\n break\n } else {\n break\n }\n }\n if (_content.length > 0) {\n // content is defined\n op.content = _content\n op.id = this.os.getNextOpId(_content.length)\n } else {\n // otherwise its a type\n var typeid = this.os.getNextOpId(1)\n newTypes.push([typeDefinition, typeid])\n op.opContent = typeid\n op.id = this.os.getNextOpId(1)\n }\n ops.push(op)\n prevId = op.id\n }\n var eventHandler = this.eventHandler\n this.os.requestTransaction(function *() {\n // now we can set the right reference.\n var mostRight\n if (mostLeft != null) {\n var ml = yield* this.getInsertionCleanEnd(mostLeft)\n mostRight = ml.right\n } else {\n mostRight = (yield* this.getOperation(ops[0].parent)).start\n }\n for (var i = 0; i < newTypes.length; i++) {\n yield* this.createType.apply(this, newTypes[i])\n }\n for (var j = 0; j < ops.length; j++) {\n var op = ops[j]\n op.right = mostRight\n }\n yield* eventHandler.awaitOps(this, this.applyCreatedOperations, [ops])\n })\n eventHandler.awaitAndPrematurelyCall(ops)\n }\n delete (pos, length) {\n if (length == null) { length = 1 }\n if (typeof length !== 'number') {\n throw new Error('length must be a number!')\n }\n if (typeof pos !== 'number') {\n throw new Error('pos must be a number!')\n }\n if (pos + length > this._content.length || pos < 0 || length < 0) {\n throw new Error('The deletion range exceeds the range of the array!')\n }\n if (length === 0) {\n return\n }\n var eventHandler = this.eventHandler\n var dels = []\n for (var i = 0; i < length; i = i + delLength) {\n var targetId = this._content[pos + i].id\n var delLength\n // how many insertions can we delete in one deletion?\n for (delLength = 1; i + delLength < length; delLength++) {\n if (!Y.utils.compareIds(this._content[pos + i + delLength].id, [targetId[0], targetId[1] + delLength])) {\n break\n }\n }\n dels.push({\n target: targetId,\n struct: 'Delete',\n length: delLength\n })\n }\n eventHandler.awaitAndPrematurelyCall(dels)\n this.os.requestTransaction(function *() {\n yield* eventHandler.awaitOps(this, this.applyCreatedOperations, [dels])\n })\n }\n observe (f) {\n this.eventHandler.addEventListener(f)\n }\n unobserve (f) {\n this.eventHandler.removeEventListener(f)\n }\n * _changed (transaction, op) {\n if (!op.deleted) {\n if (op.struct === 'Insert') {\n var l = op.left\n var left\n while (l != null) {\n left = yield* transaction.getInsertion(l)\n if (!left.deleted) {\n break\n }\n l = left.left\n }\n op.left = l\n }\n this.eventHandler.receivedOp(op)\n }\n }\n }\n\n Y.extend('Array', new Y.utils.CustomType({\n name: 'Array',\n class: YArray,\n struct: 'List',\n initType: function * YArrayInitializer (os, model) {\n var _content = []\n yield* Y.Struct.List.map.call(this, model, function (op) {\n if (op.hasOwnProperty('opContent')) {\n _content.push({\n id: op.id,\n type: op.opContent\n })\n } else {\n op.content.forEach(function (c, i) {\n _content.push({\n id: [op.id[0], op.id[1] + i],\n val: op.content[i]\n })\n })\n }\n })\n return new YArray(os, model.id, _content)\n }\n }))\n}\n\nmodule.exports = extend\nif (typeof Y !== 'undefined') {\n extend(Y)\n}\n"]}