2017-10-16 04:53:12 +02:00
|
|
|
import { splitHelper, default as Item } from './Item.js'
|
2018-03-29 11:58:02 +02:00
|
|
|
import { logItemHelper } from '../MessageHandler/messageToString.js'
|
2017-10-11 03:41:54 +02:00
|
|
|
|
|
|
|
|
export default class ItemJSON extends Item {
|
|
|
|
|
constructor () {
|
|
|
|
|
super()
|
|
|
|
|
this._content = null
|
|
|
|
|
}
|
2018-02-15 17:58:14 +01:00
|
|
|
_copy () {
|
|
|
|
|
let struct = super._copy()
|
2017-10-30 11:33:00 +01:00
|
|
|
struct._content = this._content
|
|
|
|
|
return struct
|
|
|
|
|
}
|
2017-10-11 03:41:54 +02:00
|
|
|
get _length () {
|
|
|
|
|
return this._content.length
|
|
|
|
|
}
|
|
|
|
|
_fromBinary (y, decoder) {
|
|
|
|
|
let missing = super._fromBinary(y, decoder)
|
|
|
|
|
let len = decoder.readVarUint()
|
|
|
|
|
this._content = new Array(len)
|
|
|
|
|
for (let i = 0; i < len; i++) {
|
2017-10-19 17:36:28 +02:00
|
|
|
const ctnt = decoder.readVarString()
|
2017-11-10 18:41:10 -08:00
|
|
|
let parsed
|
|
|
|
|
if (ctnt === 'undefined') {
|
|
|
|
|
parsed = undefined
|
|
|
|
|
} else {
|
|
|
|
|
parsed = JSON.parse(ctnt)
|
|
|
|
|
}
|
|
|
|
|
this._content[i] = parsed
|
2017-10-11 03:41:54 +02:00
|
|
|
}
|
|
|
|
|
return missing
|
|
|
|
|
}
|
2017-10-16 04:53:12 +02:00
|
|
|
_toBinary (encoder) {
|
|
|
|
|
super._toBinary(encoder)
|
2017-10-11 03:41:54 +02:00
|
|
|
let len = this._content.length
|
|
|
|
|
encoder.writeVarUint(len)
|
|
|
|
|
for (let i = 0; i < len; i++) {
|
2017-11-10 18:41:10 -08:00
|
|
|
let encoded
|
|
|
|
|
let content = this._content[i]
|
|
|
|
|
if (content === undefined) {
|
|
|
|
|
encoded = 'undefined'
|
|
|
|
|
} else {
|
|
|
|
|
encoded = JSON.stringify(content)
|
|
|
|
|
}
|
|
|
|
|
encoder.writeVarString(encoded)
|
2017-10-11 03:41:54 +02:00
|
|
|
}
|
|
|
|
|
}
|
2018-03-29 11:58:02 +02:00
|
|
|
/**
|
|
|
|
|
* Transform this YXml Type to a readable format.
|
|
|
|
|
* Useful for logging as all Items and Delete implement this method.
|
|
|
|
|
*
|
|
|
|
|
* @private
|
|
|
|
|
*/
|
2017-10-11 03:41:54 +02:00
|
|
|
_logString () {
|
2018-03-29 11:58:02 +02:00
|
|
|
return logItemHelper('ItemJSON', this, `content:${JSON.stringify(this._content)}`)
|
2017-10-11 03:41:54 +02:00
|
|
|
}
|
2017-10-16 04:53:12 +02:00
|
|
|
_splitAt (y, diff) {
|
|
|
|
|
if (diff === 0) {
|
|
|
|
|
return this
|
|
|
|
|
} else if (diff >= this._length) {
|
|
|
|
|
return this._right
|
|
|
|
|
}
|
|
|
|
|
let item = new ItemJSON()
|
|
|
|
|
item._content = this._content.splice(diff)
|
|
|
|
|
splitHelper(y, this, item, diff)
|
|
|
|
|
return item
|
|
|
|
|
}
|
2017-10-11 03:41:54 +02:00
|
|
|
}
|