2018-12-14 05:41:57 +01:00
this [ "wp" ] = this [ "wp" ] || { } ; this [ "wp" ] [ "dom" ] =
/******/ ( function ( modules ) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = { } ;
/******/
/******/ // The require function
/******/ function _ _webpack _require _ _ ( moduleId ) {
/******/
/******/ // Check if module is in cache
/******/ if ( installedModules [ moduleId ] ) {
/******/ return installedModules [ moduleId ] . exports ;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules [ moduleId ] = {
/******/ i : moduleId ,
/******/ l : false ,
/******/ exports : { }
/******/ } ;
/******/
/******/ // Execute the module function
/******/ modules [ moduleId ] . call ( module . exports , module , module . exports , _ _webpack _require _ _ ) ;
/******/
/******/ // Flag the module as loaded
/******/ module . l = true ;
/******/
/******/ // Return the exports of the module
/******/ return module . exports ;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ _ _webpack _require _ _ . m = modules ;
/******/
/******/ // expose the module cache
/******/ _ _webpack _require _ _ . c = installedModules ;
/******/
/******/ // define getter function for harmony exports
/******/ _ _webpack _require _ _ . d = function ( exports , name , getter ) {
/******/ if ( ! _ _webpack _require _ _ . o ( exports , name ) ) {
/******/ Object . defineProperty ( exports , name , { enumerable : true , get : getter } ) ;
/******/ }
/******/ } ;
/******/
/******/ // define __esModule on exports
/******/ _ _webpack _require _ _ . r = function ( exports ) {
/******/ if ( typeof Symbol !== 'undefined' && Symbol . toStringTag ) {
/******/ Object . defineProperty ( exports , Symbol . toStringTag , { value : 'Module' } ) ;
/******/ }
/******/ Object . defineProperty ( exports , '__esModule' , { value : true } ) ;
/******/ } ;
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ _ _webpack _require _ _ . t = function ( value , mode ) {
/******/ if ( mode & 1 ) value = _ _webpack _require _ _ ( value ) ;
/******/ if ( mode & 8 ) return value ;
/******/ if ( ( mode & 4 ) && typeof value === 'object' && value && value . _ _esModule ) return value ;
/******/ var ns = Object . create ( null ) ;
/******/ _ _webpack _require _ _ . r ( ns ) ;
/******/ Object . defineProperty ( ns , 'default' , { enumerable : true , value : value } ) ;
/******/ if ( mode & 2 && typeof value != 'string' ) for ( var key in value ) _ _webpack _require _ _ . d ( ns , key , function ( key ) { return value [ key ] ; } . bind ( null , key ) ) ;
/******/ return ns ;
/******/ } ;
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ _ _webpack _require _ _ . n = function ( module ) {
/******/ var getter = module && module . _ _esModule ?
/******/ function getDefault ( ) { return module [ 'default' ] ; } :
/******/ function getModuleExports ( ) { return module ; } ;
/******/ _ _webpack _require _ _ . d ( getter , 'a' , getter ) ;
/******/ return getter ;
/******/ } ;
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ _ _webpack _require _ _ . o = function ( object , property ) { return Object . prototype . hasOwnProperty . call ( object , property ) ; } ;
/******/
/******/ // __webpack_public_path__
/******/ _ _webpack _require _ _ . p = "" ;
/******/
/******/
/******/ // Load entry module and return exports
2019-03-21 13:48:00 +01:00
/******/ return _ _webpack _require _ _ ( _ _webpack _require _ _ . s = 379 ) ;
2018-12-14 05:41:57 +01:00
/******/ } )
/************************************************************************/
/******/ ( {
2019-03-21 13:48:00 +01:00
/***/ 17 :
2018-12-14 05:41:57 +01:00
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
"use strict" ;
2018-12-18 04:14:52 +01:00
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js
2018-12-14 05:41:57 +01:00
function _arrayWithoutHoles ( arr ) {
if ( Array . isArray ( arr ) ) {
for ( var i = 0 , arr2 = new Array ( arr . length ) ; i < arr . length ; i ++ ) {
arr2 [ i ] = arr [ i ] ;
}
return arr2 ;
}
}
2018-12-18 04:14:52 +01:00
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js
2019-03-21 13:48:00 +01:00
var iterableToArray = _ _webpack _require _ _ ( 34 ) ;
2018-12-18 04:14:52 +01:00
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js
function _nonIterableSpread ( ) {
throw new TypeError ( "Invalid attempt to spread non-iterable instance" ) ;
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "a" , function ( ) { return _toConsumableArray ; } ) ;
function _toConsumableArray ( arr ) {
return _arrayWithoutHoles ( arr ) || Object ( iterableToArray [ "a" /* default */ ] ) ( arr ) || _nonIterableSpread ( ) ;
}
/***/ } ) ,
/***/ 2 :
/***/ ( function ( module , exports ) {
( function ( ) { module . exports = this [ "lodash" ] ; } ( ) ) ;
2018-12-14 05:41:57 +01:00
/***/ } ) ,
2019-03-21 13:48:00 +01:00
/***/ 34 :
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
"use strict" ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "a" , function ( ) { return _iterableToArray ; } ) ;
function _iterableToArray ( iter ) {
if ( Symbol . iterator in Object ( iter ) || Object . prototype . toString . call ( iter ) === "[object Arguments]" ) return Array . from ( iter ) ;
}
/***/ } ) ,
/***/ 379 :
2018-12-14 05:41:57 +01:00
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
"use strict" ;
_ _webpack _require _ _ . r ( _ _webpack _exports _ _ ) ;
2018-12-18 04:14:52 +01:00
var focusable _namespaceObject = { } ;
_ _webpack _require _ _ . r ( focusable _namespaceObject ) ;
_ _webpack _require _ _ . d ( focusable _namespaceObject , "find" , function ( ) { return find ; } ) ;
var tabbable _namespaceObject = { } ;
_ _webpack _require _ _ . r ( tabbable _namespaceObject ) ;
_ _webpack _require _ _ . d ( tabbable _namespaceObject , "isTabbableIndex" , function ( ) { return isTabbableIndex ; } ) ;
_ _webpack _require _ _ . d ( tabbable _namespaceObject , "find" , function ( ) { return tabbable _find ; } ) ;
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + 2 modules
2019-03-21 13:48:00 +01:00
var toConsumableArray = _ _webpack _require _ _ ( 17 ) ;
2018-12-18 04:14:52 +01:00
// CONCATENATED MODULE: ./node_modules/@wordpress/dom/build-module/focusable.js
/ * *
* References :
*
* Focusable :
* - https : //www.w3.org/TR/html5/editing.html#focus-management
*
* Sequential focus navigation :
* - https : //www.w3.org/TR/html5/editing.html#sequential-focus-navigation-and-the-tabindex-attribute
*
* Disabled elements :
* - https : //www.w3.org/TR/html5/disabled-elements.html#disabled-elements
*
* getClientRects algorithm ( requiring layout box ) :
* - https : //www.w3.org/TR/cssom-view-1/#extension-to-the-element-interface
*
* AREA elements associated with an IMG :
* - https : //w3c.github.io/html/editing.html#data-model
* /
var SELECTOR = [ '[tabindex]' , 'a[href]' , 'button:not([disabled])' , 'input:not([type="hidden"]):not([disabled])' , 'select:not([disabled])' , 'textarea:not([disabled])' , 'iframe' , 'object' , 'embed' , 'area[href]' , '[contenteditable]:not([contenteditable=false])' ] . join ( ',' ) ;
/ * *
* Returns true if the specified element is visible ( i . e . neither display : none
* nor visibility : hidden ) .
*
* @ param { Element } element DOM element to test .
*
* @ return { boolean } Whether element is visible .
* /
function isVisible ( element ) {
return element . offsetWidth > 0 || element . offsetHeight > 0 || element . getClientRects ( ) . length > 0 ;
2018-12-14 05:41:57 +01:00
}
2018-12-18 04:14:52 +01:00
/ * *
* Returns true if the specified area element is a valid focusable element , or
* false otherwise . Area is only focusable if within a map where a named map
* referenced by an image somewhere in the document .
*
* @ param { Element } element DOM area element to test .
*
* @ return { boolean } Whether area element is valid for focus .
* /
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
function isValidFocusableArea ( element ) {
var map = element . closest ( 'map[name]' ) ;
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
if ( ! map ) {
return false ;
}
var img = document . querySelector ( 'img[usemap="#' + map . name + '"]' ) ;
return ! ! img && isVisible ( img ) ;
}
/ * *
* Returns all focusable elements within a given context .
*
* @ param { Element } context Element in which to search .
*
* @ return { Element [ ] } Focusable elements .
* /
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
function find ( context ) {
var elements = context . querySelectorAll ( SELECTOR ) ;
return Object ( toConsumableArray [ "a" /* default */ ] ) ( elements ) . filter ( function ( element ) {
if ( ! isVisible ( element ) ) {
return false ;
}
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
var nodeName = element . nodeName ;
if ( 'AREA' === nodeName ) {
return isValidFocusableArea ( element ) ;
}
return true ;
} ) ;
2018-12-14 05:41:57 +01:00
}
2019-03-21 13:48:00 +01:00
// EXTERNAL MODULE: external "lodash"
var external _lodash _ = _ _webpack _require _ _ ( 2 ) ;
2018-12-18 04:14:52 +01:00
// CONCATENATED MODULE: ./node_modules/@wordpress/dom/build-module/tabbable.js
2019-03-21 13:48:00 +01:00
/ * *
* External dependencies
* /
2018-12-18 04:14:52 +01:00
/ * *
* Internal dependencies
* /
2018-12-14 05:41:57 +01:00
2019-03-21 13:48:00 +01:00
2018-12-18 04:14:52 +01:00
/ * *
* Returns the tab index of the given element . In contrast with the tabIndex
* property , this normalizes the default ( 0 ) to avoid browser inconsistencies ,
* operating under the assumption that this function is only ever called with a
* focusable node .
*
* @ see https : //bugzilla.mozilla.org/show_bug.cgi?id=1190261
*
* @ param { Element } element Element from which to retrieve .
*
* @ return { ? number } Tab index of element ( default 0 ) .
* /
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
function getTabIndex ( element ) {
var tabIndex = element . getAttribute ( 'tabindex' ) ;
return tabIndex === null ? 0 : parseInt ( tabIndex , 10 ) ;
}
/ * *
* Returns true if the specified element is tabbable , or false otherwise .
*
* @ param { Element } element Element to test .
*
* @ return { boolean } Whether element is tabbable .
* /
function isTabbableIndex ( element ) {
return getTabIndex ( element ) !== - 1 ;
}
2019-03-21 13:48:00 +01:00
/ * *
* Returns a stateful reducer function which constructs a filtered array of
* tabbable elements , where at most one radio input is selected for a given
* name , giving priority to checked input , falling back to the first
* encountered .
*
* @ return { Function } Radio group collapse reducer .
* /
function createStatefulCollapseRadioGroup ( ) {
var CHOSEN _RADIO _BY _NAME = { } ;
return function collapseRadioGroup ( result , element ) {
var nodeName = element . nodeName ,
type = element . type ,
checked = element . checked ,
name = element . name ; // For all non-radio tabbables, construct to array by concatenating.
if ( nodeName !== 'INPUT' || type !== 'radio' || ! name ) {
return result . concat ( element ) ;
}
var hasChosen = CHOSEN _RADIO _BY _NAME . hasOwnProperty ( name ) ; // Omit by skipping concatenation if the radio element is not chosen.
var isChosen = checked || ! hasChosen ;
if ( ! isChosen ) {
return result ;
} // At this point, if there had been a chosen element, the current
// element is checked and should take priority. Retroactively remove
// the element which had previously been considered the chosen one.
if ( hasChosen ) {
var hadChosenElement = CHOSEN _RADIO _BY _NAME [ name ] ;
result = Object ( external _lodash _ [ "without" ] ) ( result , hadChosenElement ) ;
}
CHOSEN _RADIO _BY _NAME [ name ] = element ;
return result . concat ( element ) ;
} ;
}
2018-12-18 04:14:52 +01:00
/ * *
* An array map callback , returning an object with the element value and its
* array index location as properties . This is used to emulate a proper stable
* sort where equal tabIndex should be left in order of their occurrence in the
* document .
*
* @ param { Element } element Element .
* @ param { number } index Array index of element .
*
* @ return { Object } Mapped object with element , index .
* /
2019-03-21 13:48:00 +01:00
2018-12-18 04:14:52 +01:00
function mapElementToObjectTabbable ( element , index ) {
return {
element : element ,
index : index
} ;
}
/ * *
* An array map callback , returning an element of the given mapped object ' s
* element value .
*
* @ param { Object } object Mapped object with index .
*
* @ return { Element } Mapped object element .
* /
function mapObjectTabbableToElement ( object ) {
return object . element ;
}
/ * *
* A sort comparator function used in comparing two objects of mapped elements .
*
* @ see mapElementToObjectTabbable
*
* @ param { Object } a First object to compare .
* @ param { Object } b Second object to compare .
*
* @ return { number } Comparator result .
* /
function compareObjectTabbables ( a , b ) {
var aTabIndex = getTabIndex ( a . element ) ;
var bTabIndex = getTabIndex ( b . element ) ;
if ( aTabIndex === bTabIndex ) {
return a . index - b . index ;
}
return aTabIndex - bTabIndex ;
}
function tabbable _find ( context ) {
2019-03-21 13:48:00 +01:00
return find ( context ) . filter ( isTabbableIndex ) . map ( mapElementToObjectTabbable ) . sort ( compareObjectTabbables ) . map ( mapObjectTabbableToElement ) . reduce ( createStatefulCollapseRadioGroup ( ) , [ ] ) ;
2018-12-18 04:14:52 +01:00
}
// CONCATENATED MODULE: ./node_modules/@wordpress/dom/build-module/dom.js
2018-12-14 05:41:57 +01:00
/ * *
* External dependencies
* /
/ * *
* Browser dependencies
* /
var _window = window ,
getComputedStyle = _window . getComputedStyle ;
var _window$Node = window . Node ,
TEXT _NODE = _window$Node . TEXT _NODE ,
ELEMENT _NODE = _window$Node . ELEMENT _NODE ,
DOCUMENT _POSITION _PRECEDING = _window$Node . DOCUMENT _POSITION _PRECEDING ,
DOCUMENT _POSITION _FOLLOWING = _window$Node . DOCUMENT _POSITION _FOLLOWING ;
/ * *
* Returns true if the given selection object is in the forward direction , or
* false otherwise .
*
* @ see https : //developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition
*
* @ param { Selection } selection Selection object to check .
*
* @ return { boolean } Whether the selection is forward .
* /
function isSelectionForward ( selection ) {
var anchorNode = selection . anchorNode ,
focusNode = selection . focusNode ,
anchorOffset = selection . anchorOffset ,
focusOffset = selection . focusOffset ;
var position = anchorNode . compareDocumentPosition ( focusNode ) ; // Disable reason: `Node#compareDocumentPosition` returns a bitmask value,
// so bitwise operators are intended.
/* eslint-disable no-bitwise */
// Compare whether anchor node precedes focus node. If focus node (where
// end of selection occurs) is after the anchor node, it is forward.
if ( position & DOCUMENT _POSITION _PRECEDING ) {
return false ;
}
if ( position & DOCUMENT _POSITION _FOLLOWING ) {
return true ;
}
/* eslint-enable no-bitwise */
// `compareDocumentPosition` returns 0 when passed the same node, in which
// case compare offsets.
if ( position === 0 ) {
return anchorOffset <= focusOffset ;
} // This should never be reached, but return true as default case.
return true ;
}
/ * *
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
* Check whether the selection is at the edge of the container . Checks for
* horizontal position by default . Set ` onlyVertical ` to true to check only
* vertically .
2018-12-14 05:41:57 +01:00
*
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
* @ param { Element } container Focusable element .
* @ param { boolean } isReverse Set to true to check left , false to check right .
* @ param { boolean } onlyVertical Set to true to check only vertical position .
2018-12-14 05:41:57 +01:00
*
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
* @ return { boolean } True if at the edge , false if not .
2018-12-14 05:41:57 +01:00
* /
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
function isEdge ( container , isReverse , onlyVertical ) {
2018-12-18 04:14:52 +01:00
if ( Object ( external _lodash _ [ "includes" ] ) ( [ 'INPUT' , 'TEXTAREA' ] , container . tagName ) ) {
2018-12-14 05:41:57 +01:00
if ( container . selectionStart !== container . selectionEnd ) {
return false ;
}
if ( isReverse ) {
return container . selectionStart === 0 ;
}
return container . value . length === container . selectionStart ;
}
if ( ! container . isContentEditable ) {
return true ;
}
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
var selection = window . getSelection ( ) ;
if ( ! selection . rangeCount ) {
return false ;
}
2018-12-14 05:41:57 +01:00
2019-04-22 14:40:04 +02:00
var range = selection . getRangeAt ( 0 ) . cloneRange ( ) ;
var isForward = isSelectionForward ( selection ) ;
var isCollapsed = selection . isCollapsed ; // Collapse in direction of selection.
if ( ! isCollapsed ) {
range . collapse ( ! isForward ) ;
}
var rangeRect = getRectangleFromRange ( range ) ;
2018-12-14 05:41:57 +01:00
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
if ( ! rangeRect ) {
return false ;
2018-12-14 05:41:57 +01:00
}
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
var computedStyle = window . getComputedStyle ( container ) ;
2019-04-22 14:40:04 +02:00
var lineHeight = parseInt ( computedStyle . lineHeight , 10 ) || 0 ; // Only consider the multiline selection at the edge if the direction is
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
// towards the edge.
2019-04-22 14:40:04 +02:00
if ( ! isCollapsed && rangeRect . height > lineHeight && isForward === isReverse ) {
2018-12-14 05:41:57 +01:00
return false ;
2019-04-22 14:40:04 +02:00
}
var padding = parseInt ( computedStyle [ "padding" . concat ( isReverse ? 'Top' : 'Bottom' ) ] , 10 ) || 0 ; // Calculate a buffer that is half the line height. In some browsers, the
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
// selection rectangle may not fill the entire height of the line, so we add
// 3/4 the line height to the selection rectangle to ensure that it is well
// over its line boundary.
2018-12-14 05:41:57 +01:00
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
var buffer = 3 * parseInt ( lineHeight , 10 ) / 4 ;
var containerRect = container . getBoundingClientRect ( ) ;
2019-04-22 14:40:04 +02:00
var verticalEdge = isReverse ? containerRect . top + padding > rangeRect . top - buffer : containerRect . bottom - padding < rangeRect . bottom + buffer ;
2018-12-14 05:41:57 +01:00
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
if ( ! verticalEdge ) {
return false ;
}
2018-12-14 05:41:57 +01:00
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
if ( onlyVertical ) {
return true ;
2019-05-16 20:08:00 +02:00
} // In the case of RTL scripts, the horizontal edge is at the opposite side.
var direction = computedStyle . direction ;
var isReverseDir = direction === 'rtl' ? ! isReverse : isReverse ; // To calculate the horizontal position, we insert a test range and see if
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
// this test range has the same horizontal position. This method proves to
// be better than a DOM-based calculation, because it ignores empty text
// nodes and a trailing line break element. In other words, we need to check
// visual positioning, not DOM positioning.
2019-03-07 10:09:59 +01:00
2019-05-16 20:08:00 +02:00
var x = isReverseDir ? containerRect . left + 1 : containerRect . right - 1 ;
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
var y = isReverse ? containerRect . top + buffer : containerRect . bottom - buffer ;
var testRange = hiddenCaretRangeFromPoint ( document , x , y , container ) ;
2018-12-14 05:41:57 +01:00
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
if ( ! testRange ) {
return false ;
}
2018-12-14 05:41:57 +01:00
2019-05-16 20:08:00 +02:00
var side = isReverseDir ? 'left' : 'right' ;
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
var testRect = getRectangleFromRange ( testRange ) ;
return Math . round ( testRect [ side ] ) === Math . round ( rangeRect [ side ] ) ;
}
/ * *
* Check whether the selection is horizontally at the edge of the container .
*
* @ param { Element } container Focusable element .
* @ param { boolean } isReverse Set to true to check left , false for right .
*
* @ return { boolean } True if at the horizontal edge , false if not .
* /
function isHorizontalEdge ( container , isReverse ) {
return isEdge ( container , isReverse ) ;
2018-12-14 05:41:57 +01:00
}
/ * *
* Check whether the selection is vertically at the edge of the container .
*
* @ param { Element } container Focusable element .
* @ param { boolean } isReverse Set to true to check top , false for bottom .
*
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
* @ return { boolean } True if at the vertical edge , false if not .
2018-12-14 05:41:57 +01:00
* /
function isVerticalEdge ( container , isReverse ) {
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
return isEdge ( container , isReverse , true ) ;
2018-12-14 05:41:57 +01:00
}
/ * *
* Get the rectangle of a given Range .
*
* @ param { Range } range The range .
*
* @ return { DOMRect } The rectangle .
* /
function getRectangleFromRange ( range ) {
// For uncollapsed ranges, get the rectangle that bounds the contents of the
// range; this a rectangle enclosing the union of the bounding rectangles
// for all the elements in the range.
if ( ! range . collapsed ) {
return range . getBoundingClientRect ( ) ;
}
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
var _range = range ,
startContainer = _range . startContainer ; // Correct invalid "BR" ranges. The cannot contain any children.
if ( startContainer . nodeName === 'BR' ) {
var parentNode = startContainer . parentNode ;
var index = Array . from ( parentNode . childNodes ) . indexOf ( startContainer ) ;
range = document . createRange ( ) ;
range . setStart ( parentNode , index ) ;
range . setEnd ( parentNode , index ) ;
}
2018-12-14 05:41:57 +01:00
var rect = range . getClientRects ( ) [ 0 ] ; // If the collapsed range starts (and therefore ends) at an element node,
// `getClientRects` can be empty in some browsers. This can be resolved
// by adding a temporary text node with zero-width space to the range.
//
// See: https://stackoverflow.com/a/6847328/995445
if ( ! rect ) {
2019-04-22 14:40:04 +02:00
var padNode = document . createTextNode ( "\u200B" ) ; // Do not modify the live range.
range = range . cloneRange ( ) ;
2018-12-14 05:41:57 +01:00
range . insertNode ( padNode ) ;
rect = range . getClientRects ( ) [ 0 ] ;
padNode . parentNode . removeChild ( padNode ) ;
}
return rect ;
}
/ * *
* Get the rectangle for the selection in a container .
*
* @ param { Element } container Editable container .
*
* @ return { ? DOMRect } The rectangle .
* /
function computeCaretRect ( container ) {
if ( ! container . isContentEditable ) {
return ;
}
var selection = window . getSelection ( ) ;
var range = selection . rangeCount ? selection . getRangeAt ( 0 ) : null ;
if ( ! range ) {
return ;
}
return getRectangleFromRange ( range ) ;
}
/ * *
* Places the caret at start or end of a given element .
*
* @ param { Element } container Focusable element .
* @ param { boolean } isReverse True for end , false for start .
* /
function placeCaretAtHorizontalEdge ( container , isReverse ) {
if ( ! container ) {
return ;
}
2018-12-18 04:14:52 +01:00
if ( Object ( external _lodash _ [ "includes" ] ) ( [ 'INPUT' , 'TEXTAREA' ] , container . tagName ) ) {
2018-12-14 05:41:57 +01:00
container . focus ( ) ;
if ( isReverse ) {
container . selectionStart = container . value . length ;
container . selectionEnd = container . value . length ;
} else {
container . selectionStart = 0 ;
container . selectionEnd = 0 ;
}
return ;
}
container . focus ( ) ;
if ( ! container . isContentEditable ) {
return ;
} // Select on extent child of the container, not the container itself. This
// avoids the selection always being `endOffset` of 1 when placed at end,
// where `startContainer`, `endContainer` would always be container itself.
var rangeTarget = container [ isReverse ? 'lastChild' : 'firstChild' ] ; // If no range target, it implies that the container is empty. Focusing is
// sufficient for caret to be placed correctly.
if ( ! rangeTarget ) {
return ;
}
var selection = window . getSelection ( ) ;
var range = document . createRange ( ) ;
range . selectNodeContents ( rangeTarget ) ;
range . collapse ( ! isReverse ) ;
selection . removeAllRanges ( ) ;
selection . addRange ( range ) ;
}
/ * *
* Polyfill .
* Get a collapsed range for a given point .
*
* @ see https : //developer.mozilla.org/en-US/docs/Web/API/Document/caretRangeFromPoint
*
* @ param { Document } doc The document of the range .
* @ param { number } x Horizontal position within the current viewport .
* @ param { number } y Vertical position within the current viewport .
*
* @ return { ? Range } The best range for the given point .
* /
function caretRangeFromPoint ( doc , x , y ) {
if ( doc . caretRangeFromPoint ) {
return doc . caretRangeFromPoint ( x , y ) ;
}
if ( ! doc . caretPositionFromPoint ) {
return null ;
}
var point = doc . caretPositionFromPoint ( x , y ) ; // If x or y are negative, outside viewport, or there is no text entry node.
// https://developer.mozilla.org/en-US/docs/Web/API/Document/caretRangeFromPoint
if ( ! point ) {
return null ;
}
var range = doc . createRange ( ) ;
range . setStart ( point . offsetNode , point . offset ) ;
range . collapse ( true ) ;
return range ;
}
/ * *
* Get a collapsed range for a given point .
* Gives the container a temporary high z - index ( above any UI ) .
* This is preferred over getting the UI nodes and set styles there .
*
* @ param { Document } doc The document of the range .
* @ param { number } x Horizontal position within the current viewport .
* @ param { number } y Vertical position within the current viewport .
* @ param { Element } container Container in which the range is expected to be found .
*
* @ return { ? Range } The best range for the given point .
* /
function hiddenCaretRangeFromPoint ( doc , x , y , container ) {
container . style . zIndex = '10000' ;
var range = caretRangeFromPoint ( doc , x , y ) ;
container . style . zIndex = null ;
return range ;
}
/ * *
* Places the caret at the top or bottom of a given element .
*
* @ param { Element } container Focusable element .
* @ param { boolean } isReverse True for bottom , false for top .
* @ param { DOMRect } [ rect ] The rectangle to position the caret with .
* @ param { boolean } [ mayUseScroll = true ] True to allow scrolling , false to disallow .
* /
function placeCaretAtVerticalEdge ( container , isReverse , rect ) {
var mayUseScroll = arguments . length > 3 && arguments [ 3 ] !== undefined ? arguments [ 3 ] : true ;
if ( ! container ) {
return ;
}
if ( ! rect || ! container . isContentEditable ) {
placeCaretAtHorizontalEdge ( container , isReverse ) ;
return ;
} // Offset by a buffer half the height of the caret rect. This is needed
// because caretRangeFromPoint may default to the end of the selection if
// offset is too close to the edge. It's unclear how to precisely calculate
// this threshold; it may be the padded area of some combination of line
// height, caret height, and font size. The buffer offset is effectively
// equivalent to a point at half the height of a line of text.
var buffer = rect . height / 2 ;
var editableRect = container . getBoundingClientRect ( ) ;
var x = rect . left ;
var y = isReverse ? editableRect . bottom - buffer : editableRect . top + buffer ;
var range = hiddenCaretRangeFromPoint ( document , x , y , container ) ;
if ( ! range || ! container . contains ( range . startContainer ) ) {
if ( mayUseScroll && ( ! range || ! range . startContainer || ! range . startContainer . contains ( container ) ) ) {
// Might be out of view.
// Easier than attempting to calculate manually.
container . scrollIntoView ( isReverse ) ;
placeCaretAtVerticalEdge ( container , isReverse , rect , false ) ;
return ;
}
placeCaretAtHorizontalEdge ( container , isReverse ) ;
return ;
} // Check if the closest text node is actually further away.
// If so, attempt to get the range again with the y position adjusted to get the right offset.
if ( range . startContainer . nodeType === TEXT _NODE ) {
var parentNode = range . startContainer . parentNode ;
var parentRect = parentNode . getBoundingClientRect ( ) ;
var side = isReverse ? 'bottom' : 'top' ;
var padding = parseInt ( getComputedStyle ( parentNode ) . getPropertyValue ( "padding-" . concat ( side ) ) , 10 ) || 0 ;
var actualY = isReverse ? parentRect . bottom - padding - buffer : parentRect . top + padding + buffer ;
if ( y !== actualY ) {
range = hiddenCaretRangeFromPoint ( document , x , actualY , container ) ;
}
}
2019-01-04 20:38:57 +01:00
var selection = window . getSelection ( ) ;
2018-12-14 05:41:57 +01:00
selection . removeAllRanges ( ) ;
selection . addRange ( range ) ;
container . focus ( ) ; // Editable was already focussed, it goes back to old range...
// This fixes it.
selection . removeAllRanges ( ) ;
selection . addRange ( range ) ;
}
/ * *
* Check whether the given element is a text field , where text field is defined
* by the ability to select within the input , or that it is contenteditable .
*
* See : https : //html.spec.whatwg.org/#textFieldSelection
*
* @ param { HTMLElement } element The HTML element .
*
* @ return { boolean } True if the element is an text field , false if not .
* /
function isTextField ( element ) {
2018-12-14 05:53:54 +01:00
try {
var nodeName = element . nodeName ,
selectionStart = element . selectionStart ,
contentEditable = element . contentEditable ;
return nodeName === 'INPUT' && selectionStart !== null || nodeName === 'TEXTAREA' || contentEditable === 'true' ;
} catch ( error ) {
// Safari throws an exception when trying to get `selectionStart`
// on non-text <input> elements (which, understandably, don't
// have the text selection API). We catch this via a try/catch
// block, as opposed to a more explicit check of the element's
// input types, because of Safari's non-standard behavior. This
// also means we don't have to worry about the list of input
// types that support `selectionStart` changing as the HTML spec
// evolves over time.
return false ;
}
2018-12-14 05:41:57 +01:00
}
/ * *
* Check wether the current document has a selection .
* This checks both for focus in an input field and general text selection .
*
* @ return { boolean } True if there is selection , false if not .
* /
function documentHasSelection ( ) {
if ( isTextField ( document . activeElement ) ) {
return true ;
}
var selection = window . getSelection ( ) ;
var range = selection . rangeCount ? selection . getRangeAt ( 0 ) : null ;
return range && ! range . collapsed ;
}
/ * *
* Check whether the contents of the element have been entirely selected .
* Returns true if there is no possibility of selection .
*
* @ param { Element } element The element to check .
*
* @ return { boolean } True if entirely selected , false if not .
* /
function isEntirelySelected ( element ) {
2018-12-18 04:14:52 +01:00
if ( Object ( external _lodash _ [ "includes" ] ) ( [ 'INPUT' , 'TEXTAREA' ] , element . nodeName ) ) {
2018-12-14 05:41:57 +01:00
return element . selectionStart === 0 && element . value . length === element . selectionEnd ;
}
if ( ! element . isContentEditable ) {
return true ;
}
var selection = window . getSelection ( ) ;
var range = selection . rangeCount ? selection . getRangeAt ( 0 ) : null ;
if ( ! range ) {
return true ;
}
var startContainer = range . startContainer ,
endContainer = range . endContainer ,
startOffset = range . startOffset ,
endOffset = range . endOffset ;
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
if ( startContainer === element && endContainer === element && startOffset === 0 && endOffset === element . childNodes . length ) {
return true ;
}
var lastChild = element . lastChild ;
var lastChildContentLength = lastChild . nodeType === TEXT _NODE ? lastChild . data . length : lastChild . childNodes . length ;
return startContainer === element . firstChild && endContainer === element . lastChild && startOffset === 0 && endOffset === lastChildContentLength ;
2018-12-14 05:41:57 +01:00
}
/ * *
* Given a DOM node , finds the closest scrollable container node .
*
* @ param { Element } node Node from which to start .
*
* @ return { ? Element } Scrollable container node , if found .
* /
function getScrollContainer ( node ) {
if ( ! node ) {
return ;
} // Scrollable if scrollable height exceeds displayed...
if ( node . scrollHeight > node . clientHeight ) {
// ...except when overflow is defined to be hidden or visible
Block Editor: Update packages to bring a selection of bugfixes in.
Props iseulde, kjellr, aduth, 0mirka00, mcsf, nosolosw, gziolo, jasmussen, talldanwp, notnownikki, swissspidy, jorgefilipecosta, noisysocks.
See https://github.com/WordPress/gutenberg/pull/14796.
Fixes #46801.
Built from https://develop.svn.wordpress.org/trunk@45138
git-svn-id: http://core.svn.wordpress.org/trunk@44947 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-04-08 08:37:57 +02:00
var _window$getComputedSt = window . getComputedStyle ( node ) ,
overflowY = _window$getComputedSt . overflowY ;
2018-12-14 05:41:57 +01:00
if ( /(auto|scroll)/ . test ( overflowY ) ) {
return node ;
}
} // Continue traversing
return getScrollContainer ( node . parentNode ) ;
}
/ * *
* Returns the closest positioned element , or null under any of the conditions
* of the offsetParent specification . Unlike offsetParent , this function is not
* limited to HTMLElement and accepts any Node ( e . g . Node . TEXT _NODE ) .
*
* @ see https : //drafts.csswg.org/cssom-view/#dom-htmlelement-offsetparent
*
* @ param { Node } node Node from which to find offset parent .
*
* @ return { ? Node } Offset parent .
* /
function getOffsetParent ( node ) {
// Cannot retrieve computed style or offset parent only anything other than
// an element node, so find the closest element node.
var closestElement ;
while ( closestElement = node . parentNode ) {
if ( closestElement . nodeType === ELEMENT _NODE ) {
break ;
}
}
if ( ! closestElement ) {
return null ;
} // If the closest element is already positioned, return it, as offsetParent
// does not otherwise consider the node itself.
if ( getComputedStyle ( closestElement ) . position !== 'static' ) {
return closestElement ;
}
return closestElement . offsetParent ;
}
/ * *
* Given two DOM nodes , replaces the former with the latter in the DOM .
*
* @ param { Element } processedNode Node to be removed .
* @ param { Element } newNode Node to be inserted in its place .
* @ return { void }
* /
function replace ( processedNode , newNode ) {
insertAfter ( newNode , processedNode . parentNode ) ;
remove ( processedNode ) ;
}
/ * *
* Given a DOM node , removes it from the DOM .
*
* @ param { Element } node Node to be removed .
* @ return { void }
* /
function remove ( node ) {
node . parentNode . removeChild ( node ) ;
}
/ * *
* Given two DOM nodes , inserts the former in the DOM as the next sibling of
* the latter .
*
* @ param { Element } newNode Node to be inserted .
* @ param { Element } referenceNode Node after which to perform the insertion .
* @ return { void }
* /
function insertAfter ( newNode , referenceNode ) {
referenceNode . parentNode . insertBefore ( newNode , referenceNode . nextSibling ) ;
}
/ * *
* Unwrap the given node . This means any child nodes are moved to the parent .
*
* @ param { Node } node The node to unwrap .
*
* @ return { void }
* /
function unwrap ( node ) {
var parent = node . parentNode ;
while ( node . firstChild ) {
parent . insertBefore ( node . firstChild , node ) ;
}
parent . removeChild ( node ) ;
}
/ * *
* Replaces the given node with a new node with the given tag name .
*
* @ param { Element } node The node to replace
* @ param { string } tagName The new tag name .
*
* @ return { Element } The new node .
* /
2018-12-17 05:52:00 +01:00
function replaceTag ( node , tagName ) {
var newNode = node . ownerDocument . createElement ( tagName ) ;
2018-12-14 05:41:57 +01:00
while ( node . firstChild ) {
newNode . appendChild ( node . firstChild ) ;
}
node . parentNode . replaceChild ( newNode , node ) ;
return newNode ;
}
2018-12-17 05:52:00 +01:00
/ * *
* Wraps the given node with a new node with the given tag name .
*
* @ param { Element } newNode The node to insert .
* @ param { Element } referenceNode The node to wrap .
* /
function wrap ( newNode , referenceNode ) {
referenceNode . parentNode . insertBefore ( newNode , referenceNode ) ;
newNode . appendChild ( referenceNode ) ;
}
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
// CONCATENATED MODULE: ./node_modules/@wordpress/dom/build-module/index.js
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "focus" , function ( ) { return build _module _focus ; } ) ;
/* concated harmony reexport isHorizontalEdge */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "isHorizontalEdge" , function ( ) { return isHorizontalEdge ; } ) ;
/* concated harmony reexport isVerticalEdge */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "isVerticalEdge" , function ( ) { return isVerticalEdge ; } ) ;
/* concated harmony reexport getRectangleFromRange */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "getRectangleFromRange" , function ( ) { return getRectangleFromRange ; } ) ;
/* concated harmony reexport computeCaretRect */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "computeCaretRect" , function ( ) { return computeCaretRect ; } ) ;
/* concated harmony reexport placeCaretAtHorizontalEdge */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "placeCaretAtHorizontalEdge" , function ( ) { return placeCaretAtHorizontalEdge ; } ) ;
/* concated harmony reexport placeCaretAtVerticalEdge */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "placeCaretAtVerticalEdge" , function ( ) { return placeCaretAtVerticalEdge ; } ) ;
/* concated harmony reexport isTextField */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "isTextField" , function ( ) { return isTextField ; } ) ;
/* concated harmony reexport documentHasSelection */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "documentHasSelection" , function ( ) { return documentHasSelection ; } ) ;
/* concated harmony reexport isEntirelySelected */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "isEntirelySelected" , function ( ) { return isEntirelySelected ; } ) ;
/* concated harmony reexport getScrollContainer */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "getScrollContainer" , function ( ) { return getScrollContainer ; } ) ;
/* concated harmony reexport getOffsetParent */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "getOffsetParent" , function ( ) { return getOffsetParent ; } ) ;
/* concated harmony reexport replace */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "replace" , function ( ) { return replace ; } ) ;
/* concated harmony reexport remove */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "remove" , function ( ) { return remove ; } ) ;
/* concated harmony reexport insertAfter */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "insertAfter" , function ( ) { return insertAfter ; } ) ;
/* concated harmony reexport unwrap */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "unwrap" , function ( ) { return unwrap ; } ) ;
/* concated harmony reexport replaceTag */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "replaceTag" , function ( ) { return replaceTag ; } ) ;
/* concated harmony reexport wrap */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "wrap" , function ( ) { return wrap ; } ) ;
2018-12-14 05:41:57 +01:00
/ * *
* Internal dependencies
* /
2019-03-21 13:48:00 +01:00
/ * *
* Object grouping ` focusable ` and ` tabbable ` utils
* under the keys with the same name .
* /
2018-12-18 04:14:52 +01:00
var build _module _focus = {
focusable : focusable _namespaceObject ,
tabbable : tabbable _namespaceObject
2018-12-14 05:41:57 +01:00
} ;
/***/ } )
2018-12-18 04:14:52 +01:00
/******/ } ) ;