jekyll-sitemap-1.4.0/0000755000004100000410000000000013566114352014504 5ustar www-datawww-datajekyll-sitemap-1.4.0/.travis.yml0000644000004100000410000000204113566114352016612 0ustar www-datawww-datalanguage: ruby cache: bundler rvm: - &latest_ruby 2.6 - 2.4 matrix: include: # GitHub Pages - rvm: 2.5.3 env: - JEKYLL_VERSION="~> 3.8.5" - GITHUB_PAGES=1 # Only set on one build in matrix - rvm: *latest_ruby env: JEKYLL_VERSION=">= 4.0.0" env: matrix: - JEKYLL_VERSION="~> 3.8" branches: only: - master - /^v\d+\.\d+\.\d+/ git: depth: 1000 before_install: - gem update --system install: - travis_retry script/bootstrap script: script/cibuild notifications: irc: on_success: change on_failure: change channels: - irc.freenode.org#jekyll template: - "%{repository}#%{build_number} %{message} %{build_url}" email: on_success: never on_failure: change deploy: provider: rubygems api_key: secure: O8fGRnM6OJCqC2BlVE1BqYfq5aR19ulpiHhQwRiHbtSCh8H4rYt7FLsuOwSTtRQjhWYRRSpdRt2ilfQ6PY6Jx1UkxZq5zo9QAPQ9tKxiFTm7gBpZAiAgb06eyaMBSzyQ8qe2qccaFI6CiZhsiaGMsdKsWuYpuoPmdLPd7aDyYJs= gem: jekyll-sitemap on: tags: true repo: jekyll/jekyll-sitemap condition: "$GITHUB_PAGES == 1" jekyll-sitemap-1.4.0/.rspec0000644000004100000410000000003213566114352015614 0ustar www-datawww-data--color --format progress jekyll-sitemap-1.4.0/README.md0000644000004100000410000000720013566114352015762 0ustar www-datawww-data# Jekyll Sitemap Generator Plugin *Jekyll plugin to silently generate a sitemaps.org compliant sitemap for your Jekyll site* [![Build Status](https://travis-ci.org/jekyll/jekyll-sitemap.svg?branch=master)](https://travis-ci.org/jekyll/jekyll-sitemap) ## Usage 1. Add `gem 'jekyll-sitemap'` to your site's Gemfile and run `bundle` 2. Add the following to your site's `_config.yml`: ```yml url: "http://example.com" # the base hostname & protocol for your site plugins: - jekyll-sitemap ``` 💡 If you are using a Jekyll version less than 3.5.0, use the `gems` key instead of `plugins`. If all gem plugins have the same `priority`, they will be executed in the order they are required, generally. Thus, if you have other plugins which generate content and store that content in `site.pages`, `site.posts`, or `site.collections`, be sure to require `jekyll-sitemap` either *after* those other gems if you *want* the sitemap to include the generated content, or *before* those other gems if you *don't want* the sitemap to include the generated content from the gems. (Programming is *hard*.) Because the sitemap is added to `site.pages`, you may have to modify any templates that iterate through all pages (for example, to build a menu of all of the site's content). ## Note on Use with GitHub Pages Gem The GitHub Pages gem ignores all plugins included in the Gemfile. If you only include `jekyll-sitemap` in the Gemfile without also including it in the `_config.yml` *the plugin will not work*. This can be confusing because the official Jekyll docs state that plugins can be included in either the Gemfile or `_config.yml`. When building a site that uses the GitHub Pages gem, follow the instructions above and ensure that `jekyll-sitemap` is listed in the `plugins` array in `_config.yml`. :warning: If you are using Jekyll < 3.5.0 use the `gems` key instead of `plugins`. ## `` tag The `` tag in the `sitemap.xml` will reflect by priority: 1. The modified date of the file as reported by the filesystem if you have `jekyll-last-modified-at` plugin installed (not compatible with GitHub Pages auto building) 2. A personalised date if you add the variable `last_modified_at:` with a date in the Front Matter 3. The creation date of your post (corresponding to the `post.date` variable) ## Exclusions If you would like to exclude specific pages/posts from the sitemap set the sitemap flag to `false` in the front matter for the page/post. ```yml sitemap: false ``` To exclude files from your sitemap. It can be achieved with configuration using [Jekyll v3.7.2 and jekyll-sitemap v1.2.0](https://github.com/jekyll/jekyll/commit/776433109b96cb644938ffbf9caf4923bdde4d7f). Add a glob config to your `_config.yml` file. ```yml defaults: - scope: path: "assets/**/*.pdf" values: sitemap: false ``` ## Override default development settings [Follow these instructions on Jekyll's documentation](https://jekyllrb.com/docs/usage/#override-default-development-settings). ## Developing locally * Use `script/bootstrap` to bootstrap your local development environment. * Use `script/console` to load a local IRB console with the Gem. ## Testing 1. `script/bootstrap` 2. `script/cibuild` ## Known Issues 1. If the `sitemap.xml` doesn't generate in the `_site` folder, ensure `_config.yml` doesn't have `safe: true`. That prevents all plugins from working. 2. If the `sitemap.xml` doesn't generate in the `_site` folder, ensure that you don't have a sitemap generator plugin in your `_plugin` folder. ## Contributing 1. Fork the project 2. Create a descriptively named feature branch 3. Add your feature 4. Submit a pull request jekyll-sitemap-1.4.0/LICENSE.md0000644000004100000410000000214413566114352016111 0ustar www-datawww-dataThe MIT License (MIT) Copyright (c) 2014-present, GitHub, inc. and the jekyll-sitemap contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. jekyll-sitemap-1.4.0/spec/0000755000004100000410000000000013566114352015436 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/fixtures/0000755000004100000410000000000013566114352017307 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/fixtures/_layouts/0000755000004100000410000000000013566114352021146 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/fixtures/_layouts/some_default.html0000644000004100000410000000005013566114352024476 0ustar www-datawww-data--- --- THIS IS MY LAYOUT {{ content }} jekyll-sitemap-1.4.0/spec/fixtures/index.html0000644000004100000410000000010213566114352021275 0ustar www-datawww-data--- --- HERE IS MY SITE I AM SO EXCITED TO BE USING GITHUB PAGES jekyll-sitemap-1.4.0/spec/fixtures/images/0000755000004100000410000000000013566114352020554 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/fixtures/images/hubot.png0000644000004100000410000015137013566114352022412 0ustar www-datawww-dataPNG  IHDR":9gAMA asRGB cHRMz&u0`:pQ<bKGDIDATx{Tg.:oN2WNHq;q(Z VcXR4mzB B>&}{k=Kn21oπğyB!ß׸Uxt/ˁ5w:KX5uՇe ` ]XF.ҦFȡXX|Q7:bFk?ug ?8`Iƺ>4qO,N˥_Zi-]7KOɺ6\o{F~:w.cQBP?_ZZjፆ jtX5cW֯~0 @`ɨoa ,Xt/a hL̤j&`% JvMWcW]IJ! S3rI-Embfi&M#A~]_?Xtol7T /Yø"caBGeFRDw]G,>h6#̟(>чK1w9 7]?{4Ě}Lch!=kIdT膪fh_S - $QfCS xpM]?շ,AKe+誢\&t#fݦ 7CRjTMLVCi3NC6% 5i3\_t5ijqC@5lR'lg4Y`^TBcM+% ,$ukʹd#o7v]Pvv}uSiBW:yai;=?>uI&NjzfU^֋뺞b>` o'y@GemdO/a let$0W(S+;hVGݑ'~/h@xX~7pC];=ӱ=Ug+ǍE[~%\S2]G!A[38׍-4#R;:#eR^VTߴkM^< ^hl9A7HŃxءh=[F…Wȯ GJJ0[̹M=Σcg?{OjABaM9KajK ,G\@H!h]Yo/P?q)FpAF j(a╠V"SdЫ%5(qhZgg{"й?ѶzSRdDMFDKT|`X60ZnpLPqOcAc&zz WBv-46rF@V¢kW"I xԠR @ƫaao _6kscYe=FPDB?s|ɭ`N""a L?k%- "DXNœK b-\Xpԃp) j+&C\"d&~ ^-]Rkd|ؠw7FWH $ UQ]pӛ߳kRT(_fס/h tXpϙ z `JF$2O%}‡dIщ:lU;%dU>aW4tr[:BhQpTcLZqi*`aHb)齆ifd7}H{(dH s)aI 1"YeL='HxY @DdE PcAG" [7Oh1:vy81E'/럧`Loxꗢ՗ooOӓIz}/fsji#ǣ!!a.x%c\O.! ,5,L00G'1ArJ:aLP`~V".#T"pq]K&CY~-#d\!y̼cZ{ ;!qtҬЅąv>ۘ|fې$09+s=pEGzs+R?mkĩc)66͟g~(n0.hd )QDz K/FJވ{U P{´rjv.[yuoD3v]tŽ3TMDB* {Bt`YəAJJjz,aF5\ j&z,z]0[.>^`g~ nJ!!g"׍8L4I.b0S%`u?'X \Dl1-A&O*$ YQ:m6R,^ܜ1UuH*HXXw-wG$#AJPߠv݈_dC7 fR"dΙD=*}8q=`޳fד{/8|\Sxe|t4ֱcE#,vrl<[o"k_juO[ F ^oL;R?~2I!. fՕ̐#YKsr z_͙W&p%tvFF;;C[4bى Q#vً3ZQ `JHR0c7T?)T!l%D `3wEu5Û~#~5O 䧦WuJ]Gia$HvhL`]jρ/X hأ Ep$Q׃rsXb`ᯘ6SrDboXìZ_{ 6]ѴT〨? ˽߁cSմe'+,Ps^i*O2(tl*M
 ={ISSZE9%%5C.!.R;'쨄Ϣq0&'PVG}$c]QMUI* _i/?Sk<0N( 'Zoo˻}Ku٥5t}?}:B@`pȁ|D 'I}I%`jXNTY {#]aUѓInzv_L4U`}WML[{b%ٍ1So7UҺۃ%"&¾dأ ͤ0hщbq+CD IҿU"p20 ]o&(F.kЦ* r]WzWi?ֱy~Dn|>I*` ގ0G 0a.vjaX$_k:L60p8/\}V3U4I7%F{lA*4!H򫴘8y~~AʹOf")X ɜTZljG7^/(%IWI9?eDT׼Dk;GOLu>]u7]2,Ï[&:8c%5Bve'跪١]~)ԸW8~TB׭؁*%ھ8T :~oG$nĒ҃afOt Tn/ )W yK44 ׅ$T @%~XaX IաXQ HJHILJNֲ/˲ELD k~xo7\dž楚}\.ca(@3"2hQ5=zvDWP=6J2 'i; &(8 ]ìŀH*B |V JNrЁBgfO$ja_}b>.Q R|2%L4'k Z- JfH6#n K$X%@62ď)VNrUtނE څ颞_1 ^QTCb]y{DG 0OMk|vz:n2Hd7l=4LN K%${YApqCw~+}Yu\9n&$uFVk-! O!TQ<$BRoH&SK-JDzDw*U0بds57uy잏[rPqOx`?fMNK2*s[޽˽gBnKX͏ ƀFX- I@f,(7UfY?=Z"wTH]jzqoHM&J&Gxid0; 5k-MDP6ְZ,b%=1Uce) FMx5 &豇dPQ JЕ S˭;zR61-\r*'7fdlh[2{7w\ 䜮-8^AKx+ok ߪr)&|hҐicW>9o%\1-[ä*cΓD7he00~`/xYeYM+(,ŏjD?L]TձͶ#YR"wvnDSM`̸=Ʈ`tAhvq~jBeHL%\xJSBvmeM?Yj֐#^}ڦl}s)xT+Hn.'/:~\s̃U]op,ZbP5;] f*9%g=%|zIݮ4y1\Js24XrQŲ<q< 8AxsRڈiiݜD*Z[c Qx|@5 u4{]ONr,1yWȱB~x3<5TFt92(Nd4k9;͹hEeJҲV97F$DAI`d=xYex=6w!G>EeF8aI`LɬFr1nJpn֖Kkc.K r1d_;V_ڳbL@h)߯_Ծ/-FMy@ݦ?;fCO4WQFOcۗu2G j4)[J߮)[k١?x2w"O\ڟ8l&dN+GnzHc$,5qArx-ДR@I"yI@lH py!dp Hxe^Y7x('\x ,0n0hHwbώ/[57ဪ LgJGddyZ\n֋,'HTGz@so]JфL[w=Rh؝HMgEʧg1C$:wdIw93. KQ4O9r#0"x$""v2$X p",rO2 x@1"bF@!xQ ?[%'Bgg=HpVHērxcB<^6lϊܞ p p3DyKguQٗne3 =7 ۃyp=KMokyFYWz|El,o;NbxM@A$+98@œ% DHqwq܀ p|DzCA,qp pL,-yYK$ D1a=ȠnOs֋hE>~*m`YExxg$2H1:')wyw:A;*ݟp]-*:VKGoX'~ 7^%-T TԣlXZ6J$3{׼ʌl?HnJ}F Ȳ[HYoGUH1$"u  xd GhD$\&xٍbۢ&xE+]x;qxu"*10gɈ,'3NyzyV t c;M$p aA W8p%1j fm&s︚F6V1* Hڽ#&kR>```h$l*3Lo:OftoB8/^ƭY?}P$A??VGKKby떟  (XeYH9ƃ G# (+^&+8mGz ^э=ޙ$?XeGS iw- d7mL@`D]X|9_z5*0$#+3ZӚ+UTSR-j}_z;M#e s@c-{Vr̪R :k|{+\+ʘmY3ejVꜦ3jsՀWw;5s0C lQ(‰|?_;4 Կ`he/fap׈Q /YzD伵_L3YCq4뱻.0|d/2;?A |g-`i5X4դ}Dlf+IdKPot A`avP#tZDZvV\G+-lcWڕ`Ab 6b0֫o-9TFO<'[ܗlĕyp C+Xˤ;rs~8M}W >0I^@K"EZeQC&gIvCwad#w"-8YyX&PY)3Yy쒒u;Ji`Dɝ2#ӳ'U|1jwws1`WAsY0±l7woO *`r,l`Zj2vT8~_Ho̪@6,ɏs* 4fcEƱ*[wG0_CRf~F2zcC K"UA x lZȤ-5tb%=EFO@z<2L)wk&*<)Xts?`5x±ظ*!+ XQD災k'6-fTpi 4PWsyƅZQ udX0܊(ng2-z"[o6h(b,1"G  q  ^# &Dh)V =aZB dEKG &E!\(No/ΗK0u06cw>XQ"Eɲ7&zO1kN>R>JPMƑ WUL3%_X ETa iM;k#M ULvj3UPɭkr;+88WQT2 n1tGXyx wUFrKFӸ.AvroY:2Z R,-fl-MztPK?םtȬ14eRA_ c]pv\r'7'K`3ȫKcv/ ~9~L`(mxvF wIY-_٭|jÕ#?{N| UWTWlg_\DC9FY%Z>{*ʁ*gczrrqGȧ M]28E_WU#iA`Q.'B2pb}FZID`)NF1nrsü;Pbx43=OW}xGȰ,%%'#1C,饥;*{6BPq烥[)ݝ.{?]ess^wړE S͘ϧ=kvIDx]9jO5~Gwɮݱ{%'PVKqcsv*v6aw,{ExP~>H`ssnfe P싲VQ3.}`GΪ:GV)yYtM?zសbՍ 9u2;aG+Jw'n<0ă9S@a%@,Pq5RMx`{vXA)=9|rTg*QoL4dtx5c!kF JɰHfzr]Nnb-bN}ZtI7ӨďZ5 _\{-:0[t&fLv2@C٣;~Ol]Q{8-Q#<%;,]{蒽҈ ˜Ot!Or|9P=:^m"878pp3o\`$rjx^`t |)9ƞ>nBFa#˵y6 T:gw kּu"}EAON fof9ǀ+&8"Ÿ3iHfk%uuՖn큇مw߮fx&f|4 Q 1$Ol%Q^&3ymܗgJ+w )s0dL}nJDz3n؁@PYd_%!,29s9|rş~7x\U& t0J >e>γNfXq^X<ϹYz}~B%QYdS+c5ԸfW/\'.(3 ,+=Īܞ۞UvTтLEVV =Vzײ|w 613S=&h|w;STΪͣ/9x#UiY%ibm^w~|.57y;q IMo\݊aM@ 2M;x5Ssm׳7-=Yl`1\ݔcLv0vCO>G_w 6N>y!b/xb7 !0 g2YWˁ=ͤKJ˹#ܙLya:'8=qp}"b49ZPX6.=yZCo=_ ,S{.F T5ނ^qbutzF~evEf[VbS{m_l.|ӓ:=jǹѻ.5a_t—K6p_: f95ԓUv➟JwO,CExOt&g.j6N}LȹA!LK8>fG稏{runnpN*TpJ 9c],۴qS9tRq {:'rPG+ieNo[%.PmG="pH6x8L)!2ܻE'Z [ bXw|gu2&`wyrΪo 5 ,-i`Bh}W4[&Ԍ r6]VyڅtNG0zhNgw$3`}v:sEXv}S9>s7.P2O/Y.QpQd8ng۸/:.":H7Oeu>;_P x|O]FR^yޫwttw|§'Ӧ<ΈLaѿT(9aX]"{-f99;;?<5x< o wY̾MDd_IP(%")@]˳CK'NR6K>~Pnk 79@T2G-Ճw/i!c.+;NlS uxsԌr29-SRn;bK,| K-ug>Gg~i7;=.aRf'E}ఱ༉o#Ys1b9"g8 h|,\@@&n̸¢Wz-b&xus\8@r of?9Jvu ytIf+ՓvCBNY } cyDžxw y^yنU:^w\ ἥI|p GseZÒt~u=ٙ0~4sJop?P Sq;`EBWZeWX!(&@kAc4!6,g'9Xɹ]vٍ)1xT'rL)0S#DI~6~oǨOwLy6O~gJ?6cʓ6ʓI#i"&Gf32J!тWƒ099d8+#]ξMܹͬ >vҮ6 NdmN]Ű />:IKeΆ2ەr4V;Z*\-6.ypqB5~GcjXo0c ), e68iZʅ*gҩ=_ u\,B%79Z9<N&@Lspe]^0  SFjy )N,*8`;l{eYG  ~ +ܧdRt~挖NYˠE7n8KEwM sKvb(1ډ>+G603p-Wzj J$K lĪ!VF?`N B |Fǁ5wź52cNX׉O4tuS~<vn+3d,  `iDB?g?RZ;|Wdcl rpYJb貘+ }Z+|,ڧuMol݉g/l:9h:)uLI )4IG{+ci1E#pq%Ã1']"Slog/4TΔͥ_ruvHh@5XgC k&$B9c8=h+i +/|tS%P\a߽4꟒y_75[ɽi* *,DC;gnu,$q2ág!hdΓE3=.`&cv`I˯P8%Yg9z˷OWyƁ)U?|2Bbnf|"M:2F+ ɹɂGc \N2r]ϧ8-sRmw]`]xE &1L;Gzz%[8XHlՄ&(-7wUL+ `$-{W7-7iNx aǦ!wgoYR;%bb8+FbXܖȘsXcƐO,h!:ӧ>u'ߌn@frȲ { \) ûe+rHPd4Xʌ0oO߁Q4ijzdy+Jt% u@WaXɓֿzgWX(u8وp="J`aCPq"cww=jg76nΏ9{pr#ҡ*W:RnfIr[M prOm)*ɳAyLA57Id)!ɍzE ` DH!@#5eM9N&=jp;-#ǡє섁3X'sL IAI 3$?DnJt#B^1␀(9E>hL y/5 ]+|g_|zӓu9ۙ$C8!L i /B0X] i_W,f۷V4.9?ܿIc rG`eϏ_;Thr$!f3͕EdHCN jJ~(~D#C rIlt̼/1E| -JS"Wd!0X$@ ъ 'OW_$`P` 9,n)ǰDa"c. K$x"R3X`,˔NMY\,ZW-iIjWꄋ]M&HpqT?$&LS!C۵Ta 9uͶq`&0#W#~f[XU5~) YzN|l+e͉c>>ȮyzRAZW<$ */Xe s*eF=̘75 iE.D&5ӀQ7)gxNF@R0,c0p+`- s\,^9HJvჍ-^yѵCxȭ$ 1Qm-h jQAxvhIzc 'Or,V k X7XXn{hxG%{ˎUj"ɍcnq`Z67SBJ)NWAQ܃'1 Q# B[hHx+6y }\G&b4a)!Ƥd,+2QČVgGvN7_D LXA ƁKX1y˹8&% 7 _}񊧦U6<9cRS QIl':cؾtٍG+X45i7-f/+~$pvg}q `sL: ;ܱa2^ݔ gR0&s+/E)jgp,bd,<$"\%$%%qPka4 c>BH(H5HQ=b^ eX恃H3o5Eq@"n\;+.*-..=x1Mgs}S{`{f|j֬{y_̺w~҅ͥJ'~WM0oYQF[u{G0hX8E1, c?H!U%egfe*([2f섉&u]}9y3xhΌ{/>>էʗf/ymޚ>(c%lYv+b}ܻ݉N:&|qO1Paw>/^U6I&O eZoWz-kԺDȝKJ3B1vł̉[S, &I! +prk k=jmlZfbvo0HE닏m,|i"Fp|QD`zgX D](:x sy9 Z2G!O{2eN3/|r#>4fČgfܬ/[ oL -kܻۗCF5_zdC׵ .(w{BypN.'V l6BSq 4(+NqgPB2`1Vb"%!髋-y\ M `- 0NJqy,;#d 5j,dxxrChԇV<=E3_X8GמֳQ6H}dWo߿{Ŕëk^sw`/=u>P/GCp^2P:ި͈lbkcEZLiJ 2VllHSlqn $axX\ 0 d#Da`,%nNUmtjӘ>VfoXkkԬX#FGF_?9I] MXUdΖY-"x#!\CVޗ fE7ewKNK*>}1\]WɏFd%}JGWfP Tz1V"xDؕ Ić@>~ [Arpj^u!NNJbCDH~v UWPuv}kX_Xi}';+c> \q%pWT~z%<Dƍ6ax-KcF5~y3"a{ N GT iMc5Ht4ȔxX `M`%#R;QklY?Z8a˩A6Lf҃ @+]ILpp5Wd4q[ ֑r*obI.7T1`YoW;*1pOKVSyƩ4qfg `/:^ظԆO&j -| h"lp)-3 0J7霎uȲiJWNq"U"U ` ܘV'N DܧWSQE U֙L[)~K%ۅ7X7FD޳{I x 5v0EjH PdЃ jq3p:&#\׻X/k8@tLXLFsPD‘n"rсFs騑EknkɥvufT'Q*gOk@UG\r)/ R.k@ f n*w4W;3VrX'h(Om,W ™E1N\т^ :k|%s@-8''l)d8$H"9uK2/@` ( 3>zCd效LsEåRi- `g֒Z8M몏Ұˌ=j|S@̑ R4Td|-NΛ$Za8$B#A#6Xv,r"Ȅwk^b %!˚Ò[,"z vKp"ڬKpWɒ6YJ ma~Ǜc,oοǷTY=t bkWMG&p6u-J̟q d߽,*/U&!Wav0YE%xŚݭ<3.MRB"cR-Y:+7o`Ach{9"8[.1dqIbB-h`kV g[nWCեq/!(M #u5?U#J  ŮSL3߯?kud#% ?qbѪ xXAx*۱X-25b)b<A⋶2-#Ńást'+?( .@(ύ5f Ym_ :yiKa`o.IvHeZ_T:O+<GL [:4dk-U6k+JooB`9VeD7$EI"R/&S?% 2fȡ:g# h#ȜzIeD/&#*"HI >D:@f<(7@/?Z- 5JʫǷ<,X S~ XWGShod7\b,RV n 3RJ8GA7sb)Yia{!clsXbz^]/`REJDWP`b%ϠX>rC3%Sx X#̡Ŏu )$~G:ClUU?*w&=}VFj"&Of$L.1?(ej8 aPx@ǫ3*R"F jP%0GZuE5¤놌_znTC7V] ,ul`A1N`2SvvO8 O̰L:679B}K^rkNbs~ͣ/F /fC:_5̈́ qW#M,I@ 5O׺5v,Xr{(8Az%yc@W#qŻ]5LC,]'uSk:Baut^oLl-m͉oˉm-T^_rlƢo׍::R*7M/'wrVͣߘzn3lޥDG)`a}oﮠ~ ,V!bZm_,^E/=!Iw פyW,TΖ^*?Xw{3<)]Y8i.v%8e3ye[^W(N~pa,?;@eXw!-MotF`5U]X'$:6UEOI0nܖu%L,4Ҙ$xawO|j$jY4Unɳ{XZ":0Jy7X:Jvţ-d3gzV\YEc/}K3ID @E2xx(;XXI!XRoP Qz|w-ԕRsk}c}}[?έ|=6 wR{ھS,ii Z [t`ҜՎ#]eS:JbC4[3ū * av̔TozWyytQɜ1fs;"w rLE/x̂'̉1+Qsp| >ݞ1 =sKϯ~z=5߯N_v㛥Kmؾ^bzDx:Ve;Vi;ZqoӏV!hYԯ-d5VXv5<]֑jrBXXao 5{5X^=WrwK f6/zZ$*wɑ=T (Jcd,w2ּH #7fS7jәU3t'D=N)'IeobΘⱏYzKrv'>ȸ䲇2-Z5UoָOS9l2ۥ =l0nZԗ gKIVkmՎCTj۾Ŏk,Ӹ!s$ Ȋ^h9jj UͿd*`,7c@2 N,0NnĆeĬT!O2$'R" RtеQxnC;dBO֝L6ȦQLuIgܨ1s2K'>˿䏛9=-OS>7~ɌKmM|# Y [ ](4-o5W;S9 $ |QE4NBDVSf h6U3]J)>說+O~w6]WF{'3zk%%hJ$ HG?d+-,Yö3MX J=~{#۶uf *Ao8$U#VN?X5t~z-3j)ʿ{Ty%Rﹻp.RvVc??択I>_::ł'<͛jcK<ٓ',wgi}yqGzU.f]q0QuXjK]jub (QxWʹv,=Bu_n\aqKԸnʑHv/Xl{sŰM8-G?$*[Hf<=~TmP?Z~KFqrđ(A2 FX !`7;$SJѹ9H~4FIwyx#o@'h艏8|1kq~s1qc̻!D/f}z*fbr+gG\Wrٯn8ݗkf2퓘Bg?n< q5yvV+,GsK:j(8M<݉'k׶w懕oe_~&HƲMeÛGy|$9SgmňdYgM$NR:VzR{s%8s>X2ܒO.3x4)|%w!swO\X8~:)IGOzd_|?*sW?&6,lqUG/f4`Xp `'X+F\:~ákf9S9߯뛷3NԌuqiJ G+X2# g'pƪ~6ITۮRY.75Vg ;K$-r"+3Ȳv|ZK*_=d*om)Z* ޶a-,޾KG*ؖ @7sMe|K9R8Rn;Zn?RTlTD*i-Újk2`5-7-q4-u,PGRG2-5ts5EmĦ*o9J,P%{;X+}ցJs;X. VjhXЇkK-ej\b[C+G@+0cD\vÍ+@9i:?~{p?u;8!u}DHEzS;c*XikB뉍$H.M x pFk?Te;\dވȈ5{cqa)

u ?rG n+̾m[W;e,\+f߲|yZ>?+ư\3n]>3X9cYw,}Yr Z>Un]9>\uʙr+`ͼyՌ[̸o]>kw,y>Y376̿_:I쏚7:aN ˋ0OWdCqVLjXq+`r]M_+Q d[d$Fްָĉ0Z6pU\C%wB~ζ鴺'gEC?sߙnY1n[mԺeCVjSWkճZ3 Y=kꙸV0 [~b?Xt3wg߶z֭Qn]6ַgYl޺h`e=oyiKۖ˨Q97c7f^i{ez|꾌'=~WÓNL[0>mnGޢ Fޕ?rr#'d^6;lghgHw0.ߐ" \AxѾc|f3rBވ G?jԱfM1I39yd,7|ɼ5/Fsn[1vެ;ޝ=hVθmٌ*r͕3- wI{Ȏ sO y*(wvJF߳bTCpш/ƐE8jES1\N5-KClCwr+@OO?:䃅Eg~_+{Z>_fgٜۖln[趷Y0l lxaF3\OoۂIYҧN ?|B1!}C+M_ysuȀHZ\Ӣ+TeRPl iȰ^)I(f |$zdx.κyGf}mh$:M==aqrX=̐cyAհ\'l~ªC@&(p?Cę)d~iA_[,XfgB\SF6M5,W0ޢ>y)޼;V߫gk5Ҭ2]>_r0}VΜAރ#l% MaʰEM-y<)L͒Ȁ{cqI8+GIpdB(d4%5a >SyY yng{@*(GgӌaymOQ6N9)rX6ni6[ݞa;N͖a餇Xsy;M IwH;;t:A9F"kQmHQUpI *!0]-tU+9'ˆJ7SӍk)Ϡ@`Vz ThhѾ7_:qJ4ds _1kYCVj`\Eϻm['_3sJn](Ur~ka|dCbqȳ>` #$Q&{ J2͑3"/a2ܳg_sˑ'9ٶq%f&Otz~Ө/46gufH\5O7q nne t׌;%u]QAOф~ٴB56=hO$X +)l7àb .VHU4cfdX(.$bH<17όz lF{NV5٥nlf⌎v}dWv5?y*8]}w7yUK$t#hi5p3npj[QünĹcێo_͏>y{憊{ּ2j yK*rO/V>gdܑesFV+/X2dC팋3qa5CA;4o䴻JΝ3O'~ǎmmmhTQC$SDg:k9cmZ-Xsɠ|X8pL뒈^~ Яar-M-1U?ysѠ*OFxDN[s'#r2,'RO>+5 BtŚ:w,"Gވ7iRôf&=,;@pj~Jwt3 wn-j_4P?̞SQ7zdwPij7]+]ftH7^,PL2itJ=<}D#gt>~j_۩qg?}ř_>Sǂ>UZ1IsSUpo~I^)6}Ɲkծ3vz" {6єLhɤT=ra3BnlIb;VyE%B_.Jt, YJ-n2~|}Wǁt\籕cZؖQ7uBC"[s:Qqb5"lWH5Ҧ\ [ @:WNxf ureoXl&O@xy$-3yn9)XI]s^EZ2~I5j:]crL7m|}U tkfٹ߸q8J9Q{?Xٺ3S6uM9mŭyUiS=: tC3whh1ؓڀw5ԘŽϝp`ao&> x:gjmS)4 CAG%x8, XTI]kY.!rFjj6.A9,/7dE=`I!Yr\I$p< K<5XԉU20y(=©0膇[Mc;?l;=|>T43T!ݯd&\_T>5zYncj*p~"/yRwiߕ=SuEF HE 8Tի7. jI'YcD &B%LRp^*Sxq/7Wq*#cUrVNnBD:ir VJIMӢl8FЭÂπ_@(<YM7t&4MR:gw|aiM`U׎>[J:Y!7xNԄ3,$AdFqC8U+9^7'Ȍ9O ~M`)=UH:hu})&IDhVL{,0; .!U@`YK5,;h:WW[ө1)`  V%"SIeyH][l*h9ZIWS.E1u xLa\ZPG|E9t2 p`=oJ˒؁7z浅A _֠Q2i4&RA:% @`y*aۅк%组&/Vw ^pC1dMWZZgbZ0"d>l= ֋B1 O1eP }軝Qjj?Tr؄GWoxdžY\uiE}fj^=8TFP2OpYrV؎V:w; r"( 4\I8{ #nH" y*hTS!j k/~>u="c]Bw- ɀK HOd@4&2G9lu@;0[pSA2j b/_ԣ_ùۿHFBUvTƿZ?3]b3MYׂ;B/ jދ^#EpFoޣχ&ŃUrjgpa7UN<ꄈT y˨jۑ Ǒ2U}Ix' 0QsP}RLyU'ھ4hKc{{{읎C]رg6#Rm xXJFP?ID<W eB@dJcS5o1Lw[).Hd=Ǯ!^{SQ%H:zE8d7ph׺PŠ|񋇵o 'weݦC7] qkwB%b`bN-JZcyR`]uT2\߼*4!K\-eecvZc \jZ5>'p+*Lg'wNŎ./vn3\^ߵ1wCv|CѧoY~{``Z,(h~f3IՍ<&[ޑu ZNZ/kKRp%[ǝj_fƾWW}挴~Bw>bz[ /"XŰxGF0T0[rP[XFG`+kOuYw.0>X /8 nTVOk=s3o\-\C%P=HȣeBKbg=~2tfmGkf'F?l=A\hMŝ__Hx8. FxIsU %pϞT[XOjVDYw5-u[LaLftv_Z7nW=A,)uEjFk_2h?5Ua2#[*p{ynRu^z?sĎ`IWm&Z!S@8h HWqkYr#$QdQxRZ+uw$WtN 6BɔtuALޗ3hYH]3Cq~=5m BDÞSd`ut2LwsƘAƀ.}Q:$)4i$Cz9 xCGVLa9SȪa{ [a)o*:/'5#F{T6'Ap2r"5HFYgǗYc&]%9g hkhmѣ6}vB3/}^F0U_Iq)#Rc#).abM񠘨:>X ~_mz3lin׀U[{w&2I#C+3Y J` ҁz*T`E>jv,PU!Nk \TQ ^sXMT]rPQ+k0xJ sqx`ICMXyh}\e"L2VHFaooc׮gRb2b T;-|?}HlԸ*֣ ~$4jok^DOGW_Ĝ᧴;qWN $~o JWGz~/.K`}<3ƺ&eYP W2$pi(-SjrρkNվ]Gv p;oS%2nRTS#'+@Ӏ߷}3P`1Ήg:̅gG0膗HbQ l\Qihf5zUo>lNPfІ!Y f`&qDJ-k^zqhaKy=5ZP<|d$ZO9d^Q7)^&9 bi@N\YG A7jւ8]2n xZHP` D>=ݵd8tՍZ.B~yF=9b*kT*OAuMFWԈcVHBw",'~h$w] k]<KAH*ܐ0?+7F&x)5H'ti!{<T"~[FJ>פ7ۚ'C*Xƞy9 oL܍d?leYGp3!KwkӾq3B\bD:H"*XMgPV?ydʎwfLK83/ԺZTK$IU8j T Po3^r\ yx)ߧGx`PL`18bjj_ #3 Z 8p 4DgdȓGh-Bar D(OCZǑw PWπWXZK`]Z&n2*0BRDñq*s{͌aJ=LmjU)jB ץ'x5,G7vǍ0 .|H8YɪnUqjXǢLvvX4@FСCR7Xd&CMȼ* ă"B{,B2Tna Hc=o}4d pg#%@qP#ĕzB<%#bŞK5W.cBkTw0; Fgf\daI3=pW=&:ta^]]]ҹՓF~ZuLbܚ?Sgy aܘO/xN y̪s'In#*DuLIp6Ժ 32k ;Ku%Pik`y>{wo pku`7]Xqu7:Z%uK1{cA_#ρ5 "0bIUIj›Fp^۞j3qZѻHRaI$A߸VU%AHifmB?G ùH'\Q\K?sy48P7!*ԫX%7e[z!ִ#n ?]!/K{1&rң#Ul/C`prΈHFlnr޺X0S(h~.{II=7۷>ݜs$0qmȍs>{y9#ޜ~v:ݮ]3J)2>1!hWV rn4a;,\82 4{\KE:z]R> ҿ|U^y}Xd \gHx)EłNvQRn_k+c }NľmZw _u{5BӞZCpzu)qz5ie~:6nA3\s`Ax!Qqa$XJhXm P[|w([ոHntk^VΝq0d@EDO|naٴa|Wڻ$ӻѽv64Ѣ!Ұhhq2 Me)9Vf/O]xi.] z5+5Vr˦j^1cڎx)),T)yZ0$ƙ.}Ϫ K1T RH]a#zw TL t'C913?tUtR7Q80oZ!T|W1"oXrcGs3Huޟ<`tt[/Jͅ/2$cRAƘ"l\)72.0 Zw>ڼ9yilz9Ft۩ݫ zg(ph#InY#2/(LAd]^7=s?պyl 16bɬ˜y_ mt2B?jym3ιqP!KS7Q H DHLI\0ufqrUMJN녬pXupi} \0@;/)G乸nDuҿB.t…n$*5w~lճX:GΓ:1uM!ͫz_h&0 p¦yㇱÇJ.:x3g8ߦf{U`%¤u?.ädp-XT`]  %K%LeԈ}JB;®x݈,9\tFø>z錍LZL~ݺN6x$3s_UkFܢ,m۶mڴܹV<P4]zyy詃M7VVUn\3ͮm-H  ux<#nt!> 0NKQ\3uE&p' {M4BY0AHkXSlU7*>BdAnq(g8sk术W3]isA>ݼQ٫ucf2SWA:M_"EvS3ҬB6lcz?-=7IrfOY\dxiE^=xl'KG~nVGhĕq+ũL OTۏ~B>[ӍTC5O$t_,‰Aj6@Vq 3fvV5{)5|@bXmrwm+GJUzyZ~MNOkm2xR^UX| ;hт3s=L-`m߾5{6k҆ڷj&K V(cۻ뵮xOnH^,wf[r"ϺͺQ?X!*^"12i3(|~=#xI7䛡"c}RPy ^5kG8s/p>:a&/2e k}.[|o֙_ndMF',ǃ^{AFt$Ǭ'#h,5Vxb{[O~V6ު~Y\6Eq|zg娛 ?I .I{qjc '?4; rp}kNw Rm){c#x)˝1t뛜MֻZp AXJ!N"rz ,K]]7Ϭy4ާ^T>}2.5H,D%R""Ncϛf H$0B -# uT}TV (z]ots8%e% g[?Hl='{DXa13:ŵ󀱦M Io>)S3gnIV2̭E_2^A ~~J/7ڻ7:1T^3)qib,%#Q1^ CT<7-幍m.:tgӨSq'"\zQdgWG%zvmSϳk(+ K<(^+ջ%{(ɹ=a۫sͭ| F&}$XWk+"(9Cґr6\gKM)w'pź+7~&j}+3d%6.EMO`C,u%4"EhxjU}8xKhJWmD-$ /pPuRߥFizϜ1ci/b4Wz" e|Q):3V.`O?z5Leqol*JVvG}T![(^1/&) >fQiVV>VljEbX 9h~[%&-uuԎUCIpR}N(&%pۖoaa$I䩴wO ^p{vg%\.I

m݆ ֮ _m+/nЙ VQZت*ݥ$E'E=?)Og'&**!Y=l1%動(EMy)TDd]ʻRJ,Q/TJbޥ(p`)JK'!v3WZ0<]gWh1G>SgpUX);HO ,,4aqб1!g)jngFPjDϞ[F~;R#NP: W23V(z/lcZ v1R,QDp=(`n6Yy{ϔzyS9wVաndJfLԜG;TR)_L^sбU5"y|"-Ncڶ?Frh6E%l2jG{GXRT:˩sێjү\ɨQ6rU&\eFKJ`rt T=J2wj3ʰfJ*>]I0Smp88`fk\-mQ X9;`3f/,J[0ucsks{;$}J= =cv Df@ $u_ MDAc74zO܄&3'HfGYφF 81 %xJ%g7r[{cv"B#5 M l!ۻ֯]>ּkC|gգSF/'&|2ެW9u2 >Q*Qi9v&Ǔ#|=zA׼4}VKU)4r^azn1beڸ<^$*߭$p(Wx4iS/'< [fwhz߶SN^TjzQ9ZRJ&)j)y\OI?Sn5}j+QHfNr?SR'Lֿj+X)Š粡{i5\ 4&AD%(v[q(W"n-kWaE3jW.nuXd" Һd+_֮Olޔݷe獨7Ĩ%J1Q^pjrҼ \+Oϻw*D$$)uboO yA6$JM:>$_'+h⍉CW#W/6Q"6M83e4kV'R(`"BTcPjdFBW ʕIW"Z•2 qfEjO;D$zTh 1!^O Sd.ˌRR;XT><;C>¡ ~8 k; Zџ $L DD @TPQT 4jj2 1sxAUgd|w}wiأ:RxȞ@T.`3F_ai5 A6l)`=ha`ӵ6_ԭQ )ᑳ ]Ͽ"T|܅}ٕYiF8Ac2%KzwO)_szT?I/K xyg)9BQɓE/|悾82l`H^JQ)&0WCT\FŢV3C׮''V弸JХH)jBmLTsN_A\ɖKIp/e\yu&A@cXfR=O7尭DՑx))cޭgJ;,)nZ4-/nsA9s6E`㜒ٹ}j3|o|I[o$(m7j\ `|O5Xt2#HX=৻S>)[A#\}`2<*]ֲ$n *~n|=\M<#< 1,,:QђU/wM _\rT4ELϧ䦫ƨMT7Um7b֬^jV-J2M;˖ݡpckyc`nR&VTV bIb$A1Lz>?0xv-AVS߭Ч*V+z>#M;:}3; h_YYi>.*E.vB:j*c9ɮdK?[ h{7+m]2/;DoN^ΔzZX=oV#eLC0"LO'6e_,a2e%ҏ2S[ .:kғ}돊>n 1i 6`miNy$ᣝo@*`I~pꄈ(.?[Ux%)d?x{6CsAXu:E0a67XJz^/Get?pn=*Pd"㱀nj:ܔCH)T9Ȥr*ʨ\X\#7%,Q]J@xP'kE)8K2iMINiҘD-ڑSK(\;D,!h[_(V/7Y[lMdrOY_Rx/E_)1bkU.MCrׁKIxX-DaS뒱N95^=&c=)zRezʳަ<"9_\[!8}^9yfnBd Ճ vmYn_MD,{X@gC!G,cc E'b|zb x ca>RP2&phXUNQ>pk{.~6 PA2J4R4Vt_ Io"F2%On5,^ iH7Z?ī52}3-|5ʑȗG (+7ʳ+[Ex혱8Hl{Kqpi"?>0:a'q0A//>4!]JXw"%&Rf+_ w=%;h=T A?=_qn>JZqnFT> ;5*ŝ_Czt{X.-БmaPLN"DA!KSTcXn P=~g*6C?Pr)ƾ z0qA/cs(`J6Oь?ИMt$̚en^c\SE?SзzŚ~ݳ- ';fq EfCNWwr S.k-]9R9nF+ {&N8@ޮ$QZ{^*tWι9TJL9e1,$(D,^80 k-mO,@?FP('ܓ =FTn$Hg):ѨYt JyϹ_(HTl|h3+8ٲw7+|]T^R:ѷ͎i ;Y@̽u2:xV}4f]ˏĎ=t?;7,´3`OU yrGƁi5ɱF¦@J,`Ln @h sMσQW *6)ilyS2b9VtV :r%splB𚍪Xwfq}cwSw)ƴ$+ ( ʢ(z|n]lBrLR-XB-XlmƮ~GJĝB9tp錧Џޫqi|?bnt ,Q _c0ph5I61nNa]D*z:6Vo P;cF#-l!9@́s1pF9,u&25`rÌ ģu@U;;5trSMRkU3έ?WxӂMssB1Viכ޸w偪<6Fri hp(эpO@f߭-\aNb:`q^BCBKS Ņ{GlD 2ɴCNmϥhU2 xILO8~h&"AAVMyW#%OE54G.#Dq`a*N$~C!5Ö#9%#0> TCs h?QNGBX*0Ȝ VI%`iCe̸zS lU _,.Lцg7Gp|_~^yTss]wx촉XVp`KHzt'떏˜޺Q.88jpgш5W$T4cf RCLIUQS~jE%P´pg~(ݬOXGsݦãޥX 0 Js5 [LAžVkh'л sD𵽾eCv7/Yī-3gik9p&ch~&H=XB 8oaey wa\Y"Gpn81~ i1/O/S|y)7ø&.[4L` c*c<q-`܃N8W! g<'yG ?/i=zq[N\= 6=0M4k_K(n@/k2-7~#LV` :&Bغz.OseC3krh}ՠs ߡ]x.eiBfEil't`GcXI?7 xrvD`*ƖR@ K fRwzr +,>b=z? Gcu:!C`Z5V=C=[/ RhݼYUy_ >=lO@%JIc fՈoϽdw\9\jpG֬4Ҍ\Q .ݠq@`J*7l eBIY}@1݁$BC8# [ـۻRz`i΂_\BDA1$Pm!?7LD&i8tP.X G13tH;x@{Ps@UwBŽBٽ"iW3Oԙ'Js$m9lykQV&j2E Vq5hYܰ^gN0OJ"zAemF\MQ Hd}+)ܴg7SӐjBP7dh3uMuu hzFprbMTPlm1BU%*Β߭ZP5.{~uH5Y^Vq|itF)U!@Iu %((Ýz]gJPܲ(m+?hx^QsۆG0`+{'I;h7PD3yC7=4ȩ&6O0 da6:xs(rP5 CǻDwak!)Di8{ct2€*u`W* H5^)tt,HXZ\<b!G<8(PpʎΎ^TkWo]h]d #Q=d7IEzbp-dIГY UY/U6q!UԼDh+48ilن9nfct>?ʦhɐ4W!jHBJz,<+OR 5q,Raa!e-!]͛uM!{p-[c)yn"$Mb}r\{b7`a#U׾pDKx{oq.eԙD8#NO١(C8v96;3nqqӡlH`sqE2e5B1W㋰x, DA݈%4` mY 9d?*+2ͷY*ڦbc1޶nJp3+-j+/fr!/L^7dL[ޮ{ϓ+o#?ݞљ<т͇ ?>POl?(wIчS,*3d'u cx/-4 ~&`(6Zq:1C\k̺64709P C[;`|;us&nl PɅWwڗ u$SD.2ƫr.|BIC4cVy}P<ŰcZm4 I2p@Nܻ9cA} PEu yCĪ#oۏҟ5Wcvpӑϋ >?NᶒmŅ v~];x}/=P݇͡:|xϑ=v*evVϝ8O#$ ,\7tjHgqts;˼_^⺰m_׷o~^opB;ʁW-[xtr&Q96tnm累Z$p!r܎9wXH3 <0#M}7(s@P*F{4`V8XBU *DZܹ?f8^WEv}KMЙU7`f5 8_ p?|k1#j|&_O72A-DFy5@}{:Tw:9܎@N{m Zù-pAK$9B5v])z&CRU[wT r3S;GōZK6pR`%*\8cK @k?:POGSVd7QDᱍ s(Dڇ8Her CgXK=^5dN<`51> >τߔ& m=1?p ;M-ЁƦc}swG8f> CS=s`D 3!n 47ÁC#o/h mDak_,h%qm䴅9贅rZåur¦lz))gS KuB'(`[U1,BDcxDY&c5 Sp?$=ωb{zKW_[Ax r)~Mc} ,Lk{>3toh4BEv6IUǀEzDtPmQfYy%{ۆݭ#}ۇu}| C a[hNAqu_a}wQƾ6-k=,j e9L^k#`+bX85Su/݁13ʺ琊'O@US 2YM* U8b kXw';91r;T:8Kqy>äRH;vK0$G?p "Y..EfCN !嵆` +(i5UlīPĪ-;]GV[͈^.0w,Q`E*|7Z3~_2!u{DXapa|.puO| (ȣ^1VF*v!L`Oc7InRkѡP.xn y[Ñ$y7 w*?Q^uP}Bw#WWW/gPZi xBt>}jv2*j-&`qO ,Gu:P@.KZ73~':%$^4|>n?t{xvg"e7E=>=B2Z\ ;V~ԮΓ6cc`wD`Qc=Kͮʋho u@h_ {FBݾQ<['UtWV4l96JWpi@y}Oi}@^{4E5< Xߏw0 *<7\j`Xx@1MLlVnuўAtEXtcommentCREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 90 wu^%tEXtdate:create2013-08-14T10:50:35-04:00py%tEXtdate:modify2013-08-14T10:50:35-04:00HtEXtjpeg:colorspace2,uU tEXtjpeg:sampling-factor2x2,1x1,1x1IIENDB`jekyll-sitemap-1.4.0/spec/fixtures/_my_collection/0000755000004100000410000000000013566114352022306 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/fixtures/_my_collection/custom_permalink.md0000644000004100000410000000006313566114352026203 0ustar www-datawww-data--- permalink: /permalink/ --- # Custom permalink jekyll-sitemap-1.4.0/spec/fixtures/_my_collection/custom_permalink_2.md0000644000004100000410000000010313566114352026417 0ustar www-datawww-data--- permalink: /permalink/unique_name.html --- # Unique html name jekyll-sitemap-1.4.0/spec/fixtures/_my_collection/test.html0000644000004100000410000000003613566114352024152 0ustar www-datawww-data--- --- This is just a test. jekyll-sitemap-1.4.0/spec/fixtures/_my_collection/this-has-non-standard-chars.md0000644000004100000410000000014213566114352030031 0ustar www-datawww-data--- permalink: this url has an ümlaut --- # URL contains characters that need to be URI encoded jekyll-sitemap-1.4.0/spec/fixtures/some-subfolder/0000755000004100000410000000000013566114352022235 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/fixtures/some-subfolder/test_index.html0000644000004100000410000000012113566114352025263 0ustar www-datawww-data--- --- The permalink of this page does not end with a '/', but with a filename jekyll-sitemap-1.4.0/spec/fixtures/some-subfolder/htm.htm0000644000004100000410000000010713566114352023535 0ustar www-datawww-dataThis file has an .htm extension, and should be included in the sitemap jekyll-sitemap-1.4.0/spec/fixtures/some-subfolder/this-is-a-subfile.html0000644000004100000410000000000013566114352026336 0ustar www-datawww-datajekyll-sitemap-1.4.0/spec/fixtures/some-subfolder/index.html0000644000004100000410000000010513566114352024226 0ustar www-datawww-datastatic subfolder index.html file that should be indexed as permalink jekyll-sitemap-1.4.0/spec/fixtures/some-subfolder/exclude-this-page.html0000644000004100000410000000005213566114352026430 0ustar www-datawww-data--- sitemap: false --- Exclude this page jekyll-sitemap-1.4.0/spec/fixtures/some-subfolder/xhtml.xhtml0000644000004100000410000000011113566114352024440 0ustar www-datawww-dataThis file has an .xhtml extension, and should be included in the sitemap jekyll-sitemap-1.4.0/spec/fixtures/some-subfolder/this-is-a-subpage.html0000644000004100000410000000003413566114352026342 0ustar www-datawww-data--- --- This is a subpage! jekyll-sitemap-1.4.0/spec/fixtures/_config.yml0000644000004100000410000000044113566114352021435 0ustar www-datawww-datatimezone: UTC defaults: - scope: path: "" type: page values: layout: some_default - scope: path: "static_files/excluded.pdf" values: sitemap: false - scope: path: "static_files/html_file.html" values: sitemap: false jekyll-sitemap-1.4.0/spec/fixtures/static_files/0000755000004100000410000000000013566114352021760 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/fixtures/static_files/404.html0000644000004100000410000000002613566114352023153 0ustar www-datawww-data404. That's an error. jekyll-sitemap-1.4.0/spec/fixtures/static_files/excluded.pdf0000644000004100000410000000000013566114352024236 0ustar www-datawww-datajekyll-sitemap-1.4.0/spec/fixtures/static_files/test.pdf0000644000004100000410000000000013566114352023420 0ustar www-datawww-datajekyll-sitemap-1.4.0/spec/fixtures/static_files/html_file.html0000644000004100000410000000000013566114352024577 0ustar www-datawww-datajekyll-sitemap-1.4.0/spec/fixtures/feeds/0000755000004100000410000000000013566114352020375 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/fixtures/feeds/atom.xml0000644000004100000410000000014313566114352022055 0ustar www-datawww-data--- --- jekyll-sitemap-1.4.0/spec/fixtures/404.md0000644000004100000410000000003713566114352020140 0ustar www-datawww-data--- --- 404. That's an error. jekyll-sitemap-1.4.0/spec/fixtures/_other_things/0000755000004100000410000000000013566114352022143 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/fixtures/_other_things/test2.html0000644000004100000410000000006513566114352024073 0ustar www-datawww-data--- --- This file shouldn't show up in the sitemap. jekyll-sitemap-1.4.0/spec/fixtures/jekyll-last-modified-at/0000755000004100000410000000000013566114352023722 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/fixtures/jekyll-last-modified-at/page.html0000644000004100000410000000005613566114352025525 0ustar www-datawww-data--- --- This is a page with a modified time. jekyll-sitemap-1.4.0/spec/fixtures/_posts/0000755000004100000410000000000013566114352020616 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/fixtures/_posts/2016-04-03-错误.html0000644000004100000410000000007113566114352024744 0ustar www-datawww-data--- permalink: "/2016/04/03/%E9%94%99%E8%AF%AF.html" --- jekyll-sitemap-1.4.0/spec/fixtures/_posts/2013-12-12-dec-the-second.md0000644000004100000410000000005113566114352024741 0ustar www-datawww-data--- --- December the twelfth, actually. jekyll-sitemap-1.4.0/spec/fixtures/_posts/2014-03-04-march-the-fourth.md0000644000004100000410000000003313566114352025336 0ustar www-datawww-data--- --- March the fourth! jekyll-sitemap-1.4.0/spec/fixtures/_posts/2015-01-18-jekyll-last-modified-at.md0000644000004100000410000000011113566114352026575 0ustar www-datawww-data--- --- Please don't modify this file. It's modified time is important. jekyll-sitemap-1.4.0/spec/fixtures/_posts/2016-04-01-错误.html0000644000004100000410000000001013566114352024733 0ustar www-datawww-data--- --- jekyll-sitemap-1.4.0/spec/fixtures/_posts/2016-04-02-错误.html0000644000004100000410000000005513566114352024745 0ustar www-datawww-data--- permalink: "/2016/04/02/错误.html" --- jekyll-sitemap-1.4.0/spec/fixtures/_posts/2014-05-11-exclude-this-post.md0000644000004100000410000000010413566114352025541 0ustar www-datawww-data--- sitemap: false --- This post should not appear in the sitemap. jekyll-sitemap-1.4.0/spec/fixtures/_posts/2014-03-02-march-the-second.md0000644000004100000410000000003313566114352025300 0ustar www-datawww-data--- --- March the second! jekyll-sitemap-1.4.0/spec/robot-fixtures/0000755000004100000410000000000013566114352020432 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/robot-fixtures/page-at-root/0000755000004100000410000000000013566114352022731 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/robot-fixtures/page-at-root/robots.txt0000644000004100000410000000003713566114352025002 0ustar www-datawww-data--- --- Allow: {{ site.url }} jekyll-sitemap-1.4.0/spec/robot-fixtures/static-at-source-root/0000755000004100000410000000000013566114352024602 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/robot-fixtures/static-at-source-root/robots.txt0000644000004100000410000000001113566114352026643 0ustar www-datawww-dataAllow: / jekyll-sitemap-1.4.0/spec/robot-fixtures/static-in-subdir/0000755000004100000410000000000013566114352023613 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/robot-fixtures/static-in-subdir/assets/0000755000004100000410000000000013566114352025115 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/robot-fixtures/static-in-subdir/assets/robots.txt0000644000004100000410000000001113566114352027156 0ustar www-datawww-dataAllow: / jekyll-sitemap-1.4.0/spec/robot-fixtures/permalinked-page-in-subdir/0000755000004100000410000000000013566114352025531 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/robot-fixtures/permalinked-page-in-subdir/assets/0000755000004100000410000000000013566114352027033 5ustar www-datawww-datajekyll-sitemap-1.4.0/spec/robot-fixtures/permalinked-page-in-subdir/assets/robots.txt0000644000004100000410000000007013566114352031101 0ustar www-datawww-data--- permalink: '/robots.txt' --- Allow: {{ site.url }} jekyll-sitemap-1.4.0/spec/test_jekyll-last-modified-at.rb0000644000004100000410000000257413566114352023445 0ustar www-datawww-data# frozen_string_literal: true require "spec_helper" describe(Jekyll::JekyllSitemap) do let(:overrides) do { "source" => source_dir, "destination" => dest_dir, "url" => "http://example.org", "collections" => { "my_collection" => { "output" => true }, "other_things" => { "output" => false }, }, } end let(:config) do Jekyll.configuration(overrides) end let(:site) { Jekyll::Site.new(config) } let(:contents) { File.read(dest_dir("sitemap.xml")) } before(:each) do # simulate `last_modified_at` injection by `jekyll-last-modified-at` plugin Jekyll::Hooks.register([:pages, :documents], :post_init) do |page| page.data["last_modified_at"] = Time.parse("2015-01-18T00:00:00+00:00") end site.process end context "with jekyll-last-modified-at" do it "correctly adds the modified time to the posts" do expect(contents).to match( %r! http://example.org/2015/01/18/jekyll-last-modified-at.html\s+ 2015-01-18T00:00:00\+00:00 !x ) end it "correctly adds the modified time to the pages" do expect(contents).to match( %r! http://example.org/jekyll-last-modified-at/page.html\s+ 2015-01-18T00:00:00\+00:00 !x ) end end end jekyll-sitemap-1.4.0/spec/spec_helper.rb0000644000004100000410000000206013566114352020252 0ustar www-datawww-data# frozen_string_literal: true require "jekyll" require "fileutils" require File.expand_path("../lib/jekyll-sitemap", __dir__) Jekyll.logger.log_level = :error RSpec.configure do |config| config.run_all_when_everything_filtered = true config.filter_run :focus config.order = "random" SOURCE_DIR = File.expand_path("fixtures", __dir__) DEST_DIR = File.expand_path("dest", __dir__) ROBOT_FIXTURES = File.expand_path("robot-fixtures", __dir__) ROBOT_FIXTURE_ITEMS = %w(_posts _layouts _config.yml index.html).freeze def source_dir(*files) File.join(SOURCE_DIR, *files) end def dest_dir(*files) File.join(DEST_DIR, *files) end def robot_fixtures(*subdirs) File.join(ROBOT_FIXTURES, *subdirs) end def setup_fixture(directory) ROBOT_FIXTURE_ITEMS.each { |item| FileUtils.cp_r(source_dir(item), robot_fixtures(directory)) } end def cleanup_fixture(directory, dest_dirname = "_site") (ROBOT_FIXTURE_ITEMS + [dest_dirname]).each do |item| FileUtils.remove_entry(robot_fixtures(directory, item)) end end end jekyll-sitemap-1.4.0/spec/jekyll-sitemap_spec.rb0000644000004100000410000002225313566114352021733 0ustar www-datawww-data# frozen_string_literal: true require "spec_helper" describe(Jekyll::JekyllSitemap) do let(:overrides) do { "source" => source_dir, "destination" => dest_dir, "url" => "http://example.org", "collections" => { "my_collection" => { "output" => true }, "other_things" => { "output" => false }, }, } end let(:config) do Jekyll.configuration(overrides) end let(:site) { Jekyll::Site.new(config) } let(:contents) { File.read(dest_dir("sitemap.xml")) } before(:each) do site.process end it "has no layout" do expect(contents).not_to match(%r!\ATHIS IS MY LAYOUT!) end it "creates a sitemap.xml file" do expect(File.exist?(dest_dir("sitemap.xml"))).to be_truthy end it "doesn't have multiple new lines or trailing whitespace" do expect(contents).to_not match %r!\s+\n! expect(contents).to_not match %r!\n{2,}! end it "puts all the pages in the sitemap.xml file" do expect(contents).to match %r!http://example\.org/! expect(contents).to match %r!http://example\.org/some-subfolder/this-is-a-subpage\.html! end it "only strips 'index.html' from end of permalink" do expect(contents).to match %r!http://example\.org/some-subfolder/test_index\.html! end it "puts all the posts in the sitemap.xml file" do expect(contents).to match %r!http://example\.org/2014/03/04/march-the-fourth\.html! expect(contents).to match %r!http://example\.org/2014/03/02/march-the-second\.html! expect(contents).to match %r!http://example\.org/2013/12/12/dec-the-second\.html! end describe "collections" do it "puts all the `output:true` into sitemap.xml" do expect(contents).to match %r!http://example\.org/my_collection/test\.html! end it "doesn't put all the `output:false` into sitemap.xml" do expect(contents).to_not match %r!http://example\.org/other_things/test2\.html! end it "remove 'index.html' for directory custom permalinks" do expect(contents).to match %r!http://example\.org/permalink/! end it "doesn't remove filename for non-directory custom permalinks" do expect(contents).to match %r!http://example\.org/permalink/unique_name\.html! end it "performs URI encoding of site paths" do expect(contents).to match %r!http://example\.org/this%20url%20has%20an%20%C3%BCmlaut! end end it "generates the correct date for each of the posts" do expect(contents).to match %r!2014-03-04T00:00:00(-|\+)\d+:\d+! expect(contents).to match %r!2014-03-02T00:00:00(-|\+)\d+:\d+! expect(contents).to match %r!2013-12-12T00:00:00(-|\+)\d+:\d+! end it "puts all the static HTML files in the sitemap.xml file" do expect(contents).to match %r!http://example\.org/some-subfolder/this-is-a-subfile\.html! end it "does not include assets or any static files that aren't .html" do expect(contents).not_to match %r!http://example\.org/images/hubot\.png! expect(contents).not_to match %r!http://example\.org/feeds/atom\.xml! end it "converts static index.html files to permalink version" do expect(contents).to match %r!http://example\.org/some-subfolder/! end it "does include assets or any static files with .xhtml and .htm extensions" do expect(contents).to match %r!/some-subfolder/xhtml\.xhtml! expect(contents).to match %r!/some-subfolder/htm\.htm! end it "does include assets or any static files with .pdf extension" do expect(contents).to match %r!/static_files/test.pdf! end it "does not include any static files named 404.html" do expect(contents).not_to match %r!/static_files/404.html! end if Gem::Version.new(Jekyll::VERSION) >= Gem::Version.new("3.4.2") it "does not include any static files that have set 'sitemap: false'" do expect(contents).not_to match %r!/static_files/excluded\.pdf! end it "does not include any static files that have set 'sitemap: false'" do expect(contents).not_to match %r!/static_files/html_file\.html! end end it "does not include posts that have set 'sitemap: false'" do expect(contents).not_to match %r!/exclude-this-post\.html! end it "does not include pages that have set 'sitemap: false'" do expect(contents).not_to match %r!/exclude-this-page\.html! end it "does not include the 404 page" do expect(contents).not_to match %r!/404\.html! end it "correctly formats timestamps of static files" do expect(contents).to match %r!/this-is-a-subfile\.html\s+\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(-|\+)\d{2}:\d{2}! end it "includes the correct number of items" do # static_files/excluded.pdf is excluded on Jekyll 3.4.2 and above if Gem::Version.new(Jekyll::VERSION) >= Gem::Version.new("3.4.2") expect(contents.scan(%r!(?=)!).count).to eql 20 else expect(contents.scan(%r!(?=)!).count).to eql 21 end end context "with a baseurl" do let(:config) do Jekyll.configuration(Jekyll::Utils.deep_merge_hashes(overrides, "baseurl" => "/bass")) end it "correctly adds the baseurl to the static files" do expect(contents).to match %r!http://example\.org/bass/some-subfolder/this-is-a-subfile\.html! end it "correctly adds the baseurl to the collections" do expect(contents).to match %r!http://example\.org/bass/my_collection/test\.html! end it "correctly adds the baseurl to the pages" do expect(contents).to match %r!http://example\.org/bass/! expect(contents).to match %r!http://example\.org/bass/some-subfolder/this-is-a-subpage\.html! end it "correctly adds the baseurl to the posts" do expect(contents).to match %r!http://example\.org/bass/2014/03/04/march-the-fourth\.html! expect(contents).to match %r!http://example\.org/bass/2014/03/02/march-the-second\.html! expect(contents).to match %r!http://example\.org/bass/2013/12/12/dec-the-second\.html! end it "adds baseurl to robots.txt" do content = File.read(dest_dir("robots.txt")) expect(content).to match("Sitemap: http://example.org/bass/sitemap.xml") end end context "with urls that needs URI encoding" do let(:config) do Jekyll.configuration(Jekyll::Utils.deep_merge_hashes(overrides, "url" => "http://ümlaut.example.org")) end it "performs URI encoding of site url" do expect(contents).to match %r!http://xn--mlaut-jva.example.org/! expect(contents).to match %r!http://xn--mlaut-jva.example.org/some-subfolder/this-is-a-subpage.html! expect(contents).to match %r!http://xn--mlaut-jva.example.org/2014/03/04/march-the-fourth.html! expect(contents).to match %r!http://xn--mlaut-jva.example.org/2016/04/01/%E9%94%99%E8%AF%AF.html! expect(contents).to match %r!http://xn--mlaut-jva.example.org/2016/04/02/%E9%94%99%E8%AF%AF.html! expect(contents).to match %r!http://xn--mlaut-jva.example.org/2016/04/03/%E9%94%99%E8%AF%AF.html! end it "does not double-escape urls" do expect(contents).to_not match %r!%25! end context "readme" do let(:contents) { File.read(dest_dir("robots.txt")) } it "has no layout" do expect(contents).not_to match(%r!\ATHIS IS MY LAYOUT!) end it "creates a robots.txt file" do expect(File.exist?(dest_dir("robots.txt"))).to be_truthy end it "renders liquid" do expect(contents).to match("Sitemap: http://xn--mlaut-jva.example.org/sitemap.xml") end end end context "with user-defined robots.txt" do let(:fixture) { "/" } let(:fixture_source) { robot_fixtures(fixture) } let(:fixture_dest) { robot_fixtures(fixture, "_site") } let(:robot_contents) { File.read(robot_fixtures(fixture, "_site", "robots.txt")).strip } let(:overrides) do { "source" => fixture_source, "destination" => fixture_dest, "url" => "http://example.org", } end before(:each) { setup_fixture(fixture) } after(:each) { cleanup_fixture(fixture) } context "as a static-file at source-root" do let(:fixture) { "static-at-source-root" } it "doesn't override the robots file" do expect(robot_contents).to eql("Allow: /") end end context "as a static-file in a subdir" do let(:fixture) { "static-in-subdir" } it "generates a valid robot.txt" do expect(robot_contents).to eql("Sitemap: http://example.org/sitemap.xml") end end context "as a page at root" do let(:fixture) { "page-at-root" } it "doesn't override the robots file" do expect(robot_contents).to eql("Allow: http://example.org") end end context "as a page with permalink in a subdir" do let(:fixture) { "permalinked-page-in-subdir" } it "doesn't override the robots file" do expect(robot_contents).to eql("Allow: http://example.org") end end end end jekyll-sitemap-1.4.0/.rubocop.yml0000644000004100000410000000021613566114352016755 0ustar www-datawww-datainherit_from: .rubocop_todo.yml require: rubocop-jekyll inherit_gem: rubocop-jekyll: .rubocop.yml AllCops: Exclude: - vendor/**/* jekyll-sitemap-1.4.0/.gitignore0000644000004100000410000000011713566114352016473 0ustar www-datawww-data.bundle *.gem Gemfile.lock spec/dest spec/fixtures/.jekyll-cache vendor/bundle jekyll-sitemap-1.4.0/script/0000755000004100000410000000000013566114352016010 5ustar www-datawww-datajekyll-sitemap-1.4.0/script/test0000755000004100000410000000014313566114352016713 0ustar www-datawww-data#!/bin/bash set -ex bundle exec rspec "$@" bundle exec rspec spec/test_jekyll-last-modified-at.rb jekyll-sitemap-1.4.0/script/release0000755000004100000410000000012513566114352017354 0ustar www-datawww-data#!/bin/sh # Tag and push a release. set -e script/cibuild bundle exec rake release jekyll-sitemap-1.4.0/script/console0000755000004100000410000000127113566114352017401 0ustar www-datawww-data#! /usr/bin/env ruby # frozen_string_literal: true def relative_to_root(path) File.expand_path(path, File.dirname(__dir__)) end require "jekyll" require relative_to_root("lib/jekyll-sitemap.rb") require "pry-debugger" SOURCE_DIR = relative_to_root("spec/fixtures") DEST_DIR = relative_to_root("spec/dest") def source_dir(*files) File.join(SOURCE_DIR, *files) end def dest_dir(*files) File.join(DEST_DIR, *files) end def config(overrides = {}) Jekyll.configuration( "source" => source_dir, "destination" => dest_dir, "url" => "http://example.org" ).merge(overrides) end def site(configuration = config) Jekyll::Site.new(configuration) end binding.pry jekyll-sitemap-1.4.0/script/cibuild0000755000004100000410000000006313566114352017350 0ustar www-datawww-data#!/bin/sh set -e time script/fmt time script/test jekyll-sitemap-1.4.0/script/bootstrap0000755000004100000410000000004213566114352017747 0ustar www-datawww-data#!/bin/sh set -ex bundle install jekyll-sitemap-1.4.0/script/fmt0000755000004100000410000000034013566114352016521 0ustar www-datawww-data#!/bin/bash set -e echo "Rubocop $(bundle exec rubocop --version)" bundle exec rubocop -D -E $@ success=$? if ((success != 0)); then echo -e "\nTry running \`script/fmt -a\` to automatically fix errors" fi exit $success jekyll-sitemap-1.4.0/.rubocop_todo.yml0000644000004100000410000000153713566114352020011 0ustar www-datawww-data# This configuration was generated by # `rubocop --auto-gen-config` # on 2018-12-06 11:55:46 +0100 using RuboCop version 0.61.1. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of RuboCop, may require this file to be generated again. # Offense count: 1 Lint/Debugger: Exclude: - 'script/console' # Offense count: 3 # Configuration parameters: CountComments, Max, ExcludedMethods. # ExcludedMethods: refine Metrics/BlockLength: Exclude: - 'spec/jekyll-sitemap_spec.rb' - 'spec/test_jekyll-last-modified-at.rb' # Offense count: 17 # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns. # URISchemes: http, https Metrics/LineLength: Max: 154 jekyll-sitemap-1.4.0/Rakefile0000644000004100000410000000022413566114352016147 0ustar www-datawww-data# frozen_string_literal: true require "bundler/gem_tasks" require "rspec/core/rake_task" RSpec::Core::RakeTask.new(:spec) task :default => :spec jekyll-sitemap-1.4.0/lib/0000755000004100000410000000000013566114352015252 5ustar www-datawww-datajekyll-sitemap-1.4.0/lib/jekyll/0000755000004100000410000000000013566114352016544 5ustar www-datawww-datajekyll-sitemap-1.4.0/lib/jekyll/page_without_a_file.rb0000644000004100000410000000037213566114352023071 0ustar www-datawww-data# frozen_string_literal: true module Jekyll class PageWithoutAFile < Page # rubocop:disable Naming/MemoizedInstanceVariableName def read_yaml(*) @data ||= {} end # rubocop:enable Naming/MemoizedInstanceVariableName end end jekyll-sitemap-1.4.0/lib/jekyll/jekyll-sitemap.rb0000644000004100000410000000370613566114352022031 0ustar www-datawww-data# frozen_string_literal: true require "fileutils" module Jekyll class JekyllSitemap < Jekyll::Generator safe true priority :lowest # Main plugin action, called by Jekyll-core def generate(site) @site = site @site.pages << sitemap unless file_exists?("sitemap.xml") @site.pages << robots unless file_exists?("robots.txt") end private INCLUDED_EXTENSIONS = %w( .htm .html .xhtml .pdf ).freeze # Matches all whitespace that follows # 1. A '>' followed by a newline or # 2. A '}' which closes a Liquid tag # We will strip all of this whitespace to minify the template MINIFY_REGEX = %r!(?<=>\n|})\s+!.freeze # Array of all non-jekyll site files with an HTML extension def static_files @site.static_files.select { |file| INCLUDED_EXTENSIONS.include? file.extname } end # Path to sitemap.xml template file def source_path(file = "sitemap.xml") File.expand_path "../#{file}", __dir__ end # Destination for sitemap.xml file within the site source directory def destination_path(file = "sitemap.xml") @site.in_dest_dir(file) end def sitemap site_map = PageWithoutAFile.new(@site, __dir__, "", "sitemap.xml") site_map.content = File.read(source_path).gsub(MINIFY_REGEX, "") site_map.data["layout"] = nil site_map.data["static_files"] = static_files.map(&:to_liquid) site_map.data["xsl"] = file_exists?("sitemap.xsl") site_map end def robots robots = PageWithoutAFile.new(@site, __dir__, "", "robots.txt") robots.content = File.read(source_path("robots.txt")) robots.data["layout"] = nil robots end # Checks if a file already exists in the site source def file_exists?(file_path) pages_and_files.any? { |p| p.url == "/#{file_path}" } end def pages_and_files @pages_and_files ||= @site.pages + @site.static_files end end end jekyll-sitemap-1.4.0/lib/jekyll-sitemap.rb0000644000004100000410000000014413566114352020530 0ustar www-datawww-data# frozen_string_literal: true require "jekyll/page_without_a_file" require "jekyll/jekyll-sitemap" jekyll-sitemap-1.4.0/lib/sitemap.xml0000644000004100000410000000327113566114352017441 0ustar www-datawww-data {% if page.xsl %} {% endif %} {% assign collections = site.collections | where_exp:'collection','collection.output != false' %} {% for collection in collections %} {% assign docs = collection.docs | where_exp:'doc','doc.sitemap != false' %} {% for doc in docs %} {{ doc.url | replace:'/index.html','/' | absolute_url | xml_escape }} {% if doc.last_modified_at or doc.date %} {{ doc.last_modified_at | default: doc.date | date_to_xmlschema }} {% endif %} {% endfor %} {% endfor %} {% assign pages = site.html_pages | where_exp:'doc','doc.sitemap != false' | where_exp:'doc','doc.url != "/404.html"' %} {% for page in pages %} {{ page.url | replace:'/index.html','/' | absolute_url | xml_escape }} {% if page.last_modified_at %} {{ page.last_modified_at | date_to_xmlschema }} {% endif %} {% endfor %} {% assign static_files = page.static_files | where_exp:'page','page.sitemap != false' | where_exp:'page','page.name != "404.html"' %} {% for file in static_files %} {{ file.path | replace:'/index.html','/' | absolute_url | xml_escape }} {{ file.modified_time | date_to_xmlschema }} {% endfor %} jekyll-sitemap-1.4.0/lib/robots.txt0000644000004100000410000000005413566114352017322 0ustar www-datawww-dataSitemap: {{ "sitemap.xml" | absolute_url }} jekyll-sitemap-1.4.0/lib/jekyll-sitemap/0000755000004100000410000000000013566114352020204 5ustar www-datawww-datajekyll-sitemap-1.4.0/lib/jekyll-sitemap/version.rb0000644000004100000410000000013613566114352022216 0ustar www-datawww-data# frozen_string_literal: true module Jekyll module Sitemap VERSION = "1.4.0" end end jekyll-sitemap-1.4.0/History.markdown0000644000004100000410000001156213566114352017716 0ustar www-datawww-data## 1.4.0 / 2019-11-21 ### Minor Enhancements * Avoid overwriting an existing robots.txt (#246) ### Bug Fixes * Simulate `last_modified_at` injection by plugin (#256) ## 1.3.1 / 2019-03-25 ### Bug Fixes * Update plugin metadata and dev environment (#244) ### Development Fixes * Lock requirement for `jekyll-last-modified-at` to `>= 1.0` ## 1.3.0 / 2019-03-21 * Allow Jekyll v4 (still alpha) ### Documentation * Add PDF file exclusion documentation (#213) * Correct capitalization of GitHub (#207) ### Development Fixes * Use Ruby 2.3 and Rubocop 0.55 (#214) * chore(deps): rubocop-jekyll-0.3 (#227) ## 1.2.0 / 2018-01-25 ### Minor Enhancements * Remove excluded static files from the sitemap (#166) * filter/replace static index.html paths to permalink (#170) ### Development Fixes * Condition the static file tests on Jekyll 3.4.2 and above (#167) * Update versions for Travis (#174) * Fix Travis Deploy (#173) * Test against Jekyll 3.4.x *and* latest 3.x (#177) * Define path with __dir__ (#186) * Style: Rubocop auto-correct (#195) * Test against Ruby 2.5 (#201) ### Documentation * Add note about use with Github Pages gem (#179) * Fix a couple of typos (#184) * Use plugins instead of gems in README config (#185) * Docs: set site.url in config (#172) ## 1.1.1 / 2017-04-11 * Cut a new version to alleviate sha256 checksum issue on RubyGems.org (#165) ## 1.1.0 / 2017-04-10 ### Minor Enhancements * escape& (#162) * feat: remove 404 pages from the sitemap. closes #113 (#164) ## 1.0.0 / 2017-01-06 * No new changes ## 0.13.0 / 2017-01-05 ### Minor Enhancements * Add sitemap.xsl if exists (#143) * Add robots.txt when none exists (#146) * Refactor and add sitemap to `site.pages` (#137) * DRY in sitemap.xml (#136) ### Documentation * Fix #134: Rename "Issues" to "Known Issues" (#135) * Fix #104: Add explanation in README for tag (#139) * Update copyright attribution (#149) ### Development Fixes * Travis should do a deep clone (#147) ## 0.12.0 / 2016-10-06 ### Minor Enhancements * Don't set @site.config["time"] on sitemap generation (#131) * Use filters to clean up Liquid template (#128) ### Development Fixes * Appease Rubocop (#132) * Drop Addressable dependency (#133) ## 0.11.0 / 2016-07-08 * Add Rubocop (#100) * Allow Travis to cache dependencies (#108) * Properly Escape URLs (#107) * Include PDF files in sitemap (#109) ## 0.10.0 / 2016-01-05 * URI encode sitemap URLs (#85) * Do not include 'posts' collection twice (#92) * Fix GitHub Pages tests to test just the Jekyll version (#87) * Allow HTML files to end with `.xhtml` or `.htm` (#93) * Simplify whitespace regex for stripping whitespace (#96) ## 0.9.0 / 2015-09-21 * Test against Jekyll 2, 3, and the GitHub Pages version. (#83) ## 0.8.1 / 2015-03-11 * Do not assume all pages have changed (#35) * Remove duplicated range from regex (#73) ## 0.8.0 / 2015-02-03 * Call each page `page` in pages loop in `sitemap.xml` for clarity (#64) * Remove `changefreq` (#34) * Remove `priority` (#33) * Don't strip 'index.html' when there is more to filename ## Minor Enhancements (#68) ## 0.7.0 / 2014-12-07 * Make `site.baseurl` support more robust (#59) * Add `site.baseurl` to base site URL construction ## Development Fixes (#50) * Remove unnecessary spaces and escaping in README ## Bug Fixes (#58) ## 0.6.3 / 2014-11-11 * Be backwards-compatible when `Site#in_source_dir` and `Site#in_dest_dir` don't exist (#57) ## 0.6.2 / 2014-11-08 ### Bug Fixes * Don't attempt to read the sitemap upon page creation. (#52) * Use new secure methods to build source & dest paths. (#53) ## 0.6.1 / 2014-10-17 ### Minor Enhancements * Strip excess whitespace (#40) ### Bug Fixes * Add UTC offset to `` to handle non-UTC timezones (#49) ### Development Fixes * Adding information about exclusion flag (#45) ## 0.6.0 / 2014-09-05 ### Minor Enhancements * Include custom collections in the sitemap. (#30) * Use `post.last_modified_at` for post `` if available (#37) ## 0.5.1 / 2014-07-31 ### Bug Fixes * Explicitly set sitemap layout to `nil` to avoid warning (#32) ## 0.5.0 / 2014-06-02 ### Minor Enhancements * Allow users to exclude a page/post from the sitemap (#11) ## 0.4.1 / 2014-05-10 ### Bug Fixes * Force sitemap layout to be `nil` (#16) * Correct seconds in timestamp for static files # Development Fixes (#24) * Upgrade to Rspec 3.0 and use `be_truthy` (#24) ## 0.4.0 / 2014-05-06 ### Major Enhancements * Support Jekyll 2.0 (#12) ## 0.3.0 / 2014-05-05 ### Minor Enhancements * Generate sitemap using html_pages (#10) ### Bug Fixes * Remove stray sitemap.xsl from template (#8) ### Development Fixes * Added travis (#6) * Better timezone support (#7) ## 0.2.0 / 2014-03-24 * Loosen Jekyll requirement (#4) ## 0.1.0 / 2014-03-15 * Birthday! jekyll-sitemap-1.4.0/Gemfile0000644000004100000410000000020313566114352015772 0ustar www-datawww-data# frozen_string_literal: true source "https://rubygems.org" gemspec gem "jekyll", ENV["JEKYLL_VERSION"] if ENV["JEKYLL_VERSION"] jekyll-sitemap-1.4.0/jekyll-sitemap.gemspec0000644000004100000410000000204113566114352021000 0ustar www-datawww-data# frozen_string_literal: true lib = File.expand_path("lib", __dir__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require "jekyll-sitemap/version" Gem::Specification.new do |spec| spec.name = "jekyll-sitemap" spec.summary = "Automatically generate a sitemap.xml for your Jekyll site." spec.version = Jekyll::Sitemap::VERSION spec.authors = ["GitHub, Inc."] spec.email = "support@github.com" spec.homepage = "https://github.com/jekyll/jekyll-sitemap" spec.licenses = ["MIT"] spec.files = `git ls-files -z`.split("\x0") spec.executables = spec.files.grep(%r!^bin/!) { |f| File.basename(f) } spec.test_files = spec.files.grep(%r!^(test|spec|features)/!) spec.require_paths = ["lib"] spec.required_ruby_version = ">= 2.3.0" spec.add_dependency "jekyll", ">= 3.7", "< 5.0" spec.add_development_dependency "bundler" spec.add_development_dependency "rake" spec.add_development_dependency "rspec", "~> 3.0" spec.add_development_dependency "rubocop-jekyll", "~> 0.4" end