Make a gradient from percentage of document
function makeGradient(gradientStart, gradientEnd, gradientStartColor, gradientEndColor, gradientType) {
var type;
switch (gradientType) {
case "linear": type = "Lnr "; break;
case "reflect": type = "Rflc"; break; // Start value is center
case "radial": type = "Rdl "; break; // Start value is center
default: type = "Lnr ";
}
var coordinatesStart = gradientStart; // Float array in percent [10.3502, 87.501]
var coordinatesEnd = gradientEnd;
var hsbaStart = gradientStartColor; // Float array [359.0, 100.0, 100.0, 100.0] Hue, Saturation, Brightness, Alpha/Opacity
var hsbaEnd = gradientEndColor;
var idGrdn = charIDToTypeID( "Grdn" );
var desc182 = new ActionDescriptor();
var idFrom = charIDToTypeID( "From" );
var desc183 = new ActionDescriptor();
var idHrzn = charIDToTypeID( "Hrzn" );
var idPrc = charIDToTypeID( "#Prc" );
desc183.putUnitDouble( idHrzn, idPrc, coordinatesStart[0].toFixed(4) );
var idVrtc = charIDToTypeID( "Vrtc" );
var idPrc = charIDToTypeID( "#Prc" );
desc183.putUnitDouble( idVrtc, idPrc, coordinatesStart[1].toFixed(4) );
var idPnt = charIDToTypeID( "Pnt " );
desc182.putObject( idFrom, idPnt, desc183 );
var idT = charIDToTypeID( "T " );
var desc184 = new ActionDescriptor();
var idHrzn = charIDToTypeID( "Hrzn" );
var idPrc = charIDToTypeID( "#Prc" );
desc184.putUnitDouble( idHrzn, idPrc, coordinatesEnd[0].toFixed(4) );
var idVrtc = charIDToTypeID( "Vrtc" );
var idPrc = charIDToTypeID( "#Prc" );
desc184.putUnitDouble( idVrtc, idPrc, coordinatesEnd[1].toFixed(4) );
var idPnt = charIDToTypeID( "Pnt " );
desc182.putObject( idT, idPnt, desc184 );
var idType = charIDToTypeID( "Type" );
var idGrdT = charIDToTypeID( "GrdT" );
var idTypeStr = charIDToTypeID( type );
desc182.putEnumerated( idType, idGrdT, idTypeStr );
var idDthr = charIDToTypeID( "Dthr" );
desc182.putBoolean( idDthr, true );
var idUsMs = charIDToTypeID( "UsMs" );
desc182.putBoolean( idUsMs, true );
var idRvrs = charIDToTypeID( "Rvrs" );
desc182.putBoolean( idRvrs, true );
var idGrad = charIDToTypeID( "Grad" );
var desc185 = new ActionDescriptor();
var idNm = charIDToTypeID( "Nm " );
desc185.putString( idNm, """Custom""" );
var idGrdF = charIDToTypeID( "GrdF" );
var idGrdF = charIDToTypeID( "GrdF" );
var idCstS = charIDToTypeID( "CstS" );
desc185.putEnumerated( idGrdF, idGrdF, idCstS );
var idIntr = charIDToTypeID( "Intr" );
desc185.putDouble( idIntr, 4096.000000 );
var idClrs = charIDToTypeID( "Clrs" );
var list68 = new ActionList();
var desc186 = new ActionDescriptor();
var idClr = charIDToTypeID( "Clr " );
var desc187 = new ActionDescriptor();
var idH = charIDToTypeID( "H " );
var idAng = charIDToTypeID( "#Ang" );
desc187.putUnitDouble( idH, idAng, hsbaEnd[0].toFixed(4) );
var idStrt = charIDToTypeID( "Strt" );
desc187.putDouble( idStrt, hsbaEnd[1].toFixed(4) );
var idBrgh = charIDToTypeID( "Brgh" );
desc187.putDouble( idBrgh, hsbaEnd[2].toFixed(4) );
var idHSBC = charIDToTypeID( "HSBC" );
desc186.putObject( idClr, idHSBC, desc187 );
var idType = charIDToTypeID( "Type" );
var idClry = charIDToTypeID( "Clry" );
var idUsrS = charIDToTypeID( "UsrS" );
desc186.putEnumerated( idType, idClry, idUsrS );
var idLctn = charIDToTypeID( "Lctn" );
desc186.putInteger( idLctn, 0 );
var idMdpn = charIDToTypeID( "Mdpn" );
desc186.putInteger( idMdpn, 50 );
var idClrt = charIDToTypeID( "Clrt" );
list68.putObject( idClrt, desc186 );
var desc188 = new ActionDescriptor();
var idClr = charIDToTypeID( "Clr " );
var desc189 = new ActionDescriptor();
var idH = charIDToTypeID( "H " );
var idAng = charIDToTypeID( "#Ang" );
desc189.putUnitDouble( idH, idAng, hsbaStart[0].toFixed(4) );
var idStrt = charIDToTypeID( "Strt" );
desc189.putDouble( idStrt, hsbaStart[1].toFixed(4) );
var idBrgh = charIDToTypeID( "Brgh" );
desc189.putDouble( idBrgh, hsbaStart[2].toFixed(4) );
var idHSBC = charIDToTypeID( "HSBC" );
desc188.putObject( idClr, idHSBC, desc189 );
var idType = charIDToTypeID( "Type" );
var idClry = charIDToTypeID( "Clry" );
var idUsrS = charIDToTypeID( "UsrS" );
desc188.putEnumerated( idType, idClry, idUsrS );
var idLctn = charIDToTypeID( "Lctn" );
desc188.putInteger( idLctn, 4096 );
var idMdpn = charIDToTypeID( "Mdpn" );
desc188.putInteger( idMdpn, 50 );
var idClrt = charIDToTypeID( "Clrt" );
list68.putObject( idClrt, desc188 );
desc185.putList( idClrs, list68 );
var idTrns = charIDToTypeID( "Trns" );
var list69 = new ActionList();
var desc190 = new ActionDescriptor();
var idOpct = charIDToTypeID( "Opct" );
var idPrc = charIDToTypeID( "#Prc" );
desc190.putUnitDouble( idOpct, idPrc, hsbaEnd[3].toFixed(4) );
var idLctn = charIDToTypeID( "Lctn" );
desc190.putInteger( idLctn, 0 );
var idMdpn = charIDToTypeID( "Mdpn" );
desc190.putInteger( idMdpn, 50 );
var idTrnS = charIDToTypeID( "TrnS" );
list69.putObject( idTrnS, desc190 );
var desc191 = new ActionDescriptor();
var idOpct = charIDToTypeID( "Opct" );
var idPrc = charIDToTypeID( "#Prc" );
desc191.putUnitDouble( idOpct, idPrc, hsbaStart[3].toFixed(4) );
var idLctn = charIDToTypeID( "Lctn" );
desc191.putInteger( idLctn, 4096 );
var idMdpn = charIDToTypeID( "Mdpn" );
desc191.putInteger( idMdpn, 50 );
var idTrnS = charIDToTypeID( "TrnS" );
list69.putObject( idTrnS, desc191 );
desc185.putList( idTrns, list69 );
var idGrdn = charIDToTypeID( "Grdn" );
desc182.putObject( idGrad, idGrdn, desc185 );
executeAction( idGrdn, desc182, DialogModes.NO );
}