summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Translate/resources/js/jquery.autosize.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/Translate/resources/js/jquery.autosize.js')
-rw-r--r--www/wiki/extensions/Translate/resources/js/jquery.autosize.js254
1 files changed, 254 insertions, 0 deletions
diff --git a/www/wiki/extensions/Translate/resources/js/jquery.autosize.js b/www/wiki/extensions/Translate/resources/js/jquery.autosize.js
new file mode 100644
index 00000000..2de01911
--- /dev/null
+++ b/www/wiki/extensions/Translate/resources/js/jquery.autosize.js
@@ -0,0 +1,254 @@
+/*!
+ Autosize 3.0.15
+ license: MIT
+ http://www.jacklmoore.com/autosize
+ */
+( function ( global, factory ) {
+ if ( typeof define === 'function' && define.amd ) {
+ define( [ 'exports', 'module' ], factory );
+ } else if ( typeof exports !== 'undefined' && typeof module !== 'undefined' ) {
+ factory( exports, module );
+ } else {
+ var mod = {
+ exports: {}
+ };
+ factory( mod.exports, mod );
+ global.autosize = mod.exports;
+ }
+}( this, function ( exports, module ) {
+ 'use strict';
+
+ var set = typeof Set === 'function' ? new Set() : ( function () {
+ var list = [];
+
+ return {
+ has: function has( key ) {
+ return Boolean( list.indexOf( key ) > -1 );
+ },
+ add: function add( key ) {
+ list.push( key );
+ },
+ delete: function _delete( key ) {
+ list.splice( list.indexOf( key ), 1 );
+ } };
+ }() ),
+
+ createEvent = function createEvent( name ) {
+ return new Event( name );
+ };
+ try {
+ new Event( 'test' );
+ } catch ( e ) {
+ // IE does not support `new Event()`
+ createEvent = function ( name ) {
+ var evt = document.createEvent( 'Event' );
+ evt.initEvent( name, true, false );
+ return evt;
+ };
+ }
+
+ function assign( ta ) {
+ var _ref = arguments[ 1 ] === undefined ? {} : arguments[ 1 ],
+
+ _ref$setOverflowX = _ref.setOverflowX,
+ setOverflowX = _ref$setOverflowX === undefined ? true : _ref$setOverflowX,
+ _ref$setOverflowY = _ref.setOverflowY,
+ setOverflowY = _ref$setOverflowY === undefined ? true : _ref$setOverflowY;
+
+ if ( !ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || set.has( ta ) ) { return; }
+
+ var heightOffset = null,
+ overflowY = null,
+ clientWidth = ta.clientWidth;
+
+ function init() {
+ var style = window.getComputedStyle( ta, null );
+
+ overflowY = style.overflowY;
+
+ if ( style.resize === 'vertical' ) {
+ ta.style.resize = 'none';
+ } else if ( style.resize === 'both' ) {
+ ta.style.resize = 'horizontal';
+ }
+
+ if ( style.boxSizing === 'content-box' ) {
+ heightOffset = -( parseFloat( style.paddingTop ) + parseFloat( style.paddingBottom ) );
+ } else {
+ heightOffset = parseFloat( style.borderTopWidth ) + parseFloat( style.borderBottomWidth );
+ }
+ // Fix when a textarea is not on document body and heightOffset is Not a Number
+ if ( isNaN( heightOffset ) ) {
+ heightOffset = 0;
+ }
+
+ update();
+ }
+
+ function changeOverflow( value ) {
+ {
+ // Chrome/Safari-specific fix:
+ // When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
+ // made available by removing the scrollbar. The following forces the necessary text reflow.
+ var width = ta.style.width;
+ ta.style.width = '0px';
+ // Force reflow:
+ /* jshint ignore:start */
+ ta.offsetWidth;
+ /* jshint ignore:end */
+ ta.style.width = width;
+ }
+
+ overflowY = value;
+
+ if ( setOverflowY ) {
+ ta.style.overflowY = value;
+ }
+
+ resize();
+ }
+
+ function resize() {
+ var htmlTop = window.pageYOffset,
+ bodyTop = document.body.scrollTop,
+ originalHeight = ta.style.height;
+
+ ta.style.height = 'auto';
+
+ var endHeight = ta.scrollHeight + heightOffset;
+
+ if ( ta.scrollHeight === 0 ) {
+ // If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
+ ta.style.height = originalHeight;
+ return;
+ }
+
+ ta.style.height = endHeight + 'px';
+
+ // used to check if an update is actually necessary on window.resize
+ clientWidth = ta.clientWidth;
+
+ // prevents scroll-position jumping
+ document.documentElement.scrollTop = htmlTop;
+ document.body.scrollTop = bodyTop;
+ }
+
+ function update() {
+ var startHeight = ta.style.height;
+
+ resize();
+
+ var style = window.getComputedStyle( ta, null );
+
+ if ( style.height !== ta.style.height ) {
+ if ( overflowY !== 'visible' ) {
+ changeOverflow( 'visible' );
+ }
+ } else {
+ if ( overflowY !== 'hidden' ) {
+ changeOverflow( 'hidden' );
+ }
+ }
+
+ if ( startHeight !== ta.style.height ) {
+ var evt = createEvent( 'autosize:resized' );
+ ta.dispatchEvent( evt );
+ }
+ }
+
+ var pageResize = function pageResize() {
+ if ( ta.clientWidth !== clientWidth ) {
+ update();
+ }
+ },
+
+ destroy = ( function ( style ) {
+ window.removeEventListener( 'resize', pageResize, false );
+ ta.removeEventListener( 'input', update, false );
+ ta.removeEventListener( 'keyup', update, false );
+ ta.removeEventListener( 'autosize:destroy', destroy, false );
+ ta.removeEventListener( 'autosize:update', update, false );
+ set.delete( ta );
+
+ Object.keys( style ).forEach( function ( key ) {
+ ta.style[ key ] = style[ key ];
+ } );
+ } ).bind( ta, {
+ height: ta.style.height,
+ resize: ta.style.resize,
+ overflowY: ta.style.overflowY,
+ overflowX: ta.style.overflowX,
+ wordWrap: ta.style.wordWrap } );
+
+ ta.addEventListener( 'autosize:destroy', destroy, false );
+
+ // IE9 does not fire onpropertychange or oninput for deletions,
+ // so binding to onkeyup to catch most of those events.
+ // There is no way that I know of to detect something like 'cut' in IE9.
+ if ( 'onpropertychange' in ta && 'oninput' in ta ) {
+ ta.addEventListener( 'keyup', update, false );
+ }
+
+ window.addEventListener( 'resize', pageResize, false );
+ ta.addEventListener( 'input', update, false );
+ ta.addEventListener( 'autosize:update', update, false );
+ set.add( ta );
+
+ if ( setOverflowX ) {
+ ta.style.overflowX = 'hidden';
+ ta.style.wordWrap = 'break-word';
+ }
+
+ init();
+ }
+
+ function destroy( ta ) {
+ if ( !( ta && ta.nodeName && ta.nodeName === 'TEXTAREA' ) ) { return; }
+ var evt = createEvent( 'autosize:destroy' );
+ ta.dispatchEvent( evt );
+ }
+
+ function update( ta ) {
+ if ( !( ta && ta.nodeName && ta.nodeName === 'TEXTAREA' ) ) { return; }
+ var evt = createEvent( 'autosize:update' );
+ ta.dispatchEvent( evt );
+ }
+
+ var autosize = null;
+
+ // Do nothing in Node.js environment and IE8 (or lower)
+ if ( typeof window === 'undefined' || typeof window.getComputedStyle !== 'function' ) {
+ autosize = function ( el ) {
+ return el;
+ };
+ autosize.destroy = function ( el ) {
+ return el;
+ };
+ autosize.update = function ( el ) {
+ return el;
+ };
+ } else {
+ autosize = function ( el, options ) {
+ if ( el ) {
+ Array.prototype.forEach.call( el.length ? el : [ el ], function ( x ) {
+ return assign( x, options );
+ } );
+ }
+ return el;
+ };
+ autosize.destroy = function ( el ) {
+ if ( el ) {
+ Array.prototype.forEach.call( el.length ? el : [ el ], destroy );
+ }
+ return el;
+ };
+ autosize.update = function ( el ) {
+ if ( el ) {
+ Array.prototype.forEach.call( el.length ? el : [ el ], update );
+ }
+ return el;
+ };
+ }
+
+ module.exports = autosize;
+} ) );