added resizable textareas

This commit is contained in:
JT Smith 2006-04-19 19:08:56 +00:00
parent 04911c04e9
commit 722a214f80
13 changed files with 278 additions and 72 deletions

View file

@ -102,6 +102,7 @@
- added [ 881817 ] allowed characters in username
- added [ 1231386 ] Insert WebGUI Image
- added [ 1205807 ] ability to report file size in File template
- added [ 1201811 ] resizable textAreas
- added [ 1376374 ] WebGUI should return a Last-Modified http/1.x header
- fix [ 1178981 ] IE is in "quirks mode" - multi-column layout templates
break

View file

@ -51,9 +51,17 @@ addRichEditUpload();
updateArticle();
updateScratch();
installSQLForm();
addResizableTextareas();
finish($session); # this line required
#-------------------------------------------------
sub addResizableTextareas {
print "\tAllowing user to resize text areas on the fly.\n";
$session->setting->remove("textAreaCols");
$session->setting->remove("textAreaRows");
}
#-------------------------------------------------
sub updateScratch {
print "\tIncreasing size of scratch variables.\n";

View file

@ -443,6 +443,7 @@ sub getRichEditor {
auto_reset_designmode => "true",
cleanup_callback => "tinyMCE_WebGUI_Cleanup",
urlconvertor_callback => "tinyMCE_WebGUI_URLConvertor",
theme_advanced_resizing => "true",
theme_advanced_buttons1 => join(",",@toolbarRow1),
theme_advanced_buttons2 => join(",",@toolbarRow2),
theme_advanced_buttons3 => join(",",@toolbarRow3),
@ -454,6 +455,7 @@ sub getRichEditor {
nowrap => $self->getValue("nowrap") ? "true" : "false",
directionality => $self->getValue("directionality"),
theme_advanced_toolbar_location => $self->getValue("toolbarLocation"),
theme_advanced_statusbar_location => "bottom",
valid_elements => $self->getValue("validElements"),
);
foreach my $button (@toolbarButtons) {

View file

@ -45,6 +45,18 @@ See the super class for additional details.
=head3 additionalTerms
=head4 width
The width of this control in pixels. Defaults to 550 pixels.
=head4 height
The height of this control in pixels. Defaults to 450 pixels.
=head4 style
Style attributes besides width and height which should be specified using the above parameters. Be sure to escape quotes if you use any.
The following additional parameters have been added via this sub class.
=head4 profileEnabled
@ -62,6 +74,15 @@ sub definition {
formName=>{
defaultValue=>$i18n->get("codearea")
},
height=>{
defaultValue=> 450
},
width=>{
defaultValue=> 550
},
style=>{
defaultValue => undef,
},
profileEnabled=>{
defaultValue=>1
}
@ -80,7 +101,7 @@ Renders a code area field.
sub toHtml {
my $self = shift;
$self->session->style->setScript($self->session->config->get("extrasURL").'/TabFix.js',{type=>"text/javascript"});
$self->set("extras", $self->get('extras') . ' style="width: 600px; height: 400px" onkeypress="return TabFix_keyPress(event)" onkeydown="return TabFix_keyDown(event)"');
$self->set("extras", $self->get('extras').' onkeypress="return TabFix_keyPress(event)" onkeydown="return TabFix_keyDown(event)"');
return $self->SUPER::toHtml;
}

View file

@ -213,7 +213,7 @@ sub toHtml {
foreach my $file (@{$storage->getFiles}) {
if ($self->get("deleteFileUrl")) {
$uploadControl .= '<p style="display:inline;vertical-align:middle;"><a href="'.$self->get("deleteFileUrl").$file.'">'
.'<img src="'.$self->session->icon->_getBaseURL().'delete.gif" style="vertical-align:middle;border: 0px;" alt="x" /></a></p> ';
.'<img src="'.$self->session->icon->getBaseURL().'delete.gif" style="vertical-align:middle;border: 0px;" alt="x" /></a></p> ';
}
$uploadControl .= '<p style="display:inline;vertical-align:middle;"><a href="'.$storage->getUrl($file).'">'
.'<img src="'.$storage->getFileIconUrl($file).'" style="vertical-align:middle;border: 0px;" alt="'

View file

@ -49,13 +49,17 @@ See the super class for additional details.
The following additional parameters have been added via this sub class.
=head4 rows
=head4 width
The number of rows (in characters) tall the box should be. Defaults to the setting textAreaRows + 20.
The width of this control in pixels. Defaults to 500 pixels.
=head4 columns
=head4 height
The number of columns (in characters) wide the box should be. Defaults to the setting textAreaCols + 10.
The height of this control in pixels. Defaults to 400 pixels.
=head4 style
Style attributes besides width and height which should be specified using the above parameters. Be sure to escape quotes if you use any.
=head4 richEditId
@ -76,12 +80,15 @@ sub definition {
formName=>{
defaultValue=>$i18n->get("477")
},
rows=>{
defaultValue=> $session->setting->get("textAreaRows")+20
},
columns=>{
defaultValue=> $session->setting->get("textAreaCols")+10
},
height=>{
defaultValue=> 400
},
width=>{
defaultValue=> 500
},
style=>{
defaultValue => undef,
},
richEditId=>{
defaultValue=>$session->setting->get("richEditor") || "PBrichedit000000000001"
},
@ -118,6 +125,7 @@ sub toHtml {
my $self = shift;
$self->session->style->setScript($self->session->config->get("extrasURL").'/textFix.js',{ type=>'text/javascript' });
$self->set("extras", $self->get('extras') . ' onblur="fixChars(this.form.'.$self->get("name").')" mce_editable="true" ');
$self->set("resizeable", 0);
return $self->SUPER::toHtml.WebGUI::Asset::RichEdit->new($self->session,$self->get("richEditId"))->getRichEditor($self->get('id'));
my $i18n = WebGUI::International->new($self->session);
my $richEdit = WebGUI::Asset::RichEdit->new($self->session,$self->get("richEditId"));

View file

@ -186,7 +186,7 @@ sub toHtml {
foreach my $file (@{$storage->getFiles}) {
if ($self->get("deleteFileUrl")) {
$uploadControl .= '<p style="display:inline;vertical-align:middle;"><a href="'.$self->get("deleteFileUrl").$file.'">'
.'<img src="'.$self->session->icon->_getBaseURL().'delete.gif" style="vertical-align:middle;border: 0px;" alt="x" /></a></p> ';
.'<img src="'.$self->session->icon->getBaseURL().'delete.gif" style="vertical-align:middle;border: 0px;" alt="x" /></a></p> ';
}
my $image = $storage->isImage($file) ? $storage->getThumbnailUrl($file) : $storage->getFileIconUrl($file);
$uploadControl .= '<p style="display:inline;vertical-align:middle;"><a href="'.$storage->getUrl($file).'">'

View file

@ -46,18 +46,26 @@ See the super class for additional details.
The following additional parameters have been added via this sub class.
=head4 rows
=head4 width
The number of rows (in characters) tall the box should be. Defaults to the setting textAreaRows or 5 if that's not specified.
The width of this control in pixels. Defaults to 400 pixels.
=head4 columns
=head4 height
The number of columns (in characters) wide the box should be. Defaults to the setting textAreaCols or 50 if that's not specified.
The height of this control in pixels. Defaults to 150 pixels.
=head4 style
Style attributes besides width and height which should be specified using the above parameters. Be sure to escape quotes if you use any.
=head4 profileEnabled
Flag that tells the User Profile system that this is a valid form element in a User Profile
=head4 resizeable
A boolean indicating whether the text area can be reized by users. Defaults to 1.
=cut
sub definition {
@ -69,11 +77,17 @@ sub definition {
formName=>{
defaultValue=>$i18n->get("476")
},
rows=>{
defaultValue=> $session->setting->get("textAreaRows") || 5
height=>{
defaultValue=> 150
},
columns=>{
defaultValue=> $session->setting->get("textAreaCols") || 50
width=>{
defaultValue=> 400
},
style=>{
defaultValue => undef,
},
resizeable => {
defaultValue => 1,
},
profileEnabled=>{
defaultValue=>1
@ -92,8 +106,15 @@ Renders an input tag of type text.
sub toHtml {
my $self = shift;
my $resize = undef;
if ($self->get("resizeable")) {
my $i18n = WebGUI::International->new($self->session, "Form_Textarea");
$self->session->style->setScript($self->session->config->get("extrasURL")."/resizeable_textarea.js", {type=>"text/javascript"});
$resize = '<img src="'.$self->session->icon->getBaseURL().'/drag.gif" title="'.$i18n->get("drag to resize").'" alt="'.$i18n->get("drag to resize").'" class="draggable" onmousedown="tar_drag_start(event, \''.$self->get('id').'\');" />';
}
my $value = $self->fixMacros($self->fixTags($self->fixSpecialCharacters($self->get("value"))));
return '<textarea id="'.$self->get('id').'" name="'.$self->get("name").'" cols="'.$self->get("columns").'" rows="'.$self->get("rows").'" '.$self->get("extras").'>'.$value.'</textarea>';
my $style = "width: ".$self->get('width')."px; height: ".$self->get('height')."px; ".$self->get("style");
return '<textarea id="'.$self->get('id').'" name="'.$self->get("name").'" style="'.$style.'" '.$self->get("extras").'>'.$value.'</textarea>'.$resize;
}

View file

@ -135,18 +135,6 @@ sub www_editSettings {
-options=>WebGUI::Asset::RichEdit->getList($session),
-defaultValue=>["PBrichedit000000000001"]
);
$tabform->getTab("ui")->integer(
-name=>"textAreaRows",
-label=>$i18n->get(463),
-hoverHelp=>$i18n->get('463 description'),
-value=>$session->setting->get("textAreaRows")
);
$tabform->getTab("ui")->integer(
-name=>"textAreaCols",
-label=>$i18n->get(464),
-hoverHelp=>$i18n->get('464 description'),
-value=>$session->setting->get("textAreaCols")
);
$tabform->getTab("ui")->integer(
-name=>"textBoxSize",
-label=>$i18n->get(465),

View file

@ -54,13 +54,13 @@ These subroutines are available from this package:
#-------------------------------------------------------------------
=head2 _getBaseURL ( )
=head2 getBaseURL ( )
Returns the base URL for this user's toolbar icon set.
=cut
sub _getBaseURL {
sub getBaseURL {
my $self = shift;
my $url = $self->session->config->get("extrasURL").'/toolbar/';
if ($self->session->user->profileField("toolbar") ne "useLanguageDefault") {
@ -95,7 +95,7 @@ sub copy {
my $pageURL = shift || $self->session->url->getRequestedUrl;
my $i18n = WebGUI::International->new($self->session,'Icon');
my $output = '<p style="display:inline;vertical-align:middle;"><a href="'.$self->session->url->gateway($pageURL,$urlParams).'">';
$output .= '<img src="'.$self->_getBaseURL().'copy.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Copy').'" title="'.$i18n->get('Copy').'" /></a></p>';
$output .= '<img src="'.$self->getBaseURL().'copy.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Copy').'" title="'.$i18n->get('Copy').'" /></a></p>';
return $output;
}
@ -121,7 +121,7 @@ sub cut {
my $pageURL = shift || $self->session->url->getRequestedUrl;
my $i18n = WebGUI::International->new($self->session,'Icon');
my $output = '<p style="display:inline;vertical-align:middle;"><a href="'.$self->session->url->gateway($pageURL,$urlParams).'">';
$output .= '<img src="'.$self->_getBaseURL().'cut.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Cut').'" title="'.$i18n->get('Cut').'" /></a></p>';
$output .= '<img src="'.$self->getBaseURL().'cut.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Cut').'" title="'.$i18n->get('Cut').'" /></a></p>';
return $output;
}
@ -169,7 +169,7 @@ sub delete {
}
my $i18n = WebGUI::International->new($self->session,'Icon');
my $output = '<p style="display:inline;vertical-align:middle;"><a href="'.$self->session->url->gateway($pageURL,$urlParams).'" '.$confirmText.'>';
$output .= '<img src="'.$self->_getBaseURL().'delete.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Delete').'" title="'.$i18n->get('Delete').'" /></a></p>';
$output .= '<img src="'.$self->getBaseURL().'delete.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Delete').'" title="'.$i18n->get('Delete').'" /></a></p>';
return $output;
}
@ -184,7 +184,7 @@ Generates an icon that can be used to drag content.
sub drag {
my $self = shift;
my $i18n = WebGUI::International->new($self->session,'Icon');
return '<p style="display:inline;vertical-align:middle;"><img id="dragTrigger" class="dragTrigger" src="'.$self->_getBaseURL().'drag.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Drag').'" title="'.$i18n->get('Drag').'" /></p>';
return '<p style="display:inline;vertical-align:middle;"><img id="dragTrigger" class="dragTrigger" src="'.$self->getBaseURL().'drag.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Drag').'" title="'.$i18n->get('Drag').'" /></p>';
}
#-------------------------------------------------------------------
@ -209,7 +209,7 @@ sub edit {
my $pageURL = shift || $self->session->url->getRequestedUrl;
my $i18n = WebGUI::International->new($self->session,'Icon');
my $output = '<p style="display:inline;vertical-align:middle;"><a href="'.$self->session->url->gateway($pageURL,$urlParams).'">';
$output .= '<img src="'.$self->_getBaseURL().'edit.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Edit').'" title="'.$i18n->get('Edit').'" /></a></p>';
$output .= '<img src="'.$self->getBaseURL().'edit.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Edit').'" title="'.$i18n->get('Edit').'" /></a></p>';
return $output;
}
@ -235,7 +235,7 @@ sub export {
my $pageURL = shift || $self->session->url->getRequestedUrl;
my $i18n = WebGUI::International->new($self->session,'Icon');
my $output = '<p style="display:inline;vertical-align:middle;"><a href="'.$self->session->url->gateway($pageURL,$urlParams).'">';
$output .= '<img src="'.$self->_getBaseURL().'export.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Export').'" title="'.$i18n->get('Export').'" /></a></p>';
$output .= '<img src="'.$self->getBaseURL().'export.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Export').'" title="'.$i18n->get('Export').'" /></a></p>';
return $output;
}
@ -286,7 +286,7 @@ sub locked {
my $pageURL = shift || $self->session->url->getRequestedUrl;
my $i18n = WebGUI::International->new($self->session,'Icon');
my $output = '<p style="display:inline;vertical-align:middle;"><a href="'.$self->session->url->gateway($pageURL,$urlParams).'">';
$output .= '<img src="'.$self->_getBaseURL().'locked.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('locked').'" title="'.$i18n->get('locked').'" /></a></p>';
$output .= '<img src="'.$self->getBaseURL().'locked.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('locked').'" title="'.$i18n->get('locked').'" /></a></p>';
return $output;
}
@ -312,7 +312,7 @@ sub manage {
my $pageURL = shift || $self->session->url->getRequestedUrl;
my $i18n = WebGUI::International->new($self->session,'Icon');
my $output = '<p style="display:inline;vertical-align:middle;"><a href="'.$self->session->url->gateway($pageURL,$urlParams).'">';
$output .= '<img src="'.$self->_getBaseURL().'manage.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Manage').'" title="'.$i18n->get('Manage').'" /></a></p>';
$output .= '<img src="'.$self->getBaseURL().'manage.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Manage').'" title="'.$i18n->get('Manage').'" /></a></p>';
return $output;
}
@ -338,7 +338,7 @@ sub moveBottom {
my $pageURL = shift || $self->session->url->getRequestedUrl;
my $i18n = WebGUI::International->new($self->session,'Icon');
my $output = '<p style="display:inline;vertical-align:middle;"><a href="'.$self->session->url->gateway($pageURL,$urlParams).'">';
$output .= '<img src="'.$self->_getBaseURL().'moveBottom.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Move To Bottom').'" title="'.$i18n->get('Move To Bottom').'" /></a></p>';
$output .= '<img src="'.$self->getBaseURL().'moveBottom.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Move To Bottom').'" title="'.$i18n->get('Move To Bottom').'" /></a></p>';
return $output;
}
@ -366,7 +366,7 @@ sub moveDown {
my $i18n = WebGUI::International->new($self->session,'Icon');
my $output = '<p style="display:inline;vertical-align:middle;">';
$output .= '<a href="'.$self->session->url->gateway($pageURL,$urlParams).'">' unless $disabled;
$output .= '<img src="'.$self->_getBaseURL().'moveDown.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Move Down').'" title="'.$i18n->get('Move Down').'" />';
$output .= '<img src="'.$self->getBaseURL().'moveDown.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Move Down').'" title="'.$i18n->get('Move Down').'" />';
$output .= '</a>' unless $disabled;
$output .= '</p>';
return $output;
@ -394,7 +394,7 @@ sub moveLeft {
my $pageURL = shift || $self->session->url->getRequestedUrl;
my $i18n = WebGUI::International->new($self->session,'Icon');
my $output = '<p style="display:inline;vertical-align:middle;"><a href="'.$self->session->url->gateway($pageURL,$urlParams).'">';
$output .= '<img src="'.$self->_getBaseURL().'moveLeft.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Move Left').'" title="'.$i18n->get('Move Left').'" /></a></p>';
$output .= '<img src="'.$self->getBaseURL().'moveLeft.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Move Left').'" title="'.$i18n->get('Move Left').'" /></a></p>';
return $output;
}
@ -420,7 +420,7 @@ sub moveRight {
my $pageURL = shift || $self->session->url->getRequestedUrl;
my $i18n = WebGUI::International->new($self->session,'Icon');
my $output = '<p style="display:inline;vertical-align:middle;"><a href="'.$self->session->url->gateway($pageURL,$urlParams).'">';
$output .= '<img src="'.$self->_getBaseURL().'moveRight.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Move Right').'" title="'.$i18n->get('Move Right').'" /></a></p>';
$output .= '<img src="'.$self->getBaseURL().'moveRight.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Move Right').'" title="'.$i18n->get('Move Right').'" /></a></p>';
return $output;
}
@ -446,7 +446,7 @@ sub moveTop {
my $pageURL = shift || $self->session->url->getRequestedUrl;
my $i18n = WebGUI::International->new($self->session,'Icon');
my $output = '<p style="display:inline;vertical-align:middle;"><a href="'.$self->session->url->gateway($pageURL,$urlParams).'">';
$output .= '<img src="'.$self->_getBaseURL().'moveTop.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Move To Top').'" title="'.$i18n->get('Move To Top').'" /></a></p>';
$output .= '<img src="'.$self->getBaseURL().'moveTop.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Move To Top').'" title="'.$i18n->get('Move To Top').'" /></a></p>';
return $output;
}
@ -474,7 +474,7 @@ sub moveUp {
my $i18n = WebGUI::International->new($self->session,'Icon');
my $output = '<p style="display:inline;vertical-align:middle;">';
$output .= '<a href="'.$self->session->url->gateway($pageURL,$urlParams).'">' unless $disabled;
$output .= '<img src="'.$self->_getBaseURL().'moveUp.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Move Up').'" title="'.$i18n->get('Move Up').'" />';
$output .= '<img src="'.$self->getBaseURL().'moveUp.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Move Up').'" title="'.$i18n->get('Move Up').'" />';
$output .= '</a>' unless $disabled;
$output .= '</p>';
return $output;
@ -536,7 +536,7 @@ sub shortcut {
my $pageURL = shift || $self->session->url->getRequestedUrl;
my $i18n = WebGUI::International->new($self->session,'Icon');
my $output = '<p style="display:inline;vertical-align:middle;"><a href="'.$self->session->url->gateway($pageURL,$urlParams).'">';
$output .= '<img src="'.$self->_getBaseURL().'shortcut.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Create Shortcut').'" title="'.$i18n->get('Create Shortcut').'" /></a></p>';
$output .= '<img src="'.$self->getBaseURL().'shortcut.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('Create Shortcut').'" title="'.$i18n->get('Create Shortcut').'" /></a></p>';
return $output;
}
@ -562,7 +562,7 @@ sub view {
my $pageURL = shift || $self->session->url->getRequestedUrl;
my $i18n = WebGUI::International->new($self->session,'Icon');
my $output = '<p style="display:inline;vertical-align:middle;"><a href="'.$self->session->url->gateway($pageURL,$urlParams).'">';
$output .= '<img src="'.$self->_getBaseURL().'view.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('View').'" title="'.$i18n->get('View').'" /></a></p>';
$output .= '<img src="'.$self->getBaseURL().'view.gif" style="vertical-align:middle;border: 0px;" alt="'.$i18n->get('View').'" title="'.$i18n->get('View').'" /></a></p>';
return $output;
}

