fix: Improve the getAttributes method implementation
This commit is contained in:
parent
c398448152
commit
782b2f4d00
@ -877,19 +877,28 @@ export const typeMapGet = (parent, key) => {
|
||||
|
||||
/**
|
||||
* @param {AbstractType<any>} parent
|
||||
* @param {Snapshot} [snapshot]
|
||||
* @return {Object<string,Object<string,any>|number|null|Array<any>|string|Uint8Array|AbstractType<any>|undefined>}
|
||||
*
|
||||
* @private
|
||||
* @function
|
||||
*/
|
||||
export const typeMapGetAll = (parent) => {
|
||||
export const typeMapGetAll = (parent, snapshot) => {
|
||||
/**
|
||||
* @type {Object<string,any>}
|
||||
*/
|
||||
const res = {}
|
||||
const isItemExist = parent._item && isVisible(parent._item, snapshot)
|
||||
parent._map.forEach((value, key) => {
|
||||
if (!value.deleted) {
|
||||
res[key] = value.content.getContent()[value.length - 1]
|
||||
/**
|
||||
* @type {Item|null}
|
||||
*/
|
||||
let item = value
|
||||
while (isItemExist && item && !isVisible(item, snapshot)) {
|
||||
item = item.left
|
||||
}
|
||||
if (item) {
|
||||
res[key] = item.content.getContent()[item.length - 1]
|
||||
}
|
||||
})
|
||||
return res
|
||||
|
@ -1259,12 +1259,14 @@ export class YText extends AbstractType {
|
||||
*
|
||||
* @note Xml-Text nodes don't have attributes. You can use this feature to assign properties to complete text-blocks.
|
||||
*
|
||||
* @param {Snapshot} [snapshot]
|
||||
*
|
||||
* @return {Object<string, any>} A JSON Object that describes the attributes.
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
getAttributes () {
|
||||
return typeMapGetAll(this)
|
||||
getAttributes (snapshot) {
|
||||
return typeMapGetAll(this, snapshot)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -10,7 +10,7 @@ import {
|
||||
typeMapGetAll,
|
||||
typeListForEach,
|
||||
YXmlElementRefID,
|
||||
YXmlText, ContentType, AbstractType, UpdateDecoderV1, UpdateDecoderV2, UpdateEncoderV1, UpdateEncoderV2, Doc, Item // eslint-disable-line
|
||||
YXmlText, ContentType, AbstractType, UpdateDecoderV1, UpdateDecoderV2, UpdateEncoderV1, UpdateEncoderV2, Doc, Item, Snapshot // eslint-disable-line
|
||||
} from '../internals.js'
|
||||
|
||||
/**
|
||||
@ -192,12 +192,14 @@ export class YXmlElement extends YXmlFragment {
|
||||
/**
|
||||
* Returns all attribute name/value pairs in a JSON Object.
|
||||
*
|
||||
* @param {Snapshot} [snapshot]
|
||||
*
|
||||
* @return {{ [Key in Extract<keyof KV,string>]?: KV[Key]}} A JSON Object that describes the attributes.
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
getAttributes () {
|
||||
return /** @type {any} */ (typeMapGetAll(this))
|
||||
getAttributes (snapshot) {
|
||||
return /** @type {any} */ (typeMapGetAll(this, snapshot))
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user