2019-03-27 23:31:52 +01:00
/ * !
2022-04-12 19:17:22 +02:00
* clipboard . js v2 . 0.10
2020-06-03 13:12:33 +02:00
* https : //clipboardjs.com/
2021-03-18 16:54:18 +01:00
*
2019-03-27 23:31:52 +01:00
* Licensed MIT © Zeno Rocha
* /
( function webpackUniversalModuleDefinition ( root , factory ) {
if ( typeof exports === 'object' && typeof module === 'object' )
module . exports = factory ( ) ;
else if ( typeof define === 'function' && define . amd )
define ( [ ] , factory ) ;
else if ( typeof exports === 'object' )
exports [ "ClipboardJS" ] = factory ( ) ;
else
root [ "ClipboardJS" ] = factory ( ) ;
} ) ( this , function ( ) {
2021-03-18 16:54:18 +01:00
return /******/ ( function ( ) { // webpackBootstrap
/******/ var _ _webpack _modules _ _ = ( {
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
/***/ 686 :
2021-03-18 16:54:18 +01:00
/***/ ( function ( _ _unused _webpack _module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
"use strict" ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
// EXPORTS
_ _webpack _require _ _ . d ( _ _webpack _exports _ _ , {
"default" : function ( ) { return /* binding */ clipboard ; }
} ) ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js
var tiny _emitter = _ _webpack _require _ _ ( 279 ) ;
var tiny _emitter _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( tiny _emitter ) ;
// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js
var listen = _ _webpack _require _ _ ( 370 ) ;
var listen _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( listen ) ;
// EXTERNAL MODULE: ./node_modules/select/src/select.js
var src _select = _ _webpack _require _ _ ( 817 ) ;
var select _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( src _select ) ;
2022-04-12 19:17:22 +02:00
; // CONCATENATED MODULE: ./src/common/command.js
2021-03-18 16:54:18 +01:00
/ * *
2022-04-12 19:17:22 +02:00
* Executes a given operation type .
* @ param { String } type
* @ return { Boolean }
2021-03-18 16:54:18 +01:00
* /
2022-04-12 19:17:22 +02:00
function command ( type ) {
try {
return document . execCommand ( type ) ;
} catch ( err ) {
return false ;
2021-03-18 16:54:18 +01:00
}
2022-04-12 19:17:22 +02:00
}
; // CONCATENATED MODULE: ./src/actions/cut.js
2021-03-18 16:54:18 +01:00
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
/ * *
* Cut action wrapper .
* @ param { String | HTMLElement } target
* @ return { String }
* /
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
var ClipboardActionCut = function ClipboardActionCut ( target ) {
var selectedText = select _default ( ) ( target ) ;
command ( 'cut' ) ;
return selectedText ;
} ;
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
/* harmony default export */ var actions _cut = ( ClipboardActionCut ) ;
; // CONCATENATED MODULE: ./src/common/create-fake-element.js
/ * *
* Creates a fake textarea element with a value .
* @ param { String } value
* @ return { HTMLElement }
* /
function createFakeElement ( value ) {
var isRTL = document . documentElement . getAttribute ( 'dir' ) === 'rtl' ;
var fakeElement = document . createElement ( 'textarea' ) ; // Prevent zooming on iOS
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
fakeElement . style . fontSize = '12pt' ; // Reset box model
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
fakeElement . style . border = '0' ;
fakeElement . style . padding = '0' ;
fakeElement . style . margin = '0' ; // Move element out of screen horizontally
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
fakeElement . style . position = 'absolute' ;
fakeElement . style [ isRTL ? 'right' : 'left' ] = '-9999px' ; // Move element to the same position vertically
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
var yPosition = window . pageYOffset || document . documentElement . scrollTop ;
fakeElement . style . top = "" . concat ( yPosition , "px" ) ;
fakeElement . setAttribute ( 'readonly' , '' ) ;
fakeElement . value = value ;
return fakeElement ;
}
; // CONCATENATED MODULE: ./src/actions/copy.js
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
/ * *
* Copy action wrapper .
* @ param { String | HTMLElement } target
* @ param { Object } options
* @ return { String }
* /
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
var ClipboardActionCopy = function ClipboardActionCopy ( target ) {
var options = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : {
container : document . body
} ;
var selectedText = '' ;
if ( typeof target === 'string' ) {
var fakeElement = createFakeElement ( target ) ;
options . container . appendChild ( fakeElement ) ;
selectedText = select _default ( ) ( fakeElement ) ;
command ( 'copy' ) ;
fakeElement . remove ( ) ;
} else {
selectedText = select _default ( ) ( target ) ;
command ( 'copy' ) ;
}
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
return selectedText ;
} ;
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
/* harmony default export */ var actions _copy = ( ClipboardActionCopy ) ;
; // CONCATENATED MODULE: ./src/actions/default.js
function _typeof ( obj ) { "@babel/helpers - typeof" ; if ( typeof Symbol === "function" && typeof Symbol . iterator === "symbol" ) { _typeof = function _typeof ( obj ) { return typeof obj ; } ; } else { _typeof = function _typeof ( obj ) { return obj && typeof Symbol === "function" && obj . constructor === Symbol && obj !== Symbol . prototype ? "symbol" : typeof obj ; } ; } return _typeof ( obj ) ; }
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
/ * *
* Inner function which performs selection from either ` text ` or ` target `
* properties and then executes copy or cut operations .
* @ param { Object } options
* /
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
var ClipboardActionDefault = function ClipboardActionDefault ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
// Defines base properties passed from constructor.
var _options$action = options . action ,
action = _options$action === void 0 ? 'copy' : _options$action ,
container = options . container ,
target = options . target ,
text = options . text ; // Sets the `action` to be performed which can be either 'copy' or 'cut'.
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
if ( action !== 'copy' && action !== 'cut' ) {
throw new Error ( 'Invalid "action" value, use either "copy" or "cut"' ) ;
} // Sets the `target` property using an element that will be have its content copied.
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
if ( target !== undefined ) {
if ( target && _typeof ( target ) === 'object' && target . nodeType === 1 ) {
if ( action === 'copy' && target . hasAttribute ( 'disabled' ) ) {
throw new Error ( 'Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute' ) ;
}
2021-03-18 16:54:18 +01:00
2022-04-12 19:17:22 +02:00
if ( action === 'cut' && ( target . hasAttribute ( 'readonly' ) || target . hasAttribute ( 'disabled' ) ) ) {
throw new Error ( 'Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes' ) ;
2021-03-18 16:54:18 +01:00
}
2022-04-12 19:17:22 +02:00
} else {
throw new Error ( 'Invalid "target" value, use a valid Element' ) ;
2020-06-03 13:12:33 +02:00
}
2022-04-12 19:17:22 +02:00
} // Define selection strategy based on `text` property.
2021-03-18 16:54:18 +01:00
2022-04-12 19:17:22 +02:00
if ( text ) {
return actions _copy ( text , {
container : container
} ) ;
} // Defines which selection strategy based on `target` property.
2021-03-18 16:54:18 +01:00
2022-04-12 19:17:22 +02:00
if ( target ) {
return action === 'cut' ? actions _cut ( target ) : actions _copy ( target , {
container : container
} ) ;
}
} ;
2021-03-18 16:54:18 +01:00
2022-04-12 19:17:22 +02:00
/* harmony default export */ var actions _default = ( ClipboardActionDefault ) ;
2021-03-18 16:54:18 +01:00
; // CONCATENATED MODULE: ./src/clipboard.js
function clipboard _typeof ( obj ) { "@babel/helpers - typeof" ; if ( typeof Symbol === "function" && typeof Symbol . iterator === "symbol" ) { clipboard _typeof = function _typeof ( obj ) { return typeof obj ; } ; } else { clipboard _typeof = function _typeof ( obj ) { return obj && typeof Symbol === "function" && obj . constructor === Symbol && obj !== Symbol . prototype ? "symbol" : typeof obj ; } ; } return clipboard _typeof ( obj ) ; }
2022-04-12 19:17:22 +02:00
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
2021-03-18 16:54:18 +01:00
2022-04-12 19:17:22 +02:00
function _defineProperties ( target , props ) { for ( var i = 0 ; i < props . length ; i ++ ) { var descriptor = props [ i ] ; descriptor . enumerable = descriptor . enumerable || false ; descriptor . configurable = true ; if ( "value" in descriptor ) descriptor . writable = true ; Object . defineProperty ( target , descriptor . key , descriptor ) ; } }
2021-03-18 16:54:18 +01:00
2022-04-12 19:17:22 +02:00
function _createClass ( Constructor , protoProps , staticProps ) { if ( protoProps ) _defineProperties ( Constructor . prototype , protoProps ) ; if ( staticProps ) _defineProperties ( Constructor , staticProps ) ; return Constructor ; }
2021-03-18 16:54:18 +01:00
function _inherits ( subClass , superClass ) { if ( typeof superClass !== "function" && superClass !== null ) { throw new TypeError ( "Super expression must either be null or a function" ) ; } subClass . prototype = Object . create ( superClass && superClass . prototype , { constructor : { value : subClass , writable : true , configurable : true } } ) ; if ( superClass ) _setPrototypeOf ( subClass , superClass ) ; }
function _setPrototypeOf ( o , p ) { _setPrototypeOf = Object . setPrototypeOf || function _setPrototypeOf ( o , p ) { o . _ _proto _ _ = p ; return o ; } ; return _setPrototypeOf ( o , p ) ; }
function _createSuper ( Derived ) { var hasNativeReflectConstruct = _isNativeReflectConstruct ( ) ; return function _createSuperInternal ( ) { var Super = _getPrototypeOf ( Derived ) , result ; if ( hasNativeReflectConstruct ) { var NewTarget = _getPrototypeOf ( this ) . constructor ; result = Reflect . construct ( Super , arguments , NewTarget ) ; } else { result = Super . apply ( this , arguments ) ; } return _possibleConstructorReturn ( this , result ) ; } ; }
function _possibleConstructorReturn ( self , call ) { if ( call && ( clipboard _typeof ( call ) === "object" || typeof call === "function" ) ) { return call ; } return _assertThisInitialized ( self ) ; }
function _assertThisInitialized ( self ) { if ( self === void 0 ) { throw new ReferenceError ( "this hasn't been initialised - super() hasn't been called" ) ; } return self ; }
function _isNativeReflectConstruct ( ) { if ( typeof Reflect === "undefined" || ! Reflect . construct ) return false ; if ( Reflect . construct . sham ) return false ; if ( typeof Proxy === "function" ) return true ; try { Date . prototype . toString . call ( Reflect . construct ( Date , [ ] , function ( ) { } ) ) ; return true ; } catch ( e ) { return false ; } }
function _getPrototypeOf ( o ) { _getPrototypeOf = Object . setPrototypeOf ? Object . getPrototypeOf : function _getPrototypeOf ( o ) { return o . _ _proto _ _ || Object . getPrototypeOf ( o ) ; } ; return _getPrototypeOf ( o ) ; }
2019-03-27 23:31:52 +01:00
2022-04-12 19:17:22 +02:00
2020-06-03 13:12:33 +02:00
/ * *
2021-03-18 16:54:18 +01:00
* Helper function to retrieve attribute value .
* @ param { String } suffix
* @ param { Element } element
2020-06-03 13:12:33 +02:00
* /
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
function getAttributeValue ( suffix , element ) {
var attribute = "data-clipboard-" . concat ( suffix ) ;
if ( ! element . hasAttribute ( attribute ) ) {
return ;
}
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
return element . getAttribute ( attribute ) ;
}
2020-06-03 13:12:33 +02:00
/ * *
2021-03-18 16:54:18 +01:00
* Base class which takes one or more elements , adds event listeners to them ,
* and instantiates a new ` ClipboardAction ` on each click .
2020-06-03 13:12:33 +02:00
* /
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
var Clipboard = /*#__PURE__*/ function ( _Emitter ) {
_inherits ( Clipboard , _Emitter ) ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
var _super = _createSuper ( Clipboard ) ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
/ * *
* @ param { String | HTMLElement | HTMLCollection | NodeList } trigger
* @ param { Object } options
* /
function Clipboard ( trigger , options ) {
var _this ;
2020-06-03 13:12:33 +02:00
2022-04-12 19:17:22 +02:00
_classCallCheck ( this , Clipboard ) ;
2020-06-03 13:12:33 +02:00
2021-03-18 16:54:18 +01:00
_this = _super . call ( this ) ;
_this . resolveOptions ( options ) ;
_this . listenClick ( trigger ) ;
return _this ;
}
/ * *
* Defines if attributes would be resolved using internal setter functions
* or custom functions that were passed in the constructor .
* @ param { Object } options
* /
2022-04-12 19:17:22 +02:00
_createClass ( Clipboard , [ {
2021-03-18 16:54:18 +01:00
key : "resolveOptions" ,
value : function resolveOptions ( ) {
var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
this . action = typeof options . action === 'function' ? options . action : this . defaultAction ;
this . target = typeof options . target === 'function' ? options . target : this . defaultTarget ;
this . text = typeof options . text === 'function' ? options . text : this . defaultText ;
this . container = clipboard _typeof ( options . container ) === 'object' ? options . container : document . body ;
}
/ * *
* Adds a click event listener to the passed trigger .
* @ param { String | HTMLElement | HTMLCollection | NodeList } trigger
* /
} , {
key : "listenClick" ,
value : function listenClick ( trigger ) {
var _this2 = this ;
this . listener = listen _default ( ) ( trigger , 'click' , function ( e ) {
return _this2 . onClick ( e ) ;
} ) ;
}
/ * *
* Defines a new ` ClipboardAction ` on each click event .
* @ param { Event } e
* /
} , {
key : "onClick" ,
value : function onClick ( e ) {
var trigger = e . delegateTarget || e . currentTarget ;
2022-04-12 19:17:22 +02:00
var action = this . action ( trigger ) || 'copy' ;
var text = actions _default ( {
action : action ,
2021-03-18 16:54:18 +01:00
container : this . container ,
2022-04-12 19:17:22 +02:00
target : this . target ( trigger ) ,
text : this . text ( trigger )
} ) ; // Fires an event based on the copy operation result.
this . emit ( text ? 'success' : 'error' , {
action : action ,
text : text ,
2021-03-18 16:54:18 +01:00
trigger : trigger ,
2022-04-12 19:17:22 +02:00
clearSelection : function clearSelection ( ) {
if ( trigger ) {
trigger . focus ( ) ;
}
document . activeElement . blur ( ) ;
window . getSelection ( ) . removeAllRanges ( ) ;
}
2021-03-18 16:54:18 +01:00
} ) ;
}
/ * *
* Default ` action ` lookup function .
* @ param { Element } trigger
* /
} , {
key : "defaultAction" ,
value : function defaultAction ( trigger ) {
return getAttributeValue ( 'action' , trigger ) ;
}
/ * *
* Default ` target ` lookup function .
* @ param { Element } trigger
* /
} , {
key : "defaultTarget" ,
value : function defaultTarget ( trigger ) {
var selector = getAttributeValue ( 'target' , trigger ) ;
if ( selector ) {
return document . querySelector ( selector ) ;
}
}
/ * *
2022-04-12 19:17:22 +02:00
* Allow fire programmatically a copy action
* @ param { String | HTMLElement } target
* @ param { Object } options
* @ returns Text copied .
2021-03-18 16:54:18 +01:00
* /
} , {
key : "defaultText" ,
/ * *
* Default ` text ` lookup function .
* @ param { Element } trigger
* /
value : function defaultText ( trigger ) {
return getAttributeValue ( 'text' , trigger ) ;
}
/ * *
* Destroy lifecycle .
* /
} , {
key : "destroy" ,
value : function destroy ( ) {
this . listener . destroy ( ) ;
}
} ] , [ {
2022-04-12 19:17:22 +02:00
key : "copy" ,
value : function copy ( target ) {
var options = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : {
container : document . body
} ;
return actions _copy ( target , options ) ;
}
/ * *
* Allow fire programmatically a cut action
* @ param { String | HTMLElement } target
* @ returns Text cutted .
* /
} , {
key : "cut" ,
value : function cut ( target ) {
return actions _cut ( target ) ;
}
/ * *
* Returns the support of the given action , or all actions if no action is
* given .
* @ param { String } [ action ]
* /
} , {
2021-03-18 16:54:18 +01:00
key : "isSupported" ,
value : function isSupported ( ) {
var action = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : [ 'copy' , 'cut' ] ;
var actions = typeof action === 'string' ? [ action ] : action ;
var support = ! ! document . queryCommandSupported ;
actions . forEach ( function ( action ) {
support = support && ! ! document . queryCommandSupported ( action ) ;
} ) ;
return support ;
}
} ] ) ;
return Clipboard ;
} ( ( tiny _emitter _default ( ) ) ) ;
/* harmony default export */ var clipboard = ( Clipboard ) ;
/***/ } ) ,
/***/ 828 :
/***/ ( function ( module ) {
var DOCUMENT _NODE _TYPE = 9 ;
2020-06-03 13:12:33 +02:00
/ * *
2021-03-18 16:54:18 +01:00
* A polyfill for Element . matches ( )
2020-06-03 13:12:33 +02:00
* /
2021-03-18 16:54:18 +01:00
if ( typeof Element !== 'undefined' && ! Element . prototype . matches ) {
var proto = Element . prototype ;
proto . matches = proto . matchesSelector ||
proto . mozMatchesSelector ||
proto . msMatchesSelector ||
proto . oMatchesSelector ||
proto . webkitMatchesSelector ;
}
2020-06-03 13:12:33 +02:00
/ * *
2021-03-18 16:54:18 +01:00
* Finds the closest parent that matches a selector .
2020-06-03 13:12:33 +02:00
*
2021-03-18 16:54:18 +01:00
* @ param { Element } element
* @ param { String } selector
* @ return { Function }
2020-06-03 13:12:33 +02:00
* /
2021-03-18 16:54:18 +01:00
function closest ( element , selector ) {
while ( element && element . nodeType !== DOCUMENT _NODE _TYPE ) {
if ( typeof element . matches === 'function' &&
element . matches ( selector ) ) {
return element ;
}
element = element . parentNode ;
}
}
2020-06-03 13:12:33 +02:00
2021-03-18 16:54:18 +01:00
module . exports = closest ;
2020-06-03 13:12:33 +02:00
/***/ } ) ,
2021-03-18 16:54:18 +01:00
/***/ 438 :
/***/ ( function ( module , _ _unused _webpack _exports , _ _webpack _require _ _ ) {
var closest = _ _webpack _require _ _ ( 828 ) ;
2020-06-03 13:12:33 +02:00
/ * *
* Delegates event to a selector .
*
2019-03-27 23:31:52 +01:00
* @ param { Element } element
2020-06-03 13:12:33 +02:00
* @ param { String } selector
* @ param { String } type
* @ param { Function } callback
* @ param { Boolean } useCapture
* @ return { Object }
2019-03-27 23:31:52 +01:00
* /
2020-06-03 13:12:33 +02:00
function _delegate ( element , selector , type , callback , useCapture ) {
var listenerFn = listener . apply ( this , arguments ) ;
2019-03-27 23:31:52 +01:00
2020-06-03 13:12:33 +02:00
element . addEventListener ( type , listenerFn , useCapture ) ;
2019-03-27 23:31:52 +01:00
2020-06-03 13:12:33 +02:00
return {
destroy : function ( ) {
element . removeEventListener ( type , listenerFn , useCapture ) ;
}
}
}
2019-03-27 23:31:52 +01:00
2020-06-03 13:12:33 +02:00
/ * *
* Delegates event to a selector .
*
* @ param { Element | String | Array } [ elements ]
* @ param { String } selector
* @ param { String } type
* @ param { Function } callback
* @ param { Boolean } useCapture
* @ return { Object }
* /
function delegate ( elements , selector , type , callback , useCapture ) {
// Handle the regular Element usage
if ( typeof elements . addEventListener === 'function' ) {
return _delegate . apply ( null , arguments ) ;
2019-03-27 23:31:52 +01:00
}
2020-06-03 13:12:33 +02:00
// Handle Element-less usage, it defaults to global delegation
if ( typeof type === 'function' ) {
// Use `document` as the first parameter, then apply arguments
// This is a short way to .unshift `arguments` without running into deoptimizations
return _delegate . bind ( null , document ) . apply ( null , arguments ) ;
}
// Handle Selector-based usage
if ( typeof elements === 'string' ) {
elements = document . querySelectorAll ( elements ) ;
}
// Handle Array-like based usage
return Array . prototype . map . call ( elements , function ( element ) {
return _delegate ( element , selector , type , callback , useCapture ) ;
} ) ;
}
/ * *
* Finds closest match and invokes callback .
*
* @ param { Element } element
* @ param { String } selector
* @ param { String } type
* @ param { Function } callback
* @ return { Function }
* /
function listener ( element , selector , type , callback ) {
return function ( e ) {
e . delegateTarget = closest ( e . target , selector ) ;
if ( e . delegateTarget ) {
callback . call ( element , e ) ;
}
}
2019-03-27 23:31:52 +01:00
}
2020-06-03 13:12:33 +02:00
module . exports = delegate ;
2019-03-27 23:31:52 +01:00
/***/ } ) ,
2020-06-03 13:12:33 +02:00
2021-03-18 16:54:18 +01:00
/***/ 879 :
/***/ ( function ( _ _unused _webpack _module , exports ) {
2020-06-03 13:12:33 +02:00
/ * *
2021-03-18 16:54:18 +01:00
* Check if argument is a HTML element .
*
* @ param { Object } value
* @ return { Boolean }
2020-06-03 13:12:33 +02:00
* /
2021-03-18 16:54:18 +01:00
exports . node = function ( value ) {
return value !== undefined
&& value instanceof HTMLElement
&& value . nodeType === 1 ;
} ;
2020-06-03 13:12:33 +02:00
/ * *
2021-03-18 16:54:18 +01:00
* Check if argument is a list of HTML elements .
2020-06-03 13:12:33 +02:00
*
2021-03-18 16:54:18 +01:00
* @ param { Object } value
* @ return { Boolean }
2020-06-03 13:12:33 +02:00
* /
2021-03-18 16:54:18 +01:00
exports . nodeList = function ( value ) {
var type = Object . prototype . toString . call ( value ) ;
2020-06-03 13:12:33 +02:00
2021-03-18 16:54:18 +01:00
return value !== undefined
&& ( type === '[object NodeList]' || type === '[object HTMLCollection]' )
&& ( 'length' in value )
&& ( value . length === 0 || exports . node ( value [ 0 ] ) ) ;
} ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
/ * *
* Check if argument is a string .
*
* @ param { Object } value
* @ return { Boolean }
* /
exports . string = function ( value ) {
return typeof value === 'string'
|| value instanceof String ;
} ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
/ * *
* Check if argument is a function .
*
* @ param { Object } value
* @ return { Boolean }
* /
exports . fn = function ( value ) {
var type = Object . prototype . toString . call ( value ) ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
return type === '[object Function]' ;
} ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
/***/ } ) ,
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
/***/ 370 :
/***/ ( function ( module , _ _unused _webpack _exports , _ _webpack _require _ _ ) {
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
var is = _ _webpack _require _ _ ( 879 ) ;
var delegate = _ _webpack _require _ _ ( 438 ) ;
2019-03-27 23:31:52 +01:00
/ * *
2021-03-18 16:54:18 +01:00
* Validates all params and calls the right
* listener function based on its target type .
*
* @ param { String | HTMLElement | HTMLCollection | NodeList } target
* @ param { String } type
* @ param { Function } callback
* @ return { Object }
2019-03-27 23:31:52 +01:00
* /
2021-03-18 16:54:18 +01:00
function listen ( target , type , callback ) {
if ( ! target && ! type && ! callback ) {
throw new Error ( 'Missing required arguments' ) ;
2019-03-27 23:31:52 +01:00
}
2021-03-18 16:54:18 +01:00
if ( ! is . string ( type ) ) {
throw new TypeError ( 'Second argument must be a String' ) ;
}
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
if ( ! is . fn ( callback ) ) {
throw new TypeError ( 'Third argument must be a Function' ) ;
}
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
if ( is . node ( target ) ) {
return listenNode ( target , type , callback ) ;
}
else if ( is . nodeList ( target ) ) {
return listenNodeList ( target , type , callback ) ;
}
else if ( is . string ( target ) ) {
return listenSelector ( target , type , callback ) ;
}
else {
throw new TypeError ( 'First argument must be a String, HTMLElement, HTMLCollection, or NodeList' ) ;
}
}
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
/ * *
* Adds an event listener to a HTML element
* and returns a remove listener function .
*
* @ param { HTMLElement } node
* @ param { String } type
* @ param { Function } callback
* @ return { Object }
* /
function listenNode ( node , type , callback ) {
node . addEventListener ( type , callback ) ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
return {
destroy : function ( ) {
node . removeEventListener ( type , callback ) ;
2019-03-27 23:31:52 +01:00
}
2021-03-18 16:54:18 +01:00
}
}
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
/ * *
* Add an event listener to a list of HTML elements
* and returns a remove listener function .
*
* @ param { NodeList | HTMLCollection } nodeList
* @ param { String } type
* @ param { Function } callback
* @ return { Object }
* /
function listenNodeList ( nodeList , type , callback ) {
Array . prototype . forEach . call ( nodeList , function ( node ) {
node . addEventListener ( type , callback ) ;
} ) ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
return {
destroy : function ( ) {
Array . prototype . forEach . call ( nodeList , function ( node ) {
node . removeEventListener ( type , callback ) ;
2019-03-27 23:31:52 +01:00
} ) ;
}
2021-03-18 16:54:18 +01:00
}
}
2019-03-27 23:31:52 +01:00
2020-06-03 13:12:33 +02:00
/ * *
2021-03-18 16:54:18 +01:00
* Add an event listener to a selector
* and returns a remove listener function .
*
* @ param { String } selector
* @ param { String } type
* @ param { Function } callback
* @ return { Object }
2020-06-03 13:12:33 +02:00
* /
2021-03-18 16:54:18 +01:00
function listenSelector ( selector , type , callback ) {
return delegate ( document . body , selector , type , callback ) ;
}
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
module . exports = listen ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
/***/ } ) ,
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
/***/ 817 :
/***/ ( function ( module ) {
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
function select ( element ) {
var selectedText ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
if ( element . nodeName === 'SELECT' ) {
element . focus ( ) ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
selectedText = element . value ;
}
else if ( element . nodeName === 'INPUT' || element . nodeName === 'TEXTAREA' ) {
var isReadOnly = element . hasAttribute ( 'readonly' ) ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
if ( ! isReadOnly ) {
element . setAttribute ( 'readonly' , '' ) ;
2019-03-27 23:31:52 +01:00
}
2021-03-18 16:54:18 +01:00
element . select ( ) ;
element . setSelectionRange ( 0 , element . value . length ) ;
2020-06-03 13:12:33 +02:00
2021-03-18 16:54:18 +01:00
if ( ! isReadOnly ) {
element . removeAttribute ( 'readonly' ) ;
2019-03-27 23:31:52 +01:00
}
2021-03-18 16:54:18 +01:00
selectedText = element . value ;
}
else {
if ( element . hasAttribute ( 'contenteditable' ) ) {
element . focus ( ) ;
2020-06-03 13:12:33 +02:00
}
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
var selection = window . getSelection ( ) ;
var range = document . createRange ( ) ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
range . selectNodeContents ( element ) ;
selection . removeAllRanges ( ) ;
selection . addRange ( range ) ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
selectedText = selection . toString ( ) ;
}
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
return selectedText ;
}
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
module . exports = select ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
/***/ } ) ,
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
/***/ 279 :
/***/ ( function ( module ) {
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
function E ( ) {
// Keep this empty so it's easier to inherit from
// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)
}
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
E . prototype = {
on : function ( name , callback , ctx ) {
var e = this . e || ( this . e = { } ) ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
( e [ name ] || ( e [ name ] = [ ] ) ) . push ( {
fn : callback ,
ctx : ctx
} ) ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
return this ;
} ,
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
once : function ( name , callback , ctx ) {
var self = this ;
function listener ( ) {
self . off ( name , listener ) ;
callback . apply ( ctx , arguments ) ;
} ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
listener . _ = callback
return this . on ( name , listener , ctx ) ;
} ,
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
emit : function ( name ) {
var data = [ ] . slice . call ( arguments , 1 ) ;
var evtArr = ( ( this . e || ( this . e = { } ) ) [ name ] || [ ] ) . slice ( ) ;
var i = 0 ;
var len = evtArr . length ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
for ( i ; i < len ; i ++ ) {
evtArr [ i ] . fn . apply ( evtArr [ i ] . ctx , data ) ;
}
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
return this ;
} ,
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
off : function ( name , callback ) {
var e = this . e || ( this . e = { } ) ;
var evts = e [ name ] ;
var liveEvents = [ ] ;
2019-03-27 23:31:52 +01:00
2021-03-18 16:54:18 +01:00
if ( evts && callback ) {
for ( var i = 0 , len = evts . length ; i < len ; i ++ ) {
if ( evts [ i ] . fn !== callback && evts [ i ] . fn . _ !== callback )
liveEvents . push ( evts [ i ] ) ;
}
2019-03-27 23:31:52 +01:00
}
2021-03-18 16:54:18 +01:00
// Remove event from queue to prevent memory leak
// Suggested by https://github.com/lazd
// Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910
( liveEvents . length )
? e [ name ] = liveEvents
: delete e [ name ] ;
return this ;
}
} ;
module . exports = E ;
module . exports . TinyEmitter = E ;
2019-03-27 23:31:52 +01:00
/***/ } )
2021-03-18 16:54:18 +01:00
/******/ } ) ;
/************************************************************************/
/******/ // The module cache
/******/ var _ _webpack _module _cache _ _ = { } ;
/******/
/******/ // The require function
/******/ function _ _webpack _require _ _ ( moduleId ) {
/******/ // Check if module is in cache
/******/ if ( _ _webpack _module _cache _ _ [ moduleId ] ) {
/******/ return _ _webpack _module _cache _ _ [ moduleId ] . exports ;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = _ _webpack _module _cache _ _ [ moduleId ] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports : { }
/******/ } ;
/******/
/******/ // Execute the module function
/******/ _ _webpack _modules _ _ [ moduleId ] ( module , module . exports , _ _webpack _require _ _ ) ;
/******/
/******/ // Return the exports of the module
/******/ return module . exports ;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ ! function ( ) {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ _ _webpack _require _ _ . n = function ( module ) {
/******/ var getter = module && module . _ _esModule ?
/******/ function ( ) { return module [ 'default' ] ; } :
/******/ function ( ) { return module ; } ;
/******/ _ _webpack _require _ _ . d ( getter , { a : getter } ) ;
/******/ return getter ;
/******/ } ;
/******/ } ( ) ;
/******/
/******/ /* webpack/runtime/define property getters */
/******/ ! function ( ) {
/******/ // define getter functions for harmony exports
/******/ _ _webpack _require _ _ . d = function ( exports , definition ) {
/******/ for ( var key in definition ) {
/******/ if ( _ _webpack _require _ _ . o ( definition , key ) && ! _ _webpack _require _ _ . o ( exports , key ) ) {
/******/ Object . defineProperty ( exports , key , { enumerable : true , get : definition [ key ] } ) ;
/******/ }
/******/ }
/******/ } ;
/******/ } ( ) ;
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ ! function ( ) {
/******/ _ _webpack _require _ _ . o = function ( obj , prop ) { return Object . prototype . hasOwnProperty . call ( obj , prop ) ; }
/******/ } ( ) ;
/******/
/************************************************************************/
/******/ // module exports must be returned from runtime so entry inlining is disabled
/******/ // startup
/******/ // Load entry module and return exports
2022-04-12 19:17:22 +02:00
/******/ return _ _webpack _require _ _ ( 686 ) ;
2021-03-18 16:54:18 +01:00
/******/ } ) ( )
. default ;
2019-03-27 23:31:52 +01:00
} ) ;