From 8bce9e3f5824cab08e83fa20885da157de2e64a3 Mon Sep 17 00:00:00 2001 From: Mark Carver Date: Mon, 5 Nov 2012 22:57:42 -0600 Subject: [PATCH] Initial color module refactor. --- core/misc/farbtastic/farbtastic.css | 36 -- core/misc/farbtastic/farbtastic.js | 8 - core/misc/farbtastic/marker.png | 5 - core/misc/farbtastic/mask.png | 16 - core/misc/farbtastic/wheel.png | 49 --- core/modules/color/color.admin.css | 196 ++++++--- core/modules/color/color.info | 1 + core/modules/color/color.install | 5 +- core/modules/color/color.js | 224 +++++----- core/modules/color/color.module | 278 ++++++++---- core/modules/color/colorpicker/css/colorpicker.css | 161 +++++++ core/modules/color/colorpicker/images/blank.gif | 1 + .../colorpicker/images/colorpicker_background.png | 10 + .../color/colorpicker/images/colorpicker_hex.png | 5 + .../color/colorpicker/images/colorpicker_hsb_b.png | 4 + .../color/colorpicker/images/colorpicker_hsb_h.png | 10 + .../color/colorpicker/images/colorpicker_hsb_s.png | 10 + .../color/colorpicker/images/colorpicker_indic.gif | 1 + .../colorpicker/images/colorpicker_overlay.png | 54 +++ .../color/colorpicker/images/colorpicker_rgb_b.png | 4 + .../color/colorpicker/images/colorpicker_rgb_g.png | 6 + .../color/colorpicker/images/colorpicker_rgb_r.png | 5 + .../colorpicker/images/colorpicker_select.gif | 1 + .../colorpicker/images/colorpicker_submit.png | 4 + .../color/colorpicker/images/custom_background.png | 6 + .../color/colorpicker/images/custom_hex.png | 4 + .../color/colorpicker/images/custom_hsb_b.png | 7 + .../color/colorpicker/images/custom_hsb_h.png | 4 + .../color/colorpicker/images/custom_hsb_s.png | 7 + .../color/colorpicker/images/custom_indic.gif | 1 + .../color/colorpicker/images/custom_rgb_b.png | 5 + .../color/colorpicker/images/custom_rgb_g.png | 4 + .../color/colorpicker/images/custom_rgb_r.png | 6 + .../color/colorpicker/images/custom_submit.png | 6 + core/modules/color/colorpicker/images/select.png | 5 + core/modules/color/colorpicker/images/select2.png | 5 + core/modules/color/colorpicker/images/slider.png | 10 + core/modules/color/colorpicker/js/colorpicker.js | 484 +++++++++++++++++++++ core/modules/color/preview.js | 47 +- core/modules/system/system.module | 13 - 40 files changed, 1299 insertions(+), 409 deletions(-) delete mode 100644 core/misc/farbtastic/farbtastic.css delete mode 100644 core/misc/farbtastic/farbtastic.js delete mode 100644 core/misc/farbtastic/marker.png delete mode 100644 core/misc/farbtastic/mask.png delete mode 100644 core/misc/farbtastic/wheel.png create mode 100644 core/modules/color/colorpicker/css/colorpicker.css create mode 100644 core/modules/color/colorpicker/images/blank.gif create mode 100644 core/modules/color/colorpicker/images/colorpicker_background.png create mode 100644 core/modules/color/colorpicker/images/colorpicker_hex.png create mode 100644 core/modules/color/colorpicker/images/colorpicker_hsb_b.png create mode 100644 core/modules/color/colorpicker/images/colorpicker_hsb_h.png create mode 100644 core/modules/color/colorpicker/images/colorpicker_hsb_s.png create mode 100644 core/modules/color/colorpicker/images/colorpicker_indic.gif create mode 100644 core/modules/color/colorpicker/images/colorpicker_overlay.png create mode 100644 core/modules/color/colorpicker/images/colorpicker_rgb_b.png create mode 100644 core/modules/color/colorpicker/images/colorpicker_rgb_g.png create mode 100644 core/modules/color/colorpicker/images/colorpicker_rgb_r.png create mode 100644 core/modules/color/colorpicker/images/colorpicker_select.gif create mode 100644 core/modules/color/colorpicker/images/colorpicker_submit.png create mode 100644 core/modules/color/colorpicker/images/custom_background.png create mode 100644 core/modules/color/colorpicker/images/custom_hex.png create mode 100644 core/modules/color/colorpicker/images/custom_hsb_b.png create mode 100644 core/modules/color/colorpicker/images/custom_hsb_h.png create mode 100644 core/modules/color/colorpicker/images/custom_hsb_s.png create mode 100644 core/modules/color/colorpicker/images/custom_indic.gif create mode 100644 core/modules/color/colorpicker/images/custom_rgb_b.png create mode 100644 core/modules/color/colorpicker/images/custom_rgb_g.png create mode 100644 core/modules/color/colorpicker/images/custom_rgb_r.png create mode 100644 core/modules/color/colorpicker/images/custom_submit.png create mode 100644 core/modules/color/colorpicker/images/select.png create mode 100644 core/modules/color/colorpicker/images/select2.png create mode 100644 core/modules/color/colorpicker/images/slider.png create mode 100644 core/modules/color/colorpicker/js/colorpicker.js diff --git a/core/misc/farbtastic/farbtastic.css b/core/misc/farbtastic/farbtastic.css deleted file mode 100644 index 25a68eb..0000000 --- a/core/misc/farbtastic/farbtastic.css +++ /dev/null @@ -1,36 +0,0 @@ - -.farbtastic { - position: relative; -} -.farbtastic * { - position: absolute; - cursor: crosshair; -} -.farbtastic, -.farbtastic .wheel { - width: 195px; - height: 195px; -} -.farbtastic .color, -.farbtastic .overlay { - top: 47px; - left: 47px; - width: 101px; - height: 101px; -} -.farbtastic .wheel { - background: url(wheel.png) no-repeat; - width: 195px; - height: 195px; -} -.farbtastic .overlay { - background: url(mask.png) no-repeat; -} -.farbtastic .marker { - width: 17px; - height: 17px; - margin: -8px 0 0 -8px; - overflow: hidden; - background: url(marker.png) no-repeat; -} - diff --git a/core/misc/farbtastic/farbtastic.js b/core/misc/farbtastic/farbtastic.js deleted file mode 100644 index 10c9e76..0000000 --- a/core/misc/farbtastic/farbtastic.js +++ /dev/null @@ -1,8 +0,0 @@ -(function(e){e.fn.farbtastic=function(f){e.farbtastic(this,f);return this};e.farbtastic=function(f,l){f=e(f).get(0);return f.farbtastic||(f.farbtastic=new e._farbtastic(f,l))};e._farbtastic=function(f,l){var a=this;e(f).html('
');var k=e(".farbtastic",f);a.wheel=e(".wheel",f).get(0);a.radius=84;a.square=100;a.width=194;navigator.appVersion.match(/MSIE [0-6]\./)&& -e("*",k).each(function(){if(this.currentStyle.backgroundImage!="none"){var b=this.currentStyle.backgroundImage;b=this.currentStyle.backgroundImage.substring(5,b.length-2);e(this).css({backgroundImage:"none",filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='"+b+"')"})}});a.linkTo=function(b){typeof a.callback=="object"&&e(a.callback).unbind("keyup",a.updateValue);a.color=null;if(typeof b=="function")a.callback=b;else if(typeof b=="object"||typeof b=="string"){a.callback= -e(b);a.callback.bind("keyup",a.updateValue);a.callback.get(0).value&&a.setColor(a.callback.get(0).value)}return this};a.updateValue=function(){this.value&&this.value!=a.color&&a.setColor(this.value)};a.setColor=function(b){var c=a.unpack(b);if(a.color!=b&&c){a.color=b;a.rgb=c;a.hsl=a.RGBToHSL(a.rgb);a.updateDisplay()}return this};a.setHSL=function(b){a.hsl=b;a.rgb=a.HSLToRGB(b);a.color=a.pack(a.rgb);a.updateDisplay();return this};a.widgetCoords=function(b){var c=e(a.wheel).offset();return{x:b.pageX- -c.left-a.width/2,y:b.pageY-c.top-a.width/2}};a.mousedown=function(b){if(!document.dragging){e(document).bind("mousemove",a.mousemove).bind("mouseup",a.mouseup);document.dragging=true}var c=a.widgetCoords(b);a.circleDrag=Math.max(Math.abs(c.x),Math.abs(c.y))*2>a.square;a.mousemove(b);return false};a.mousemove=function(b){var c=a.widgetCoords(b);if(a.circleDrag){b=Math.atan2(c.x,-c.y)/6.28;if(b<0)b+=1;a.setHSL([b,a.hsl[1],a.hsl[2]])}else{b=Math.max(0,Math.min(1,-(c.x/a.square)+0.5));c=Math.max(0,Math.min(1, --(c.y/a.square)+0.5));a.setHSL([a.hsl[0],b,c])}return false};a.mouseup=function(){e(document).unbind("mousemove",a.mousemove);e(document).unbind("mouseup",a.mouseup);document.dragging=false};a.updateDisplay=function(){var b=a.hsl[0]*6.28;e(".h-marker",k).css({left:Math.round(Math.sin(b)*a.radius+a.width/2)+"px",top:Math.round(-Math.cos(b)*a.radius+a.width/2)+"px"});e(".sl-marker",k).css({left:Math.round(a.square*(0.5-a.hsl[1])+a.width/2)+"px",top:Math.round(a.square*(0.5-a.hsl[2])+a.width/2)+"px"}); -e(".color",k).css("backgroundColor",a.pack(a.HSLToRGB([a.hsl[0],1,0.5])));if(typeof a.callback=="object"){e(a.callback).css({backgroundColor:a.color,color:a.hsl[2]>0.5?"#000":"#fff"});e(a.callback).each(function(){if(this.value&&this.value!=a.color)this.value=a.color})}else typeof a.callback=="function"&&a.callback.call(a,a.color)};a.pack=function(b){var c=Math.round(b[0]*255),d=Math.round(b[1]*255);b=Math.round(b[2]*255);return"#"+(c<16?"0":"")+c.toString(16)+(d<16?"0":"")+d.toString(16)+(b<16?"0": -"")+b.toString(16)};a.unpack=function(b){if(b.length==7)return[parseInt("0x"+b.substring(1,3))/255,parseInt("0x"+b.substring(3,5))/255,parseInt("0x"+b.substring(5,7))/255];else if(b.length==4)return[parseInt("0x"+b.substring(1,2))/15,parseInt("0x"+b.substring(2,3))/15,parseInt("0x"+b.substring(3,4))/15]};a.HSLToRGB=function(b){var c,d=b[0];c=b[1];b=b[2];c=b<=0.5?b*(c+1):b+c-b*c;b=b*2-c;return[this.hueToRGB(b,c,d+0.33333),this.hueToRGB(b,c,d),this.hueToRGB(b,c,d-0.33333)]};a.hueToRGB=function(b,c, -d){d=d<0?d+1:d>1?d-1:d;if(d*6<1)return b+(c-b)*d*6;if(d*2<1)return c;if(d*3<2)return b+(c-b)*(0.66666-d)*6;return b};a.RGBToHSL=function(b){var c,d,m,g,h=b[0],i=b[1],j=b[2];c=Math.min(h,Math.min(i,j));b=Math.max(h,Math.max(i,j));d=b-c;g=(c+b)/2;m=0;if(g>0&&g<1)m=d/(g<0.5?2*g:2-2*g);c=0;if(d>0){if(b==h&&b!=i)c+=(i-j)/d;if(b==i&&b!=j)c+=2+(j-h)/d;if(b==j&&b!=h)c+=4+(h-i)/d;c/=6}return[c,m,g]};e("*",k).mousedown(a.mousedown);a.setColor("#000000");l&&a.linkTo(l)}})(jQuery); diff --git a/core/misc/farbtastic/marker.png b/core/misc/farbtastic/marker.png deleted file mode 100644 index f9773d1..0000000 --- a/core/misc/farbtastic/marker.png +++ /dev/null @@ -1,5 +0,0 @@ -PNG - - IHDRdq pHYs."."ݒ+tEXtCreation Timevr 14 jul 2006 13:31:23 +0100Cg0IDAT(+qzzB$Vf$RppM.njR;-4r$nB]W&=OOp]DIg~#L"QJLqyf568Fskئ>;mIJ|ahִdV4/Lvp cnd`±sVsɵǁD$h'=]as'BfOWdLeds(L׊GWHBרVFa ]W6Ev&xM,8O1};Bc -JvY_#eTW ʴd>*Q<ZL̛q)'5Y|=iWOYXѵ؋I0G QW5ذD8F֊c(X%KIFu]ڲxZ&[Qp&NxCꚲyI%&JH#YtŖ˪'@zU%zI V%9 :'_2˂*%C',"# -/a×gYVh˴d*,ߐ: YD}A8H#zr1*kwѰ%% ~T ) -C cUҰJaq|#~!{hi~gxLdt#+{| ~#:̣)-QUU8VVː&A#;U=Pz241:9N\* -AB#Q1q'Ò'y!'Q0_5S{NvGgWyH!'c.'Sq s2MsclV + a0N&?)o Z6`9Y٨9x*@ʎ "0~‰aPO,)(ZƮ̔ r1˛ՒC?&š#坨l9QuꬬkRS*+p)7g&P;3GH vVy -htT(vme0w.xRp)V}iin -S-1{'w<}m!`q| U#SS VhxA}˺Ҝ&N d7Q碝+Rޓ!k  ?=H¡URnDqq -$cPAdbqP,(4"T?&;H@P(0{^^Gtg/O^1FR P%.c|B=0&7F!^6viBҚT%);QX*']OA;V|MKBN)yS)/i&—\ThBHơi4En Jݣ\^DF A، 'D wYjS!?sQJwM1} _K\~$bVr7zJjۊ3|zJb(2`J -DW]ǀȮ#|]Dkg #h $X!lkgR" -fWUUy?#z a!' Xi0}vegTkc>Q -/2Rd^yJE<zJe+O<"|Tڲh ~LfA `w8*|])a@߱ڧn0;>K}9se5[IENDB` \ No newline at end of file diff --git a/core/misc/farbtastic/wheel.png b/core/misc/farbtastic/wheel.png deleted file mode 100644 index 4a905e9..0000000 --- a/core/misc/farbtastic/wheel.png +++ /dev/null @@ -1,49 +0,0 @@ -PNG - - IHDR?- IDATx^m]u}_!1+V@lQlu&bJPNN[A*`eE*%(D*DQVS׿i̜k~3Zg9'{?'{kI'~wޙz.mٚL[ܗdU*kT<M@#1z 'RO; mg j]u2[-[cfd[Ča9&b  KADʢ CX}ȲļLa3"[Fq/%Q[`p& ~CW9Nx]٦/zN)JvVLNbh_%e'_ -HiB̖,mydvˤ)Dvr>l{)CUE 3e<ڔWx +2[壒G%0NK:t#-D"@q\F\ aVQDAmj몼2U'&ZeJ}Q6h -RFe?zjݔq9#/nfHd QQ72bPMJYdk჆t\=kdxf|(~@:T'@*>7L5:T87sa]d|dg>tbҤ4@rn(`(hSp_a:zFd?> ]GAJ Q>!&h5S6v慖sdٹ3xGH_ڃD0 >C`]kjSXX~$e(Binjd.yQ7@@v6h_$@n ύ)+R4yV^<@~q'O_hOˆ*jY9yt ڤ&gVhnP>F<_*"N2K>>$@R7H2bj| q'`Ї2C;y7`7a>v6pKX\JS1O2 }.A+ɼ Od X#bq=a#Tʓ /0dK?<ٶJi~F)Yf]>oD'CC[hH6hi-$j>*qqSz1r$/^%9/ܼĄ#I> ƛ]9?Fl S#iM-Z h1~Zc9סK¡¾vTKsY}ʕG![1'%mxIׅ+W].ܕ9b/Q9LX(&A~BDd{g wfIG"ZZ%1}W(\t-%c01~( ̅485z- Um:C:81J/|gK~]]j[?ldZ㙼#GjlS"N嶑/%%C9^D2=@=)jҽ X{~8緞_13$'?)-v\yxeg5r)5QSH_b9<|kr#¾pe M+Vbʐ-"N!Z] -Rs["]A,shgYG]k;G% %!1M,\osh[7˙:´߉dU!֟FK]׻Je*sBy(I^;a-&ZB!,C! #K ǻ;ֺJ8IB4<ɞjÛ /!F*ckTЫu50|Ib֪pP 0o9@83?ݱU boџYY# 8D'@^C|tbx7 O"qޫrdP! ~i{ -,g_(W ?Dv#u5ue.ԔI!T3#g̒!eg{&0# t5w3Ngb%*%I!l%|ƃ~7drbq-CronFw#VB 8*3?9ras0(/GQ\wFwȋdgRef{2jRNƷv8rozSz~#qiF(P Vj=5.xTy]uwp\) YfYKI0G?gxh5r[U^--,έ$NibQ#BnM ʽEt5]m*Jjڎ(90WaՔJy%EVS2KsZRN Ք%%̑DA,Us+*{lnH2dy'N!d-AIҰhrε6"" ^'fGH.U٭؈ń8SB:x+є@RX6՚X}b3ab8u.Ph HmMZmP *D>R?JnBL45DPj$iBIMkAx&"VއO/ -t@\?%^%s‚*]3XH4^Vw9}Lr5·'5p6(LVN]&emJJ$U49|Ixo/H -i}nTAk(a&1ˁ?]axII TB!L¹{+I: Ji}S}p3a+:P*`½|TFQ] y~RN HۄQzɀ4X_'NBh奔S| L\ByƁZ45Pt4E"v=k2cP,폶_!lT`2W,[ |5%Q?/ab+0(ڙU@Rd`v~yWRZkYVS-sy\+t`}~nhS0. g *LCœ)^NRv6i+Ec>*DamȁEϋ° -[5J|锚[A2 +MFaf -` Œ@ rѬuЏ!~hiJ (p7;Io+__*n9=BՇGI_3<Jٝ# -@ #h@4U2A8zJyHaw\un6yX+P}{"n럏}"GX` (WH;'X Eep\nY)/Kr_ ?.^vpy[$)lV cv[ -Q`|$\ Xs7Ji늁Htp~46*D[46Ղa\ytTPz0~VMNyɧ[3ʯ"l4PXOX' FAQ9 -4^ -r/[ݿ`7z ~,*$ ӐiM6D[ҜK#p ,$c|h1ZZJχD`Jx ^mm9#QC#0O -eUws^2=J&IF -b@Nl[eC % A*{VE12wU{DBT>+X0lFX+< HlLwoy?X}8LȔDv|qkF X %"%6 NizN _ @ U}SbEHLad?њ]/R\\.Uk4RUo>8P):IsD@ F)zh|Fڱpl -yH`Gɨ:[aW74k6+uR&Ȯs L3 oa, ʤm,y!w 뼼}2k0]2ʝgߪ_HkcK~V hD;Ek[ ǔ_GNA,1 `xDxEApJ&w>08Y94SX(2@\P_} -ۀٱ" 갲2 7E"_2YѼktw~w![u0>'th1LJM1COE]j)7+VV^^ 7mjo4ZZe@% x6n|S4wzm?'WJ Cn|)s+. uʟƗÎ <';A2);Jq *`{gGY%yA~|ĶPC( -~ed7qWCIdU , 7AmR5Y`Coj[Ji}Mɜ3}%w~f&ik9;c|]XWZMcCm2@Ε^X4S ++`d) -ոdiI`>A"W%U $>A66.׀U:`p)ΈP`glJ㔡G%Yy()HU '3z֥@_rKᥱI%(:7QI03 .D lPl62cv,GeSN^o`JCGHC{t7ƈ3TY@[Z C -@GeFDIU&I=3/>l"k8G~3qcgkuIp"r VIGI*H?]ޗƿT`KsT4AeC#S`'0%=E#^ XeP*1 ߹+2gC* L@j9`e뫿)2#K#,$e/2>* tn7~zҔ1̌FS}{Glx'V[2d +!4Pwagӝgec_oeh FoP|7;fjJ葄#F"CC(\^bLĘe(s3>^iU޵$r"P2Kb=6˰_3/?*лE:gє!iFd -(ٕNB+Fd_!6>2@=-C4$fϰdJk5i3G"IZ3$% -*  `"m3Bp sWyb4y-?ƎP-Y2 -K# l Q3.tϰ&8Il2`B`x**W8d2! NђaW3_̑,Bct, 6q43D&3t!=Bpdd*XV@V l -?VXI./adIBbum{{V3Ig# ,3/HAed*XRAm18 t<6x7}d pZz~tl5eS'm|8{I&pR˔^0D)`C]_3I& -ƫL$1`Zx+ Iցˆd2k# ĕ!mϻ_aKȗS> 'o2L&ye<`P"PYܗ0`T2!h-<x{lXfvD0p7#|TpBbo @oqe "JHdj`'C}Rjx Rg^hw3Y0_ -_76[0>@^c]t!5|"N `deL a/<:k!lg 2d2gj8>eB/&w 8+'CLSC"E*1 k5"fҡ*jbrL/ְ6b.6_ ܉CK]5;)2 +DG5Lz)*z %#Xu/w=2<OEh^u P2P^ e`o-(z!pc u_u -.*a=Ga)G -Z ~ x0Qk \r\.'#K¼C$5F5RM¿cpn!FC6wi J|9×\(BsV(W+,]B{j9|d).KP:+ަIU=j:2`$°F#0HjISJ,v!Yʛ@Bd4o^fI  o#)i̥{sY-G;XBHdM#+L"\aWIPNXƀ9QN'# `m( 6z[=O̓\Ka8 ;gx=l&7 J%:HR naD -zTsӲ*cI@Lp+ke(oA9$=uӃބ`f9_-DAe Ksh]`بz쿋 5l"QP3z nރ*;wsBnB(M"*i*H*dJ[haB-3-"JaJR(* :r@$ !IL'9g'9MwuZy>@DddzK@쭼R&! Ȱ|yL@ ̖S)B Y~R}_&]z"/!D#h/I׈%CFHR ;C\w}aؤG>%ByPT:vsR}[Ⱥ@ϫg󩖨Or &طWC=)I0, D~jbߺDMWAELrdT=7T8M2+_fiOMGKZ˦ MXQ1V=N=ɄHOrw9%_Xm#KٴJk/lB*_og? ylo=,\)IoM&Y 7e8\@ -LQ ä/2Qm?i%GTEfoc~Ԝ ~Xa#/ʤ/&&ihz@xIQ3jFELQZ8$G[=IZ(h!  q; 4~J}F_=jU4`7Nө} b*,6 Jkx19e_76 4Dm%IH&Ig득Z= S} -aCoҜ/}vfGdsXIHW٢$IZW%.jELɶ2IrjH#9<@aGLWx$}Ru*T,$S$tZ}os꯹fH)꧟Ŀ%.ơ~2r咨˥X ~ ٌO0YrBt6;TWRHP8Nc̭oز@R?!s炲2`Lǁ]QXbj}8,BGP=p -ĭ'9ә-:݇ϛQL'gۙj'yYd('Ġ=uDqb4<HKUL|P'[ΩsV}[* .u LG(QNk:'b P3Vx278Fap#;mGDɡo>ڏ<%%[vڼXm$ [G.}H iq q;Гa{MU;o?#qݭKϋГaKDxwf_hݚv4kcH -4aqgz2HrUbD ۘ(?v:e TaWz2ӕqdDˑ-eDWk-q5b7D\pE͑|^8V6:W -t:# ^_FNHL#6n.r9BETV'ڶ>b툱t7s" -z2})EA&9*ǝ'F2tGNcƻ_.=v) _EO 'JJQ!E= )%(\(nf2QKw y*{*џ%*bV^F05:eW1SL*_\gyWۦ: ^%.ļ Y'C1𜜯tic6GtSy9 -Y5=z 7pnsG.LpPHP image documentation for information on how to correct this.', array('@url' => 'http://www.php.net/manual/ref.image.php')); } diff --git a/core/modules/color/color.js b/core/modules/color/color.js index 014ea2b..b2fe6b0 100644 --- a/core/modules/color/color.js +++ b/core/modules/color/color.js @@ -5,65 +5,85 @@ (function ($) { -"use strict"; - Drupal.behaviors.color = { attach: function (context, settings) { - var i, j, colors; + var i, j, colors, field_name; // This behavior attaches by ID, so is only valid once on a page. - var form = $(context).find('#system-theme-settings .color-form').once('color'); - if (form.length === 0) { + var form = $('#color-scheme-form .color-form', context).once('color'); + if (form.length == 0) { return; } + var dialogWidth = $(window).width() * 0.15; + var dialogHeight = $(window).height() * 0.75; + var dialogLeft = $(window).width() - dialogWidth - 30; + var dialogTop = 40; + var dialogButtons = []; + var formActions = form.find('.form-actions').find('input'); + formActions.each(function(){ + var action = $(this); + $.extend(dialogButtons, [{ + text: action.val(), + click: function() { + action.click(); + } + }]); + }).hide(); + form.parent().parent().dialog({ + buttons: dialogButtons, + closeOnEscape: false, + closeText: '', + dialogClass: 'color-scheme-dialog', + width: dialogWidth, + height: dialogHeight, + position: [dialogLeft, dialogTop], + title: Drupal.t('Color Scheme'), + open: function(event, ui) { + $(this).closest('.ui-dialog').find('.ui-dialog-titlebar-close').hide(); + } + }); var inputs = []; var hooks = []; var locks = []; var focused = null; // Add Farbtastic. - $('
').once('color').prependTo(form); - var farb = $.farbtastic('#placeholder'); + // $(form).prepend('
').addClass('color-processed'); + // var farb = $.farbtastic('#placeholder'); // Decode reference colors to HSL. - var reference = settings.color.reference; - for (i in reference) { - if (reference.hasOwnProperty(i)) { - reference[i] = farb.RGBToHSL(farb.unpack(reference[i])); - } - } + // var reference = settings.color.reference; + // for (i in reference) { + // reference[i] = farb.RGBToHSL(farb.unpack(reference[i])); + // } // Build a preview. var height = []; var width = []; // Loop through all defined gradients. for (i in settings.gradients) { - if (settings.gradients.hasOwnProperty(i)) { - // Add element to display the gradient. - $('#preview').once('color').append('
'); - var gradient = $('#preview #gradient-' + i); - // Add height of current gradient to the list (divided by 10). - height.push(parseInt(gradient.css('height'), 10) / 10); - // Add width of current gradient to the list (divided by 10). - width.push(parseInt(gradient.css('width'), 10) / 10); - // Add rows (or columns for horizontal gradients). - // Each gradient line should have a height (or width for horizontal - // gradients) of 10px (because we divided the height/width by 10 above). - for (j = 0; j < (settings.gradients[i].direction === 'vertical' ? height[i] : width[i]); ++j) { - gradient.append('
'); - } + // Add element to display the gradient. + $('#preview').once('color').append('
'); + var gradient = $('#preview #gradient-' + i); + // Add height of current gradient to the list (divided by 10). + height.push(parseInt(gradient.css('height'), 10) / 10); + // Add width of current gradient to the list (divided by 10). + width.push(parseInt(gradient.css('width'), 10) / 10); + // Add rows (or columns for horizontal gradients). + // Each gradient line should have a height (or width for horizontal + // gradients) of 10px (because we divided the height/width by 10 above). + for (j = 0; j < (settings.gradients[i]['direction'] == 'vertical' ? height[i] : width[i]); ++j) { + gradient.append('
'); } } // Set up colorScheme selector. - form.find('#edit-scheme').change(function () { + $('#edit-scheme', form).change(function () { var schemes = settings.color.schemes, colorScheme = this.options[this.selectedIndex].value; - if (colorScheme !== '' && schemes[colorScheme]) { + if (colorScheme != '' && schemes[colorScheme]) { // Get colors of active scheme. colors = schemes[colorScheme]; - for (var fieldName in colors) { - if (colors.hasOwnProperty(fieldName)) { - callback($('#edit-palette-' + fieldName), colors[fieldName], false, true); - } + for (field_name in colors) { + callback($('#edit-palette-' + field_name), colors[field_name], false, true); } preview(); } @@ -73,7 +93,7 @@ Drupal.behaviors.color = { * Renders the preview. */ function preview() { - Drupal.color.callback(context, settings, form, farb, height, width); + // Drupal.color.callback(context, settings, form, farb, height, width); } /** @@ -82,11 +102,10 @@ Drupal.behaviors.color = { * This algorithm ensures relative ordering on the saturation and luminance * axes is preserved, and performs a simple hue shift. * - * It is also symmetrical. If: shift_color(c, a, b) === d, then - * shift_color(d, b, a) === c. + * It is also symmetrical. If: shift_color(c, a, b) == d, then + * shift_color(d, b, a) == c. */ function shift_color(given, ref1, ref2) { - var d; // Convert to HSL. given = farb.RGBToHSL(farb.unpack(given)); @@ -94,11 +113,11 @@ Drupal.behaviors.color = { given[0] += ref2[0] - ref1[0]; // Saturation: interpolate. - if (ref1[1] === 0 || ref2[1] === 0) { + if (ref1[1] == 0 || ref2[1] == 0) { given[1] = ref2[1]; } else { - d = ref1[1] / ref2[1]; + var d = ref1[1] / ref2[1]; if (d > 1) { given[1] /= d; } @@ -108,11 +127,11 @@ Drupal.behaviors.color = { } // Luminance: interpolate. - if (ref1[2] === 0 || ref2[2] === 0) { + if (ref1[2] == 0 || ref2[2] == 0) { given[2] = ref2[2]; } else { - d = ref1[2] / ref2[2]; + var d = ref1[2] / ref2[2]; if (d > 1) { given[2] /= d; } @@ -132,27 +151,23 @@ Drupal.behaviors.color = { // Set background/foreground colors. $(input).css({ backgroundColor: color, - 'color': farb.RGBToHSL(farb.unpack(color))[2] > 0.5 ? '#000' : '#fff' + // 'color': farb.RGBToHSL(farb.unpack(color))[2] > 0.5 ? '#000' : '#fff' }); // Change input value. - if ($(input).val() && $(input).val() !== color) { + if ($(input).val() && $(input).val() != color) { $(input).val(color); // Update locked values. if (propagate) { i = input.i; for (j = i + 1; ; ++j) { - if (!locks[j - 1] || $(locks[j - 1]).is('.unlocked')) { - break; - } + if (!locks[j - 1] || $(locks[j - 1]).is('.unlocked')) break; matched = shift_color(color, reference[input.key], reference[inputs[j].key]); callback(inputs[j], matched, false); } for (j = i - 1; ; --j) { - if (!locks[j] || $(locks[j]).is('.unlocked')) { - break; - } + if (!locks[j] || $(locks[j]).is('.unlocked')) break; matched = shift_color(color, reference[input.key], reference[inputs[j].key]); callback(inputs[j], matched, false); } @@ -172,7 +187,7 @@ Drupal.behaviors.color = { * Resets the color scheme selector. */ function resetScheme() { - form.find('#edit-scheme').each(function () { + $('#edit-scheme', form).each(function () { this.selectedIndex = this.options.length - 1; }); } @@ -180,74 +195,71 @@ Drupal.behaviors.color = { /** * Focuses Farbtastic on a particular field. */ - function focus(e) { - var input = e.target; + function focus() { + var input = this; // Remove old bindings. - if (focused) { - $(focused).unbind('keyup', farb.updateValue) + focused && $(focused).unbind('keyup', farb.updateValue) .unbind('keyup', preview).unbind('keyup', resetScheme) .parent().removeClass('item-selected'); - } // Add new bindings. - focused = input; - farb.linkTo(function (color) { callback(input, color, true, false); }); - farb.setColor(input.value); - $(focused).keyup(farb.updateValue).keyup(preview).keyup(resetScheme) - .parent().addClass('item-selected'); + focused = this; + // farb.linkTo(function (color) { callback(input, color, true, false); }); + // farb.setColor(this.value); + // $(focused).keyup(farb.updateValue).keyup(preview).keyup(resetScheme).parent().addClass('item-selected'); + } + + /** + * Returns the color text for the brightness of the background color. + */ + function colorText(b) { + if (b > 0 && b < 100) { + b = parseFloat('0.' + b); + } + else if (b == 100) { + b = 1; + } + return b > 0.5 ? '#000' : '#fff'; } + // Initialize color fields. - form.find('#palette input.form-text') - .each(function () { - // Extract palette field name - this.key = this.id.substring(13); - - // Link to color picker temporarily to initialize. - farb.linkTo(function () {}).setColor('#000').linkTo(this); - - // Add lock. - var i = inputs.length; - if (inputs.length) { - var lock = $('
').toggle( - function () { - $(this).addClass('unlocked'); - $(hooks[i - 1]).attr('class', - locks[i - 2] && $(locks[i - 2]).is(':not(.unlocked)') ? 'hook up' : 'hook' - ); - $(hooks[i]).attr('class', - locks[i] && $(locks[i]).is(':not(.unlocked)') ? 'hook down' : 'hook' - ); + $('#palette .form-type-textfield', form).each(function () { + var colorField = $('input.form-text', this); + if (colorField.length) { + // Attach a color picker + colorField.ColorPicker({ + color: colorField.val(), + onBeforeShow: function() { + colorField.ColorPickerSetColor(colorField.val()); }, - function () { - $(this).removeClass('unlocked'); - $(hooks[i - 1]).attr('class', - locks[i - 2] && $(locks[i - 2]).is(':not(.unlocked)') ? 'hook both' : 'hook down' - ); - $(hooks[i]).attr('class', - locks[i] && $(locks[i]).is(':not(.unlocked)') ? 'hook both' : 'hook up' - ); - } - ); - $(this).after(lock); - locks.push(lock); + onChange: function (hsb, hex, rgb) { + colorField.css({ + backgroundColor: '#' + hex, + color: colorText(hsb.b) + }).val('#' + hex); + } + }); + // Change initial CSS values. + colorField.css({ + backgroundColor: colorField.val(), + color: colorText($('#' + colorField.data('colorpickerId')).data('colorpicker').color.b) + }); + // Create tooltips. + var label = $('label', this); + if (label.length) { + colorField.attr('title', label.text()).tooltip({ + tooltipClass: "color-tooltip", + my: "left-15 top", + at: "left-15 center", + collision: "flipfit", + }); + } } - - // Add hook. - var hook = $('
'); - $(this).after(hook); - hooks.push(hook); - - $(this).parent().find('.lock').click(); - this.i = i; - inputs.push(this); - }) - .focus(focus); - - form.find('#palette label'); + }); // Focus first color. - inputs[0].focus(); + focus.call(inputs[0]); // Render preview. preview(); diff --git a/core/modules/color/color.module b/core/modules/color/color.module index 56c04cf..df1af4d 100644 --- a/core/modules/color/color.module +++ b/core/modules/color/color.module @@ -3,6 +3,28 @@ * @file * Allows users to change the color scheme of themes. */ + +/** +* Implements hook_menu(). +*/ +function color_menu() { + $items['admin/appearance/settings/%theme/color'] = array( + 'title' => t('Color Scheme'), + 'page callback' => 'drupal_get_form', + 'page arguments' => array('color_scheme_form', 3), + 'theme callback' => '_color_menu_theme_callback', + 'theme arguments' => array(3), + // 'type' => MENU_LOCAL_TASK, + 'tab_parent' => 'admin/appearance/settings/%theme', + 'access callback' => '_system_themes_access', + 'access arguments' => array(3), + ); + return $items; +} + +function _color_menu_theme_callback($theme) { + return $theme->name; +} /** * Implements hook_help(). @@ -11,7 +33,7 @@ function color_help($path, $arg) { switch ($path) { case 'admin/help#color': $output = '

' . t('About') . '

'; - $output .= '

' . t('The Color module allows users with the Administer site configuration permission to quickly and easily change the color scheme of themes that have been built to be compatible with it. For more information, see the online handbook entry for Color module.', array('@color' => 'http://drupal.org/documentation/modules/color')) . '

'; + $output .= '

' . t('The Color module allows users with the Administer site configuration permission to quickly and easily change the color scheme of themes that have been built to be compatible with it. For more information, see the online handbook entry for Color module.', array('@color' => 'http://drupal.org/handbook/modules/color')) . '

'; $output .= '

' . t('Uses') . '

'; $output .= '
'; $output .= '
' . t('Changing colors') . '
'; @@ -23,10 +45,33 @@ function color_help($path, $arg) { } /** + * Implements hook_library_info(). + */ +function color_library_info() { + // ColorPicker. + $module_path = drupal_get_path('module', 'color'); + $libraries['colorpicker'] = array( + 'title' => 'Color Picker', + 'website' => 'http://www.eyecon.ro/colorpicker/', + 'version' => '1.0', + 'js' => array( + $module_path . '/colorpicker/js/colorpicker.js' => array(), + ), + 'css' => array( + $module_path . '/colorpicker/css/colorpicker.css' => array(), + ), + ); + return $libraries; +} + +/** * Implements hook_theme(). */ function color_theme() { return array( + 'color_scheme_display' => array( + 'render element' => 'form', + ), 'color_scheme_form' => array( 'render element' => 'form', ), @@ -38,16 +83,7 @@ function color_theme() { */ function color_form_system_theme_settings_alter(&$form, &$form_state) { if (isset($form_state['build_info']['args'][0]) && ($theme = $form_state['build_info']['args'][0]) && color_get_info($theme) && function_exists('gd_info')) { - $form['color'] = array( - '#type' => 'fieldset', - '#title' => t('Color scheme'), - '#weight' => -1, - '#attributes' => array('id' => 'color_scheme_form'), - '#theme' => 'color_scheme_form', - ); - $form['color'] += color_scheme_form($form, $form_state, $theme); - $form['#validate'][] = 'color_scheme_form_validate'; - $form['#submit'][] = 'color_scheme_form_submit'; + $form += color_scheme_display($theme); } } @@ -111,15 +147,15 @@ function _color_page_alter(&$vars) { function color_get_info($theme) { static $theme_info = array(); - if (isset($theme_info[$theme])) { - return $theme_info[$theme]; + if (isset($theme_info[$theme->name])) { + return $theme_info[$theme->name]; } - $path = drupal_get_path('theme', $theme); + $path = drupal_get_path('theme', $theme->name); $file = DRUPAL_ROOT . '/' . $path . '/color/color.inc'; if ($path && file_exists($file)) { include $file; - $theme_info[$theme] = $info; + $theme_info[$theme->name] = $info; return $info; } } @@ -133,7 +169,62 @@ function color_get_palette($theme, $default = FALSE) { $palette = $info['schemes']['default']['colors']; // Load variable. - return $default ? $palette : variable_get('color_' . $theme . '_palette', $palette); + return $default ? $palette : variable_get('color_' . $theme->name . '_palette', $palette); +} + +/** + * Form constructor for displaying the color configuration for a particular theme. + * + * @param $theme + * The machine name of the theme whose color settings are being configured. + */ +function color_scheme_display($theme) { + $form = array(); + $base = drupal_get_path('module', 'color'); + + $form['color'] = array( + '#type' => 'fieldset', + '#title' => t('Color scheme'), + '#weight' => -1, + '#attributes' => array('id' => 'color_scheme_display'), + '#theme' => 'color_scheme_display', + '#attached' => array( + // Add custom CSS. + 'css' => array( + $base . '/color.admin.css' => array(), + ), + // Add custom JavaScript. + 'js' => array( + $base . '/color.js', + ), + ), + ); + + $info = color_get_info($theme); + + $info['schemes'][''] = array('title' => t('Custom')); + // See if we're using a predefined scheme. + // Note: we use the original theme when the default scheme is chosen. + $current_scheme = $info['schemes']['']['colors'] = variable_get('color_' . $theme->name . '_palette', array()); + foreach ($info['schemes'] as $key => $scheme) { + if ($current_scheme == $scheme['colors']) { + $scheme_name = $key; + break; + } + } + if (empty($scheme_name)) { + if (empty($current_scheme)) { + $scheme_name = 'default'; + } + else { + $scheme_name = ''; + } + } + $form['color']['scheme'] = array('#type' => 'value', '#value' => $info['schemes'][$scheme_name]['title']); + $form['color']['swatches'] = array('#type' => 'value', '#value' => $info['schemes'][$scheme_name]['colors']); + $form['color']['theme'] = array('#type' => 'value', '#value' => $theme); + $form['color']['info'] = array('#type' => 'value', '#value' => $info); + return $form; } /** @@ -146,7 +237,16 @@ function color_get_palette($theme, $default = FALSE) { * @see color_scheme_form_submit() * @ingroup forms */ -function color_scheme_form($complete_form, &$form_state, $theme) { +function color_scheme_form($form, &$form_state, $theme) { + + // If using the overlay, close it and redirect the parent window to the color configuration page. + // We need the entire page rendered by the theme so it can be used for coloring. + if (module_exists('overlay')) { + if (overlay_get_mode()) { + overlay_close_dialog('admin/appearance/settings/' . $theme->name . '/color'); + } + } + $base = drupal_get_path('module', 'color'); $info = color_get_info($theme); @@ -161,7 +261,7 @@ function color_scheme_form($complete_form, &$form_state, $theme) { // See if we're using a predefined scheme. // Note: we use the original theme when the default scheme is chosen. - $current_scheme = variable_get('color_' . $theme . '_palette', array()); + $current_scheme = variable_get('color_' . $theme->name . '_palette', array()); foreach ($schemes as $key => $scheme) { if ($current_scheme == $scheme) { $scheme_name = $key; @@ -177,6 +277,12 @@ function color_scheme_form($complete_form, &$form_state, $theme) { } } + $form = array( + '#theme' => 'color_scheme_form', + '#validate' => array('color_scheme_form_validate'), + '#submit' => array('color_scheme_form_submit'), + ); + // Add scheme selector. $form['scheme'] = array( '#type' => 'select', @@ -184,8 +290,11 @@ function color_scheme_form($complete_form, &$form_state, $theme) { '#options' => $color_sets, '#default_value' => $scheme_name, '#attached' => array( + // Add Farbtastic color picker. 'library' => array( - array('color', 'drupal.color'), + array('color', 'colorpicker'), + array('system', 'jquery.ui.tooltip'), + array('system', 'jquery.ui.dialog'), ), // Add custom CSS. 'css' => array( @@ -193,6 +302,7 @@ function color_scheme_form($complete_form, &$form_state, $theme) { ), // Add custom JavaScript. 'js' => array( + $base . '/color.js', array( 'data' => array( 'color' => array( @@ -224,7 +334,49 @@ function color_scheme_form($complete_form, &$form_state, $theme) { $form['theme'] = array('#type' => 'value', '#value' => $theme); $form['info'] = array('#type' => 'value', '#value' => $info); - return $form; + return system_settings_form($form); +} + +/** + * Returns HTML for displaying a theme's color scheme. + * + * @param $variables + * An associative array containing: + * - form: A render element representing the form. + * + * @ingroup themeable + */ +function theme_color_scheme_display($variables) { + $form = $variables['form']; + $output = ''; + $theme = $form['theme']['#value']; + $info = $form['info']['#value']; + $scheme = $form['scheme']['#value']; + $swatches = $form['swatches']['#value']; + $row = array( + array( + 'data' => $scheme . '
' . l(t('Configure'), 'admin/appearance/settings/'. $theme->name . '/color', array('attributes' => array('class' => array('color-link-configure')))), + 'class' => array('scheme-name'), + ), + ); + $i = 0; + $styles = ''; + $palette = ''; + foreach ($swatches as $swatch) { + $styles .= "#color_scheme_display .swatch .value-$i {" . color_render_swatch($swatch) . "}\n"; + $palette .= ''; + $i++; + } + $row[] = array( + 'data' => '' . l($palette, 'admin/appearance/settings/'. $theme->name . '/color', array('attributes' => array('class' => array('swatches')), 'html' => TRUE)), + 'class' => array('palette'), + ); + $rows = array($row); + return theme('table', array('rows' => $rows)); +} + +function color_render_swatch($swatch) { + return "\n background: $swatch; \n"; } /** @@ -241,10 +393,9 @@ function theme_color_scheme_form($variables) { $theme = $form['theme']['#value']; $info = $form['info']['#value']; - $path = drupal_get_path('theme', $theme) . '/'; + $path = drupal_get_path('theme', $theme->name) . '/'; drupal_add_css($path . $info['preview_css']); - // @todo Transform to add library. $preview_js_path = isset($info['preview_js']) ? $path . $info['preview_js'] : drupal_get_path('module', 'color') . '/' . 'preview.js'; // Add the JS at a weight below color.js. drupal_add_js($preview_js_path, array('weight' => -1)); @@ -261,10 +412,10 @@ function theme_color_scheme_form($variables) { $output .= ''; // Preview $output .= drupal_render_children($form); - $output .= '

' . t('Preview') . '

'; - // Attempt to load preview HTML if the theme provides it. - $preview_html_path = DRUPAL_ROOT . '/' . (isset($info['preview_html']) ? drupal_get_path('theme', $theme) . '/' . $info['preview_html'] : drupal_get_path('module', 'color') . '/preview.html'); - $output .= file_get_contents($preview_html_path); + // $output .= '

' . t('Preview') . '

'; + // // Attempt to load preview HTML if the theme provides it. + // $preview_html_path = DRUPAL_ROOT . '/' . (isset($info['preview_html']) ? drupal_get_path('theme', $theme) . '/' . $info['preview_html'] : drupal_get_path('module', 'color') . '/preview.html'); + // $output .= file_get_contents($preview_html_path); // Close the wrapper div. $output .= ''; @@ -312,7 +463,7 @@ function color_scheme_form_submit($form, &$form_state) { // Make sure enough memory is available, if PHP's memory limit is compiled in. if (function_exists('memory_get_usage')) { // Fetch source image dimensions. - $source = drupal_get_path('theme', $theme) . '/' . $info['base_image']; + $source = drupal_get_path('theme', $theme->name) . '/' . $info['base_image']; list($width, $height) = getimagesize($source); // We need at least a copy of the source and a target buffer of the same @@ -323,16 +474,15 @@ function color_scheme_form_submit($form, &$form_state) { // memory_get_usage(), therefore we won't inadvertently reject a color // scheme change based on a faulty memory calculation. $usage = memory_get_usage(TRUE); - $memory_limit = ini_get('memory_limit'); - $size = parse_size($memory_limit); - if (!drupal_check_memory_limit($usage + $required, $memory_limit)) { - drupal_set_message(t('There is not enough memory available to PHP to change this theme\'s color scheme. You need at least %size more. Check the PHP documentation for more information.', array('%size' => format_size($usage + $required - $size), '@url' => 'http://www.php.net/manual/ini.core.php#ini.sect.resource-limits')), 'error'); + $limit = parse_size(ini_get('memory_limit')); + if ($usage + $required > $limit) { + drupal_set_message(t('There is not enough memory available to PHP to change this theme\'s color scheme. You need at least %size more. Check the PHP documentation for more information.', array('%size' => format_size($usage + $required - $limit), '@url' => 'http://www.php.net/manual/ini.core.php#ini.sect.resource-limits')), 'error'); return; } } // Delete old files. - foreach (variable_get('color_' . $theme . '_files', array()) as $file) { + foreach (variable_get('color_' . $theme->name . '_files', array()) as $file) { @drupal_unlink($file); } if (isset($file) && $file = dirname($file)) { @@ -341,16 +491,16 @@ function color_scheme_form_submit($form, &$form_state) { // Don't render the default colorscheme, use the standard theme instead. if (implode(',', color_get_palette($theme, TRUE)) == implode(',', $palette)) { - variable_del('color_' . $theme . '_palette'); - variable_del('color_' . $theme . '_stylesheets'); - variable_del('color_' . $theme . '_logo'); - variable_del('color_' . $theme . '_files'); - variable_del('color_' . $theme . '_screenshot'); + variable_del('color_' . $theme->name . '_palette'); + variable_del('color_' . $theme->name . '_stylesheets'); + variable_del('color_' . $theme->name . '_logo'); + variable_del('color_' . $theme->name . '_files'); + variable_del('color_' . $theme->name . '_screenshot'); return; } // Prepare target locations for generated files. - $id = $theme . '-' . substr(hash('sha256', serialize($palette) . microtime()), 0, 8); + $id = $theme->name . '-' . substr(hash('sha256', serialize($palette) . microtime()), 0, 8); $paths['color'] = 'public://color'; $paths['target'] = $paths['color'] . '/' . $id; foreach ($paths as $path) { @@ -358,12 +508,12 @@ function color_scheme_form_submit($form, &$form_state) { } $paths['target'] = $paths['target'] . '/'; $paths['id'] = $id; - $paths['source'] = drupal_get_path('theme', $theme) . '/'; + $paths['source'] = drupal_get_path('theme', $theme->name) . '/'; $paths['files'] = $paths['map'] = array(); // Save palette and logo location. - variable_set('color_' . $theme . '_palette', $palette); - variable_set('color_' . $theme . '_logo', $paths['target'] . 'logo.png'); + variable_set('color_' . $theme->name . '_palette', $palette); + variable_set('color_' . $theme->name . '_logo', $paths['target'] . 'logo.png'); // Copy over neutral images. foreach ($info['copy'] as $file) { @@ -376,7 +526,7 @@ function color_scheme_form_submit($form, &$form_state) { // Render new images, if image has been provided. if ($info['base_image']) { - _color_render_images($theme, $info, $paths, $palette); + _color_render_images($theme->name, $info, $paths, $palette); } // Rewrite theme stylesheets. @@ -416,8 +566,11 @@ function color_scheme_form_submit($form, &$form_state) { } // Maintain list of files. - variable_set('color_' . $theme . '_stylesheets', $css); - variable_set('color_' . $theme . '_files', $paths['files']); + variable_set('color_' . $theme->name . '_stylesheets', $css); + variable_set('color_' . $theme->name . '_files', $paths['files']); + + // Redirect back to the apparence settings for the theme. + $form_state['redirect'] = 'admin/appearance/settings/' . $theme->name; } /** @@ -556,7 +709,7 @@ function _color_render_images($theme, &$info, &$paths, $palette) { if ($file == 'screenshot.png') { $slice = imagecreatetruecolor(150, 90); imagecopyresampled($slice, $target, 0, 0, $x, $y, 150, 90, $width, $height); - variable_set('color_' . $theme . '_screenshot', $image); + variable_set('color_' . $theme->name . '_screenshot', $image); } else { $slice = imagecreatetruecolor($width, $height); @@ -743,38 +896,3 @@ function _color_rgb2hsl($rgb) { return array($h, $s, $l); } - -/** - * Implements hook_library_info(). - */ -function color_library_info() { - $libraries['drupal.color'] = array( - 'title' => 'Color', - 'version' => VERSION, - 'js' => array( - drupal_get_path('module', 'color') . '/color.js' => array(), - ), - 'dependencies' => array( - array('system', 'jquery'), - array('system', 'drupal'), - array('system', 'jquery.once'), - array('system', 'jquery.farbtastic'), - array('color', 'drupal.color.preview'), - ), - ); - $libraries['drupal.color.preview'] = array( - 'title' => 'Color preview', - 'version' => VERSION, - 'js' => array( - drupal_get_path('module', 'color') . '/preview.js' => array(), - ), - 'dependencies' => array( - array('system', 'jquery'), - array('system', 'drupal'), - array('system', 'drupalSettings'), - array('system', 'jquery.once'), - ), - ); - - return $libraries; -} diff --git a/core/modules/color/colorpicker/css/colorpicker.css b/core/modules/color/colorpicker/css/colorpicker.css new file mode 100644 index 0000000..0b3d5d9 --- /dev/null +++ b/core/modules/color/colorpicker/css/colorpicker.css @@ -0,0 +1,161 @@ +.colorpicker { + width: 356px; + height: 176px; + overflow: hidden; + position: absolute; + background: url(../images/colorpicker_background.png); + font-family: Arial, Helvetica, sans-serif; + display: none; +} +.colorpicker_color { + width: 150px; + height: 150px; + left: 14px; + top: 13px; + position: absolute; + background: #f00; + overflow: hidden; + cursor: crosshair; +} +.colorpicker_color div { + position: absolute; + top: 0; + left: 0; + width: 150px; + height: 150px; + background: url(../images/colorpicker_overlay.png); +} +.colorpicker_color div div { + position: absolute; + top: 0; + left: 0; + width: 11px; + height: 11px; + overflow: hidden; + background: url(../images/colorpicker_select.gif); + margin: -5px 0 0 -5px; +} +.colorpicker_hue { + position: absolute; + top: 13px; + left: 171px; + width: 35px; + height: 150px; + cursor: n-resize; +} +.colorpicker_hue div { + position: absolute; + width: 35px; + height: 9px; + overflow: hidden; + background: url(../images/colorpicker_indic.gif) left top; + margin: -4px 0 0 0; + left: 0px; +} +.colorpicker_new_color { + position: absolute; + width: 60px; + height: 30px; + left: 213px; + top: 13px; + background: #f00; +} +.colorpicker_current_color { + position: absolute; + width: 60px; + height: 30px; + left: 283px; + top: 13px; + background: #f00; +} +.colorpicker input { + background-color: transparent; + border: 1px solid transparent; + position: absolute; + font-size: 10px; + font-family: Arial, Helvetica, sans-serif; + color: #898989; + top: 4px; + right: 11px; + text-align: right; + margin: 0; + padding: 0; + height: 11px; +} +.colorpicker_hex { + position: absolute; + width: 72px; + height: 22px; + background: url(../images/colorpicker_hex.png) top; + left: 212px; + top: 142px; +} +.colorpicker_hex input { + right: 6px; +} +.colorpicker_field { + height: 22px; + width: 62px; + background-position: top; + position: absolute; +} +.colorpicker_field span { + position: absolute; + width: 12px; + height: 22px; + overflow: hidden; + top: 0; + right: 0; + cursor: n-resize; +} +.colorpicker_rgb_r { + background-image: url(../images/colorpicker_rgb_r.png); + top: 52px; + left: 212px; +} +.colorpicker_rgb_g { + background-image: url(../images/colorpicker_rgb_g.png); + top: 82px; + left: 212px; +} +.colorpicker_rgb_b { + background-image: url(../images/colorpicker_rgb_b.png); + top: 112px; + left: 212px; +} +.colorpicker_hsb_h { + background-image: url(../images/colorpicker_hsb_h.png); + top: 52px; + left: 282px; +} +.colorpicker_hsb_s { + background-image: url(../images/colorpicker_hsb_s.png); + top: 82px; + left: 282px; +} +.colorpicker_hsb_b { + background-image: url(../images/colorpicker_hsb_b.png); + top: 112px; + left: 282px; +} +.colorpicker_submit { + position: absolute; + width: 22px; + height: 22px; + background: url(../images/colorpicker_submit.png) top; + left: 322px; + top: 142px; + overflow: hidden; +} +.colorpicker_focus { + background-position: center; +} +.colorpicker_hex.colorpicker_focus { + background-position: bottom; +} +.colorpicker_submit.colorpicker_focus { + background-position: bottom; +} +.colorpicker_slider { + background-position: bottom; +} diff --git a/core/modules/color/colorpicker/images/blank.gif b/core/modules/color/colorpicker/images/blank.gif new file mode 100644 index 0000000..75b945d --- /dev/null +++ b/core/modules/color/colorpicker/images/blank.gif @@ -0,0 +1 @@ +GIF89a!,T; \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/colorpicker_background.png b/core/modules/color/colorpicker/images/colorpicker_background.png new file mode 100644 index 0000000..8401572 --- /dev/null +++ b/core/modules/color/colorpicker/images/colorpicker_background.png @@ -0,0 +1,10 @@ +PNG + + IHDRd8tEXtSoftwareAdobe ImageReadyqe< IDATxOk[Wseŭu! wݵPJB)YfUE)fݏ(B""IIđ3wBI>>D㼾qr%_7"iˍvz) Oz׷=op +r qbNꇸ-w1xe]^8q7z/=s؈q}קqSSS[O7op?looݿ,OAm;n +?>45 1wZAMusnW6(56 AAPwvvvA:=h4 +lc_0e pQkf.\^9b&s+cp_~N]5ʿƯ}巟u/P}x֓wƱ1"PGƈ Ct 9g8 2  Cz CKs#DYd@_dCAAF>E}4 A:AAA̳zn2dd=;; C![d0d0 C5;dAFAFAA +LA:LAAAt 8~a2! 2 2 v 23! C&>ƶ1"PYd( ]Cya. k2! +2 v Bsn1BJ1#2 .X 2T/2adCd2FA:kȹ?{cD!_/z222W_dCs{#D # 2䭌㏍AAAFAAAR9礞! 2 A:l=+㕹"#PAAA2222 ?d7DFAAAdDd,&"PTdddd~! P2/# & C70! eLAAA #pC ӣnZ˶AA~2A}xhzlD:V5\v-|;E>{GQ88882l"[1x^6i9y6phrTٳgᛯ6u@dA~j6#5v>>j=|wmmlh=(aF\\>R\ro'BC pHYs   cHRMz-RqEf9!'VPIDATxAKAl⚰ƃQj֘x1xP ݃! H)Ғ/Fnd=n7٘ Ig0nfC`088˲@aqxhE8#qUUq5&@ HGx=f;FT*u{{ 8==mcVt+U&$av~j}aPxq}}}`n&U6Cp:;Z>r~~\.{D"Q*uW&d(tϣvhb.00(jƲlOOi7e. +5zSd2f=,qa!O; *wqɺgQApuU3 {X( \\^Zg60kkkJp^PE"[S`lDBQ.aeY|Lg0wFRw||mڬS;@ @"cNq^]UUZ0S~S,r~L:)Ir]F}K0^a➉F]#<F5pk\#F`&Z]PFX)]%LI҇RGGGIh L#PTh5VL#uaJEEQ,˱XlvvާfmmmE0W}gg7770z76%%x\#P}Z=X]]* ͇Dk6`ii"T O5z=(MF#FFtq$?-kگO2hIENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/colorpicker_hsb_h.png b/core/modules/color/colorpicker/images/colorpicker_hsb_h.png new file mode 100644 index 0000000..3977ed9 --- /dev/null +++ b/core/modules/color/colorpicker/images/colorpicker_hsb_h.png @@ -0,0 +1,10 @@ +PNG + + IHDR>BC pHYs   cHRMz-RqEf9!'VzIDATxJ@iRmkQjFkm"S' +.QEv+ŋxMa,^F&ΰe&~3h4 +(|4c=8VyÙEQH!T*I.tEn]Q‚-4:7GF􄻓`hXsH[:??v QUg6tMk͇H8l& BDM$@Reyuyr < aaf +sL,vffe +9LӪ&f +XLsppPV@{{a$Eܐ..p#;;@1H$aQL2+V% w= 2T0\d2:z,H$244>;;kZ###fqlTx8ν`dY! +C777X,6077tH<x[F7?%)!B7FFj#>ZM|VfJ΄Y붥S펾X(0}ySj&W0::J?--I~rBtWi6FjjBC pHYs   cHRMz-RqEf9!'VIDATxAH`_jtUm3-kWw  ٫ǂ((x(6l@vւ0ZiSjjvh&%ܾ.''}fZ08A҂N +:Zq#Q?! àGGG|S귬JKkqhh$L&L&`+>gyyIӴ^hjjZ[[ +օѨe{&#f2`rmmm0^zXwt +EǏx|}}P(HÐÑvϊX,, P(L&ftBS__N6 BWwo$̮x@Q'-,,xf4߻a$_(~#1 '8%J677LNfYNچa+vAp +S\.Օt IF1$i6 HWӲqvvvJ,qVUx*,[0 +.eY oJΧ3q߽뷷uZgFm5i2YJg=M1n1wQYtkD@[DIקX a[ +!F1"ZDjk%xٶmfftvuu {D]WLEՈ@ +(jAD+ᄁ.ID@#Bzݭɶ˗vb[ɮUJ:/_|P/Pd%YW'rZ%&uuZ3H~$I{zz1U^T Jj"P볳0===11 "l?`>::*(w"H z>okkQqqqq? UeǛ\ZZ*^T5ֆaEۛߗTFՊt5m6e%z@Eo*$ZG^0J+zz'̏F\iIENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/colorpicker_indic.gif b/core/modules/color/colorpicker/images/colorpicker_indic.gif new file mode 100644 index 0000000..f9fa95e --- /dev/null +++ b/core/modules/color/colorpicker/images/colorpicker_indic.gif @@ -0,0 +1 @@ +GIF89a# 999[[[!,# 'L˝qh\Emf86!xNS~ kLP; \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/colorpicker_overlay.png b/core/modules/color/colorpicker/images/colorpicker_overlay.png new file mode 100644 index 0000000..561cdd9 --- /dev/null +++ b/core/modules/color/colorpicker/images/colorpicker_overlay.png @@ -0,0 +1,54 @@ +PNG + + IHDR<q pHYs   cHRMz-RqEf9!'V'IDATx}ˎH'O;8n]ݕY=%G N:(TU36w/3f03=;~6w/W=x1/Ǣ ?wZݽݿ}/cfkyOl@" NԳz1yvq 羭ێx<wO?_W{z|Iـs^|nn7O?d߾}/~hffmဵV玁 =*}\ yG7FrV@t|Zmǣ=~v󏏏[_?~x<ڗʉ'o +lrD֎BY 6xlj[km[k[=E#Rs~шR;|P}۞gn;ׯ__//ׯ_|X00)&g!'^IMa$ +FA9A0cN61{`rw{<X|>}vf}o_ׯoY} +"m"[Ơ;DT.Vx$.`"4ԙl0B߾6{?" 5~Gh}v(RTg"NH*| ZÓ5Ë#zGPfr׊xF,Qv5@5ۮn߿~}|| ~n=ffZcU5d+-눎tI()@1[!`uk&d{;aېLh]S@*ҷoǶ,P OZHRse882ޏGQ=ffX5ptð$]ua :DKa誝l=϶GvۮNT?>>LJ=x9bM,J"ꋲ1G|ysax$Е4h)@6nT^"1b# sd -@jGd}Vv~ St}}w{<GhQ*TK"Oh 좗vӶMFzP5 sSȀ J.hn7Q@C a&WuPnnXvnfqd>}gލpD tG~}amAܽp +(-xK422%ڶ"iT@}FF"a2F&xhY6"0n4kk +hE EŔ'2NU'"JG=+2xCJBL-Uu 糹{[_w +nGC[v㱡E1>cP'ODmE82h(̃EQK: E38ro?aKUR贳w H=wngvmGGO3ӈU`Xf!о6pLUm9eyG$&N;kX +uw;` =k;,3XQ R," cRQ!)O)@31&g 4ɻlLOId۾@+w}gfX{rv|h*_T4LݡkG[? 8#Ho5_wO1,ns9)1xH]C 9a3#[?x,V ;+\|)5ђPɑOR+L8JBC1a\1tuA܈g# ĻC̠Nxچ#68[Gd8SL_)[=>@IE}LD/dZ2H&Eܣln"5"-npFζSZCf.:Pl@ڧаU`]\Y-PbXD.9OuX756a1t0EdR3{cblXƹD,*-& y@vn-LX썢ՠx鼣݀ + g86=O7wn%вD +g50d%TRJD";AqjYpV^d8*Z@ Zu( THx6 Rmst#JNl7"V5Z8T$腦(DFkc*# RacZܩ-pSfᙍJ:Ej%E49LY!'}, p@@Jc@ ?A7<*]5t48cB,U-`3 ל3*8M<#09H];eƠ! +wJ}+*7fg y2!r#DπvٞRNM4| +߇ZꤹyPP9bX@%EdKDc8dQАȧPx- +w0cIyPpgǧȆrІ -3 E 8R$psEVMQ3-eoATh +Bc c@z< +B@吕i׋o +K`"1 W(ςx<@KwLJ<=NI_ @?&Qc96 Bz6KljRkԗ1bLchzGzƵH ^WB-:E/^ҡ}2A"'*<( #"ʓ!z\WTh aE[*Id5^@mǮYrǸX eC\1Џh8MQ!fA6e*3ͳ ߝ_i LMɅQ{ƭ#pQYQ4*E1m:6t:~Fd":Dwnv#ìGl{G+XnSǁQLE=W-2@lAzRmh8(N/n'Kt4ee h鼾atEKJ`'ECFlZphEٮ4V%'+, !-= /28z I]j:լw*-8']6>o\;M$)Ts5|PǾ`-FF.`K1q=XL ')ZpM1l#:haV`% r1-R!;{AyHg@oZ +^ +D~,SV +n8)D&hqmI-1^͠"WK0\)]ҟRB?* XmP&ӖFGA(=-qS7OR<3kFs G_&}hI*5Mt02h!w%~}hU '25vwWa)wI7:z܏XР¨}fӚCW;j/SӟxF>FEhDTDͭ2)rC F,#? +FmcX[)JªalR |Iwx,G݂>K(2+\wDGeEpй텓ԇ9fwqo @<+[&Syo.VJg Ղ:3v"a44D ĥ"= t++?:i嗒Ɗ",]h#.qRVzDf4ų~g _JC͖(oċ?0rU%Ub!qfU˥=˨QD3~=rMѢze[Bs$a`g85m^\[ 6n'&KeQ Bډr׉N-aqQ (²HDԊ LPe6zgl!3T~@g!Lp%mKT&xq 8؆.ZvBNwwvij?")t2Xt(Mh0i k*DLpוJ~ קcPMp1J|ײ¤8Fdɢ該Eb)b@8Lw$̐9O2솓>"Q{Uo6ANEgO9X΢Rd+ g=dLŇ2 |,271uXLbf)+B#mFOt|]| ;􈱏;R;J7j>yf BQD <#`7A,>gbr۳Yb(!+OŻJ (egFwB](#j+N"]4>=a?@㠮n oՋ%D|JsֆZk0Jڦ<͕l |b5w%{d ;Dֈ} hENnJ7~"(W+^UDVɱbrb_ThrDwJ &_I@fsԼ5_xmfS-yc*Ã+'NL\-c4b+ڠ>7Ґ,MQ!,NYx< -XK!\p65g(@N(Z:8w-1Ȯpe0/wuМQtZ0~nUc2FkfF=@kE50sYOLp$ *ۦPd-Dq*=VȘ2S%{= ~f(ΞPD{E̳wMjL8EqvJǙԹɈ~_e+ь4%TCl{EO6{u0?0Bی5 +bE?Զ2VV +՜';XɶhMv Hc~ +5&B&:`{PG*#^^j?(17E*Ex>%̢dĊW)Q`8 Ep_)+ %(3xOВj^"Z-҉ qv>2RT4|-0!u+T@%QaxʒMep-0_M-1 YODeF7]8-iwl26H'ꑖ,Yuj3wUF_L&:;~MwM(]-XUOǐ%`j!iB*ꕩdCYa_"y?IYBVylaVXlw)+ #V ;8(ȟWk'&+Y`F3"hFlϫM&̎!g&@fTsX+ 3KN|Mh7 hqxuEOz Ц&a& r0#T +͟i)5kN M^^2=֢MO2Ė v1TazEO(ob`tX+sTdkB7Xb!D'hkfٜ[UlE&fdV EQwOξ)-4Z4ϏZqiZxTvIy>40>ܧ"U"Ii+D'>z[6'W:(4DHhehHmM1ۘ"eO7aIZXzۣ6Y-j9X(K,itqP72UfžuRAj)\ UWļ6e BJ4)V6t2 b*z^t΂wJA=ve-Wg>OfXKNT9a =>4+)LPZ/YetQrh益^ wWT X3Af(6d9k:Z=&ZbeЫcbISYR$d*yѨSEM}ZeǝdzPqH_5jH! g#Q*{YDǷMo(`{/y@:.ɨd1Jt}qߡN,- 71W O<곓I!agn?'ﭘip|ȶC,6&kUJѬ|/53( +-G٬$_^.Sn{EMZ\]PBGZJVeBPgd (+QیDDbה?!-e SQ7ZcEBs55Hg'M% 0-GQ)}eĪ@2[i;!@' VDP9he*kV(YdjIXp nd/+m\$y-"@EdRg]} +S8Gݤ.W:Ӌaem? +eVߣD4XIʀ0/PFyrх/_hSyytXӂwپ!eVJɕJE'.k*27j.(E@g|"+a +g6D?W6Ŭ-@፞"A%0ZKWdt2D'".l` +l-JoW,+lEMHQU5' +t^ +{̬e+ 2Z 4_&F4^+HdG^&\w|6;u=5=JzE`̙>Fr"l +#DGU谪T.%ʺ]Mh,J{0KQM}{!:ƒW_PHeLpMQUZ:8g|a-)3+ӶfV[.,MZTAT-/dboj݄qaAy2c M RDl2EҤi}f)jܣ1+~^K,t)R`8~<)5.E9x =YPb|W({РN'+bmauֱP_W{`) W5FY$_)=3oy||9t2"`XDKgT#Ҥd$[a2oa@zQD4i3 Ue36dzeBޮ +*!H}e11|L" -(_udK%/Pn8-QqT8I/Ae"M&&/G3:V O#u 2(ri*LY}ϙb+`+gM- 2Xݐ Qk&+Wz+ؽxRձzXV*|aPxSaEY3ZP g K_%FhW|J#}e@ +_fxiu&+uCVOG)8J8UM>= 0fc <,i`³fTZxU\8QK't!JDH\.+)l@\"bdWځ^޸H8Qh!BթpSV"Bpu/V(}` 2$c*\LC3:{gPNiJ@]tZ@T z\5=R{!|Iy%bV=գ);Sd9´Up-g *^y>g_/]o]KXKMcUQW{f"(L|lNhsq˶7:X.x +kwfM2}hlQ칭R*(z'w0K<2bU>WzPUwMѤ*W[*MNWX*ըSJ:-nԦT}M|WSy %jMDpt|*₶\h, T8)@+/_4+\b7iZ8'=;q;YuP juLVAN^5]? U9ah)x˱ +`L-jXO*yV.·j+ݱ+ +@yO ,֬oXFh{x ++'jWȗjһl9~V7gHᕈIѰ,ZWZr@>Łm+d|>=@zsgj_ W+IW1l3?}HWK~>_ox=){zIENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/colorpicker_rgb_b.png b/core/modules/color/colorpicker/images/colorpicker_rgb_b.png new file mode 100644 index 0000000..dfac595 --- /dev/null +++ b/core/modules/color/colorpicker/images/colorpicker_rgb_b.png @@ -0,0 +1,4 @@ +PNG + + IHDR>BC pHYs   cHRMz-RqEf9!'VPIDATxAKAl⚰ƃQj֘x1xP ݃! H)Ғ/Fnd=n7٘ Ig0nfC`088˲@aqxhE8#qUUq5&@ HGx=f;FT*u{{ 8==mcVt+U&$av~j}aPxq}}}`n&U6Cp:;Z>r~~\.{D"Q*uW&d(tϣvhb.00(jƲlOOi7e. +5zSd2f=,qa!O; *wqɺgQApuU3 {X( \\^Zg60kkkJp^PE"[S`lDBQ.aeY|Lg0wFRw||mڬS;@ @"cNq^]UUZ0S~S,r~L:)Ir]F}K0^a➉F]#<F5pk\#F`&Z]PFX)]%LI҇RGGGIh L#PTh5VL#uaJEEQ,˱XlvvާfmmmE0W}gg7770z76%%x\#P}Z=X]]* ͇Dk6`ii"T O5z=(MF#FFtq$?-kگO2hIENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/colorpicker_rgb_g.png b/core/modules/color/colorpicker/images/colorpicker_rgb_g.png new file mode 100644 index 0000000..72b3276 --- /dev/null +++ b/core/modules/color/colorpicker/images/colorpicker_rgb_g.png @@ -0,0 +1,6 @@ +PNG + + IHDR>BC pHYs   cHRMz-RqEf9!'VIDATxO@_lQ +DJP6цx"ƻwc$Dc .Q^t!\ҐTȩ*-P;4KdNSb``i0[@4](L'& VY$w %"^P՛C#kz}xxxddL&sppd;ТaeH$R*ǧ栖͕L&IŪe4Mkөyp qH$CCx 0qxu˭oo%IRh' .f'B{*㛛<7U~׉+ll2dYN\yJC+,2DQy>[IRųs].ğ@_P,NDkvvv8Epdha i),>>>ʲt:{{{m6[2LRoPoviZSvT @|7`˲$8UJ9Ym_/uJm5ru{<~ϓϏDtG0TD#q''tB-""QTEZDE&[h4'i}IU"E}C]DiN5 +>h}^jSvֆ) ?OLԙ_"`4% IǓJ%o5& UO"`u|h4*WD@lllȒ\_.XI ^%WB~ +XL!E5IzannN3$7"Jx!0Fҟ /x~(4K,IJIENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/colorpicker_rgb_r.png b/core/modules/color/colorpicker/images/colorpicker_rgb_r.png new file mode 100644 index 0000000..4855fe0 --- /dev/null +++ b/core/modules/color/colorpicker/images/colorpicker_rgb_r.png @@ -0,0 +1,5 @@ +PNG + + IHDR>BC pHYs   cHRMz-RqEf9!'VIDATxAKAeckX!K "* AY, /URQ4mLblt˺&At1a g6 fǑ6-N d2&J'I#QPISD].WUUO6j).B4߯'$a4x677s\ p:sg' /xh*0ժ8-U? b=^zvŢ~q8fekky bjSTul2lW׃XЏ+dvDeX-Lʙ\cJow:^\?ON>ml:β>(drqLg7FS-#p6};4)4`KOOx^绽ՌbY64-RZ[[EQLmmmEQHzUj(BӑJhX,r(VX,V5& W(PhU;s$Ut,FqQϞ3_d2d;| 'ocW? +H Llo#AD"*hO5BMAEQyonnc?P%%5ӤNEQi2>ID?$2bZmȬv;D30P!K2M|@M$(T~Դx/T = hLc;;C!}u`0`P#_" ?$קU/(b}bbB߈/P1T(%06&\YYQ&IR((-Xk_" U{ǗtsĐtJG0~Ɛ^ +9A3rIENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/colorpicker_select.gif b/core/modules/color/colorpicker/images/colorpicker_select.gif new file mode 100644 index 0000000..599f7f1 --- /dev/null +++ b/core/modules/color/colorpicker/images/colorpicker_select.gif @@ -0,0 +1 @@ +GIF89a !, hXFY}%pZtzwD7jWMTj=nI67fn-D:8bp +V7on|9cO5iAdB.BTi&AlM*{\_-|t] l\,7 ] L1CN$D Bi*e6fCW""$Ia mDɺnd3D·Tr<8 52%8sf7_˃$]l7Gp~3^`jK}V|~(K ܂x}`4edA@ +4<O?ڬs}w''a\~3s,,$w=N㇏7L$9q/{$~;z3lSyUT+k˞3sY) (tI[fx!ȃ*~H̊'i:_! JA2A2AAAdBAQ])! AAAc #PQ}‘"Џ # R 2 e%Y"Џ #Ȱ:A# Ղ CF"Џ #PZd(Qa}$2cj} CDd(,OA"L_b6Lrܷ6ks9\0䮏ӺsDp.VȬK\!nks95Afnƈ Cw|ddV$> A"̒ToA~LAAAAF # yA\e222,222+.7:2Zra;Pdz2s2d0dZFF Cj#@ c#@AAe CjAF cAFAAenl;2B[! 2 A+ddd3Ja:{1"XdX CF"ЏZd(Xd(Ùyz2db C Cfq ŬALAY!o# ʘ /# M2a*222̒ToAVȂ C& 22̌ArV P ` -t{c2B[! 2 2 V \ h`2a=u@d8NX 2d0206Zj#@ '0dZjAF t_ۑ"Џ # 2. P@AAFA[AA堞! 2 A2=M:3(2 =Z"# \] # yAzC cDAdV/# M3d(,IadTdddd 2fb2anoUF C? CDdx3}6Zs[V<(>[u&u[9J>h/o^sx"(?wwrރΉη_K|),?Fn޸fr07{ D  l0dKw0p$OZ?.6\\lxk7~׿f4K+nmzR5Ms%ɍņ$N8,GIL$OR%I4?LiF/AUU>^L^| {[5MJsq+ei%yTUʜMRIENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/custom_hex.png b/core/modules/color/colorpicker/images/custom_hex.png new file mode 100644 index 0000000..888f444 --- /dev/null +++ b/core/modules/color/colorpicker/images/custom_hex.png @@ -0,0 +1,4 @@ +PNG + + IHDRH,Ii\ pHYs   cHRMz-RqEf9!'VIDATxKAǿ L"<Ea!:;<B!P`F ++mcmivf7TkwPbшt3ӊ5Z&3|i#x2cا{Pj~UUQE_{Ṋ}O ]j&f2ws<2YwQJ50B #$1RP*x0FpڌSˏU)w?t`vrbZY>BC pHYs   cHRMz-RqEf9!'VIDATx{HA;wz^(,|$>E"IWA D= (RYETH +F8-{폵mnoFwcv73ߛgO5bwCR,2#Q:dwbqH' (HapHWn)Mдh-ͪB +YQ:qK4ܴl)n +1QU8 $ʷ[u|9;'X `X#[(cԂ̬wm1 *ܖ=:mxwÇJ3Rhz(*iaV鼪\CS-."6^UUNL0S7h^uL k#Y9dWHg}LEy!v_4o_5++)eʲK#Ie$ cpJ_ΜYLO5"u9#?vY/p{&qTTV%'.,,,lӧm2PtHFüJLYc_Ig`@HAJS*􋯲tJGĔm:6F&ŠQP7y@|LDcwȒ ۣBwvZU*վ5.TUoCzpDwO@@$0$!" O q1&˨ Pfٝ2%]o[D#_"@HDñ%jFD@ S*ШIl"I>\<)D$)k"r\P~ce0Wk\>Ε~",Ӛޕ%aΝ>n{ "; ={_)k"&a|z-[| +(C"0dc5(R:Aͺl7HRIENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/custom_hsb_h.png b/core/modules/color/colorpicker/images/custom_hsb_h.png new file mode 100644 index 0000000..a217e92 --- /dev/null +++ b/core/modules/color/colorpicker/images/custom_hsb_h.png @@ -0,0 +1,4 @@ +PNG + + IHDR>BC pHYs   cHRMz-RqEf9!'VPIDATx]HA3{)h"w ACD>$كP/%!D`ABDC>B! EEyznsm{{]gffo~ ٙ13_|m-6ڮ(/=}$I@a`B{؋m㢘߿<ץTMT,)=< ~f.g)ItI5.-4 ;qq]=Fot\ǝdX'26]'t%k9դiL#`#wd7ItF404CcTښ*A#PYQif2u~ek´~౹tqYh5քpV#`s㲺J["MQi*F@3FUOFwW+tw"U[D{S`86{i\#Iׯ݇oYx}K^ߒh舎)ߐUltfK_Uouqz$x1P077Goz)F<k_99tIENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/custom_hsb_s.png b/core/modules/color/colorpicker/images/custom_hsb_s.png new file mode 100644 index 0000000..7826b41 --- /dev/null +++ b/core/modules/color/colorpicker/images/custom_hsb_s.png @@ -0,0 +1,7 @@ +PNG + + IHDR>BC pHYs   cHRMz-RqEf9!'VIDATxmHSQǟ{6ݚX1-{T #( +?A/ dE!aR}H("!2UV[V79vo潊rpv3Ξ=9iv;q a>^DZ| q\bbG\xR @0z4DKoyRnNNq:5]'eـ.<߲e}!)\a¬e٢gך6.2cQdtz}nwyyynn.;ibz.08}JI8: +OhRUU5/-o٢WSPuuXЌ46Mvܳ*7=appH +c08 Q yaZZYY{J6oojFһ +4-ixUZZZ>AsfR%K8gGG^"3Ljj}(u⌆iM8 >!T:#=MI"8~]ҍF̵Xq3v\RLsgB}.WVF]Q"."]Qe˗*Hd*3JD"a*%\뤈TX\(7QZZZ\\@enL,Mʋ-'m흪$fSD`vR'Q㵚uOP"yGeKhPcXrVS+bJt : D)Dӡq^KDD>'3GwW%̩W؁/4hE?ӳ1 fPR}H|mzoTߎ'.ߌDh<.Zȃ&H^ %ڑGݰrGDs${LjקZˈ*G!]g9' kIENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/custom_indic.gif b/core/modules/color/colorpicker/images/custom_indic.gif new file mode 100644 index 0000000..222fb94 --- /dev/null +++ b/core/modules/color/colorpicker/images/custom_indic.gif @@ -0,0 +1 @@ +GIF89a# Θ!,# 'L˝qh\Emf86!xNS~ kLP; \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/custom_rgb_b.png b/core/modules/color/colorpicker/images/custom_rgb_b.png new file mode 100644 index 0000000..80764e5 --- /dev/null +++ b/core/modules/color/colorpicker/images/custom_rgb_b.png @@ -0,0 +1,5 @@ +PNG + + IHDR>BC pHYs   cHRMz-RqEf9!'VvIDATxkHAvgz}PYx]J)H"oՇ! +DA=>HeaVTPA)0CqZUwCڲ]7C;̇ٹٛ;S =>[&jKMI>a.uh5苁@t߮ې&طIQ*tF*2fm4T"N 6ڒ>؜ohk}>Fjt\-CJ~幺@`i:ip‚_Rt> ! wӨYΚjZˀM:=82,#8=T/9]Ô/Cg#B> >kytq{=V~zoCӔeC+W3V$޹ٙA}r!β)/[8Bj籏-ٹ l[SU],Xs.OFH/nؘQ? +E"M=޹4b0DIҾMhW:D ik>zzj2l5C^G%%+4HhwI'$!6ڲl_ZJ7֪P(]HUZdx7=:# uY,F@6lh2e#dmc5,.Q#;swkHz#t,Fp5T\<GE(ypH|;\x Ii#s1s=sхڣ\JuO;5w9yk\#![M/=}߉@Zj+ɫt+ ]#WsD~cj$!Ŋ_gBIENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/custom_rgb_g.png b/core/modules/color/colorpicker/images/custom_rgb_g.png new file mode 100644 index 0000000..fc9778b --- /dev/null +++ b/core/modules/color/colorpicker/images/custom_rgb_g.png @@ -0,0 +1,4 @@ +PNG + + IHDR>BC pHYs   cHRMz-RqEf9!'VIDATx]HSaǜu(D$7A7vXYiid Yx!ieARt !I#77;];7B;x^yy6`!'}n^Cv zloc:Q ƣJ?8?0 x$?o1pP}hCӧNܟ݇N1\KgHvNiڋ] ʎiu& n!hLjT:jWJ<dg ~dg|ئY\ZҪXf92|gsCMHP IL׫$(8vvuOb"efuxtf/;WLʖ<~SkGt FU6rtb[%JLrDIqE2טOP=xb_Y"f5[A1aK_5N;DQqBi~|KLKN^R0#Su_O[}tQRZ^ޝTնz!_&7 OC?Mftc#58cs~URT ̜9a`bfN'+9}C@Kҕ +@^N&G{" {"@" I{$lC"& R͠x͡yJz^~&Ё\'Pap,IP%ՂuP%3V[uq^@Meѕ 8vVW2N^Mk:"Jyh40,[)-O]aA5>׷qF^'4w%#K'#DΑD`bfWݛfGU:yZuD"=)TIENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/custom_rgb_r.png b/core/modules/color/colorpicker/images/custom_rgb_r.png new file mode 100644 index 0000000..91b0cd4 --- /dev/null +++ b/core/modules/color/colorpicker/images/custom_rgb_r.png @@ -0,0 +1,6 @@ +PNG + + IHDR>BC pHYs   cHRMz-RqEf9!'VIDATx]HAvgӳ#/1X臌f愹pQ}>OD,ן'(OO:=3&wǬ}RR6 :n t_|>rN#@<qvW@~Ud cϹ͎zR6By#Ǒ1VvY4u,q7F7\1lF F7FmI#VeF` lx~ s8D1XjՄq:cXG8DE2yRQF"MMmX`47jqZp4U#@ЦiK5puI?w}g^:{IENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/custom_submit.png b/core/modules/color/colorpicker/images/custom_submit.png new file mode 100644 index 0000000..cd202cd --- /dev/null +++ b/core/modules/color/colorpicker/images/custom_submit.png @@ -0,0 +1,6 @@ +PNG + + IHDR,7ߧ pHYs   cHRMz-RqEf9!'VkIDATxodƟׯĉF-EaKAKӺl7\ 2&6:iRA-JW5ݔ~i;'..HkGͱ9DXҰ}^X:B=[gXea0 󟷈'fgfH v"IENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/select.png b/core/modules/color/colorpicker/images/select.png new file mode 100644 index 0000000..21213bf --- /dev/null +++ b/core/modules/color/colorpicker/images/select.png @@ -0,0 +1,5 @@ +PNG + + IHDR$$gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxJ@w7zIR"\ ^n~9@*PκOf 4 CW迌E}fƘʹRI~ݮ*?hH$]f4.(Wń ' +8ZSp6ˇN c"Na<4* &:ֺ Dd2ć </yķPdIENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/images/slider.png b/core/modules/color/colorpicker/images/slider.png new file mode 100644 index 0000000..8b03da9 --- /dev/null +++ b/core/modules/color/colorpicker/images/slider.png @@ -0,0 +1,10 @@ +PNG + + IHDRL}8vgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATx;0 PP8b(C ~JF[qR,ڬ[^ֵy>Y1( +BP( +/9r˽Ź %Q( +BP(+bBP( +BV9W7J]( +BP(ҕX@P( +BP*}/DI +BP(JcsKvTK,w+[2"IENDB` \ No newline at end of file diff --git a/core/modules/color/colorpicker/js/colorpicker.js b/core/modules/color/colorpicker/js/colorpicker.js new file mode 100644 index 0000000..45f56ce --- /dev/null +++ b/core/modules/color/colorpicker/js/colorpicker.js @@ -0,0 +1,484 @@ +/** + * + * Color picker + * Author: Stefan Petre www.eyecon.ro + * + * Dual licensed under the MIT and GPL licenses + * + */ +(function ($) { + var ColorPicker = function () { + var + ids = {}, + inAction, + charMin = 65, + visible, + tpl = '
', + defaults = { + eventName: 'click', + onShow: function () {}, + onBeforeShow: function(){}, + onHide: function () {}, + onChange: function () {}, + onSubmit: function () {}, + color: 'ff0000', + livePreview: true, + flat: false + }, + fillRGBFields = function (hsb, cal) { + var rgb = HSBToRGB(hsb); + $(cal).data('colorpicker').fields + .eq(1).val(rgb.r).end() + .eq(2).val(rgb.g).end() + .eq(3).val(rgb.b).end(); + }, + fillHSBFields = function (hsb, cal) { + $(cal).data('colorpicker').fields + .eq(4).val(hsb.h).end() + .eq(5).val(hsb.s).end() + .eq(6).val(hsb.b).end(); + }, + fillHexFields = function (hsb, cal) { + $(cal).data('colorpicker').fields + .eq(0).val(HSBToHex(hsb)).end(); + }, + setSelector = function (hsb, cal) { + $(cal).data('colorpicker').selector.css('backgroundColor', '#' + HSBToHex({h: hsb.h, s: 100, b: 100})); + $(cal).data('colorpicker').selectorIndic.css({ + left: parseInt(150 * hsb.s/100, 10), + top: parseInt(150 * (100-hsb.b)/100, 10) + }); + }, + setHue = function (hsb, cal) { + $(cal).data('colorpicker').hue.css('top', parseInt(150 - 150 * hsb.h/360, 10)); + }, + setCurrentColor = function (hsb, cal) { + $(cal).data('colorpicker').currentColor.css('backgroundColor', '#' + HSBToHex(hsb)); + }, + setNewColor = function (hsb, cal) { + $(cal).data('colorpicker').newColor.css('backgroundColor', '#' + HSBToHex(hsb)); + }, + keyDown = function (ev) { + var pressedKey = ev.charCode || ev.keyCode || -1; + if ((pressedKey > charMin && pressedKey <= 90) || pressedKey == 32) { + return false; + } + var cal = $(this).parent().parent(); + if (cal.data('colorpicker').livePreview === true) { + change.apply(this); + } + }, + change = function (ev) { + var cal = $(this).parent().parent(), col; + if (this.parentNode.className.indexOf('_hex') > 0) { + cal.data('colorpicker').color = col = HexToHSB(fixHex(this.value)); + } else if (this.parentNode.className.indexOf('_hsb') > 0) { + cal.data('colorpicker').color = col = fixHSB({ + h: parseInt(cal.data('colorpicker').fields.eq(4).val(), 10), + s: parseInt(cal.data('colorpicker').fields.eq(5).val(), 10), + b: parseInt(cal.data('colorpicker').fields.eq(6).val(), 10) + }); + } else { + cal.data('colorpicker').color = col = RGBToHSB(fixRGB({ + r: parseInt(cal.data('colorpicker').fields.eq(1).val(), 10), + g: parseInt(cal.data('colorpicker').fields.eq(2).val(), 10), + b: parseInt(cal.data('colorpicker').fields.eq(3).val(), 10) + })); + } + if (ev) { + fillRGBFields(col, cal.get(0)); + fillHexFields(col, cal.get(0)); + fillHSBFields(col, cal.get(0)); + } + setSelector(col, cal.get(0)); + setHue(col, cal.get(0)); + setNewColor(col, cal.get(0)); + cal.data('colorpicker').onChange.apply(cal, [col, HSBToHex(col), HSBToRGB(col)]); + }, + blur = function (ev) { + var cal = $(this).parent().parent(); + cal.data('colorpicker').fields.parent().removeClass('colorpicker_focus'); + }, + focus = function () { + charMin = this.parentNode.className.indexOf('_hex') > 0 ? 70 : 65; + $(this).parent().parent().data('colorpicker').fields.parent().removeClass('colorpicker_focus'); + $(this).parent().addClass('colorpicker_focus'); + }, + downIncrement = function (ev) { + var field = $(this).parent().find('input').focus(); + var current = { + el: $(this).parent().addClass('colorpicker_slider'), + max: this.parentNode.className.indexOf('_hsb_h') > 0 ? 360 : (this.parentNode.className.indexOf('_hsb') > 0 ? 100 : 255), + y: ev.pageY, + field: field, + val: parseInt(field.val(), 10), + preview: $(this).parent().parent().data('colorpicker').livePreview + }; + $(document).bind('mouseup', current, upIncrement); + $(document).bind('mousemove', current, moveIncrement); + }, + moveIncrement = function (ev) { + ev.data.field.val(Math.max(0, Math.min(ev.data.max, parseInt(ev.data.val + ev.pageY - ev.data.y, 10)))); + if (ev.data.preview) { + change.apply(ev.data.field.get(0), [true]); + } + return false; + }, + upIncrement = function (ev) { + change.apply(ev.data.field.get(0), [true]); + ev.data.el.removeClass('colorpicker_slider').find('input').focus(); + $(document).unbind('mouseup', upIncrement); + $(document).unbind('mousemove', moveIncrement); + return false; + }, + downHue = function (ev) { + var current = { + cal: $(this).parent(), + y: $(this).offset().top + }; + current.preview = current.cal.data('colorpicker').livePreview; + $(document).bind('mouseup', current, upHue); + $(document).bind('mousemove', current, moveHue); + }, + moveHue = function (ev) { + change.apply( + ev.data.cal.data('colorpicker') + .fields + .eq(4) + .val(parseInt(360*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.y))))/150, 10)) + .get(0), + [ev.data.preview] + ); + return false; + }, + upHue = function (ev) { + fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); + fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); + $(document).unbind('mouseup', upHue); + $(document).unbind('mousemove', moveHue); + return false; + }, + downSelector = function (ev) { + var current = { + cal: $(this).parent(), + pos: $(this).offset() + }; + current.preview = current.cal.data('colorpicker').livePreview; + $(document).bind('mouseup', current, upSelector); + $(document).bind('mousemove', current, moveSelector); + }, + moveSelector = function (ev) { + change.apply( + ev.data.cal.data('colorpicker') + .fields + .eq(6) + .val(parseInt(100*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.pos.top))))/150, 10)) + .end() + .eq(5) + .val(parseInt(100*(Math.max(0,Math.min(150,(ev.pageX - ev.data.pos.left))))/150, 10)) + .get(0), + [ev.data.preview] + ); + return false; + }, + upSelector = function (ev) { + fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); + fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); + $(document).unbind('mouseup', upSelector); + $(document).unbind('mousemove', moveSelector); + return false; + }, + enterSubmit = function (ev) { + $(this).addClass('colorpicker_focus'); + }, + leaveSubmit = function (ev) { + $(this).removeClass('colorpicker_focus'); + }, + clickSubmit = function (ev) { + var cal = $(this).parent(); + var col = cal.data('colorpicker').color; + cal.data('colorpicker').origColor = col; + setCurrentColor(col, cal.get(0)); + cal.data('colorpicker').onSubmit(col, HSBToHex(col), HSBToRGB(col), cal.data('colorpicker').el); + }, + show = function (ev) { + var cal = $('#' + $(this).data('colorpickerId')); + cal.data('colorpicker').onBeforeShow.apply(this, [cal.get(0)]); + var pos = $(this).offset(); + var viewPort = getViewport(); + var top = pos.top + this.offsetHeight; + var left = pos.left; + if (top + 176 > viewPort.t + viewPort.h) { + top -= this.offsetHeight + 176; + } + if (left + 356 > viewPort.l + viewPort.w) { + left -= 356; + } + cal.css({left: left + 'px', top: top + 'px'}); + if (cal.data('colorpicker').onShow.apply(this, [cal.get(0)]) != false) { + cal.show(); + } + $(document).bind('mousedown', {cal: cal}, hide); + return false; + }, + hide = function (ev) { + if (!isChildOf(ev.data.cal.get(0), ev.target, ev.data.cal.get(0))) { + if (ev.data.cal.data('colorpicker').onHide.apply(this, [ev.data.cal.get(0)]) != false) { + ev.data.cal.hide(); + } + $(document).unbind('mousedown', hide); + } + }, + isChildOf = function(parentEl, el, container) { + if (parentEl == el) { + return true; + } + if (parentEl.contains) { + return parentEl.contains(el); + } + if ( parentEl.compareDocumentPosition ) { + return !!(parentEl.compareDocumentPosition(el) & 16); + } + var prEl = el.parentNode; + while(prEl && prEl != container) { + if (prEl == parentEl) + return true; + prEl = prEl.parentNode; + } + return false; + }, + getViewport = function () { + var m = document.compatMode == 'CSS1Compat'; + return { + l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft), + t : window.pageYOffset || (m ? document.documentElement.scrollTop : document.body.scrollTop), + w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth), + h : window.innerHeight || (m ? document.documentElement.clientHeight : document.body.clientHeight) + }; + }, + fixHSB = function (hsb) { + return { + h: Math.min(360, Math.max(0, hsb.h)), + s: Math.min(100, Math.max(0, hsb.s)), + b: Math.min(100, Math.max(0, hsb.b)) + }; + }, + fixRGB = function (rgb) { + return { + r: Math.min(255, Math.max(0, rgb.r)), + g: Math.min(255, Math.max(0, rgb.g)), + b: Math.min(255, Math.max(0, rgb.b)) + }; + }, + fixHex = function (hex) { + var len = 6 - hex.length; + if (len > 0) { + var o = []; + for (var i=0; i -1) ? hex.substring(1) : hex), 16); + return {r: hex >> 16, g: (hex & 0x00FF00) >> 8, b: (hex & 0x0000FF)}; + }, + HexToHSB = function (hex) { + return RGBToHSB(HexToRGB(hex)); + }, + RGBToHSB = function (rgb) { + var hsb = { + h: 0, + s: 0, + b: 0 + }; + var min = Math.min(rgb.r, rgb.g, rgb.b); + var max = Math.max(rgb.r, rgb.g, rgb.b); + var delta = max - min; + hsb.b = max; + if (max != 0) { + + } + hsb.s = max != 0 ? 255 * delta / max : 0; + if (hsb.s != 0) { + if (rgb.r == max) { + hsb.h = (rgb.g - rgb.b) / delta; + } else if (rgb.g == max) { + hsb.h = 2 + (rgb.b - rgb.r) / delta; + } else { + hsb.h = 4 + (rgb.r - rgb.g) / delta; + } + } else { + hsb.h = -1; + } + hsb.h *= 60; + if (hsb.h < 0) { + hsb.h += 360; + } + hsb.s *= 100/255; + hsb.b *= 100/255; + return hsb; + }, + HSBToRGB = function (hsb) { + var rgb = {}; + var h = Math.round(hsb.h); + var s = Math.round(hsb.s*255/100); + var v = Math.round(hsb.b*255/100); + if(s == 0) { + rgb.r = rgb.g = rgb.b = v; + } else { + var t1 = v; + var t2 = (255-s)*v/255; + var t3 = (t1-t2)*(h%60)/60; + if(h==360) h = 0; + if(h<60) {rgb.r=t1; rgb.b=t2; rgb.g=t2+t3} + else if(h<120) {rgb.g=t1; rgb.b=t2; rgb.r=t1-t3} + else if(h<180) {rgb.g=t1; rgb.r=t2; rgb.b=t2+t3} + else if(h<240) {rgb.b=t1; rgb.r=t2; rgb.g=t1-t3} + else if(h<300) {rgb.b=t1; rgb.g=t2; rgb.r=t2+t3} + else if(h<360) {rgb.r=t1; rgb.g=t2; rgb.b=t1-t3} + else {rgb.r=0; rgb.g=0; rgb.b=0} + } + return {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)}; + }, + RGBToHex = function (rgb) { + var hex = [ + rgb.r.toString(16), + rgb.g.toString(16), + rgb.b.toString(16) + ]; + $.each(hex, function (nr, val) { + if (val.length == 1) { + hex[nr] = '0' + val; + } + }); + return hex.join(''); + }, + HSBToHex = function (hsb) { + return RGBToHex(HSBToRGB(hsb)); + }, + restoreOriginal = function () { + var cal = $(this).parent(); + var col = cal.data('colorpicker').origColor; + cal.data('colorpicker').color = col; + fillRGBFields(col, cal.get(0)); + fillHexFields(col, cal.get(0)); + fillHSBFields(col, cal.get(0)); + setSelector(col, cal.get(0)); + setHue(col, cal.get(0)); + setNewColor(col, cal.get(0)); + }; + return { + init: function (opt) { + opt = $.extend({}, defaults, opt||{}); + if (typeof opt.color == 'string') { + opt.color = HexToHSB(opt.color); + } else if (opt.color.r != undefined && opt.color.g != undefined && opt.color.b != undefined) { + opt.color = RGBToHSB(opt.color); + } else if (opt.color.h != undefined && opt.color.s != undefined && opt.color.b != undefined) { + opt.color = fixHSB(opt.color); + } else { + return this; + } + return this.each(function () { + if (!$(this).data('colorpickerId')) { + var options = $.extend({}, opt); + options.origColor = opt.color; + var id = 'collorpicker_' + parseInt(Math.random() * 1000); + $(this).data('colorpickerId', id); + var cal = $(tpl).attr('id', id); + if (options.flat) { + cal.appendTo(this).show(); + } else { + cal.appendTo(document.body); + } + options.fields = cal + .find('input') + .bind('keyup', keyDown) + .bind('change', change) + .bind('blur', blur) + .bind('focus', focus); + cal + .find('span').bind('mousedown', downIncrement).end() + .find('>div.colorpicker_current_color').bind('click', restoreOriginal); + options.selector = cal.find('div.colorpicker_color').bind('mousedown', downSelector); + options.selectorIndic = options.selector.find('div div'); + options.el = this; + options.hue = cal.find('div.colorpicker_hue div'); + cal.find('div.colorpicker_hue').bind('mousedown', downHue); + options.newColor = cal.find('div.colorpicker_new_color'); + options.currentColor = cal.find('div.colorpicker_current_color'); + cal.data('colorpicker', options); + cal.find('div.colorpicker_submit') + .bind('mouseenter', enterSubmit) + .bind('mouseleave', leaveSubmit) + .bind('click', clickSubmit); + fillRGBFields(options.color, cal.get(0)); + fillHSBFields(options.color, cal.get(0)); + fillHexFields(options.color, cal.get(0)); + setHue(options.color, cal.get(0)); + setSelector(options.color, cal.get(0)); + setCurrentColor(options.color, cal.get(0)); + setNewColor(options.color, cal.get(0)); + if (options.flat) { + cal.css({ + position: 'relative', + display: 'block' + }); + } else { + $(this).bind(options.eventName, show); + } + } + }); + }, + showPicker: function() { + return this.each( function () { + if ($(this).data('colorpickerId')) { + show.apply(this); + } + }); + }, + hidePicker: function() { + return this.each( function () { + if ($(this).data('colorpickerId')) { + $('#' + $(this).data('colorpickerId')).hide(); + } + }); + }, + setColor: function(col) { + if (typeof col == 'string') { + col = HexToHSB(col); + } else if (col.r != undefined && col.g != undefined && col.b != undefined) { + col = RGBToHSB(col); + } else if (col.h != undefined && col.s != undefined && col.b != undefined) { + col = fixHSB(col); + } else { + return this; + } + return this.each(function(){ + if ($(this).data('colorpickerId')) { + var cal = $('#' + $(this).data('colorpickerId')); + cal.data('colorpicker').color = col; + cal.data('colorpicker').origColor = col; + fillRGBFields(col, cal.get(0)); + fillHSBFields(col, cal.get(0)); + fillHexFields(col, cal.get(0)); + setHue(col, cal.get(0)); + setSelector(col, cal.get(0)); + setCurrentColor(col, cal.get(0)); + setNewColor(col, cal.get(0)); + } + }); + } + }; + }(); + $.fn.extend({ + ColorPicker: ColorPicker.init, + ColorPickerHide: ColorPicker.hidePicker, + ColorPickerShow: ColorPicker.showPicker, + ColorPickerSetColor: ColorPicker.setColor + }); +})(jQuery) \ No newline at end of file diff --git a/core/modules/color/preview.js b/core/modules/color/preview.js index b15a7b6..67eef0b 100644 --- a/core/modules/color/preview.js +++ b/core/modules/color/preview.js @@ -4,44 +4,33 @@ */ (function ($) { - - "use strict"; - Drupal.color = { callback: function(context, settings, form, farb, height, width) { // Solid background. - form.find('#preview').css('backgroundColor', form.find('#palette input[name="palette[base]"]').val()); + $('#preview', form).css('backgroundColor', $('#palette input[name="palette[base]"]', form).val()); // Text preview - form.find('#text').css('color', form.find('#palette input[name="palette[text]"]').val()); - form.find('#text a, #text h2').css('color', form.find('#palette input[name="palette[link]"]').val()); - - function gradientLineColor(i, element) { - for (var k in accum) { - if (accum.hasOwnProperty(k)) { - accum[k] += delta[k]; - } - } - element.style.backgroundColor = farb.pack(accum); - } + $('#text', form).css('color', $('#palette input[name="palette[text]"]', form).val()); + $('#text a, #text h2', form).css('color', $('#palette input[name="palette[link]"]', form).val()); // Set up gradients if there are some. var color_start, color_end; - for (var i in settings.gradients) { - if (settings.gradients.hasOwnProperty(i)) { - color_start = farb.unpack(form.find('#palette input[name="palette[' + settings.gradients[i].colors[0] + ']"]').val()); - color_end = farb.unpack(form.find('#palette input[name="palette[' + settings.gradients[i].colors[1] + ']"]').val()); - if (color_start && color_end) { - var delta = []; - for (var j in color_start) { - if (color_start.hasOwnProperty(j)) { - delta[j] = (color_end[j] - color_start[j]) / (settings.gradients[i].vertical ? height[i] : width[i]); - } - } - var accum = color_start; - // Render gradient lines. - form.find('#gradient-' + i + ' > div').each(gradientLineColor); + for (i in settings.gradients) { + color_start = farb.unpack($('#palette input[name="palette[' + settings.gradients[i]['colors'][0] + ']"]', form).val()); + color_end = farb.unpack($('#palette input[name="palette[' + settings.gradients[i]['colors'][1] + ']"]', form).val()); + if (color_start && color_end) { + var delta = []; + for (j in color_start) { + delta[j] = (color_end[j] - color_start[j]) / (settings.gradients[i]['vertical'] ? height[i] : width[i]); } + var accum = color_start; + // Render gradient lines. + $('#gradient-' + i + ' > div', form).each(function () { + for (j in accum) { + accum[j] += delta[j]; + } + this.style.backgroundColor = farb.pack(accum); + }); } } } diff --git a/core/modules/system/system.module b/core/modules/system/system.module index 9756edc..7f24bb8 100644 --- a/core/modules/system/system.module +++ b/core/modules/system/system.module @@ -1434,19 +1434,6 @@ function system_library_info() { ), ); - // Farbtastic. - $libraries['jquery.farbtastic'] = array( - 'title' => 'Farbtastic', - 'website' => 'http://code.google.com/p/farbtastic/', - 'version' => '1.2', - 'js' => array( - 'core/misc/farbtastic/farbtastic.js' => array(), - ), - 'css' => array( - 'core/misc/farbtastic/farbtastic.css' => array(), - ), - ); - // HTML5 Shiv. $libraries['html5shiv'] = array( 'title' => 'html5shiv', -- 1.7.11.5