[Pkg-javascript-commits] [autosize.js] 01/08: Imported Upstream version 3.0.14+dfsg1

Alexandre Viau aviau at moszumanska.debian.org
Tue Dec 29 21:15:41 UTC 2015


This is an automated email from the git hooks/post-receive script.

aviau pushed a commit to branch master
in repository autosize.js.

commit e3ffa5d759bed222ae9371bd72d6d0f9d6c956d6
Author: aviau <alexandre at alexandreviau.net>
Date:   Fri Dec 25 13:15:52 2015 -0500

    Imported Upstream version 3.0.14+dfsg1
---
 .gitignore         |   2 +
 bower.json         |  29 +++++++
 build.js           |  87 +++++++++++++++++++
 changelog.md       |  69 +++++++++++++++
 dist/autosize.js   | 243 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 example/index.html |  29 +++++++
 package.json       |  45 ++++++++++
 readme.md          |  39 +++++++++
 src/autosize.js    | 209 +++++++++++++++++++++++++++++++++++++++++++++
 9 files changed, 752 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c383b36
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+node_modules/*
+test/*
\ No newline at end of file
diff --git a/bower.json b/bower.json
new file mode 100644
index 0000000..f6aa4bc
--- /dev/null
+++ b/bower.json
@@ -0,0 +1,29 @@
+{
+	"name": "autosize",
+	"description": "Autosize is a small, stand-alone script to automatically adjust textarea height to fit text.",
+	"dependencies": {},
+	"keywords": [
+		"textarea",
+		"form",
+		"ui"
+	],
+	"authors": [
+		{
+			"name": "Jack Moore",
+			"url": "http://www.jacklmoore.com",
+			"email": "hello at jacklmoore.com"
+		}
+	],
+	"license": "MIT",
+	"homepage": "http://www.jacklmoore.com/autosize",
+	"ignore": [],
+	"repository": {
+		"type": "git",
+		"url": "http://github.com/jackmoore/autosize.git"
+	},
+	"main": "dist/autosize.js",
+	"moduleType": [
+		"amd",
+		"node"
+	]
+}
\ No newline at end of file
diff --git a/build.js b/build.js
new file mode 100644
index 0000000..bab0cd6
--- /dev/null
+++ b/build.js
@@ -0,0 +1,87 @@
+var pkg = require('./package.json');
+var fs = require('fs');
+var ugly = require('uglify-js');
+var jshint = require('jshint').JSHINT;
+var babel = require('babel');
+var gaze = require('gaze');
+
+function writeBower() {
+	var bower = {
+		name: pkg.config.bower.name,
+		description: pkg.description,
+		dependencies: pkg.dependencies,
+		keywords: pkg.keywords,
+		authors: [pkg.author],
+		license: pkg.license,
+		homepage: pkg.homepage,
+		ignore: pkg.config.bower.ignore,
+		repository: pkg.repository,
+		main: pkg.main,
+		moduleType: pkg.config.bower.moduleType,
+	};
+	fs.writeFile('bower.json', JSON.stringify(bower, null, '\t'));
+	return true;
+}
+
+function lint(full) {
+	jshint(full.toString(), {
+		browser: true,
+		undef: true,
+		unused: true,
+		immed: true,
+		eqeqeq: true,
+		eqnull: true,
+		noarg: true,
+		predef: ['define', 'module', 'exports', 'Set']
+	});
+
+	if (jshint.errors.length) {
+		jshint.errors.forEach(function (err) {
+			console.log(err.line+':'+err.character+' '+err.reason);
+		});
+	} else {
+		console.log('linted')
+	}
+
+	return true;
+}
+
+function build(code) {
+	var minified = ugly.minify(code, {fromString: true}).code;
+	var header = [
+		'/*!',
+		'	'+pkg.config.title+' '+pkg.version,
+		'	license: MIT',
+		'	'+pkg.homepage,
+		'*/',
+		''
+	].join('\n');
+
+	fs.writeFile('dist/'+pkg.config.filename+'.js', header+code);
+	fs.writeFile('dist/'+pkg.config.filename+'.min.js', header+minified);
+	writeBower();
+	
+	console.log('dist built');
+}
+
+function transform(filepath) {
+	babel.transformFile(filepath, {modules: 'umd'}, function (err,res) {
+		if (err) {
+			return console.log(err);
+		} else {
+			lint(res.code);
+			build(res.code);
+		}
+	});
+}
+
+gaze('src/'+pkg.config.filename+'.js', function(err, watcher){
+	// On file changed
+	this.on('changed', function(filepath) {
+		transform(filepath);
+	});
+
+	console.log('watching');
+});
+
+transform('src/'+pkg.config.filename+'.js');
\ No newline at end of file
diff --git a/changelog.md b/changelog.md
new file mode 100644
index 0000000..8a2ac39
--- /dev/null
+++ b/changelog.md
@@ -0,0 +1,69 @@
+## Changelog
+
+##### v.3.0.14 - 2015-11-11
+* Fixed memory leak on destroy. Merged #271, fixes #270.
+* Fixed bug in old versions of Firefox (1-5), fixes #246.
+
+##### v.3.0.13 - 2015-09-26
+* Fixed scroll-bar jumpiness in iOS. Merged #261, fixes #207.
+* Fixed reflowing of initial text in Chrome and Safari.
+
+##### v.3.0.12 - 2015-09-14
+* Merged changes were discarded when building new dist files.  Merged #255, Fixes #257 for real this time.
+
+##### v.3.0.11 - 2015-09-14
+* Fixed regression from 3.0.10 that caused an error with ES5 browsers.  Merged #255, Fixes #257.
+
+##### v.3.0.10 - 2015-09-10
+* Removed data attribute as a way of tracking which elements autosize has been assigned to. fixes #254, fixes #200.
+
+##### v.3.0.9 - 2015-09-02
+* Fixed issue with assigning autosize to detached nodes. Merged #253, Fixes #234.
+
+##### v.3.0.8 - 2015-06-29
+* Fixed the `autosize:resized` event not being triggered when the overflow changes. Fixes #244.
+
+##### v.3.0.7 - 2015-06-29
+* Fixed jumpy behavior in Windows 8.1 mobile. Fixes #239.
+
+##### v.3.0.6 - 2015-05-19
+* Renamed 'dest' folder to 'dist' to follow common conventions.
+
+##### v.3.0.5 - 2015-05-18
+* Do nothing in Node.js environment.
+
+##### v.3.0.4 - 2015-05-05
+* Added options object for indicating if the script should set the overflowX and overflowY.  The default behavior lets the script control the overflows, which will normalize the appearance between browsers.  Fixes #220.
+
+##### v.3.0.3 - 2015-04-23
+* Avoided adjusting the height for hidden textarea elements.  Fixes #155.
+
+##### v.3.0.2 - 2015-04-23
+* Reworked to respect max-height of any unit-type.  Fixes #191.
+
+##### v.3.0.1 - 2015-04-23
+* Fixed the destroy event so that it removes it's own event handler. Fixes #218.
+
+##### v.3.0.0 - 2015-04-15
+* Added new methods for updating and destroying:
+
+	* autosize.update(elements)
+	* autosize.destroy(elements)
+
+* Renamed custom events as to not use jQuery's custom events namespace:
+
+	* autosize.resized renamed to autosize:resized
+	* autosize.update renamed to autosize:update
+	* autosize.destroy renamed to autosize:destroy
+
+##### v.2.0.1 - 2015-04-15
+* Version bump for NPM publishing purposes
+
+##### v.2.0.0 - 2015-02-25
+
+* Smaller, simplier code-base
+* New API.  Example usage: `autosize(document.querySelectorAll(textarea));`
+* Dropped jQuery dependency
+* Dropped IE7-IE8 support
+* Dropped optional parameters
+* Closes #98, closes #106, closes #123, fixes #129, fixes #132, fixes #139, closes #140, closes #166, closes #168, closes #192, closes #193, closes #197
\ No newline at end of file
diff --git a/dist/autosize.js b/dist/autosize.js
new file mode 100644
index 0000000..cfa49e7
--- /dev/null
+++ b/dist/autosize.js
@@ -0,0 +1,243 @@
+/*!
+	Autosize 3.0.14
+	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);
+			} };
+	})();
+
+	function assign(ta) {
+		var _ref = arguments[1] === undefined ? {} : arguments[1];
+
+		var _ref$setOverflowX = _ref.setOverflowX;
+		var setOverflowX = _ref$setOverflowX === undefined ? true : _ref$setOverflowX;
+		var _ref$setOverflowY = _ref.setOverflowY;
+		var setOverflowY = _ref$setOverflowY === undefined ? true : _ref$setOverflowY;
+
+		if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || set.has(ta)) return;
+
+		var heightOffset = null;
+		var overflowY = null;
+		var 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;
+			var bodyTop = document.body.scrollTop;
+			var 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 = document.createEvent('Event');
+				evt.initEvent('autosize:resized', true, false);
+				ta.dispatchEvent(evt);
+			}
+		}
+
+		var pageResize = function pageResize() {
+			if (ta.clientWidth !== clientWidth) {
+				update();
+			}
+		};
+
+		var 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 = document.createEvent('Event');
+		evt.initEvent('autosize:destroy', true, false);
+		ta.dispatchEvent(evt);
+	}
+
+	function update(ta) {
+		if (!(ta && ta.nodeName && ta.nodeName === 'TEXTAREA')) return;
+		var evt = document.createEvent('Event');
+		evt.initEvent('autosize:update', true, false);
+		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;
+});
\ No newline at end of file
diff --git a/example/index.html b/example/index.html
new file mode 100644
index 0000000..fdcdba1
--- /dev/null
+++ b/example/index.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset='utf-8'/>
+		<title>Simple Autosize for textareas</title>
+		<style>
+			textarea {
+				padding: 10px;
+				vertical-align: top;
+				width: 200px;
+			}
+			textarea:focus {
+				outline-style: solid;
+				outline-width: 2px;
+			}
+		</style>
+	</head>
+	<body>
+		<h3>max-height 300px</h3>
+		<textarea style='max-height: 300px'>The coconut palm (also, cocoanut), Cocos nucifera, is a member of the family Arecaceae (palm family). It is the only accepted species in the genus Cocos.[2] The term coconut can refer to the entire coconut palm, the seed, or the fruit, which, botanically, is a drupe, not a nut. The spelling cocoanut is an archaic form of the word.[3] The term is derived from 16th-century Portuguese and Spanish coco, meaning "head" or "skull",[4] from the three small  [...]
+
+		<h3>no max-height</h3>
+		<textarea>The coconut palm (also, cocoanut), Cocos nucifera, is a member of the family Arecaceae (palm family). It is the only accepted species in the genus Cocos.[2] The term coconut can refer to the entire coconut palm, the seed, or the fruit, which, botanically, is a drupe, not a nut. The spelling cocoanut is an archaic form of the word.[3] The term is derived from 16th-century Portuguese and Spanish coco, meaning "head" or "skull",[4] from the three small holes on the coconut shell [...]
+	</body>
+	<script src='../dist/autosize.js'></script>
+	<script>
+		autosize(document.querySelectorAll('textarea'));
+	</script>
+</html>
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..bd6aded
--- /dev/null
+++ b/package.json
@@ -0,0 +1,45 @@
+{
+  "name": "autosize",
+  "description": "Autosize is a small, stand-alone script to automatically adjust textarea height to fit text.",
+  "version": "3.0.14",
+  "keywords": [
+    "textarea",
+    "form",
+    "ui"
+  ],
+  "author": {
+    "name": "Jack Moore",
+    "url": "http://www.jacklmoore.com",
+    "email": "hello at jacklmoore.com"
+  },
+  "main": "dist/autosize.js",
+  "license": "MIT",
+  "homepage": "http://www.jacklmoore.com/autosize",
+  "demo": "http://www.jacklmoore.com/autosize",
+  "repository": {
+    "type": "git",
+    "url": "http://github.com/jackmoore/autosize.git"
+  },
+  "dependencies": {},
+  "devDependencies": {
+    "babel": "^5.4.3",
+    "gaze": "^0.5.1",
+    "jshint": "^2.5.6",
+    "uglify-js": "^2.4.22"
+  },
+  "config": {
+    "bower": {
+      "name": "autosize",
+      "ignore": [],
+      "moduleType": [
+        "amd",
+        "node"
+      ]
+    },
+    "title": "Autosize",
+    "filename": "autosize"
+  },
+  "scripts": {
+    "build": "node build"
+  }
+}
diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000..c34e6df
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,39 @@
+## Summary
+
+Autosize is a small, stand-alone script to automatically adjust textarea height to fit text.
+
+#### Demo
+
+Full documentation and a demo can be found at [jacklmoore.com/autosize](http://jacklmoore.com/autosize)
+
+#### Install via NPM
+```bash
+npm install autosize
+```
+#### Install via Bower
+```bash
+bower install autosize
+```
+
+#### Browser compatibility
+
+Chrome | Firefox | IE | Safari | iOS Safari | Android | Opera Mini | Windows Phone IE
+------ | --------|----|--------|------------|---------|------------|------------------
+yes    | yes     | 9  | yes    | yes        | 4       | ?          | 8.1
+
+#### Usage
+
+The autosize function accepts a single textarea element, or an array or array-like object (such as a NodeList or jQuery collection) of textarea elements.
+
+```javascript
+// from a NodeList
+autosize(document.querySelectorAll('textarea'));
+
+// from a single Node
+autosize(document.querySelector('textarea'));
+
+// from a jQuery collection
+autosize($('textarea'));
+```
+
+Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php)
diff --git a/src/autosize.js b/src/autosize.js
new file mode 100644
index 0000000..c02f4cf
--- /dev/null
+++ b/src/autosize.js
@@ -0,0 +1,209 @@
+const set = (typeof Set === "function") ? new Set() : (function () {
+	const list = [];
+
+	return {
+		has(key) {
+			return Boolean(list.indexOf(key) > -1);
+		},
+		add(key) {
+			list.push(key);
+		},
+		delete(key) {
+			list.splice(list.indexOf(key), 1);
+		},
+	}
+})();
+
+function assign(ta, {setOverflowX = true, setOverflowY = true} = {}) {
+	if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || set.has(ta)) return;
+
+	let heightOffset = null;
+	let overflowY = null;
+	let clientWidth = ta.clientWidth;
+
+	function init() {
+		const 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.
+			const 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() {
+		const htmlTop = window.pageYOffset;
+		const bodyTop = document.body.scrollTop;
+		const originalHeight = ta.style.height;
+
+		ta.style.height = 'auto';
+
+		let 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() {
+		const startHeight = ta.style.height;
+
+		resize();
+
+		const 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) {
+			const evt = document.createEvent('Event');
+			evt.initEvent('autosize:resized', true, false);
+			ta.dispatchEvent(evt);
+		}
+	}
+
+	const pageResize = () => {
+		if (ta.clientWidth !== clientWidth) {
+			update();
+		}
+	};
+
+	const destroy = 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(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;
+	const evt = document.createEvent('Event');
+	evt.initEvent('autosize:destroy', true, false);
+	ta.dispatchEvent(evt);
+}
+
+function update(ta) {
+	if (!(ta && ta.nodeName && ta.nodeName === 'TEXTAREA')) return;
+	const evt = document.createEvent('Event');
+	evt.initEvent('autosize:update', true, false);
+	ta.dispatchEvent(evt);
+}
+
+let autosize = null;
+
+// Do nothing in Node.js environment and IE8 (or lower)
+if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {
+	autosize = el => el;
+	autosize.destroy = el => el;
+	autosize.update = el => el;
+} else {
+	autosize = (el, options) => {
+		if (el) {
+			Array.prototype.forEach.call(el.length ? el : [el], x => assign(x, options));
+		}
+		return el;
+	};
+	autosize.destroy = el => {
+		if (el) {
+			Array.prototype.forEach.call(el.length ? el : [el], destroy);
+		}
+		return el;
+	};
+	autosize.update = el => {
+		if (el) {
+			Array.prototype.forEach.call(el.length ? el : [el], update);
+		}
+		return el;
+	};
+}
+
+export default autosize;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/autosize.js.git



More information about the Pkg-javascript-commits mailing list