From b86396f979388757725b93b98342e896c9a49b95 Mon Sep 17 00:00:00 2001 From: namniak Date: Fri, 27 Jun 2014 02:48:39 -0400 Subject: [PATCH] v0.1.1 --- .gitignore | 0 .npmignore | 2 + examples/css/reset.css | 48 --------- examples/css/styles.css | 136 ------------------------ examples/img/bg.jpg | Bin 49525 -> 0 bytes examples/index.html | 125 ---------------------- examples/js/CanvasTextWrapper.js | 171 ------------------------------- examples/js/examples.js | 76 -------------- examples/js/options.js | 54 ---------- package.json | 2 +- 10 files changed, 3 insertions(+), 611 deletions(-) create mode 100644 .gitignore delete mode 100644 examples/css/reset.css delete mode 100644 examples/css/styles.css delete mode 100644 examples/img/bg.jpg delete mode 100644 examples/index.html delete mode 100644 examples/js/CanvasTextWrapper.js delete mode 100644 examples/js/examples.js delete mode 100644 examples/js/options.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/.npmignore b/.npmignore index 3c3629e..57165cc 100644 --- a/.npmignore +++ b/.npmignore @@ -1 +1,3 @@ node_modules +examples +bower.json diff --git a/examples/css/reset.css b/examples/css/reset.css deleted file mode 100644 index 5b3efe4..0000000 --- a/examples/css/reset.css +++ /dev/null @@ -1,48 +0,0 @@ -/* http://meyerweb.com/eric/tools/css/reset/ - v2.0 | 20110126 - License: none (public domain) -*/ - -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} -body { - line-height: 1; -} -ol, ul { - list-style: none; -} -blockquote, q { - quotes: none; -} -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; -} -table { - border-collapse: collapse; - border-spacing: 0; -} \ No newline at end of file diff --git a/examples/css/styles.css b/examples/css/styles.css deleted file mode 100644 index 89a3bae..0000000 --- a/examples/css/styles.css +++ /dev/null @@ -1,136 +0,0 @@ -body { - width: 960px; - margin: auto; - font-family: 'Open Sans', sans-serif; - color: #fff; -} - -div, header, footer, article { - box-sizing: border-box; -} - -header, footer, article { - width: 930px; - margin: auto; - background-color: #0D9F69; - padding: 20px; -} - -header { - font-size: 60px; - font-weight: 700; -} - -.description { - width: 800px; - margin-top: 20px; - font-size: 22px; - font-weight: normal; -} - -footer { - margin-top: 40px; -} - -a { - font-size: 20px; - font-weight: normal; - color: #fff; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -article { - border-top: 1px solid #fff; -} - -.white-block { - display: table-cell; - height: 30px; - padding: 20px; - vertical-align: middle; - background-color: #fff; - font-weight: 100; - color: #0D9F69; - line-height: 120%; -} - -p { - margin: 10px 0; - line-height: 120%; -} - -h2 { - font-size: 30px; -} - -h6 { - font-weight: 700; - text-decoration: underline; - display: inline; -} - -.syntax { - padding: 10px 10px 0 20px; -} - -.syntax > li { - list-style: none; - margin-bottom: 15px; -} - -.values li { - text-indent: 20px; - list-style: inside circle; - line-height: 120%; -} - -section { - margin-top: 40px; -} - -section > div { - display: inline-block; - position: relative; - width: 450px; - margin: 15px; - border: 1px solid #0D9F69; - overflow: hidden; -} - -section h2 { - color: #0D9F69; - text-indent: 30px; - margin-bottom: 20px; -} - -section > div div { - width: 100%; - height: 200px; - background-color: #0D9F69; - margin-top: 250px; - padding: 20px; -} - -canvas, img { - position: absolute; - top: 0; - left: 0; -} - -img { - width: 100%; - z-index: -1; -} - -span { - margin-left: 20px; -} - -span, .emph { - font-weight: 600; - display: inline; -} diff --git a/examples/img/bg.jpg b/examples/img/bg.jpg deleted file mode 100644 index 697e9c38c5caf395ad11daa49bf15ea3e2f2c8d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49525 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 z zgw8Tb&Pn(@06Ls;gupLEdWItlT>k)0GSGnym(;|$Eiay!+I%8l=r5q;Iq?jz>((#( zFf>q1{3lZtK^g&0mU#mw!;1*o0-C#g;iE`jfQBdBWn+j%>Htrv%W?!dT=FzCzTU?v2?m99roAS-?AR0100fga6YL3zoytou`1BneffHuG|tZ&Y; zT?A=F_=IN;{){G9K_Y$}d#7-mV?aG$jCBknEiZ;lhg$_eb!n%xo6GPTL;s_8y zoAxbZr0Q71P@0*CddM|h@k>(|(~fdJ#sq|RnZ2`wWcC2C%7Qg<#^LH04-&LAKdfB) zLd2ay!gF_l`BRuSNq;W#aN(o?=r8ev7bHb>B4GH!_na9H?jj;0qj-vzM(f;Z5z=OZ zX_DtB%pxG~4iF?w>N)|bsbIoXP%V()UVCD14TAZg%Zm?zJBf!8Uwf=)0zw%J(sFHt zFn~^?zV9RCN~}4ZxU!Fud|=V#G8}UaVBt`8g>Z`ia_+wv36#{K)2voW1QX6u1u}z1 z+;@Vs%s?N{#tFzOdXI#&wstgJZo!VPFiJ-g)yJ zag4W^X5Xwp-9V7Lg*x9-Co785Aw#k_9>WVKG|a+|V@<v9od;*E92t*s$`Jqyir1aA6X{Mz3`X>((%$ z!Tb^=IpcILGBYt$h_G!oZVkNRp$szzoxNmGNJ8yeQab7dawc0dAKiuoq@rrTOW#D; za=q~khFBq)aPaC6%sJeTF+QURBqrIlf1F^%TL$!~`XBg}dC(z^Z?BJBWW!NC04^(u1Vd(dW29k$1c6J6I*#{vDWK8v1uuQ) zPiZbQ(g?@SdnHG0f!0Qy6^>T`37!7{IPT}64v3Swn%7JiktfdtA90oKv;{B_QhxcI zMYM3hqNdHmu83t;u}Fc$^*Ow^=GGYZfEh0hK98&`Ucm`6&%k=lw6ztH1{9!;#^Pi7 z!9_xVTT-RRczZfPk4Fs=)7n&pje1yLQXJE5r@)Bb>tJxyEesK+s2(*}EW#u%Qk?lk2 zhtAj$HsPlz*^G@66a6{YspPojn~0?V+m98YGFgTL^pqC@x?j_Xu)szRqyyf;A;|!RRegYkKFuGnY=uB2$!@3uP9lr?DqY z%tc~SMw(vCQ)V9f#d@Fb^O1spXmXh099|gl=L>Ftg7J%8OTW|YgJ)o~LEtRew8>?)P-?s-zMx!^QhctiL;z^Z&>;(MJJv8wb!A&j{ zO_Ien^A1d`;PfugnQym@+^$NMEG`oab`oj&ycrtRt@43f=Q&hxP!M7kQxjZvcf0N&M6{ny!e1UxEUSS zW_b?Yuva7@_cemH2~YT$pDsctcHtkqG4N3K@6!^pCQuljyN|3#L-7Im94u6$9iZPU z&Spo4HXTY->Q}S%L#Sg?(IE|~xPtGT({2U!koi&5StMo@Y;50L6Ct8lk1|i=1PLw( zGc-?Jkn{mM+=#Eddkk6$hB+R(WL=M}7>+!)`O0!DIs@Tx=xCr(FLw`INTx4J)b@;* z0qyh)56)8=sl(?_taNvfq6CgWZ=v5fl!g}Bpni4hBwW%IjUT+OQp`jNvr9wwbc$WQ zR^0?0W_)v%3xqE|j33+U28=Oe#e2pD>QP-8dJ4g#>x4(_j*k6X@FoP0j7?M|7%aLD z{W1ATv_`t;6*^M)n)EoHP8g=a7J$kbhHrUg0*UTMRjP#*)1^`o)owkQ)fE%e*sRM^_0SMihqaP&ri7%6TxZ ziahbe|B3*?em1m5TC;-HF!m#<`7@~*9FHA9!d@%<|m&YO95iQ|p z^@t-2vIx_CkEprG)E+SZ01LpbfWy?lmBa+QXCH&F4dib4Oa*)czbUML)0|T&MuHne zMC&EOUzt7AUixBkATwpA7kZWq-Fc?Iy1|-_(+m+8aq~Fp;+;{o9bm&Ck{sh}LbLEw=OSZd z--l$sjE=+bNeGGB`O0tWIsKy7n#fNQWw%t{Y=*8PJVCuL8k;gHA<}uo z00eP>(mm0E(D=pTp73QLs_rQxv-gL}bAm{iKL@XA%hvEDNFj(=9$4oJ=CDnjOi%TK z@brpTQ*Nc#VA!+(4uOLl@epra zeEeZtSHL|mM4hD?K5<3hrC-sH<^=+8=inXk)fgy8F&Fo7mx$F(%aTajKyyGUx)I+Q zGXcZdXM=Amky4V)>1R5@3V=Y3EOM3T5NyQQ+frTehb$erYaOa8 zg5Hr3J&>Bo(TYXS91-a;^O1gnfV)Zh40=&wh?pi%5&Olgd=hSI1Gy^3-z1*H084SW zQ}msRFh#lsM)gcEks6-A&PdH&&YpP4p;SUZdUNmV4+$os3Z%p}iXk0AGZOZ%227X4 zZ*pyZxuEV-Ygk+0fP2XxyBT z09MwPR?YU^CP6O&;r=kCLu@8E>5xnY`8>Fk4G097^M>E1@LFaLow67r+Z5u+jg=$+ z01&bi6`rOuHjQi0dSs}bOKuv|vfF$?yNnhD2mv)jg5z5pf*@(A>kB_vic+L49cDgp zEI|!{xh_41FWW)b-q!Cp^a7IB2ndlEQ^i>`(^&%-OwJ9nRQ#&P`NwFR1qQg);*l^( zDxO0PE|mcWpj=#$HiDlq7+RVZlK%kQj40-9@Snx^!5|ed-$yTb8s{}JMB&(-Sp#jSwjaB$H?p(r27cN22`ckq}t0GdhA*x}D+DVkVMs8z)00 z{{TcvUL+g%_{jn%B2xRrIYXcOiVDDmV@F&o!s||wcK$KfvZE)%8N>jEjy+)I8D)83 zNF&qnS!lL6Pp8$7v@OR>*|*jn&4zG@0?g-H{r>>qsg)oKUnwW7H)LWMHZOjDutmlO z9~zImJYx(>0_$wz3an-`Y}7H=uCQ*t5TBQSTA0B=0OY50rbI;K^yJ4@~eA{=88$vls$PO+^K~&_+>ErRg1UX^1Rj3+CH+yp(@@gmC5% zK|^h(N&&%xIT#qZjy+^oGXV?tn&P%hzRhHi8(}X97xRQ#49E=n{{H~+P=i!PFKgQZ zY^nB3Fd6|-Pxruvj8L+s3G>b$8kz6N5PzdJ5hcdfXM9OReezHxB!=|X&oG=$7f4cr zevXPX9WspwA)pi_wiZnG5IM9XMuuAE6^V<*o3Z5?nb za2bSV-Uc{1<(xfKssb#TA{n7agf>uvN&@nsEc?hnKnLu3zvIM&f4wSD|!-p5DIxfbw~=EpnPR1U%eIOWI`l!#=9ynJI(b${diF%bZP2ZjOfII6>l1V7FTf)gpP zGUlKi6u(QB8WNB~Cw{m2;0!Q7-@!2QABBSMIrCV5I<=LH4KjSnijRo#2ZP#L*d;y=7yQc?sgpqXFBAp<&A zM<+k5)GG3SY98^5?*b`T=PZdEi+(XFltVQ-$`SXD6l|OiFW)1Mm=er(ca3jyFnpj7 zsoreUN}TPG#H5=0`M@_=Z9B#;1OycaY!>ar=!$cgfY-XKWLo|F1zOK>q=p^UHO#w3_5cUesG zt&f-E4W#WN3)OvL!7DhH4`9iU zGOGJG$R@_86FytK}(ii3w|yw)@dqF7$KSARXsI) zWr;n5+(a)`{zHt$`1U?izzV1w=Jg^>x7 zpkKTKABa%N8slts*d?I`C3w9}K)ap7IMo{{Wq1N zO^F|P3<(HzlOkV6I#209?84w!EX`PaGJRtgD~0F;2VyXhP=PQGD|m_wFI>3j#RR$n z@AZNsxo!+GO;931@rO=Sd1>2a71DLGNtS?*48cVxax1MC>%lwP8dXhDs_W#NEO$70)Wy?WWy^L zdaHlNH?Yb+U#9;_c zOHM3}8ITgw!=UJNz~>^dr|S@eh8Zy6utP{^9}*C&J^f~1!2>d0RV!y$$CPI6Z*jh!a9=a-wz-OpucZ9E4Kt~aS(t9 zNHcwI9M>a6QG_rkbXZYHt*gm<1_%{lI~ty~(-I@Dg00r)B|#Q}e*XZxeELd&IRRAl zh-4{5gu-~H2*N{|;}>ymR(X^7GI|7&AfK4PgpNpu&&!Eazzd8~6?0-t+`$kQB193J#dTC~i|O2_;}q{jT3bg=z{5_s~1!0EG-;DP`o-W;jm$1(nSi9d^eoPNHJE&F=fCYG@pYIAsj%S^sl(Aom^0-eCmAQD`Ef*_mPUm zLPVNg{{Vs`1_+Rm5b9Q55Sa-@#Pn_y_mS8J;5On4`o$g6h*zCtnplL;MNj}W} zd~omN$+8Q3T;mAV313p=27=99gp=u=6)JI@5Kp)ol$j@{ES21;;}$C0w_oEr3L;-l z4HVJ6WhzO4j?l2=T@DyeSdE9)S6sQ?gFUoDg>L>#g&9aB#3bpXwmODD0jCUW?~^6q zsv%5FeAXf&l`IFKa6yeKjftQGe9wk5{3g;nFCO9TlBAT1z4iWai2{nBoF#l>bMYX4 zu!IsL8Xnx>%c6w2>O15+AVL+~==JS_Gz1A(uwv>6BocVz-W?KtGv#_5yiP?3rI>A8 z6uTw_rZ8lZ0#87B{{T6nBN`LPUyPc7w$UChol%N~0vX9LSPb#3PO=ga6{Il2>r=9_ zPH2WxD=89p!FX0uMv28VH8wO?0+f$tMp?0Gpfc5cXakj<7^nue z$R1$l-Y~GJ93;~Yy=xkHNr+$~7C`tDzC{0U8=I9LdAqgbG3MExvu2{@lv@NW_a zbSDN5)t0wZrC~JX0W9)0Q=sphh9xs3CghG~p1Bzugg(aq0Mmq>n!PHqd*oma3Zxe9 zF7jy+>M%NK8XRf+CwVOK=_=)sRriHA^+EhHH0V(>{e0p$?$cojw8_J*^uTL}IwGYt zNcqAm9;Bv2&YuhEIG2K=J`80PpLpw$g21Ds;7FsS< zB*gOx8;g%!u~I?UVDce?Q|(;#NS_#$gn{gFJbR1?XI1Tz$8-#CS=RE1Cukq;GJ-s5 zQh1NuVa*njU*Hd4(NQhw-7@JjRd&uh8%%9;nR%yKX{8ZL{Y8>_7a~K+0F`fVi~>Y# z49~w9B0(wyyO`0=0pLzw;~As?GDc%qfK;erW#dKuGG`3KYv_Nt$i`wQj3;3wLZpML zpPV#gTT-4bzZhx81DWS8^ol!L9Fr#XTn9(!KX|E9GAtw1e(?jQO%IH@m{fvOHK4@Po$r&RJ8o(i=)22NJ9l@aI2NG)l_^Zfbbg8SJ z*b$={fjX{w^MhoNV(9gcj9r#%-N2i}N(+F;lq^r)KF;$hzZgNri2{G!Fkqe+WBC5D z$PLW`WWLq$l-59@s>O@I=U9P2iZvdwBm#m@JsgsoK&*qOSn!yHkOeJYz29CdX<1F_=p$q5$Ca7a16IpqtA8_&sE24^|-%2a@n` znV^rxATLNCE|>_Cc0bN3C>Tfjvxp~kGB}A&Pu48yF0geSD;#JobAieP?r=@%I3tuM zjIVB7-e3&)=5vJs^N5-H#2QOs-Mc^VnhUieqH%=?l@)Yj|g8bo=OhODh7kJA?g(G|rdvS}30bIMZfi)kTLgfae z)PP9uKZXN3lhWACg(XnDayShEp*%z+1#+u*tfNL!1_eNbw^m-~3(-0PMx^lCP~bX5 z7KLH~w&j|d?qhruf{;K;MwhZ&Vi3%U%VI=RP>r1Aif*}$EekuZLS*L|yfPo)ej_y;%d`LQiX% z{&7Q4kpQ~3V=M+o<`8{hVET{~4;t~c-Uw?z``CzEWJU-pM|LlD4qRTH$UUmgcD^jx zj3Y3ASgShfZriEt51ihSy1(BLYPZ`r`9QO@B=YwO;vzAN%n-)l8kdCpu zJ*3xqe^?*YgSaG6O5RcCSul^rB)JGg#7ya9;xXV7-~G9NIXrwVqM@=U`pU2YGzUxl zVl#wxrLTNo7oCa*`13f3NP}W}slj+K3bdV#kO)_e=_D&}J;;*)GJ?W@z z!v>5`G1f3iL&`Hf9-gpk36{g~elX;f#+S>+wr!Vx!Z|$*2BeLQAoD)8k@a{i@Z%X4 zLR-9F^N7Nci6irjMp^>fr0Q^aObkAs`-FvhSm~kllMrM@ry^+>?L zXMcbKXT+ETfMi-sOrdrM?<{>{E{ksw^-v-vZqC`$)oD;$)M1UEC+ zC!y#{ow{R{!V4t3^~Mzl>TExCoCd+65}?e{JFGz*16n)c+O!hi_q>M7njjoWsn)(Q z1VZdeXRKg=*2_zY+UY8Oa&?7hMEdoC1yHC@J+biL34TcW$o^#tgQTnB`Nb0YRwvnq z#1WGksH6MEB9TN(#{{Tl4{(+NZ4z@GFeLu~Mj3Ndx5DN-ZxBXE-)UJXRQ87)c5xgJe4V;)H!@9*E_MPvaGZ zfFaVY^S+n@p#cpK8$Fm%@E|9GLRWr{*bw?f6|#c&Yk6T)s+W;K$l1eSi{wf5fCq#l40H6+$tO5}?WfqxZjymLw zjtDp21QoCZwIj#5$1oZSOF__lWDDCteGlG3KiC3hAeX0om^_LBLP#d{a&Gc`8bdVp zagtgM2uaf&OTZS%@6Jba)L9(KawKxWZjP2)O`@|H}QS??D zWswtUbGw;vjCHtvg9RuqTXn2_0>mxjfaxKjXU9xU%)u=KkNu6%l(d~l} z43a7Xs5GCvkSIU`K92X>SU?BKd7Y(XBh-O`dJ~80k!jhSmL4KNdl?3Gw>e)T`~jFASBOtStfELwR1;GEm)P6Nvs zEEVFA#ZOv7-t~^0`kGz2&DQol?DIOGtk6f{(Q*9(y z0o!B5CX+?4X0BC zYZHKtW)FdXIFgzq$X^k74FyFK82}NX;TYBciA{RK2`>e9vpCvDsfzNLEmW=Ca{zr~ zb)g_FWv#93)NG^gStY7OaFn9r<^;ij;Bu~k1Moxl~CvLcpuHawJKnnog$6PA| zT5pIGH`zdD!PJ<^tI=@^!wRf&^WPM~1(rddKUh^ID8sTkE_E9?08)^k1i|0NGa@Rf z1Ei8+A(|RJh;At9kYvodoy%<9e-nzC5Je8|`1-=ojP3~ja>v9PK)xq;iESBxDq{CB z!;J)s4JW7blUvpg)?0w}jF6np7pv=zwo!?6#aUq1IE@=nyWKnk7l*WW-znaCsLcq_= z;2XRyh4oqu<8UPj-Oj%_d_ju{`ew3J45*{x2NJ5>0>5#Am|mr)=M)FPp^R58(l@+G zWQQ#8vAUI-mnha7Q;!(|k`gxEiQ^=xr_-?OkE#~>e;9dWnhcPsx>mpG#2x_{J~B$^ zREZZ(v6h%&mI3Zn-aA4}8F#>zzYSwcHmAdkJj^BlwDZx(aG@s7Qth(3;VlVOcB<8L zmLpJ<{eKay0<=%tERGVDC#(4} zq9~|_?<4S-x<%2eeBkyNgZs@VdhwG(4W;)cIzpL%8S6M0A)x)oOo-ECW#PyKWzL*$ zG0G_%3fxa@X6@u2a5P5gQT^kdo=GT<_;r)1OWsSM(1+nTY>cuH^q#l|eE}=c>-xl` z#)AV}8X&{3S3m22jOIXFVD}{d0954YWi~-FOhkb##{#%WPXvQRh{l~AIWGk!wN>QM zmBJqO`)vr=~K}?>L(|{{X#ls9`!i za76Y93V%4;NK~d{{k|}|Qb8*D`oL8M#OqU8KMG35g=CJ$&Jt5<1y!^-*6{L-5g;eA zJK*x-!m%?oNit!p=;8u? zCB%1G40zK>6m;DfbV(tg?Uwx9w&X!VVZoGpm4`?zN_)rmmyunN&db`T$B~5$9!)S& z#J0-z!eEg1AI?O%We#U}=`xopj;H%ric+1Oc0IW%72K=W>lc7nNU~@?3&F4=b)+++ za=jctX+vfuL1!@Ii4Efe0-8w;%lpTskU|EQo~Ml&<2Xwl$zuS7&u4Y}VaD8M;`HFY z`yfE|df=c2Vs-st>kJ2^;Fq&R)5C&NQ!ot7{{Rd=zL9u%=f0lk;&`?8ggYy;-mFQr&$|l7< z>N^=ICvmjBQ?6U0?vL| zGBlYcQ3iVP^@Z7Cf>YT40H+uPL<#-4!qW_y1hI^=&v4_MY>YtxKz=SKtl-*R&P%y} z*BCH59Sr{f+-H2?<>YshfxMFZD+-b-L{Fmwz?(xW+Y3+{F1$E!QKAyA93Y{tS^Q!X zC@f6e}9lm@zuodBTIq5op|=zc~~n zEl*CDkku0NZ{8#bSb@RkH?a7{BZd~-=iVUp0M?>@K5**&A%lXj+siT>IvW1~cf%z> zejQ?hbWFN%MA-nAJ1u==K@yMypbj)tUH<@-xZ z0f>o`JiAUd+!+YdeHL;7DBUUnn1otH&W8oU3ZGDG#z=|j{;8CN#i7bd;GFO*D7RAz8{=e5=P!1jF!%z zN4vmB3&;%IVL~QSu^0LK#wEMnMtCj6%sOC#lYqvbiBMJ>h6J$_1o1g8R47gV0J~)Y zKwa~NZFw}rM^;}1XxSjE&L-kn3#zlrj+C{~_kcACxgBE!$bd`rhE83sowsgHw?w5! zPk5PC3Z*3P=5Wx6*(N6?lut?1zL)_}5W9>PWKtS?&W$2z@)$8|gxGFHs9Gb;;sF()DwwxzG3p z8#_5?dVe_~GBxN7Y@_2Er0KqOiDd2P=M!nPzn|pcVs2D>(^b diff --git a/examples/index.html b/examples/index.html deleted file mode 100644 index fcdcacb..0000000 --- a/examples/index.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - CanvasTextWrapper.js - - -
-

CanvasTextWrapper.js

- -

- JavaScript canvas text wrapper that automatically splits a string into lines on specified rule with - optional alignments and padding. -

-
-
-

Syntax:


- -

new CanvasTextWrapper(HTMLCanvasElement, String [, Options]);


- -
-
OPTIONS
- - is a JavaScript object with the following available properties and values: -
-
    -
  • -
    font
    - (String) - text style that includes font size, family, etc. specified similarly to CSS - font shorthand property -
  • -
  • -
    textAlign
    - (String) - horizontal alignment that applies for each line -
      -
    • "left"
    • -
    • "center"
    • -
    • "right"
    • -
    -
  • -
  • -
    verticalAlign
    - (String) - vertical alignment that applies on a whole block of text -
      -
    • "top"
    • -
    • "middle"
    • -
    • "bottom"
    • -
    -
  • -
  • -
    paddingX
    - (Number) - horizontal padding in pixels set equally on both, left and right sides of - the element -
  • -
  • -
    paddingY
    - (Number) - vertical padding in pixels set equally on both, top and bottom sides of the element -
  • -
  • -
    fitParent
    - (Boolean) - parameter that controls which element to fit -
      -
    • true - fit canvas parent's width instead of canvas own width
    • -
    • false - fit canvas width
    • -
    -
  • -
  • -
    lineBreak
    - (String) - text split rule -
      -
    • "auto" - text fills the element's width going to a new line on a whole word when no more space
    • -
    • "word" - each next word will be placed on a new line
    • -
    -

    - NOTE: if a single word is too long to fit the width with specified font size, it will be broken into as - many lines as required on any letter without specific word breaking rule. -

    -
  • -
-
-
-

Defaults & Usage:


- -

The default options object which values will be used if a property is not specified or no object is passed:

- -

- { font: "18px Arial, sans-serif",
-    textAlign: "left",
-    verticalAlign: "top",
-    paddingX: 0,
-    paddingY: 0,
-    fitParent: false,
-    lineBreak: "auto" } -

-
- -

- Use standard canvas text drawing methods such as "fillStyle" and "globalCompositeOperation" when needed before - using CanvasTextWrapper like so: -

- -

- var canvas = document.createElement('canvas');
- canvas.width = 300;
- canvas.height = 250;
- context = canvas.getContext("2d");
- context.fillStyle = "rgb(255, 255, 255)";
- context.fillRect(0, 0, canvas.width, canvas.height);

- context.globalCompositeOperation = "destination-out";
- var wrapper = new CanvasTextWrapper(canvas, 'Hello'); // default options will apply
-

-
-
-

Examples:

-
- - - \ No newline at end of file diff --git a/examples/js/CanvasTextWrapper.js b/examples/js/CanvasTextWrapper.js deleted file mode 100644 index a974aa6..0000000 --- a/examples/js/CanvasTextWrapper.js +++ /dev/null @@ -1,171 +0,0 @@ -/*! CanvasTextWrapper (https://github.com/namniak/CanvasTextWrapper) - * Version: 0.1.0 - * - * MIT License (http://www.opensource.org/licenses/mit-license.html) - * Copyright (c) 2014 Vadim Namniak - */ - -(function() { - 'use strict'; - - var defaultOptions = { - font: '18px Arial, sans-serif', - textAlign: 'left', // each line of text is aligned left - verticalAlign: 'top', // text lines block is aligned top - paddingX: 0, // zero px left & right text padding relative to canvas or parent - paddingY: 0, // zero px top & bottom text padding relative to canvas or parent - fitParent: false, // text is tested to fit canvas width - lineBreak: 'auto' // text fills the element's (canvas or parent) width going to a new line on a whole word - }; - - window.CanvasTextWrapper = function(canvas, text, opts) { - if (!(this instanceof CanvasTextWrapper)) { - throw new TypeError('CanvasTextWrapper constructor failed. Use "new" keyword when instantiating.'); - } - - this.canvas = canvas; - this.text = text; - - // set options to specified or default values - for (var property in defaultOptions) { - this[property] = (opts && opts[property]) ? opts[property] : defaultOptions[property]; - } - - // extract font size - this.lineHeight = parseInt(this.font.replace(/^\D+/g, ''), 10); - - // validate all set properties - this.validate(); - - // basic context settings - this.context = this.canvas.getContext('2d'); - this.context.font = this.font; - this.context.textBaseline = 'bottom'; - - this.drawText(); - }; - - CanvasTextWrapper.prototype = { - - drawText: function() { - var canvas = this.canvas; - var context = canvas.getContext('2d'); - - var elementWidth = (this.fitParent === false) ? canvas.width : canvas.parentNode.clientWidth; - var maxTextLength = elementWidth - (this.paddingX * 2); - - var words = this.text.split(/\s+/); - var lines = []; - var textPos = { - x: 0, - y: 0 - }; - - this.checkWordsLength(context, words, maxTextLength); - this.breakTextIntoLines(context, lines, words, maxTextLength); - - // height of the broken down into lines text - var textBlockHeight = lines.length * this.lineHeight; - - // set vertical align for the whole text block - this.setTextVerticalAlign(textPos, textBlockHeight); - - for (var i = 0; i < lines.length; i++) { - this.setTextHorizontalAlign(context, textPos, elementWidth, lines[i]); - - textPos.y = parseInt(textPos.y) + parseInt(this.lineHeight); - context.fillText(lines[i], textPos.x, textPos.y); - } - }, - - checkWordsLength: function(context, words, maxTextLength) { - for (var i = 0; i < words.length; i++) { - var testString = ''; - var tokenLen = context.measureText(words[i]).width; - - // check if a word exceeds the element's width - if (tokenLen > maxTextLength) { - for (var k = 0; (context.measureText(testString + words[i][k]).width <= maxTextLength) && (k < words[i].length); k++) { - testString += words[i][k]; - } - - // break the word because it's too long - var sliced = words[i].slice(0, k); - var leftover = words[i].slice(k); - words.splice(i, 1, sliced, leftover); - } - } - }, - - breakTextIntoLines: function(context, lines, words, maxTextLength) { - for (var i = 0, j = 0; i < words.length; j++) { - lines[j] = ''; - - if (this.lineBreak === 'auto') { - // put as many full words in a line as can fit element - while ((context.measureText(lines[j] + words[i]).width <= maxTextLength) && (i < words.length)) { - lines[j] += words[i] + ' '; - i++; - } - lines[j] = lines[j].trim(); - } else if (this.lineBreak === 'word') { - // put each next word in a new line - lines[j] = words[i]; - i++; - } - } - }, - - setTextHorizontalAlign: function(context, textPos, elementWidth, line) { - if (this.textAlign === 'center') { - textPos.x = (elementWidth - context.measureText(line).width) / 2; - } else if (this.textAlign === 'right') { - textPos.x = elementWidth - context.measureText(line).width - this.paddingX; - } else { - textPos.x = this.paddingX; - } - }, - - setTextVerticalAlign: function(textPos, textBlockHeight) { - var elementHeight = (this.fitParent === false) ? this.canvas.height : this.canvas.parentNode.clientHeight; - - if (this.verticalAlign === 'middle') { - textPos.y = (elementHeight - textBlockHeight) / 2; - } else if (this.verticalAlign === 'bottom') { - textPos.y = elementHeight - textBlockHeight - this.paddingY; - } else { - textPos.y = this.paddingY; - } - }, - - validate: function() { - if (!(this.canvas instanceof HTMLCanvasElement)) { - throw new TypeError('From CanvasTextWrapper(): Element passed as the first parameter is not an instance of HTMLCanvasElement.'); - } - if (typeof this.text !== 'string') { - throw new TypeError('From CanvasTextWrapper(): The second, dedicated for the text, parameter must be a string.'); - } - if (isNaN(this.lineHeight)) { - throw new TypeError('From CanvasTextWrapper(): Cannot parse font size as an Integer. Check "font" property\'s value.'); - } - if (this.textAlign !== 'left' && this.textAlign !== 'center' && this.textAlign !== 'right') { - throw new TypeError('From CanvasTextWrapper(): Unsupported horizontal align value is used. Property "textAlign" can only be set to "left", "center", or "right".'); - } - if (this.verticalAlign !== 'top' && this.verticalAlign !== 'middle' && this.verticalAlign !== 'bottom') { - throw new TypeError('From CanvasTextWrapper(): Unsupported vertical align value is used. Property "verticalAlign" can only be set to "top", "middle", or "bottom".'); - } - if (isNaN(this.paddingX)) { - throw new TypeError('From CanvasTextWrapper(): Unsupported horizontal padding value is used. Property "paddingX" must be set to a number'); - } - if (isNaN(this.paddingY)) { - throw new TypeError('From CanvasTextWrapper(): Unsupported vertical padding value is used. Property "paddingY" must be set to a number.'); - } - if (typeof this.fitParent !== 'boolean') { - throw new TypeError('From CanvasTextWrapper(): Property "fitParent" must be set to a Boolean.'); - } - if (this.lineBreak !== 'auto' && this.lineBreak !== 'word') { - throw new TypeError('From CanvasTextWrapper(): Unsupported line break value is used. Property "lineBreak" can only be set to "auto", or "word".'); - } - } - }; -})(); \ No newline at end of file diff --git a/examples/js/examples.js b/examples/js/examples.js deleted file mode 100644 index 9610094..0000000 --- a/examples/js/examples.js +++ /dev/null @@ -1,76 +0,0 @@ -document.onreadystatechange = function() { - if (document.readyState === 'complete') { - - (function() { - var container = document.getElementsByTagName('section')[0]; - var w = 448; - var h = 250; - var aspectRatio = 0; - var text = 'Canvas text wrapping example'; - - var img = new Image(); - img.src = 'img/bg.jpg'; - img.onload = function() { - aspectRatio = img.naturalWidth / img.naturalHeight; - createExamples(); - }; - - // use options.js file - var options = optionsArr; - - function createExamples() { - var fragment = new DocumentFragment(); - var context; - - for (var i = 0; i < options.length; i++) { - var exampleItem = document.createElement('div'); - fragment.appendChild(exampleItem); - - // draw canvas image - var canvasImg = document.createElement('canvas'); - canvasImg.width = w; - canvasImg.height = h; - context = canvasImg.getContext('2d'); - context.drawImage(img, 0, 0, w, w * aspectRatio); - exampleItem.appendChild(canvasImg); - - // create canvas mask layer - var canvasMask = document.createElement('canvas'); - canvasMask.width = w; - canvasMask.height = h; - context = canvasMask.getContext('2d'); - context.fillStyle = 'rgba(255,255,255, 1)'; - context.fillRect(0, 0, w, h); - exampleItem.appendChild(canvasMask); - - // create text to be cut out mask layer - context.fillStyle = '#212121'; - context.globalCompositeOperation = 'destination-out'; - - // create wrapper - new CanvasTextWrapper(canvasMask, ('#' + (i + 1) + ' ' + text), options[i]); - - // create hint code block - var hint = document.createElement('div'); - exampleItem.appendChild(hint); - var optionsData = ''; - - // read used properties - for (var property in options[i]) { - var stringWrapper = (property == 'paddingX' || property == 'paddingY') ? '' : '"'; - optionsData += ' ' + property + ': ' + - stringWrapper + options[i][property] + stringWrapper + ',
'; - } - - // print example code - hint.innerHTML = '
CODE:

' + - 'new CanvasTextWrapper(canvasEl, textStr, {
' + optionsData + '});' + - '

'; - } - - // inject document fragment into actual DOM - container.appendChild(fragment); - } - })(); - } -}; \ No newline at end of file diff --git a/examples/js/options.js b/examples/js/options.js deleted file mode 100644 index 77f6e69..0000000 --- a/examples/js/options.js +++ /dev/null @@ -1,54 +0,0 @@ -(function() { - window.optionsArr = [ - { - font: 'bold 55px Open Sans, sans-serif', - paddingX: 0, - paddingY: 0, - fitParent: false, - lineBreak: 'auto' - }, - { - font: 'normal 40px Open Sans, sans-serif', - textAlign: 'center', - verticalAlign: 'top', - paddingY: 10, - lineBreak: 'word' - }, - { - font: 'bold 55px Open Sans, sans-serif', - textAlign: 'right', - verticalAlign: 'bottom', - paddingX: 30 - }, - { - font: 'bold 35px Open Sans, sans-serif', - textAlign: 'center', - verticalAlign: 'middle' - }, - { - font: 'bold 55px Open Sans, sans-serif', - textAlign: 'right', - verticalAlign: 'top', - paddingX: 15, - paddingY: 5 - }, - { - font: 'bold 45px Open Sans, sans-serif', - textAlign: 'center', - verticalAlign: 'middle', - lineBreak: 'word' - }, - { - font: 'bold 25px Open Sans, sans-serif', - verticalAlign: 'bottom', - paddingX: 10, - paddingY: 60 - }, - { - font: '50px Open Sans, sans-serif', - textAlign: 'right', - verticalAlign: 'middle', - paddingX: 15 - } - ]; -})(); diff --git a/package.json b/package.json index ad55756..64f3dbd 100755 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "canvas-text-wrapper", "description": "JavaScript canvas text wrapper that automatically splits a string into lines on specified rule with optional alignments and padding.", - "version": "0.1.0", + "version": "0.1.1", "license": "MIT", "main": "CanvasTextWrapper.min.js", "homepage": "http://namniak.github.io/CanvasTextWrapper/",