diff --git a/_layouts/default.html b/_layouts/default.html index 391375496..90aace150 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -90,7 +90,9 @@

Created and maintained by

- + + + diff --git a/css/all.css b/css/all.css index 25834f3ab..72ee280db 100644 --- a/css/all.css +++ b/css/all.css @@ -1,2 +1,2 @@ -*{box-sizing:border-box}body{font-size:24px;line-height:32px;text-rendering:optimizeLegibility}h1,h2,h3,h4{font-family:georgia,serif}h1,.alpha{position:relative;font-size:48px;font-weight:normal;line-height:50px;text-align:center}h2,.beta{font-size:32px;font-weight:normal;line-height:36px}h3,.gamma{font-size:24px;font-weight:bold;line-height:30px}blockquote{border-left:3px solid #ccc;padding-left:20px;color:#777;font-style:italic;word-wrap:break-word}a{color:#4f5b93}a:hover{color:#8892bf}.back-to-top{text-align:center}.back-to-top a{background:#4f5b93;border-radius:3px;display:inline-block;height:40px;padding:0 20px;transition:all .1s ease;color:white;font-family:verdana,sans-serif;font-size:13px;line-height:40px;text-decoration:none;text-transform:uppercase}.back-to-top a:hover{background:#8892bf}img{max-width:100%}pre,code{color:#444;font-family:"Source Code Pro",Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:90%}a pre,a code{color:inherit}pre{background:#f7f7f7;border:1px solid #eee;border-radius:3px;display:block;overflow:auto;padding:20px;width:100%}@media (max-width:767px){body{font-size:18px;line-height:24px}h1,.alpha{font-size:36px;line-height:38px}h2,.beta{font-size:24px;line-height:28px}h3,.gamma{font-size:18px;line-height:23px}blockquote{margin-left:0}ul,ol{padding-left:1em}pre{padding:5px 10px}}@media (max-width:360px){body{font-size:16px;line-height:21px}h1,.alpha{font-size:28px;line-height:30px}h2,.beta{font-size:20px;line-height:23px}h3,.gamma{font-size:16px;line-height:20px}}.site-header{padding-top:40px;margin-bottom:40px;text-align:center}.site-header h1{margin:0;font-size:72px;line-height:60px}.site-header h1 em{display:block;font-size:34px;font-style:normal}.site-header h1 a{color:#333;text-decoration:none}.site-header h1 a:hover{color:#8892bf}.site-header .build-date{margin-bottom:10px;color:#999;font-family:verdana,sans-serif;font-size:11px;text-transform:uppercase}.site-header .fork-me{position:absolute;top:0;right:0;z-index:100;width:120px}@media (max-width:767px){.site-header .fork-me{width:100px}}.site-navigation,.site-content,.site-footer{margin:0 auto;max-width:840px;width:92%}.site-navigation{-webkit-columns:3;-moz-columns:3;columns:3;-webkit-column-gap:40px;-moz-column-gap:40px;column-gap:40px}.site-navigation ul{list-style:none;margin:0;padding:0}.site-navigation ul li{margin-bottom:20px;font-size:22px;line-height:23px}.site-navigation ul li a{display:block;color:#444;font-weight:700;text-decoration:none}.site-navigation ul li a:hover{color:#8892bf}.site-navigation ul li ul{padding-top:8px}.site-navigation ul li li{margin-bottom:6px;font-size:18px}.site-navigation ul li li a{border:none;color:#777;font-weight:normal}.site-navigation li{-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid}@media (max-width:820px){.site-navigation{-webkit-columns:2;-moz-columns:2;columns:2}}@media (max-width:560px){.site-navigation{-webkit-columns:1;-moz-columns:1;columns:1}}.site-content h1{padding-top:40px;position:relative}.site-content h1:after{border:1px solid #ddd;border-bottom:none;content:"";display:block;height:8px;position:absolute;left:0;top:0;width:100%}.site-content.chapters{counter-reset:chapter}.site-content.chapters h1{counter-increment:chapter;padding-top:60px}.site-content.chapters h1:before{display:inline-block;content:"Chapter " counter(chapter) ".";position:absolute;top:30px;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);color:#999;font-size:12px;letter-spacing:1px;line-height:20px;text-transform:uppercase;text-align:center}.site-content #welcome ul{-webkit-columns:3;-moz-columns:3;columns:3;-webkit-column-gap:30px;-moz-column-gap:30px;column-gap:30px;list-style-position:inside}.site-content .back-to-top{margin-bottom:60px}@media (max-width:870px){.site-content #welcome ul{-webkit-columns:2;-moz-columns:2;columns:2}}@media (max-width:600px){.site-content #welcome ul{-webkit-columns:1;-moz-columns:1;columns:1}}.site-footer{border-top:1px solid #ccc;margin:60px auto 0 auto;padding:40px 20px;font-family:verdana,sans-serif;font-size:16px;text-align:center}.site-footer h2{font-size:24px;font-weight:bold;line-height:30px;margin-bottom:10px}.site-footer ul{list-style:none;margin:0 0 20px 0;padding:0}.site-footer .license{color:#777;font-size:13px} -/*# sourceMappingURL=data:application/json;base64,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LGtCQUFTLEFBQVQsZUFBUyxBQUFULFNBQVMsQ0FBQyxDQUFDLHlCQUF5QiwwQkFBMEIsa0JBQVMsQUFBVCxlQUFTLEFBQVQsU0FBUyxDQUFDLENBQUMsYUFBYSwwQkFBMEIsd0JBQXdCLGtCQUFrQiwrQkFBK0IsZUFBZSxpQkFBaUIsQ0FBQyxnQkFBZ0IsZUFBZSxpQkFBaUIsaUJBQWlCLGtCQUFrQixDQUFDLGdCQUFnQixnQkFBZ0Isa0JBQWtCLFNBQVMsQ0FBQyxzQkFBc0IsV0FBVyxjQUFjLENBQUMiLCJmaWxlIjoiYWxsLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIip7Ym94LXNpemluZzpib3JkZXItYm94fWJvZHl7Zm9udC1zaXplOjI0cHg7bGluZS1oZWlnaHQ6MzJweDt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHl9aDEsaDIsaDMsaDR7Zm9udC1mYW1pbHk6Z2VvcmdpYSxzZXJpZn1oMSwuYWxwaGF7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjQ4cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjUwcHg7dGV4dC1hbGlnbjpjZW50ZXJ9aDIsLmJldGF7Zm9udC1zaXplOjMycHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjM2cHh9aDMsLmdhbW1he2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MzBweH1ibG9ja3F1b3Rle2JvcmRlci1sZWZ0OjNweCBzb2xpZCAjY2NjO3BhZGRpbmctbGVmdDoyMHB4O2NvbG9yOiM3Nzc7Zm9udC1zdHlsZTppdGFsaWM7d29yZC13cmFwOmJyZWFrLXdvcmR9YXtjb2xvcjojNGY1YjkzfWE6aG92ZXJ7Y29sb3I6Izg4OTJiZn0uYmFjay10by10b3B7dGV4dC1hbGlnbjpjZW50ZXJ9LmJhY2stdG8tdG9wIGF7YmFja2dyb3VuZDojNGY1YjkzO2JvcmRlci1yYWRpdXM6M3B4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDo0MHB4O3BhZGRpbmc6MCAyMHB4O3RyYW5zaXRpb246YWxsIC4xcyBlYXNlO2NvbG9yOndoaXRlO2ZvbnQtZmFtaWx5OnZlcmRhbmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDo0MHB4O3RleHQtZGVjb3JhdGlvbjpub25lO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uYmFjay10by10b3AgYTpob3ZlcntiYWNrZ3JvdW5kOiM4ODkyYmZ9aW1ne21heC13aWR0aDoxMDAlfXByZSxjb2Rle2NvbG9yOiM0NDQ7Zm9udC1mYW1pbHk6XCJTb3VyY2UgQ29kZSBQcm9cIixDb25zb2xhcyxcIkFuZGFsZSBNb25vIFdUXCIsXCJBbmRhbGUgTW9ub1wiLFwiTHVjaWRhIENvbnNvbGVcIixcIkx1Y2lkYSBTYW5zIFR5cGV3cml0ZXJcIixcIkRlamFWdSBTYW5zIE1vbm9cIixcIkJpdHN0cmVhbSBWZXJhIFNhbnMgTW9ub1wiLFwiTGliZXJhdGlvbiBNb25vXCIsXCJOaW1idXMgTW9ubyBMXCIsTW9uYWNvLFwiQ291cmllciBOZXdcIixDb3VyaWVyLG1vbm9zcGFjZTtmb250LXNpemU6OTAlfWEgcHJlLGEgY29kZXtjb2xvcjppbmhlcml0fXByZXtiYWNrZ3JvdW5kOiNmN2Y3Zjc7Ym9yZGVyOjFweCBzb2xpZCAjZWVlO2JvcmRlci1yYWRpdXM6M3B4O2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjIwcHg7d2lkdGg6MTAwJX1AbWVkaWEgKG1heC13aWR0aDo3NjdweCl7Ym9keXtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoyNHB4fWgxLC5hbHBoYXtmb250LXNpemU6MzZweDtsaW5lLWhlaWdodDozOHB4fWgyLC5iZXRhe2ZvbnQtc2l6ZToyNHB4O2xpbmUtaGVpZ2h0OjI4cHh9aDMsLmdhbW1he2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjIzcHh9YmxvY2txdW90ZXttYXJnaW4tbGVmdDowfXVsLG9se3BhZGRpbmctbGVmdDoxZW19cHJle3BhZGRpbmc6NXB4IDEwcHh9fUBtZWRpYSAobWF4LXdpZHRoOjM2MHB4KXtib2R5e2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjIxcHh9aDEsLmFscGhhe2ZvbnQtc2l6ZToyOHB4O2xpbmUtaGVpZ2h0OjMwcHh9aDIsLmJldGF7Zm9udC1zaXplOjIwcHg7bGluZS1oZWlnaHQ6MjNweH1oMywuZ2FtbWF7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MjBweH19LnNpdGUtaGVhZGVye3BhZGRpbmctdG9wOjQwcHg7bWFyZ2luLWJvdHRvbTo0MHB4O3RleHQtYWxpZ246Y2VudGVyfS5zaXRlLWhlYWRlciBoMXttYXJnaW46MDtmb250LXNpemU6NzJweDtsaW5lLWhlaWdodDo2MHB4fS5zaXRlLWhlYWRlciBoMSBlbXtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTozNHB4O2ZvbnQtc3R5bGU6bm9ybWFsfS5zaXRlLWhlYWRlciBoMSBhe2NvbG9yOiMzMzM7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnNpdGUtaGVhZGVyIGgxIGE6aG92ZXJ7Y29sb3I6Izg4OTJiZn0uc2l0ZS1oZWFkZXIgLmJ1aWxkLWRhdGV7bWFyZ2luLWJvdHRvbToxMHB4O2NvbG9yOiM5OTk7Zm9udC1mYW1pbHk6dmVyZGFuYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMXB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uc2l0ZS1oZWFkZXIgLmZvcmstbWV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDt6LWluZGV4OjEwMDt3aWR0aDoxMjBweH1AbWVkaWEgKG1heC13aWR0aDo3NjdweCl7LnNpdGUtaGVhZGVyIC5mb3JrLW1le3dpZHRoOjEwMHB4fX0uc2l0ZS1uYXZpZ2F0aW9uLC5zaXRlLWNvbnRlbnQsLnNpdGUtZm9vdGVye21hcmdpbjowIGF1dG87bWF4LXdpZHRoOjg0MHB4O3dpZHRoOjkyJX0uc2l0ZS1uYXZpZ2F0aW9ue2NvbHVtbnM6Mztjb2x1bW4tZ2FwOjQwcHh9LnNpdGUtbmF2aWdhdGlvbiB1bHtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowfS5zaXRlLW5hdmlnYXRpb24gdWwgbGl7bWFyZ2luLWJvdHRvbToyMHB4O2ZvbnQtc2l6ZToyMnB4O2xpbmUtaGVpZ2h0OjIzcHh9LnNpdGUtbmF2aWdhdGlvbiB1bCBsaSBhe2Rpc3BsYXk6YmxvY2s7Y29sb3I6IzQ0NDtmb250LXdlaWdodDo3MDA7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnNpdGUtbmF2aWdhdGlvbiB1bCBsaSBhOmhvdmVye2NvbG9yOiM4ODkyYmZ9LnNpdGUtbmF2aWdhdGlvbiB1bCBsaSB1bHtwYWRkaW5nLXRvcDo4cHh9LnNpdGUtbmF2aWdhdGlvbiB1bCBsaSBsaXttYXJnaW4tYm90dG9tOjZweDtmb250LXNpemU6MThweH0uc2l0ZS1uYXZpZ2F0aW9uIHVsIGxpIGxpIGF7Ym9yZGVyOm5vbmU7Y29sb3I6Izc3Nztmb250LXdlaWdodDpub3JtYWx9LnNpdGUtbmF2aWdhdGlvbiBsaXticmVhay1pbnNpZGU6YXZvaWR9QG1lZGlhIChtYXgtd2lkdGg6ODIwcHgpey5zaXRlLW5hdmlnYXRpb257Y29sdW1uczoyfX1AbWVkaWEgKG1heC13aWR0aDo1NjBweCl7LnNpdGUtbmF2aWdhdGlvbntjb2x1bW5zOjF9fS5zaXRlLWNvbnRlbnQgaDF7cGFkZGluZy10b3A6NDBweDtwb3NpdGlvbjpyZWxhdGl2ZX0uc2l0ZS1jb250ZW50IGgxOmFmdGVye2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItYm90dG9tOm5vbmU7Y29udGVudDpcIlwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjhweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7d2lkdGg6MTAwJX0uc2l0ZS1jb250ZW50LmNoYXB0ZXJze2NvdW50ZXItcmVzZXQ6Y2hhcHRlcn0uc2l0ZS1jb250ZW50LmNoYXB0ZXJzIGgxe2NvdW50ZXItaW5jcmVtZW50OmNoYXB0ZXI7cGFkZGluZy10b3A6NjBweH0uc2l0ZS1jb250ZW50LmNoYXB0ZXJzIGgxOmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OlwiQ2hhcHRlciBcIiBjb3VudGVyKGNoYXB0ZXIpIFwiLlwiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDozMHB4O2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHg7bGV0dGVyLXNwYWNpbmc6MXB4O2xpbmUtaGVpZ2h0OjIwcHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3RleHQtYWxpZ246Y2VudGVyfS5zaXRlLWNvbnRlbnQgI3dlbGNvbWUgdWx7Y29sdW1uczozO2NvbHVtbi1nYXA6MzBweDtsaXN0LXN0eWxlLXBvc2l0aW9uOmluc2lkZX0uc2l0ZS1jb250ZW50IC5iYWNrLXRvLXRvcHttYXJnaW4tYm90dG9tOjYwcHh9QG1lZGlhIChtYXgtd2lkdGg6ODcwcHgpey5zaXRlLWNvbnRlbnQgI3dlbGNvbWUgdWx7Y29sdW1uczoyfX1AbWVkaWEgKG1heC13aWR0aDo2MDBweCl7LnNpdGUtY29udGVudCAjd2VsY29tZSB1bHtjb2x1bW5zOjF9fS5zaXRlLWZvb3Rlcntib3JkZXItdG9wOjFweCBzb2xpZCAjY2NjO21hcmdpbjo2MHB4IGF1dG8gMCBhdXRvO3BhZGRpbmc6NDBweCAyMHB4O2ZvbnQtZmFtaWx5OnZlcmRhbmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTZweDt0ZXh0LWFsaWduOmNlbnRlcn0uc2l0ZS1mb290ZXIgaDJ7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDozMHB4O21hcmdpbi1ib3R0b206MTBweH0uc2l0ZS1mb290ZXIgdWx7bGlzdC1zdHlsZTpub25lO21hcmdpbjowIDAgMjBweCAwO3BhZGRpbmc6MH0uc2l0ZS1mb290ZXIgLmxpY2Vuc2V7Y29sb3I6Izc3Nztmb250LXNpemU6MTNweH0iXX0= */ \ No newline at end of file +*{box-sizing:border-box}body{font-size:24px;line-height:32px;text-rendering:optimizeLegibility}h1,h2,h3,h4{font-family:georgia,serif}h1,.alpha{position:relative;font-size:48px;font-weight:normal;line-height:50px;text-align:center}h2,.beta{font-size:32px;font-weight:normal;line-height:36px}h3,.gamma{font-size:24px;font-weight:bold;line-height:30px}blockquote{border-left:3px solid #ccc;padding-left:20px;color:#777;font-style:italic;word-wrap:break-word}a{color:#4f5b93}a:hover{color:#8892bf}.back-to-top{text-align:center}.back-to-top a{background:#4f5b93;border-radius:3px;display:inline-block;height:40px;padding:0 20px;transition:all .1s ease;color:white;font-family:verdana,sans-serif;font-size:13px;line-height:40px;text-decoration:none;text-transform:uppercase}.back-to-top a:hover{background:#8892bf}img{max-width:100%}pre,code{color:#444;font-family:"Source Code Pro",Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:90%}a pre,a code{color:inherit}pre{background:#f7f7f7;border:1px solid #eee;border-radius:3px;display:block;overflow:auto;padding:20px;width:100%}@media (max-width:767px){body{font-size:18px;line-height:24px}h1,.alpha{font-size:36px;line-height:38px}h2,.beta{font-size:24px;line-height:28px}h3,.gamma{font-size:18px;line-height:23px}blockquote{margin-left:0}ul,ol{padding-left:1em}pre{padding:5px 10px}}@media (max-width:360px){body{font-size:16px;line-height:21px}h1,.alpha{font-size:28px;line-height:30px}h2,.beta{font-size:20px;line-height:23px}h3,.gamma{font-size:16px;line-height:20px}}.site-header{padding-top:40px;margin-bottom:40px;text-align:center}.site-header h1{margin:0;font-size:72px;line-height:60px}.site-header h1 em{display:block;font-size:34px;font-style:normal}.site-header h1 a{color:#333;text-decoration:none}.site-header h1 a:hover{color:#8892bf}.site-header .build-date{margin-bottom:10px;color:#999;font-family:verdana,sans-serif;font-size:11px;text-transform:uppercase}.site-header .fork-me{position:absolute;top:0;right:0;z-index:100;width:120px}@media (max-width:767px){.site-header .fork-me{width:100px}}.site-navigation,.site-content,.site-footer{margin:0 auto;max-width:840px;width:92%}.site-navigation{-webkit-columns:3;-moz-columns:3;columns:3;-webkit-column-gap:40px;-moz-column-gap:40px;column-gap:40px}.site-navigation ul{list-style:none;margin:0;padding:0}.site-navigation ul li{margin-bottom:20px;font-size:22px;line-height:23px}.site-navigation ul li a{display:block;color:#444;font-weight:700;text-decoration:none}.site-navigation ul li a:hover{color:#8892bf}.site-navigation ul li ul{padding-top:8px}.site-navigation ul li li{margin-bottom:6px;font-size:18px}.site-navigation ul li li a{border:none;color:#777;font-weight:normal}.site-navigation li{-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid}@media (max-width:820px){.site-navigation{-webkit-columns:2;-moz-columns:2;columns:2}}@media (max-width:560px){.site-navigation{-webkit-columns:1;-moz-columns:1;columns:1}}@media (max-width:375px){.site-navigation{background:rgba(255,255,255,0.95);-webkit-columns:1;-moz-columns:1;columns:1;max-height:100vh;position:fixed;bottom:0;left:0;z-index:100}.site-navigation:before{background:#4f5b93;box-sizing:border-box;content:"\27A4 Table of Contents";display:block;height:40px;padding:0 10px;width:100vh;position:absolute;bottom:0;left:0;color:white;font-family:verdana,sans-serif;font-size:13px;line-height:40px;text-transform:uppercase;z-index:2}.site-navigation>ul{background:rgba(255,255,255,0.96);border-top:3px solid #8892bf;box-shadow:rgba(0,0,0,0.25) 0 -5px 10px;box-sizing:border-box;padding:20px;overflow:auto;-webkit-overflow-scrolling:touch;position:absolute;left:0;bottom:40px;height:50vh;width:100vh;-webkit-transform:translate(0, 100vh);-ms-transform:translate(0, 100vh);transform:translate(0, 100vh);transition:all .2s ease;z-index:1}.site-navigation.open>ul{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}}.site-content h1{padding-top:40px;position:relative}.site-content h1:after{border:1px solid #ddd;border-bottom:none;content:"";display:block;height:8px;position:absolute;left:0;top:0;width:100%}.site-content.chapters{counter-reset:chapter}.site-content.chapters h1{counter-increment:chapter;padding-top:60px}.site-content.chapters h1:before{display:inline-block;content:"Chapter " counter(chapter) ".";position:absolute;top:30px;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);color:#999;font-size:12px;letter-spacing:1px;line-height:20px;text-transform:uppercase;text-align:center}.site-content #welcome ul{-webkit-columns:3;-moz-columns:3;columns:3;-webkit-column-gap:30px;-moz-column-gap:30px;column-gap:30px;list-style-position:inside}.site-content .back-to-top{margin-bottom:60px}@media (max-width:870px){.site-content #welcome ul{-webkit-columns:2;-moz-columns:2;columns:2}}@media (max-width:600px){.site-content #welcome ul{-webkit-columns:1;-moz-columns:1;columns:1}}.site-footer{border-top:1px solid #ccc;margin:60px auto 0 auto;padding:40px 20px;font-family:verdana,sans-serif;font-size:16px;text-align:center}.site-footer h2{font-size:24px;font-weight:bold;line-height:30px;margin-bottom:10px}.site-footer ul{list-style:none;margin:0 0 20px 0;padding:0}.site-footer .license{color:#777;font-size:13px} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFsbC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsRUFBRSxxQkFBcUIsQ0FBQyxLQUFLLGVBQWUsaUJBQWlCLGlDQUFpQyxDQUFDLFlBQVkseUJBQXlCLENBQUMsVUFBVSxrQkFBa0IsZUFBZSxtQkFBbUIsaUJBQWlCLGlCQUFpQixDQUFDLFNBQVMsZUFBZSxtQkFBbUIsZ0JBQWdCLENBQUMsVUFBVSxlQUFlLGlCQUFpQixnQkFBZ0IsQ0FBQyxXQUFXLDJCQUEyQixrQkFBa0IsV0FBVyxrQkFBa0Isb0JBQW9CLENBQUMsRUFBRSxhQUFhLENBQUMsUUFBUSxhQUFhLENBQUMsYUFBYSxpQkFBaUIsQ0FBQyxlQUFlLG1CQUFtQixrQkFBa0IscUJBQXFCLFlBQVksZUFBZSx3QkFBd0IsWUFBWSwrQkFBK0IsZUFBZSxpQkFBaUIscUJBQXFCLHdCQUF3QixDQUFDLHFCQUFxQixrQkFBa0IsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxTQUFTLFdBQVcsdU9BQXVPLGFBQWEsQ0FBQyxhQUFhLGFBQWEsQ0FBQyxJQUFJLG1CQUFtQixzQkFBc0Isa0JBQWtCLGNBQWMsY0FBYyxhQUFhLFVBQVUsQ0FBQyx5QkFBeUIsS0FBSyxlQUFlLGdCQUFnQixDQUFDLFVBQVUsZUFBZSxnQkFBZ0IsQ0FBQyxTQUFTLGVBQWUsZ0JBQWdCLENBQUMsVUFBVSxlQUFlLGdCQUFnQixDQUFDLFdBQVcsYUFBYSxDQUFDLE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLHlCQUF5QixLQUFLLGVBQWUsZ0JBQWdCLENBQUMsVUFBVSxlQUFlLGdCQUFnQixDQUFDLFNBQVMsZUFBZSxnQkFBZ0IsQ0FBQyxVQUFVLGVBQWUsZ0JBQWdCLENBQUMsQ0FBQyxhQUFhLGlCQUFpQixtQkFBbUIsaUJBQWlCLENBQUMsZ0JBQWdCLFNBQVMsZUFBZSxnQkFBZ0IsQ0FBQyxtQkFBbUIsY0FBYyxlQUFlLGlCQUFpQixDQUFDLGtCQUFrQixXQUFXLG9CQUFvQixDQUFDLHdCQUF3QixhQUFhLENBQUMseUJBQXlCLG1CQUFtQixXQUFXLCtCQUErQixlQUFlLHdCQUF3QixDQUFDLHNCQUFzQixrQkFBa0IsTUFBTSxRQUFRLFlBQVksV0FBVyxDQUFDLHlCQUF5QixzQkFBc0IsV0FBVyxDQUFDLENBQUMsNENBQTRDLGNBQWMsZ0JBQWdCLFNBQVMsQ0FBQyxpQkFBaUIsa0JBQVUsQUFBVixlQUFVLEFBQVYsVUFBVSx3QkFBZSxBQUFmLHFCQUFlLEFBQWYsZUFBZSxDQUFDLG9CQUFvQixnQkFBZ0IsU0FBUyxTQUFTLENBQUMsdUJBQXVCLG1CQUFtQixlQUFlLGdCQUFnQixDQUFDLHlCQUF5QixjQUFjLFdBQVcsZ0JBQWdCLG9CQUFvQixDQUFDLCtCQUErQixhQUFhLENBQUMsMEJBQTBCLGVBQWUsQ0FBQywwQkFBMEIsa0JBQWtCLGNBQWMsQ0FBQyw0QkFBNEIsWUFBWSxXQUFXLGtCQUFrQixDQUFDLG9CQUFvQixrQ0FBa0IsQUFBbEIsd0JBQWtCLEFBQWxCLGtCQUFrQixDQUFDLHlCQUF5QixpQkFBaUIsa0JBQVMsQUFBVCxlQUFTLEFBQVQsU0FBUyxDQUFDLENBQUMseUJBQXlCLGlCQUFpQixrQkFBUyxBQUFULGVBQVMsQUFBVCxTQUFTLENBQUMsQ0FBQyx5QkFBeUIsaUJBQWlCLGtDQUFrQyxrQkFBVSxBQUFWLGVBQVUsQUFBVixVQUFVLGlCQUFpQixlQUFlLFNBQVMsT0FBTyxXQUFXLENBQUMsd0JBQXdCLG1CQUFtQixzQkFBc0Isb0NBQW9DLGNBQWMsWUFBWSxlQUFlLFlBQVksa0JBQWtCLFNBQVMsT0FBTyxZQUFZLCtCQUErQixlQUFlLGlCQUFpQix5QkFBeUIsU0FBUyxDQUFDLG9CQUFvQixrQ0FBa0MsNkJBQTZCLHdDQUF3QyxzQkFBc0IsYUFBYSxjQUFjLGlDQUFpQyxrQkFBa0IsT0FBTyxZQUFZLFlBQVksWUFBWSxzQ0FBOEIsQUFBOUIsa0NBQThCLEFBQTlCLDhCQUE4Qix3QkFBd0IsU0FBUyxDQUFDLHlCQUF5QixrQ0FBeUIsQUFBekIsOEJBQXlCLEFBQXpCLHlCQUF5QixDQUFDLENBQUMsaUJBQWlCLGlCQUFpQixpQkFBaUIsQ0FBQyx1QkFBdUIsc0JBQXNCLG1CQUFtQixXQUFXLGNBQWMsV0FBVyxrQkFBa0IsT0FBTyxNQUFNLFVBQVUsQ0FBQyx1QkFBdUIscUJBQXFCLENBQUMsMEJBQTBCLDBCQUEwQixnQkFBZ0IsQ0FBQyxpQ0FBaUMscUJBQXFCLHdDQUF3QyxrQkFBa0IsU0FBUyxTQUFTLG1DQUEyQixBQUEzQiwrQkFBMkIsQUFBM0IsMkJBQTJCLFdBQVcsZUFBZSxtQkFBbUIsaUJBQWlCLHlCQUF5QixpQkFBaUIsQ0FBQywwQkFBMEIsa0JBQVUsQUFBVixlQUFVLEFBQVYsVUFBVSx3QkFBZ0IsQUFBaEIscUJBQWdCLEFBQWhCLGdCQUFnQiwwQkFBMEIsQ0FBQywyQkFBMkIsa0JBQWtCLENBQUMseUJBQXlCLDBCQUEwQixrQkFBUyxBQUFULGVBQVMsQUFBVCxTQUFTLENBQUMsQ0FBQyx5QkFBeUIsMEJBQTBCLGtCQUFTLEFBQVQsZUFBUyxBQUFULFNBQVMsQ0FBQyxDQUFDLGFBQWEsMEJBQTBCLHdCQUF3QixrQkFBa0IsK0JBQStCLGVBQWUsaUJBQWlCLENBQUMsZ0JBQWdCLGVBQWUsaUJBQWlCLGlCQUFpQixrQkFBa0IsQ0FBQyxnQkFBZ0IsZ0JBQWdCLGtCQUFrQixTQUFTLENBQUMsc0JBQXNCLFdBQVcsY0FBYyxDQUFDIiwiZmlsZSI6ImFsbC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIqe2JveC1zaXppbmc6Ym9yZGVyLWJveH1ib2R5e2ZvbnQtc2l6ZToyNHB4O2xpbmUtaGVpZ2h0OjMycHg7dGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5fWgxLGgyLGgzLGg0e2ZvbnQtZmFtaWx5Omdlb3JnaWEsc2VyaWZ9aDEsLmFscGhhe3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZTo0OHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDo1MHB4O3RleHQtYWxpZ246Y2VudGVyfWgyLC5iZXRhe2ZvbnQtc2l6ZTozMnB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDozNnB4fWgzLC5nYW1tYXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjMwcHh9YmxvY2txdW90ZXtib3JkZXItbGVmdDozcHggc29saWQgI2NjYztwYWRkaW5nLWxlZnQ6MjBweDtjb2xvcjojNzc3O2ZvbnQtc3R5bGU6aXRhbGljO3dvcmQtd3JhcDpicmVhay13b3JkfWF7Y29sb3I6IzRmNWI5M31hOmhvdmVye2NvbG9yOiM4ODkyYmZ9LmJhY2stdG8tdG9we3RleHQtYWxpZ246Y2VudGVyfS5iYWNrLXRvLXRvcCBhe2JhY2tncm91bmQ6IzRmNWI5Mztib3JkZXItcmFkaXVzOjNweDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6NDBweDtwYWRkaW5nOjAgMjBweDt0cmFuc2l0aW9uOmFsbCAuMXMgZWFzZTtjb2xvcjp3aGl0ZTtmb250LWZhbWlseTp2ZXJkYW5hLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6NDBweDt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LmJhY2stdG8tdG9wIGE6aG92ZXJ7YmFja2dyb3VuZDojODg5MmJmfWltZ3ttYXgtd2lkdGg6MTAwJX1wcmUsY29kZXtjb2xvcjojNDQ0O2ZvbnQtZmFtaWx5OlwiU291cmNlIENvZGUgUHJvXCIsQ29uc29sYXMsXCJBbmRhbGUgTW9ubyBXVFwiLFwiQW5kYWxlIE1vbm9cIixcIkx1Y2lkYSBDb25zb2xlXCIsXCJMdWNpZGEgU2FucyBUeXBld3JpdGVyXCIsXCJEZWphVnUgU2FucyBNb25vXCIsXCJCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm9cIixcIkxpYmVyYXRpb24gTW9ub1wiLFwiTmltYnVzIE1vbm8gTFwiLE1vbmFjbyxcIkNvdXJpZXIgTmV3XCIsQ291cmllcixtb25vc3BhY2U7Zm9udC1zaXplOjkwJX1hIHByZSxhIGNvZGV7Y29sb3I6aW5oZXJpdH1wcmV7YmFja2dyb3VuZDojZjdmN2Y3O2JvcmRlcjoxcHggc29saWQgI2VlZTtib3JkZXItcmFkaXVzOjNweDtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmF1dG87cGFkZGluZzoyMHB4O3dpZHRoOjEwMCV9QG1lZGlhIChtYXgtd2lkdGg6NzY3cHgpe2JvZHl7Zm9udC1zaXplOjE4cHg7bGluZS1oZWlnaHQ6MjRweH1oMSwuYWxwaGF7Zm9udC1zaXplOjM2cHg7bGluZS1oZWlnaHQ6MzhweH1oMiwuYmV0YXtmb250LXNpemU6MjRweDtsaW5lLWhlaWdodDoyOHB4fWgzLC5nYW1tYXtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoyM3B4fWJsb2NrcXVvdGV7bWFyZ2luLWxlZnQ6MH11bCxvbHtwYWRkaW5nLWxlZnQ6MWVtfXByZXtwYWRkaW5nOjVweCAxMHB4fX1AbWVkaWEgKG1heC13aWR0aDozNjBweCl7Ym9keXtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoyMXB4fWgxLC5hbHBoYXtmb250LXNpemU6MjhweDtsaW5lLWhlaWdodDozMHB4fWgyLC5iZXRhe2ZvbnQtc2l6ZToyMHB4O2xpbmUtaGVpZ2h0OjIzcHh9aDMsLmdhbW1he2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjIwcHh9fS5zaXRlLWhlYWRlcntwYWRkaW5nLXRvcDo0MHB4O21hcmdpbi1ib3R0b206NDBweDt0ZXh0LWFsaWduOmNlbnRlcn0uc2l0ZS1oZWFkZXIgaDF7bWFyZ2luOjA7Zm9udC1zaXplOjcycHg7bGluZS1oZWlnaHQ6NjBweH0uc2l0ZS1oZWFkZXIgaDEgZW17ZGlzcGxheTpibG9jaztmb250LXNpemU6MzRweDtmb250LXN0eWxlOm5vcm1hbH0uc2l0ZS1oZWFkZXIgaDEgYXtjb2xvcjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lfS5zaXRlLWhlYWRlciBoMSBhOmhvdmVye2NvbG9yOiM4ODkyYmZ9LnNpdGUtaGVhZGVyIC5idWlsZC1kYXRle21hcmdpbi1ib3R0b206MTBweDtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OnZlcmRhbmEsc2Fucy1zZXJpZjtmb250LXNpemU6MTFweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LnNpdGUtaGVhZGVyIC5mb3JrLW1le3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7ei1pbmRleDoxMDA7d2lkdGg6MTIwcHh9QG1lZGlhIChtYXgtd2lkdGg6NzY3cHgpey5zaXRlLWhlYWRlciAuZm9yay1tZXt3aWR0aDoxMDBweH19LnNpdGUtbmF2aWdhdGlvbiwuc2l0ZS1jb250ZW50LC5zaXRlLWZvb3RlcnttYXJnaW46MCBhdXRvO21heC13aWR0aDo4NDBweDt3aWR0aDo5MiV9LnNpdGUtbmF2aWdhdGlvbntjb2x1bW5zOjM7Y29sdW1uLWdhcDo0MHB4fS5zaXRlLW5hdmlnYXRpb24gdWx7bGlzdC1zdHlsZTpub25lO21hcmdpbjowO3BhZGRpbmc6MH0uc2l0ZS1uYXZpZ2F0aW9uIHVsIGxpe21hcmdpbi1ib3R0b206MjBweDtmb250LXNpemU6MjJweDtsaW5lLWhlaWdodDoyM3B4fS5zaXRlLW5hdmlnYXRpb24gdWwgbGkgYXtkaXNwbGF5OmJsb2NrO2NvbG9yOiM0NDQ7Zm9udC13ZWlnaHQ6NzAwO3RleHQtZGVjb3JhdGlvbjpub25lfS5zaXRlLW5hdmlnYXRpb24gdWwgbGkgYTpob3Zlcntjb2xvcjojODg5MmJmfS5zaXRlLW5hdmlnYXRpb24gdWwgbGkgdWx7cGFkZGluZy10b3A6OHB4fS5zaXRlLW5hdmlnYXRpb24gdWwgbGkgbGl7bWFyZ2luLWJvdHRvbTo2cHg7Zm9udC1zaXplOjE4cHh9LnNpdGUtbmF2aWdhdGlvbiB1bCBsaSBsaSBhe2JvcmRlcjpub25lO2NvbG9yOiM3Nzc7Zm9udC13ZWlnaHQ6bm9ybWFsfS5zaXRlLW5hdmlnYXRpb24gbGl7YnJlYWstaW5zaWRlOmF2b2lkfUBtZWRpYSAobWF4LXdpZHRoOjgyMHB4KXsuc2l0ZS1uYXZpZ2F0aW9ue2NvbHVtbnM6Mn19QG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpey5zaXRlLW5hdmlnYXRpb257Y29sdW1uczoxfX1AbWVkaWEgKG1heC13aWR0aDozNzVweCl7LnNpdGUtbmF2aWdhdGlvbntiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsMC45NSk7Y29sdW1uczoxO21heC1oZWlnaHQ6MTAwdmg7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjA7bGVmdDowO3otaW5kZXg6MTAwfS5zaXRlLW5hdmlnYXRpb246YmVmb3Jle2JhY2tncm91bmQ6IzRmNWI5Mztib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGVudDpcIlxcMjdBNCAgIFRhYmxlIG9mIENvbnRlbnRzXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6NDBweDtwYWRkaW5nOjAgMTBweDt3aWR0aDoxMDB2aDtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7Y29sb3I6d2hpdGU7Zm9udC1mYW1pbHk6dmVyZGFuYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjQwcHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3otaW5kZXg6Mn0uc2l0ZS1uYXZpZ2F0aW9uPnVse2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwwLjk2KTtib3JkZXItdG9wOjNweCBzb2xpZCAjODg5MmJmO2JveC1zaGFkb3c6cmdiYSgwLDAsMCwwLjI1KSAwIC01cHggMTBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoyMHB4O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTo0MHB4O2hlaWdodDo1MHZoO3dpZHRoOjEwMHZoO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwgMTAwdmgpO3RyYW5zaXRpb246YWxsIC4ycyBlYXNlO3otaW5kZXg6MX0uc2l0ZS1uYXZpZ2F0aW9uLm9wZW4+dWx7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLCAwKX19LnNpdGUtY29udGVudCBoMXtwYWRkaW5nLXRvcDo0MHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5zaXRlLWNvbnRlbnQgaDE6YWZ0ZXJ7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1ib3R0b206bm9uZTtjb250ZW50OlwiXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6OHB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt3aWR0aDoxMDAlfS5zaXRlLWNvbnRlbnQuY2hhcHRlcnN7Y291bnRlci1yZXNldDpjaGFwdGVyfS5zaXRlLWNvbnRlbnQuY2hhcHRlcnMgaDF7Y291bnRlci1pbmNyZW1lbnQ6Y2hhcHRlcjtwYWRkaW5nLXRvcDo2MHB4fS5zaXRlLWNvbnRlbnQuY2hhcHRlcnMgaDE6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6XCJDaGFwdGVyIFwiIGNvdW50ZXIoY2hhcHRlcikgXCIuXCI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjMwcHg7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7Y29sb3I6Izk5OTtmb250LXNpemU6MTJweDtsZXR0ZXItc3BhY2luZzoxcHg7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7dGV4dC1hbGlnbjpjZW50ZXJ9LnNpdGUtY29udGVudCAjd2VsY29tZSB1bHtjb2x1bW5zOjM7Y29sdW1uLWdhcDozMHB4O2xpc3Qtc3R5bGUtcG9zaXRpb246aW5zaWRlfS5zaXRlLWNvbnRlbnQgLmJhY2stdG8tdG9we21hcmdpbi1ib3R0b206NjBweH1AbWVkaWEgKG1heC13aWR0aDo4NzBweCl7LnNpdGUtY29udGVudCAjd2VsY29tZSB1bHtjb2x1bW5zOjJ9fUBtZWRpYSAobWF4LXdpZHRoOjYwMHB4KXsuc2l0ZS1jb250ZW50ICN3ZWxjb21lIHVse2NvbHVtbnM6MX19LnNpdGUtZm9vdGVye2JvcmRlci10b3A6MXB4IHNvbGlkICNjY2M7bWFyZ2luOjYwcHggYXV0byAwIGF1dG87cGFkZGluZzo0MHB4IDIwcHg7Zm9udC1mYW1pbHk6dmVyZGFuYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O3RleHQtYWxpZ246Y2VudGVyfS5zaXRlLWZvb3RlciBoMntmb250LXNpemU6MjRweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjMwcHg7bWFyZ2luLWJvdHRvbToxMHB4fS5zaXRlLWZvb3RlciB1bHtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjAgMCAyMHB4IDA7cGFkZGluZzowfS5zaXRlLWZvb3RlciAubGljZW5zZXtjb2xvcjojNzc3O2ZvbnQtc2l6ZToxM3B4fSJdfQ== */ \ No newline at end of file diff --git a/less/all.less b/less/all.less index 07158d494..3b03755d2 100644 --- a/less/all.less +++ b/less/all.less @@ -288,6 +288,61 @@ pre{ } } +@media (max-width: 375px) { + .site-navigation{ + background: fade(white, 95%); + columns: 1; + max-height: 100vh; + position: fixed; + bottom: 0; + left: 0; + z-index: 100; + + &:before{ + background: @phpPurpleDark; + box-sizing: border-box; + content: "\27A4 Table of Contents"; + display: block; + height: 40px; + padding: 0 10px; + width: 100vh; + position: absolute; + bottom: 0; + left: 0; + color: white; + font-family: @sans; + font-size: 13px; + line-height: 40px; + text-transform: uppercase; + z-index: 2; + } + + > ul{ + background: fade(white, 96%); + border-top: 3px solid @phpPurple; + box-shadow: fade(black, 25%) 0 -5px 10px; + box-sizing: border-box; + padding: 20px; + overflow: auto; + -webkit-overflow-scrolling: touch; + position: absolute; + left: 0; + bottom: 40px; + height: 50vh; + width: 100vh; + transform: translate(0,100vh); + transition: all 0.2s ease; + z-index: 1; + } + + &.open{ + > ul{ + transform: translate(0,0); + } + } + } +} + /****************************************************************************** * Content *****************************************************************************/ diff --git a/scripts/fastclick.js b/scripts/fastclick.js new file mode 100644 index 000000000..6fefca20d --- /dev/null +++ b/scripts/fastclick.js @@ -0,0 +1,4 @@ +/** Shrinkwrap URL: + * /v2/bundles/js?modules=fastclick%401.0.6%2Co-autoinit%401.0.1&shrinkwrap= + */ +!function(t){function e(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return t[o].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){"use strict";n(1),window.Origami={fastclick:n(2),"o-autoinit":n(4)}},function(t,e){t.exports={name:"__MAIN__",dependencies:{fastclick:"fastclick#*","o-autoinit":"o-autoinit#^1.0.0"}}},function(t,e,n){t.exports=n(3)},function(t,e){"use strict";var n=!1;!function(){function e(t,n){function o(t,e){return function(){return t.apply(e,arguments)}}var r;if(n=n||{},this.trackingClick=!1,this.trackingClickStart=0,this.targetElement=null,this.touchStartX=0,this.touchStartY=0,this.lastTouchIdentifier=0,this.touchBoundary=n.touchBoundary||10,this.layer=t,this.tapDelay=n.tapDelay||200,this.tapTimeout=n.tapTimeout||700,!e.notNeeded(t)){for(var a=["onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel"],c=this,s=0,u=a.length;u>s;s++)c[a[s]]=o(c[a[s]],c);i&&(t.addEventListener("mouseover",this.onMouse,!0),t.addEventListener("mousedown",this.onMouse,!0),t.addEventListener("mouseup",this.onMouse,!0)),t.addEventListener("click",this.onClick,!0),t.addEventListener("touchstart",this.onTouchStart,!1),t.addEventListener("touchmove",this.onTouchMove,!1),t.addEventListener("touchend",this.onTouchEnd,!1),t.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(t.removeEventListener=function(e,n,o){var i=Node.prototype.removeEventListener;"click"===e?i.call(t,e,n.hijacked||n,o):i.call(t,e,n,o)},t.addEventListener=function(e,n,o){var i=Node.prototype.addEventListener;"click"===e?i.call(t,e,n.hijacked||(n.hijacked=function(t){t.propagationStopped||n(t)}),o):i.call(t,e,n,o)}),"function"==typeof t.onclick&&(r=t.onclick,t.addEventListener("click",function(t){r(t)},!1),t.onclick=null)}}var o=navigator.userAgent.indexOf("Windows Phone")>=0,i=navigator.userAgent.indexOf("Android")>0&&!o,r=/iP(ad|hone|od)/.test(navigator.userAgent)&&!o,a=r&&/OS 4_\d(_\d)?/.test(navigator.userAgent),c=r&&/OS [6-7]_\d/.test(navigator.userAgent),s=navigator.userAgent.indexOf("BB10")>0;e.prototype.needsClick=function(t){switch(t.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(t.disabled)return!0;break;case"input":if(r&&"file"===t.type||t.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(t.className)},e.prototype.needsFocus=function(t){switch(t.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!i;case"input":switch(t.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!t.disabled&&!t.readOnly;default:return/\bneedsfocus\b/.test(t.className)}},e.prototype.sendClick=function(t,e){var n,o;document.activeElement&&document.activeElement!==t&&document.activeElement.blur(),o=e.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(t),!0,!0,window,1,o.screenX,o.screenY,o.clientX,o.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,t.dispatchEvent(n)},e.prototype.determineEventType=function(t){return i&&"select"===t.tagName.toLowerCase()?"mousedown":"click"},e.prototype.focus=function(t){var e;r&&t.setSelectionRange&&0!==t.type.indexOf("date")&&"time"!==t.type&&"month"!==t.type?(e=t.value.length,t.setSelectionRange(e,e)):t.focus()},e.prototype.updateScrollParent=function(t){var e,n;if(e=t.fastClickScrollParent,!e||!e.contains(t)){n=t;do{if(n.scrollHeight>n.offsetHeight){e=n,t.fastClickScrollParent=n;break}n=n.parentElement}while(n)}e&&(e.fastClickLastScrollTop=e.scrollTop)},e.prototype.getTargetElementFromEventTarget=function(t){return t.nodeType===Node.TEXT_NODE?t.parentNode:t},e.prototype.onTouchStart=function(t){var e,n,o;if(t.targetTouches.length>1)return!0;if(e=this.getTargetElementFromEventTarget(t.target),n=t.targetTouches[0],r){if(o=window.getSelection(),o.rangeCount&&!o.isCollapsed)return!0;if(!a){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return t.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(e)}}return this.trackingClick=!0,this.trackingClickStart=t.timeStamp,this.targetElement=e,this.touchStartX=n.pageX,this.touchStartY=n.pageY,t.timeStamp-this.lastClickTimen||Math.abs(e.pageY-this.touchStartY)>n?!0:!1},e.prototype.onTouchMove=function(t){return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(t.target)||this.touchHasMoved(t))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},e.prototype.findControl=function(t){return void 0!==t.control?t.control:t.htmlFor?document.getElementById(t.htmlFor):t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},e.prototype.onTouchEnd=function(t){var e,n,o,s,u,l=this.targetElement;if(!this.trackingClick)return!0;if(t.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=t.timeStamp,n=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,c&&(u=t.changedTouches[0],l=document.elementFromPoint(u.pageX-window.pageXOffset,u.pageY-window.pageYOffset)||l,l.fastClickScrollParent=this.targetElement.fastClickScrollParent),o=l.tagName.toLowerCase(),"label"===o){if(e=this.findControl(l)){if(this.focus(l),i)return!1;l=e}}else if(this.needsFocus(l))return t.timeStamp-n>100||r&&window.top!==window&&"input"===o?(this.targetElement=null,!1):(this.focus(l),this.sendClick(l,t),r&&"select"===o||(this.targetElement=null,t.preventDefault()),!1);return r&&!a&&(s=l.fastClickScrollParent,s&&s.fastClickLastScrollTop!==s.scrollTop)?!0:(this.needsClick(l)||(t.preventDefault(),this.sendClick(l,t)),!1)},e.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},e.prototype.onMouse=function(t){return this.targetElement?t.forwardedTouchEvent?!0:t.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(t.stopImmediatePropagation?t.stopImmediatePropagation():t.propagationStopped=!0,t.stopPropagation(),t.preventDefault(),!1):!0:!0},e.prototype.onClick=function(t){var e;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===t.target.type&&0===t.detail?!0:(e=this.onMouse(t),e||(this.targetElement=null),e)},e.prototype.destroy=function(){var t=this.layer;i&&(t.removeEventListener("mouseover",this.onMouse,!0),t.removeEventListener("mousedown",this.onMouse,!0),t.removeEventListener("mouseup",this.onMouse,!0)),t.removeEventListener("click",this.onClick,!0),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1),t.removeEventListener("touchcancel",this.onTouchCancel,!1)},e.notNeeded=function(t){var e,n,o,r;if("undefined"==typeof window.ontouchstart)return!0;if(n=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!i)return!0;if(e=document.querySelector("meta[name=viewport]")){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(n>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(s&&(o=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),o[1]>=10&&o[2]>=3&&(e=document.querySelector("meta[name=viewport]")))){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===t.style.msTouchAction||"manipulation"===t.style.touchAction?!0:(r=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],r>=27&&(e=document.querySelector("meta[name=viewport]"),e&&(-1!==e.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))?!0:"none"===t.style.touchAction||"manipulation"===t.style.touchAction?!0:!1)},e.attach=function(t,n){return new e(t,n)},"function"==typeof n&&"object"==typeof n.amd&&n.amd?n(function(){return e}):"undefined"!=typeof t&&t.exports?(t.exports=e.attach,t.exports.FastClick=e):window.FastClick=e}()},function(t,e,n){t.exports=n(5)},function(t,e){"use strict";function n(t){t in o||(o[t]=!0,document.dispatchEvent(new CustomEvent("o."+t)))}var o={};window.addEventListener("load",n.bind(null,"load")),window.addEventListener("load",n.bind(null,"DOMContentLoaded")),document.addEventListener("DOMContentLoaded",n.bind(null,"DOMContentLoaded")),"complete"===document.readyState?(n("load"),n("DOMContentLoaded")):"interactive"===document.readyState&&n("DOMContentLoaded")}]); diff --git a/scripts/setup.js b/scripts/setup.js index 819d71ff2..9b258e20c 100644 --- a/scripts/setup.js +++ b/scripts/setup.js @@ -1,80 +1,18 @@ (function ($) { - // Load contributors - var $contributors = $('#contributors'); - if ( $contributors.length ) { - var fail = function () { - $contributors.html('

This project would not be possible without the help of our amazing contributors on GitHub.

'); - }; - $.ajax({ - cache: false, - dataType: 'jsonp', - timeout: 3000, - type: 'GET', - url: 'https://api.github.com/repos/codeguy/php-the-right-way/contributors?per_page=100' - }).done(function (data) { - if ( data.data && data.data.length ) { - var $ul = $(''), dataLength = data.data.length; - for ( var i = 0; i < dataLength; i++ ) { - $ul.append(['
  • ', data.data[i].login, '
  • '].join('')); - } - $contributors.html($ul); - } else { - fail(); - } - }).fail(fail); - } -})(jQuery); - -(function ($) { - //Add current view's highlighting to the navigation - - /** helper for highlighting */ - function highlightNav(navLinks,id) - { - navLinks.filter('[href="/#'+id+'"]').addClass("active"); - } - - $(window).scroll(function() { - //console.log("They see me scrollin, they hatin"); - - //clear highlighting - var navLinks = $('.site-navigation a'); - navLinks.removeClass("active"); + // Attach FastClick + var attachFastClick = Origami.fastclick; + attachFastClick(document.body); - //calc current viewport - var viewTop = $(window).scrollTop(); - var viewBottom = viewTop + $(window).height(); - - //for all h1 and h2 elements, check if they are visible - //performance tweak: stop each() after the first element is found to be behind view - var previous = ""; - var foundOne = false; - var fallback = ""; - $('h1, h2').each(function(i,e) { - //get element position; - var eTop = $(e).offset().top; - var eBottom = eTop + $(e).height(); - var id=e.id; - id = id.replace("_title", ""); - - if (eTop >= viewTop) { - //if we are passed the view and no heading was highlighted yet, store previous one as fallback - if (! foundOne) { - fallback=previous; - } - if (eBottom <= viewBottom) { - highlightNav(navLinks, id); - foundOne = true; - } else { - return false; //break the each(), the rest is below - } - } - previous=id; - }); - //no h1/h2 is in the viewport, so highlight the last one above - if (! foundOne) { - highlightNav(navLinks, fallback); + // Mobile TOC menu + var $window = $(window), + $nav = $('.site-navigation'); + $nav.click(function (e) { + var $target = $(e.target); + if ($target.is($nav) && $window.width() <= 375) { + $nav.toggleClass('open'); + } + if ($target.is('a')) { + $nav.removeClass('open'); } }); })(jQuery); -