├── .gitignore ├── Gemfile ├── Gemfile.lock ├── Guardfile ├── Makefile ├── README.md ├── _build ├── analysis │ ├── 03-dimensionality-reduction.html │ ├── 04-clustering.html │ ├── 05-diffexp.html │ └── 06-exploratory.html ├── exploration │ ├── 06-exploratory.html │ └── 07-exercise.html ├── figures │ ├── CourseAtlasAssignment.png │ ├── CourseCompareTypes.png │ ├── RNA-Seq_workflow-5.pdf.jpg │ ├── anaconda-channel.png │ ├── anaconda-env.png │ ├── anaconda-jupyter.png │ ├── anndata.svg │ ├── cannoodt_pseudotime_methods.png │ ├── cannoodt_pseudotime_properties.png │ ├── distrib-giant-n.png │ ├── distrib-large-n.png │ ├── distrib-small-n.png │ ├── drop-seq.png │ ├── flowchart.png │ ├── git-download.png │ ├── glioblastoma_facs.jpg │ ├── graph_network.jpg │ ├── k-means.png │ ├── pca.png │ ├── qc.png │ ├── sc3.png │ ├── scater_qc_workflow.png │ └── scfind.png ├── images │ ├── analysis │ │ ├── 03-dimensionality-reduction_3_0.png │ │ ├── 03-dimensionality-reduction_4_0.png │ │ ├── 03-dimensionality-reduction_8_0.png │ │ ├── 04-clustering_3_1.png │ │ ├── 05-diffexp_11_1.png │ │ ├── 05-diffexp_11_2.png │ │ ├── 05-diffexp_13_2.png │ │ ├── 05-diffexp_14_0.png │ │ ├── 05-diffexp_16_0.png │ │ └── 05-diffexp_5_1.png │ ├── logo │ │ ├── download.svg │ │ ├── edit-button.svg │ │ ├── favicon.ico │ │ ├── jupyter.png │ │ ├── logo.png │ │ └── logo.psd │ └── preprocessing │ │ ├── 01-basic-qc_11_1.png │ │ ├── 01-basic-qc_18_1.png │ │ ├── 01-basic-qc_19_1.png │ │ ├── 01-basic-qc_20_0.png │ │ ├── 01-basic-qc_21_1.png │ │ ├── 01-basic-qc_22_0.png │ │ ├── 01-basic-qc_23_1.png │ │ ├── 01-basic-qc_6_1.png │ │ ├── 01-basic-qc_8_1.png │ │ ├── 01-basic-qc_9_1.png │ │ ├── 02-normalization_10_0.png │ │ ├── 02-normalization_10_1.png │ │ ├── 02-normalization_10_2.png │ │ ├── 02-normalization_11_0.png │ │ ├── 02-normalization_11_1.png │ │ ├── 02-normalization_11_2.png │ │ ├── 02-normalization_16_0.png │ │ ├── 02-normalization_16_1.png │ │ ├── 02-normalization_16_2.png │ │ ├── 02-normalization_17_0.png │ │ ├── 02-normalization_17_1.png │ │ ├── 02-normalization_17_2.png │ │ ├── 02-normalization_18_0.png │ │ ├── 02-normalization_18_1.png │ │ ├── 02-normalization_18_2.png │ │ ├── 02-normalization_21_0.png │ │ ├── 02-normalization_21_1.png │ │ ├── 02-normalization_21_2.png │ │ ├── 02-normalization_5_0.png │ │ ├── 02-normalization_5_1.png │ │ ├── 02-normalization_5_2.png │ │ ├── 02-normalization_6_0.png │ │ ├── 02-normalization_6_1.png │ │ └── 02-normalization_6_2.png ├── intro │ ├── about.html │ ├── overview.html │ └── setup.html └── preprocessing │ ├── 00-tabula-muris.html │ ├── 01-basic-qc.html │ └── 02-normalization.html ├── _config.yml ├── _data └── toc.yml ├── _includes ├── buttons.html ├── buttons │ ├── binder.html │ ├── download.html │ ├── jupyterhub.html │ ├── nbinteract.html │ └── thebelab.html ├── css_entry.scss ├── fb_tags.html ├── footer.html ├── google_analytics.html ├── head.html ├── js │ ├── anchors.html │ ├── copy-button.html │ ├── documentSelectors.html │ ├── dom-update.html │ ├── hide-cell.html │ ├── interact-update.html │ ├── mathjax.html │ ├── nbinteract.html │ ├── print.html │ ├── thebelab-cell-button.html │ ├── thebelab.html │ └── tocbot.html ├── metadata.json ├── onthispage.html ├── page-nav.html ├── search │ └── lunr │ │ ├── lunr-en.js │ │ └── lunr-store.js ├── sidebar-toggle.html ├── sidebar.html └── topbar.html ├── _layouts └── default.html ├── _sass ├── components │ ├── _components.footer.scss │ ├── _components.hidecells.scss │ ├── _components.interact-button.scss │ ├── _components.page__nav.scss │ ├── _components.search.scss │ ├── _components.sidebar-toggle.scss │ ├── _components.textbook.scss │ ├── _components.textbook__page.scss │ ├── _components.textbook__sidebar-right.scss │ ├── _components.textbook__sidebar.scss │ ├── _components.thebelab.scss │ └── _components.topbar.scss ├── elements │ ├── _elements.links.scss │ ├── _elements.syntax-highlighting.scss │ ├── _elements.tables.scss │ ├── _elements.typography.scss │ └── _elements.variables.scss ├── generic │ └── _generic.phone-scrolling.scss ├── hamburgers │ ├── _base.scss │ ├── hamburgers.scss │ └── types │ │ └── _arrowalt.scss ├── inuitcss │ ├── elements │ │ ├── _elements.headings.scss │ │ ├── _elements.images.scss │ │ ├── _elements.page.scss │ │ └── _elements.tables.scss │ ├── generic │ │ ├── _generic.box-sizing.scss │ │ ├── _generic.normalize.scss │ │ ├── _generic.reset.scss │ │ └── _generic.shared.scss │ ├── objects │ │ ├── _objects.block.scss │ │ ├── _objects.box.scss │ │ ├── _objects.crop.scss │ │ ├── _objects.flag.scss │ │ ├── _objects.layout.scss │ │ ├── _objects.list-bare.scss │ │ ├── _objects.list-inline.scss │ │ ├── _objects.media.scss │ │ ├── _objects.pack.scss │ │ ├── _objects.ratio.scss │ │ ├── _objects.table.scss │ │ └── _objects.wrapper.scss │ ├── settings │ │ ├── _example.settings.config.scss │ │ ├── _example.settings.global.scss │ │ └── _settings.core.scss │ ├── tools │ │ ├── _tools.clearfix.scss │ │ ├── _tools.font-size.scss │ │ ├── _tools.hidden.scss │ │ └── _tools.mq.scss │ └── utilities │ │ ├── _utilities.clearfix.scss │ │ ├── _utilities.headings.scss │ │ ├── _utilities.hide.scss │ │ ├── _utilities.print.scss │ │ ├── _utilities.responsive-spacings.scss │ │ ├── _utilities.spacings.scss │ │ └── _utilities.widths.scss ├── main.scss ├── objects │ ├── _objects.copy-button.scss │ ├── _objects.thebelab-in-cell-button.scss │ └── _objects.tooltip.scss └── settings │ └── settings.global.scss ├── _site ├── Guardfile ├── Makefile ├── assets │ ├── css │ │ └── styles.css │ ├── custom │ │ ├── custom.css │ │ └── custom.js │ ├── images │ │ ├── copy-button.svg │ │ ├── edit-button.svg │ │ ├── logo_binder.svg │ │ └── logo_jupyterhub.svg │ └── js │ │ ├── anchor.min.js │ │ ├── anchors.js │ │ ├── copy-button.js │ │ ├── documentSelectors.js │ │ ├── dom-update.js │ │ ├── hide-cell.js │ │ ├── lunr │ │ └── lunr.min.js │ │ ├── scripts.js │ │ ├── tocbot.js │ │ ├── tocbot.min.js │ │ └── turbolinks.js ├── images │ └── logo │ │ ├── download.svg │ │ ├── edit-button.svg │ │ ├── favicon.ico │ │ ├── jupyter.png │ │ ├── logo.png │ │ └── logo.psd └── requirements.txt ├── assets ├── css │ └── styles.scss ├── custom │ ├── custom.css │ └── custom.js ├── html │ ├── index.html │ └── search_form.html ├── images │ ├── copy-button.svg │ ├── czi-logo.png │ ├── edit-button.svg │ ├── logo_binder.svg │ └── logo_jupyterhub.svg └── js │ ├── anchor.min.js │ ├── anchors.js │ ├── copy-button.js │ ├── documentSelectors.js │ ├── dom-update.js │ ├── hide-cell.js │ ├── lunr │ └── lunr.min.js │ ├── scripts.js │ ├── tocbot.js │ ├── tocbot.min.js │ └── turbolinks.js ├── content ├── LICENSE.md ├── analysis │ ├── 03-dimensionality-reduction.ipynb │ ├── 04-clustering.ipynb │ └── 05-diffexp.ipynb ├── data.zip ├── exploration │ ├── 06-exploratory.md │ └── 07-exercise.ipynb ├── figures │ ├── CourseAtlasAssignment.png │ ├── CourseCompareTypes.png │ ├── RNA-Seq_workflow-5.pdf.jpg │ ├── anaconda-channel.png │ ├── anaconda-env.png │ ├── anaconda-jupyter.png │ ├── anndata.svg │ ├── cannoodt_pseudotime_methods.png │ ├── cannoodt_pseudotime_properties.png │ ├── distrib-giant-n.png │ ├── distrib-large-n.png │ ├── distrib-small-n.png │ ├── drop-seq.png │ ├── flowchart.png │ ├── git-download.png │ ├── glioblastoma_facs.jpg │ ├── graph_network.jpg │ ├── k-means.png │ ├── pca.png │ ├── qc.png │ ├── sc3.png │ ├── scater_qc_workflow.png │ └── scfind.png ├── images │ └── logo │ │ ├── download.svg │ │ ├── edit-button.svg │ │ ├── favicon.ico │ │ ├── jupyter.png │ │ ├── logo.png │ │ └── logo.psd ├── intro │ ├── about.md │ ├── overview.md │ └── setup.md └── preprocessing │ ├── 00-tabula-muris.ipynb │ ├── 01-basic-qc.ipynb │ └── 02-normalization.ipynb ├── scripts ├── __pycache__ │ └── clean.cpython-37.pyc ├── clean.py └── templates │ ├── celltags.tpl │ ├── html.tpl │ └── jekyllmd.tpl └── sfn-workshop.yml /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | content/preprocessing/.ipynb_checkpoints/ 3 | 4 | content/intro/.DS_Store 5 | 6 | content/preprocessing/.DS_Store 7 | 8 | data/.DS_Store 9 | 10 | .DS_Store 11 | 12 | _build/data/ 13 | 14 | content/data/ 15 | 16 | content/analysis/.ipynb_checkpoints/ 17 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | group :jekyll_plugins do 4 | gem 'github-pages' 5 | gem 'jekyll-feed', '~> 0.6' 6 | 7 | # Textbook plugins 8 | gem 'jekyll-redirect-from' 9 | end 10 | 11 | # Windows does not include zoneinfo files, so bundle the tzinfo-data gem 12 | gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] 13 | 14 | # Performance-booster for watching directories on Windows 15 | gem 'wdm', '~> 0.1.0' if Gem.win_platform? 16 | 17 | # Development tools 18 | gem 'guard', '~> 2.14.2' 19 | gem 'guard-jekyll-plus', '~> 2.0.2' 20 | gem 'guard-livereload', '~> 2.5.2' 21 | -------------------------------------------------------------------------------- /Guardfile: -------------------------------------------------------------------------------- 1 | guard 'jekyll-plus', serve: true do 2 | watch /.*/ 3 | ignore /^_site/ 4 | end 5 | 6 | guard 'livereload' do 7 | watch /.*/ 8 | end 9 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: help book clean serve 2 | 3 | help: 4 | @echo "Please use 'make ' where is one of:" 5 | @echo " install to install the necessary dependencies for jupyter-book to build" 6 | @echo " book to convert the content/ folder into Jekyll markdown in _build/" 7 | @echo " clean to clean out site build files" 8 | @echo " runall to run all notebooks in-place, capturing outputs with the notebook" 9 | @echo " serve to serve the repository locally with Jekyll" 10 | @echo " build to build the site HTML locally with Jekyll and store in _site/" 11 | 12 | 13 | install: 14 | # Check to see whether bundler is already installed. If not, install it. 15 | if [ hash bundler 2>/dev/null ]; then \ 16 | gem install bundler;\ 17 | fi 18 | bundle install 19 | 20 | book: 21 | jupyter-book build ./ 22 | 23 | runall: 24 | jupyter-book run ./content 25 | 26 | clean: 27 | python scripts/clean.py 28 | 29 | serve: 30 | bundle exec guard 31 | 32 | build: 33 | bundle exec jekyll build 34 | touch _site/.nojekyll 35 | -------------------------------------------------------------------------------- /_build/figures/CourseAtlasAssignment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/CourseAtlasAssignment.png -------------------------------------------------------------------------------- /_build/figures/CourseCompareTypes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/CourseCompareTypes.png -------------------------------------------------------------------------------- /_build/figures/RNA-Seq_workflow-5.pdf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/RNA-Seq_workflow-5.pdf.jpg -------------------------------------------------------------------------------- /_build/figures/anaconda-channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/anaconda-channel.png -------------------------------------------------------------------------------- /_build/figures/anaconda-env.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/anaconda-env.png -------------------------------------------------------------------------------- /_build/figures/anaconda-jupyter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/anaconda-jupyter.png -------------------------------------------------------------------------------- /_build/figures/cannoodt_pseudotime_methods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/cannoodt_pseudotime_methods.png -------------------------------------------------------------------------------- /_build/figures/cannoodt_pseudotime_properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/cannoodt_pseudotime_properties.png -------------------------------------------------------------------------------- /_build/figures/distrib-giant-n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/distrib-giant-n.png -------------------------------------------------------------------------------- /_build/figures/distrib-large-n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/distrib-large-n.png -------------------------------------------------------------------------------- /_build/figures/distrib-small-n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/distrib-small-n.png -------------------------------------------------------------------------------- /_build/figures/drop-seq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/drop-seq.png -------------------------------------------------------------------------------- /_build/figures/flowchart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/flowchart.png -------------------------------------------------------------------------------- /_build/figures/git-download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/git-download.png -------------------------------------------------------------------------------- /_build/figures/glioblastoma_facs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/glioblastoma_facs.jpg -------------------------------------------------------------------------------- /_build/figures/graph_network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/graph_network.jpg -------------------------------------------------------------------------------- /_build/figures/k-means.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/k-means.png -------------------------------------------------------------------------------- /_build/figures/pca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/pca.png -------------------------------------------------------------------------------- /_build/figures/qc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/qc.png -------------------------------------------------------------------------------- /_build/figures/sc3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/sc3.png -------------------------------------------------------------------------------- /_build/figures/scater_qc_workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/scater_qc_workflow.png -------------------------------------------------------------------------------- /_build/figures/scfind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/figures/scfind.png -------------------------------------------------------------------------------- /_build/images/analysis/03-dimensionality-reduction_3_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/analysis/03-dimensionality-reduction_3_0.png -------------------------------------------------------------------------------- /_build/images/analysis/03-dimensionality-reduction_4_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/analysis/03-dimensionality-reduction_4_0.png -------------------------------------------------------------------------------- /_build/images/analysis/03-dimensionality-reduction_8_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/analysis/03-dimensionality-reduction_8_0.png -------------------------------------------------------------------------------- /_build/images/analysis/04-clustering_3_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/analysis/04-clustering_3_1.png -------------------------------------------------------------------------------- /_build/images/analysis/05-diffexp_11_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/analysis/05-diffexp_11_1.png -------------------------------------------------------------------------------- /_build/images/analysis/05-diffexp_11_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/analysis/05-diffexp_11_2.png -------------------------------------------------------------------------------- /_build/images/analysis/05-diffexp_13_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/analysis/05-diffexp_13_2.png -------------------------------------------------------------------------------- /_build/images/analysis/05-diffexp_14_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/analysis/05-diffexp_14_0.png -------------------------------------------------------------------------------- /_build/images/analysis/05-diffexp_16_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/analysis/05-diffexp_16_0.png -------------------------------------------------------------------------------- /_build/images/analysis/05-diffexp_5_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/analysis/05-diffexp_5_1.png -------------------------------------------------------------------------------- /_build/images/logo/edit-button.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 20 | 40 | 42 | 43 | 45 | image/svg+xml 46 | 48 | 49 | 50 | 51 | 54 | 59 | 64 | 69 | 74 | 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /_build/images/logo/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/logo/favicon.ico -------------------------------------------------------------------------------- /_build/images/logo/jupyter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/logo/jupyter.png -------------------------------------------------------------------------------- /_build/images/logo/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/logo/logo.png -------------------------------------------------------------------------------- /_build/images/logo/logo.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/logo/logo.psd -------------------------------------------------------------------------------- /_build/images/preprocessing/01-basic-qc_11_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/01-basic-qc_11_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/01-basic-qc_18_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/01-basic-qc_18_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/01-basic-qc_19_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/01-basic-qc_19_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/01-basic-qc_20_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/01-basic-qc_20_0.png -------------------------------------------------------------------------------- /_build/images/preprocessing/01-basic-qc_21_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/01-basic-qc_21_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/01-basic-qc_22_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/01-basic-qc_22_0.png -------------------------------------------------------------------------------- /_build/images/preprocessing/01-basic-qc_23_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/01-basic-qc_23_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/01-basic-qc_6_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/01-basic-qc_6_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/01-basic-qc_8_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/01-basic-qc_8_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/01-basic-qc_9_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/01-basic-qc_9_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_10_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_10_0.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_10_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_10_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_10_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_10_2.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_11_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_11_0.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_11_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_11_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_11_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_11_2.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_16_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_16_0.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_16_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_16_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_16_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_16_2.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_17_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_17_0.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_17_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_17_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_17_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_17_2.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_18_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_18_0.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_18_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_18_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_18_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_18_2.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_21_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_21_0.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_21_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_21_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_21_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_21_2.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_5_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_5_0.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_5_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_5_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_5_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_5_2.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_6_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_6_0.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_6_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_6_1.png -------------------------------------------------------------------------------- /_build/images/preprocessing/02-normalization_6_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chanzuckerberg/scRNA-python-workshop/c7816741ba8f63e1dca08dad8999e64328186404/_build/images/preprocessing/02-normalization_6_2.png -------------------------------------------------------------------------------- /_data/toc.yml: -------------------------------------------------------------------------------- 1 | - header: Introduction 2 | - title: About the course 3 | url: /intro/about 4 | - title: Setup and installation 5 | url: /intro/setup 6 | - title: Workflow overview 7 | url: /intro/overview 8 | 9 | - divider: true 10 | - header: Data preprocessing 11 | - title: Tabula muris 12 | url: /preprocessing/00-tabula-muris 13 | - title: Quality control 14 | url: /preprocessing/01-basic-qc 15 | - title: Normalization and PCA 16 | url: /preprocessing/02-normalization 17 | 18 | - divider: true 19 | - header: Data analysis 20 | - title: Dimensionality reduction 21 | url: analysis/03-dimensionality-reduction 22 | - title: Clustering 23 | url: analysis/04-clustering 24 | - title: Differential expression 25 | url: analysis/05-diffexp 26 | 27 | - divider: true 28 | - header: Exploratory analysis & advanced exercises 29 | - title: Exploration with cellxgene 30 | url: exploration/06-exploratory 31 | - title: Advanced exercises 32 | url: exploration/07-exercise 33 | -------------------------------------------------------------------------------- /_includes/buttons.html: -------------------------------------------------------------------------------- 1 |
2 | {% include buttons/download.html %} 3 | {% if page.interact_link %} 4 | {% include buttons/thebelab.html %} 5 | {% include buttons/nbinteract.html %} 6 | {% include buttons/binder.html %} 7 | {% include buttons/jupyterhub.html %} 8 | {% endif %} 9 |
10 | -------------------------------------------------------------------------------- /_includes/buttons/binder.html: -------------------------------------------------------------------------------- 1 | {% if site.use_binder_button %} 2 | 3 | {% capture interact_icon_binder %}{{ site.images_url | relative_url }}/logo_binder.svg{% endcapture %} 4 | 5 | 6 | 7 | {%- endif %} 8 | -------------------------------------------------------------------------------- /_includes/buttons/download.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | {% if site.use_download_button and page.interact_link -%} 5 | 6 | 7 | 8 | {% endif %} 9 | 10 |
11 |
-------------------------------------------------------------------------------- /_includes/buttons/jupyterhub.html: -------------------------------------------------------------------------------- 1 | {% if site.use_jupyterhub_button %} 2 | 3 | {% if site.use_jupyterlab %} 4 | {% assign hub_app="lab" %} 5 | {% else %} 6 | {% assign hub_app="notebook" %} 7 | {% endif %} 8 | 9 | {% capture interact_url_jupyterhub %}hub/user-redirect/git-pull?repo={{ site.binder_repo_base }}/{{ site.binder_repo_org }}/{{ site.binder_repo_name }}&branch={{ site.binder_repo_branch }}&subPath={{ page.interact_link | url_encode }}&app={{ hub_app }}{% endcapture %} 10 | {% capture interact_icon_jupyterhub %}{{ site.images_url | relative_url }}/logo_jupyterhub.svg{% endcapture %} 11 | 12 | 13 | {% endif %} 14 | -------------------------------------------------------------------------------- /_includes/buttons/nbinteract.html: -------------------------------------------------------------------------------- 1 | {% if site.use_show_widgets_button and page.has_widgets -%} 2 | 3 | {% endif %} -------------------------------------------------------------------------------- /_includes/buttons/thebelab.html: -------------------------------------------------------------------------------- 1 | {% if site.use_thebelab_button -%} 2 | 3 | {% endif %} -------------------------------------------------------------------------------- /_includes/css_entry.scss: -------------------------------------------------------------------------------- 1 | @import 'inuitcss/settings/settings.core'; 2 | @import 'settings/settings.global.scss'; 3 | 4 | @import 'inuitcss/tools/tools.font-size'; 5 | @import 'inuitcss/tools/tools.clearfix'; 6 | @import 'inuitcss/tools/tools.hidden'; 7 | @import 'inuitcss/tools/tools.mq'; 8 | 9 | @import 'inuitcss/elements/elements.page'; 10 | @import 'inuitcss/elements/elements.headings'; 11 | @import 'inuitcss/elements/elements.images'; 12 | @import 'inuitcss/elements/elements.tables'; 13 | @import 'elements/elements.typography'; 14 | @import 'elements/elements.syntax-highlighting'; 15 | @import 'elements/elements.tables'; 16 | @import 'elements/elements.links'; 17 | 18 | @import 'components/components.textbook__page'; 19 | -------------------------------------------------------------------------------- /_includes/fb_tags.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /_includes/footer.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | -------------------------------------------------------------------------------- /_includes/google_analytics.html: -------------------------------------------------------------------------------- 1 | {% if site.google_analytics.mytrackingcode %} 2 | 3 | 4 | 11 | {% endif %} 12 | -------------------------------------------------------------------------------- /_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | escape }}{% endif %} 7 | 8 | 9 | 10 | 11 | 12 | {% include fb_tags.html %} 13 | 14 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | {% include js/mathjax.html %} 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | {% include js/nbinteract.html %} 55 | 56 | 57 | {% include js/thebelab.html %} 58 | 59 | 60 | 61 | 62 | 63 | 64 | {% include google_analytics.html %} 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | {% include js/interact-update.html %} 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | {% include js/print.html %} 91 | 92 | -------------------------------------------------------------------------------- /_includes/js/anchors.html: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /_includes/js/copy-button.html: -------------------------------------------------------------------------------- 1 | 59 | -------------------------------------------------------------------------------- /_includes/js/documentSelectors.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_includes/js/dom-update.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_includes/js/hide-cell.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_includes/js/mathjax.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 22 | -------------------------------------------------------------------------------- /_includes/js/nbinteract.html: -------------------------------------------------------------------------------- 1 | {% if site.use_show_widgets_button and page.has_widgets %} 2 | 3 | 4 | 5 | 33 | {% endif %} -------------------------------------------------------------------------------- /_includes/js/print.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 31 | -------------------------------------------------------------------------------- /_includes/js/thebelab-cell-button.html: -------------------------------------------------------------------------------- 1 | {% if site.use_thebelab_button -%} 2 | 27 | {% endif %} 28 | -------------------------------------------------------------------------------- /_includes/js/thebelab.html: -------------------------------------------------------------------------------- 1 | 2 | {% if site.use_thebelab_button %} 3 | 4 | 5 | {% include js/thebelab-cell-button.html %} 6 | 7 | 22 | 23 | 111 | {% endif %} 112 | -------------------------------------------------------------------------------- /_includes/js/tocbot.html: -------------------------------------------------------------------------------- 1 | 2 | 31 | -------------------------------------------------------------------------------- /_includes/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "http://schema.org", 3 | "@type": "NewsArticle", 4 | "mainEntityOfPage": "{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}", 5 | "headline": "{% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | escape }}{% endif %}", 6 | "datePublished": "{% if page.date %}{{ page.date | date_to_xmlschema }}{% else %}{{ site.time | date_to_xmlschema }}{% endif %}", 7 | "dateModified": "{% if page.date %}{{ page.date | date_to_xmlschema }}{% else %}{{ site.time | date_to_xmlschema }}{% endif %}", 8 | "description": "{{ page.content | strip_html | strip_newlines | truncate: 160 }}", 9 | "author": { 10 | "@type": "Person", 11 | "name": "{{ site.author }}" 12 | }, 13 | "publisher": { 14 | "@type": "Organization", 15 | "name": "Data 100 at UC Berkeley", 16 | "logo": { 17 | "@type": "ImageObject", 18 | "url": "{{ site.logo | prepend: site.baseurl | prepend: site.url }}", 19 | "width": 60, 20 | "height": 60 21 | } 22 | }, 23 | "image": { 24 | "@type": "ImageObject", 25 | "url": "{{ site.logo | prepend: site.baseurl | prepend: site.url }}", 26 | "height": 60, 27 | "width": 60 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /_includes/onthispage.html: -------------------------------------------------------------------------------- 1 | 2 | {% capture tocWorkspace %} 3 | {%- comment -%} 4 | Version 1.0.2 5 | 6 | "...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe 7 | 8 | Usage: 9 | {% include toc.html html=content sanitize=true class="inline_toc" id="my_toc" h_min=2 h_max=3 %} 10 | 11 | Parameters: 12 | * html (string) - the HTML of compiled markdown generated by kramdown in Jekyll 13 | 14 | Optional Parameters: 15 | * sanitize (bool) : false - when set to true, the headers will be stripped of any HTML in the TOC 16 | * class (string) : '' - a CSS class assigned to the TOC 17 | * id (string) : '' - an ID to assigned to the TOC 18 | * h_min (int) : 1 - the minimum TOC header level to use; any header lower than this value will be ignored 19 | * h_max (int) : 6 - the maximum TOC header level to use; any header greater than this value will be ignored 20 | 21 | Output: 22 | An unordered list representing the table of contents of a markdown block. This snippet will only generate the table of contents and will NOT output the markdown given to it 23 | {%- endcomment -%} 24 | 25 | {% capture my_toc %}{% endcapture %} 26 | {% assign minHeader = include.h_min | default: 1 %} 27 | {% assign maxHeader = include.h_max | default: 6 %} 28 | {% assign nodes = include.html | split: ' maxHeader %} 39 | {% continue %} 40 | {% endif %} 41 | 42 | {% if firstHeader %} 43 | {% assign firstHeader = false %} 44 | {% assign minHeader = headerLevel %} 45 | {% endif %} 46 | 47 | {% assign indentAmount = headerLevel | minus: minHeader | add: 1 %} 48 | {% assign _workspace = node | split: '' | first }}>{% endcapture %} 55 | {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %} 56 | 57 | {% assign space = '' %} 58 | {% for i in (1..indentAmount) %} 59 | {% assign space = space | prepend: ' ' %} 60 | {% endfor %} 61 | 62 | {% capture my_toc %}{{ my_toc }} 63 | {{ space }}- [{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}](#{{ html_id }}){% endcapture %} 64 | 65 | {% endfor %} 66 | 67 | {% if include.class %} 68 | {% capture my_toc %}{:.{{ include.class }}} 69 | {{ my_toc | lstrip }}{% endcapture %} 70 | {% endif %} 71 | 72 | {% if include.id %} 73 | {% capture my_toc %}{: #{{ include.id }}} 74 | {{ my_toc | lstrip }}{% endcapture %} 75 | {% endif %} 76 | {% endcapture %}{% assign tocWorkspace = '' %} 77 | 78 | 79 | {% assign toc_items = my_toc | split: '#' %} 80 | {% if toc_items.size > 1 %} 81 | 87 | {% endif %} 88 | -------------------------------------------------------------------------------- /_includes/page-nav.html: -------------------------------------------------------------------------------- 1 | 24 | -------------------------------------------------------------------------------- /_includes/search/lunr/lunr-en.js: -------------------------------------------------------------------------------- 1 | var initQuery = function() { 2 | // See if we have a search box 3 | var searchInput = document.querySelector('input#lunr_search'); 4 | if (searchInput === null) { 5 | return; 6 | } 7 | 8 | // Function to parse our lunr cache 9 | var idx = lunr(function () { 10 | this.field('title') 11 | this.field('excerpt') 12 | this.field('categories') 13 | this.field('tags') 14 | this.ref('id') 15 | 16 | this.pipeline.remove(lunr.trimmer) 17 | 18 | for (var item in store) { 19 | this.add({ 20 | title: store[item].title, 21 | excerpt: store[item].excerpt, 22 | categories: store[item].categories, 23 | tags: store[item].tags, 24 | id: item 25 | }) 26 | } 27 | }); 28 | 29 | // Run search upon keyup 30 | searchInput.addEventListener('keyup', function () { 31 | var resultdiv = document.querySelector('#results'); 32 | var query = document.querySelector("input#lunr_search").value.toLowerCase(); 33 | var result = 34 | idx.query(function (q) { 35 | query.split(lunr.tokenizer.separator).forEach(function (term) { 36 | q.term(term, { boost: 100 }) 37 | if(query.lastIndexOf(" ") != query.length-1){ 38 | q.term(term, { usePipeline: false, wildcard: lunr.Query.wildcard.TRAILING, boost: 10 }) 39 | } 40 | if (term != ""){ 41 | q.term(term, { usePipeline: false, editDistance: 1, boost: 1 }) 42 | } 43 | }) 44 | }); 45 | 46 | // Empty the results div 47 | while (resultdiv.firstChild) { 48 | resultdiv.removeChild(resultdiv.firstChild); 49 | } 50 | 51 | resultdiv.insertAdjacentHTML('afterbegin', '

'+result.length+' Result(s) found

'); 52 | for (var item in result) { 53 | var ref = result[item].ref; 54 | if(store[ref].teaser){ 55 | var searchitem = 56 | '
'+ 57 | '
'+ 58 | '

'+ 59 | ''+store[ref].title+''+ 60 | '

'+ 61 | '
'+ 62 | ''+ 63 | '
'+ 64 | '

'+store[ref].excerpt.split(" ").splice(0,20).join(" ")+'...

'+ 65 | '
'+ 66 | '
'; 67 | } 68 | else{ 69 | var searchitem = 70 | '
'+ 71 | '
'+ 72 | '

'+ 73 | ''+store[ref].title+''+ 74 | '

'+ 75 | '

'+store[ref].excerpt.split(" ").splice(0,20).join(" ")+'...

'+ 76 | '
'+ 77 | '
'; 78 | } 79 | resultdiv.insertAdjacentHTML('beforeend', searchitem); 80 | } 81 | }); 82 | }; 83 | 84 | initFunction(initQuery); 85 | -------------------------------------------------------------------------------- /_includes/search/lunr/lunr-store.js: -------------------------------------------------------------------------------- 1 | var store = [ 2 | {%- for c in site.collections -%} 3 | {%- if forloop.last -%} 4 | {%- assign l = true -%} 5 | {%- endif -%} 6 | {%- assign docs = c.docs | where_exp:'doc','doc.search != false' -%} 7 | {%- for doc in docs -%} 8 | {%- if doc.header.teaser -%} 9 | {%- capture teaser -%}{{ doc.header.teaser }}{%- endcapture -%} 10 | {%- else -%} 11 | {%- assign teaser = site.teaser -%} 12 | {%- endif -%} 13 | { 14 | "title": {{ doc.title | jsonify }}, 15 | {% assign truncateWords=site.search_max_words_in_content %} 16 | "excerpt": 17 | {{ doc.content | newline_to_br | 18 | replace:"
", " " | 19 | replace:"

", " " | 20 | replace:"", " " | 21 | replace:"", " " | 22 | replace:"", " " | 23 | replace:"", " " | 24 | replace:"", " " | 25 | replace:"", " " | 26 | strip_html | strip_newlines | truncatewords: truncateWords | jsonify }}, 27 | "categories": {{ doc.categories | jsonify }}, 28 | "tags": {{ doc.tags | jsonify }}, 29 | "url": {{ doc.url | absolute_url | jsonify }}, 30 | "teaser": 31 | {%- if teaser contains "://" -%} 32 | {{ teaser | jsonify }} 33 | {%- else -%} 34 | {{ teaser | absolute_url | jsonify }} 35 | {%- endif -%} 36 | }{%- unless forloop.last and l -%},{%- endunless -%} 37 | {%- endfor -%} 38 | {%- endfor -%}] -------------------------------------------------------------------------------- /_includes/sidebar-toggle.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 12 |
13 | -------------------------------------------------------------------------------- /_includes/topbar.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 12 | {% include buttons.html %} 13 |
14 | 15 | 20 | 21 |
22 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% include head.html %} 4 | 5 | 6 |
7 | {% include sidebar.html %} 8 | {% if page.search_page != true %} 9 | {% endif %} 10 | {% include topbar.html %} 11 |
12 |
13 | {{ content }} 14 |
15 | {% include page-nav.html %} 16 | {% include footer.html %} 17 |
18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /_sass/components/_components.footer.scss: -------------------------------------------------------------------------------- 1 | .footer { 2 | text-align: center; 3 | font-size: 14px; 4 | padding: 20px; 5 | opacity: 0.7; 6 | margin-bottom: 0px; 7 | } 8 | -------------------------------------------------------------------------------- /_sass/components/_components.hidecells.scss: -------------------------------------------------------------------------------- 1 | // Mixins and variables 2 | @mixin transition($in) { 3 | transition:$in; 4 | -webkit-transition:$in; 5 | -moz-transition:$in; 6 | -o-transition:$in; 7 | -ms-transition:$in; 8 | } 9 | 10 | @mixin transform($in) { 11 | transform:$in; 12 | -webkit-transform:$in; 13 | -moz-transform:$in; 14 | -o-transform:$in; 15 | -ms-transform:$in; 16 | } 17 | 18 | $plusminus-height: 2.5px; 19 | $plusminus-anim-length: .25s; 20 | 21 | // All hidden elements 22 | .hidden { 23 | visibility: hidden; 24 | opacity: 0; 25 | height: 10px; 26 | padding: 0px !important; 27 | } 28 | 29 | // Plusminus buttons 30 | // Adapted from https://codepen.io/FluidOfInsanity/pen/EyQGgw 31 | 32 | input[type="checkbox"] { 33 | display: none; 34 | } 35 | 36 | .plusminus { 37 | display: block; 38 | position: absolute; 39 | top: 9px; 40 | right: -30px; 41 | padding: .3em; 42 | 43 | width: 20px; 44 | height: 20px; 45 | background: #d4d4d4; 46 | border-radius: 25px; 47 | @include transition(0.25s); 48 | } 49 | 50 | div.cell:hover .plusminus { 51 | background: rgb(122, 130, 136); 52 | @include transition(0.25s); 53 | } 54 | 55 | .plusminus span { 56 | display: block; 57 | position: absolute; 58 | border-radius: 3px; 59 | background: #f2f2f2; 60 | @include transition(all $plusminus-anim-length ease); 61 | 62 | margin: 0% 15%; 63 | height: $plusminus-height; 64 | width: 70%; 65 | 66 | /*- half the width*/ 67 | left: 0px; 68 | bottom:0px; 69 | right:0px; 70 | top: calc(50% - #{$plusminus-height} / 2); 71 | } 72 | 73 | input:checked ~ .plusminus span.pm_v { 74 | @include transform(rotate(-90deg)); 75 | } 76 | -------------------------------------------------------------------------------- /_sass/components/_components.interact-button.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Stylings for Interact and Show Widget buttons. 3 | * 4 | * [1]: We abuse CSS selector specificity here since the buttons at the top of 5 | * the notebook might have both .interact-button and .js=nbinteract-widget. 6 | * [2]: We want the top buttons to be large. 7 | * [3]: However, a .js=nbinteract-widget appearing alone midway through the 8 | * notebook should be small. 9 | * 10 | */ 11 | 12 | $color-interact-button: #5a5a5a !default; 13 | 14 | %interact-button { 15 | @include inuit-font-size(14px); 16 | background-color: $color-interact-button; 17 | border-radius: 3px; 18 | border: none; 19 | color: white; 20 | cursor: pointer; 21 | display: inline-block; 22 | font-weight: 700; 23 | /* [2] */ 24 | padding: $spacing-unit-tiny $spacing-unit-med; 25 | text-decoration: none; 26 | 27 | &:hover, 28 | &:focus { 29 | text-decoration: none; 30 | } 31 | } 32 | 33 | .interact-button-logo { 34 | height: 1.35em; 35 | padding-right: 10px; 36 | margin-left: -5px; 37 | } 38 | 39 | .buttons { 40 | margin-bottom: $spacing-unit; 41 | 42 | /* [1] */ 43 | .interact-button { 44 | @extend %interact-button; 45 | } 46 | } 47 | 48 | .js-nbinteract-widget { 49 | @extend %interact-button; 50 | 51 | /* [3] */ 52 | padding: $spacing-unit-tiny $spacing-unit; 53 | margin-bottom: $spacing-unit-small; 54 | } 55 | 56 | // If the interact button link is changed with a REST param 57 | div.interact-context { 58 | display: inline; 59 | padding-left: 1em; 60 | } -------------------------------------------------------------------------------- /_sass/components/_components.page__nav.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Styling for the Next Page / Previous Page links at the bottom of textbook 3 | * pages. 4 | */ 5 | 6 | $color-nav-links: rgba(0, 140, 255, 0.7); 7 | 8 | .c-page__nav__prev, 9 | .c-page__nav__next { 10 | flex: 1; 11 | color: $color-nav-links; 12 | border: 1px solid $color-nav-links; 13 | border-radius: 3px; 14 | padding: $spacing-unit-small 0; 15 | } 16 | 17 | .c-page__nav__next { 18 | text-align: right; 19 | } 20 | -------------------------------------------------------------------------------- /_sass/components/_components.search.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | SEARCH 3 | ========================================================================== */ 4 | // Taken from https://github.com/mmistakes/minimal-mistakes 5 | // Variables 6 | $large: 1024px !default; 7 | $x-large: 1280px !default; 8 | $type-size-1: 2.441em !default; 9 | $type-size-2: 1.953em !default; 10 | $type-size-3: 1.563em !default; 11 | $type-size-6: 0.75em !default; 12 | $intro-transition: intro 0.3s both !default; 13 | 14 | // Rules 15 | .layout--search { 16 | .archive__item-teaser { 17 | margin-bottom: 0.25em; 18 | } 19 | } 20 | 21 | .search__toggle { 22 | margin-left: 1rem; 23 | margin-right: 1rem; 24 | border: 0; 25 | outline: none; 26 | color: #393e46; 27 | background-color: transparent; 28 | cursor: pointer; 29 | -webkit-transition: 0.2s; 30 | transition: 0.2s; 31 | 32 | &:hover { 33 | color: #000; 34 | } 35 | } 36 | 37 | .search-icon { 38 | width: 100%; 39 | height: 100%; 40 | } 41 | 42 | .search-content { 43 | //display: none; 44 | //visibility: hidden; 45 | padding-top: 1em; 46 | padding-bottom: 1em; 47 | 48 | &__inner-wrap { 49 | width: 100%; 50 | margin-left: auto; 51 | margin-right: auto; 52 | padding-left: 1em; 53 | padding-right: 1em; 54 | -webkit-animation: $intro-transition; 55 | animation: $intro-transition; 56 | -webkit-animation-delay: 0.15s; 57 | animation-delay: 0.15s; 58 | 59 | .search-input { 60 | display: block; 61 | margin-bottom: 0; 62 | padding: 0; 63 | border: none; 64 | outline: none; 65 | box-shadow: none; 66 | background-color: transparent; 67 | font-size: $type-size-3; 68 | } 69 | } 70 | 71 | &.is--visible { 72 | display: block; 73 | visibility: visible; 74 | 75 | &::after { 76 | content: ""; 77 | display: block; 78 | } 79 | } 80 | 81 | .results__found { 82 | margin-top: 0.5em; 83 | font-size: $type-size-6; 84 | } 85 | 86 | .archive__item { 87 | margin-bottom: 2em; 88 | } 89 | 90 | .archive__item-title { 91 | margin-top: 0; 92 | } 93 | 94 | .archive__item-excerpt { 95 | margin-bottom: 0; 96 | } 97 | } -------------------------------------------------------------------------------- /_sass/components/_components.sidebar-toggle.scss: -------------------------------------------------------------------------------- 1 | .c-sidebar-toggle { 2 | margin-bottom: $spacing-unit; 3 | } 4 | 5 | .c-sidebar-toggle__label { 6 | @include inuit-font-size(12px); 7 | display: inline-block; 8 | margin-left: $spacing-unit-tiny; 9 | vertical-align: middle; 10 | text-transform: uppercase; 11 | } 12 | -------------------------------------------------------------------------------- /_sass/components/_components.textbook.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * The website contains two main components: the sidebar and the textbook page. 3 | * This file specifies the layout and includes classes to show/hide the sidebar 4 | * on small screens. 5 | * 6 | * The actual styling for the sidebar and page are located in their respective 7 | * component SCSS files. This file manages the layout and width only. 8 | * 9 | * By default, the sidebar is not visible. 10 | * 11 | * [1]: The entire page is positioned relative so that when the page overflows 12 | * (e.g. sidebar open on small screens) the user can't scroll left/right. 13 | * [2]: The sidebar and the textbook page are positioned absolute so that we 14 | * can use translate() on the textbook page to reveal the sidebar. 15 | * [3]: Setting the background color hides the sidebar when it's behind the 16 | * page (otherwise the page is transparent). 17 | * 18 | * When the sidebar is visible: 19 | * 20 | * [4]: Shift the textbook page over to the left. On small screens, the page 21 | * will overflow since the sidebar takes up most of the screen. 22 | * [5]: On larger screens, the page and sidebar have enough room to read them 23 | * simultaneously, so make sure that the page doesn't overflow. 24 | */ 25 | 26 | $left-sidebar-width: 300px; 27 | $textbook-page-width: 100%; 28 | $textbook-page-with-sidebar-width: 70%; 29 | $textbook-page-max-width: 950px; 30 | $right-sidebar-width: 220px; 31 | $topbar-height: 60px; 32 | $book-background-color: white; 33 | 34 | .c-textbook { 35 | /* [1] */ 36 | position: relative; 37 | height: 100vh; 38 | overflow: hidden; 39 | margin: 0 0 0 auto; 40 | } 41 | 42 | .c-topbar { 43 | background-color: $book-background-color; 44 | position: fixed; 45 | top: 0; 46 | height: $topbar-height; 47 | width: 100%; 48 | left: 0; 49 | padding: $spacing-unit-small $spacing-unit-small 0 $spacing-unit-med * 2; 50 | z-index: 1; 51 | transition: top 250ms, transform 250ms ease; // For animations 52 | } 53 | 54 | @include mq($until: tablet) { 55 | .c-topbar.hidetop { 56 | // At desktop, we stop hiding the navbar 57 | top: -250px; 58 | } 59 | } 60 | 61 | .c-textbook__sidebar, 62 | .c-textbook__page { 63 | /* [2] */ 64 | height: 100vh; 65 | overflow: auto; 66 | position: fixed; 67 | background-color: $book-background-color;; /* [3] */ 68 | } 69 | 70 | .c-textbook__sidebar { 71 | width: $left-sidebar-width; 72 | top: 0; 73 | left: 0; 74 | } 75 | 76 | .c-textbook__page { 77 | 78 | width: $textbook-page-width; 79 | transition: transform 250ms ease; 80 | left: 0; 81 | padding: 0 $spacing-unit $spacing-unit-small $spacing-unit-small * 3; 82 | overflow-x: visible; 83 | 84 | @include mq($from: laptop) { 85 | // At desktop, we show the right TOC 86 | padding-right: calc(100% - #{$left-sidebar-width} - #{$textbook-page-max-width}); 87 | } 88 | 89 | &:focus { 90 | /* [2] */ 91 | outline: none; 92 | } 93 | } 94 | 95 | .sidebar__right { 96 | // By default we hide the sidebar 97 | display: none; 98 | 99 | // Spacing for the sidebar 100 | width: $right-sidebar-width - $spacing-unit-small; // To account for the small margin on the right 101 | position: relative; 102 | float: right; 103 | z-index: 1; // Keep sidebar under page content 104 | 105 | @include mq($from: tablet) { 106 | // Show right TOC at laptop size 107 | display: block; 108 | } 109 | } 110 | 111 | .js-show-sidebar { 112 | .c-textbook__page, .c-topbar { 113 | /* [4] */ 114 | transform: translate($left-sidebar-width, 0); 115 | 116 | @include mq($from: tablet) { 117 | /* [5] */ 118 | width: calc(100% - #{$left-sidebar-width}); 119 | } 120 | } 121 | } 122 | 123 | .c-textbook__content { 124 | clear: both; 125 | padding-top: $topbar-height * 1.5; 126 | width: 95%; 127 | } 128 | 129 | .c-page__nav { 130 | display: flex; 131 | justify-content: space-between; 132 | align-items: center; 133 | padding-top: 30px; 134 | } 135 | 136 | // Make sure that the bottom content has the same width as non-sidebar content 137 | .footer, .c-page__nav { 138 | @include mq($from: laptop) { 139 | width: $textbook-page-with-sidebar-width; 140 | } 141 | } 142 | 143 | // Scrollbar width 144 | ::-webkit-scrollbar { 145 | width: 5px; 146 | background: #f1f1f1; 147 | } 148 | 149 | ::-webkit-scrollbar-thumb { 150 | background: #c1c1c1; 151 | } 152 | 153 | main, nav { 154 | scrollbar-width: thin; 155 | } -------------------------------------------------------------------------------- /_sass/components/_components.textbook__sidebar-right.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Styling for within-page navigation. 3 | * 4 | * [1]: When the screen is large enough to hold the sidebar, place the sidebar 5 | * offset a bit off the right side of the screen. 6 | * 7 | * [2]: When the screen is large enough that the page content itself starts 8 | * having margins, use a semi-hack to position the sidebar just the right 9 | * offset from the center of the screen to be in the correct spot. We're 10 | * aiming to have the sidebar positioned just to the right of the page 11 | * content which means we take the page width without the sidebar, divide it 12 | * by 2, and add padding. 13 | */ 14 | 15 | /* [2] */ 16 | .sidebar__right > * { 17 | direction: ltr; 18 | } 19 | 20 | aside.sidebar__right { 21 | // Positioning 22 | overflow-x: hidden; 23 | background-color: $book-background-color; 24 | overflow-y: auto; 25 | max-height: 90vh; // Required for scrolling to work properly 26 | scrollbar-width: thin; 27 | direction: rtl; 28 | 29 | // Font and look 30 | font-family: -apple-system, BlinkMacSystemFont, 'Roboto', 'Segoe UI', 31 | 'Helvetica Neue', 'Lucida Grande', Arial, sans-serif; 32 | color: #7a8288; 33 | border-left: 1px solid #c3c3c3; 34 | text-transform: uppercase; 35 | letter-spacing: 1px; 36 | 37 | // Show/hide navbar underneath 38 | nav { 39 | transition: opacity .25s ease-in-out, height .25s ease-in-out; 40 | -moz-transition: opacity .25s ease-in-out, height .25s ease-in-out; 41 | -webkit-transition: opacity .25s ease-in-out, height .25s ease-in-out; 42 | overflow-y: hidden; 43 | opacity: 0; 44 | height: 0px; 45 | 46 | @include mq($from: desktop) { 47 | opacity: 100; 48 | height: auto; 49 | } 50 | 51 | @include mq($from: laptop) { 52 | &.no_sidebar_content { 53 | opacity: 100; 54 | height: auto; 55 | } 56 | } 57 | } 58 | 59 | &:hover nav { 60 | opacity: 100; 61 | height: auto; 62 | } 63 | } 64 | 65 | 66 | h4.nav__title { 67 | color: #7a8288; 68 | margin: 0; 69 | padding: 0.5rem 1rem; 70 | font-family: -apple-system, BlinkMacSystemFont, 'Roboto', 'Segoe UI', 71 | 'Helvetica Neue', 'Lucida Grande', Arial, sans-serif; 72 | font-size: 0.8em; 73 | font-weight: bold; 74 | } 75 | 76 | ul.toc__menu { 77 | margin: 0; 78 | padding: 0; 79 | width: 100%; 80 | list-style: none; 81 | font-size: 0.8rem; 82 | } 83 | 84 | ul.toc__menu a { 85 | display: block; 86 | padding: 0.25rem .75rem; 87 | color: #898c8f; 88 | font-size: 0.8em; 89 | font-weight: bold; 90 | line-height: 1.5; 91 | } 92 | 93 | .toc__menu ul { 94 | margin-left: 0px; 95 | } 96 | 97 | .toc__menu li ul { 98 | li { 99 | list-style-type: none; 100 | padding-left: 18px; 101 | } 102 | 103 | a { 104 | font-weight: normal; 105 | padding: 0.25rem .5rem; 106 | } 107 | } 108 | 109 | // Active sidebar entries 110 | nav.onthispage li.active a { 111 | color: #0077d8; 112 | } 113 | 114 | li.active { 115 | border-left: 1px solid #0077d8; 116 | margin-left: -1px; 117 | } 118 | -------------------------------------------------------------------------------- /_sass/components/_components.textbook__sidebar.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Styling for the sidebar. 3 | * 4 | * [1]: The sidebar is implemented as ul and li elements so we need to remove 5 | * the bullets and margins. Also make chapter fonts a bit bigger. 6 | * [2]: The entries are tags so we need to remove the default styling. 7 | * [3]: The sidebar divider is just an empty element with a border. 8 | * [4]: The current section needs a higher specificity to override the :hover 9 | * selectors used previously. 10 | * [5]: The logo displayed above the sidebar 11 | * [6]: The footer at the bottom of the sidebar 12 | */ 13 | $color-sidebar-bg: rgba(255, 255, 255, 0) !default; 14 | $color-sidebar-entry: #364149 !default; 15 | $color-sidebar-entry--active: $color-links !default; 16 | $color-sidebar-divider: #bbb !default; 17 | 18 | .c-textbook__sidebar { 19 | background-color: $color-sidebar-bg; 20 | padding: $spacing-unit-small; 21 | 22 | @include inuit-font-size(14px); 23 | border-right: 1px solid rgba(0, 0, 0, 0.07); 24 | opacity: 0.6; 25 | -webkit-transition: opacity 0.2s ease-in-out; 26 | transition: opacity 0.2s ease-in-out; 27 | 28 | &:hover { 29 | opacity: 1; 30 | } 31 | } 32 | 33 | /* [1] */ 34 | .c-sidebar__chapters { 35 | list-style: none; 36 | margin-left: 0; 37 | margin-bottom: 0; 38 | } 39 | 40 | li.c-sidebar__chapter > a { 41 | font-size: 1.2em; 42 | } 43 | 44 | /* [1] */ 45 | .c-sidebar__sections { 46 | list-style: none; 47 | margin-left: $spacing-unit-small; 48 | margin-bottom: 0; 49 | } 50 | 51 | li.c-sidebar__subsection { 52 | margin-left: 20px; 53 | } 54 | 55 | /* [2] */ 56 | .c-sidebar__entry { 57 | display: block; 58 | 59 | padding: $spacing-unit-tiny; 60 | 61 | color: $color-sidebar-entry; 62 | text-decoration: none; 63 | 64 | &:hover { 65 | text-decoration: underline; 66 | } 67 | 68 | &:visited { 69 | color: $color-sidebar-entry; 70 | } 71 | } 72 | 73 | /* [4] */ 74 | .c-sidebar__entry--active.c-sidebar__entry--active { 75 | color: $color-sidebar-entry--active; 76 | } 77 | 78 | /* [3] */ 79 | .c-sidebar__divider { 80 | border-top: 1px solid $color-sidebar-divider; 81 | margin: $spacing-unit-tiny; 82 | } 83 | 84 | /* [5] */ 85 | img.textbook_logo { 86 | margin-top: 20px; 87 | max-height: 100px; 88 | margin: 0px auto 20px auto; 89 | display: block; 90 | } 91 | 92 | /* [6] */ 93 | p.sidebar_footer { 94 | text-align: center; 95 | padding: 10px 20px 0px 0px; 96 | font-size: .9em; 97 | } -------------------------------------------------------------------------------- /_sass/components/_components.thebelab.scss: -------------------------------------------------------------------------------- 1 | 2 | .thebelab-button { 3 | z-index: 999; 4 | display: inline-block; 5 | padding: 0.35em 1.2em; 6 | margin: 0px 1px; 7 | border-radius: 0.12em; 8 | box-sizing: border-box; 9 | text-decoration: none; 10 | font-family: 'Roboto', sans-serif; 11 | font-weight: 300; 12 | text-align: center; 13 | transition: all 0.2s; 14 | background-color: #dddddd; 15 | border: 0.05em solid white; 16 | color: #000000; 17 | } 18 | 19 | .thebelab-button:hover{ 20 | border: 0.05em solid black; 21 | background-color: #fcfcfc; 22 | } 23 | 24 | 25 | div.jp-OutputArea-output { 26 | padding: 5px; 27 | } -------------------------------------------------------------------------------- /_sass/components/_components.topbar.scss: -------------------------------------------------------------------------------- 1 | .c-topbar__label { 2 | @include inuit-font-size(12px); 3 | display: inline-block; 4 | margin-left: $spacing-unit-tiny; 5 | vertical-align: middle; 6 | text-transform: uppercase; 7 | } 8 | 9 | .c-topbar { 10 | .hamburger, .buttons { 11 | float: left; 12 | } 13 | 14 | #js-sidebar-toggle { 15 | margin-right: 5px; 16 | padding-top: 4px; 17 | } 18 | 19 | span.hamburger-box { 20 | width: 40px; 21 | height: 30px; 22 | padding-left: 10px; 23 | } 24 | 25 | .c-topbar__buttons { 26 | @include mq($from: tablet) { 27 | width: calc(100% - #{$right-sidebar-width} - 20px) 28 | } 29 | } 30 | 31 | .topbar-right-button { 32 | font-size: 1.4em; 33 | display: block; 34 | float: right; 35 | color: #7a8288; 36 | padding: 0 0.5rem; 37 | 38 | &:hover { 39 | color: $color-links; 40 | } 41 | } 42 | } 43 | 44 | // Download buttons 45 | 46 | .download-buttons { 47 | display: none; 48 | position: absolute; 49 | 50 | button { 51 | min-width: 100px !important; 52 | border: 1px white solid !important; 53 | border-radius: 0 !important; 54 | } 55 | } 56 | 57 | .download-buttons-dropdown { 58 | position: relative; 59 | display: inline-block; 60 | 61 | &:hover div.download-buttons { 62 | display: block; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /_sass/elements/_elements.links.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Styling for links 3 | */ 4 | 5 | a, 6 | a:visited { 7 | color: $color-links; 8 | text-decoration: none; 9 | } 10 | 11 | // Anchor links 12 | // Uncomment this after https://github.com/jupyter/nbconvert/pull/1101 is released 13 | // main.jupyter-page { 14 | // a.anchor-link { 15 | // visibility: hidden; 16 | // font-size: 15px; 17 | // padding-left: 5px; 18 | 19 | // i { 20 | // font-style: normal; 21 | // } 22 | // } 23 | 24 | // h2, h3, h4, h5 { 25 | // &:hover a.anchor-link { 26 | // visibility: visible; 27 | // } 28 | // } 29 | // } -------------------------------------------------------------------------------- /_sass/elements/_elements.syntax-highlighting.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Syntax highlighting for code cells 3 | */ 4 | 5 | pre.highlight { 6 | overflow-x: auto; 7 | padding: .5em; 8 | } 9 | .highlight { 10 | 11 | .c { color: #998; font-style: italic } // Comment 12 | .err { color: #a61717; background-color: #e3d2d2 } // Error 13 | .k { font-weight: bold } // Keyword 14 | .o { font-weight: bold } // Operator 15 | .cm { color: #998; font-style: italic } // Comment.Multiline 16 | .cp { color: #999; font-weight: bold } // Comment.Preproc 17 | .c1 { color: #998; font-style: italic } // Comment.Single 18 | .cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special 19 | .gd { color: #000; background-color: #fdd } // Generic.Deleted 20 | .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific 21 | .ge { font-style: italic } // Generic.Emph 22 | .gr { color: #a00 } // Generic.Error 23 | .gh { color: #999 } // Generic.Heading 24 | .gi { color: #000; background-color: #dfd } // Generic.Inserted 25 | .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific 26 | .go { color: #888 } // Generic.Output 27 | .gp { color: #555 } // Generic.Prompt 28 | .gs { font-weight: bold } // Generic.Strong 29 | .gu { color: #aaa } // Generic.Subheading 30 | .gt { color: #a00 } // Generic.Traceback 31 | .kc { font-weight: bold } // Keyword.Constant 32 | .kd { font-weight: bold } // Keyword.Declaration 33 | .kp { font-weight: bold } // Keyword.Pseudo 34 | .kr { font-weight: bold } // Keyword.Reserved 35 | .kt { color: #458; font-weight: bold } // Keyword.Type 36 | .m { color: #099 } // Literal.Number 37 | .s { color: #d14 } // Literal.String 38 | .na { color: #008080 } // Name.Attribute 39 | .nb { color: #0086B3 } // Name.Builtin 40 | .nc { color: #458; font-weight: bold } // Name.Class 41 | .no { color: #008080 } // Name.Constant 42 | .ni { color: #800080 } // Name.Entity 43 | .ne { color: #900; font-weight: bold } // Name.Exception 44 | .nf { color: #900; font-weight: bold } // Name.Function 45 | .nn { color: #555 } // Name.Namespace 46 | .nt { color: #000080 } // Name.Tag 47 | .nv { color: #008080 } // Name.Variable 48 | .ow { font-weight: bold } // Operator.Word 49 | .w { color: #bbb } // Text.Whitespace 50 | .mf { color: #099 } // Literal.Number.Float 51 | .mh { color: #099 } // Literal.Number.Hex 52 | .mi { color: #099 } // Literal.Number.Integer 53 | .mo { color: #099 } // Literal.Number.Oct 54 | .sb { color: #d14 } // Literal.String.Backtick 55 | .sc { color: #d14 } // Literal.String.Char 56 | .sd { color: #d14 } // Literal.String.Doc 57 | .s2 { color: #d14 } // Literal.String.Double 58 | .se { color: #d14 } // Literal.String.Escape 59 | .sh { color: #d14 } // Literal.String.Heredoc 60 | .si { color: #d14 } // Literal.String.Interpol 61 | .sx { color: #d14 } // Literal.String.Other 62 | .sr { color: #009926 } // Literal.String.Regex 63 | .s1 { color: #d14 } // Literal.String.Single 64 | .ss { color: #990073 } // Literal.String.Symbol 65 | .bp { color: #999 } // Name.Builtin.Pseudo 66 | .vc { color: #008080 } // Name.Variable.Class 67 | .vg { color: #008080 } // Name.Variable.Global 68 | .vi { color: #008080 } // Name.Variable.Instance 69 | .il { color: #099 } // Literal.Number.Integer.Long 70 | } 71 | 72 | /* ANSI coloring for text_regex.ipynb */ 73 | .ansi-bold { 74 | font-weight: bold; 75 | } 76 | 77 | .ansi-yellow-bg { 78 | background-color: #DDB62B; 79 | } 80 | 81 | .ansi-black-intense-fg { 82 | color: #282C36; 83 | } 84 | -------------------------------------------------------------------------------- /_sass/elements/_elements.tables.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Styling for tables. In the textbook, almost all tables display the contents 3 | * of a pandas DataFrame. 4 | * 5 | * [1]: Some tables are very small, so we shouldn't force them to be full-width 6 | * [2]: Add striping to table rows to make them easier to read. 7 | */ 8 | 9 | table { 10 | /* [1] */ 11 | max-width: 100%; 12 | width: initial; 13 | 14 | border-collapse: collapse; 15 | border-spacing: 0; 16 | } 17 | 18 | table td, 19 | table th { 20 | padding: $spacing-unit-tiny $spacing-unit-small; 21 | border: 1px solid $color-dark-gray; 22 | text-align: right; 23 | } 24 | 25 | /* [2] */ 26 | table tr:nth-child(2n) { 27 | background-color: $color-light-gray; 28 | } 29 | -------------------------------------------------------------------------------- /_sass/elements/_elements.typography.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Site-wide typography 3 | */ 4 | 5 | body { 6 | // Use system font stack: 7 | // https://css-tricks.com/snippets/css/system-font-stack/ 8 | font-family: $global-font-family !important; 9 | $color: $color-text; 10 | } 11 | 12 | /** 13 | * Code-like elements. 14 | */ 15 | pre, 16 | code, 17 | kbd, 18 | samp { 19 | font-family: $monospace; 20 | font-style: normal; 21 | } 22 | 23 | /** 24 | * Header styling 25 | */ 26 | $header-font-family: $sans-serif !default; 27 | 28 | h1, 29 | h2, 30 | h3, 31 | h4, 32 | h5, 33 | h6 { 34 | margin: 2em 0 0.5em; 35 | line-height: 1.2; 36 | font-family: $header-font-family !important; 37 | font-weight: bold; 38 | } 39 | 40 | h1 { 41 | margin-top: 0; 42 | font-size: $type-size-3; 43 | } 44 | 45 | h2 { 46 | font-size: $type-size-4; 47 | } 48 | 49 | h3 { 50 | font-size: $type-size-5; 51 | } 52 | 53 | h4 { 54 | font-size: $type-size-6; 55 | } 56 | 57 | h5 { 58 | font-size: $type-size-6; 59 | } 60 | 61 | h6 { 62 | font-size: $type-size-6; 63 | } -------------------------------------------------------------------------------- /_sass/elements/_elements.variables.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Variables 3 | */ 4 | 5 | $serif: Georgia, Times, serif !default; 6 | $sans-serif: -apple-system, BlinkMacSystemFont, "Roboto", "Segoe UI", 7 | "Helvetica Neue", "Lucida Grande", Arial, sans-serif !default; 8 | $monospace: Monaco, Consolas, "Lucida Console", monospace !default; 9 | 10 | $global-font-family: $sans-serif !default; 11 | $header-font-family: $sans-serif !default; 12 | $caption-font-family: $serif !default; 13 | 14 | /* type scale */ 15 | $type-size-1: 2.441em !default; // ~39.056px 16 | $type-size-2: 1.953em !default; // ~31.248px 17 | $type-size-3: 1.563em !default; // ~25.008px 18 | $type-size-4: 1.25em !default; // ~20px 19 | $type-size-5: 1em !default; // ~16px 20 | $type-size-6: 0.75em !default; // ~12px 21 | $type-size-7: 0.6875em !default; // ~11px 22 | $type-size-8: 0.625em !default; // ~10px 23 | 24 | /* Left-margin (applied if screen is big enough) */ 25 | $left-site-margin: 20% !default; 26 | $site-margin-min-width: 1700px !default; 27 | -------------------------------------------------------------------------------- /_sass/generic/_generic.phone-scrolling.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Makes scrolling smooth for phones 3 | */ 4 | 5 | * { 6 | -webkit-overflow-scrolling: touch; 7 | } 8 | -------------------------------------------------------------------------------- /_sass/hamburgers/_base.scss: -------------------------------------------------------------------------------- 1 | // Hamburger 2 | // ================================================== 3 | .hamburger { 4 | padding: $hamburger-padding-y $hamburger-padding-x; 5 | display: inline-block; 6 | cursor: pointer; 7 | 8 | transition-property: opacity, filter; 9 | transition-duration: $hamburger-hover-transition-duration; 10 | transition-timing-function: $hamburger-hover-transition-timing-function; 11 | 12 | // Normalize (