npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

y-xml

v10.0.0

Published

Xml Type for Yjs

Downloads

28

Readme

XML Type for Yjs

Share XML documents with this type. You can also get a DOM representation of this shared Y.Xml type. Y.Xml does not yet support the full DOM specification - e.g. Shadow DOM, and contenteditable are not supported.

Use it!

Retrieve this with bower or npm.

Bower
bower install y-xml --save
NPM
npm install y-xml --save

Xml Object

Create

Y.Xml expects a tagname, or a DOM Element as constructor argument. I.e.

map.set('myXmlType', Y.Xml('div'))
map.set('myOtherXmlType', Y.Xml(document.querySelector('div')))

When creating a Y.Xml type on y.share, you can specify the tagname like this:

Y({
  ..
  share: {
    xml: 'Xml("div")'
  }
})
Reference
  • .getDom()
    • Returns a promise for a DOM Element
  • .insert(position, contents)
    • Insert an array of children at a position
    • You can insert strings, and Y.Xml('tagname') types
  • .push(content)
    • Insert a node as the last child
  • .delete(position, length)
    • Delete children. The length parameter is optional and defaults to 1
  • .get(position)
    • Retrieve a child at a position
    • Returns a promise if the content is a Y.Xml type
  • .observe(function observer(events){..})
    • The observer is called synchronously when something changed
    • Throws attributeChanged, attributeRemoved, childInserted, and childRemoved events (events[*].type)
    • If value is a Y.Xml type, events[*].value is a function that returns a promise for the type
    • When employing the DOM binding, you may want to use DOM MutationObserver instead of .observe(..)
  • .attributes.get(name) :: String
    • Get a specific attribute
  • .attributes.get() :: Object
    • Get all attributes as a JSON object
  • .attributes.set(name, value)
    • Set a attribute. value must be of type string
  • .unobserve(f)
    • Delete an observer

A note on time complexities

  • .insert(position, content)
    • O(position + contents.length)
  • .push(content)
    • O(1)
  • .delete(position, length)
    • O(position)
  • .get(i)
    • O(length)
  • Apply a delete operation from another user
    • O(1)
  • Apply an insert operation from another user
    • Yjs does not transform against operations that do not conflict with each other.
    • An operation conflicts with another operation if it intends to be inserted at the same position.
    • Overall worst case complexety: O(|conflicts|!)

Changelog

10.0.0

  • Retrieving the dom is a synchronous operation now
  • Relies on Yjs@^12.0.0

License

Yjs is licensed under the MIT License.

[email protected]