From 030b55d75042e1f7c5622ec8059c87b6d6648b55 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Sun, 16 Sep 2007 02:23:10 +0000 Subject: [PATCH] mujma: ENHANCEMENTS: Added new design for ImageEditor?. (merged from branches/gsoc) git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/cms/trunk@42046 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- code/ImageEditor.php | 15 + css/ImageEditor/ImageEditor.css | 318 +++++++++++++++++- images/ImageEditor/back.png | Bin 0 -> 711 bytes images/ImageEditor/c1.png | Bin 0 -> 787 bytes images/ImageEditor/c1Exit.png | Bin 0 -> 1434 bytes images/ImageEditor/c1Redo.png | Bin 0 -> 829 bytes images/ImageEditor/c1Save.png | Bin 0 -> 1993 bytes images/ImageEditor/c1Undo.png | Bin 0 -> 835 bytes images/ImageEditor/c2.png | Bin 0 -> 451 bytes images/ImageEditor/c2Crop.png | Bin 0 -> 1488 bytes images/ImageEditor/c2Rotate.png | Bin 0 -> 1411 bytes images/ImageEditor/c3.png | Bin 0 -> 414 bytes images/ImageEditor/c3Apply.png | Bin 0 -> 1270 bytes images/ImageEditor/c3Cancel.png | Bin 0 -> 1795 bytes images/ImageEditor/clickBox.JPG | Bin 633 -> 0 bytes images/ImageEditor/clickBox.png | Bin 0 -> 244 bytes images/ImageEditor/leftRuler.png | Bin 0 -> 1072 bytes images/ImageEditor/topLeft.png | Bin 0 -> 320 bytes images/ImageEditor/topRight.png | Bin 0 -> 2422 bytes images/ImageEditor/topRuler.png | Bin 0 -> 1924 bytes javascript/ImageEditor/Activator.js | 23 +- javascript/ImageEditor/Crop.js | 22 +- javascript/ImageEditor/DocumentBody.js | 26 +- javascript/ImageEditor/Effects.js | 2 +- javascript/ImageEditor/Image.js | 24 +- javascript/ImageEditor/ImageBox.js | 2 +- javascript/ImageEditor/ImageEditor.js | 5 +- javascript/ImageEditor/ImageHistory.js | 15 +- javascript/ImageEditor/ImageTransformation.js | 2 +- javascript/ImageEditor/Resize.js | 4 +- javascript/ImageEditor/Resizeable.js | 4 +- javascript/ImageEditor/Utils.js | 17 + templates/ImageEditor.ss | 116 +++++-- 33 files changed, 512 insertions(+), 83 deletions(-) create mode 100644 images/ImageEditor/back.png create mode 100644 images/ImageEditor/c1.png create mode 100644 images/ImageEditor/c1Exit.png create mode 100644 images/ImageEditor/c1Redo.png create mode 100644 images/ImageEditor/c1Save.png create mode 100644 images/ImageEditor/c1Undo.png create mode 100644 images/ImageEditor/c2.png create mode 100644 images/ImageEditor/c2Crop.png create mode 100644 images/ImageEditor/c2Rotate.png create mode 100644 images/ImageEditor/c3.png create mode 100644 images/ImageEditor/c3Apply.png create mode 100644 images/ImageEditor/c3Cancel.png delete mode 100644 images/ImageEditor/clickBox.JPG create mode 100644 images/ImageEditor/clickBox.png create mode 100644 images/ImageEditor/leftRuler.png create mode 100644 images/ImageEditor/topLeft.png create mode 100644 images/ImageEditor/topRight.png create mode 100644 images/ImageEditor/topRuler.png diff --git a/code/ImageEditor.php b/code/ImageEditor.php index aa6f8105..a755abba 100644 --- a/code/ImageEditor.php +++ b/code/ImageEditor.php @@ -8,6 +8,8 @@ public $fileToEdit = ""; + public $fileToEditOnlyName = ""; + /** * Includes all JS required for ImageEditor. This method requires setting * a fileToEdit URL in POST. @@ -39,6 +41,7 @@ if(!isset($this->requestParams['fileToEdit'])) $this->raiseError(); $fileWithPath = $this->requestParams['fileToEdit']; $this->fileToEdit = $this->file2Origin($fileWithPath); + $this->fileToEditOnlyName = $this->urlToFilename($this->fileToEdit); return $this->renderWith(__CLASS__); } @@ -220,4 +223,16 @@ echo "parent.parent.parent.statusMessage('Error: " . $message . "','bad',false);"; exit(); } + + /** + * Method converts retrieves filename from url + * + * @param url + * + */ + + private function urlToFilename($url) { + $path = pathinfo($url); + return $path['filename'] . "." . substr($path['extension'],0,strpos($path['extension'],'?')); + } } diff --git a/css/ImageEditor/ImageEditor.css b/css/ImageEditor/ImageEditor.css index 9741f2f4..434c8bf1 100644 --- a/css/ImageEditor/ImageEditor.css +++ b/css/ImageEditor/ImageEditor.css @@ -1,14 +1,21 @@ * { - margin: 0px; - padding: 0px; + margin: 0; + padding: 0; +} +a, a:visited +{ + text-decoration: none; + width: 0; + height: 0; + position: absolute; } .clickBox { width: 7px; height: 7px; - background-color: red; + background-image: url(../../images/ImageEditor/clickBox.png); position: absolute; overflow: hidden; } @@ -64,18 +71,32 @@ { position: absolute; } -#menuBarContainer +#MenuBar { - border-bottom: 1px solid; - height: 100px; + height: 132px; + background-image: url(../../images/ImageEditor/topLeft.png); } +#TopLeft { + float: left; + width: 584px; + height: 132px; + background-image: url(../../images/ImageEditor/topLeft.png); + display: inline; +} +#TopRight { + position: absolute; + width: 180px; + height: 132px; + background-image: url(../../images/ImageEditor/topRight.png); +} + #image { display: block; } -.floatRight +.floatLeft { - float: right; + float: left; } #loadingIndicatorContainer { @@ -112,19 +133,290 @@ body height: 100%; width: 100%; } -#mainContainer +#Main { position: absolute; border-color: black; border-style: solid; - height: 97%; - width: 98%; - left: 1%; - top: 1%; + height: 95%; + width: 99%; background-color: white; } #imageEditorContainer { position: relative; + top: 15px; + left: 15px; + overflow: auto; + background-image: url(../../images/ImageEditor/back.png); +} +#Actions +{ + position: absolute; + left: 10px; + top: 38px; + width: 211px; + height: 73px; + background-image: url(../../images/ImageEditor/c1.png); +} +#SaveText +{ + position: absolute; + top: 40px; + left: 13px; +} +#SaveIcon +{ + position: absolute; + left: 33px; + top: 10px; + width: 30px; + height: 30px; + background-image: url(../../images/ImageEditor/c1Save.png); + cursor: hand;/* IE Hack, because have 0 width/height.*/ +} +#ExitText +{ + position: absolute; + top: 40px; + left: 95px; +} +#ExitIcon +{ + position: absolute; + left: 97px; + top: 15px; + width: 26px; + height: 26px; + background-image: url(../../images/ImageEditor/c1Exit.png); + cursor: hand;/* IE Hack, because have 0 width/height.*/ +} +#UndoText +{ + position: absolute; + top: 14px; + left: 175px; +} +#UndoIcon +{ + position: absolute; + left: 145px; + top: 15px; + width: 24px; + height: 14px; + background-image: url(../../images/ImageEditor/c1Undo.png); + background-repeat: no-repeat;/* IE hack */ + cursor: hand;/* IE Hack, because have 0 width/height.*/ +} +#RedoText +{ + position: absolute; + top: 38px; + left: 175px; +} +#RedoIcon +{ + position: absolute; + left: 143px; + top: 38px; + width: 25px; + height: 13px; + background-image: url(../../images/ImageEditor/c1Redo.png); + background-repeat: no-repeat;/* IE hack */ + cursor: hand;/* IE Hack, because have width/height.*/ +} +#ActionsDescription +{ + position: absolute; + top: 57px; + left: 85px; +} +.menuText +{ + color: #6C889E; + font-family: sans-serif; + font-size: 13px; +} +#Functions +{ + position: absolute; + left: 240px; + top: 38px; + height: 73px; + width: 220px; + background-image: url(../../images/ImageEditor/c2.png); +} +#RotateIcon +{ + position: absolute; + left: 17px; + top: 11px; + height: 26px; + width: 30px; + background-image: url(../../images/ImageEditor/c2Rotate.png); + cursor: hand;/* IE Hack, because have width/height.*/ +} +#RotateText +{ + position: absolute; + top: 39px; + left: 15px; +} +#CropIcon +{ + position: absolute; + left: 66px; + top: 11px; + height: 28px; + width: 31px; + background-image: url(../../images/ImageEditor/c2Crop.png); + cursor: hand;/* IE Hack, because have width/height.*/ + +} +#CropText +{ + position: absolute; + top: 38px; + left: 67px; +} +#ImageWidthLabel +{ + position: absolute; + top: 11px; + left: 114px; +} +#ImageHeightLabel +{ + position: absolute; + top: 33px; + left: 114px; +} +#ImageWidth +{ + position: absolute; + top: 14px; + left: 157px; + color: #7A7D80; + font-size: 9px; + +} +#ImageHeight +{ + position: absolute; + top: 36px; + left: 157px; + color: #7A7D80; + font-size: 9px; +} +#FunctionsDescription +{ + position: absolute; + top: 57px; + left: 70px; +} + +#TopRuler +{ + position: absolute; + width: 100%; + height: 15px; + background-image: url(../../images/ImageEditor/topRuler.png); + overflow: hidden; +} +#LeftRuler +{ + position: absolute; + width: 15px; + height: 100%; + top: 147px; + background-image: url(../../images/ImageEditor/leftRuler.png); +} +#Filename p +{ + position: absolute; + color: white; + left: 20px; + top: 7px; + font-family: sans-serif; + font-size: 14px; +} + +#CurrentAction +{ + position: absolute; + top: 38px; + left: 479px; + width: 106px; + height: 73px; + background-image: url(../../images/ImageEditor/c3.png); +} +#ApplyIcon +{ + position: absolute; + left:59px; + top: 14px; + width: 24px; + height: 23px; + background-image: url(../../images/ImageEditor/c3Apply.png); +} +#ApplyText +{ + position: absolute; + top: 39px; + left: 57px; +} + +#CancelIcon +{ + position: absolute; + left:18px; + top: 13px; + width: 26px; + height: 25px; + background-image: url(../../images/ImageEditor/c3Cancel.png); +} +#CancelText +{ + position: absolute; + top: 39px; + left: 12px; +} +#CurrentActionDescription +{ + position: absolute; + top: 57px; + left: 12px; +} + +/* + * Status, Directly copied from cms_right.css + */ + +#statusMessage { + position: absolute; + z-index: 500; + bottom: 30px; + left: 30px; + text-align: left; + padding: 1px 1px 1px 40px; + + font-size: 16px; + font-weight: bold; + + /* border: 1px solid #cc9; */ + color: #660; + /* background-color: #F9F9E3; */ + margin: 2px; +} +#statusMessage.good { + border-color: #9c9; + color: #060; + background: url(../../images/alert-good.gif) /*#E2F9E3*/ 7px no-repeat; +} +#statusMessage.bad { + border-color: #c99; + color: #c00; + background: url(../../images/alert-bad.gif) #fff 7px no-repeat; + max-height: 300px; overflow: auto; } \ No newline at end of file diff --git a/images/ImageEditor/back.png b/images/ImageEditor/back.png new file mode 100644 index 0000000000000000000000000000000000000000..97016acb811860cea9240a16d471a68978581e0b GIT binary patch literal 711 zcmeAS@N?(olHy`uVBq!ia0vp^DImNS%G}^5>H=O z_Ur8OLUQ7UtruP}Ffe6%x;TbZ#J#;~n8)nM;~Y5uZusYeLM)lFYo0kaX!vx69OnG~ z`S#IgU+ebQzdLWtq~G}UXU)97Q}ve%ZDx5rBP3%&g6b{Bxtw7u6pnA@oVI4l4AqF^ z!mVtaVT)uh%}i+JDvFt%aMG(YvZ>T2kTk^~zV83<_ixJq)71%<2fhB>n|O|8wZW;b z#Vp=oUT1{Xi0%@RYl2#yI7QSQYPoiarVYzMuPx42!fOs`X!i-}L~0s(ZwPx4RKd|S zHKV;mEuu9rOhz?gQ&7^hgtZrzeh^^MzR35|X9L&bH5OI(4~qZ$UvO5-!hge)&+~zv zfhg`Q^GI*n>NNe3vjD_AkYcY5LT@LWW65sSYi(D6m?!EMSvUpasB2uYT>Oq3QkEXk zIjGgM>5&H1Q4n{7gCtZU_2|XleE;?}zZaZo*VcL88W?0>-4!(KH@ zaE*)g661rfZsxyR3-$U=zAq-q5nwl6-F*K}G}P z4XE>V#rb>RKX`BbL(ckTvc~-XK*vE$hJ*n`E!c4olOfS~wsgUA$%B)o0^=NFGQ>@@ zUOV_3L!250GFcVkCe!PU^U|PBo%i?Iy$l&Sf=d#Wz Gp$PywGBnx% literal 0 HcmV?d00001 diff --git a/images/ImageEditor/c1.png b/images/ImageEditor/c1.png new file mode 100644 index 0000000000000000000000000000000000000000..bdc71c37ddd5db30fa0e47c5dcbe4d74d8a9d0b9 GIT binary patch literal 787 zcmeAS@N?(olHy`uVBq!ia0vp^mx0)mg9%7#%xGB+q!^2X+?^QKos)S9D(hFfi45x;TbZ#J!z+*6&b)0E7Li_y40VHF+&!PhKP*RhQMQ zHqTYN=mYDGn+ImdecAFlWk#0H{K>A{e{22z`%tUS3suMhT|P>-N8GTU2JaWA3N<2Q=nCldNuNc*c04_rAx1%-nhQ4}@4|mA$@u?F}PK z-PzTDk4~$&82`iedqNzyM*YJ(f4{w6`b^TMrQz93`L>2&LRt6ktnwbVUkwi%lDJJ{LP9$LVx6n4|7Q1$BCxGh(iz5T%A7q`P}I&k2o{t z=|i0QSbB2qBADxLa*6EkhjBjko-_;mY@$Ewz?ak+Tk~g$pS6vye)QdPhB+|MU4<{~ z$$0d!^rYp-itV!gUnT8N?_3l;SG93*W%=rbao;Y7KQ(StS2wT<*Wdp5F;n-~bvAi+ z@2(&I;adE$Ut6ta){8S?S-ajw>}o&zJNW-kW|NtAr*tY+jsp`XgQu&X%Q~loCICnq BWQqU) literal 0 HcmV?d00001 diff --git a/images/ImageEditor/c1Exit.png b/images/ImageEditor/c1Exit.png new file mode 100644 index 0000000000000000000000000000000000000000..0780078442684651add6ccf65e41b8152a2d7e74 GIT binary patch literal 1434 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 bnx^qz(Jn8Vy)m(T00000NkvXXu0mjfBD2lG literal 0 HcmV?d00001 diff --git a/images/ImageEditor/c1Undo.png b/images/ImageEditor/c1Undo.png new file mode 100644 index 0000000000000000000000000000000000000000..0fb317a330d494211e92da821ca876dda035fbe5 GIT binary patch literal 835 zcmV-J1HAl+P)2*0f|S57%@x>Naa!$+0X`ul8{(O z#CDF)bzd2@imDb>9q>05*Kf9T;Oo=c?WI+gR6Pk%XIZv6v%Y~ZE;$W0~#4mkw@y6c|lTWX$blZ*I$wdXzr@!@&xwX5$+~M`%>PnfHl0=Vl zH4{3|l*pt=WGo=#B^2q={lWcC^=#2A{{_18{d(1REmE~gA-4y^;K})Oytx?1c30R# z1Gz9l=scG)lPcFDS6L*Y7$U;OuiH=0)<5TN0RYI=>uc4Di>b+VRH>j&n*$%Euy5$0 zL6L+A6H{PwMb~$o62UYz$uylDreS7c#_`sRm#e*X03cVcuQz`l^ zI(EI>XKfp|-;Q{&PbUXPr;ZD}TC8fKf-p!_!aXLZw6oBo#_Bi8E35@~h^vKT6Y8WG zN1RbTYd;y(=ge}m-2J#!A&AW4Fo^bE?e;yAotfu@pucB_aB%Ok{DNY@hxueC_dUn) zm~>6TWXd3{>F(Z(&V~7Jo2Aa5uLOXFGW1}1srA{`sQ+MR<7B1#d_16L_-K2RGU84;meuAK9EZAyP)aGY1RG%z z$|_E2wwFAw7Z%^EMX!188vfz+cx$<}N-wmp{`kj%u@g*;bv;1Dgaj~R6!Optgl)^)}u$Rv}8TMaUpP2xEk-b}07?$N!JC?*LAlYlbHEx=H{5 N002ovPDHLkV1gLOj%WY? literal 0 HcmV?d00001 diff --git a/images/ImageEditor/c2.png b/images/ImageEditor/c2.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd70dbab89fd0f04335468ee3adbda4547533c3 GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^cYxTFg9%99oP1vmNO2Z;L>4nJa0`PlBg3pY5H=O_Ur7jV*C>EkNfNx7#Nd0T^vIyZoR$h=*OZc;BZmvfZ@#F@@KqvlrHDaJctWaX?TFE_ucM=<%=97E=B6DFE^^+u&-M&~&9y~#cH#?bA|q@|jZ zN_YM7*cibbrtBp)dwTGcHPe@BMCSi4JD#}L_~{hY?75n=LoM1r7Fk}JzPG2Sw)FQi zhuh{ILN1*ej#Hr22hT2{$#9XA_LBuwm2_FuRR0{2p1av+`uq8NWD0_A?KRZg$+}+h zpeuXep?QJ3o+kt~X$Y!z2n8O>1=^_Nxn6Q(Z8Jm!BC+p-+jE`EPeayAI!;mW>Qiy; z^yFORGUdZ}=hWBd%da(-@=O*2IVBLJ{LZ}j>o!hUv-qC>49tWL%1n?`Rd)70Jk{nqg}pFQgNkL)}*ai-~O)oAUn ZvVxbqYIkn4dJ2pH22WQ%mvv4FO#pJGxMBbR literal 0 HcmV?d00001 diff --git a/images/ImageEditor/c2Crop.png b/images/ImageEditor/c2Crop.png new file mode 100644 index 0000000000000000000000000000000000000000..8b70386ba8a251ea4fe541b9167ca5379f9069ef GIT binary patch literal 1488 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 literal 0 HcmV?d00001 diff --git a/images/ImageEditor/clickBox.JPG b/images/ImageEditor/clickBox.JPG deleted file mode 100644 index 717c3912c09a6d5a8c06c1a70c04f6325ba69b94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 633 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<ECr+Na zbot8FYu9hwy!G(W<0ns_J%91?)yGetzkL1n{m0K=Ab&A3Fhjfr_ZgbM1cClyVqsxs zVF&q(k*OSrnFU!`6%E;h90S=C3x$=88aYIqCNA7~kW<+>=!0ld(M2vX6_bamA3>$j+#=yY1IW*lB$YDu$^mSxl*x1kgCy^D%XG`*S zcVYMsf(!O8p9~b?EbxddW?+y}0Aa?n{Ill)1=&kHeO=kFv&-?RaNSxJZwVBVEpd$~ zan8@pP0cG|a4t$sEJ;mKD9+q;pyTSQgN&H%ue0|3IZ+{ z*%t}Ca`gBjzj5x3Mt!Dk`QB%je$9xIH{NQe_DVS=q(WIdP>Ao5**@MWOSPg;tn>Y| gcb&_&MDc6Fa!-V|aQXjK0h-C+>FVdQ&MBb@0Nim*8~^|S literal 0 HcmV?d00001 diff --git a/images/ImageEditor/leftRuler.png b/images/ImageEditor/leftRuler.png new file mode 100644 index 0000000000000000000000000000000000000000..d0c844e8d5abe650ddde7ce51728ecbd1089180d GIT binary patch literal 1072 zcmeAS@N?(olHy`uVBq!ia0vp^{0t0CS2@^#EcrLPwSW{`lDE4H!+#K5uy^@npa^Gy zM`SSrgNyz_BdAmUF&`r0y2Y7dFedB8?qdc1{@6#@WvVtB)bI>-TbHO^ZD0lX+e`#pSe@D!dF|oKWGwv{?2J%0b5Qjudt=?sO`NE}-PTBR;O0+mi zvFBz$g{L0==Fez*Q%kmOsmOI`oFsfcD_n`c@47js;qvWB+3<&L zAIookS=-%q{rvr|=+Aqj`OeNYd)mBJe$m#M%a_$J*%1UZ_$JUP|BVyt8D3d9PI`Ku S_Zl!GGkCiCxvXm+6Zr5|cRzIX-*|X@!hc))8BS4&l`rviB%Z|5OR;cMd^!o{ zc7mBLFtr3GhZu$#;AMTiW6*4vEYMzWHq?`m7Gksw@irJ!9q%ITo$Vt`v=|?BhfOUe zFk_Tqt|dAbTevL6l2K;P&OfXM{2MdBGi+WP}nb}6k| SWX@Lr00002@kzsjg zssZf|>cF>pv}`SAe|E;;__V5^)@oDV#$ei-u2AzK+ww+B=R}ImN#YH2G3$ zaldy)d%dqHSmI!owOu#=^2(t66vxp}+Lz1f@v&%h{aVK%-&j~sR8*AI-r3b}#`mi; zhI_Gz^_5ntU-1ffye`Yk@H6FhsGb1+NU-fwBWwc!HS@8FK2X;&X^t-^T$T`OzfD=m z`%KHq(a9CP=xjosTdbmJSDx!hufoz*?5*X?*vdcMYMfVSkaBH~yrMbd#wV-^gCb;U z(8dHuS}l(5cQk!L@QcC_wT73KKdrVF&gF6SDnS8d3_E3R%%_>Fr)bLBl$2Z-1$BK@ z)tazm>Tr|3&(q#TnS0YYtEkg$q9XLBla&Ylx(dd*GONMyUNl(f+CJj3dheS)Xx_S< zv#y&%gbYwCC*>gvgJ9vUAQ@ENyMVyX3Wlip$;qtVZCF~%VAQ+L^kMGPd`y% zv&2!V9QIgnTaB1Tx2b8awcIjnJT2kdUS1D)ow2%tJSn~ z<1fW^4c518lqj50`$C@^tL&OH`5JBBvR+P|zi_*zdIHI^ds>s6dfvTL)xC!!PKw%yWS4?^Ob`gUm3y~oEtIwTA- zPbx&q23@CG4cej_1!)j64kJK|dvC+#&%}Gw;4&K7UtIjp)n386uhM0x(gjzsfaIhf z%djW&Ib_1BU^m}+!th=Sj*ic#+8b*$y57-qD>mJ6Nhg&lh$S&ahuK*UTBhlyz}<3g z^UhDn!j@0`V$VDV9r=2bzVXhHFp4_f*AG|IpkkXaSZkuEBlwo^3m=Nhb6@S`nhfqzc49wan}Gp2j!q zAJfev0fW*Txr;|OA1{c^3sUS#gLNFShUliiid1ULT_3C2%1-#~Z1oCVGUG$i!2m5S6f%zHl2=hA&!T5_`#Mapp zp~$Y%P=?MV+`*vkYiFf8T%qr?Q*Rb;Awx)WXNR@28R4tEF`KHCv;A*iG1OwP^n&< zPsICWiBr-
hWYUa$hBn1IYT%l^2%cRfdfiy$D_GBfAd1}Xbv#6%L-GEN$ydrlq zw2>7_5yEpZ^0tvMhYc+)^39L}GM625cj07^i z+avDn`;-G(V4`Z`sGydB)(_G=Z9VWFTRF?}$GrqgmJ3Ybo{`2#COIfN_R?=WuP${g zJ}2(M@q%3792kaK4H%w~_Be!Dz6H^>C<|P7Ey@AVYS+3SSg-mA>5aITVP0NPd;Q4+&lx22&iyN+RXlGuhKUdsSO(GW}; zOySG#9s!2@$z#TM}PJ9iX4UixF08y7V^6?RW{jpD8Aa!aH9?0+{ ztR_Pqik?(c0`plG&ja;t6M=jnc*{OOcI++&z!P}CKs)wXo@yCD^oaZ9k|eV|Q+Q?U z1)w(C?M9T^YW^;-V&o-YTkX}BX`?(;8)L)s_me;38Fd2cQz9d>1RZ9$28B3-t|IQA zIc=m%>OPEU671N&4@7Rc88Wu#`qTf-ZqY@}sKl6&#rO{gcE|D2DKL$S|Fi&XaVQ@E z>R0`r0n4Uh&d2SU#zJGPfbgjX{$=J}*Xt-?Z(eFHfIa9qzWINq5usSXbg5HI87Rc| z=K`=0N}rv9gZ@wL;$1jF(yl&mDtLQK0eNRo4YGg_H&F@b%Q_rwX_w0sF zR8j)BEi59ytk4mw;CMuAOEC#D=AztI+9M(_4`A5iY5d@nvFK;B&G?amm>F3a*6MpC F{0{{FQE~tP literal 0 HcmV?d00001 diff --git a/images/ImageEditor/topRuler.png b/images/ImageEditor/topRuler.png new file mode 100644 index 0000000000000000000000000000000000000000..739474e5583b95330b4b0f06f31ddd32ededed6c GIT binary patch literal 1924 zcmaJ?dpOgJ8()pN4)H6@7_B-9#W|cam&QU%a)~rTj##-a<6Fe$miui9$z_B(4r$0K zmP^H4+HviWOSx=rliMh4XR)(>=ilG+dp^(ezVGLK|9GGGectEuraIbVq0%sE5C{ad zIcMbr0*P@%vAiTiWUm@<--w*p4U8QI1gfXVeDf9;aS6c2&RSwr0->mKNMQ`i6Q$Gv zYgfSXW^gc`0Dvq*@!kO5S2Nrn@YB5Hhu6f~*g3BI9wmT45TT6~=2FDfRcbo%slI|W zb4<<^F_R#Hh_7vavp&gq&)A>F*A znoJu%W6D;z5~kRV=W!gFAF&P}WRn%J733C;ip)xKj>AU>w&UXLc0{lsmh3{ zg|#@PR-QLIVrlqD4!LEDQlI6Ng@DLm1b!JLHqtHKl!7=UXM@ffzB|3>cSs`a^OZ{Y z6C#|&smZ7qHw*8-lmk{#1GKn1F$wW)!MEMksSUA~4ZSd+0<6}2pcExXc5i*#&`#DC zM0!R2-J3s)l-7N}?ah+x$1$!ykh}B2(B&&Gdp^_dFBxt!~I9mC}%Ct#CiHBb!#@=q?C}Vwp`*%_}?P-*j;chkT%s ztcfTa8Ve>!vTB8%_vDpCd_(*e9(@5GPhvp-n%sJH_u(}ob`GjIG?&48eBHbX^NS}2 zo>I8_d?}9^c{8RE*h{%&*|S`zr!9-h{ZQQQeX#NT*aEa{jhXxh8PFb;O;*HKL8y;k zGlK^2yihHo5U^=z#BM(fX}mFjt=kxk<)kyt4jA%z46UWwA8+-vUd8{+X_-xt*?B9j zGm)HV`5s-4QqfO@+h$Wx${Hc(HV=Gm-79})C|bQWIyCrg^R&@uzN*^5I&7tMBO`JU zjEy2jyeRljR@UVD=!zi+23v9WXx4eGA$xfApvQAe-Fr?TZo?zuGkAo!7LFfhl3==$!=`XZLu3RaAcozCMC%-$PQ1b`}~nby}Uw_N@LQA&HAQJ z{ZHe^-X+Ibj(X)8#h5X8F65z>eQvY zon7Px7kDuHw^oqmmm_v??#s>%6cq}=%nSY0b--($8Eq@fx^QhHn{F=`EiNt`C8F}eXviiwLXX?|tSo+D zt`3%IP^tAO;$?yPhHP1ig6j7z4c8vsbvgOcW6^aZtQ1wgP+Rj_dVfRF*cjFtpY~f@ zG1=;+{sKKsbm5L$IPdU2;0$%QB`}d!&(P}W=HLWLjso3Kj6k0#xoMzh%y_#uq!v$l zi1OthuaQva)%p4a`jAUPX|2##H+gkA1Y)K`^HMs{>HLiC%quQ6D27-t76B)ZzC9i)Zo}0k7m^$-w&x4b75gq=o?vBVzV3&QA zQAhYqTy0t!$*M8Q{&WyVP#1E1(|hFNIDcd(P@wJ5TN6kP&F#ug?VDTuwG8I<$?WEd z$$}c4mNdUNtaKw@ECr@$QTu-cQm<4A&BWt;j*y1$1@Mcx7f&|BkgSTNORL6x>HuAg zOFvllGmaB>wMU*WF7-%)voEr4&7fX>1uS@jhDgoGb0v7-Z~OK%J@M=xHgb6HgtI?1 z1_dt*1KTnn>d^Zx(339JFQf`6v6weJ^L=1r4&cS8D8vD#JDC456zPb%I{5L zOBoJp8#(Uukq<(g8t}nlsv+D+OL^}3Lemfw08et-Wnae14uXTU@@Cjb?g5@8Neq20 zAYn#nBb8@mSK9Q)?~19> zysV(J(43Z%$vArrSwHlC9}EcddPjrarqxANHcBZ<{EM`J|KhWC^#$6$FncBb`8yJQ zw%RXS(uTVx)PZlBU;w0UAu+h`f4dn|6R!Mu(B9Ke!*7#BKNDnQZEr<8^K1M+h;q69 literal 0 HcmV?d00001 diff --git a/javascript/ImageEditor/Activator.js b/javascript/ImageEditor/Activator.js index 846a5e0a..253ed4ee 100644 --- a/javascript/ImageEditor/Activator.js +++ b/javascript/ImageEditor/Activator.js @@ -14,15 +14,28 @@ var ImageEditorActivator = { fileToEdit = $('ImageEditorActivator').firstChild.src; iframe.setAttribute("src","admin/ImageEditor?fileToEdit=" + fileToEdit); iframe.id = 'imageEditorIframe'; - iframe.style.width = windowWidth - 30 + 'px'; + iframe.style.width = windowWidth - 6 + 'px'; iframe.style.height = windowHeight + 10 + 'px'; iframe.style.zIndex = "1000"; iframe.style.position = "absolute"; - iframe.style.top = "-2%"; - iframe.style.left = "1.5%"; + iframe.style.top = "8px"; + iframe.style.left = "8px"; window.top.document.body.appendChild(iframe); - - + divLeft = window.top.document.createElement('div'); + divRight = window.top.document.createElement('div'); + divLeft.style.width = "8px"; + divLeft.style.height = "300%"; + divLeft.style.zIndex = "1000"; + divLeft.style.top = "0"; + divLeft.style.position = "absolute"; + divRight.style.width = "10px"; + divRight.style.height = "300%"; + divRight.style.zIndex = "1000"; + divRight.style.top = "0"; + divRight.style.position = "absolute"; + divRight.style.left = Element.getDimensions(divLeft).width + Element.getDimensions(iframe).width - 4 + 'px'; + window.top.document.body.appendChild(divLeft); + window.top.document.body.appendChild(divRight); } } \ No newline at end of file diff --git a/javascript/ImageEditor/Crop.js b/javascript/ImageEditor/Crop.js index 80cc6be2..3ab0d992 100644 --- a/javascript/ImageEditor/Crop.js +++ b/javascript/ImageEditor/Crop.js @@ -117,19 +117,20 @@ var Crop = { cropCallback: function() { resize.imageContainerResize.placeClickBox(); resize.imageContainerResize.setVisible(true); - Element.hide(this.cropBox,this.leftGreyBox,this.rightGreyBox,this.upperGreyBox,this.lowerGreyBox,$('cropOk'),$('cropCancel')); + Element.show($('CropText')); + Element.hide(this.cropBox,this.leftGreyBox,this.rightGreyBox,this.upperGreyBox,this.lowerGreyBox,$('CurrentAction')); }, setListeners: function() { - Event.observe('cropStart','click',this.onCropStart); - Event.observe('cropOk','click',this.onCropOk); - Event.observe('cropCancel','click',this.onCropCancel); + Event.observe('CropButton','click',this.onCropStart); + Event.observe('CancelButton','click',this.onCropCancel); + Event.observe('ApplyButton','click',this.onCropOk); }, onCropStart: function() { if(this.isEnabled) { $('image').style.visibility = "hidden";//hack for IE for not selecting image during crop this.setVisible(true); - Element.show($('cropOk'),$('cropCancel')); + Element.show($('CurrentAction')); imageHistory.disable(); effects.disableRotate(); this.enable(); @@ -138,19 +139,20 @@ var Crop = { onCropOk: function() { if(this.isEnabled) { - if(this.doCrop()) Element.hide($('cropOk'),$('cropCancel')); + if(this.doCrop()) Element.hide($('CurrentAction')); } }, - onCropCancel: function() { + onCropCancel: function(event) { if(this.isEnabled) { - Element.hide($('cropOk'),$('cropCancel')); + Element.hide($('CurrentAction')); + Element.show($('CropText')); this.setVisible(false); imageHistory.enable(); effects.enableRotate(); this.enable(); } - $('image').style.visibility = 'visible';//hack for IE for not selecting image during crop + $('image').style.visibility = 'visible';//hack for IE for not selecting image during crop }, setVisible: function(setVisible) { @@ -160,7 +162,7 @@ var Crop = { this.centerCropBox(); this.placeGreyBox(this.cropBox.getWidth(),this.cropBox.getHeight()); } else { - Element.hide(this.cropBox,this.leftGreyBox,this.rightGreyBox,this.upperGreyBox,this.lowerGreyBox,$('cropOk'),$('cropCancel')); + Element.hide(this.cropBox,this.leftGreyBox,this.rightGreyBox,this.upperGreyBox,this.lowerGreyBox,$('CurrentAction')); } resize.imageContainerResize.setVisible(!setVisible); this.resizeCropBox.setVisible(setVisible); diff --git a/javascript/ImageEditor/DocumentBody.js b/javascript/ImageEditor/DocumentBody.js index f6b69615..3df726d6 100644 --- a/javascript/ImageEditor/DocumentBody.js +++ b/javascript/ImageEditor/DocumentBody.js @@ -3,19 +3,29 @@ */ var DocumentBody = { initialize: function() { - var windowHeight = Element.getDimensions(window.top.document.body).height; - Event.observe(window.top,'resize',DocumentBody.onWindowResize.bind(this)); - Event.observe($('imageEditorContainer'),'scroll',DocumentBody.onImageEditorScroll.bind(this)); - $('imageEditorContainer').style.height = windowHeight - 109 + 'px'; + this.placeUI = DocumentBody.placeUI.bind(this); + this.placeUI(); + Event.observe(window.top,'resize',DocumentBody.resizeIframe.bind(this)); }, - onWindowResize: function() { - var windowWidth = Element.getDimensions(window.top.document.body).width; + resizeIframe: function(event) { + var windowWidth = Element.getDimensions(window.top.document.body).width; var windowHeight = Element.getDimensions(window.top.document.body).height; iframe = window.top.document.getElementById('imageEditorIframe'); - iframe.style.width = windowWidth - 30 + 'px'; + iframe.style.width = windowWidth - 6 + 'px'; iframe.style.height = windowHeight + 10 + 'px'; - $('imageEditorContainer').style.height = windowHeight - 105 + 'px'; + this.placeUI(); + }, + + placeUI: function() { + var iframe = window.top.document.getElementById('imageEditorIframe'); + $('imageEditorContainer').style.height = Element.getDimensions(iframe).height - Element.getDimensions($('TopRuler')).height - Element.getDimensions($('MenuBar')).height - 32 + 'px'; + $('imageEditorContainer').style.width = Element.getDimensions(iframe).width - Element.getDimensions($('LeftRuler')).width - 14 + 'px'; + $('LeftRuler').style.height = $('imageEditorContainer').style.height; + $('TopLeft').style.width = Element.getDimensions($('MenuBar')).width - + Element.getDimensions($('TopRight')).width + 'px'; + $('TopRight').style.left = Element.getDimensions($('TopLeft')).width + 'px'; + }, onImageEditorScroll: function() { diff --git a/javascript/ImageEditor/Effects.js b/javascript/ImageEditor/Effects.js index dcfdbbfc..442b2232 100644 --- a/javascript/ImageEditor/Effects.js +++ b/javascript/ImageEditor/Effects.js @@ -27,7 +27,7 @@ var Effects = { }, setListeners: function() { - Event.observe('rotateButton','click',this.rotate); + Event.observe('RotateButton','click',this.rotate); }, disableRotate: function() { diff --git a/javascript/ImageEditor/Image.js b/javascript/ImageEditor/Image.js index ebcbcef8..abddd568 100644 --- a/javascript/ImageEditor/Image.js +++ b/javascript/ImageEditor/Image.js @@ -14,11 +14,11 @@ var ImageToResize = { reportSize: function(width,height) { if(width != null && height != null) { - $('imageWidth').innerHTML = width + "px"; - $('imageHeight').innerHTML = height + "px"; + $('ImageWidth').innerHTML = width + "px"; + $('ImageHeight').innerHTML = height + "px"; } else { - $('imageWidth').innerHTML = this.imageToResize.width + "px"; - $('imageHeight').innerHTML = this.imageToResize.height + "px"; + $('ImageWidth').innerHTML = this.imageToResize.width + "px"; + $('ImageHeight').innerHTML = this.imageToResize.height + "px"; } }, @@ -27,6 +27,10 @@ var ImageToResize = { $('imageContainer').style.backgroundImage = 'url("' + $('image').src + '")'; imageBox.hideIndicator(); Element.show($('imageContainer'),$('image')); + crop.enable(); + resize.imageContainerResize.enable(); + effects.enableRotate(); + imageHistory.enable(); if(resize.imageContainerResize.originalHeight == 0 && resize.imageContainerResize.originalWidth == 0) { imageHistory.add('initialize',$('image').src); this.resizeOnFirstLoad(); @@ -35,18 +39,14 @@ var ImageToResize = { resize.imageContainerResize.originalWidth = this.imageToResize.width; resize.imageContainerResize.originalHeight = this.imageToResize.height; resize.imageContainerResize.placeClickBox(); - crop.enable(); - resize.imageContainerResize.enable(); - effects.enableRotate(); - imageHistory.enable(); crop.onImageLoadCallback(); } this.reportSize(); }, resizeOnFirstLoad: function() { - var windowWidth = Element.getDimensions($('mainContainer')).width; - var windowHeight = Element.getDimensions($('mainContainer')).height - 100; + var windowWidth = Element.getDimensions($('Main')).width; + var windowHeight = Element.getDimensions($('Main')).height - 100; var imageWidth = Element.getDimensions($('image')).width; var imageHeight = Element.getDimensions($('image')).height; if(imageWidth > windowWidth - 40 || imageHeight > windowHeight - 40) { @@ -61,6 +61,10 @@ var ImageToResize = { } this.reportSize(0,0); resize.imageContainerResize.setVisible(false); + crop.disable(); + resize.imageContainerResize.disable(); + effects.disableRotate(); + imageHistory.disable(); imageTransformation.resize(imageWidth,imageHeight,ImageToResize.resizeOnFirstLoadCallBack.bind(this),false); } }, diff --git a/javascript/ImageEditor/ImageBox.js b/javascript/ImageEditor/ImageBox.js index 07408a3b..8b8016ae 100644 --- a/javascript/ImageEditor/ImageBox.js +++ b/javascript/ImageEditor/ImageBox.js @@ -15,7 +15,7 @@ var ImageBox = { Element.hide(this.imageContainer); this.indicator = Positioning.addBehaviour($('loadingIndicatorContainer')); this.indicatorImage = Positioning.addBehaviour($('loadingIndicator')); - Positioning.addBehaviour($('mainContainer')); + Positioning.addBehaviour($('Main')); }, showIndicator: function(container) { diff --git a/javascript/ImageEditor/ImageEditor.js b/javascript/ImageEditor/ImageEditor.js index d3af6844..a6ed8227 100644 --- a/javascript/ImageEditor/ImageEditor.js +++ b/javascript/ImageEditor/ImageEditor.js @@ -17,8 +17,9 @@ var ImageEditor = { this.tottalyOriginalImageFile = imageFile; this.onSaveClick = ImageEditor.onSaveClick.bind(this); this.onCloseClick = ImageEditor.onCloseClick.bind(this); - Event.observe($('saveButton'),'click',this.onSaveClick); - Event.observe($('closeButton'),'click',this.onCloseClick); + Event.observe($('SaveButton'),'click',this.onSaveClick); + Event.observe($('ExitButton'),'click',this.onCloseClick); + Element.hide($('CurrentAction')); }, onSaveClick: function() { if(this.tottalyOriginalImageFile != $('image').src) { diff --git a/javascript/ImageEditor/ImageHistory.js b/javascript/ImageEditor/ImageHistory.js index 49f098c9..4a67d7ee 100644 --- a/javascript/ImageEditor/ImageHistory.js +++ b/javascript/ImageEditor/ImageHistory.js @@ -24,7 +24,8 @@ ImageHistory = { this.enable = ImageHistory.enable.bind(this); this.disable = ImageHistory.disable.bind(this); this.clear = ImageHistory.clear.bind(this); - this.addListeners(); + this.addListeners(); + statusMessage = new StatusMessage.initialize(); }, undo: function() { @@ -38,7 +39,7 @@ ImageHistory = { this.historyPointer = this.historyPointer - 1; this.image.src = this.history[this.historyPointer].fileUrl; } else { - alert("No more undo"); + statusMessage.statusMessage("No more undo","bad"); } }, @@ -50,7 +51,7 @@ ImageHistory = { this.historyPointer = this.historyPointer + 1; this.image.src = this.history[this.historyPointer].fileUrl; } else { - alert("No more redo"); + statusMessage.statusMessage("No more redo","bad"); } }, @@ -69,8 +70,8 @@ ImageHistory = { }, addListeners: function() { - this.undoListener = Event.observe('undoButton','click',this.undo); - this.redoListener = Event.observe('redoButton','click',this.redo); + this.undoListener = Event.observe('UndoButton','click',this.undo); + this.redoListener = Event.observe('RedoButton','click',this.redo); }, operationMade: function(historyPointer,operation) { @@ -91,8 +92,8 @@ ImageHistory = { disable: function() { if(this.isEnabled) { - Event.stopObserving($('undoButton'),'click', this.undo); - Event.stopObserving($('redoButton'),'click', this.redo); + Event.stopObserving($('UndoButton'),'click', this.undo); + Event.stopObserving($('RedoButton'),'click', this.redo); this.isEnabled = false; } }, diff --git a/javascript/ImageEditor/ImageTransformation.js b/javascript/ImageEditor/ImageTransformation.js index 17de60d2..8dcf9ada 100644 --- a/javascript/ImageEditor/ImageTransformation.js +++ b/javascript/ImageEditor/ImageTransformation.js @@ -30,7 +30,7 @@ var ImageTransformation = { }; if(imageAlreadyChangedSize == false) { - imageBox.showIndicator($('mainContainer')); + imageBox.showIndicator($('Main')); } else { imageBox.showIndicator(); } diff --git a/javascript/ImageEditor/Resize.js b/javascript/ImageEditor/Resize.js index f3aa0c21..ad389074 100644 --- a/javascript/ImageEditor/Resize.js +++ b/javascript/ImageEditor/Resize.js @@ -5,8 +5,8 @@ var Resize = { initialize: function(element) { this.element = element; - this.leftBoxConstraint = 4; - this.topBoxConstraint = 4; + this.leftBoxConstraint = 2; + this.topBoxConstraint = 0; this.getRelativeMousePos = Resize.getRelativeMousePos.bind(this); options = { resizeStop: Resize.resizeStop.bind(this), diff --git a/javascript/ImageEditor/Resizeable.js b/javascript/ImageEditor/Resizeable.js index 4139e549..fcec1651 100644 --- a/javascript/ImageEditor/Resizeable.js +++ b/javascript/ImageEditor/Resizeable.js @@ -228,8 +228,8 @@ Resizeable = { }, setListeners: function() { - Event.observe('mainContainer','mousemove',this.onResize); - Event.observe('mainContainer','mouseup',this.resizeStop); + Event.observe('Main','mousemove',this.onResize); + Event.observe('Main','mouseup',this.resizeStop); }, addListener: function(element) { diff --git a/javascript/ImageEditor/Utils.js b/javascript/ImageEditor/Utils.js index 34168337..581af5da 100644 --- a/javascript/ImageEditor/Utils.js +++ b/javascript/ImageEditor/Utils.js @@ -83,3 +83,20 @@ Random = { return string; } } + +StatusMessage = { + initialize: function() { + this.statusMessage = StatusMessage.statusMessage.bind(this); + window.frameElement.statusMessage = statusMessage; + var s1 = $('statusMessage'); + var s2 = window.top.document.getElementById('statusMessage'); + s1.showMessage = s2.showMessage; + s1.clearMessage = s2.clearMessage; + s1.fade = s2.fade; + s1.afterFade = s2.afterFade; + }, + + statusMessage: function(msg, type, clearManually) { + window.frameElement.statusMessage(msg, type, clearManually); + } +} diff --git a/templates/ImageEditor.ss b/templates/ImageEditor.ss index 76d0d5fb..d19e9c89 100644 --- a/templates/ImageEditor.ss +++ b/templates/ImageEditor.ss @@ -4,33 +4,98 @@ <% base_tag %> Untitled Document - + -
-