1 line
12 KiB
Plaintext
1 line
12 KiB
Plaintext
{"version":3,"sources":["../yjs/node_modules/browser-pack/_prelude.js","src/Text.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","file":"y-text.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 */\r\n'use strict'\r\n\r\nfunction extend (Y) {\r\n Y.requestModules(['Array']).then(function () {\r\n class YText extends Y.Array['class'] {\r\n constructor (os, _model, idArray, valArray) {\r\n super(os, _model, idArray, valArray)\r\n this.textfields = []\r\n }\r\n toString () {\r\n return this.valArray.join('')\r\n }\r\n insert (pos, content) {\r\n super.insert(pos, content.split(''))\r\n }\r\n bind (textfield, domRoot) {\r\n domRoot = domRoot || window; // eslint-disable-line\r\n if (domRoot.getSelection == null) {\r\n domRoot = window;// eslint-disable-line\r\n }\r\n\r\n // don't duplicate!\r\n for (var t in this.textfields) {\r\n if (this.textfields[t] === textfield) {\r\n return\r\n }\r\n }\r\n var creatorToken = false\r\n\r\n var word = this\r\n textfield.value = this.toString()\r\n this.textfields.push(textfield)\r\n var createRange, writeRange, writeContent\r\n if (textfield.selectionStart != null && textfield.setSelectionRange != null) {\r\n createRange = function (fix) {\r\n var left = textfield.selectionStart\r\n var right = textfield.selectionEnd\r\n if (fix != null) {\r\n left = fix(left)\r\n right = fix(right)\r\n }\r\n return {\r\n left: left,\r\n right: right\r\n }\r\n }\r\n writeRange = function (range) {\r\n writeContent(word.toString())\r\n textfield.setSelectionRange(range.left, range.right)\r\n }\r\n writeContent = function (content) {\r\n textfield.value = content\r\n }\r\n } else {\r\n createRange = function (fix) {\r\n var range = {}\r\n var s = domRoot.getSelection()\r\n var clength = textfield.textContent.length\r\n range.left = Math.min(s.anchorOffset, clength)\r\n range.right = Math.min(s.focusOffset, clength)\r\n if (fix != null) {\r\n range.left = fix(range.left)\r\n range.right = fix(range.right)\r\n }\r\n var editedElement = s.focusNode\r\n if (editedElement === textfield || editedElement === textfield.childNodes[0]) {\r\n range.isReal = true\r\n } else {\r\n range.isReal = false\r\n }\r\n return range\r\n }\r\n\r\n writeRange = function (range) {\r\n writeContent(word.toString())\r\n var textnode = textfield.childNodes[0]\r\n if (range.isReal && textnode != null) {\r\n if (range.left < 0) {\r\n range.left = 0\r\n }\r\n range.right = Math.max(range.left, range.right)\r\n if (range.right > textnode.length) {\r\n range.right = textnode.length\r\n }\r\n range.left = Math.min(range.left, range.right)\r\n var r = document.createRange(); // eslint-disable-line\r\n r.setStart(textnode, range.left)\r\n r.setEnd(textnode, range.right)\r\n var s = window.getSelection(); // eslint-disable-line\r\n s.removeAllRanges()\r\n s.addRange(r)\r\n }\r\n }\r\n writeContent = function (content) {\r\n var contentArray = content.replace(new RegExp('\\n', 'g'), ' ').split(' ');// eslint-disable-line\r\n textfield.innerText = ''\r\n for (var i in contentArray) {\r\n var c = contentArray[i]\r\n textfield.innerText += c\r\n if (i !== contentArray.length - 1) {\r\n textfield.innerHTML += ' '\r\n }\r\n }\r\n }\r\n }\r\n writeContent(this.toString())\r\n\r\n this.observe(function (events) {\r\n for (var e in events) {\r\n var event = events[e]\r\n if (!creatorToken) {\r\n var oPos, fix\r\n if (event.type === 'insert') {\r\n oPos = event.index\r\n fix = function (cursor) {// eslint-disable-line\r\n if (cursor <= oPos) {\r\n return cursor\r\n } else {\r\n cursor += 1\r\n return cursor\r\n }\r\n }\r\n var r = createRange(fix)\r\n writeRange(r)\r\n } else if (event.type === 'delete') {\r\n oPos = event.index\r\n fix = function (cursor) {// eslint-disable-line\r\n if (cursor < oPos) {\r\n return cursor\r\n } else {\r\n cursor -= 1\r\n return cursor\r\n }\r\n }\r\n r = createRange(fix)\r\n writeRange(r)\r\n }\r\n }\r\n }\r\n })\r\n // consume all text-insert changes.\r\n textfield.onkeypress = function (event) {\r\n if (word.is_deleted) {\r\n // if word is deleted, do not do anything ever again\r\n textfield.onkeypress = null\r\n return true\r\n }\r\n creatorToken = true\r\n var char\r\n if (event.keyCode === 13) {\r\n char = '\\n'\r\n } else if (event.key != null) {\r\n if (event.charCode === 32) {\r\n char = ' '\r\n } else {\r\n char = event.key\r\n }\r\n } else {\r\n char = window.String.fromCharCode(event.keyCode); // eslint-disable-line\r\n }\r\n if (char.length > 1) {\r\n return true\r\n } else if (char.length > 0) {\r\n var r = createRange()\r\n var pos = Math.min(r.left, r.right, word.length)\r\n var diff = Math.abs(r.right - r.left)\r\n word.delete(pos, diff)\r\n word.insert(pos, char)\r\n r.left = pos + char.length\r\n r.right = r.left\r\n writeRange(r)\r\n }\r\n event.preventDefault()\r\n creatorToken = false\r\n return false\r\n }\r\n textfield.onpaste = function (event) {\r\n if (word.is_deleted) {\r\n // if word is deleted, do not do anything ever again\r\n textfield.onpaste = null\r\n return true\r\n }\r\n event.preventDefault()\r\n }\r\n textfield.oncut = function (event) {\r\n if (word.is_deleted) {\r\n // if word is deleted, do not do anything ever again\r\n textfield.oncut = null\r\n return true\r\n }\r\n event.preventDefault()\r\n }\r\n //\r\n // consume deletes. Note that\r\n // chrome: won't consume deletions on keypress event.\r\n // keyCode is deprecated. BUT: I don't see another way.\r\n // since event.key is not implemented in the current version of chrome.\r\n // Every browser supports keyCode. Let's stick with it for now..\r\n //\r\n textfield.onkeydown = function (event) {\r\n creatorToken = true\r\n if (word.is_deleted) {\r\n // if word is deleted, do not do anything ever again\r\n textfield.onkeydown = null\r\n return true\r\n }\r\n var r = createRange()\r\n var pos = Math.min(r.left, r.right, word.toString().length)\r\n var diff = Math.abs(r.left - r.right)\r\n if (event.keyCode != null && event.keyCode === 8) { // Backspace\r\n if (diff > 0) {\r\n word.delete(pos, diff)\r\n r.left = pos\r\n r.right = pos\r\n writeRange(r)\r\n } else {\r\n if (event.ctrlKey != null && event.ctrlKey) {\r\n var val = word.toString()\r\n var newPos = pos\r\n var delLength = 0\r\n if (pos > 0) {\r\n newPos--\r\n delLength++\r\n }\r\n while (newPos > 0 && val[newPos] !== ' ' && val[newPos] !== '\\n') {\r\n newPos--\r\n delLength++\r\n }\r\n word.delete(newPos, pos - newPos)\r\n r.left = newPos\r\n r.right = newPos\r\n writeRange(r)\r\n } else {\r\n if (pos > 0) {\r\n word.delete(pos - 1, 1)\r\n r.left = pos - 1\r\n r.right = pos - 1\r\n writeRange(r)\r\n }\r\n }\r\n }\r\n event.preventDefault()\r\n creatorToken = false\r\n return false\r\n } else if (event.keyCode != null && event.keyCode === 46) { // Delete\r\n if (diff > 0) {\r\n word.delete(pos, diff)\r\n r.left = pos\r\n r.right = pos\r\n writeRange(r)\r\n } else {\r\n word.delete(pos, 1)\r\n r.left = pos\r\n r.right = pos\r\n writeRange(r)\r\n }\r\n event.preventDefault()\r\n creatorToken = false\r\n return false\r\n } else {\r\n creatorToken = false\r\n return true\r\n }\r\n }\r\n }\r\n }\r\n Y.extend('Text', new Y.utils.CustomType({\r\n name: 'Text',\r\n class: YText,\r\n struct: 'List',\r\n initType: function * YTextInitializer (os, model) {\r\n var valArray = []\r\n var idArray = yield* Y.Struct.List.map.call(this, model, function (c) {\r\n valArray.push(c.content)\r\n return JSON.stringify(c.id)\r\n })\r\n return new YText(os, model.id, idArray, valArray)\r\n }\r\n }))\r\n })\r\n}\r\n\r\nmodule.exports = extend\r\nif (typeof Y !== 'undefined') {\r\n extend(Y)\r\n}\r\n"]} |