Jsdom: Implementar rangos y recorrido

Creado en 21 sept. 2011  ·  18Comentarios  ·  Fuente: jsdom/jsdom

http://www.w3.org/TR/DOM-Level-2-Traversal-Range/

  • https://dom.spec.whatwg.org/#ranges
  • https://dom.spec.whatwg.org/#traversal

Necesitaremos encontrar / escribir un conjunto de pruebas.

feature needs tests

Comentario más útil

Todos 18 comentarios

uf, esa especificación me hizo sangrar los ojos

sí, tendría mucho miedo de implementarlo sin un conjunto de pruebas w3c

Lo que descubrí hasta ahora:

  • Parece existir algún tipo de conjunto de pruebas del W3C para él, pero aparentemente nunca se publicó. Al menos el desarrollador Xerces puso sus manos sobre él . Me comuniqué con Michael de Xerces, tal vez él pueda ayudar.
  • Xerces tiene pruebas llamadas range, traversal y treewalker ; algunos de ellos pueden ayudar
  • Además, Acid3 tiene un montón de pruebas complejas para este módulo

Tenga en cuenta que estos prueban el "DOM sin versión" en http://dom.spec.whatwg.org/ y no el nivel 2 específicamente. Pero es más probable que reflejen navegadores reales.

Básicamente he terminado con la funcionalidad principal, pero tengo bastantes problemas para mantener los rangos activos. Necesito aprovechar básicamente todas las mutaciones de DOM y no estoy seguro de cuál es la mejor manera de hacerlo. En algunos casos utilicé los eventos de mutación, en otros casos envolví los métodos correspondientes en el prototipo.

En este momento me pregunto cómo hacer la eliminación de nodos . Con suppress observers flag establecido, el evento no se emitirá, pero los rangos aún deben actualizarse. ¿Alguien tiene alguna idea? Creo que tal vez deberíamos tener un sistema de eventos interno muy simple en todo el DOM para tales cosas; también podría usarse para _attrModified , por ejemplo.

@adrianlang ¡ eso es increíble!

Parece que esto está relacionado con nuestro antiguo deseo de dejar de usar eventos de mutación internamente y, en cambio, tener un protocolo privado que nunca se puede desactivar. Vea el n. ° 295. Sé que es mucho pedir, pero ¿arreglar eso podría ser el camino a seguir para esto?

Los comentarios +1 de spam hacen que las funciones se muevan al final de la lista de trabajos pendientes. En su lugar, utilice los botones de votación. Eliminando los +1 recientes.

Todavía estoy allí, por cierto, al igual que mi código a medio terminar. Espero hacer esto eventualmente.

@adrianheine ¿La implementación de TreeWalker que aterrizó lo ayuda a acercarse más a la finalización de su implementación?

A veces uso Range#createContextualFragment , aunque no sé realmente por qué este método útil está ahí (merecería estar directamente en el documento o DocumentFragment)

así que terminé haciendo esto para las pruebas

global.document.createRange = () => ({
  createContextualFragment: str => JSDOM.fragment(str)
});

Pero toda la API de Range sería mucho más

@domenic Creo que lo que preguntaba @acusti es ¿cuáles son los próximos pasos para verificar esto?

Estoy tratando de usar esto:
https://github.com/PrismJS/prism/issues/896

¿Alguien puede recomendar un camino alternativo? Me gusta la idea de tener una diferencia resaltada y un resaltado de sintaxis con Prism. Incluso podría resultar mejor que el resaltador de Github.

Estaría dispuesto a https://www.patreon.com/ por una razón más para no volver a utilizar SourceTree nunca más.

@adrianheine Podría estar interesado en ayudar si comparte su WIP.

Tengo errores en las pruebas de broma.

TypeError: document.createRange is not a function

      at createRange (node_modules/popper.js/src/utils/findCommonOffsetParent.js:27:26)
      at findCommonOffsetParent (node_modules/popper.js/src/utils/getReferenceOffsets.js:16:85)
      at Popper.getReferenceOffsets (node_modules/popper.js/src/methods/update.js:29:28)
      at Popper.call (node_modules/popper.js/src/index.js:94:19)
      at node_modules/popper.js/dist/umd/popper.js:51:7

Encuentra el enlace aquí

Hola, ¿algún progreso de esto?

¿Cuándo saldrá? Así que Jest podría actualizarse a la versión más reciente.

¿Fue útil esta página
0 / 5 - 0 calificaciones