From 83cbfc0d25a716ed60615e377e90b4a32975f014 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Wed, 20 Apr 2005 21:17:44 +0000 Subject: [PATCH] Added a color picker form field type. --- docs/changelog/6.x.x.txt | 1 + lib/WebGUI/Form.pm | 48 ++++- lib/WebGUI/FormProcessor.pm | 20 ++ lib/WebGUI/HTMLForm.pm | 59 ++++++ www/extras/colorPicker.gif | Bin 15962 -> 0 bytes www/extras/colorPicker.html | 351 ------------------------------------ www/extras/colorPicker.js | 215 ++++++++++++++++++++++ 7 files changed, 333 insertions(+), 361 deletions(-) delete mode 100644 www/extras/colorPicker.gif delete mode 100644 www/extras/colorPicker.html create mode 100644 www/extras/colorPicker.js diff --git a/docs/changelog/6.x.x.txt b/docs/changelog/6.x.x.txt index 7728397ea..55bb1d2f6 100644 --- a/docs/changelog/6.x.x.txt +++ b/docs/changelog/6.x.x.txt @@ -23,6 +23,7 @@ - Added edit icons to the list of prototypes and packages in the asset manager. - Added a select all option to the clipboard selector in the asset manager. + - Added a color picker form field type. 6.5.6 diff --git a/lib/WebGUI/Form.pm b/lib/WebGUI/Form.pm index d20820d4c..498919739 100644 --- a/lib/WebGUI/Form.pm +++ b/lib/WebGUI/Form.pm @@ -43,6 +43,7 @@ Base forms package. Eliminates some of the normal code work that goes along with $html = WebGUI::Form::checkbox({name=>"whichOne", value=>"red"}); $html = WebGUI::Form::checkList({name=>"dayOfWeek", options=>\%days}); $html = WebGUI::Form::codearea({name=>"stylesheet"}); + $html = WebGUI::Form::color({name=>"highlightColor"}); $html = WebGUI::Form::combo({name=>"fruit",options=>\%fruit}); $html = WebGUI::Form::contentType({name=>"contentType"); $html = WebGUI::Form::databaseLink(); @@ -300,6 +301,33 @@ sub codearea { return $output; } +#------------------------------------------------------------------- + +=head2 color ( hashRef ) + +Returns a color picker field. + +=head3 name + +The name field for this form element. + +=head3 value + +The value for this form element. This should be a scalar containing a hex color like "#000000". + +=head3 defaultValue + +This will be used if no value is specified. + +=cut + +sub color { + my $params = shift; + WebGUI::Style::setScript($session{config}{extrasURL}.'/colorPicker.js',{ type=>'text/javascript' }); + return ''; +} + + #------------------------------------------------------------------- =head2 combo ( hashRef ) @@ -539,9 +567,9 @@ This will be used if no value is specified. Defaults to today and now. sub dateTime { my $params = shift; my $value = epochToSet($params->{value}||$params->{defaultValue},1); - WebGUI::Style::setScript($session{config}{extrasURL}.'/calendar/calendar.js',{ language=>'javascript' }); - WebGUI::Style::setScript($session{config}{extrasURL}.'/calendar/lang/calendar-en.js',{ language=>'javascript' }); - WebGUI::Style::setScript($session{config}{extrasURL}.'/calendar/calendar-setup.js',{ language=>'javascript' }); + WebGUI::Style::setScript($session{config}{extrasURL}.'/calendar/calendar.js',{ type=>'text/javascript' }); + WebGUI::Style::setScript($session{config}{extrasURL}.'/calendar/lang/calendar-en.js',{ type=>'text/javascript' }); + WebGUI::Style::setScript($session{config}{extrasURL}.'/calendar/calendar-setup.js',{ type=>'text/javascript' }); WebGUI::Style::setLink($session{config}{extrasURL}.'/calendar/calendar-win2k-1.css', { rel=>"stylesheet", type=>"text/css", media=>"all" }); return text({ name=>$params->{name}, @@ -646,7 +674,7 @@ This will be used if no value is specified. sub email { my $params = shift; - WebGUI::Style::setScript($session{config}{extrasURL}.'/emailCheck.js',{ language=>'javascript' }); + WebGUI::Style::setScript($session{config}{extrasURL}.'/emailCheck.js',{ type=>'text/javascript' }); my $output .= text({ name=>$params->{name}, value=>$params->{value}, @@ -953,7 +981,7 @@ sub float { my $params = shift; my $value = $params->{value} || 0; my $size = $params->{size} || 11; - WebGUI::Style::setScript($session{config}{extrasURL}.'/inputCheck.js',{ language=>'javascript' }); + WebGUI::Style::setScript($session{config}{extrasURL}.'/inputCheck.js',{ type=>'text/javascript' }); return text({ name=>$params->{name}, value=>$value, @@ -1207,7 +1235,7 @@ This will be used if no value is specified. sub integer { my $params = shift; - WebGUI::Style::setScript($session{config}{extrasURL}.'/inputCheck.js',{ language=>'javascript' }); + WebGUI::Style::setScript($session{config}{extrasURL}.'/inputCheck.js',{ type=>'text/javascript' }); return text({ name=>$params->{name}, value=>$params->{value}, @@ -1354,7 +1382,7 @@ This will be used if no value is specified. sub phone { my $params = shift; - WebGUI::Style::setScript($session{config}{extrasURL}.'/inputCheck.js',{ language=>'javascript' }); + WebGUI::Style::setScript($session{config}{extrasURL}.'/inputCheck.js',{ type=>'text/javascript' }); my $maxLength = $params->{maxlength} || 30; return text({ name=>$params->{name}, @@ -1738,7 +1766,7 @@ This will be used if no value is specified. Defaults to now. sub timeField { my $params = shift; my $value = WebGUI::DateTime::secondsToTime($params->{value}||$params->{defaultValue}); - WebGUI::Style::setScript($session{config}{extrasURL}.'/inputCheck.js',{ language=>'javascript' }); + WebGUI::Style::setScript($session{config}{extrasURL}.'/inputCheck.js',{ type=>'text/javascript' }); my $output = text({ name=>$params->{name}, value=>$value, @@ -1790,7 +1818,7 @@ This will be used if no value is specified. sub url { my $params = shift; my $maxLength = $params->{maxlength} || 2048; - WebGUI::Style::setScript($session{config}{extrasURL}.'/addHTTP.js',{ language=>'javascript' }); + WebGUI::Style::setScript($session{config}{extrasURL}.'/addHTTP.js',{ type=>'text/javascript' }); return text({ name=>$params->{name}, value=>$params->{value}, @@ -1933,7 +1961,7 @@ This will be used if no value is specified. sub zipcode { my $params = shift; - WebGUI::Style::setScript($session{config}{extrasURL}.'/inputCheck.js',{ language=>'javascript' }); + WebGUI::Style::setScript($session{config}{extrasURL}.'/inputCheck.js',{ type=>'text/javascript' }); my $maxLength = $params->{maxlength} || 10; return text({ name=>$params->{name}, diff --git a/lib/WebGUI/FormProcessor.pm b/lib/WebGUI/FormProcessor.pm index 2b38f4eec..6a06f99d1 100644 --- a/lib/WebGUI/FormProcessor.pm +++ b/lib/WebGUI/FormProcessor.pm @@ -36,6 +36,7 @@ This package helps in the processing of the form variables that are returned fro $value = WebGUI::FormProcessor::checkbox("whichOne"); $value = WebGUI::FormProcessor::checkList("dayOfWeek"); $value = WebGUI::FormProcessor::codearea("snippet"); + $value = WebGUI::FormProcessor::color("highlightColor"); $value = WebGUI::FormProcessor::combo("fruit"); $value = WebGUI::FormProcessor::contentType("text"); $value = WebGUI::FormProcessor::date("endDate"); @@ -140,6 +141,25 @@ sub codearea { } +#------------------------------------------------------------------- + +=head2 color ( name ) + +Returns a hex color string like: #000000 + +=head3 name + +The name of the form variable to retrieve. + +=cut + +sub color { + my $color = $session{form}{$_[0]}; + return undef unless $color =~ /\#\w{6}/; + return $color; +} + + #------------------------------------------------------------------- =head2 combo ( name ) diff --git a/lib/WebGUI/HTMLForm.pm b/lib/WebGUI/HTMLForm.pm index c15e33a65..665db28cb 100644 --- a/lib/WebGUI/HTMLForm.pm +++ b/lib/WebGUI/HTMLForm.pm @@ -60,6 +60,10 @@ Package that makes HTML forms typed data and significantly reduces the code need -name=>"stylesheet", -label=>"Stylesheet" ); + $f->color( + -name=>"highlightColor", + -label=>"Highlight Color" + ); $f->combo( -name=>"fruit", -options=>\%fruit, @@ -505,6 +509,61 @@ sub codearea { $self->{_data} .= $output; } +#------------------------------------------------------------------- + +=head2 color ( name, [, label, value, subtext, uiLevel, defaultValue ] ) + +Adds a hex color picker field. + +=head3 name + +The name field for this form element. + +=head3 label + +The left column label for this form row. + +=head3 value + +The value for this form element. Should be passed as a scalar containing a hex color like this: #000000 + +=head3 subtext + +Extra text to describe this form element or to provide special instructions. + +=head3 uiLevel + +The UI level for this field. See the WebGUI developer's site for details. Defaults to "0". + +=head3 defaultValue + +When no other value is present, will use this. + +=cut + +sub color { + my ($output); + my ($self, @p) = @_; + my ($name, $label, $value, $subtext, $uiLevel, $defaultValue) = rearrange([qw(name label value subtext uiLevel defaultValue)], @p); + if (_uiLevelChecksOut($uiLevel)) { + $output = WebGUI::Form::color({ + "name"=>$name, + "value"=>$value, + "defaultValue"=>$defaultValue + }); + $output .= _subtext($subtext); + $output = $self->_tableFormRow($label,$output); + } else { + $output = WebGUI::Form::hidden({ + "name"=>$name, + "value"=>$value, + "defaultValue",$defaultValue + }); + } + $self->{_data} .= $output; +} + + #------------------------------------------------------------------- =head2 combo ( name, options [, label, value, size, multiple, extras, subtext, uiLevel, defaultValue ] ) diff --git a/www/extras/colorPicker.gif b/www/extras/colorPicker.gif deleted file mode 100644 index a36307109fcf18a2d351e89b889bd4bc30df963b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15962 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 -Color Picker - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - diff --git a/www/extras/colorPicker.js b/www/extras/colorPicker.js new file mode 100644 index 000000000..e1a9263c1 --- /dev/null +++ b/www/extras/colorPicker.js @@ -0,0 +1,215 @@ +/** +* MiniColorPicker v0.3 +* By: me [at] daantje [dot] nl +* +* Last updated: Thu Sep 16 12:59:10 CEST 2004 +* +* Documentation: +* A realy small Photoshop like color picker in DHTML. +* It should be compatible with MSIE and Mozilla based +* browsers. +* +* License: +* GPL +* +* Support: +* Not realy. +*/ + + +//Config ammount of colors +var bit = 16; //increase to make picker bigger (and slower) + + +//define globals, don't change! +bit = Math.round(255 / bit); +var ConvArray = new Array(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'); +var picked = new Array(); +var pickedColorRGB = new Array(); +var toolbarShow = new Array(); +var donePickerInits = 0; +var clickedPicker; +var tmr = null; + + +//this function is written by Guido Socher, guido at linuxfocus dot org +function dec2hex(value){ + var retval = ''; + var intnum; + var tmpnum; + var i = 0; + + intnum = parseInt(value,10); + if (isNaN(intnum)){ + retval = 'NaN'; + }else{ + while (intnum > 0.9){ + i++; + tmpnum = intnum; + // cancatinate return string with new digit: + retval = ConvArray[tmpnum % 16] + retval; + intnum = Math.floor(tmpnum / 16); + if (i > 100){ + // break infinite loops + retval = 'NaN'; + break; + } + } + } + if(retval.length == 1) + retval = '0' + retval; + else if(retval.length == 0) + retval = '00'; + return retval; +} + + +function HEXcolor2RGB(value){ + value = value.replace('#',''); + pickedColorRGB[0] = value.substr(0,2); + pickedColorRGB[1] = value.substr(2,2); + pickedColorRGB[2] = value.substr(4,2); + for(i=0;i<3;i++){ + pickedColorRGB[i] = parseInt(pickedColorRGB[i],16); + } + return pickedColorRGB; +} + + +function buildPicker(){ + htmlStr = ""; + //palet + for(x=0;x<=255;x=x+bit){ + for(y=0;y<=255;y=y+bit){ + htmlStr+= ""; + } + htmlStr+= ""; + } + //grays + for(x=0;x<=255;x=x+bit){ + c = dec2hex(x)+dec2hex(x)+dec2hex(x); + htmlStr+= ""; + } + htmlStr+= "
"; + + return htmlStr; +} + + +function changePallet(R){ + for(G=0;G<=255;G=G+bit){ + for(B=0;B<=255;B=B+bit){ + document.getElementById(G+','+B).style.backgroundColor = '#'+dec2hex(R)+dec2hex(G)+dec2hex(B); + } + } + picked[clickedPicker] = R; +} + + +function changePickerHue(){ + g = 0; + b = 255; + gS = 0; + bS = 1; + htmlStr = ""; + for(r=0;r<=255;r=r+bit){ + c = dec2hex(r)+dec2hex(g)+dec2hex(b); + htmlStr+= ""; + + if(g == 255) gS = 1; + else if(g == 0) gS = 0; + + if(b == 255) bS = 1; + else if(b == 0) bS = 0; + + if(gS == 0) + g = g + (bit * 2); + else + g = g - (bit * 2); + + if(bS == 0) + b = b + (bit * 4); + else + b = b - (bit * 4); + } + htmlStr+= ""; + htmlStr+= "
"; + + return htmlStr; +} + + +function pickColor(r,g,b){ + c = '#'+dec2hex(r)+dec2hex(g)+dec2hex(b); + document.getElementById(clickedPicker).style.backgroundColor = c; + document.getElementById(clickedPicker+'Value').value = c; + changePallet(r); +} + + +function setPickedColorFromForm(obj){ + c = HEXcolor2RGB(obj.value); + changePallet(c[0]); + document.getElementById(obj.id.replace('Value','')).style.backgroundColor = obj.value; +} + + +function placePickerToolbar(obj){ + lastClickedPicker = clickedPicker; + clickedPicker = obj.id; + if(tmr) + clearTimeout(tmr); + if(toolbarShow[obj.id] == 0){ + toolbarShow[obj.id] = 1; + + t = obj.offsetTop + parseInt(obj.style.height) + 3; + l = obj.offsetLeft; + while(obj.offsetParent){ + t+= obj.offsetParent.offsetTop; + l+= obj.offsetParent.offsetLeft; + obj = obj.offsetParent; + } + document.getElementById('colorPickerTools').style.top = t; + document.getElementById('colorPickerTools').style.left = l; + document.getElementById('colorPickerTools').style.display = 'block'; + if(picked[clickedPicker] == null){ + changePallet(255); + }else{ + //changePallet(picked[clickedPicker]); + setPickedColorFromForm(document.getElementById(clickedPicker+'Value')); + } + }else if(toolbarShow[obj.id] == 1){ + document.getElementById('colorPickerTools').style.display = 'none'; + toolbarShow[obj.id] = 0; + } +} + + +function killColorPicker(sw){ + if(sw == 1 && clickedPicker){ + tmr = setTimeout('placePickerToolbar(document.getElementById(clickedPicker));',1000); + }else if(tmr){ + clearTimeout(tmr); + } +} + + +function initColorPicker(fieldName,fieldValue){ + pickerScreen = buildPicker(); + hueScreen = changePickerHue(); + if(!fieldValue) + fieldValue = ""; + + s = ""; + s+= ""; + s+= ""; + s+= "
 
"; + document.write(s); + if(donePickerInits == 0){ + document.write(""); + document.getElementById('colorPickerTools').innerHTML = '
'+pickerScreen+''+hueScreen+'
'; + } + + toolbarShow["pickedColor"+donePickerInits] = 0; + donePickerInits++; +}