src/web/app/themes/atahualpa/options/UvumiTextarea-compressed.js
author ymh <ymh.work@gmail.com>
Fri, 06 Dec 2019 00:53:05 +0100
changeset 3 5301eb6ce6e2
parent 0 505fe5249d9c
permissions -rw-r--r--
add missing files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
/*
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
UvumiTools TextArea v1.1.0 http://tools.uvumi.com/textarea.html
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
Copyright (c) 2008 Uvumi LLC
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
Permission is hereby granted, free of charge, to any person
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
obtaining a copy of this software and associated documentation
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
files (the "Software"), to deal in the Software without
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
restriction, including without limitation the rights to use,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
copy, modify, merge, publish, distribute, sublicense, and/or sell
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
copies of the Software, and to permit persons to whom the
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
Software is furnished to do so, subject to the following
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
conditions:
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
The above copyright notice and this permission notice shall be
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
included in all copies or substantial portions of the Software.
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
OTHER DEALINGS IN THE SOFTWARE.
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
*/
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
var UvumiTextarea=Class({Implements:Options,options:{selector:'textarea',maxChar:1000,resizeDuration:250,minSize:false,catchTab:true,classPrefix:'tb'},initialize:function(a){this.setOptions(a);this.tbDummies=[];this.tbCounters=[];this.tbProgress=[];this.tbProgressBar=[];window.addEvent('domready',this.domReady.bind(this))},domReady:function(){if($(this.options.selector)){this.options.selector=$(this.options.selector)}this.textareas=$$(this.options.selector);this.textareas.each(this.buildProgress,this);if(this.options.maxChar){this.tbProgressEffects=new Fx.Elements(this.tbProgressBar,{duration:'short',link:'cancel'})}this.tbEffects=new Fx.Elements(this.textareas,{duration:this.options.resizeDuration,link:'cancel'});this.textareas.each(function(a,i){var b=a.get('value');this.previousLength=b.length;if(this.options.maxChar){if(this.previousLength>this.options.maxChar){b=b.substring(0,this.options.maxChar);this.previousLength=b.length;a.set('value',b)}var c=this.options.maxChar-this.previousLength;var d=(c*this.tbProgress[i].getSize().x/this.options.maxChar).toInt();this.tbProgressBar[i].setStyle('width',d);if(!c){var e='No character left'}else if(c==1){var e='1 character left'}else{var e=c+' characters left'}this.tbCounters[i].set('text',e)}this.tbDummies[i].set('value',b);var f=(this.tbDummies[i].getScrollSize().y>this.options.minSize?this.tbDummies[i].getScrollSize().y:this.options.minSize);if(this.tbDummies[i].retrieve('height')!=f){this.tbDummies[i].store('height',f);a.setStyle('height',f)}},this)},buildProgress:function(a,i){a.setStyle('overflow','hidden');if(!this.options.minSize){this.options.minSize=a.getSize().y}this.tbDummies[i]=a.clone().setStyles({'width':a.getStyle('width').toInt(),'position':'absolute','top':0,'height':this.options.minSize,'left':-3000}).store('height',0).inject($(document.body));a.addEvents({'keydown':this.onKeyPress.bindWithEvent(this,[i,this.options.catchTab]),'keyup':this.onKeyPress.bindWithEvent(this,i),'focus':this.startObserver.bind(this,i),'blur':this.stopObserver.bind(this)});if(this.options.maxChar){this.tbProgress[i]=new Element('div',{'class':this.options.classPrefix+'Progress','styles':{'position':'relative','overflow':'hidden','display':'block','position':'relative','width':a.getSize().x-1,'margin':'5px 0 5px '+a.getPosition(a.getParent()).x+'px'}}).inject(a,'after');this.tbProgressBar[i]=new Element('div',{'class':this.options.classPrefix+'ProgressBar','styles':{'position':'absolute','top':0,'left':0,'height':'100%','width':'100%'}}).inject(this.tbProgress[i]);this.tbCounters[i]=new Element('div',{'class':this.options.classPrefix+'Counter','styles':{'position':'absolute','top':0,'left':0,'height':'100%','width':'100%','text-align':'center'}}).inject(this.tbProgress[i]);this.update=this.updateCounter}else{this.update=this.updateNoCounter}},onKeyPress:function(a,i,b){if(b&&a.key=="tab"){a.preventDefault();this.insertTab(i)}if(!a.shift&&!a.control&&!a.alt&&!a.meta){this.update(i)}this.startObserver(i)},startObserver:function(i){$clear(this.observer);this.observer=this.observe.periodical(500,this,i)},stopObserver:function(){$clear(this.observer)},observe:function(i){if(this.textareas[i].get('value').length!=this.previousLength){this.previousLength=this.textareas[i].get('value').length;this.update(i)}},updateCounter:function(i){var a=this.textareas[i].get('value');if(a.length>this.options.maxChar){a=a.substring(0,this.options.maxChar);this.textareas[i].set('value',a)}this.previousLength=a.length;var b=this.options.maxChar-this.previousLength;var c=(b*this.tbProgress[i].getSize().x/this.options.maxChar).toInt();var d={};d[i]={'width':c};this.tbProgressEffects.start(d);if(b==0){var e='No character left';this.tbProgress[i].highlight("#f66")}else if(b==1){var e='1 character left'}else{var e=b+' characters left'}this.tbCounters[i].set('text',e);this.updateHeight(i,a)},updateNoCounter:function(i){var a=this.textareas[i].get('value');this.previousLength=a.length;this.updateHeight(i,a)},updateHeight:function(i,a){this.tbDummies[i].set('value',a);var b=(this.tbDummies[i].getScrollSize().y>this.options.minSize?this.tbDummies[i].getScrollSize().y:this.options.minSize);if(this.tbDummies[i].retrieve('height')!=b){this.tbDummies[i].store('height',b);effect={};effect[i]={'height':b};this.tbEffects.start(effect)}},insertTab:function(i){if(Browser.Engine.trident){var a=document.selection.createRange();a.text="\t"}else{var b=this.textareas[i].selectionStart;var c=this.textareas[i].selectionEnd;var d=this.textareas[i].get('value');this.textareas[i].set('value',d.substring(0,b)+"\t"+d.substring(c,d.length));b++;this.textareas[i].setSelectionRange(b,b)}}});