View file

@ -0,0 +1,12 @@
package WebGUI::i18n::English::Form_Textarea; ##Be sure to change the package name to match the filename
our $I18N = { ##hashref of hashes
'drag to resize' => {
message => q|Drag to Resize|,
lastUpdated => 0,
context => q|alt tag for the text area drag icon|
},
};
1;

View file

@ -137,11 +137,6 @@ our $I18N = {
context => q|Title of the statistics viewer for the admin console.|
},
'463' => {
message => q|Text Area Rows|,
lastUpdated => 1031514049
},
'451' => {
message => q|is required.|,
lastUpdated => 1031514049
@ -2557,11 +2552,6 @@ The headings of columns on things like message boards and user contributions.
lastUpdated => 1078243385
},
'464' => {
message => q|Text Area Columns|,
lastUpdated => 1031514049
},
'363' => {
message => q|Page Template Position|,
lastUpdated => 1034736999
@ -3525,16 +3515,6 @@ and tracked by WebGUI.|,
lastUpdated => 1120239343,
},
'463 description' => {
message => q|How many rows of characters will be displayed in textareas on the site.|,
lastUpdated => 1120239343,
},
'464 description' => {
message => q|How many columns of characters will be displayed in textareas on the site. |,
lastUpdated => 1120239343,
},
'465 description' => {
message => q|How many characters can be displayed at once in text boxes on the site. |,
lastUpdated => 1120239343,

View file

@ -0,0 +1,165 @@
/* -*-mode: Java; coding: latin-1;-*- Time-stamp: "2005-05-13 20:47:10 ADT"
"Resizeable textarea functions" by Sean M. Burke, sburke@cpan.org, 2005
You can use, modify, and redistribute this only under the terms of the
Perl Artistic License:
http://www.perl.com/pub/a/language/misc/Artistic.html
*/
var // Configurables:
tar_Drag_increments = 15, // number of pixels that we grow by
// Sizes (in pixels) that no draggable textarea should exceed:
tar_Min_Height = 120, tar_Min_Width = 120,
tar_Max_Height = 1400, tar_Max_Width = 1400
;
// End of configurables
//==========================================================================
var tar_Textarea, tar_Orig_width, tar_Orig_height, tar_Grip, tar_Cursor_start_x, tar_Cursor_start_y;
function tar_drag_start (event, textarea_id) {
Textarea = tar_id(textarea_id);
if(! tar_find_draggable(event) ) return;
tar_add_class(Grip, "activedrag");
Cursor_start_x = event.clientX;
Cursor_start_y = event.clientY;
Orig_width = parseInt( Textarea.style.width , 10 );
Orig_height = parseInt( Textarea.style.height , 10 );
// Capture mousemove and mouseup events on the page.
document.addEventListener("mousemove", tar_drag_move, true);
document.addEventListener("mouseup", tar_drag_stop, true);
event.preventDefault();
return;
}
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
function tar_drag_move(event) {
var
new_width = event.clientX - Cursor_start_x + Orig_width ,
new_height = event.clientY - Cursor_start_y + Orig_height;
new_width = tar_constrain_range(tar_Min_Width ,new_width , tar_Max_Width, tar_Drag_increments);;
new_height = tar_constrain_range(tar_Min_Height,new_height, tar_Max_Height, tar_Drag_increments);;
Textarea.style.width = new_width+'px';
Textarea.style.height = new_height+'px';
event.preventDefault();
return;
}
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
function tar_drag_stop(event) {
// Stop capturing the mousemove and mouseup events.
tar_remove_class(Grip, "activedrag");
document.removeEventListener("mousemove", tar_drag_move, true);
document.removeEventListener("mouseup", tar_drag_stop, true);
return;
}
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
function tar_constrain_range (min, i, max, incr) {
if(incr) i = Math.floor(i/incr) * incr;
return(
(i > max) ? max
:(i < min) ? min
: i
);
}
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
function tar_find_draggable (event) {
if(!event) throw tar_complaining("No event?!");
var el = event.target;
if(!el) {
if(window.event) throw tar_complaining(
"Your browser is too old to allow textarea resizing. Upgrade at getfirefox.com"
);
// Modern browsers implement the DOM Events model, dammit!
throw tar_complaining("No event target?!");
}
//trace("Dragging ", el.tagName, "#", el.id);
if (el.nodeType == document.TEXT_NODE) el = el.parentNode;
while(el) {
if( el.tagName == "BODY" ) { el = false; break; }
if( tar_has_class(el, 'draggable') ) break; // found it!
el = el.parentNode;
}
if(!el) return false; // undraggable
Grip = el;
return true;
}
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
// Misc library functions:
function tar_has_class (el, classname) {
return(
(" " + (el.className || '') + " ").indexOf(classname) >= 0
);
}
function tar_add_class (el, newclass) {
var classes = (el.className || '').split(" ");
classes.push(newclass);
el.className = classes.join(" ");
return el;
}
function tar_remove_class (el, endclass) {
if(!el.className) return el;
var classes = el.className.split(" ");
for(var i = 0; i < classes.length; i++) {
if(classes[i] == endclass) classes[i] = '';
}
el.className = classes.join(" ");
return el;
}
function tar_id (name) { // find element with the given ID, else exception.
var object = tar_id_try(name);
if( ! object ) throw tar_complaining("Failed to find element with id='"
+ name + "' in " + document.location );
return object;
}
function tar_id_try (name) {
var object = document.getElementById(name);
return object;
}
function tar_complaining () {
var _ = [];
for(var i = 0; i < arguments.length; i++) { _.push(arguments[i]) }
_ = _.join("");
if(! _.length) out = "Unknown error!?!";
void alert(_);
return new Error(_,_);
}
// And a sanity-check:
if(!document.getElementById) throw tar_complaining(
"Your browser is too old to show this page quite right. Upgrade at getfirefox.com"
);
//End