From da47b9312be89a487ee23b5bbe05797b022af24b Mon Sep 17 00:00:00 2001 From: Liam Kaufman Date: Sun, 29 Jan 2012 17:43:31 -0500 Subject: [PATCH 1/3] added ability to use files within Javascript --- MacGap.xcodeproj/project.pbxproj | 6 + .../UserInterfaceState.xcuserstate | Bin 27811 -> 36963 bytes .../xcdebugger/Breakpoints.xcbkptlist | 172 ++++++++++++++++-- MacGap/Classes/Commands/File.h | 23 +++ MacGap/Classes/Commands/File.m | 93 ++++++++++ MacGap/Classes/ContentView.m | 3 + MacGap/Classes/JSEventHelper.h | 1 + MacGap/Classes/JSEventHelper.m | 11 +- MacGap/Classes/Utils.h | 6 +- MacGap/Classes/Utils.m | 69 +++++++ MacGap/Classes/WebViewDelegate.h | 3 + MacGap/Classes/WebViewDelegate.m | 43 +++++ README.md | 14 ++ public/index.html | 2 +- 14 files changed, 426 insertions(+), 20 deletions(-) create mode 100644 MacGap/Classes/Commands/File.h create mode 100644 MacGap/Classes/Commands/File.m diff --git a/MacGap.xcodeproj/project.pbxproj b/MacGap.xcodeproj/project.pbxproj index fccd784..3867774 100644 --- a/MacGap.xcodeproj/project.pbxproj +++ b/MacGap.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 88C0646014BDE10A00E4BCE2 /* Window.m in Sources */ = {isa = PBXBuildFile; fileRef = 88C0645F14BDE10A00E4BCE2 /* Window.m */; }; 88C0646614BDEC5800E4BCE2 /* Window.xib in Resources */ = {isa = PBXBuildFile; fileRef = 88C0646414BDEC5800E4BCE2 /* Window.xib */; }; 88C0646D14BDF6A600E4BCE2 /* WindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 88C0646C14BDF6A600E4BCE2 /* WindowController.m */; }; + 88CAD87714D3C6A800B45DB2 /* File.m in Sources */ = {isa = PBXBuildFile; fileRef = 88CAD87614D3C6A800B45DB2 /* File.m */; }; FA32509D14BA813600BF0781 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA32509C14BA813600BF0781 /* WebKit.framework */; }; FA3250C314BA85E700BF0781 /* ContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3250BC14BA85E700BF0781 /* ContentView.m */; }; FA3250C514BA85E700BF0781 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3250BE14BA85E700BF0781 /* Utils.m */; }; @@ -53,6 +54,8 @@ 88C0646514BDEC5800E4BCE2 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/Window.xib; sourceTree = ""; }; 88C0646B14BDF6A600E4BCE2 /* WindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WindowController.h; sourceTree = ""; }; 88C0646C14BDF6A600E4BCE2 /* WindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WindowController.m; sourceTree = ""; }; + 88CAD87514D3C6A800B45DB2 /* File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = File.h; path = Classes/Commands/File.h; sourceTree = ""; }; + 88CAD87614D3C6A800B45DB2 /* File.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = File.m; path = Classes/Commands/File.m; sourceTree = ""; }; FA32509C14BA813600BF0781 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; FA32509E14BA816E00BF0781 /* Growl.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Growl.framework; path = MacGap/Growl.framework; sourceTree = ""; }; FA3250BA14BA85E700BF0781 /* Constants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Constants.h; path = Classes/Constants.h; sourceTree = ""; }; @@ -138,6 +141,8 @@ 88C0645F14BDE10A00E4BCE2 /* Window.m */, 88746BEC14CCA435001E160E /* JSEventHelper.h */, 88746BED14CCA435001E160E /* JSEventHelper.m */, + 88CAD87514D3C6A800B45DB2 /* File.h */, + 88CAD87614D3C6A800B45DB2 /* File.m */, ); name = Commands; sourceTree = ""; @@ -289,6 +294,7 @@ 88C0646014BDE10A00E4BCE2 /* Window.m in Sources */, 88C0646D14BDF6A600E4BCE2 /* WindowController.m in Sources */, 88746BEE14CCA435001E160E /* JSEventHelper.m in Sources */, + 88CAD87714D3C6A800B45DB2 /* File.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/UserInterfaceState.xcuserstate b/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/UserInterfaceState.xcuserstate index 822ed3cb6581b8e606bab5208852eff2f504b0a4..f326e17a522d5cbdfb519aad56d5806d58f03bfb 100644 GIT binary patch literal 36963 zcmc${2YeJ|&_BM->{Du*8|quzf`iW! zfFKEqpa~wqmyDK-QFsj1w6xYYH7Y!sYF^Q(+FDCIlr5@3_2_b;M_W^~IRPdu*@e0vQyh;osh7;q6@x%mTA~BVCk61t~Bo+~ii6z8RqJvmQtRvPF+lWty9mIa( z5OJ6|N_<9~AWjlzh_l26;&b9Mah3R<_?fs#JRtre9uj{OkBG;_6XGc#0R?Cv1`IF( z=D-@*09)V%ynzq!1ybM#{6Q!P12G^LB!EPa268|y$OHMH0F;6g_z-LY+rSR62OI#Of)n5@xCFiem%;bo2XGhs0q%i6 z!F}+66q5`oA&p35(u6c6%}8_7inJpgNl(&?3?(DUII=I9L?)91$y~CKl#}IT1*swj zlMUop@->nrAvum5Pfj2wl9R~E%EPQdLwnrKD=8TB?qEm1?0{sWxgj zHJTbjO{3nRrc*Phnba(5HuWYomwK0ak6KKvr8ZC-sZXfg)PCv!b%r`ioue*Nm#D9( zE7UdWI`u2{8}$cukNT6IOTSAmq?gjm=~eVvdIPl%yi#5zPs!8p2JsqrO}tj#P~J%17#`$J;7#F8`?&)dY?%KMnNled?5fcGiyGu}zw8Qulnm%PioE4*vGA9*);zw&

l0TLY`4jn5_;2uM^5^j9^55kziH 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

JC$tp;yAXx{=!H{f%WD6vRLUIHo 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 I|EDkh4_nADzW@LL literal 27811 zcmc(H33wA#_x{{Fnare3+obzSm!uorl62pbW@*!=Ei`Q@YYAST|g92Rz*Y<6hTxFkxdr=cQQ?r3iadreLT+}9%wqb^Ssnf6vXdCVAckW+jKKJURzX{pbdQP^l~JoYR$9h-s8#Aac$u{qdEY!$W|TZ65|)?sg8Z({4Q zx3G=aCTuIV1KWx1!ggbOu|wDw*h%bb>)$TffA@d9#8`f&;lLE2Zf*n^akai59kL5gQ1`iSU?jP z1IB`JU=o-No(GG-Vz2}(1+RkFz%uYUSPs^JwO|8y8+-sh1lzzzU>7(Bj)N26Bsc}W z1Yd#E;A`*$_z_$ISHU%K1Ka|4!Cw%AJV-$y6v03k1be_>7y?6K7?eOM>VsE4&Q|D zz%B4YxE=0-yWu|gDLev?!Bg-{cn1CnZ^B#fHoODx!oT1>cppB158>aqGcLqka97+7 z_rU}39(WiYj>~Zco`@&m$#^=RfopIruEX>3BD@sug%853@xizWAA;B5wYV9t!yE8M zycvHMpM+1wXW(=21^6rYDttA*27e3RfWM8uhi}2RQ_Rydk`yygFV3uZh>n8_gTfdzLqeH-$HqH=Q?|H;=cFw}iKh zw}Q8tw}$s7Z#{1#?;YM|-d5g6yq&zgy#2gSd53vNc_(;Z@y_th@y_!u@-Fj!s)IkxZl$S%i{M6Zu3TQ9|@4Du^m# z08vfU5JQO(L?iJG(MF6RCJ@gNlZh9Ixx_qTKCysUL9`PqiB-gEVhypDSVwFo-Y2#Y zTZs>d4~cEWN5m(@LE=;5GvZ6)E8;ZqHF1&niMT{uCjKOD61Rxke4NkY6MR13o$tZ- z`C)tsKY=gf%lQg^4nLQ#pJ^p?E1O7wOiF77~qzmas`jY`0wx5;hfN91;L2l*-a8F`5O ziabqzO!|mrP1I)UeQFD}mHL3%OMOi3qxMr@P)Dg_)G6v~>SyW-^$YbY^&54S`h&Vj-J)(& z_XLDMAaD}63fu%90#8ApAV|L_v}uS&%2t3GxL+0)wEJptqnx zP$}pq=r5=i3>MT1%z`?>2tlL3B50|QHn!E*pTGo|6XuKwF&9i!DXpnDwY2mpF~*NH zk8SCPes(xsIl$k< zqjk-u26MG26g?5_N*;3PNHa8YqYSH_#j`DEGc9AL? z>z-*d>uXU})D5jeB8q}haaBz#if)f*b0jObSn7wEn)NM}buD#6>Jgc5ryxkgJcqCB z6`hD>u@#+!C1WXADwc+&V;NW`?Ml1RB3ewl(;l=Z?X?ceM%9~(DKQn6hpJmcd!y?0 zrTyp#x)D|P*lLlts-*>mY*S;awzjU-(%fP&jkUD3R*OVP2;*?e=n~VYx?v{tO@H(N z$zw1LG1pg%;#e7NhR~%ZD_ZO7>srUEn$0F7N(Wji>&&A$xK1ecyMNSa7YL2HrEXZ` zV-Q$@IQ%+u%RnRoCp249gbDhg7B`QHAKu!~*%!RAGOU~qUx68E{}osT9Z)S2Ybwh- z1=F{h8(NN|j^m6~VSQ<7JJt{DPY2RrwyG9lgD?}@Wva2kbP(O69UFqx(7|-bKm_C1 zWF>30NsaP6K z&12h9sfMZ&W2rSqvdhqfwfsYdHY9^YqHJ33z%T|IJE+81+}3JBW~6FvHjQ10jlsrY z4af^vf8_+3fK99xd2|-Ev#-P^u>3Y!Z;ZxXpu<;V3^oayj6IJ{p(E)iI-2fD$E?O) z#9qRtVlQLU=vZ1$_n`;S1FJre|;ivqhr(U^y{4MPoRG}ogH(p=k#Uo8si<`sQQOPjgHuF*VfDILBRn~yEPUcnY( zi?GGm5;~5KrxR!yEvFT9;#%xg)KiwBe^P7()=np(ev*RzCDUni4(nGsx@j2_p;{D% z9#k~8m`0gvZQf827aLnmt!*uxuXhrMVnbvTV?)L( z6e+PG>B*@RCsJIG*nquFr!MD=<{j+aiV`Dwr5$?@Yv4X|r8Z;l)7dMqEp)oAAALwm zS7O_+kFf1@2AxS~RTi6S@=Z;ZO>IN!>uMZ&DF;0c+tbcksf~0Wow^3wj~&21!46`d zVxQ5uw31fQYFbAZ*eH(B(iPY?I>Yw+F}CX>N|w;}>`U(1Y4j|wpEVAQW*wI8>$9Ac z=dkZk0S&F~kg|`Ojhp7qVn5Q-RR|ds!!C0L>HI3SrJ(_}VrQXWIjVDP0lTqX$L_Mm z_6K$Y`xCo~-NJ5Tcj!X8h&Is0bO~Kb_gae_v=qCKJ-{Af*#JZCIhpQFm(fP_siImW zK~2`#FFGyASi?rbUY3?R)@yJE^O#b|RkoBiu|-hhvv&GunKE-zJ&NO~cOrA;qSm8@ z*gk115&2jco2ivqM(bG*Y(|7Zk1fe!aRF8O*zeUyF;i2Exi-Jq($>_{3;Fuidh>DM zj68HP5F%e$W@;Q}R$JN{Tj_GE`2bhohO!$gF>9Vcgf%$)ZhP0AuH=e)0x#r3I=!Fm zy_LWl_+Sl>`^o{Wvu%Mt=s}0C1OXrr1kqJ=U%KB)5X`nF-JfkmE{LQ4Su+yZN>j5L zMOjN@rK!FRxj;6FDj$wwR&8l>?>2LrnX3}E%Gdx`+E_nU--vvOxuq4g3!7&kXCQ)4 z?Bzf-NTkEx06jqrhy`&V9wY!6kOKuhh_0pw(W_suwm=q*~6p)I3rh^Rh ze-<*qVf1i%1o}CWu1Ei)N?|h+ZF94w`JcY#5r-&7B|BRYm1b>$eb(uDtPYudja9WJ zZ*2M4CR8O}?1L_D9l6eqS3BX@qUaf$r*RJQpVCx|SkKp4o--m;-~aS+iOCZuTHOFB z0D8KPb8(;u7?6Q=gimBjE76nUF1`*G?`17+%@=@?mZDeDXY{<%_8figi$2>eWdImt zOF%$1ZRv17U6n=+X2Tj8a6&pB^>ZhNcLa8TH^6!p;7xkU3h);FLV2;NuF>|b5WE96)1fQDyWl;riGGoO ziJrO=ypJkvEB!L6s<*2}(Ou}+9KdWuNqXZj>&MP?4rR!wUv(|p(Zl}vJl||-Ft;|3 zb3FQs;fKO2<1AD>8U?12I4uDU-r@$HT4LFMlz_;KW_zrvz z&STlg5N*W`mKv*h46;M@GPMr3mS{ljW`E2&CN}z&4z;~&|Bil*euZ8@ub{oFMG2j$ zY8MqW78WkPb4=BlGTR#ECpvp2xCAbPpXr745_&0m4t@c@f+PJLcox%({+VBa-@$d1 zQ=|T3uXQe-TgB~Vs%vfsf3TtNU(0mRp%iPeHN~=W-$B2;+L1V&0QZnY_rU}35d7V@ zwXOk$FH=KP|JsgO0#xxdMlYwAAtVSOgm_;xDbZrhJ?Ph~MHxepjbtPw)T0`&A8u)B zO{i!=eKn!J&eSlnC84#UDWSnsGtAVKz%^e&UFT@e8rdNM`PCvfy9c)-uSAbY>zInu znJX%QPADNpBQ{%8*_yc>Io=5+q? zRmaFhJ>1l6LgS}qYc4ggpsv=es;}opO30c0<0V^E?)sKQwfV??%OA>nRqXH~B{^wg z-|+T5Y4%)hN&SVVuY0%p@&szv^t zknG%pt*wkTmL_|^g1w=UeXES#wgSs$U68ngp39$Db~{BC?1u_l=SyIJdOKH3Rd5g* z;lOG*nBGC}wiOn_8aUK3Yk%apvxngs+-8rQGmgYKJ##7m3YDS;?*Kh+2HZ)hE6}kFa^pyUb zK1F{;V-DdFu7_`N;gLQ`f5AmFTOWE4#U{83ZiesEN9kkqarB&vO(;Gr>iDHgtHFKx_+*xvgpeT4JQpTjSzMeHE8GmLhbSL|A! z?eHk;oS(Ef$8a2;;Kt?uiJ={yWYO6n{C_HnGKcZw74k&nagx}H7`ZGd8F^A!Dw>M1 z>3N!+WAUX4n>~BOv+yz3O2IGD-V7{cU@-&B82AhWn;AF-#TPV= z^~^(Q_{b(pU1MvDbxIqhn`lnUzayRIOxK#QwdgF($giTT(}zo>QA)~9mFJmqyPBKmS8NKSm)+a1!YnwqRWTi;k**I3u73lg}? z?;Xynvqf-#^Xc$aIK*+BhZFQ=`e*tI{mUwx#3@{WJJG)~z@Gsj4AfPN6kS53+EQaN zv19&W&DKizXUw#IUoDb%d8w=H@x|r_OY_*gW;CicH`_FN;#gcQO8GZ%d(dVZ28FQ} zOC!f`S6_^K(&6p6JMKaMMqg{ky>M^(Is=?h2`}X7NJpN4KX*{ z6L(~>!TP*{u|t~c*vU3-vYZX+Y`ExH__9rWqj62IX3Hp)wxKxzZ+)KH)Huq7R*xJD zb8e#wPet>jcp81%n4FYiZ>cO?i6*a*XgPQ;66`Pf-b!4B=izGlKK+1xh&r%7ue7bT zzOK>S6&7^?eIBx{k^g+`$M)HxM$70%hxhu_)wT||v+D7}F5w$5#!J`-5@nq=>|*w! zWq1`zwQwU|j#uE7cpnB}3;+y(48R${TaEX{`{DiZ0r)@$5DefmfMfv00H=QaES3hH zsfJyzQlsEzZtlf;E|d#*)VQYH(kUueakh!nVp9`RoHc55ZMmh%U>;?zx4nd#N6Jm4 z>;Dx%lKVTS%AoOzbVWS!;)!y3e6l@>#E0R-S)Fa|Gm>qedIku}6zO*LoA774)>JD# z_OS*w4j+%l;1d}jWPmGulL78FV44MH7~s-7*^WB}pZZ9PH1AKbR`;M2(Q)5GtlRF|~75)yZDOWB861AGdxFlVw zE-qb>r;1Z0r6%k0^3sxY$!a_Q$M}AhZXW}BtiTU2Aeik@8f}4j4Cgbs8GP&T3-ze+ zvUr*G4~qF6pB(Do5dM%3-zZYxhw&r$=lB=+QT!Nw96y1d#82U0;$PvX@vreS_&4}j z{9F7S{vG~3ejdMo|A7C9U&MdHFX5N*pYbdBFZi$cZ}?UG8vZ+e9sdKrf&Yo$#BbrZ z@jLik{4e|-ejk6pfKUcV7!b~YNCreRAcg^P3`k&roB@dpNM=AP1JW6g$$)GI+Z8cmkdi&zUFW zx$s)2rrZu#*^@*yl`FwFOnC< zi{|y@#qeTzalCk50#C+(=Na%417e($mgj zWLZ>C#?rMGyP>G$C}Qmt{aA|sYer?SIqQ-WYaWi(HjrbBx3ig8w*O#(|85r6;c%mM zlZYc#Ek`A@Qw?XSp3nmSvq_-(jCW|NksO`EPG@21N}jB#{xcn$GCA@!b9_m5zELdS z6DFr!O~c-3+?sU4KXe<*ai!R~CbC?*|4}z~O{m4O$!Lxz&Cc^Y%cFiWp2zF-2+4~a zNrs(d8cXst4c@^lW^!y2b z*8dAkEyJ_rvhYoSvSPnkKV*QZ%>4O0D^yVbLfk%?`VPgVp`_u!$*& z$%!ecNr@@x=mQcyDb)`99tT@suj4Ij9Z!6ujy3EM1I^SnCm1zFEoc~9Q);Y|%i>ex zTWUup7{{Vj%7z3(-H>K9y`Ny;z>=Ut+aGGVc>-$=bciK-I$qA91AWf%^s@6DXL+82mvbOF#gUZRNxpu9TC+9L zBfZoXAv&fm9Ei?xMCEp(@1G)(gJbxCBdW9$U1EuzFynf>(LJip6^^CK&T{o>u{h{* zonz@|XSvC;<#;OLz(JM2IhsM8Gz9)%RM;bi z=9s10SqMJIGT6@I#IpR)iLe8O3r8`;P9bI~o-k5Bq6lYN_PI9)mqvJURJC?0UzX|# zJxy0r{x_Zgj%TQyCz$1VswuET4Tf=a!|iktEZx&fNgcSNIj#|Qt~i$KDG&JUevXiF zg!Oj9B$lw(f7@kIh(;S(6FMF0KZei_jHw)Bqn$DHzi7R#R`LXNIUHS+oi2~1Gd`Ju zUFo>tvOTk~r4!t92OYH>X|tVF&yxO6PW_P-f-rC_t#+1PPm9Gt7bC|q%FfbG&^U{g)E|;qnv1`Y+@;&nhSPltQL;yIXl&8mg?!aU# z8N-oHwv$a^$)2{4V%;#eY(>08%s{IOkL)obW)ib7DKUouQyB09jV66xv~Ks|{c>`~ zfbnug3fl3bkSP+;mY+mTz>c|)cokt1i-^U<5@IO>rZV7V225kX^i{-b1Ugnh zplQ_^4B8!vaA*C0+`e@9#l3q&uk>ZNFDVj}QYKc7N8`D!y1YqjWOZ3jyhUsv-ev%* zk+}?*$AI~(hfCIY!kAxG+H;6$mns-Iw6l+J}i_-M02|v{yk& zoMOOh3|PiOzK$Rd4g2f0JI{4OR&s|=?B??g@qM>4o+mCKz#kc~f&uL;;7V4;0qtI5 zy|o$9!NqiBlX68W+K1*SaHXT9l z5@=nf8{_z!k6}_iWWXB?+U1Kt*Rzu91wBk7t*XnD(@|~8lTl+iK=LWROLvfbSH2rp zn`j>7ZCh>b)awq6s^uWl{+wBk9n})JF{1&O+_5Hb!gz&*hxH z$!V--7^$WEK)SMzHT(j#t`Z{`o>Q1&w5 zV;jnm{lqfjZw@6r-9erPesi}fw(wgyr2PyyU_;sonxCDzh(kjD%`VS)K8=w06ZjMP z&+?yRz(EFl%7D)paA*~u;ZNd_4m04073u$@TibDC@6peHvbMKEo|5LE!VLc0ZdI5^ zoZ?jY0=XPpW$d_dP+u*z*TEA0>)iq@=da)ZjxpePC%~<>WmDd;%95ClEXEGCj=!PX zhIyO6k%KzPfKxW8ouj{w$(}i2ydqVmKt`7+b8yo9E&PvIw8zCy{&xNjWXZ_pzGA>> z7VT@c=dQi2yyjtT=A`sw){;}ZI%)oX{$~jCQTsc@KaAke3g$NqILpF)i{Osz`{uyy z+5ZN2lK*wL`kvu`gCM_Uz;_Jzo`pQm_BH-E{ZiTrnV851T7?|x?Wpt*e6*FV8>N5d zU*W3o2L}9TtHQ&plJ6{8+zDxKjO+Yc-3oV`e+LQo7XyA`z$F&xGAmr`_UCg%9Flbx zvs{KeL5hQPBt{b5VUm23#H6Hv0aqCC3yb+Hi#dUp_Q6rkPo*TKp_r7Gj6zbfgNG*F zNVHk%@hX#Eq&EWfWx!PiTw_6hN1%sS4%iWZT)gUBYgNWDio(Eu@qT=W6i} z2HfbZ#nmC39~e6PX}W_=ld+_{Ta^`LB9abCb&~c?Z5K!|kk1OrCP_O-ANp+B#~fxNI*;3F-sC89 ze7E9FASWX6o?{@zKmjYB6M{PY{MY? zQi{SszIJkLxALtc(E&!3V?qxGdfLEt`ab+6c~(c4cE}RQcSy7?=5 zJdO3L4y}5Z>^6NS|E5s-OhE=lF)*5i>}j>SHhoOC6;htaIvDF|6Ne0mqNr}uXUdgA z=`$r}U@QaUSjc!QZEF(42~(Vi4vd;h2i0;t(F%|C7W(wDX#QDF_c8vbjFf+$o~{kWHuI zP{~vVE92uvsZ=JFg)q@RqBI7kvzQsI+NL>kj_k8yCdyg0<*D*6{g={E`fk-Oq>4CO z%wo_HluoNY@}=aD4oHVEN0m{1x<#s@`Xb@_GccEdN>(_PwE}O<*ng=5i4C2KMD`?( zLpP>O)X;7f9!3pEm?IddW}t?})UpasAoo0|L&M|bWTdD(6%CcxsS8Ed;TP3Jp$vNk zeiLm)TS2ujFyCIsqo{Fc<0P>Z&1x({QyJDdjj1b%Q`7`%BJ$Y`EMTDCDzpOCD67V* zg$tIlJD<6!7HSgpJi?|XGq7j{HHCo&_WUY)qLDk5W;+PcS^i~e2HHzaO{1nWu!Mo7 z?bJ+a76W@Rus3&}8m%4I)tGI^*0=-I+%xOZk5+U$h4s3Pu-Z|rwbrt6)`N9%HE92K z8`>9}(Rt3Ua!guEbxM+5*jK0}NLy+lwTN2GKqCXo8CbEBT1vf&onv4ngAVU#&^CRf zLDzlw9eeiC{$yht+KbXWmQ&7X9>(4hg!a&~$H=?B(s@Avd-$pASLN2D|LpN?&-dc0NvpUDR%B4+Eo*ALw+C8#Vh>d-cMR1zKiw=|!03hEIY5*j8!&)F`9 zey~SB5YbRwy=hnrx`>LDC?mL96uXE}hcdL))YY2uo7tOL;_@u@wZ|hOqoN;oT~7yB zdsI*RH9bzTaq$T;?Ifq2M0lPILvV^jn|$qxp6K`F6!b#pVePT) z$?U_lbaaJ*LnX0i0njO$_Kcp7eQrJOT4WxJ4#afarFbkmr<^@GMgxpOmwWkR5_Ef_ z0^Ja$MfW9^p-YU0VixQftOaYsp2J>1HzO{_mZHmUmSgScX2iAVR>XI(53oJx-jy$~ z)94Pwv)D!KGIk#TAOv3Ms*7L{1rk6Oy4g^N?l~v|y+9S{kM1;VK=&E8p_BhJ(Bb&a zU@O?pRW1bFPjm%Ump@>q^)MCnCH2+7&hxtL@$i-C(P^v!RWkdVy=QzwU7*9)pw9g* zb&lFVeNUaYcJbj1tV6w=fym*HTtoc;v#E>JPv{tCHUsPFEevd6paq@9Lu# z=1N0*MLrM!)v%s0Tkc@v^#k$1D|E!BvhPR(-Dx?H3^8;-u~}< z?Ed|jjzGv!poO<5UOBX{fOV|LK7QYUK+Hj-b+-Sw1R1P=S4IADnQBHry+PV_u~ZWc9ib?&|wk+ zbRg(WL7E_4kRiwvWC^kbIf7h)QlMhs3k-aTfiE)HlzI-wvqf0H?BmPkDQbpoGJo_SCTL%XI>7!5Ge9vH!ywXZPFLy5EB@sN!Uw z#o|Bp?Q#NcD>t0OqCdsuO#2=W!4OXVc~6CtRoRy3xVDNbj(7+Cc?w zMH?<;37*!cuSR|Fl!Ww*BofNq}IKV04A`Os+K#@WaB;J<7@GhR9rEG%=BQ znV5qHGON&Svg^^p=0=tyF?03X1bW<#W){cDn{%Dn`2f8UXj4$O!@KgEe{7il} zx+hk}SM#;}d~_S^LjFhmuh8^o6saMr$$GMpd=A~yI+>h8zDQ0br;#(zeXYyMc5)TD zhFnL!iSBEC8_mCbN}eSzQ@&IT)eqgSI-Z({ZdaX3y@CcBOR3k;eX8x~7S&zU9_j#f zkot`J3f-Q14h8!Q)FpI_>Mzt?fl%Or{BAJ1AvF;>Ev=vg-G(|)Fa+I(I#e)H(17kj z9V1`_vjqzUuM5@*b_(_jjtfo-z7w1m{2;g}xFq;l@TcIG;Ev!g!F|C)r%)%2Q;pMT zr-e?doYpwK@3htFL#L0Nb~x>F+T--G({ZPhPG35mb~@v9*6Ezn_fFTGJ)QHMhdNJj zUgG?Y^C!*+osT)6a6ak$t@97gmz}RV-*&$1eBb$@kQ54pBB8s`Q|K)W5=w;$!ZcyF zP$w)9RtWnD`wIID2MVi&CgBKSz0e|jMmSD5LC6Rv3#SNY3TF!!2p0+$3s(s@2saA1 z2tN>R6K)rNEIcGUDg09So$$Qy2jNBGCE@SFyTW@emuA?Wt}nXI zbzSQEn(G?ZZLWJo;t?}ob(Zls&QP3o5E*57TQ+eEjQ-KM*} z?zX~hrQ2$^wQg^?t#{ktw$bffw|#C0+zz^Z=62ZabGM^z$K6i4ed%^xgo!*wQKD2) zsi;QuoM^siy=b#&i)gE8x9EuIr09(32hl~*Poit0>!LqI_e2jw55=TdAa)Y_i2cNY z;vV8qu|ymzju$73Q^o1xOmTs@P+ThREjEg)#Qnqr#1`=w@f7ik;_2d<;@RQ_;)UYH z;n9%UZo9+e&gJ*quS9yK1bJl1;b@;K=6na2^2FFekAob&k2=Az)oZ)gH(oz_{p5Ao z>$=wsubW=?y#?ML-of6X-V*O{?|APt?+owJ-n92z@5SEj-s`>hcpvaS>wVEj7P z-wNNkzDs>q_^$DN%lCcXt-jlQxBH&({oeP2?{B`>e6Rc7@V)7K+YkEj{P=#9pOc@^ zuZLfhpUf}QuiUTFug1^pH{5T8UxS~;Z@S-NzomZ5{FeKz^jq!sq2B?&gMNqnj`$t* zJMQ<5-?x4j{C@QN$?t~WO~1eV?)yFT$NdR^(%;L!hkuNJoWH_9$v?$E(?8ok*T2ZW z+~4G1<6rA<_HXuY^&jm&)_;Qkv;HsoPxYVaKihw<|LguM{MY!e^MBKSqyM}9oBVh9 zAMiinf6D)i|5^WY{y+F%^uOePHvk5B1jGjv1PlzQ4lo7O1egP!4OkJdAz*XB?to7N z4h0+u_#)s~z)t~}1Fi)88gMn>_kg@z#)OPfkOj_2aX7A32X}-6F4q#a^Qx*_X5ubUJP;$5(T9Ml?C+=8W=P< zXh@JH=$W9Gf?f`q9yBv(cF^3Q`9ZG)Eecu^^lH$up!b8e27MUxQP9qyJwf||J_-6P z=t$5PLC1nF_aJ%%_lWJG?lG#zOFh>0__)WnJ^l;^!FaGR*fm%b>>lhH926WJ92OiN z92Gn;cuw%P;2R-W2n-=Z1R>5Lq7e5GuaK}1X-Gs!RERtzF=SH6tdKb&^FkJcEDKp4 z@>|GXA@@UxP%=~y>Ky74>K*DE>K_^y+9Nb0bUD9jXA z8#XMgIjk*gOxXCaXTzAV>0yh)c7=T{!6X8SuOwU&DT$IqOB9kMNvb46k}WBe7$n7# z5=no_K*>hGe#6o@9ZfU9w8DUa~>5QSz?j1Ib5{ zosvD0&m~7C$0Wxk-$~9(E=Ycm{3^LCxhLgI1yZ5ZP3kW7l7>hn(g7Y#%Zug5y2XlP`^4794vnpg9U0pi zJ1Ta6?D5!>v0uf09eW}6$2eJBc3f^;UYsVbIIc8qVce>?HF0mmt&iIrw6WT#~pWtU`EWWUO8%5KZE<%M#Cyj0#> z-cLS2zDB-D{=WPJ`8N5-^8E@oMWCXGB2*z!#46$yZHh^X=M^t1rYhzt<}1EYTvl9B z{HD03xTE+hF*nhWSd!Q~(U>?OaZuu##7&9sCw`E)E%D>T{Yk? zNPRYyNu8WJJ#}X4kEz#FZ=~Kzy^{vg@U+6TK52c^2BZy28I({$hw$yIqQ1XpINuF?q=Q3_Q}r4He|PEPt1Nf zdtUbP?Dp*S*>7jRo4q-EYxeH!kFyVCAIv_KeKPyo?4Po4WZ%qwm;-WnIb@Dgjz^An zj$ckdPLG_(99d3kjwVN!Q<_tjQ;}1Z(?6#+XIRdNocbI~&X}A@In#3%=Pb=xm9sYI z&72K6@8o=#vpr{5&YqloIY)B7$~m8NHRt!7yE*rB{?3KDM6PSDIM*}RJJ&BaEH@@M zDOZ)N&Nbwg=9cAF#IcM(!)Qi*sMieLc55cYW^Lx$ov~ z%H5K?EB9dT(cEuyzstRx`%CWC-0Qi2<~~qjN?b`ODWzB$pp+s$Hsssza*JRYz4PR9Ex7@+5gh zdF6S7@Qivxx7hv)ADBK&B>dW_e$RDd2i*towqe_Ti%Ym-FYA99nSkA z?|9zHysz@U&%2U$JMXRKpeboNyAa$@hOdX?6Q)|`v>RxK2x>DU&JwR<% z4_A*=H>jJ`W7U(?)6|R9OVlgXtJQ1OZ>ZO+H>8ZLzkO)~Kz}R%uPz5!x0lt(~Nurk$ysqn)o^s9mmIsa>O8 zr(Lhztlg`toA$Y1??}|tJ>?@8`@jizjXqgyDnH4s_UtX)y3;%I)yG% zm!nhZ)HE`Md=oadh=vL}B=(g(i=?>_=&>h#E z(w)|Qqx(^JNq0r}tL~caPCm?c&iBpt&zIy!QP<@@gSwBwyqJFA= zu6}`jk$$OunSQPQP5lP_M*VyGkM#TWNAzd(XZ08Lm-WBsuj;Ss|I$Aw#0p^{QRrIe zQy5YhSC~+kR+w3sQ>ZG`6c!iuDl`^W6jl|Q3P%*S6w-y03a1s$ESys~zi?sU^1_vc zYYNvDt}onNxTEku;fcaih35*-7yejysqjkSjlx@ncMI3Eie4*vy{NrtebMHk z9YvoN9WFXmbh_x9qH{&(i>?&?R`h$(A4NBd9vVo4r@`A0YzQ-i8=?#`h9pC(A;XYm z$TbugdK>y1h8sp0S`4EMV+|7w&lz4aOf$?h%r?w3ylQyEu*tC7u-CBPaL{nb@VVg| z!?%VX4VMg848IxvG~71)Wq44`FLo;qEbdVpS}ZM&EbdvHR-9XGC@v{B7FQPcEgn>C zDy}UaQ#`x){o?J#pB5h~K3;sP_;m3%#TSY%7GEyDQW8{>R?@qqU&(+HbII_MktK~K z&y+k{LYKT)@^ZrLUK^m#!{-yY&6iouvm#KP`(cQPI~HmYoF*@UvGWz)-Mmdz=fU-nAbqOu)j7mPwWxvW87riV%%ZeZT#4Hz<9!V%6Qs%raZblr97=X zvpl=}`SLmC^U7Z-UsQgf{95_-@>}J1%kNi!3SI?S;ZosQ5mXUTkyw#jkx`Ldp{&qW z6jT&d^seYvQB%=W(OfaQVqC?Z52Bzc2|5{aiHSUio+FO zR2;83RdKrFV#TG3D;2+1Mpvd(rd4KEW>-$BoLf1+a$)7-%JY?1D}S%NQF*hEs!vIu zUVV&xD*C+M=dC_(_j$L^rYcb7S|zITsPd|+scNcfu4=0qUA3?3Sk;NDFRM=X_3Ina jH>z(;-?+Z5eP8H1t?wM`3_AuP_fs&2`)T{X@4Wv9VLdm! diff --git a/MacGap.xcodeproj/xcuserdata/liamks.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/MacGap.xcodeproj/xcuserdata/liamks.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist index 8e541ea..0540ade 100644 --- a/MacGap.xcodeproj/xcuserdata/liamks.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist +++ b/MacGap.xcodeproj/xcuserdata/liamks.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -9,11 +9,11 @@ continueAfterRunningActions = "No" isPathRelative = "1" filePath = "MacGap/Classes/WebViewDelegate.m" - timestampString = "349029710.277675" + timestampString = "349561774.548839" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "107" - endingLineNumber = "107" + startingLineNumber = "150" + endingLineNumber = "150" landmarkName = "-webView:contextMenuItemsForElement:defaultMenuItems:" landmarkType = "5"> @@ -23,11 +23,11 @@ continueAfterRunningActions = "No" isPathRelative = "1" filePath = "MacGap/Classes/WebViewDelegate.m" - timestampString = "349029710.277675" + timestampString = "349561774.548839" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "95" - endingLineNumber = "95" + startingLineNumber = "138" + endingLineNumber = "138" landmarkName = "-webView:contextMenuItemsForElement:defaultMenuItems:" landmarkType = "5"> @@ -79,11 +79,11 @@ continueAfterRunningActions = "No" isPathRelative = "1" filePath = "MacGap/Classes/WebViewDelegate.m" - timestampString = "348021074.943219" + timestampString = "349561774.548839" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "21" - endingLineNumber = "21" + startingLineNumber = "26" + endingLineNumber = "26" landmarkName = "-webView:didClearWindowObject:forFrame:" landmarkType = "5"> @@ -93,11 +93,11 @@ continueAfterRunningActions = "No" isPathRelative = "1" filePath = "MacGap/Classes/WebViewDelegate.m" - timestampString = "349029710.277675" + timestampString = "349561774.548839" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "128" - endingLineNumber = "128" + startingLineNumber = "171" + endingLineNumber = "171" landmarkName = "-webView:createWebViewWithRequest:" landmarkType = "5"> @@ -107,11 +107,11 @@ continueAfterRunningActions = "No" isPathRelative = "1" filePath = "MacGap/Classes/WebViewDelegate.m" - timestampString = "349029710.277675" + timestampString = "349561774.548839" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "133" - endingLineNumber = "133" + startingLineNumber = "176" + endingLineNumber = "176" landmarkName = "-webViewShow:" landmarkType = "5"> @@ -149,13 +149,153 @@ continueAfterRunningActions = "No" isPathRelative = "1" filePath = "MacGap/Classes/WebViewDelegate.m" - timestampString = "348947710.747279" + timestampString = "349561774.548839" + startingColumnNumber = "9223372036854775807" + endingColumnNumber = "9223372036854775807" + startingLineNumber = "84" + endingLineNumber = "84" + landmarkName = "-webView:runOpenPanelForFileButtonWithResultListener:allowMultipleFiles:" + landmarkType = "5"> + + + + + + + + + + + + + + + + + + + + diff --git a/MacGap/Classes/Commands/File.h b/MacGap/Classes/Commands/File.h new file mode 100644 index 0000000..41078e9 --- /dev/null +++ b/MacGap/Classes/Commands/File.h @@ -0,0 +1,23 @@ +// +// File.h +// MacGap +// +// Created by Liam Kaufman Simpkins on 12-01-28. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import +#import "WindowController.h" + +@interface File : NSObject{ + +} + +@property (nonatomic, retain) WebView *webView; +- (id) initWithWebView:(WebView *)view; +-(NSArray *) files; +-(NSString *) readAsText:(NSString *) path; +-(NSString *) readAsDataURL:(NSString *) path; + +@property (retain) NSArray* selectedFiles; +@end diff --git a/MacGap/Classes/Commands/File.m b/MacGap/Classes/Commands/File.m new file mode 100644 index 0000000..099808b --- /dev/null +++ b/MacGap/Classes/Commands/File.m @@ -0,0 +1,93 @@ +// +// File.m +// MacGap +// +// Created by Liam Kaufman Simpkins on 12-01-28. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import "File.h" +#import "Utils.h" +#import "JSEventHelper.h" + +#define NOT_READABLE_ERR 4 + +@implementation File + +@synthesize selectedFiles, webView; + + +- (id) initWithWebView:(WebView*)view +{ + if(self = [super init]) { + self.webView = view; + } + return self; +} + +-(NSArray *) files{ + return self.selectedFiles; +} + +-(NSString *) readAsText:(NSString *) path{ + NSStringEncoding *encoding; + NSError *error; + NSString *results = [NSString stringWithContentsOfFile:path usedEncoding:encoding error:&error]; + + if (error != nil) { + //onerror + NSString *eventWithError = [NSString stringWithFormat:@"e.error=%d", NOT_READABLE_ERR]; + [JSEventHelper triggerEvent:@"onerror" withExtraJS:eventWithError forWebView:self.webView]; + results = @""; + } + + return results; +} + +-(NSString *) readAsDataURL:(NSString *) path{ + NSString * encodingData = [Utils encodeBase64WithData:[NSData dataWithContentsOfFile:path]]; + + if (encodingData == nil) { + //onerror + NSString *eventWithError = [NSString stringWithFormat:@"e.error=%d", NOT_READABLE_ERR]; + [JSEventHelper triggerEvent:@"onerror" withExtraJS:eventWithError forWebView:self.webView]; + return @""; + } + + NSString * mimeType = [Utils getMIMETypesFromFile:path]; + if ([mimeType isEqualToString:@""]) { + return [NSString stringWithFormat:@"data:base64,%@",encodingData]; + }else{ + return [NSString stringWithFormat:@"data:%@;base64,%@",mimeType,encodingData]; + } +} + + +#pragma mark WebScripting Protocol + +/* checks whether a selector is acceptable to be called from JavaScript */ ++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector +{ + return NO; +} + + ++ (NSString*) webScriptNameForSelector:(SEL)selector +{ + id result = nil; + + if (selector == @selector(readAsText:)) { + result = @"readAsText"; + }else if (selector == @selector(readAsDataURL:)){ + result = @"readAsDataURL"; + } + + return result; +} + +// right now exclude all properties (eg keys) ++ (BOOL) isKeyExcludedFromWebScript:(const char*)name +{ + return NO; +} +@end diff --git a/MacGap/Classes/ContentView.m b/MacGap/Classes/ContentView.m index 07af9d9..b0b6650 100644 --- a/MacGap/Classes/ContentView.m +++ b/MacGap/Classes/ContentView.m @@ -6,6 +6,7 @@ @interface WebPreferences (WebPreferencesPrivate) - (void)_setLocalStorageDatabasePath:(NSString *)path; - (void) setLocalStorageEnabled: (BOOL) localStorageEnabled; - (void) setDatabasesEnabled:(BOOL)databasesEnabled; + - (void) setDeveloperExtrasEnabled:(BOOL)developerExtrasEnabled; @end @implementation ContentView @@ -21,6 +22,8 @@ - (void) awakeFromNib [webPrefs _setLocalStorageDatabasePath:savePath]; [webPrefs setLocalStorageEnabled:YES]; [webPrefs setDatabasesEnabled:YES]; + [webPrefs setDatabasesEnabled:YES]; + [webPrefs setDeveloperExtrasEnabled:YES]; [self.webView setPreferences:webPrefs]; diff --git a/MacGap/Classes/JSEventHelper.h b/MacGap/Classes/JSEventHelper.h index f9782e5..b8fa2c6 100644 --- a/MacGap/Classes/JSEventHelper.h +++ b/MacGap/Classes/JSEventHelper.h @@ -11,6 +11,7 @@ @interface JSEventHelper : NSObject ++ (void) triggerEvent:(NSString *) event withExtraJS: (NSString *) extraJS forWebView: (WebView *) webView; + (void) triggerEvent:(NSString *) event forWebView: (WebView *) webView; @end diff --git a/MacGap/Classes/JSEventHelper.m b/MacGap/Classes/JSEventHelper.m index c73a334..310366c 100644 --- a/MacGap/Classes/JSEventHelper.m +++ b/MacGap/Classes/JSEventHelper.m @@ -10,9 +10,16 @@ @implementation JSEventHelper -+ (void) triggerEvent:(NSString *) event forWebView: (WebView *) webView{ - NSString * str = [NSString stringWithFormat:@"var e = document.createEvent('Events'); e.initEvent('%@', true, false); document.dispatchEvent(e); ", event]; + ++ (void) triggerEvent:(NSString *) event withExtraJS: (NSString *) extraJS forWebView: (WebView *) webView{ + NSString * str = [NSString stringWithFormat:@"var e = document.createEvent('Events'); e.initEvent('%@', true, false); %@; document.dispatchEvent(e); ", event, extraJS]; [webView stringByEvaluatingJavaScriptFromString:str]; } ++ (void) triggerEvent:(NSString *) event forWebView: (WebView *) webView{ + [JSEventHelper triggerEvent:event withExtraJS:@"" forWebView:webView]; +} + + + @end diff --git a/MacGap/Classes/Utils.h b/MacGap/Classes/Utils.h index 1bb2986..5804303 100644 --- a/MacGap/Classes/Utils.h +++ b/MacGap/Classes/Utils.h @@ -4,6 +4,9 @@ #define fequal(a,b) (fabs((a) - (b)) < DEG_EPS) #define fequalzero(a) (fabs(a) < DEG_EPS) + + + @class LoadingView; @interface Utils : NSObject { @@ -13,5 +16,6 @@ - (NSString*) pathForResource:(NSString*)resourcepath; + (Utils*) sharedInstance; - ++ (NSString *) getMIMETypesFromFile: (NSString *) path; ++ (NSString *)encodeBase64WithData:(NSData *)objData; @end diff --git a/MacGap/Classes/Utils.m b/MacGap/Classes/Utils.m index 06dfe75..29403d1 100644 --- a/MacGap/Classes/Utils.m +++ b/MacGap/Classes/Utils.m @@ -55,4 +55,73 @@ - (id) copyWithZone:(NSZone *)zone return self; } ++ (NSString *) getMIMETypesFromFile: (NSString *) path{ + NSString * uniformTypeIndentifier = [[NSWorkspace sharedWorkspace] typeOfFile:path error:nil]; + + //List of Uniform Type Identifiers + // http://developer.apple.com/library/mac/#documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html + + NSDictionary * mimeTypes = [NSDictionary dictionaryWithObjectsAndKeys: + @"",@"public.camera-raw-image", + @"image/bmp",@"com.microsoft.bmp", + @"image/gif",@"com.compuserve.gif ", + @"image/jpeg",@"public.jpeg", + @"image/png",@"public.png", + @"image/svg+xml",@"public.svg-image", + @"image/tiff",@"public.tiff", + @"image/vnd.microsoft.icon",@"com.microsoft.ico", + nil]; + + return (NSString *)[mimeTypes valueForKey:uniformTypeIndentifier]; +} + +static const char _base64EncodingTable[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +// Code from: https://github.com/mikeho/QSUtilities/blob/master/QSStrings.m ++ (NSString *)encodeBase64WithData:(NSData *)objData { + const unsigned char * objRawData = [objData bytes]; + char * objPointer; + char * strResult; + + // Get the Raw Data length and ensure we actually have data + //original code (int intLength = [objData length];) gave warnings. + unsigned long intLength = [objData length]; + if (intLength == 0) return nil; + // Setup the String-based Result placeholder and pointer within that placeholder + strResult = (char *)calloc(((intLength + 2) / 3) * 4, sizeof(char)); + objPointer = strResult; + // Iterate through everything + while (intLength > 2) { // keep going until we have less than 24 bits + *objPointer++ = _base64EncodingTable[objRawData[0] >> 2]; + *objPointer++ = _base64EncodingTable[((objRawData[0] & 0x03) << 4) + (objRawData[1] >> 4)]; + *objPointer++ = _base64EncodingTable[((objRawData[1] & 0x0f) << 2) + (objRawData[2] >> 6)]; + *objPointer++ = _base64EncodingTable[objRawData[2] & 0x3f]; + + // we just handled 3 octets (24 bits) of data + objRawData += 3; + intLength -= 3; + } + + // now deal with the tail end of things + if (intLength != 0) { + *objPointer++ = _base64EncodingTable[objRawData[0] >> 2]; + if (intLength > 1) { + *objPointer++ = _base64EncodingTable[((objRawData[0] & 0x03) << 4) + (objRawData[1] >> 4)]; + *objPointer++ = _base64EncodingTable[(objRawData[1] & 0x0f) << 2]; + *objPointer++ = '='; + } else { + *objPointer++ = _base64EncodingTable[(objRawData[0] & 0x03) << 4]; + *objPointer++ = '='; + *objPointer++ = '='; + } + } + + // Terminate the string-based result + *objPointer = '\0'; + + // Return the results as an NSString object + return [NSString stringWithCString:strResult encoding:NSASCIIStringEncoding]; +} + + @end \ No newline at end of file diff --git a/MacGap/Classes/WebViewDelegate.h b/MacGap/Classes/WebViewDelegate.h index 9b09529..ce9854d 100644 --- a/MacGap/Classes/WebViewDelegate.h +++ b/MacGap/Classes/WebViewDelegate.h @@ -7,6 +7,7 @@ @class Path; @class App; @class Window; +@class File; @class WindowController; @@ -17,6 +18,7 @@ Path* path; App* app; Window* window; + File* file; } @@ -27,6 +29,7 @@ @property (nonatomic, retain) Path* path; @property (nonatomic, retain) App* app; @property (nonatomic, retain) Window* window; +@property (nonatomic, retain) File* file; @property (nonatomic, retain) WindowController *requestedWindow; diff --git a/MacGap/Classes/WebViewDelegate.m b/MacGap/Classes/WebViewDelegate.m index 4493c40..47d884c 100644 --- a/MacGap/Classes/WebViewDelegate.m +++ b/MacGap/Classes/WebViewDelegate.m @@ -5,7 +5,11 @@ #import "Path.h" #import "App.h" #import "Window.h" +#import "File.h" #import "WindowController.h" + +#define MUTABLE_ARRAY_START_SIZE 10 + @implementation WebViewDelegate @synthesize sound; @@ -14,6 +18,7 @@ @implementation WebViewDelegate @synthesize path; @synthesize app; @synthesize window; +@synthesize file; @synthesize requestedWindow; - (void) webView:(WebView*)webView didClearWindowObject:(WebScriptObject*)windowScriptObject forFrame:(WebFrame *)frame @@ -30,20 +35,58 @@ - (void) webView:(WebView*)webView didClearWindowObject:(WebScriptObject*)window if (self.window == nil) { self.window = [[Window alloc] initWithWebView:webView]; } + if (self.file == nil) { + self.file = [[File alloc] initWithWebView:webView]; + } [windowScriptObject setValue:self forKey:kWebScriptNamespace]; } +- (void)webView: (WebView *) sender willPerformDragDestinationAction:(WebDragDestinationAction)action forDraggingInfo:(id)draggingInfo{ + NSString * localHostPrefix = @"file://localhost"; + NSMutableArray *files = [NSMutableArray arrayWithCapacity:MUTABLE_ARRAY_START_SIZE]; + if (action == WebDragDestinationActionDHTML) { + NSPasteboard *pboard = [draggingInfo draggingPasteboard]; + + if ( [[pboard types] containsObject:NSURLPboardType] ) { + //NSURL *fileURL = [NSURL URLFromPasteboard:pboard]; + NSArray *pbItems = [pboard pasteboardItems]; + for(NSPasteboardItem *pi in pbItems){ + NSArray * types = [pi types]; + NSString *url; + for(NSString *t in types){ + if ([t hasSuffix:@"url"]) { + url = [pi stringForType:t]; + break; + } + } + + if([url hasPrefix:localHostPrefix]){ + [files addObject: [url substringFromIndex:[localHostPrefix length]]]; + }else{ + [files addObject: url]; + } + } + + } + + } + self.file.selectedFiles = files; +} + + - (void)webView:(WebView *)sender runOpenPanelForFileButtonWithResultListener:(id < WebOpenPanelResultListener >)resultListener allowMultipleFiles:(BOOL)allowMultipleFiles{ NSOpenPanel * openDlg = [NSOpenPanel openPanel]; [openDlg setCanChooseFiles:YES]; [openDlg setCanChooseDirectories:NO]; + [openDlg setAllowsMultipleSelection:allowMultipleFiles]; [openDlg beginWithCompletionHandler:^(NSInteger result){ NSArray * files = [[openDlg URLs] valueForKey: @"relativePath"]; + self.file.selectedFiles = files; [resultListener chooseFilenames: files] ; }]; } diff --git a/README.md b/README.md index c24149e..85d9f46 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,20 @@ Window: // Move window (Bottom left is x:0 and y:0) macgap.window.move({x:0, y: 200}); + +File: + + // After a user has selected files from a either ``, or with drag and drop, + // their absolute paths can be obtained with + macgap.file.files(); + + // Get the file's text + macgap.file.readAsText('/path/to/file'); + + // Get a Base64 representation of file + macgap.file.readAsDataURL('/path/to/file'); + + //File event `onerror`, is called if there is a problem opening the file. Path: diff --git a/public/index.html b/public/index.html index 37820cf..45bb178 100644 --- a/public/index.html +++ b/public/index.html @@ -21,7 +21,7 @@ } - + From 8b91b30d9903c8070803047bf453d53d8416b2f7 Mon Sep 17 00:00:00 2001 From: Liam Kaufman Date: Mon, 30 Jan 2012 17:35:14 -0500 Subject: [PATCH 2/3] File API is now asynchronous --- .../UserInterfaceState.xcuserstate | Bin 36963 -> 41780 bytes .../xcdebugger/Breakpoints.xcbkptlist | 22 +--- MacGap/Classes/Commands/File.h | 4 +- MacGap/Classes/Commands/File.m | 104 ++++++++++++++---- README.md | 16 ++- 5 files changed, 100 insertions(+), 46 deletions(-) diff --git a/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/UserInterfaceState.xcuserstate b/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/UserInterfaceState.xcuserstate index f326e17a522d5cbdfb519aad56d5806d58f03bfb..5a6f4f1219d1d5f365cec1482f7ae7b944a77766 100644 GIT binary patch literal 41780 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 a2u};o2+#d5$k&R9_}@19zn4>Z{(k^;YP22z literal 36963 zcmc${2YeJ|&_BM->{Du*8|quzf`iW! zfFKEqpa~wqmyDK-QFsj1w6xYYH7Y!sYF^Q(+FDCIlr5@3_2_b;M_W^~IRPdu*@e0vQyh;osh7;q6@x%mTA~BVCk61t~Bo+~ii6z8RqJvmQtRvPF+lWty9mIa( z5OJ6|N_<9~AWjlzh_l26;&b9Mah3R<_?fs#JRtre9uj{OkBG;_6XGc#0R?Cv1`IF( z=D-@*09)V%ynzq!1ybM#{6Q!P12G^LB!EPa268|y$OHMH0F;6g_z-LY+rSR62OI#Of)n5@xCFiem%;bo2XGhs0q%i6 z!F}+66q5`oA&p35(u6c6%}8_7inJpgNl(&?3?(DUII=I9L?)91$y~CKl#}IT1*swj zlMUop@->nrAvum5Pfj2wl9R~E%EPQdLwnrKD=8TB?qEm1?0{sWxgj zHJTbjO{3nRrc*Phnba(5HuWYomwK0ak6KKvr8ZC-sZXfg)PCv!b%r`ioue*Nm#D9( zE7UdWI`u2{8}$cukNT6IOTSAmq?gjm=~eVvdIPl%yi#5zPs!8p2JsqrO}tj#P~J%17#`$J;7#F8`?&)dY?%KMnNled?5fcGiyGu}zw8Qulnm%PioE4*vGA9*);zw&

