From 1f8309a862c0c7f004a7e5586b4eac1c222319d5 Mon Sep 17 00:00:00 2001 From: Ines Montani Date: Fri, 1 Apr 2016 01:24:48 +1100 Subject: [PATCH] Replace website with new version --- website/404.jade | 10 + website/README.md | 35 +- website/_data.json | 51 + website/_fabfile.py | 94 + website/_harp.json | 85 + website/_includes/_analytics.jade | 7 + website/_includes/_article.jade | 34 + website/_includes/_footer.jade | 14 + website/_includes/_functions.jade | 101 + website/_includes/_head.jade | 31 + website/_includes/_header.jade | 21 + website/_includes/_latest-posts.jade | 17 + website/_includes/_logo.jade | 5 + website/_includes/_mixins.jade | 381 +++ website/_includes/_nav.jade | 32 + website/_includes/_newsletter.jade | 21 + website/_includes/_profile.jade | 21 + website/_includes/_sidebar.jade | 12 + website/_includes/_teaser.jade | 22 + website/_layout.jade | 43 + website/assets/css/_base/_animations.sass | 23 + website/assets/css/_base/_fonts.sass | 112 + website/assets/css/_base/_grid.sass | 131 + website/assets/css/_base/_reset.sass | 75 + website/assets/css/_base/_typography.sass | 174 + website/assets/css/_components/_alerts.sass | 33 + website/assets/css/_components/_asides.sass | 69 + website/assets/css/_components/_boxes.sass | 39 + website/assets/css/_components/_buttons.sass | 75 + website/assets/css/_components/_cards.sass | 44 + website/assets/css/_components/_code.sass | 87 + website/assets/css/_components/_dividers.sass | 72 + website/assets/css/_components/_embeds.sass | 35 + website/assets/css/_components/_forms.sass | 28 + website/assets/css/_components/_icons.sass | 39 + website/assets/css/_components/_images.sass | 39 + website/assets/css/_components/_labels.sass | 46 + website/assets/css/_components/_links.sass | 60 + website/assets/css/_components/_lists.sass | 59 + website/assets/css/_components/_logo.sass | 36 + website/assets/css/_components/_misc.sass | 88 + website/assets/css/_components/_quotes.sass | 36 + website/assets/css/_components/_tables.sass | 79 + website/assets/css/_components/_tooltips.sass | 44 + website/assets/css/_layout/_article.sass | 25 + website/assets/css/_layout/_body.sass | 53 + website/assets/css/_layout/_footer.sass | 20 + website/assets/css/_layout/_header.sass | 50 + website/assets/css/_layout/_nav.sass | 108 + website/assets/css/_layout/_sidebar.sass | 65 + website/assets/css/_utils/_functions.sass | 23 + website/assets/css/_utils/_mixins.sass | 96 + website/assets/css/_variables.scss | 93 + website/assets/css/_vendors/_displacy.sass | 42 + website/assets/css/_vendors/_normalize.sass | 181 ++ website/assets/css/_vendors/_prism.sass | 77 + website/assets/css/style.sass | 60 + website/assets/css/style_blog.sass | 6 + website/assets/fonts/icomoon.eot | Bin 0 -> 5148 bytes website/assets/fonts/icomoon.svg | 27 + website/assets/fonts/icomoon.ttf | Bin 0 -> 4984 bytes website/assets/fonts/icomoon.woff | Bin 0 -> 5060 bytes website/assets/fonts/lato-bold.eot | Bin 0 -> 35215 bytes website/assets/fonts/lato-bold.svg | 2787 ++++++++++++++++ website/assets/fonts/lato-bold.ttf | Bin 0 -> 76172 bytes website/assets/fonts/lato-bold.woff | Bin 0 -> 38312 bytes website/assets/fonts/lato-bold.woff2 | Bin 0 -> 30576 bytes website/assets/fonts/lato-bolditalic.eot | Bin 0 -> 37995 bytes website/assets/fonts/lato-bolditalic.svg | 2800 ++++++++++++++++ website/assets/fonts/lato-bolditalic.ttf | Bin 0 -> 81572 bytes website/assets/fonts/lato-bolditalic.woff | Bin 0 -> 41100 bytes website/assets/fonts/lato-bolditalic.woff2 | Bin 0 -> 32900 bytes website/assets/fonts/lato-italic.eot | Bin 0 -> 37885 bytes website/assets/fonts/lato-italic.svg | 2805 +++++++++++++++++ website/assets/fonts/lato-italic.ttf | Bin 0 -> 82492 bytes website/assets/fonts/lato-italic.woff | Bin 0 -> 41084 bytes website/assets/fonts/lato-italic.woff2 | Bin 0 -> 32980 bytes website/assets/fonts/lato-regular.eot | Bin 0 -> 35026 bytes website/assets/fonts/lato-regular.svg | 2788 ++++++++++++++++ website/assets/fonts/lato-regular.ttf | Bin 0 -> 76396 bytes website/assets/fonts/lato-regular.woff | Bin 0 -> 38240 bytes website/assets/fonts/lato-regular.woff2 | Bin 0 -> 30348 bytes .../assets/fonts/sourcecodepro-semibold.eot | Bin 0 -> 24976 bytes .../assets/fonts/sourcecodepro-semibold.svg | 244 ++ .../assets/fonts/sourcecodepro-semibold.ttf | Bin 0 -> 55544 bytes .../assets/fonts/sourcecodepro-semibold.woff | Bin 0 -> 27952 bytes website/assets/fonts/worksans-bold.eot | Bin 0 -> 28428 bytes website/assets/fonts/worksans-bold.svg | 1909 +++++++++++ website/assets/fonts/worksans-bold.ttf | Bin 0 -> 66460 bytes website/assets/fonts/worksans-bold.woff | Bin 0 -> 31812 bytes website/assets/fonts/worksans-bold.woff2 | Bin 0 -> 25116 bytes website/assets/fonts/worksans-regular.eot | Bin 0 -> 26774 bytes website/assets/fonts/worksans-regular.svg | 1586 ++++++++++ website/assets/fonts/worksans-regular.ttf | Bin 0 -> 62940 bytes website/assets/fonts/worksans-regular.woff | Bin 0 -> 30088 bytes website/assets/fonts/worksans-regular.woff2 | Bin 0 -> 23644 bytes website/assets/fonts/worksans-semibold.eot | Bin 0 -> 29022 bytes website/assets/fonts/worksans-semibold.svg | 1909 +++++++++++ website/assets/fonts/worksans-semibold.ttf | Bin 0 -> 67040 bytes website/assets/fonts/worksans-semibold.woff | Bin 0 -> 32208 bytes website/assets/fonts/worksans-semibold.woff2 | Bin 0 -> 25464 bytes website/assets/img/favicon.ico | Bin 0 -> 1150 bytes website/assets/img/logo.png | Bin 0 -> 4246 bytes website/assets/img/logo.svg | 1 + website/assets/img/logos/chartbeat.png | Bin 0 -> 1764 bytes website/assets/img/logos/cytora.png | Bin 0 -> 2079 bytes website/assets/img/logos/keyreply.png | Bin 0 -> 5901 bytes website/assets/img/logos/kip.png | Bin 0 -> 3268 bytes website/assets/img/logos/signaln.png | Bin 0 -> 1291 bytes website/assets/img/logos/socrata.png | Bin 0 -> 2693 bytes website/assets/img/pattern_blue.jpg | Bin 0 -> 222353 bytes website/assets/img/pattern_red.jpg | Bin 0 -> 143953 bytes website/assets/img/profile_elmar.png | Bin 0 -> 1313 bytes website/assets/img/profile_henning.png | Bin 0 -> 91071 bytes website/assets/img/profile_ines.png | Bin 0 -> 91860 bytes website/assets/img/profile_ines_alt.png | Bin 0 -> 118606 bytes website/assets/img/profile_matt.png | Bin 0 -> 102151 bytes website/assets/img/profile_matt_alt.png | Bin 0 -> 99721 bytes website/assets/img/profile_placeholder.png | Bin 0 -> 1313 bytes website/assets/img/profile_wolfgang.png | Bin 0 -> 98714 bytes website/assets/img/social.png | Bin 0 -> 252761 bytes website/assets/img/spacy_screen.png | Bin 0 -> 515998 bytes website/assets/js/main.js | 92 + website/assets/js/prism.js | 25 + website/blog/_data.json | 187 ++ website/blog/dead-code-should-be-buried.jade | 30 + website/blog/displacy.jade | 28 + .../displacy/pizza-with-anchovies-bad.html | 14 + .../displacy/pizza-with-anchovies-good.html | 14 + .../displacy/robots-in-popular-culture.html | 14 + .../blog/eli5-computers-learn-reading.jade | 31 + website/blog/how-spacy-works.jade | 143 + website/blog/img/agpl-not-free.jpg | Bin 0 -> 345274 bytes website/blog/img/agpl-not-free_large.jpg | Bin 0 -> 600488 bytes website/blog/img/agpl-not-free_small.jpg | Bin 0 -> 100526 bytes website/blog/img/anchovies.png | Bin 0 -> 151225 bytes website/blog/img/basic-english.jpg | Bin 0 -> 323077 bytes website/blog/img/basic-english_large.jpg | Bin 0 -> 583016 bytes website/blog/img/basic-english_small.jpg | Bin 0 -> 88650 bytes website/blog/img/cython.jpg | Bin 0 -> 328880 bytes website/blog/img/cython_large.jpg | Bin 0 -> 639656 bytes website/blog/img/cython_small.jpg | Bin 0 -> 84288 bytes website/blog/img/deadcode.jpg | Bin 0 -> 333040 bytes website/blog/img/deadcode_large.jpg | Bin 0 -> 645418 bytes website/blog/img/deadcode_small.jpg | Bin 0 -> 83174 bytes website/blog/img/displacy.jpg | Bin 0 -> 38432 bytes website/blog/img/displacy_large.jpg | Bin 0 -> 42721 bytes website/blog/img/displacy_small.jpg | Bin 0 -> 21451 bytes website/blog/img/how-spacy-works.jpg | Bin 0 -> 364963 bytes website/blog/img/how-spacy-works_large.jpg | Bin 0 -> 741151 bytes website/blog/img/how-spacy-works_small.jpg | Bin 0 -> 77669 bytes website/blog/img/introducing-spacy.jpg | Bin 0 -> 248667 bytes website/blog/img/introducing-spacy_large.jpg | Bin 0 -> 373223 bytes website/blog/img/introducing-spacy_small.jpg | Bin 0 -> 84481 bytes website/blog/img/linguistic-structure.jpg | Bin 0 -> 87627 bytes website/blog/img/markup.jpg | Bin 0 -> 488608 bytes website/blog/img/markup_basscss.jpg | Bin 0 -> 21348 bytes website/blog/img/markup_bootstrap.jpg | Bin 0 -> 33933 bytes website/blog/img/markup_docs.jpg | Bin 0 -> 73732 bytes website/blog/img/markup_large.jpg | Bin 0 -> 812645 bytes website/blog/img/markup_mixins.jpg | Bin 0 -> 101381 bytes website/blog/img/markup_sections.jpg | Bin 0 -> 40888 bytes website/blog/img/markup_small.jpg | Bin 0 -> 147823 bytes website/blog/img/markup_workflow.jpg | Bin 0 -> 90331 bytes website/blog/img/pizza.jpg | Bin 0 -> 354385 bytes website/blog/img/pizza_large.jpg | Bin 0 -> 660178 bytes website/blog/img/pizza_small.jpg | Bin 0 -> 98574 bytes website/blog/img/pos-tagger.jpg | Bin 0 -> 344945 bytes website/blog/img/pos-tagger_large.jpg | Bin 0 -> 613014 bytes website/blog/img/pos-tagger_small.jpg | Bin 0 -> 91301 bytes website/blog/img/sense2vec.jpg | Bin 0 -> 289956 bytes website/blog/img/sense2vec_large.jpg | Bin 0 -> 536346 bytes website/blog/img/sense2vec_small.jpg | Bin 0 -> 76683 bytes website/blog/index.jade | 31 + website/blog/introducing-spacy.jade | 18 + website/blog/modular-markup.jade | 147 + website/blog/parsing-english-in-python.jade | 575 ++++ .../part-of-speech-pos-tagger-in-python.jade | 257 ++ website/blog/sense2vec-with-spacy.jade | 166 + website/blog/spacy-now-mit.jade | 50 + website/blog/writing-c-in-cython.jade | 96 + website/create_code_samples | 76 - website/demos/_data.json | 6 + website/demos/img/displacy.jpg | Bin 0 -> 125511 bytes website/demos/img/sense2vec.jpg | Bin 0 -> 158352 bytes website/demos/index.jade | 15 + website/docs/_annotation-specs.jade | 170 + website/docs/_api-doc.jade | 313 ++ website/docs/_api-english.jade | 273 ++ website/docs/_api-lexeme.jade | 204 ++ website/docs/_api-matcher.jade | 82 + website/docs/_api-span.jade | 307 ++ website/docs/_api-stringstore.jade | 105 + website/docs/_api-token.jade | 317 ++ website/docs/_api-vocab.jade | 157 + website/docs/_data.json | 29 + website/docs/_quickstart-examples.jade | 173 + website/docs/_quickstart-install.jade | 119 + website/docs/_tutorials.jade | 10 + website/docs/index.jade | 37 + website/docs/legacy/index.html | 933 ++++++ website/docs/legacy/resources/css/style.css | 1 + .../resources/fonts/inconsolata-bold.eot | Bin 0 -> 23547 bytes .../resources/fonts/inconsolata-bold.svg | 230 ++ .../resources/fonts/inconsolata-bold.ttf | Bin 0 -> 49932 bytes .../resources/fonts/inconsolata-bold.woff | Bin 0 -> 26296 bytes .../resources/fonts/inconsolata-bold.woff2 | Bin 0 -> 21452 bytes .../resources/fonts/inconsolata-regular.eot | Bin 0 -> 37211 bytes .../resources/fonts/inconsolata-regular.svg | 229 ++ .../resources/fonts/inconsolata-regular.ttf | Bin 0 -> 65668 bytes .../resources/fonts/inconsolata-regular.woff | Bin 0 -> 41320 bytes .../resources/fonts/inconsolata-regular.woff2 | Bin 0 -> 33932 bytes .../legacy/resources/fonts/karla-bold.eot | Bin 0 -> 8768 bytes .../legacy/resources/fonts/karla-bold.svg | 346 ++ .../legacy/resources/fonts/karla-bold.ttf | Bin 0 -> 17024 bytes .../legacy/resources/fonts/karla-bold.woff | Bin 0 -> 10804 bytes .../legacy/resources/fonts/karla-bold.woff2 | Bin 0 -> 8032 bytes .../resources/fonts/karla-bolditalic.eot | Bin 0 -> 9856 bytes .../resources/fonts/karla-bolditalic.svg | 351 +++ .../resources/fonts/karla-bolditalic.ttf | Bin 0 -> 17692 bytes .../resources/fonts/karla-bolditalic.woff | Bin 0 -> 11852 bytes .../resources/fonts/karla-bolditalic.woff2 | Bin 0 -> 9008 bytes .../legacy/resources/fonts/karla-italic.eot | Bin 0 -> 8970 bytes .../legacy/resources/fonts/karla-italic.svg | 351 +++ .../legacy/resources/fonts/karla-italic.ttf | Bin 0 -> 17544 bytes .../legacy/resources/fonts/karla-italic.woff | Bin 0 -> 11004 bytes .../legacy/resources/fonts/karla-italic.woff2 | Bin 0 -> 8188 bytes .../legacy/resources/fonts/karla-regular.eot | Bin 0 -> 8392 bytes .../legacy/resources/fonts/karla-regular.svg | 351 +++ .../legacy/resources/fonts/karla-regular.ttf | Bin 0 -> 16248 bytes .../legacy/resources/fonts/karla-regular.woff | Bin 0 -> 10396 bytes .../resources/fonts/karla-regular.woff2 | Bin 0 -> 7624 bytes website/docs/legacy/resources/img/logo.png | Bin 0 -> 1505 bytes website/docs/legacy/resources/img/logo.svg | 46 + website/docs/legacy/resources/js/prism.js | 1692 ++++++++++ website/docs/legacy/resources/js/prism.min.js | 2 + website/docs/tutorials/_data.json | 29 + .../docs/tutorials/load-new-word-vectors.jade | 66 + website/docs/tutorials/mark-adverbs.jade | 121 + website/docs/tutorials/syntax-search.jade | 76 + website/docs/tutorials/twitter-filter.jade | 154 + website/feed.xml.jade | 30 + website/index.jade | 186 ++ website/legal.jade | 77 + website/src/jade/404.jade | 14 - website/src/jade/blog/_agpl_license.jade | 116 - .../dead-code-should-be-buried/index.jade | 35 - .../blog/dead-code-should-be-buried/meta.jade | 16 - website/src/jade/blog/displacy/index.jade | 50 - website/src/jade/blog/displacy/meta.jade | 12 - .../eli5-computers-learn-reading/index.jade | 37 - .../eli5-computers-learn-reading/meta.jade | 15 - .../src/jade/blog/how-spacy-works/index.jade | 154 - .../src/jade/blog/how-spacy-works/meta.jade | 7 - website/src/jade/blog/index.jade | 58 - .../jade/blog/introducing-spacy/index.jade | 22 - .../src/jade/blog/introducing-spacy/meta.jade | 15 - .../blog/parsing-english-in-python/index.jade | 621 ---- .../blog/parsing-english-in-python/meta.jade | 15 - .../index.jade | 288 -- .../meta.jade | 12 - .../src/jade/blog/sense2vec-reddit/index.jade | 131 - .../src/jade/blog/spacy-now-mit/index.jade | 56 - website/src/jade/blog/spacy-now-mit/meta.jade | 8 - .../jade/blog/writing-c-in-cython/index.jade | 100 - .../jade/blog/writing-c-in-cython/meta.jade | 15 - website/src/jade/docs/_api.jade | 658 ---- website/src/jade/docs/_spec.jade | 113 - website/src/jade/docs/index.jade | 28 - website/src/jade/header.jade | 196 -- website/src/jade/home/_comparisons.jade | 150 - website/src/jade/home/_installation.jade | 251 -- website/src/jade/home/_online_demo.jade | 22 - website/src/jade/home/_usage.jade | 65 - website/src/jade/home/index.jade | 38 - website/src/jade/mixins.jade | 32 - website/src/jade/tutorials/_teaser.jade | 16 - .../jade/tutorials/add-a-language/index.jade | 136 - .../jade/tutorials/add-a-language/meta.jade | 8 - .../bootstrap-ner-word2vec/index.jade | 253 -- .../src/jade/tutorials/customizing-spacy.jade | 5 - .../src/jade/tutorials/dan-text-class.jade | 210 -- .../load-new-word-vectors/index.jade | 75 - .../tutorials/load-new-word-vectors/meta.jade | 8 - .../jade/tutorials/mark-adverbs/index.jade | 132 - .../src/jade/tutorials/mark-adverbs/meta.jade | 8 - website/src/jade/tutorials/multilingual.jade | 29 - .../src/jade/tutorials/set-lexeme-attrs.jade | 19 - .../jade/tutorials/syntax-search/index.jade | 91 - .../jade/tutorials/syntax-search/meta.jade | 8 - .../jade/tutorials/twitter-filter/index.jade | 167 - .../jade/tutorials/twitter-filter/meta.jade | 8 - website/styleguide.jade | 391 +++ website/team.jade | 19 + 294 files changed, 30210 insertions(+), 4620 deletions(-) create mode 100644 website/404.jade create mode 100644 website/_data.json create mode 100644 website/_fabfile.py create mode 100644 website/_harp.json create mode 100644 website/_includes/_analytics.jade create mode 100644 website/_includes/_article.jade create mode 100644 website/_includes/_footer.jade create mode 100644 website/_includes/_functions.jade create mode 100644 website/_includes/_head.jade create mode 100644 website/_includes/_header.jade create mode 100644 website/_includes/_latest-posts.jade create mode 100644 website/_includes/_logo.jade create mode 100644 website/_includes/_mixins.jade create mode 100644 website/_includes/_nav.jade create mode 100644 website/_includes/_newsletter.jade create mode 100644 website/_includes/_profile.jade create mode 100644 website/_includes/_sidebar.jade create mode 100644 website/_includes/_teaser.jade create mode 100644 website/_layout.jade create mode 100644 website/assets/css/_base/_animations.sass create mode 100644 website/assets/css/_base/_fonts.sass create mode 100644 website/assets/css/_base/_grid.sass create mode 100644 website/assets/css/_base/_reset.sass create mode 100644 website/assets/css/_base/_typography.sass create mode 100644 website/assets/css/_components/_alerts.sass create mode 100644 website/assets/css/_components/_asides.sass create mode 100644 website/assets/css/_components/_boxes.sass create mode 100644 website/assets/css/_components/_buttons.sass create mode 100644 website/assets/css/_components/_cards.sass create mode 100644 website/assets/css/_components/_code.sass create mode 100644 website/assets/css/_components/_dividers.sass create mode 100644 website/assets/css/_components/_embeds.sass create mode 100644 website/assets/css/_components/_forms.sass create mode 100644 website/assets/css/_components/_icons.sass create mode 100644 website/assets/css/_components/_images.sass create mode 100644 website/assets/css/_components/_labels.sass create mode 100644 website/assets/css/_components/_links.sass create mode 100644 website/assets/css/_components/_lists.sass create mode 100644 website/assets/css/_components/_logo.sass create mode 100644 website/assets/css/_components/_misc.sass create mode 100644 website/assets/css/_components/_quotes.sass create mode 100644 website/assets/css/_components/_tables.sass create mode 100644 website/assets/css/_components/_tooltips.sass create mode 100644 website/assets/css/_layout/_article.sass create mode 100644 website/assets/css/_layout/_body.sass create mode 100644 website/assets/css/_layout/_footer.sass create mode 100644 website/assets/css/_layout/_header.sass create mode 100644 website/assets/css/_layout/_nav.sass create mode 100644 website/assets/css/_layout/_sidebar.sass create mode 100644 website/assets/css/_utils/_functions.sass create mode 100644 website/assets/css/_utils/_mixins.sass create mode 100644 website/assets/css/_variables.scss create mode 100644 website/assets/css/_vendors/_displacy.sass create mode 100644 website/assets/css/_vendors/_normalize.sass create mode 100644 website/assets/css/_vendors/_prism.sass create mode 100644 website/assets/css/style.sass create mode 100644 website/assets/css/style_blog.sass create mode 100644 website/assets/fonts/icomoon.eot create mode 100644 website/assets/fonts/icomoon.svg create mode 100644 website/assets/fonts/icomoon.ttf create mode 100644 website/assets/fonts/icomoon.woff create mode 100755 website/assets/fonts/lato-bold.eot create mode 100755 website/assets/fonts/lato-bold.svg create mode 100755 website/assets/fonts/lato-bold.ttf create mode 100755 website/assets/fonts/lato-bold.woff create mode 100755 website/assets/fonts/lato-bold.woff2 create mode 100755 website/assets/fonts/lato-bolditalic.eot create mode 100755 website/assets/fonts/lato-bolditalic.svg create mode 100755 website/assets/fonts/lato-bolditalic.ttf create mode 100755 website/assets/fonts/lato-bolditalic.woff create mode 100755 website/assets/fonts/lato-bolditalic.woff2 create mode 100755 website/assets/fonts/lato-italic.eot create mode 100755 website/assets/fonts/lato-italic.svg create mode 100755 website/assets/fonts/lato-italic.ttf create mode 100755 website/assets/fonts/lato-italic.woff create mode 100755 website/assets/fonts/lato-italic.woff2 create mode 100755 website/assets/fonts/lato-regular.eot create mode 100755 website/assets/fonts/lato-regular.svg create mode 100755 website/assets/fonts/lato-regular.ttf create mode 100755 website/assets/fonts/lato-regular.woff create mode 100755 website/assets/fonts/lato-regular.woff2 create mode 100644 website/assets/fonts/sourcecodepro-semibold.eot create mode 100644 website/assets/fonts/sourcecodepro-semibold.svg create mode 100644 website/assets/fonts/sourcecodepro-semibold.ttf create mode 100644 website/assets/fonts/sourcecodepro-semibold.woff create mode 100755 website/assets/fonts/worksans-bold.eot create mode 100755 website/assets/fonts/worksans-bold.svg create mode 100755 website/assets/fonts/worksans-bold.ttf create mode 100755 website/assets/fonts/worksans-bold.woff create mode 100755 website/assets/fonts/worksans-bold.woff2 create mode 100755 website/assets/fonts/worksans-regular.eot create mode 100755 website/assets/fonts/worksans-regular.svg create mode 100755 website/assets/fonts/worksans-regular.ttf create mode 100755 website/assets/fonts/worksans-regular.woff create mode 100755 website/assets/fonts/worksans-regular.woff2 create mode 100755 website/assets/fonts/worksans-semibold.eot create mode 100755 website/assets/fonts/worksans-semibold.svg create mode 100755 website/assets/fonts/worksans-semibold.ttf create mode 100755 website/assets/fonts/worksans-semibold.woff create mode 100755 website/assets/fonts/worksans-semibold.woff2 create mode 100644 website/assets/img/favicon.ico create mode 100644 website/assets/img/logo.png create mode 100644 website/assets/img/logo.svg create mode 100644 website/assets/img/logos/chartbeat.png create mode 100644 website/assets/img/logos/cytora.png create mode 100644 website/assets/img/logos/keyreply.png create mode 100644 website/assets/img/logos/kip.png create mode 100644 website/assets/img/logos/signaln.png create mode 100644 website/assets/img/logos/socrata.png create mode 100644 website/assets/img/pattern_blue.jpg create mode 100644 website/assets/img/pattern_red.jpg create mode 100644 website/assets/img/profile_elmar.png create mode 100644 website/assets/img/profile_henning.png create mode 100644 website/assets/img/profile_ines.png create mode 100644 website/assets/img/profile_ines_alt.png create mode 100644 website/assets/img/profile_matt.png create mode 100644 website/assets/img/profile_matt_alt.png create mode 100644 website/assets/img/profile_placeholder.png create mode 100644 website/assets/img/profile_wolfgang.png create mode 100644 website/assets/img/social.png create mode 100644 website/assets/img/spacy_screen.png create mode 100644 website/assets/js/main.js create mode 100644 website/assets/js/prism.js create mode 100644 website/blog/_data.json create mode 100644 website/blog/dead-code-should-be-buried.jade create mode 100644 website/blog/displacy.jade create mode 100644 website/blog/displacy/pizza-with-anchovies-bad.html create mode 100644 website/blog/displacy/pizza-with-anchovies-good.html create mode 100644 website/blog/displacy/robots-in-popular-culture.html create mode 100644 website/blog/eli5-computers-learn-reading.jade create mode 100644 website/blog/how-spacy-works.jade create mode 100644 website/blog/img/agpl-not-free.jpg create mode 100644 website/blog/img/agpl-not-free_large.jpg create mode 100644 website/blog/img/agpl-not-free_small.jpg create mode 100644 website/blog/img/anchovies.png create mode 100644 website/blog/img/basic-english.jpg create mode 100644 website/blog/img/basic-english_large.jpg create mode 100644 website/blog/img/basic-english_small.jpg create mode 100644 website/blog/img/cython.jpg create mode 100644 website/blog/img/cython_large.jpg create mode 100644 website/blog/img/cython_small.jpg create mode 100644 website/blog/img/deadcode.jpg create mode 100644 website/blog/img/deadcode_large.jpg create mode 100644 website/blog/img/deadcode_small.jpg create mode 100644 website/blog/img/displacy.jpg create mode 100644 website/blog/img/displacy_large.jpg create mode 100644 website/blog/img/displacy_small.jpg create mode 100644 website/blog/img/how-spacy-works.jpg create mode 100644 website/blog/img/how-spacy-works_large.jpg create mode 100644 website/blog/img/how-spacy-works_small.jpg create mode 100644 website/blog/img/introducing-spacy.jpg create mode 100644 website/blog/img/introducing-spacy_large.jpg create mode 100644 website/blog/img/introducing-spacy_small.jpg create mode 100644 website/blog/img/linguistic-structure.jpg create mode 100644 website/blog/img/markup.jpg create mode 100644 website/blog/img/markup_basscss.jpg create mode 100644 website/blog/img/markup_bootstrap.jpg create mode 100644 website/blog/img/markup_docs.jpg create mode 100644 website/blog/img/markup_large.jpg create mode 100644 website/blog/img/markup_mixins.jpg create mode 100644 website/blog/img/markup_sections.jpg create mode 100644 website/blog/img/markup_small.jpg create mode 100644 website/blog/img/markup_workflow.jpg create mode 100644 website/blog/img/pizza.jpg create mode 100644 website/blog/img/pizza_large.jpg create mode 100644 website/blog/img/pizza_small.jpg create mode 100644 website/blog/img/pos-tagger.jpg create mode 100644 website/blog/img/pos-tagger_large.jpg create mode 100644 website/blog/img/pos-tagger_small.jpg create mode 100644 website/blog/img/sense2vec.jpg create mode 100644 website/blog/img/sense2vec_large.jpg create mode 100644 website/blog/img/sense2vec_small.jpg create mode 100644 website/blog/index.jade create mode 100644 website/blog/introducing-spacy.jade create mode 100644 website/blog/modular-markup.jade create mode 100644 website/blog/parsing-english-in-python.jade create mode 100644 website/blog/part-of-speech-pos-tagger-in-python.jade create mode 100644 website/blog/sense2vec-with-spacy.jade create mode 100644 website/blog/spacy-now-mit.jade create mode 100644 website/blog/writing-c-in-cython.jade delete mode 100755 website/create_code_samples create mode 100644 website/demos/_data.json create mode 100644 website/demos/img/displacy.jpg create mode 100644 website/demos/img/sense2vec.jpg create mode 100644 website/demos/index.jade create mode 100644 website/docs/_annotation-specs.jade create mode 100644 website/docs/_api-doc.jade create mode 100644 website/docs/_api-english.jade create mode 100644 website/docs/_api-lexeme.jade create mode 100644 website/docs/_api-matcher.jade create mode 100644 website/docs/_api-span.jade create mode 100644 website/docs/_api-stringstore.jade create mode 100644 website/docs/_api-token.jade create mode 100644 website/docs/_api-vocab.jade create mode 100644 website/docs/_data.json create mode 100644 website/docs/_quickstart-examples.jade create mode 100644 website/docs/_quickstart-install.jade create mode 100644 website/docs/_tutorials.jade create mode 100644 website/docs/index.jade create mode 100644 website/docs/legacy/index.html create mode 100755 website/docs/legacy/resources/css/style.css create mode 100644 website/docs/legacy/resources/fonts/inconsolata-bold.eot create mode 100644 website/docs/legacy/resources/fonts/inconsolata-bold.svg create mode 100644 website/docs/legacy/resources/fonts/inconsolata-bold.ttf create mode 100644 website/docs/legacy/resources/fonts/inconsolata-bold.woff create mode 100644 website/docs/legacy/resources/fonts/inconsolata-bold.woff2 create mode 100644 website/docs/legacy/resources/fonts/inconsolata-regular.eot create mode 100644 website/docs/legacy/resources/fonts/inconsolata-regular.svg create mode 100644 website/docs/legacy/resources/fonts/inconsolata-regular.ttf create mode 100644 website/docs/legacy/resources/fonts/inconsolata-regular.woff create mode 100644 website/docs/legacy/resources/fonts/inconsolata-regular.woff2 create mode 100644 website/docs/legacy/resources/fonts/karla-bold.eot create mode 100644 website/docs/legacy/resources/fonts/karla-bold.svg create mode 100644 website/docs/legacy/resources/fonts/karla-bold.ttf create mode 100644 website/docs/legacy/resources/fonts/karla-bold.woff create mode 100644 website/docs/legacy/resources/fonts/karla-bold.woff2 create mode 100644 website/docs/legacy/resources/fonts/karla-bolditalic.eot create mode 100644 website/docs/legacy/resources/fonts/karla-bolditalic.svg create mode 100644 website/docs/legacy/resources/fonts/karla-bolditalic.ttf create mode 100644 website/docs/legacy/resources/fonts/karla-bolditalic.woff create mode 100644 website/docs/legacy/resources/fonts/karla-bolditalic.woff2 create mode 100644 website/docs/legacy/resources/fonts/karla-italic.eot create mode 100644 website/docs/legacy/resources/fonts/karla-italic.svg create mode 100644 website/docs/legacy/resources/fonts/karla-italic.ttf create mode 100644 website/docs/legacy/resources/fonts/karla-italic.woff create mode 100644 website/docs/legacy/resources/fonts/karla-italic.woff2 create mode 100644 website/docs/legacy/resources/fonts/karla-regular.eot create mode 100644 website/docs/legacy/resources/fonts/karla-regular.svg create mode 100644 website/docs/legacy/resources/fonts/karla-regular.ttf create mode 100644 website/docs/legacy/resources/fonts/karla-regular.woff create mode 100644 website/docs/legacy/resources/fonts/karla-regular.woff2 create mode 100644 website/docs/legacy/resources/img/logo.png create mode 100644 website/docs/legacy/resources/img/logo.svg create mode 100644 website/docs/legacy/resources/js/prism.js create mode 100644 website/docs/legacy/resources/js/prism.min.js create mode 100644 website/docs/tutorials/_data.json create mode 100644 website/docs/tutorials/load-new-word-vectors.jade create mode 100644 website/docs/tutorials/mark-adverbs.jade create mode 100644 website/docs/tutorials/syntax-search.jade create mode 100644 website/docs/tutorials/twitter-filter.jade create mode 100644 website/feed.xml.jade create mode 100644 website/index.jade create mode 100644 website/legal.jade delete mode 100644 website/src/jade/404.jade delete mode 100644 website/src/jade/blog/_agpl_license.jade delete mode 100644 website/src/jade/blog/dead-code-should-be-buried/index.jade delete mode 100644 website/src/jade/blog/dead-code-should-be-buried/meta.jade delete mode 100644 website/src/jade/blog/displacy/index.jade delete mode 100644 website/src/jade/blog/displacy/meta.jade delete mode 100644 website/src/jade/blog/eli5-computers-learn-reading/index.jade delete mode 100644 website/src/jade/blog/eli5-computers-learn-reading/meta.jade delete mode 100644 website/src/jade/blog/how-spacy-works/index.jade delete mode 100644 website/src/jade/blog/how-spacy-works/meta.jade delete mode 100644 website/src/jade/blog/index.jade delete mode 100644 website/src/jade/blog/introducing-spacy/index.jade delete mode 100644 website/src/jade/blog/introducing-spacy/meta.jade delete mode 100644 website/src/jade/blog/parsing-english-in-python/index.jade delete mode 100644 website/src/jade/blog/parsing-english-in-python/meta.jade delete mode 100644 website/src/jade/blog/part-of-speech-POS-tagger-in-python/index.jade delete mode 100644 website/src/jade/blog/part-of-speech-POS-tagger-in-python/meta.jade delete mode 100644 website/src/jade/blog/sense2vec-reddit/index.jade delete mode 100644 website/src/jade/blog/spacy-now-mit/index.jade delete mode 100644 website/src/jade/blog/spacy-now-mit/meta.jade delete mode 100644 website/src/jade/blog/writing-c-in-cython/index.jade delete mode 100644 website/src/jade/blog/writing-c-in-cython/meta.jade delete mode 100644 website/src/jade/docs/_api.jade delete mode 100644 website/src/jade/docs/_spec.jade delete mode 100644 website/src/jade/docs/index.jade delete mode 100644 website/src/jade/header.jade delete mode 100644 website/src/jade/home/_comparisons.jade delete mode 100644 website/src/jade/home/_installation.jade delete mode 100644 website/src/jade/home/_online_demo.jade delete mode 100644 website/src/jade/home/_usage.jade delete mode 100644 website/src/jade/home/index.jade delete mode 100644 website/src/jade/mixins.jade delete mode 100644 website/src/jade/tutorials/_teaser.jade delete mode 100644 website/src/jade/tutorials/add-a-language/index.jade delete mode 100644 website/src/jade/tutorials/add-a-language/meta.jade delete mode 100644 website/src/jade/tutorials/bootstrap-ner-word2vec/index.jade delete mode 100644 website/src/jade/tutorials/customizing-spacy.jade delete mode 100644 website/src/jade/tutorials/dan-text-class.jade delete mode 100644 website/src/jade/tutorials/load-new-word-vectors/index.jade delete mode 100644 website/src/jade/tutorials/load-new-word-vectors/meta.jade delete mode 100644 website/src/jade/tutorials/mark-adverbs/index.jade delete mode 100644 website/src/jade/tutorials/mark-adverbs/meta.jade delete mode 100644 website/src/jade/tutorials/multilingual.jade delete mode 100644 website/src/jade/tutorials/set-lexeme-attrs.jade delete mode 100644 website/src/jade/tutorials/syntax-search/index.jade delete mode 100644 website/src/jade/tutorials/syntax-search/meta.jade delete mode 100644 website/src/jade/tutorials/twitter-filter/index.jade delete mode 100644 website/src/jade/tutorials/twitter-filter/meta.jade create mode 100644 website/styleguide.jade create mode 100644 website/team.jade diff --git a/website/404.jade b/website/404.jade new file mode 100644 index 000000000..9ea96e237 --- /dev/null +++ b/website/404.jade @@ -0,0 +1,10 @@ +include _includes/_mixins + +//- 404 Error +//- ============================================================================ + ++lead.text-center Ooops, this page does not exist. Click #[a(href='javascript:history.go(-1)') here] to go back or check out one of the latest posts below. + ++divider('bottom') + +!=partial('_includes/_latest-posts', { max: 3 } ) diff --git a/website/README.md b/website/README.md index 928c9591e..b0db3f3ca 100644 --- a/website/README.md +++ b/website/README.md @@ -1,29 +1,22 @@ -Source for spacy.io -============================== +# Source files for the spacy.io website and docs -This directory contains the source for official spaCy website at http://spacy.io/. +The [spacy.io](https://spacy.io) website is implemented in [Jade (aka Pug)](https://www.jade-lang.org), and is built or served by [Harp](https://harpjs.com). -Fixes, updates and suggestions are welcome. +## Building the site +To build the site and start making changes: -Releases --------- -Changes made to this directory go live on spacy.io. + sudo npm install --global harp + git clone https://github.com/spacy-io/website + cd website + harp server +This will serve the site on [http://localhost:9000](http://localhost:9000). You can then edit the jade source and refresh the page to see your changes. -The Stack --------- -The site is built with the [Jade](http://jade-lang.com/) template language. +## Reading the source -See [fabfile.py](/fabfile.py) under ```web()``` for more +Jade is an extensible templating language with a readable syntax, that compiles to HTML. +The website source makes extensive use of Jade mixins, so that the design system is abstracted away from the content you're +writing. You can read more about our approach in our blog post, ["Rebuilding a Site with Modular Markup"](https://spacy.io/blog/modular-markup). - -Developing --------- -To make and test changes -``` - npm install jade --global - fab web - cd website/site; python -m SimpleHTTPServer 8000; cd - -``` -Then visit [localhost:8000](http://localhost:8000) +If you want to write or edit the pages, the site's [styleguide](http://spacy.io/styleguide) serves as a useful reference of the available mixins. diff --git a/website/_data.json b/website/_data.json new file mode 100644 index 000000000..5a7c17ff7 --- /dev/null +++ b/website/_data.json @@ -0,0 +1,51 @@ +{ + "index": { + "landing": true + }, + + "feed": { + "layout": false + }, + + "robots": { + "layout": false + }, + + "404": { + "title": "404 Error", + "asides": false + }, + + "team": { + "title": "Team" + }, + + "legal": { + "title": "Legal & Imprint", + "sidebar": true, + "asides": true + }, + + "styleguide": { + "title" : "Styleguide", + "standalone" : true, + "asides": true, + + "sidebar": { + "About": [ + ["Introduction", "#section-introduction", "introduction"] + ], + "Design": [ + ["Colors", "#section-colors", "colors"], + ["Logo", "#section-logo", "logo"], + ["Typography", "#section-typography", "typography"], + ["Grid", "#section-grid", "grid"], + ["Elements", "#section-elements", "elements"], + ["Components", "#section-components", "components"] + ], + "Code": [ + ["Source", "#section-source", "source"] + ] + } + } +} diff --git a/website/_fabfile.py b/website/_fabfile.py new file mode 100644 index 000000000..d31ea67eb --- /dev/null +++ b/website/_fabfile.py @@ -0,0 +1,94 @@ +from __future__ import print_function + +from fabric.api import local +import os +import hashlib +import mimetypes +import shutil + +import boto.s3.connection + + +mimetypes.init() + +buckets = { + 'staging': 'staging.spacy.io', + 'production': 'spacy.io', +} + + +def compile(): + shutil.rmtree('www') + local('NODE_ENV=s3 harp compile') + + +def publish(env='staging', site_path='www'): + os.environ['S3_USE_SIGV4'] = 'True' + conn = boto.s3.connection.S3Connection(host='s3.eu-central-1.amazonaws.com', + calling_format=boto.s3.connection.OrdinaryCallingFormat()) + bucket = conn.get_bucket(buckets[env], validate=False) + + keys = {k.name: k for k in bucket.list()} + keys_left = set(keys) + + for root, dirnames, filenames in os.walk(site_path): + for dirname in dirnames: + target = os.path.relpath(os.path.join(root, dirname), site_path) + source = os.path.join(target, 'index.html') + + if os.path.exists(os.path.join(root, dirname, 'index.html')): + redirect = '//%s/%s' % (bucket.name, target) + key = bucket.lookup(source) + if not key: + key = bucket.new_key(source) + key.set_redirect(redirect) + print('setting redirect for %s' % target) + elif key.get_redirect() != redirect: + key.set_redirect(redirect) + print('setting redirect for %s' % target) + + if source in keys_left: + keys_left.remove(source) + + for filename in filenames: + source = os.path.join(root, filename) + + if filename == 'index.html': + target = os.path.normpath(os.path.relpath(root, site_path)) + if target == '.': + target = filename + else: + target = os.path.normpath(os.path.join(os.path.relpath(root, site_path), filename)) + if target.endswith('.html'): + target = target[:-len('.html')] + + content_type = mimetypes.guess_type(source)[0] + cache_control = 'no-transform,public,max-age=300,s-maxage=300' + checksum = hashlib.md5(open(source).read()).hexdigest() + + if (target not in keys + or keys[target].etag.replace('"', '') != checksum): + + key = bucket.new_key(target) + if content_type: + key.content_type = content_type + key.set_contents_from_filename(source, + headers={'Cache-Control': cache_control}) + print('uploading %s' % target) + + elif content_type: + key = bucket.lookup(target) + if (key + and (key.content_type != content_type + or key.cache_control != cache_control)): + key.copy(key.bucket, key.name, preserve_acl=True, + metadata={'Content-Type': content_type, + 'Cache-Control': cache_control}) + print('update headers %s' % target) + + if target in keys_left: + keys_left.remove(target) + + for key_name in keys_left: + print('deleting %s' % key_name) + bucket.delete_key(key_name) diff --git a/website/_harp.json b/website/_harp.json new file mode 100644 index 000000000..6510f73cf --- /dev/null +++ b/website/_harp.json @@ -0,0 +1,85 @@ +{ + "globals": { + "title": "spaCy.io", + "sitename": "spaCy", + "slogan": "Industrial-strength Natural Language Processing", + "description": "spaCy is a free open-source library featuring state-of-the-art speed and accuracy and a powerful Python API.", + "url": "https://spacy.io", + "email": "contact@spacy.io", + "company": "spaCy GmbH", + "team_members": [ "henning", "matt", "wolfgang", "elmar", "ines" ], + + "navigation": { "Docs": "docs", "Demos": "demos", "Team": "team", "Blog": "blog" }, + "profiles": { "twitter": "spacy_io", "github": "spacy-io", "reddit": "spacynlp", "medium": "spacy" }, + "google_analytics": "UA-58931649-1", + + "stylesheets": { "default": "style", "blog": "style_blog" }, + "scripts" : [ "main", "prism" ], + "feed": "feed.xml", + "image_sizes" : { "small" : "640", "medium": "1440", "large": "2000" }, + "default_syntax" : "python", + + "spacy_version": "0.100.6", + "spacy_stars": "1500", + "github_settings": { "user": "spacy-io", "repo": "spacy" }, + + "apis": { + "displacy": "https://displacy.spacy.io/", + "sense2vec": "https://sense2vec.spacy.io/api/similarity/reddit/" + }, + + "authors" : { + "matt" : { + "name" : "Matthew Honnibal", + "title": "CTO", + "description" : "is co-founder and CTO of spaCy. He studied linguistics as an undergrad, and never thought he'd be a programmer. By 2009 he had a PhD in computer science, and in 2014 he left academia to write spaCy. He's from Sydney and lives in Berlin.", + "links": { + "twitter": [ "https://twitter.com/honnibal", "Twitter" ], + "website": [ "https://www.semanticscholar.org/search?q=Matthew%20Honnibal", "Semantic Scholar" ] + } + }, + + "henning": { + "name": "Henning Peters", + "title": "CEO", + "description": "is co-founder and CEO of spaCy. He holds a MSc in computer science and has been co-founder and CTO of Skoobe and Absolventa. His passions are uncommon languages and backcountry skiing.", + "links": { + "twitter": [ "https://twitter.com/henningpeters", "Twitter"], + "linkedin": [ "https://de.linkedin.com/in/hepeters", "LinkedIn"], + "github": [ "https://github.com/henningpeters", "GitHub"] + } + }, + + "ines": { + "name": "Ines Montani", + "title": "Front-End", + "description": "As Head of Front-End, Ines is in charge of showing people what spaCy can do. She develops, designs and implements our interactive demos and the spacy.io website. Ines has a degree in media, linguistics and communications, and over ten years experience in web development.", + "links": { + "twitter": [ "https://twitter.com/_inesmontani", "Twitter" ], + "codepen": [ "https://codepen.io/inesmontani", "Codepen"], + "github": [ "https://github.com/inesmontani", "GitHub"], + "website": [ "http://ines.io", "Blog" ] + } + }, + + "wolfgang": { + "name": "Wolfgang Seeker", + "title": "NLP Engineer", + "description": "is a computational linguist from Germany. He is fascinated with the complexity and variety of human language, and spent his PhD looking for ways to make NLP work well with any kind of language in the world. He joined spaCy to build effective and truly multilingual NLP software.", + "links": { + "website": [ "https://www.semanticscholar.org/search?q=Wolfgang%20Seeker", "Semantic Scholar" ] + } + }, + + "elmar": { + "name": "Elmar Haußmann", + "title": "NLP Engineer", + "description": "is an NLP engineer at spaCy, passionate about deep learning. He has a background in both, academic research, with a PhD in computer science, and industry, as a former consultant and software engineer at IBM. Originally from Stuttgart, the avid snowboarder and mountain biker doesn't only ride powder and trails but also covers distances via plane between the spaCy office in Berlin and his new home in Beijing.", + "links": { + "github": [ "https://github.com/elmar-haussmann", "GitHub"], + "twitter": [ "https://twitter.com/elhaussmann", "Twitter" ] + } + } + } + } +} diff --git a/website/_includes/_analytics.jade b/website/_includes/_analytics.jade new file mode 100644 index 000000000..ab322b800 --- /dev/null +++ b/website/_includes/_analytics.jade @@ -0,0 +1,7 @@ +if environment != 'development' + script. + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + ga('create', '#{google_analytics}', 'auto'); ga('send', 'pageview'); diff --git a/website/_includes/_article.jade b/website/_includes/_article.jade new file mode 100644 index 000000000..e39bd3649 --- /dev/null +++ b/website/_includes/_article.jade @@ -0,0 +1,34 @@ +include ../_includes/_mixins + +//- Article +//- ============================================================================ + +article.article(id=current.source) + + header.article-header + +h2.article-title=title + .article-meta + if author + | by #[a.link(href=(authors[author].url || url) target='_blank')=authors[author].name] on + | #[+date(date)] + + .article-body!=yield + + footer.article-footer + + +grid('padding', 'align-right', 'valign-center') + +tweet(title) + + if links + for link, index in links + div: +button('primary', 'small', index.toLowerCase())(href=link target='_blank') + +icon(index.toLowerCase(), 'medium', 'secondary') + | Discussion on #{index} + + if author + +divider + + !=partial('_profile', { label: 'About the Author', style: 'alt' }) + +!=partial('_newsletter', { divider: 'both' }) +!=partial('_latest-posts', { max: 2, _section: _section } ) diff --git a/website/_includes/_footer.jade b/website/_includes/_footer.jade new file mode 100644 index 000000000..017cdfa86 --- /dev/null +++ b/website/_includes/_footer.jade @@ -0,0 +1,14 @@ +include _mixins + +//- Footer +//- ============================================================================ + +footer.footer + span © #{new Date().getFullYear()} #{company} + a(href='/legal') Legal / Imprint + + a(href='https://twitter.com/' + profiles.twitter target='_blank' aria-label="Twitter") + +icon('twitter', 'secondary') + + a(href='/feed.xml' target='_blank' aria-label="RSS Feed") + +icon('feed', 'secondary') diff --git a/website/_includes/_functions.jade b/website/_includes/_functions.jade new file mode 100644 index 000000000..b58eea883 --- /dev/null +++ b/website/_includes/_functions.jade @@ -0,0 +1,101 @@ +//- Functions +//- ============================================================================ + +//- Full page title + +- function getPageTitle() { +- if(current.path[0] == 'blog' && current.source != 'index') title += ' | Blog'; +- return (current.path[0] == 'index') ? sitename + ' | ' + slogan : title + ' | ' + sitename; +- } + + +//- Get current URL + current - [string] current path + +- function getCurrentUrl() { +- var base = current.path; +- if(current.source == 'index') base.pop(); +- return url + '/' + base.join('/'); +- } + + +//- Assign flexbox order, elements are assigned negative values to always move + them to the start of a flexbox in the correct order (i.e. -3, -2, -1) + counter - [integer] index of current item + max - [integer] amount of items in total + start - [integer] index of start position, i.e. 0 -> oder: -1 (optional) + +- function assignOrder(counter, max, start) { +- if(counter >= 0 && counter < max) return "order: -" + (max - counter + (start || 0)); +- } + + +//- Create Twitter share URL + current - [string] current path + tweet - [string] text to be shared with link + +- function twitterShareUrl(current, tweet) { +- return "https://twitter.com/share?text=" + tweet + "&url=" + getCurrentUrl(current) + ";via=" + profiles.twitter; +- } + + +//- Add prefix to each item in an array (used for modifier CSS classes) + array - [array] array of strings, taken from mixin arguments + prefix - [string] class prefix (i.e. 'button--') + +- function prefixArgs(array, prefix) { +- for(var i = 0; i < array.length; i++) { +- array[i] = prefix + array[i]; +- } +- return array.join(' '); +- } + + +//- Convert date to human readable and timestamp format + input - [string] date in the format YYYY-MM-DD + +- function convertDate(input) { +- var dates = []; +- var months = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ]; +- var date = new Date(input); +- dates.full = months[date.getMonth()] + ' ' + date.getDate() + ', ' + date.getFullYear(); +- dates.timestamp = JSON.parse(JSON.stringify(date)); +- return dates; +- } + + +//- Convert date to valid RSS pubDate + input - [string] date in the format YYYY-MM-DD + +- function convertPubDate(input) { +- var date = new Date(input); +- var pieces = date.toString().split(' '); +- var offsetTime = pieces[5].match(/[-+]\d{4}/); +- var offset = (offsetTime) ? offsetTime : pieces[5]; +- var parts = [ pieces[0] + ',', pieces[2], pieces[1], pieces[3], pieces[4], offset ]; +- return parts.join(' '); +- } + + +//- Compile scrset attribute for hero images + image - [object] article image object from _data.json + path - [string] relative path to image folder + +- function getScrset(image, path) { +- var scrset = path + image.file + ' ' + image_sizes.medium + 'w'; +- if(image.file_small) scrset += ', ' + path + image.file_small + ' ' + image_sizes.small + 'w'; +- if(image.file_large) scrset += ', ' + path + image.file_large + ' ' + image_sizes.large + 'w'; +- return scrset; +- } + + +//- Get meta image + +- function getMetaImage() { +- if(current.path[0] == 'blog' && image && image.file) { +- return url + '/blog/img/' + image.file; +- } +- else { +- return url + '/assets/img/social.png'; +- } +- } diff --git a/website/_includes/_head.jade b/website/_includes/_head.jade new file mode 100644 index 000000000..96c4d0154 --- /dev/null +++ b/website/_includes/_head.jade @@ -0,0 +1,31 @@ +include _mixins + +- var is_blog = (_section == 'blog') + + +//- Head +//- ============================================================================ + +head + title=getPageTitle() + + meta(charset='utf-8') + meta(name="viewport" content="width=device-width, initial-scale=1.0") + meta(name='referrer' content='always') + + meta(property='og:type' content='website') + meta(property='og:site_name' content=sitename) + meta(property='og:url' content=getCurrentUrl()) + meta(property='og:title' content=title) + meta(property='og:description' content=description) + meta(property='og:image' content=getMetaImage()) + + meta(name='twitter:card' content='summary_large_image') + meta(name='twitter:site' content='@' + profiles.twitter) + meta(name='twitter:title' content=title) + meta(name='twitter:description' content=description) + meta(name='twitter:image' content=getMetaImage()) + + link(rel='icon' type='image/x-icon' href='/assets/img/favicon.ico') + link(href='/assets/css/' + ((is_blog) ? stylesheets.blog : stylesheets.default) + '.css' rel='stylesheet') + link(href='/' + feed rel='alternate' type='application/rss+xml' title='RSS') diff --git a/website/_includes/_header.jade b/website/_includes/_header.jade new file mode 100644 index 000000000..345073c71 --- /dev/null +++ b/website/_includes/_header.jade @@ -0,0 +1,21 @@ +include _mixins + +//- Header +//- ============================================================================ + +header.header(class=(image) ? 'hero' : '') + + if image + img(srcset=getScrset(image, 'img/') alt=image.alt sizes='100vw') + + if image.credit + .hero-credit + if image.url + a(href=image.url target='_blank')=image.credit + + else + !=image.credit + + else + if !is_article && headline != false + h1.header-title=title diff --git a/website/_includes/_latest-posts.jade b/website/_includes/_latest-posts.jade new file mode 100644 index 000000000..f4289866b --- /dev/null +++ b/website/_includes/_latest-posts.jade @@ -0,0 +1,17 @@ +include _mixins + +- var post_counter = 0 +- var is_docs = (_section == 'docs') + + +//- Latest Posts +//- ============================================================================ + ++grid('padding') + each post, slug in ( (_section == 'docs' ) ? public.docs.tutorials._data : public.blog._data) + if slug != 'index' && slug != current.source && post_counter < (max || 3) + + +grid-col('space-between', ((max > 2 && max % 3 == 0) ? 'third' : 'half')) + !=partial('_teaser', { teaser: post, slug: slug, _root: (is_docs) ? '/docs/tutorials/' : '/blog/' }) + + - post_counter++ diff --git a/website/_includes/_logo.jade b/website/_includes/_logo.jade new file mode 100644 index 000000000..b5d2698af --- /dev/null +++ b/website/_includes/_logo.jade @@ -0,0 +1,5 @@ +//- Logo +//- ============================================================================ + +svg.logo(class=(logo_size) ? 'logo--' + logo_size : '' viewBox='0 0 675 215' width='500') + path(d='M83.6 83.3C68.3 81.5 67.2 61 47.5 62.8c-9.5 0-18.4 4-18.4 12.7 0 13.2 20.3 14.4 32.5 17.7 20.9 6.3 41 10.7 41 33.3 0 28.8-22.6 38.8-52.4 38.8-24.9 0-50.2-8.9-50.2-31.8 0-6.4 6.1-11.3 12-11.3 7.5 0 10.1 3.2 12.7 8.4 5.8 10.2 12.3 15.6 28.3 15.6 10.2 0 20.6-3.9 20.6-12.7 0-12.6-12.8-15.3-26.1-18.4-23.5-6.6-43.6-10-46-36.1C-1 34.5 91.7 32.9 97 71.9c.1 7.1-6.5 11.4-13.4 11.4zm110.2-39c32.5 0 51 27.2 51 60.8 0 33.7-17.9 60.8-51 60.8-18.4 0-29.8-7.8-38.1-19.8v44.5c0 13.4-4.3 19.8-14.1 19.8-11.9 0-14.1-7.6-14.1-19.8V61.3c0-10.6 4.4-17 14.1-17 9.1 0 14.1 7.2 14.1 17v3.6c9.2-11.6 19.7-20.6 38.1-20.6zm-7.7 98.4c19.1 0 27.6-17.6 27.6-38.1 0-20.1-8.6-38.1-27.6-38.1-19.8 0-29 16.3-29 38.1 0 21.2 9.2 38.1 29 38.1zM266.9 76c0-23.4 26.9-31.7 52.9-31.7 36.6 0 51.7 10.7 51.7 46v34c0 8.1 5 24.1 5 29 0 7.4-6.8 12-14.1 12-8.1 0-14.1-9.5-18.4-16.3-11.9 9.5-24.5 16.3-43.8 16.3-21.3 0-38.1-12.6-38.1-33.3 0-18.4 13.2-28.9 29-32.5 0 .1 51-12 51-12.1 0-15.7-5.5-22.6-22-22.6-14.5 0-21.9 4-27.5 12.7-4.5 6.6-4 10.6-12.7 10.6-6.9-.1-13-4.9-13-12.1zm43.6 70.2c22.3 0 31.8-11.8 31.8-35.3v-5c-6 2-30.3 8-36.8 9.1-7 1.4-14.1 6.6-14.1 14.9.1 9.1 9.4 16.3 19.1 16.3zM474.5 0c31.5 0 65.7 18.8 65.7 48.8 0 7.7-5.8 14.1-13.4 14.1-10.3 0-11.8-5.5-16.3-13.4-7.6-13.9-16.5-23.3-36.1-23.3-30.2-.2-43.7 25.6-43.7 57.8 0 32.4 11.2 55.8 42.4 55.8 20.7 0 32.2-12 38.1-27.6 2.4-7.1 6.7-14.1 15.6-14.1 7 0 14.1 7.2 14.1 14.8 0 31.8-32.4 53.8-65.8 53.8-36.5 0-57.2-15.4-68.5-41-5.5-12.2-9.1-24.9-9.1-42.4-.1-49.2 28.6-83.3 77-83.3zm180.3 44.3c8 0 12.7 5.2 12.7 13.4 0 3.3-2.6 9.9-3.6 13.4L625.1 173c-8.6 22.1-15.1 37.4-44.5 37.4-14 0-26.1-1.2-26.1-13.4 0-7 5.3-10.6 12.7-10.6 1.4 0 3.6.7 5 .7 2.1 0 3.6.7 5 .7 14.7 0 16.8-15.1 22-25.5l-37.4-92.6c-2.1-5-3.6-8.4-3.6-11.3 0-8.2 6.4-14.1 14.8-14.1 9.5 0 13.3 7.5 15.6 15.6l24.7 73.5L638 65.5c3.9-10.5 4.2-21.2 16.8-21.2z') diff --git a/website/_includes/_mixins.jade b/website/_includes/_mixins.jade new file mode 100644 index 000000000..cb1207673 --- /dev/null +++ b/website/_includes/_mixins.jade @@ -0,0 +1,381 @@ +include _functions + +//- Mixins +//- ============================================================================ + +//- Sections for content pages + id - [string] id, can be headline id as it's being prefixed (optional) + block - section content (block and inline elements) + +mixin section(id) + section.section(id=(id) ? 'section-' + id : '')&attributes(attributes) + block + + +//- Flexbox grid to align children elements + ...style - [strings] flexbox CSS classes without prefix (optional) + block - container content (block and inline elements) + +mixin grid(...style) + .grid(class=prefixArgs(style, 'grid--'))&attributes(attributes) + block + +mixin grid-col(...style) + .grid-col(class=prefixArgs(style, 'grid-col--'))&attributes(attributes) + block + + +//- Aside + headline - [string] Headline of aside (optional) + block - aside content (inline elements) + +mixin aside(headline) + span.aside(data-label=headline)&attributes(attributes) + span.aside-body + block + + +//- Paragraphs + block - paragraph content (inline elements) + +mixin lead + p.text-lead&attributes(attributes) + block + + +//- Various text styles + block - text (inline elements) + +mixin example + p.text-example&attributes(attributes) + block + +mixin source + span.text-source&attributes(attributes) + block + +mixin label(...style) + span(class=(style != '') ? prefixArgs(style, 'label-') : 'label')&attributes(attributes) + block + + +//- Headings with optional permalinks + id - [string] unique id (optional, no permalink without id) + source - [string] link for source button (optional) + block - headline text (inline elements) + +mixin headline(level, id, source) + if level == 2 + +h2(id, source) + block + + else if level == 3 + +h3(id, source) + block + + else if level == 4 + +h4(id, source) + block + + else if level == 5 + +h5(id, source) + block + + else + +h6(id, source) + block + +mixin h1(id, source) + h1(id=id)&attributes(attributes) + +permalink(id, source) + block + +mixin h2(id, source) + h2(id=id)&attributes(attributes) + +permalink(id, source) + block + +mixin h3(id, source) + h3(id=id)&attributes(attributes) + +permalink(id, source) + block + +mixin h4(id, source) + h4(id=id)&attributes(attributes) + +permalink(id, source) + block + +mixin h5(id, source) + h5(id=id)&attributes(attributes) + +permalink(id, source) + block + +mixin h6(id, source) + h6(id=id)&attributes(attributes) + +permalink(id, source) + block + +mixin permalink(id, source) + if id + a.permalink(href='#' + id) + block + + else + block + + if source + +button('secondary', 'small', 'source')(href=source target='_blank') Source + + +//- Button + element - [string] specifies HTML element, 'button' or 'link' + ...style - [strings] button CSS classes without prefix (optional) + block - button text (inline elements) + +mixin button(type, ...style) + - var classname = 'button-' + type + ' ' + ((style) ? prefixArgs(style, 'button--') : '') + + a.button(class=classname)&attributes(attributes) + block + +mixin form-button(type, ...style) + - var classname = 'button-' + type + ' ' + ((style) ? prefixArgs(style, 'button--') : '') + button(class=classname)&attributes(attributes) + block + + +//- Input + placeholder - [string] placeholder for input field (optional) + value - [string] value of input field (optional) + +mixin input(placeholder, value) + input.input(placeholder=placeholder value=value)&attributes(attributes) + + +//- Icon + name - [string] icon name, refers to CSS classes + size - [string] 'medium' or 'large' (optional) + type - [string] 'button' (optional) + block - description, if as a text node to the icon element it prevents line + breaks between icon and text (inline elements) + +mixin icon(type, ...style) + span(class='icon-' + type + ' ' + prefixArgs(style, 'icon--') aria-hidden="true")&attributes(attributes) + block + + +//- Image for illustration purposes + file - [string] file name (in /img) + alt - [string] descriptive alt text (optional) + caption - [string] image caption (optional) + +mixin image(file, alt, caption) + figure.image-container&attributes(attributes) + img(src='img/' + file alt=alt) + + if caption + figcaption.text-caption=caption + + block + + +//- Illustrated code view + title - [string] title of window + +mixin code-demo(title) + .x-terminal&attributes(attributes) + .x-terminal-icons: span + .x-terminal-title=title + +code.x-terminal-code + block + + +//- Data table + head - [array] column headings (optional, without headings no table + head is displayed) + ...style - [strings] table CSS classes without prefix (optional) + block - only +row (tr) + +mixin table(head, ...style) + table.table(class=prefixArgs(style, 'table--'))&attributes(attributes) + + if head + tr.table-row + each column in head + th.table-head-cell=column + + block + + +//- Data table row + block - only +cell (td) + +mixin row(...style) + tr.table-row(class=prefixArgs(style, 'table-cell--'))&attributes(attributes) + block + + +//- Data table cell + block - table cell content (inline elements) + +mixin cell(...style) + td.table-cell(class=prefixArgs(style, 'table-cell--'))&attributes(attributes) + block + + +//- General list (ordered and unordered) + type - [string] 'numbers', 'letters', 'roman' (optional) + start - [integer] starting point of list (1 = list starts at 1 or A) + block - only +item (li) + +mixin list(type, start) + if type + ol.list(class='list--' + type style=(start === 0 || start) ? 'counter-reset: li ' + (start - 1) : '')&attributes(attributes) + block + + else + ul.list.list--bullets&attributes(attributes) + block + + +//- List item + block - item text (inline elements) + +mixin item + li.list-item&attributes(attributes) + block + + +//- Blockquote + source - [string] quote source / author (optional) + link - [string] link to quote source (only with source, optional) + block - quote text (inline elements) + +mixin quote(source, link) + blockquote.quote&attributes(attributes) + p.quote-text + block + + if source && link + | #[a.quote-source(href=link target='_blank')=source] + + else if source && !link + .quote-source !{source} + + +//- Pullquotes with optional 'tweet this' function + tweet - [string] text to be tweeted (optional) + block - pullquote text (inline elements, only shown if no tweet text) + +mixin pullquote(tweet) + blockquote.quote&attributes(attributes) + + p.quote-text-strong + if tweet + | !{tweet} #[a.quote-source(href=twitterShareUrl(current.path, tweet) target='_blank') Tweet this] + + else + block + + +//- Code block + use as +code(args). to preserve whitespace and prevent code interprettion + language - [string] language for syntax highlighting (optional, default: + 'python', see Prism for options: http://prismjs.com) + label - [string] code block headline (optional) + block - code text (inline elements) + + +mixin code(language, label) + pre.code-block(class='lang-' + (language || default_syntax) data-label=label)&attributes(attributes) + code.code-inline + block + + +//- Infobox for notes and alerts + label - [string] infobox headline (optional) + block - infobox text (inline and block elements) + +mixin infobox(label) + .box.box--info(data-label=label)&attributes(attributes) + p.box-body + block + + +//- Alerts for notes and updates + +mixin alert(button) + .alert&attributes(attributes) + block + + if button + +form-button('primary', 'small')(onclick='this.parentNode.parentNode.removeChild(this.parentNode);')=button + + else + button.alert-close(onclick='this.parentNode.parentNode.removeChild(this.parentNode);') + + + +//- Embeds + border - [boolean] add border to embed container + caption - [string] embed caption + block - embed content (inline and block elements) + +mixin embed(border, caption) + figure.embed(class=(border) ? 'embed--border' : '')&attributes(attributes) + block + + if caption + figcaption.embed-caption=caption + + +//- displaCy + filename - [string] name of file in displacy folder (no .html) + caption - [string] caption (optional) + height - [integer] iframe height in px (optional) + +mixin displacy(filename, caption, height) + +embed(true, caption).embed--displacy + iframe(src='/blog/displacy/' + filename height=height) + + +//- Logo, imports SVG + size - [string] 'tiny', 'small', 'regular' or 'large' + +mixin logo(size) + !=partial('/_includes/_logo', { logo_size: size }) + + +//-