|
/** |
|
* @author mlewand |
|
* @see https://gist.github.com/mlewand/56237c19050d27f61b807ed384dff2db |
|
* |
|
* A helper function to visualize DOMRect or set of DOMRect instances. |
|
* |
|
* Subsequent calls will remove previously marked elements. |
|
* |
|
* Debug a element currently focused in your devtools inspector. |
|
* window.markRect( $0.getBoundingClientRect() ); |
|
* // Debug a selection. |
|
* window.markRect( document.getSelection().getRangeAt( 0 ).getClientRects() ); |
|
* |
|
* |
|
* Original source: https://gist.github.com/mlewand/56237c19050d27f61b807ed384dff2db |
|
* Updated by [Sv443](https://github.com/Sv443) |
|
* |
|
* Styling example: |
|
* ```js |
|
* const [ mark ] = window.markRect(new DOMRect()); |
|
* markElem.style.backgroundColor = "red"; |
|
* ``` |
|
*/ |
|
( () => { |
|
const drawnRect = []; |
|
|
|
const createRectDraw = () => { |
|
const ret = document.createElement( 'div' ); |
|
ret.style.position = 'absolute'; |
|
ret.style.outline = '2px solid red'; |
|
ret.classList.add('debug-rect-marker'); |
|
document.body.appendChild( ret ); |
|
|
|
return ret; |
|
}; |
|
|
|
/** |
|
* Creates an element that marks the passed DOMRectangle(s) |
|
* These elements get the class `debug-rect-marker` |
|
* @param {DOMRect|DOMRect[]} rectangles Accepts a DOMRectangle or an array of them |
|
* @returns {HTMLElement[]} Returns array of marker elements |
|
*/ |
|
const markRect = ( rectangles ) => { |
|
const marks = []; |
|
|
|
// Cleanup. |
|
drawnRect.forEach( ( oldRect ) => oldRect.remove() ); |
|
|
|
// Unify format. |
|
if ( !Array.isArray(rectangles) ) { |
|
rectangles = [ rectangles ]; |
|
} |
|
|
|
rectangles.forEach( ( rect ) => { |
|
const curDrawing = createRectDraw(), |
|
dims = [ 'top', 'left', 'width', 'height' ]; |
|
|
|
dims.forEach( ( property ) => { |
|
curDrawing.style[ property ] = `${rect[ property ]}px`; |
|
} ); |
|
|
|
console.info( 'created debug rect:', curDrawing ); |
|
|
|
drawnRect.push( curDrawing ); |
|
marks.push( curDrawing ); |
|
} ); |
|
|
|
return marks; |
|
}; |
|
|
|
/** |
|
* Deletes all rectangles that have been previously created |
|
* @returns {void} |
|
* @author Sv443 |
|
*/ |
|
const deleteRects = () => { |
|
const markers = document.querySelectorAll(".debug-rect-marker"); |
|
|
|
markers.forEach(elem => { |
|
elem.innerHTML = ""; |
|
elem.outerHTML = ""; |
|
}); |
|
|
|
console.warn(`Deleted ${markers.length} markers`); |
|
}; |
|
|
|
|
|
window.markRect = markRect; |
|
|
|
window.deleteRects = deleteRects; |
|
} )(); |