<?php /* rainbowmaker.php version BETA 4.1 release 1.0 1-12-2012
written by and Copyright © 2011, 2012 Joe Golembieski, Softmoon-Webware
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
The original copyright information must remain intact.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/> */
// character encoding: UTF-8 UNIX tab-spacing: 2 word-wrap: no standard-line-length: 120
$exectime=ini_set('max_execution_time', '300'); // 5 minutes
session_start();
if (!defined('DIR_SEP')) {
if (stripos(php_uname('s'), 'Win')===FALSE) // Mac OS/LINUX/UNIX directory separator
define('DIR_SEP', "/");
else // MS Windows directory separator
define('DIR_SEP', "\\"); }
set_include_path(get_include_path()
.PATH_SEPARATOR.'PHP_toolbucket'.DIR_SEP.'SoftMoon'.DIR_SEP.'rainbow-maker'.DIR_SEP
.PATH_SEPARATOR.'PHP_toolbucket'.DIR_SEP.'SoftMoon'.DIR_SEP
);
define ('CHECK_PASSWORD', FALSE); //for installation on a public server, you may want to activate the password feature.
define ('PW_DB', 'PW/'); // this is the folder where password generator files are kept
define ('FONTS_FOLDER', 'Fonts/'); // for use with the password generator ...and future additions...
define ('IMAGE_FOLDER', 'RainbowImages/'); // this should be a publicly available folder
define ('UPLOAD_FOLDER', 'uploadedImages/'); // this should be a non-public 'forbidden access' folder if installed on a public server, and should never have PHP parse any files within. PHP may be hidden in the comment fields of JPGs and PNGs, and if parsed, PHP may then call the file (self) as an executable, with unstoppable malicious code hidden in the picture itself. By default, PHP will -not- parse image files, but as it -may- be enabled by file extension by the host system administrator, disabling folder access is best practice.
define ('UPLOAD_DEST', UPLOAD_FOLDER.session_id().'.'); // this is the internally used upload file prefix.
define ('KEEP_FOLDER_CLEAN', FALSE); // If TRUE, all images in IMAGE_FOLDER, and unused images in UPLOAD_FOLDER,
// older than LINGER minues will be deleted (for use on a public server).
define ('DUMP_UPLOADS', FALSE); // if TRUE, no uploads will be kept
define ('LINGER', 20); // minimum number of minutes to keep a created rainbow and uploaded files.
define ('SHOW', 1); // gallery images may be shown if requested (DO NOT CHANGE THIS VALUE)
define ('ACCESS', 2); // gallery images may be directly used as background or foreground images (DO NOT CHANGE THIS VALUE)
define ('SAVETO', 4); // user images may be saved to the gallery (DO NOT CHANGE THIS VALUE)
define ('PASSWORD', 8); // saving to the gallery requires a password (DO NOT CHANGE THIS VALUE)
define ('ALLOW_GALLERY', (SHOW | ACCESS | SAVETO)); // | PASSWORD 0
define ('GALLERY_FOLDER', 'RainbowGallery/'); // this should be a publicly available folder
define ('GALLERY_PASSWORD', 'PHP rocks');
define ('MAX_GRAFK_SIZE', PHP_INT_MAX); // default is 500*500
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 //EN" "http://www.w3.org/TR/HTML4.1/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name='version' content='BETA 4.1 / Release 1.0' />
<meta name='author' content='Joe Golembieski, SoftMoon-WebWare' />
<meta name='copyright' content='Copyright © 2011, 2012 by the author' />
<meta name='x-generator' content='tswebeditor.tigris.org' />
<meta name='x-generator' content='tswebeditor.tigris.org' />
<meta name='description' content='Create your own multi-colored rainbow-transparency gradients in multiple shapes using this PHP powered tool.' />
<title>PHP powered .png Rainbow Maker</title>
<link rel="stylesheet" type="text/css" media="screen, projection" href="JS_toolbucket/freqdec-fd-slider-01084d3/css/fd-slider.css" />
<link rel='stylesheet' type='text/css' media="screen, projection" href='SoftMoon.rainbowmaker.css' />
<script type='text/javascript' src="JS_toolbucket/freqdec-fd-slider-01084d3/js/fd-slider.js"></script>
<script type='text/javascript' src='JS_toolbucket/SoftMoon.FormFieldGenie.js'></script>
<script type='text/javascript' src='JS_toolbucket/Animator.js'></script>
<script type='text/javascript' src='SoftMoon.rainbowmaker.js'></script>
<!-- [if IE 6]>
<style type='text/css'>
div#color_picker_wrap {
position: absolute; }
</style>
<![endif] -->
</head>
<body onload='atLoad();'><!-- div id='tester'></div><div id='tester2'></div -->
<script type='text/javascript'>//<![CDATA[
if (navigator.userAgent.match( /Firefox/ )) {
document.write(
"<div id='burning_bronto'>Sorry you, you’re using Mozilla’s “burning brontosaurus-out-of-water” Firefox. \n" +
"Chances are, you will have a poor browsing experience on this site. \n" +
"A modern browser (that supports standards in line with all the other modern browsers) is recommended. \n" +
"Try:\n" +
"<ul>\n" +
"<li>Opera’s desktop browser</li>\n" +
"<li>Google’s Chrome</li>\n" +
"<li>Apple’s Safari</li>\n" +
"</ul>\n" +
"</div>\n" ) }
//]]></script>
<!-- and NO I'm not going to go out of my way, wasting my time, adding superfluous markup and workarounds
to support these browsers. THEY need to be fixed, not the other way around.
Unless, of course, you want to pay me for a commersial installation of this ☻☻☻☻☻☻☻ -->
<!-- [if lt IE 8]>
<div id='ms_internet_exploder'>Sorry you, you’re using Microsoft’s Internet Exploder.
Chances are, you will have a poor browsing experience on this site.
A modern browser (that supports standards defined in the mid-1990’s) is recommended.
Try:
<ul>
<li>Opera’s desktop browser</li>
<li>Google’s Chrome</li>
<li>Apple’s Safari</li>
</ul>
Note: avoid Mozilla’s Firefox - it is also unable to render this page correctly.
</div>
<![endif] -->
<h1><a href='SoftMoon.Rainbow-Maker_instructions.htm#content'>Rainbow Maker<span>by SoftMoon WebWare</span><img src='images/SoftMoonWebWare.gif' alt='' /></a></h1><br />
<?php
if (!isset($_SESSION['picName'])) $_SESSION['picName']=newPicName();
set_error_handler(create_function('$errno, $errstr, $errfile, $errline',
'throw new ErrorException($errstr, 255, $errno, basename($errfile), $errline); return true;'),
E_ALL & ~E_NOTICE);
try {
if (CHECK_PASSWORD) {require "Password.php"; $Password=new Password;}
if (!is_dir(IMAGE_FOLDER)) mkdir(IMAGE_FOLDER);
if (CHECK_PASSWORD and !is_dir(IMAGE_FOLDER.'PWs')) mkdir(IMAGE_FOLDER.'PWs');
if (!is_dir(UPLOAD_FOLDER)) mkdir(UPLOAD_FOLDER);
if (ALLOW_GALLERY and !is_dir(GALLERY_FOLDER)) mkdir(GALLERY_FOLDER);
if (ALLOW_GALLERY) require_once 'Rainbow.Builder.php';
}
catch (ErrorException $e) {echo "<h4>filesystem error:</h4>$e\n</body></html>\n"; exit;}
if (isset($_POST['show'])) { //process new Rainbow image
if (!isset($_SESSION['uploads']) or !is_array($_SESSION['uploads'])) $_SESSION['uploads']=array();
try {
if (CHECK_PASSWORD and !$Password->check($_POST['password'], PW_DB))
throw new Exception('Password does not match or has expired.');
require_once 'file_path_exists.php';
require_once 'include_modules.php';
require_once 'Rainbow.Builder.php';
require_once 'Rainbow~pluginShapes.php';
if (file_path_exists('colorcharts')) include_modules('colorcharts');
require_once 'getUploadedFile.php';
getUploads('background');
getUploads('foreground');
if (KEEP_FOLDER_CLEAN) { //remove all old images
$D=opendir(IMAGE_FOLDER);
while ($Dentry=readdir($D)) { if ($Dentry=="." or $Dentry==".." or is_dir($Dentry)) continue;
if (filectime(IMAGE_FOLDER.$Dentry)+LINGER*60<time()) unlink(IMAGE_FOLDER.$Dentry); }
closedir($D); }
if (is_file(IMAGE_FOLDER.$_SESSION['picName'])) {
unlink(IMAGE_FOLDER.$_SESSION['picName']);
$_SESSION['picName']=preg_replace("/\[([0-9]+)\]/e", 'updatePicName("$1")', $_SESSION['picName']); }
if (KEEP_FOLDER_CLEAN) { //remove all old uploads
$D=opendir(UPLOAD_FOLDER);
while ($Dentry=readdir($D)) { if ($Dentry=="." or $Dentry==".."
or UPLOAD_FOLDER.$Dentry===$_POST['background']['file']['name']
or ($_SESSION['foregrounds'] and in_array(UPLOAD_FOLDER.$Dentry, $_SESSION['foregrounds']))) continue;
if (filectime(UPLOAD_FOLDER.$Dentry)+LINGER*60<time()) unlink(UPLOAD_FOLDER.$Dentry); }
closedir($D); }
$passtime=time(); $mpasstime=microtime(TRUE);
$Rainbow=new RainbowBuilder;
$Rainbow->xception=TRUE; // throw exceptions for user errors
$Rainbow->¿showStats=TRUE; // echo stats in HTML
// $Rainbow->¿dumpAttributes=TRUE; // echo the data input into the Rainbow Class
$hw=array(
'sizeTo' =>$_POST['hw']['sizeTo'],
'ratio_1' =>$_POST['hw']['ratio_1']/100,
'width' =>$_POST['hw']['width'],
'overSpan'=>$_POST['hw']['overSpan'],
'pie_slices'=>$_POST['pie'] );
$rotate=$_POST['rotate']; $spiral=$_POST['spiral'];
$spiral['doso']=($spiral['doso']==='spiral');
$spiral['factor']=$spiral['factor']/100;
// preg_match('/^[^0-9]+/', $_POST['style'], $s); $s=$s[0];
switch ($_POST['style']) {
case 'circle': { $hw['ratio_1']=1;
$_POST['hw']['ratio_1']='100'; break; }
// case 'ellipse': { $hw['sectors_1']=2; $hw['swell']=1;
// $_POST['hw']['sectors_1']='2'; $_POST['hw']['swell']='100'; break; }
case 'flower': {
$hw['sectors_1']=$_POST['hw']['sectors_1'];
$hw['depth']=$_POST['hw']['depth']/100;
$hw['swell']=1-$hw['depth'];
$_POST['hw']['swell']=100-$_POST['hw']['depth']; break; }
case 'superstar': {
// case 'star☼':
// case 'starlet': {
$rotate['twist']['amount']=$rotate['twist']['amount']/100;
$rotate['twist']['depth']=$rotate['twist']['depth']/100;
if ($rotate['twist']['extent']!=='∞')
$rotate['twist']['extent']=$rotate['twist']['extent']/100;
$rotate['shimmer']['amount']=$rotate['shimmer']['amount']/100;
$rotate['shimmer']['expand']=$rotate['shimmer']['expand']/100;
$rotate['shimmer']['depth']=$rotate['shimmer']['depth']/100;
if ($rotate['shimmer']['extent']!=='∞')
$rotate['shimmer']['extent']=$rotate['shimmer']['extent']/100;
$rotate['pinwheel']=$rotate['pinwheel']/100; }
case 'complex': {
$hw['swell']=$_POST['hw']['swell']/100; }
case 'star': {
$hw['depth']=$_POST['hw']['depth']/100; }
case 'polygon': {
$hw['sectors_1']=$_POST['hw']['sectors_1']; break; }
case 'fountain': {
$hw['swell']=$_POST['hw']['swell']/100; $hw['span']=$_POST['hw']['span']/100;
break; } }
if (isset($_POST['superstyle'])) {
$hw['ratio_2']=$_POST['hw']['ratio_2']/100;
$hw['size_2']=$_POST['hw']['size_2']/100;
$hw['shift_2']=$_POST['hw']['shift_2']/100;
$hw['sectors_2']=$_POST['hw']['sectors_2']; }
$dim=$_POST['dimension']; $dim['scale']=$dim['scale']/100;
$shape=$star=NULL;
switch ($_POST['style']) {
case 'line': {
$rainbowImg=$Rainbow->gradient($dim, $_POST['background'], $_POST['foreground'], $_POST['color'], $_POST['curve'], $_POST['transp'], $hw, $rotate);
break; }
// case 'star☼':
case 'superstar': {$shape=new ComplexStar($_POST['superstar']);}
case 'star': {$star=TRUE;}
case 'polygon': {if (!$shape) $shape=new RegularPolygon($star);}
case 'polygonic': {if (!$shape) $shape=new Polygonic(IrregularPolygons::getSchema($_POST['irregularPolygon']));} // {$x=; echo"<pre>",var_dump($x),"</pre>";
case 'mask': { if (!$shape) {
if ($_POST['mask']['0']['preload']=='true' and is_file($_SESSION['mask'])) $mask=$_SESSION['mask'];
else $mask=$_SESSION['mask']=getUploadedFile('mask', 0, UPLOAD_DEST, RainbowBuilder::filetypes(), TRUE);
$shape=new RadialMask(array('name'=>$mask, 'scalable'=>($_POST['mask']['0']['scalable']=='true'))); } }
case 'complex':
case 'flower': {if (!$shape) $shape=new ComplexFlower;}
case 'ellipse':{if (!$shape) $shape=new Ellipse;}
case 'circle': { if (!$shape) $shape='circle';
if (!isset($_POST['superstyle'])) {
$rainbowImg=$Rainbow->radial($dim, $_POST['background'], $_POST['foreground'], $_POST['color'], $_POST['curve'], $_POST['transp'], $hw, $rotate, $spiral, $_POST['extend'], $shape);
break; } }
case 'fountain': {if (!$shape) $shape=new Fountain;}
case 'split':
case 'basic': { if (!$shape) $shape=new BasicGradient($_POST['style']==='split');
if (isset($_POST['superstyle']) and in_array($_POST['superstyle'], array('hub', 'wheel', 'spokes', 'fan')))
$rainbowImg=$Rainbow->encircle($dim, $_POST['background'], $_POST['foreground'], $_POST['color'], $_POST['curve'], $_POST['transp'], $hw, $rotate, $spiral, $_POST['extend'], $shape, $_POST['superstyle']);
else
$rainbowImg=$Rainbow->fountain($dim, $_POST['background'], $_POST['foreground'], $_POST['color'], $_POST['curve'], $_POST['transp'], $hw, $rotate, $spiral, $_POST['extend'], $shape, $_POST['superstyle']);
break; } }
imagealphablending($rainbowImg, FALSE);
imagesavealpha($rainbowImg, TRUE);
imagepng($rainbowImg, IMAGE_FOLDER.$_SESSION['picName']);
imagedestroy($rainbowImg);
echo
"processing time (min:sec)= ",date('i:s', time()-$passtime)," (seconds)= ",microtime(TRUE)-$mpasstime,"<br />\n<br />\n",
"<img src='",IMAGE_FOLDER,$_SESSION['picName'],"' />\n";
}
catch (Exception $e) { if ($e instanceof ErrorException)
echo '<h4>Internal Error:<br />',$e->getMessage(),'<br />on line ',$e->getLine(),' in ',$e->getFile(),"</h4>\n";
else echo "<h4>",htmlspecialchars($e->getMessage(), ENT_QUOTES),"</h4>\n"; }
if (DUMP_UPLOADS) {
if ($_POST['background']['file']['name']) unlink($_POST['background']['file']['name']);
for ($i=0; $i<$foreCount; $i++) {
if ($_POST['foreground'][$i]['file']['name']) unlink($_POST['foreground'][$i]['file']['name']); } }
if (is_array($Rainbow->errMessages))
foreach ($Rainbow->errMessages as $msg) { if (is_string($msg) and (!is_object($e) or $msg!==$e->getMessage()))
echo "<h4>",htmlspecialchars($msg, ENT_QUOTES),"</h4>\n"; }
} // done processing new Rainbow image
else try {
if ($_POST['gallery']==='save' and (ALLOW_GALLERY & SAVETO) and is_file(IMAGE_FOLDER.$_SESSION['picName'])) {
if ((ALLOW_GALLERY & PASSWORD) and $_POST['galleryPass']!==GALLERY_PASSWORD)
throw New Exception('Pass Word is not correct');
$_POST['userFileName']=preg_replace('/[\/\\\:*?<>|\x00-\x2F]/', "", $_POST['userFileName']);
if ($_POST['userFileType']==='.png')
rename(IMAGE_FOLDER.$_SESSION['picName'], GALLERY_FOLDER.$_POST['userFileName'].".png");
else {
$DI=imagecreatefrompng(IMAGE_FOLDER.$_SESSION['picName']);
switch($_POST['userFileType']) {
case '.jpg': {imagejpeg($DI, GALLERY_FOLDER.$_POST['userFileName'].".jpg"); break;}
case '.gif': {imagegif($DI, GALLERY_FOLDER.$_POST['userFileName'].".gif"); break;} }
imagedestroy($DI);
unlink(IMAGE_FOLDER.$_SESSION['picName']); }
unset($_SESSION['picName']);
echo "<h3>Image saved to Gallery</h3>\n"; } }
catch (Exception $e) {echo "<h4>",htmlspecialchars($e->getMessage(), ENT_QUOTES),"</h4>\n";}
Function getUploads($filefield) { //echo "<pre>",var_dump($_POST[$filefield]),"</pre>";
$c=count($_POST[$filefield]);
for ($i=0; $i<$c; $i++) { switch ($_POST[$filefield][$i]['preload']['flag']) {
case 'true': {
if (in_array(UPLOAD_DEST.$_POST[$filefield][$i]['preload']['name'], $_SESSION['uploads'])
and is_file(UPLOAD_DEST.$_POST[$filefield][$i]['preload']['name']))
$_POST[$filefield][$i]['file']['name']=UPLOAD_DEST.$_POST[$filefield][$i]['preload']['name'];
else
if (in_array(GALLERY_FOLDER.$_POST[$filefield][$i]['preload']['name'], getGallery()))
$_POST[$filefield][$i]['file']['name']=GALLERY_FOLDER.$_POST[$filefield][$i]['preload']['name'];
break; }
case 'recurse': { if (is_file(IMAGE_FOLDER.$_SESSION['picName'])) {
rename(IMAGE_FOLDER.$_SESSION['picName'], UPLOAD_DEST.$_SESSION['picName']);
addUnique($_SESSION['uploads'],
$_POST[$filefield][$i]['file']['name']=UPLOAD_DEST.$_SESSION['picName'] );
$_SESSION['picName']=newPicName();
break; } }
case 'false':
default: {
if (($upLoad=getUploadedFile($filefield, $i, UPLOAD_DEST, RainbowBuilder::filetypes(), TRUE))!==NULL)
addUnique($_SESSION['uploads'], $_POST[$filefield][$i]['file']['name']=$upLoad);
else {unset($_POST[$filefield][$i]); continue 2;} } }
$_POST[$filefield][$i]['file']['scalable']=$_POST[$filefield][$i]['scalable']; }
$_POST[$filefield]=array_merge($_POST[$filefield]); }
Function newPicName() {return 'newRainbow'.(string)rand(0, 10000).'[0].png';}
Function updatePicName($i) {return '[' . (string)(((int)$i)+1) . ']';}
Function addUnique(&$A, $d) {if (!in_array($d, $A)) $A[]=$d;}
// our internal file names for uploaded files have a folder and a session-id prefixed.
// we don't want to show that to the user.
Function username($file) {$file=basename($file); return substr($file, strpos($file, '.')+1);}
Function sanitize($submission) {
if (is_array($submission)) {array_walk($submission, 'sanitize'); return $submission;}
else if (is_string($submission)) return htmlspecialchars($submission, ENT_QUOTES);
else return $submission; }
$_POST=sanitize($_POST);
Function getGallery ($i=NULL) { Static $gallery;
if (!is_array($gallery)) { $gallery=array();
$GF=opendir(GALLERY_FOLDER);
while ($Dentry=readdir($GF)) {
if ($Dentry=="." or $Dentry==".." or !in_array(strrchr($Dentry, "."), RainbowBuilder::filetypes())) continue;
$gallery[]=GALLERY_FOLDER.$Dentry; }
closedir($GF); }
return ($i===NULL) ? $gallery : $gallery[$i]; }
try {
require_once 'plug_in_Shapes/RadialShape/ComplexStar.php'; //so we can retrieve the names of the stars
require_once 'file_path_exists.php';
if (PHP_MAJOR_VERSION>=5 and PHP_MINOR_VERSION>=3 and file_path_exists('plug_in_Shapes/RadialShape/Rainbow~IrregularPolygons.php'))
include_once 'plug_in_Shapes/RadialShape/Rainbow~IrregularPolygons.php'; //the IrregularPolygon Class which manages a collection of arrays defining polygons
if ((ALLOW_GALLERY & SHOW) and $_POST['gallery']==='view Gallery')
echo '<h3>Gallery is shown at the bottom of this page</h3>';
?>
<form method='POST' action='<?php echo $_SERVER['PHP_SELF']; ?>' enctype='multipart/form-data'>
<?php require 'color-pickers/SoftMoon.color-pickers.php' ?>
<fieldset><legend>What style of graphic?</legend>
<fieldset id='styler'>
<ul>
<li><label><input type='radio' name='style' value='line' onclick='setStyle(this.value);' <?php
if (!isset($_POST['style']) or $_POST['style']==='line') echo 'checked="checked" '; ?>/>linear/block<span> —primitive & dirty, but fast</span></label></li>
<li><label><input type='radio' name='style' value='circle' onclick='setStyle(this.value);' <?php
if ($_POST['style']==='circle') echo 'checked="checked" '; ?>/>circle</label></li>
<li><label><input type='radio' name='style' value='ellipse' onclick='setStyle(this.value);' <?php
if ($_POST['style']==='ellipse') echo 'checked="checked" '; ?>/>ellipse</label></li>
<li><label><input type='radio' name='style' value='complex' onclick='setStyle(this.value);' <?php
if ($_POST['style']==='complex') echo 'checked="checked" '; ?>/>complex<span> —from simple ellipses to complex flowers</span></label></li>
<li><label><input type='radio' name='style' value='flower' onclick='setStyle(this.value);' <?php
if ($_POST['style']==='flower') echo 'checked="checked" '; ?>/>flower<span> —(epicycloidic)</span></label></li>
<li><label><input type='radio' name='style' value='superstar' onclick='setStyle(this.value);' <?php
if ($_POST['style']==='superstar') echo 'checked="checked" '; ?>/><select name='superstar' onmouseover='if (navigator.userAgent.match( /MSIE|Firefox/ )) this.title="YOU MUST DOUBLE CLICK and/or HOLD DOWN THE BOTTON FOR 1 SECOND to OPEN THIS PULLDOWN";'
onclick='this.previousSibling.checked=true; this.previousSibling.onclick(); var s=this; setTimeout(function() {s.focus();}, 1);' onchange='this.previousSibling.checked=true; this.previousSibling.onclick();'>
<?php foreach (ComplexStar::getStars() as $ss) {
echo "\t\t\t<option",($_POST['superstar']===$ss) ? ' selected="selected"' : "",">$ss</option>\n"; } ?>
</select><span> —complex stars that twist and shimmer</span></label></li>
<li><label><input type='radio' name='style' value='star' onclick='setStyle(this.value);' <?php
if ($_POST['style']==='star') echo 'checked="checked" '; ?>/>star</label></li>
<li><label><input type='radio' name='style' value='polygon' onclick='setStyle(this.value);' <?php
if ($_POST['style']==='polygon') echo 'checked="checked" '; ?>/>polygon<span> —all sides & angles equil (regular polygon)</span></label></li>
<?php if (class_exists('IrregularPolygons')): ?>
<li><label><input type='radio' name='style' value='polygonic' onclick='setStyle(this.value);' <?php
if ($_POST['style']==='polygonic') echo 'checked="checked" '; ?>/><select name='irregularPolygon' onmouseover='if (navigator.userAgent.match( /MSIE|Firefox/ )) this.title="YOU MUST DOUBLE CLICK and/or HOLD DOWN THE BOTTON FOR 1 SECOND to OPEN THIS PULLDOWN";'
onclick='this.previousSibling.checked=true; this.previousSibling.onclick(); var s=this; setTimeout(function() {s.focus();}, 1);' onchange='this.previousSibling.checked=true; this.previousSibling.onclick();'>
<?php foreach (IrregularPolygons::getNames() as $n) {
echo "\t\t\t<option",($_POST['irregularPolygon']===$n) ? ' selected="selected"' : "",">$n</option>\n";} ?>
</select><span> —custom sided and user-defined (irregular polygons)</span></label></li>
<?php endif; ?>
<li><label><input type='radio' name='style' value='fountain' onclick='setStyle(this.value);' <?php
if ($_POST['style']==='fountain') echo 'checked="checked" '; ?>/>fountain</label></li>
<li><label><input type='radio' name='style' value='basic' onclick='setStyle(this.value);' <?php
if ($_POST['style']==='basic') echo 'checked="checked" '; ?>/>basic-block</label></li>
<li><label><input type='radio' name='style' value='split' onclick='setStyle(this.value);' <?php
if ($_POST['style']==='split') echo 'checked="checked" '; ?>/>split-block</label></li>
<li><fieldset><label><input type='radio' name='style' value='mask' onclick='setStyle(this.value);' <?php
if ($_POST['style']==='mask') echo 'checked="checked" '; ?>/>user mask<span> —(bright foreground on near-black background)</span></label>
<fieldset id='masks'><legend>mask file</legend>
<label>¿<input type='checkbox' name='mask[0][scalable]' value='true' <?php echo
($_POST['mask']['0']['scalable']) ? "checked='checked' " : ''; ?>/>
scalable?<span>¿resample (resize) this image according to the master scale?</span></label>
<?php //echo "<pre>",var_dump($_FILES),"</pre>";
if ($_FILES['mask']['name'][0]['file'] or $_POST['mask']['0']['preload']): echo
"<label><input type='radio' name='mask[0][preload]' value='true' checked='checked' />use ",username($_SESSION['mask']),
"</label>\n<label for='mask[0][file]'><input type='radio' name='mask[0][preload]' value='' />new file:</label>";
endif;
?><input type='file' name='mask[0][file]' size='17' accept='image/png,image/gif,image/jpeg' /></fieldset></fieldset></li>
</ul>
<fieldset id='superstyle'><label><input type='checkbox' name='superstyle' value='nova' onclick='setStyle(this.value);' <?php
if ($_POST['superstyle']==='nova') echo 'checked="checked" '; ?>/>nova</label>
<label><input type='checkbox' name='superstyle' value='supernova' onclick='setStyle(this.value);' <?php
if ($_POST['superstyle']==='supernova') echo 'checked="checked" '; ?>/>supernova<span>¡Warning! This is a <em>slow</em> process!</span></label>
<label><input type='checkbox' name='superstyle' value='nebula' onclick='setStyle(this.value);' <?php
if ($_POST['superstyle']==='nebula') echo 'checked="checked" '; ?>/>nebula<span>¡Warning! This is a <em>very slow</em> process!</span></label>
<label><input type='checkbox' name='superstyle' value='quasar' onclick='setStyle(this.value);' <?php
if ($_POST['superstyle']==='quasar') echo 'checked="checked" '; ?>/>quasar<span>¡Warning! This is a <em>very slow</em> process!</span></label>
<label><input type='checkbox' name='superstyle' value='hub' onclick='setStyle(this.value);' <?php
if ($_POST['superstyle']==='hub') echo 'checked="checked" '; ?>/>hub</label>
<label><input type='checkbox' name='superstyle' value='wheel' onclick='setStyle(this.value);' <?php
if ($_POST['superstyle']==='wheel') echo 'checked="checked" '; ?>/>wheel<span>¡Warning! This is a <em>slow</em> process!</span></label>
<label><input type='checkbox' name='superstyle' value='spokes' onclick='setStyle(this.value);' <?php
if ($_POST['superstyle']==='spokes') echo 'checked="checked" '; ?>/>spokes<span>¡Warning! This is a <em>very slow</em> process!</span></label>
<label><input type='checkbox' name='superstyle' value='fan' onclick='setStyle(this.value);' <?php
if ($_POST['superstyle']==='fan') echo 'checked="checked" '; ?>/>fan<span>¡Warning! This is a <em>very slow</em> process!</span></label>
<fieldset><legend>quasar overlap</legend>
<label><input type='radio' name='rotate[sectors_3]' value='clockwise' <?php if ($_POST['rotate']['sectors_3']!=='counter-clockwise') echo 'checked="checked" '; ?>/>clockwise</label>
<label><input type='radio' name='rotate[sectors_3]' value='counter-clockwise' <?php if ($_POST['rotate']['sectors_3']==='counter-clockwise') echo 'checked="checked" '; ?>/>counter-clockwise</label>
</fieldset></fieldset>
<fieldset id='rotate'><legend>rotate (degrees)<span><strong>+</strong> clockwise<br /><strong>−</strong> counter-clockwise</span></legend>
<div><!-- fix Firefox - I've had to overhaul and re-write the CSS and add superfluous HTML tags because this browser and Google's Chrome DON'T work with “modern” design techniques. -->
<label>graphic<span> (x-y axes)</span><input type='text' name='rotate[graph]' size='7' maxlength='7' value='<?php echo round($_POST['rotate']['graph'], 3),'°'; ?>' onkeyup='charFilter(this, {filters:charFilter.degrees})' onblur='this.value=charFilter(this, flagFinal)+"°"' /></label>
<label>nova<span> (x-y axes)</span><input type='text' name='rotate[sectors_2]' size='7' maxlength='7' value='<?php echo round($_POST['rotate']['sectors_2'], 3),'°'; ?>' onkeyup='charFilter(this, {filters:charFilter.degrees})' onblur='this.value=charFilter(this, flagFinal)+"°"' /></label>
<label>slices<span> (around x-y axes)</span><input type='text' name='rotate[pie_slices]' size='7' maxlength='7' value='<?php echo round($_POST['rotate']['pie_slices'], 3),'°'; ?>' onkeyup='charFilter(this, {filters:charFilter.degrees})' onblur='this.value=charFilter(this, flagFinal)+"°"' /></label>
<label>spiral<span> (around x-y axes)</span><input type='text' name='spiral[rotate]' size='7' maxlength='7' value='<?php echo round($_POST['spiral']['rotate'], 3),'°'; ?>' onkeyup='charFilter(this, {filters:charFilter.degrees})' onblur='this.value=charFilter(this, flagFinal)+"°"' /></label>
<label>points<span> (around x-y axes)</span><input type='text' name='rotate[sectors_1]' size='7' maxlength='7' value='<?php echo round($_POST['rotate']['sectors_1'], 3),'°'; ?>' onkeyup='charFilter(this, {filters:charFilter.degrees})' onblur='this.value=charFilter(this, flagFinal)+"°"' /></label>
<label>pinwheel<span> (percent of point)</span><input type='text' name='rotate[pinwheel]' size='4' maxlength='7' value='<?php echo is_numeric($_POST['rotate']['pinwheel']) ? round($_POST['rotate']['pinwheel'], 3) : '100'; ?>' onkeyup='charFilter(this, signedPercent)' onblur='charFilter(this, finalSignedPercent)' />%</label>
<fieldset>
<label>twist<span> (percent of point)</span><input type='text' name='rotate[twist][amount]' size='4' maxlength='7' value='<?php echo is_numeric($_POST['rotate']['twist']['amount']) ? round($_POST['rotate']['twist']['amount'], 3) : '0'; ?>' onkeyup='charFilter(this)' onblur='charFilter(this, flagFinal)' />%</label>
<label>depth<span> (from edge of star inward)</span><input type='text' name='rotate[twist][depth]' size='4' maxlength='7' value='<?php echo is_numeric($_POST['rotate']['twist']['depth']) ? round($_POST['rotate']['twist']['depth'], 3) : '100'; ?>' onkeyup='charFilter(this)' onblur='charFilter(this, {min:(-Infinity), max:100, dflt:100, filters:charFilter.limitedNumbers, flagFinal:true})' />%</label>
<label>extent<span> (from center of star outward)<br /> (click for Infinity:
<button name='inf' type='button' onclick='infinity(this)'>∞</button> )</span><input type='text' name='rotate[twist][extent]' size='4' maxlength='7' value='<?php echo is_numeric($_POST['rotate']['twist']['extent']) ? round($_POST['rotate']['twist']['extent'], 3) : ($_POST['rotate']['twist']['extent']==='∞' ? '∞' : '100'); ?>' onkeyup='charFilter(this, infinatePercent)' onblur='charFilter(this, finalInfinatePercent)' />%</label>
</fieldset>
<fieldset>
<label>shimmer<span> (percent of point)</span><input type='text' name='rotate[shimmer][amount]' size='4' maxlength='7' value='<?php echo is_numeric($_POST['rotate']['shimmer']['amount']) ? round($_POST['rotate']['shimmer']['amount'], 3) : '0'; ?>' onkeyup='charFilter(this)' onblur='charFilter(this, {min:-100, max:100, dflt:"0", filters:charFilter.limitedNumbers, flagFinal:true})' />%</label>
<label>wiggles<span> (number of shimmers)</span><input type='text' name='rotate[shimmer][wiggles]' size='4' maxlength='7' value='<?php echo is_numeric($_POST['rotate']['shimmer']['wiggles']) ? round($_POST['rotate']['shimmer']['wiggles'], 3) : '2'; ?>' onkeyup='charFilter(this, posInteger)' onblur='charFilter(this, finalPosInteger)' /></label>
<label>expansion<span> (percent of ‘natural’)</span><input type='text' name='rotate[shimmer][expand]' size='4' maxlength='7' value='<?php echo is_numeric($_POST['rotate']['shimmer']['expand']) ? round($_POST['rotate']['shimmer']['expand'], 3) : '100'; ?>' onkeyup='charFilter(this, infinatePercent)' onblur='charFilter(this, finalInfinatePercent)' />%</label>
<label>depth<span> (from edge of star inward)</span><input type='text' name='rotate[shimmer][depth]' size='4' maxlength='7' value='<?php echo is_numeric($_POST['rotate']['shimmer']['depth']) ? round($_POST['rotate']['shimmer']['depth'], 3) : '100'; ?>' onkeyup='charFilter(this)' onblur='charFilter(this, {min:(-Infinity), max:100, dflt:100, filters:charFilter.limitedNumbers, flagFinal:true})' />%</label>
<label>extent<span> (from center of star outward)<br /> (click for Infinity:
<button name='inf' type='button' onclick='infinity(this)'>∞</button> )</span><input type='text' name='rotate[shimmer][extent]' size='4' maxlength='7' value='<?php echo is_numeric($_POST['rotate']['shimmer']['extent']) ? round($_POST['rotate']['shimmer']['extent'], 3) : ($_POST['rotate']['shimmer']['extent']==='∞' ? '∞' : '100'); ?>' onkeyup='charFilter(this, infinatePercent)' onblur='charFilter(this, finalInfinatePercent)' />%</label>
</fieldset>
</div>
</fieldset>
<fieldset><legend>¿ extend colorband ?</legend>
<label><input type='radio' name='extend[doso]' value='false' <?php
if ($_POST['extend']['doso']!=='reflect' and $_POST['extend']['doso']!=='repeat') echo 'checked="checked" '; ?>/>No</label>
<label>reflect<input type='radio' name='extend[doso]' value='reflect' <?php
if ($_POST['extend']['doso']==='reflect') echo 'checked="checked" '; ?>/></label>
<label><input type='text' name='extend[times]' size='1' maxlength='2' value='<?php
echo (is_numeric($_POST['extend']['times'])) ? round($_POST['extend']['times']) : '∞'; ?>' onkeyup='charFilter(this, infinateInteger)' onblur='charFilter(this, finalInfinateInteger)' />times<span>(click for Infinity:
<button name='inf' type='button' onclick='infinity(this)'>∞</button> )</span></label>
<label>repeat<input type='radio' name='extend[doso]' value='repeat' <?php
if ($_POST['extend']['doso']==='repeat') echo 'checked="checked" '; ?>/></label>
</fieldset>
<fieldset id='spiral'><legend>apply colorband</legend>
<label><input type='checkbox' name='color[reverse]' value='true' <?php if ($_POST['color']['reverse']==='true') echo 'checked="checked" '; ?>/>in reverse</label>
<label><input type='radio' name='spiral[doso]' value='radial' onchange='setSpiral(this)' <?php if ($_POST['spiral']['doso']!=='spiral') echo 'checked="checked" '; ?>/>radially</label>
<label><input type='radio' name='spiral[doso]' value='spiral' onchange='setSpiral(this)' <?php if ($_POST['spiral']['doso']==='spiral') echo 'checked="checked" '; ?>/>in spiral:</label>
<label>sectors<input type='text' name='spiral[sectors]' size='4' maxlength='7' value='<?php echo is_numeric($_POST['spiral']['sectors']) ? round($_POST['spiral']['sectors'], 3) : 1; ?>' onkeyup='charFilter(this, posInteger)' onblur='charFilter(this, finalPosInteger)' /></label>
<label>twist rate<span> (percent of sector)</span><input type='text' name='spiral[factor]' size='4' maxlength='7' value='<?php echo is_numeric($_POST['spiral']['factor']) ? round($_POST['spiral']['factor'], 3) : 100; ?>' onkeyup='charFilter(this, percent)' onblur='charFilter(this, finalUnlimitedPercent)' />%</label>
<label><input type='radio' name='spiral[twist]' value='clockwise' <?php if ($_POST['spiral']['twist']!=='counter-clockwise') echo 'checked="checked" '; ?>/>clockwise</label>
<label><input type='radio' name='spiral[twist]' value='counter-clockwise' <?php if ($_POST['spiral']['twist']==='counter-clockwise') echo 'checked="checked" '; ?>/>counter-clockwise</label>
<label>¿<input type='checkbox' name='spiral[squish]' value='true' <?php if ($_POST['spiral']['squish']=='true') echo " checked='checked'"; ?> />squish to h/w ratio?</label>
</fieldset>
<fieldset id='hw'><legend>height/width</legend>
<label><input type='radio' name='hw[sizeTo]' value='shape' <?php if ($_POST['hw']['sizeTo']!='radius') echo 'checked="checked" '; ?>/>size to shape</label>
<label><input type='radio' name='hw[sizeTo]' value='radius' <?php if ($_POST['hw']['sizeTo']=='radius') echo 'checked="checked" '; ?>title='best for (super)novas, nebulae, quasars' />size to radius</label>
<label>ratio<span>of graphic element(s)</span><input type='text' name='hw[ratio_1]' size='4' maxlength='7' value='<?php
echo is_numeric($_POST['hw']['ratio_1']) ? round($_POST['hw']['ratio_1'], 3) : "100"; ?>' onkeyup='charFilter(this, percent)' onblur='charFilter(this, finalUnlimitedPercent)' />%</label>
<label>swell<input type='text' name='hw[swell]' size='4' maxlength='7' value='<?php
echo is_numeric($_POST['hw']['swell']) ? round($_POST['hw']['swell'], 3) : "100"; ?>' onkeyup='charFilter(this, percent)' onblur='charFilter(this, finalUnlimitedPercent)' />%</label>
<label>petals<input type='text' name='hw[sectors_1]' size='4' maxlength='4' value='<?php
echo is_numeric($_POST['hw']['sectors_1']) ? round($_POST['hw']['sectors_1']) : "7"; ?>' onkeyup='charFilter(this, posInteger)' onblur='charFilter(this, {min:2, max:Infinity, flagFinal:true, filters:charFilter.positiveIntegers})' /></label>
<label>depth<input type='text' name='hw[depth]' size='4' maxlength='7' value='<?php
echo is_numeric($_POST['hw']['depth']) ? round($_POST['hw']['depth'], 3) : "61.8"; ?>' onkeyup='charFilter(this, percent)' onblur='charFilter(this, finalUnlimitedPercent)' />%</label>
<label>span<input type='text' name='hw[span]' size='4' maxlength='7' value='<?php
echo is_numeric($_POST['hw']['span']) ? round($_POST['hw']['span'], 3) : "100"; ?>' onkeyup='charFilter(this, percent)' onblur='charFilter(this, finalUnlimitedPercent)' />%</label>
<fieldset><legend>of nova</legend>
<label>ratio<input type='text' name='hw[ratio_2]' size='4' maxlength='7' value='<?php
echo is_numeric($_POST['hw']['ratio_2']) ? round($_POST['hw']['ratio_2'], 3) : "100"; ?>' onkeyup='charFilter(this, percent)' onblur='charFilter(this, finalUnlimitedPercent)' />%</label>
<label>size<span>of graphic elements</span><input type='text' name='hw[size_2]' size='4' maxlength='7' value='<?php
echo is_numeric($_POST['hw']['size_2']) ? round($_POST['hw']['size_2']) : "50"; ?>' onkeyup='charFilter(this, percent)' onblur='charFilter(this, {min:1, max:Infinity, dflt:50, filters:positives, flagFinal:true})' />%</label>
<label>shift<span>graphic elements in/out</span><input type='text' name='hw[shift_2]' size='4' maxlength='7' value='<?php
echo is_numeric($_POST['hw']['shift_2']) ? round($_POST['hw']['shift_2']) : "0"; ?>' onkeyup='charFilter(this)' onblur='charFilter(this, {min:-98, max:Infinity, dflt:0, filters:charFilter.limitedNumbers, flagFinal:true})' />%</label>
<label>sectors<input type='text' name='hw[sectors_2]' size='4' maxlength='4' value='<?php
echo is_numeric($_POST['hw']['sectors_2']) ? round($_POST['hw']['sectors_2']) : "7"; ?>' onkeyup='charFilter(this, posInteger)' onblur='charFilter(this, {min:2, max:Infinity, flagFinal:true, filters:charFilter.positiveIntegers})' /></label>
</fieldset>
</fieldset>
<fieldset id='pie'><legend>pie slices: by # or degrees<span>calculated from 3:00, counter-clockwise<br />(¡slices may also all be rotated!)</span></legend>
<label>¿<input type='checkbox' name='pie[squish]' value='true' <?php if ($_POST['pie']['squish']=='true') echo " checked='checked'"; ?> />squish to h/w ratio?</label>
<table>
<tr><th>↓<</th><th>slice #</th><th>of total</th></tr>
<tr><th></th><th>to° ←</th><th>← from°</th></tr>
<?php $c=(is_array($_POST['pie']) ? count($_POST['pie']) : 0); for ($i=0; $i<=$c; $i++) {
// the Function “is_number” will only be loaded when the Rainbow Class is loaded...
if ($i==$c or is_number($_POST['pie'][$i]['to']) and is_number($_POST['pie'][$i]['from'])): ?>
<tr><td><input type='checkbox' name='pie[<?php echo $i; ?>][sliceFlag]' value='true'<?php if ($_POST['pie'][$i]['sliceFlag']=='true') echo " checked='checked'"; ?> onclick='setPieType(this);' title='by slice (numbered) of (total)' /></td>
<td><input type='text' <?php echo "name='pie[$i][to]' value='",$_POST['pie'][$i]['to'],"'"; ?> size='7' maxlength='7' onfocus='tabbedOut=false' onkeydown='catchTab(event)' onkeyup='setPieType(this)' onblur='setPieType(this, flagFinal); pieSlice.popNewField(this.parentNode.parentNode)' /></td>
<td><input type='text' <?php echo "name='pie[$i][from]' value='",$_POST['pie'][$i]['from'],"'"; ?> size='7' maxlength='7' onfocus='tabbedOut=false' onkeydown='catchTab(event)' onkeyup='setPieType(this)' onblur='setPieType(this, flagFinal); pieSlice.popNewField(this.parentNode.parentNode);' /></td>
<td class='formOptions'>
<span onclick='pieSlice.popNewField(this.parentNode.parentNode, {doso:"delete"})'>←delete this slice</span>
</td>
</tr>
<?php endif; } ?>
</table>
</fieldset>
<!-- <fieldset style='display: none'><legend>radial point</legend>
<label>x-offset<input type='text' name='xOff' size='4' maxlength='4' value='<?php echo $_POST['xOff']; ?>' onkeyup='charFilter(this)' onblur='charFilter(this, flagFinal)' /></label>
<label>y-offset<input type='text' name='yOff' size='4' maxlength='4' value='<?php echo $_POST['yOff']; ?>' onkeyup='charFilter(this)' onblur='charFilter(this, flagFinal)' /></label>
</fieldset> -->
</fieldset>
<fieldset id='background'><legend>background</legend>
<fieldset>
<label>color<input type='text' name='background[color]' value='<?php echo $_POST['background']['color']; ?>'
size='20' maxlength='20' onkeydown='catchTabPopDown(event, this);' onkeyup='ColorPicker.colorSwatch(this)'
onfocus='ColorPicker.showTable(true, this)' onblur='ColorPicker.showTable(false, this); ColorPicker.colorSwatch(this);'
/><span class='colorSwatch'> </span></label>
<label>¿<input type='checkbox' name='background[transp][flag]' value='true'<?php
echo ($_POST['background']['transp']['flag']==='true') ? ' checked="checked"' : ""; ?>
onclick='setTransp(this);' />?transparency<span><input
type='text' name='background[transp][percent]' value='<?php echo $_POST['background']['transp']['percent']; ?>'
size='7' maxlength='7' onkeyup='charFilter(this, percent)' onblur='charFilter(this, finalPercent0)'
/>%</span></label>
<label>¿<input type='checkbox' name='background[transp][apply][flag]' value='true'<?php
echo ($_POST['background']['transp']['apply']['flag']==='true') ? ' checked="checked"' : ""; ?>
onclick='setTransp(this);' />?apply final transparency<span><input
type='text' name='background[transp][apply][percent]' value='<?php echo $_POST['background']['transp']['apply']['percent']; ?>'
size='7' maxlength='7' onkeyup='charFilter(this, percent)' onblur='charFilter(this, finalPercent0)'
/>%</span></label>
</fieldset>
<div>
<?php
Function showUploadFields($z, $tab) { global $Rainbow;
$cu=count($_SESSION['uploads']);
$cg=(ALLOW_GALLERY & ACCESS) ? count(getGallery()) : 0;
$c=((DUMP_UPLOADS) ? 0 : count($_POST[$z]));
for ($i=0; $i<=$c; $i++) {
echo
"$tab<fieldset class='$z'><legend>$z image</legend>\n"; ?>
<div class='formOptions'>
<span onclick='userFile.popNewField(this.parentNode.parentNode, {doso:"insert"})'>↑insert new image↑</span>
<span onclick='userFile.popNewField(this.parentNode.parentNode, {doso:"delete"})'>←delete this image</span>
</div><?php echo
"$tab<label>¿<input type='checkbox' name='{$z}[$i][fitto]' value='true' ",
($_POST[$z][$i]['fitto']) ? "checked='checked' " : '', "/>",
"fit to this?<span>¿include this image when figuring overall background size?</span></label>\n",
"$tab<label>¿<input type='checkbox' name='{$z}[$i][scalable]' value='true' ",
($_POST[$z][$i]['scalable']) ? "checked='checked' " : '', "/>",
"scalable?<span>¿resample (resize) this image according to the master scale?</span></label>\n";
if ($cu+$cg>0) { echo
"$tab <label><input type='radio' name='{$z}[$i][preload][flag]' value='true' ", ($i<$c) ? "checked='checked'" : "",
" onchange='if (this.checked) userFile.popNewField(this.parentNode.parentNode)' />\n",
"$tab use <select name='{$z}[$i][preload][name]'>\n";
for ($j=0; $j<$cu; $j++) { echo
"$tab <option", ($_POST[$z][$i]['file']['name']===$_SESSION['uploads'][$j]) ? " selected='selected'" : "",
">",username($_SESSION['uploads'][$j]),"</option>\n"; }
for ($j=0; $j<$cg; $j++) { echo
"$tab <option", ($_POST[$z][$i]['file']['name']===getGallery($j)) ? " selected='selected'" : "",
">",basename(getGallery($j)),"</option>\n"; }
echo "$tab </select></label>\n"; }
if (is_object($Rainbow) and $Rainbow->successful) echo
"$tab <label><input type='radio' name='{$z}[$i][preload][flag]' value='recurse' onchange='if (this.checked) userFile.popNewField(this.parentNode.parentNode)' />\n",
"$tab use the current graphic (page top)</label>\n";
if ($cu+$cg>0 or is_object($Rainbow) and $Rainbow->successful) echo
"$tab <label><input type='radio' name='{$z}[$i][preload][flag]' value='false'",
($i==$c or $_POST[$z][$i]['file']['name']=="") ? " checked='checked'" : "",
"onchange='if (this.checked) userFile.popNewField(this.parentNode.parentNode)' />\n";
else echo "$tab <label>\n";
echo
"$tab upload new $z file:\n",
"$tab <input type='file' name='{$z}[$i][file]' size='17' accept='image/png,image/gif,image/jpeg'\n",
"$tab onkeydown='catchTab(event)' onfocus='tabbedOut=false'\n",
// "$tab onblur='userFile.popNewField(this.parentNode.parentNode, fileOpts)'\n",
"$tab onchange='userFile.popNewField(this.parentNode.parentNode)'\n",
"$tab /></label>\n",
"$tab <fieldset>\n",
"$tab <select name='{$z}[$i][position]' onchange='setPosition(this, true);'>\n",
"$tab <option", ($_POST[$z][$i]['position']==NULL or $_POST[$z][0]['position']==="center") ? ' selected="selected"' : "", ">center</option>\n",
"$tab <option", ($_POST[$z][$i]['position']==="tiled") ? ' selected="selected"' : "", ">tiled</option>\n",
"$tab <option", ($_POST[$z][$i]['position']==="x,y") ? ' selected="selected"' : "", ">x,y</option>\n",
"$tab </select>\n",
"$tab <label><input type='text' name='{$z}[$i][xy]' value='",
(is_array($_POST[$z][$i]['xy'])) ? implode(",", $_POST[$z][$i]['xy']) : $_POST[$z][$i]['xy'],
"' size='8' maxlength='8'\n",
"$tab onkeydown='catchTab(event)' onkeyup='charFilter(this, coordinate)' onfocus='tabbedOut=false'\n",
"$tab onblur='charFilter(this, finalCoordinate);' /><span>(x, y) position of upper-left corner</span></label>\n",
"$tab <label><input type='text' name='{$z}[$i][wh]' value='",
(is_array($_POST[$z][$i]['wh'])) ? implode(",", $_POST[$z][$i]['wh']) : $_POST[$z][$i]['wh'],
"' size='8' maxlength='8'\n",
"$tab onkeydown='catchTab(event)' onkeyup='charFilter(this, dimensions_2D)' onfocus='tabbedOut=false'\n",
"$tab onblur='charFilter(this, finalDimensions_2D);' /><span>(width, height) count tiles</span></label>\n",
"$tab </fieldset>\n",
"$tab <fieldset><legend>blend file transparencies?</legend>\n",
"$tab <label><input type='radio' name='{$z}[$i][alphablend]' value='into background'", ($_POST[$z][$i]['alphablend']!=="retain transp") ? ' checked="checked"' : "", "/>\n",
"$tab into", ($z=='foreground') ? ' rainbow &' : "", " background</label>\n",
"$tab <label><input type='radio' name='{$z}[$i][alphablend]' value='retain transp'", ($_POST[$z][$i]['alphablend']==="retain transp") ? ' checked="checked"' : "", "/>\n",
"$tab retain transparency — replace underlying pixels</label>\n",
"$tab </fieldset>\n",
"$tab <label>Master Opacity: <input type='text' name='{$z}[$i][opacity]' value='",
($_POST[$z][$i]['opacity']) ? $_POST[$z][$i]['opacity'] : '100', "'\n",
"$tab size='4' maxlength='7' onkeyup='charFilter(this, percent)' onblur='charFilter(this, finalPercent)' />%</label>\n",
"$tab</fieldset>\n";
if ($_POST[$z][$i]['file']['name']=="") $i=$c; } }
showUploadFields("background", "\t\t\t");
?>
</div>
</fieldset>
<div>
<?php showUploadFields("foreground", "\t\t"); ?>
</div>
<fieldset id='dimensions'><legend>overall image dimensions</legend>
<label>¿<input type='checkbox' name='dimension[fitto]' value='true' <?php
if ($_POST['dimension']['fitto']) echo "checked='checked' "; ?>/>
fit to this?<span>¿include your created graphic when figuring overall background size?</span></label>
<div>
<select name='dimension[type]' onchange='setDimensions(this)'>
<option<?php if ($_POST['dimension']['type']==NULL or $_POST['dimension']['type']==="auto to rainbow") echo ' selected="selected"'; ?>>auto to rainbow</option>
<option<?php if ($_POST['dimension']['type']==="with margin") echo ' selected="selected"'; ?>>with margin</option>
<option<?php if ($_POST['dimension']['type']==="absolute") echo ' selected="selected"'; ?>>absolute</option>
<option<?php if ($_POST['dimension']['type']==="fit to select images") echo ' selected="selected"'; ?>>fit to select images</option>
</select>
<label>Master Scale: <input type='text' name='dimension[scale]' value='<?php echo
(is_numeric($_POST['dimension']['scale'])) ? $_POST['dimension']['scale'] : '100'; ?>' size='4' maxlength='7'
onkeyup='charFilter(this, percent)' onblur='charFilter(this, finalUnlimitedPercent)' />%</label>
<label>¿scale margin <input type='checkbox' name='dimension[¿scale_margin]' value='true' <?php
if ($_POST['dimension']['scale_margin']) echo "checked='checked '"; ?>/>?</label>
</div>
<div>
<fieldset><legend>margin (pixels)<span>┼ ☼</span></legend>
<fieldset><div><input type='radio' name='dimension[margin][origin][left]' value='center' title='from graphic center' <?php if ($_POST['dimension']['margin']['origin']['left']==='center') echo "checked='checked '";
?>/><input type='radio' name='dimension[margin][origin][left]' value='edge' title='from graphic edge' <?php if ($_POST['dimension']['margin']['origin']['left']!=='center') echo "checked='checked '";
?>/></div><input type='text' name='dimension[margin][left]' value="<?php echo round($_POST['dimension']['margin']['left']); ?>" size='3' maxlength='6' onkeyup='charFilter(this)' onblur='charFilter(this, flagFinal)'
/>left <label>→<input type='checkbox' name='dimension[margin][left]' title='auto center' value='center' <?php if ($_POST['dimension']['margin']['left']=='center') echo 'checked="checked" '; ?>onclick='autocenter(this);' />←</label></fieldset>
<fieldset><div><input type='radio' name='dimension[margin][origin][top]' value='center' title='from graphic center' <?php if ($_POST['dimension']['margin']['origin']['top']==='center') echo "checked='checked '";
?>/><input type='radio' name='dimension[margin][origin][top]' value='edge' title='from graphic edge' <?php if ($_POST['dimension']['margin']['origin']['top']!=='center') echo "checked='checked '";
?>/></div><input type='text' name='dimension[margin][top]' value="<?php echo round($_POST['dimension']['margin']['top']); ?>" size='3' maxlength='6' onkeyup='charFilter(this)' onblur='charFilter(this, flagFinal)'
/>top <label>↓<input type='checkbox' name='dimension[margin][top]' title='auto center' value='center' <?php if ($_POST['dimension']['margin']['top']=='center') echo 'checked="checked" '; ?>onclick='autocenter(this);' />↑</label></fieldset>
<fieldset><div><input type='radio' name='dimension[margin][origin][right]' value='center' title='from graphic center' <?php if ($_POST['dimension']['margin']['origin']['right']==='center') echo "checked='checked '";
?>/><input type='radio' name='dimension[margin][origin][right]' value='edge' title='from graphic edge' <?php if ($_POST['dimension']['margin']['origin']['right']!=='center') echo "checked='checked '";
?>/></div><input type='text' name='dimension[margin][right]' value="<?php echo round($_POST['dimension']['margin']['right']); ?>" size='3' maxlength='6' onkeyup='charFilter(this)' onblur='charFilter(this, flagFinal)' />right</fieldset>
<fieldset><div><input type='radio' name='dimension[margin][origin][bottom]' value='center' title='from graphic center' <?php if ($_POST['dimension']['margin']['origin']['bottom']==='center') echo "checked='checked '";
?>/><input type='radio' name='dimension[margin][origin][bottom]' value='edge' title='from graphic edge' <?php if ($_POST['dimension']['margin']['origin']['bottom']!=='center') echo "checked='checked '";
?>/></div><input type='text' name='dimension[margin][bottom]' value="<?php echo round($_POST['dimension']['margin']['bottom']); ?>" size='3' maxlength='6' onkeyup='charFilter(this)' onblur='charFilter(this, flagFinal)' />bottom</fieldset>
</fieldset>
<label>width, height <input type='text' name='dimension[xy]' value="<?php echo
(is_array($_POST['dimension']['xy'])) ? implode(",", $_POST['dimension']['xy']) : $_POST['dimension']['xy'];
?>" size='8' maxlength='8' onkeyup='charFilter(this, dimensions_2D)' onblur='charFilter(this, finalDimensions_2D)' /> pixels</label>
</div>
</fieldset>
</fieldset>
<p>When all active color fields are filled,<br />
• press the TAB key or • click on this page outside of the color input-boxes<br />
to generate another color band set.<br />
Previously filled color bands that are cleared will be removed.</p>
<div>
<?php
$cnt=(is_array($_POST['color'])) ? count($_POST['color']) : 2; $htm='start'; $index=(-1);
for ($i=0; $i<=$cnt; $i++, $htm=(($i<$cnt) ? 'next' : 'end')) {
if ($index>=0 and $i<$cnt and $_POST['color'][$i]=="") continue; else $index++; ?>
<fieldset class='colorNode'>
<div class='formOptions'>
<span onclick='colorband.popNewField(getColorNode(this), {doso:"insert"})'>↑insert new color↑</span>
<span onclick='colorband.popNewField(getColorNode(this), {doso:"delete"})'>←delete this color</span>
</div>
<?php // class='",($index>0) ? "hiddenWhenFirst" : "hideBecauseFirst","'
echo"<fieldset class='hiddenWhenFirst'><legend>color gradient</legend>\n",
"<label>curve<select name='curve[type][$index]' onchange='setCurve(this)'>\n",
" <option",
(!isset($_POST['curve']) or $_POST['curve']['type'][$i]==='none') ? ' selected="selected"' : "",
">none</option>\n",
" <option", ($_POST['curve']['type'][$i]==='to start') ? ' selected="selected"' : "",
">to start</option>\n",
" <option", ($_POST['curve']['type'][$i]==='to center') ? ' selected="selected"' : "",
">to center</option>\n",
" <option", ($_POST['curve']['type'][$i]==='to end') ? ' selected="selected"' : "",
">to end</option>\n",
"</select></label>\n",
"<label>curve index<input type='text' name='curve[index][$index]' value='",
($_POST['curve']['index'][$i]) ? $_POST['curve']['index'][$i] : "1.000", "' size='5' maxlength='5' onkeydown='catchTab(event)' onkeyup='charFilter(this, indexValue)' onfocus='tabbedOut=false' onblur='charFilter(this, finalIndexValue); colorband.popNewField(getColorNode(this))' /></label>\n",
"</fieldset>\n\n",
"<fieldset class='hiddenWhenFirst'><legend>transparency gradient</legend>\n",
"<label>¿<input type='checkbox' name='transp[flag][$index]' value='true' onchange='setTransp(this)'",
($_POST['transp']['flag'][$i]==='true') ? ' checked="checked"' : "",
"/>transparency?</label>\n";
foreach (array('blend', 'pixel') as $t) { echo
"<fieldset class='transp_curve'><legend>$t</legend>\n",
"<label>curve<select name='transp[$t][curve][type][$index]' onchange='setCurve(this)'>\n",
" <option",
(!isset($_POST['transp'][$t]['curve']['type'][$i]) or $_POST['transp'][$t]['curve']['type'][$i]==='none') ? ' selected="selected"' : "",
">none</option>\n",
" <option", ($_POST['transp'][$t]['curve']['type'][$i]==='to start') ? ' selected="selected"' : "",
">to start</option>\n",
" <option", ($_POST['transp'][$t]['curve']['type'][$i]==='to center') ? ' selected="selected"' : "",
">to center</option>\n",
" <option", ($_POST['transp'][$t]['curve']['type'][$i]==='to end') ? ' selected="selected"' : "",
">to end</option>\n",
"</select></label>\n",
"<label>curve index<input type='text' name='transp[$t][curve][index][$index]' value='",
($_POST['transp'][$t]['curve']['index'][$i]) ? $_POST['transp'][$t]['curve']['index'][$i] : "1.000", "' size='5' maxlength='5' onkeydown='catchTab(event)' onkeyup='charFilter(this, indexValue)' onfocus='tabbedOut=false' onblur='charFilter(this, finalIndexValue); colorband.popNewField(getColorNode(this))' /></label>\n",
"</fieldset>\n"; }
echo
"<fieldset class='transp_apply'>\n",
"<label onmouseover=\"showTutor(this, 'transpTutor')\" onmouseout=\"showTutor(false)\"><input type='radio' name='transp[alphablend][$index]' value='into background' onchange='setTransp(this, this.value)' ",
(!isset($_POST['transp']['alphablend'][$i]) or $_POST['transp']['alphablend'][$i]==='into background') ? ' checked="checked"' : "",
"/>blend into background</label>\n",
"<label onmouseover=\"showTutor(this, 'transpTutor')\" onmouseout=\"showTutor(false)\"><input type='radio' name='transp[alphablend][$index]' value='replace background' onchange='setTransp(this, this.value)' ",
($_POST['transp']['alphablend'][$i]==='replace background') ? ' checked="checked"' : "",
"/>displace background — apply pixel transparency</label>\n",
"<label onmouseover=\"showTutor(this, 'transpTutor')\" onmouseout=\"showTutor(false)\"><input type='radio' name='transp[alphablend][$index]' value='blend & apply' onchange='setTransp(this, this.value)' ",
($_POST['transp']['alphablend'][$i]==='blend & apply') ? ' checked="checked"' : "",
"/>blend into background & apply pixel transparency</label>\n",
"</fieldset>\n</fieldset>\n\n",
"<label class='hiddenWhenFirst'>over <input type='text' name='hw[overSpan][$index]' value='{$_POST['hw']['overSpan'][$i]}' size='3' maxlength='3' onkeydown='catchTab(event)' onkeyup='charFilter(this, posInteger)' onfocus='tabbedOut=false' onblur='charFilter(this, finalSpan); colorband.popNewField(getColorNode(this))' /> pixels to:</label>\n",
"<div class='colorSelect'>\n",
"<label>$htm color<input type='text' name='color[$index]' value='{$_POST['color'][$i]}' size='20' maxlength='20' onkeydown='catchTabPopDown(event, this)' onkeyup='ColorPicker.colorSwatch(this)' onfocus='tabbedOut=false; ColorPicker.showTable(true, this);' onblur='ColorPicker.colorSwatch(this); ColorPicker.showTable(false, this); colorband.popNewField(getColorNode(this));' /><span class='colorSwatch'> </span></label>\n",
"<label>$htm blend transparency<input type='text' name='transp[blend][percent][$index]' value='{$_POST['transp']['blend']['percent'][$i]}' size='3' maxlength='6' onkeydown='catchTab(event)' onkeyup='charFilter(this, percent)' onfocus='tabbedOut=false' onblur='charFilter(this, finalPercent0); colorband.popNewField(getColorNode(this))' />%</label>\n",
"<label>$htm pixel transparency<input type='text' name='transp[pixel][percent][$index]' value='{$_POST['transp']['pixel']['percent'][$i]}' size='3' maxlength='6' onkeydown='catchTab(event)' onkeyup='charFilter(this, percent)' onfocus='tabbedOut=false' onblur='charFilter(this, finalPercent0); colorband.popNewField(getColorNode(this))' />%</label>\n",
"</div>\n",
"<label>$htm width<input type='text' name='hw[width][$index]' value='{$_POST['hw']['width'][$i]}' size='3' maxlength='3' onkeydown='catchTab(event)' onkeyup='charFilter(this, posInteger)' onfocus='tabbedOut=false' onblur='charFilter(this, finalWidth); colorband.popNewField(getColorNode(this))' /></label>\n",
"</fieldset>\n\n"; }
if (CHECK_PASSWORD) $pw=$Password->generate(IMAGE_FOLDER.'PWs/', PW_DB, FONTS_FOLDER, IMAGE_FOLDER.'PWs/');
?>
</div>
<?php if (CHECK_PASSWORD and is_string($pw['url'])): ?>
<label class='password'><input type='text' name='password' value="" />Enter the password:
<img src='<?php echo $pw['url']; ?>' alt='' /></label>
<?php endif; ?>
<input class='submit' type='submit' name='show' value='<?php echo ($_POST['show']) ? 'update' : 'show'; ?> Rainbow' />
<?php if (is_object($Rainbow) and $Rainbow->successful and (ALLOW_GALLERY & SAVETO)): ?>
<button class='submit' name='gallery' onclick='showGalleryForm(); return false;'>add to Gallery<span>image does not update</span></button>
<div id='fileinfo'>
<label>filename:<input type='text' name='userFileName' size='27' maxlength='62'
onkeydown='var e=(event || window.event); return !(e.keyCode==13);'
onkeyup='charFilter(this, {filters:charFilter.fileName})' onblur='charFilter(this, {filters:charFilter.fileName})' /></label>
<select name='userFileType' title='file type'>
<option selected='selected'>.png</option>
<option>.jpg</option>
<option>.gif</option>
</select>
<p>Note if you save your image in a format other than .png, any embedded transparencies will be lost.</p>
<label>Commit <input type='submit' name='gallery' value='save' onclick='return checkFilename()' /> to Gallery
<span>¡image does not update!</span></label>
</div>
<?php endif; ?>
<?php if ((ALLOW_GALLERY & SHOW) and $_POST['gallery']!=='view Gallery'): ?>
<input class='submit' type='submit' name='gallery' value='view Gallery' />
<?php endif; ?>
</form>
<?php if ((ALLOW_GALLERY & SHOW) and $_POST['gallery']==='view Gallery'): ?>
<div id='gallery'>
<h2>Image Gallery</h2>
<?php foreach (getGallery() as $gal) { $bn=basename($gal);
echo "\t<img src='$gal' alt='$bn' />\n\t<p>$bn</p>\n<hr />\n"; } ?>
</div>
<?php endif;
} catch (ErrorException $e) {echo '<h4>Internal Error:<br />',$e->getMessage(),'<br />on line ',$e->getLine(),' in ',$e->getFile(),'</h4>';}
?>
</body>
</html>
|