2010-11-15 08:39:52 +01:00
|
|
|
/*
|
2011-11-08 17:40:44 +01:00
|
|
|
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
|
2010-11-15 08:39:52 +01:00
|
|
|
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
|
|
|
see: http://dojotoolkit.org/license for details
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
2011-11-08 17:40:44 +01:00
|
|
|
if(!dojo._hasResource["dijit.form.SimpleTextarea"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
|
|
|
|
dojo._hasResource["dijit.form.SimpleTextarea"] = true;
|
2010-11-15 08:39:52 +01:00
|
|
|
dojo.provide("dijit.form.SimpleTextarea");
|
|
|
|
dojo.require("dijit.form.TextBox");
|
2011-11-08 17:40:44 +01:00
|
|
|
|
|
|
|
|
|
|
|
dojo.declare("dijit.form.SimpleTextarea",
|
|
|
|
dijit.form.TextBox,
|
|
|
|
{
|
|
|
|
// summary:
|
|
|
|
// A simple textarea that degrades, and responds to
|
|
|
|
// minimal LayoutContainer usage, and works with dijit.form.Form.
|
|
|
|
// Doesn't automatically size according to input, like Textarea.
|
|
|
|
//
|
|
|
|
// example:
|
|
|
|
// | <textarea dojoType="dijit.form.SimpleTextarea" name="foo" value="bar" rows=30 cols=40></textarea>
|
|
|
|
//
|
|
|
|
// example:
|
|
|
|
// | new dijit.form.SimpleTextarea({ rows:20, cols:30 }, "foo");
|
|
|
|
|
|
|
|
baseClass: "dijitTextBox dijitTextArea",
|
|
|
|
|
|
|
|
attributeMap: dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap, {
|
|
|
|
rows:"textbox", cols: "textbox"
|
|
|
|
}),
|
|
|
|
|
|
|
|
// rows: Number
|
|
|
|
// The number of rows of text.
|
|
|
|
rows: "3",
|
|
|
|
|
|
|
|
// rows: Number
|
|
|
|
// The number of characters per line.
|
|
|
|
cols: "20",
|
|
|
|
|
|
|
|
templateString: "<textarea ${!nameAttrSetting} dojoAttachPoint='focusNode,containerNode,textbox' autocomplete='off'></textarea>",
|
|
|
|
|
|
|
|
postMixInProperties: function(){
|
|
|
|
// Copy value from srcNodeRef, unless user specified a value explicitly (or there is no srcNodeRef)
|
|
|
|
// TODO: parser will handle this in 2.0
|
|
|
|
if(!this.value && this.srcNodeRef){
|
|
|
|
this.value = this.srcNodeRef.value;
|
|
|
|
}
|
|
|
|
this.inherited(arguments);
|
|
|
|
},
|
|
|
|
|
|
|
|
buildRendering: function(){
|
|
|
|
this.inherited(arguments);
|
|
|
|
if(dojo.isIE && this.cols){ // attribute selectors is not supported in IE6
|
|
|
|
dojo.addClass(this.textbox, "dijitTextAreaCols");
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
filter: function(/*String*/ value){
|
|
|
|
// Override TextBox.filter to deal with newlines... specifically (IIRC) this is for IE which writes newlines
|
|
|
|
// as \r\n instead of just \n
|
|
|
|
if(value){
|
|
|
|
value = value.replace(/\r/g,"");
|
|
|
|
}
|
|
|
|
return this.inherited(arguments);
|
|
|
|
},
|
|
|
|
|
|
|
|
_previousValue: "",
|
|
|
|
_onInput: function(/*Event?*/ e){
|
|
|
|
// Override TextBox._onInput() to enforce maxLength restriction
|
|
|
|
if(this.maxLength){
|
|
|
|
var maxLength = parseInt(this.maxLength);
|
|
|
|
var value = this.textbox.value.replace(/\r/g,'');
|
|
|
|
var overflow = value.length - maxLength;
|
|
|
|
if(overflow > 0){
|
|
|
|
if(e){ dojo.stopEvent(e); }
|
|
|
|
var textarea = this.textbox;
|
|
|
|
if(textarea.selectionStart){
|
|
|
|
var pos = textarea.selectionStart;
|
|
|
|
var cr = 0;
|
|
|
|
if(dojo.isOpera){
|
|
|
|
cr = (this.textbox.value.substring(0,pos).match(/\r/g) || []).length;
|
|
|
|
}
|
|
|
|
this.textbox.value = value.substring(0,pos-overflow-cr)+value.substring(pos-cr);
|
|
|
|
textarea.setSelectionRange(pos-overflow, pos-overflow);
|
|
|
|
}else if(dojo.doc.selection){ //IE
|
|
|
|
textarea.focus();
|
|
|
|
var range = dojo.doc.selection.createRange();
|
|
|
|
// delete overflow characters
|
|
|
|
range.moveStart("character", -overflow);
|
|
|
|
range.text = '';
|
|
|
|
// show cursor
|
|
|
|
range.select();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
this._previousValue = this.textbox.value;
|
|
|
|
}
|
|
|
|
this.inherited(arguments);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2010-11-15 08:39:52 +01:00
|
|
|
}
|