l0TLY`4jn5_;2uM^5^j9^55kziH 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

JC$tp;yAXx{=!H{f%WD6vRLUIHo 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 I|EDkh4_nADzW@LL diff --git a/MacGap.xcodeproj/xcuserdata/liamks.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/MacGap.xcodeproj/xcuserdata/liamks.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist index 0540ade..ba48312 100644 --- a/MacGap.xcodeproj/xcuserdata/liamks.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist +++ b/MacGap.xcodeproj/xcuserdata/liamks.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -199,20 +199,6 @@ landmarkName = "-webView:runOpenPanelForFileButtonWithResultListener:allowMultipleFiles:" landmarkType = "5"> - - diff --git a/MacGap/Classes/Commands/File.h b/MacGap/Classes/Commands/File.h index 41078e9..06239e8 100644 --- a/MacGap/Classes/Commands/File.h +++ b/MacGap/Classes/Commands/File.h @@ -16,8 +16,8 @@ @property (nonatomic, retain) WebView *webView; - (id) initWithWebView:(WebView *)view; -(NSArray *) files; --(NSString *) readAsText:(NSString *) path; --(NSString *) readAsDataURL:(NSString *) path; +-(void) readAsText:(NSString *) path; +-(void) readAsDataURL:(NSString *) path; @property (retain) NSArray* selectedFiles; @end diff --git a/MacGap/Classes/Commands/File.m b/MacGap/Classes/Commands/File.m index 099808b..907940d 100644 --- a/MacGap/Classes/Commands/File.m +++ b/MacGap/Classes/Commands/File.m @@ -11,6 +11,17 @@ #import "JSEventHelper.h" #define NOT_READABLE_ERR 4 +#define TEXT 1 +#define BASE64 2 + +@interface File() +-(NSString *) addMimeTypeToFileOutput: (NSString *) fileOutput withFile:(NSString *) file; +-(void) readFileError; +-(void) readFileSuccessForOutput: (NSString *) fileOutput withOutputType: (int) outputType; +-(void) readFile: (NSString *) file withOutputType:(int) outputType; +-(void) readText:(NSString *) path; +-(void) readData: (NSString *) path; +@end @implementation File @@ -29,39 +40,86 @@ -(NSArray *) files{ return self.selectedFiles; } --(NSString *) readAsText:(NSString *) path{ - NSStringEncoding *encoding; - NSError *error; - NSString *results = [NSString stringWithContentsOfFile:path usedEncoding:encoding error:&error]; - - if (error != nil) { - //onerror - NSString *eventWithError = [NSString stringWithFormat:@"e.error=%d", NOT_READABLE_ERR]; - [JSEventHelper triggerEvent:@"onerror" withExtraJS:eventWithError forWebView:self.webView]; - results = @""; +/* + The File API adds a prefix to base64 encoded files that includes its mimetype. If + the mimetype is not present, it can be ommited. + */ +-(NSString *) addMimeTypeToFileOutput: (NSString *) fileOutput withFile:(NSString *) file{ + NSString *output; + NSString * mimeType = [Utils getMIMETypesFromFile:file]; + if ([mimeType isEqualToString:@""]) { + output = [NSString stringWithFormat:@"data:base64,%@",fileOutput]; + }else{ + output = [NSString stringWithFormat:@"data:%@;base64,%@",mimeType,fileOutput]; + } + return output; +} + +/* + Since the file error is dependent on the function that is reading the file, and the same error, + from two different functions might result in a different error code, we simply return + NOT_READABLE_ERR, which is part of the File API. + */ +-(void) readFileError{ + NSString *eventWithError = [NSString stringWithFormat:@"e.error=%d", NOT_READABLE_ERR]; + [JSEventHelper triggerEvent:@"onerror" withExtraJS:eventWithError forWebView:self.webView]; +} + +/* + Once the file reading is successful, we assign it to the event object in the JS string. + */ +-(void) readFileSuccessForOutput: (NSString *) fileOutput withOutputType: (int) outputType{ + NSString * result; + if (outputType == TEXT) { + //If file's output is not escaped it results in a JavaScript EOF error + result = [NSString stringWithFormat:@"e.result=decodeURIComponent('%@')", + [fileOutput stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]]; + }else if(outputType == BASE64){ + result = [NSString stringWithFormat:@"e.result='%@'",fileOutput]; } - return results; + [JSEventHelper triggerEvent:@"onload" withExtraJS:result forWebView:self.webView]; } --(NSString *) readAsDataURL:(NSString *) path{ - NSString * encodingData = [Utils encodeBase64WithData:[NSData dataWithContentsOfFile:path]]; +-(void) readFile: (NSString *) file withOutputType:(int) outputType{ + NSString *fileOutput; + [JSEventHelper triggerEvent:@"onloadstart" forWebView:self.webView]; - if (encodingData == nil) { - //onerror - NSString *eventWithError = [NSString stringWithFormat:@"e.error=%d", NOT_READABLE_ERR]; - [JSEventHelper triggerEvent:@"onerror" withExtraJS:eventWithError forWebView:self.webView]; - return @""; + if (outputType == TEXT) { + NSStringEncoding *encoding; + fileOutput = [NSString stringWithContentsOfFile:file usedEncoding:encoding error:nil]; + }else if (outputType == BASE64){ + fileOutput = [self addMimeTypeToFileOutput:[Utils encodeBase64WithData:[NSData dataWithContentsOfFile:file]] withFile:file]; } - - NSString * mimeType = [Utils getMIMETypesFromFile:path]; - if ([mimeType isEqualToString:@""]) { - return [NSString stringWithFormat:@"data:base64,%@",encodingData]; + + if (fileOutput) { + //onload + [self readFileSuccessForOutput:fileOutput withOutputType:outputType]; }else{ - return [NSString stringWithFormat:@"data:%@;base64,%@",mimeType,encodingData]; + //onerror + [self readFileError]; } + + [JSEventHelper triggerEvent:@"onloadend" forWebView:self.webView]; +} + + +-(void) readText:(NSString *) path{ + [self readFile:path withOutputType:TEXT]; +} + +-(void) readAsText:(NSString *)path{ + //Make read nonblocking! + [self performSelectorOnMainThread:@selector(readText:) withObject:path waitUntilDone:NO]; } +- (void) readData: (NSString *) path{ + [self readFile:path withOutputType:BASE64]; +} + +-(void) readAsDataURL:(NSString *) path{ + [self performSelectorOnMainThread:@selector(readData:) withObject:path waitUntilDone:NO]; +} #pragma mark WebScripting Protocol diff --git a/README.md b/README.md index 85d9f46..a36a131 100644 --- a/README.md +++ b/README.md @@ -55,13 +55,23 @@ File: // their absolute paths can be obtained with macgap.file.files(); - // Get the file's text + //The following two methods will start reading the contents of a file. On successful completion the 'onload' event will be triggered. That event object will contain the data from the file (event.results). + + // Results in String (add event listener to 'onload' to get results) macgap.file.readAsText('/path/to/file'); - // Get a Base64 representation of file + // Results in Base64 String (add event listener to 'onload' to get results) macgap.file.readAsDataURL('/path/to/file'); - //File event `onerror`, is called if there is a problem opening the file. + //Available events: onerror, onload, onloadend, onloadstart + //Example: + + var fileContent = function(evt){ + $("img").src = evt.result; + }; + + document.addEventListener('onload', fileContent, true); + macgap.file.readAsDataURL('/path/to/imag.png'); Path: From 2ce19e885543455f2f1a0d36da913c81dec8cde3 Mon Sep 17 00:00:00 2001 From: Liam Kaufman Date: Mon, 30 Jan 2012 17:36:45 -0500 Subject: [PATCH 3/3] fixed readme --- .../UserInterfaceState.xcuserstate | Bin 41780 -> 42053 bytes README.md | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/UserInterfaceState.xcuserstate b/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/UserInterfaceState.xcuserstate index 5a6f4f1219d1d5f365cec1482f7ae7b944a77766..518ab4f804309b5f80a9cce9b9dbc8b7425e3051 100644 GIT binary patch literal 42053 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 literal 41780 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 a2u};o2+#d5$k&R9_}@19zn4>Z{(k^;YP22z diff --git a/README.md b/README.md index a36a131..c5a98df 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,9 @@ File: // their absolute paths can be obtained with macgap.file.files(); - //The following two methods will start reading the contents of a file. On successful completion the 'onload' event will be triggered. That event object will contain the data from the file (event.results). + //The following two methods will start reading the contents of a file. + //On successful completion the 'onload' event will be triggered. + //The 'onload' event object will contain the data from the file (event.results). // Results in String (add event listener to 'onload' to get results) macgap.file.readAsText('/path/to/file');