| 
									
										
										
										
											2023-09-27 15:05:34 +03:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | **********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | HTMLTextAreaElement.prototype.updateSize = function(){ | 
					
						
							|  |  |  | 	this.style.height = '' | 
					
						
							|  |  |  | 	this.style.height = this.scrollHeight + 'px'  | 
					
						
							|  |  |  | 	return this } | 
					
						
							|  |  |  | HTMLTextAreaElement.prototype.autoUpdateSize = function(){ | 
					
						
							|  |  |  | 	var that = this | 
					
						
							|  |  |  | 	this.addEventListener('input',  | 
					
						
							|  |  |  | 		function(evt){ | 
					
						
							|  |  |  | 			that.updateSize() })  | 
					
						
							|  |  |  | 	return this } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-07 07:04:58 +03:00
										 |  |  | // calculate number of lines in text area (both wrapped and actual lines)
 | 
					
						
							|  |  |  | Object.defineProperty(HTMLTextAreaElement.prototype, 'heightLines', { | 
					
						
							|  |  |  | 	enumerable: false, | 
					
						
							|  |  |  | 	get: function(){ | 
					
						
							|  |  |  | 		var style = getComputedStyle(this) | 
					
						
							|  |  |  | 		return Math.floor( | 
					
						
							|  |  |  | 			(this.scrollHeight  | 
					
						
							|  |  |  | 				- parseFloat(style.paddingTop) | 
					
						
							|  |  |  | 				- parseFloat(style.paddingBottom))  | 
					
						
							|  |  |  | 			/ (parseFloat(style.lineHeight)  | 
					
						
							|  |  |  | 				|| parseFloat(style.fontSize))) }, }) | 
					
						
							|  |  |  | Object.defineProperty(HTMLTextAreaElement.prototype, 'lines', { | 
					
						
							|  |  |  | 	enumerable: false, | 
					
						
							|  |  |  | 	get: function(){ | 
					
						
							|  |  |  | 		return this.value | 
					
						
							|  |  |  | 			.split(/\n/g) | 
					
						
							|  |  |  | 			.length }, }) | 
					
						
							|  |  |  | // XXX this does not account for wrapping...
 | 
					
						
							| 
									
										
										
										
											2023-09-28 20:49:06 +03:00
										 |  |  | Object.defineProperty(HTMLTextAreaElement.prototype, 'caretLine', { | 
					
						
							|  |  |  | 	enumerable: false, | 
					
						
							|  |  |  | 	get: function(){ | 
					
						
							|  |  |  | 		var offset = this.selectionStart | 
					
						
							|  |  |  | 		return offset != null ? | 
					
						
							|  |  |  | 			this.value | 
					
						
							|  |  |  | 				.slice(0, offset) | 
					
						
							|  |  |  | 				.split(/\n/g) | 
					
						
							|  |  |  | 				.length | 
					
						
							| 
									
										
										
										
											2023-10-07 07:04:58 +03:00
										 |  |  | 			: undefined }, }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Object.defineProperty(HTMLTextAreaElement.prototype, 'caretOffset', { | 
					
						
							|  |  |  | 	enumerable: false, | 
					
						
							|  |  |  | 	get: function(){ | 
					
						
							|  |  |  | 		var offset = this.selectionStart | 
					
						
							|  |  |  | 		var r = document.createRange() | 
					
						
							|  |  |  | 		r.setStart(this, offset) | 
					
						
							|  |  |  | 		r.setEnd(this, offset) | 
					
						
							|  |  |  | 		var rect = r.getBoundingClientRect() | 
					
						
							|  |  |  | 		return { | 
					
						
							|  |  |  | 			top: rect.top,  | 
					
						
							|  |  |  | 			left: rect.left, | 
					
						
							|  |  |  | 		} }, | 
					
						
							| 
									
										
										
										
											2023-09-28 20:49:06 +03:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-27 15:05:34 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-27 15:41:29 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-07 07:04:58 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-27 15:05:34 +03:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | * vim:set ts=4 sw=4 :                                                */ |