From 667d83b084967c37f497b2fc6c3f781b50e39b6d Mon Sep 17 00:00:00 2001 From: "Oriol (ZBook)" Date: Sun, 5 Sep 2021 19:49:32 +0300 Subject: [PATCH] example doc restructure working and hopefully illustrative doc skeleton update requirements WIP Change log: - Upload new PyMC logo - Updated conf.py to pymc instead of pymc3 - Start configuring and populating index page - Start configuring and populating learning page - Start configuring and populating api page - Updated API to follow the docs/Architecture.png layout - Start configuring and populating learning page - Fix typo in filename of "index legacy" add community page, other minor changes Continue restructuring the API Delete conflicting files example doc restructure update requirements update requirements and gitignore some fixes add changes introduced by pre-commit checks fix community page title update api for distributions update gaussian process api fix end of file more changes sponsor logos sponsor logos cleanup, other changes --- .gitignore | 1 + .gitmodules | 4 - docs/logos/sponsors/numfocus.png | Bin 0 -> 42399 bytes .../sponsors/pymc-labs.png} | Bin docs/pymc_logo.jpg | Bin 84868 -> 0 bytes docs/source/_templates/footer.html | 9 + docs/source/_templates/layout.html | 26 +- docs/source/about.rst | 5 - docs/source/api.rst | 21 +- docs/source/api/backends.rst | 24 - docs/source/api/bounds.rst | 57 -- docs/source/api/data.rst | 8 - docs/source/api/distributions.rst | 1 + docs/source/api/distributions/continuous.rst | 13 +- docs/source/api/distributions/discrete.rst | 8 +- .../source/api/distributions/multivariate.rst | 15 +- docs/source/api/distributions/simulator.rst | 2 + docs/source/api/distributions/transforms.rst | 8 +- docs/source/api/distributions/utilities.rst | 1 - docs/source/api/glm.rst | 6 +- docs/source/api/gp/cov.rst | 31 +- docs/source/api/inference.rst | 4 +- docs/source/api/model_graph.rst | 6 - docs/source/api/ode.rst | 6 +- docs/source/api/samplers.rst | 13 + docs/source/api/smc.rst | 8 + docs/source/api/smc/sample_smc.rst | 9 + docs/source/api/smc/smc.rst | 12 + docs/source/api/variables.rst | 10 - docs/source/community.md | 36 ++ docs/source/conf.py | 24 +- .../{ => contributing}/developer_guide.rst | 0 ...veloper_guide_implementing_distribution.md | 0 docs/source/contributing/index.md | 34 ++ docs/source/glossary.md | 11 +- .../{ => guides}/Gaussian_Processes.rst | 0 .../Probability_Distributions.rst | 0 docs/source/index.md | 100 ++++ docs/source/index.rst | 159 ------ docs/source/installation.md | 13 + docs/source/learn.md | 182 ------- docs/source/learn/step1.md | 6 + docs/source/learn/step2.md | 28 + docs/source/learn/step3.md | 3 + docs/source/learning.md | 88 +++ docs/source/pymc-examples | 1 - docs/source/semantic_sphinx/layout.html | 159 ------ docs/source/semantic_sphinx/search.html | 71 --- docs/source/semantic_sphinx/static/gallery.js | 93 ---- .../semantic_sphinx/static/highlight.min.js | 3 - .../semantic_sphinx/static/searchtools.js | 505 ------------------ .../semantic_sphinx/static/semantic.min.js | 11 - docs/source/semantic_sphinx/theme.conf | 55 -- 53 files changed, 446 insertions(+), 1444 deletions(-) delete mode 100644 .gitmodules create mode 100644 docs/logos/sponsors/numfocus.png rename docs/{pymc-labs-logo.png => logos/sponsors/pymc-labs.png} (100%) delete mode 100644 docs/pymc_logo.jpg create mode 100644 docs/source/_templates/footer.html delete mode 100644 docs/source/api/backends.rst delete mode 100644 docs/source/api/bounds.rst delete mode 100644 docs/source/api/data.rst delete mode 100644 docs/source/api/model_graph.rst create mode 100644 docs/source/api/samplers.rst create mode 100644 docs/source/api/smc.rst create mode 100644 docs/source/api/smc/sample_smc.rst create mode 100644 docs/source/api/smc/smc.rst delete mode 100644 docs/source/api/variables.rst create mode 100644 docs/source/community.md rename docs/source/{ => contributing}/developer_guide.rst (100%) rename docs/source/{ => contributing}/developer_guide_implementing_distribution.md (100%) create mode 100644 docs/source/contributing/index.md rename docs/source/{ => guides}/Gaussian_Processes.rst (100%) rename docs/source/{ => guides}/Probability_Distributions.rst (100%) create mode 100644 docs/source/index.md delete mode 100644 docs/source/index.rst create mode 100644 docs/source/installation.md delete mode 100644 docs/source/learn.md create mode 100644 docs/source/learn/step1.md create mode 100644 docs/source/learn/step2.md create mode 100644 docs/source/learn/step3.md create mode 100644 docs/source/learning.md delete mode 160000 docs/source/pymc-examples delete mode 100644 docs/source/semantic_sphinx/layout.html delete mode 100644 docs/source/semantic_sphinx/search.html delete mode 100644 docs/source/semantic_sphinx/static/gallery.js delete mode 100644 docs/source/semantic_sphinx/static/highlight.min.js delete mode 100644 docs/source/semantic_sphinx/static/searchtools.js delete mode 100644 docs/source/semantic_sphinx/static/semantic.min.js delete mode 100644 docs/source/semantic_sphinx/theme.conf diff --git a/.gitignore b/.gitignore index dfa38d910f..6a2f23cc96 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ tags # Sphinx _build +docs/jupyter_execute # Merge tool *.orig diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index b19939f4dc..0000000000 --- a/.gitmodules +++ /dev/null @@ -1,4 +0,0 @@ -[submodule "docs/source/pymc-examples"] - path = docs/source/pymc-examples - url = https://github.com/pymc-devs/pymc-examples.git - branch = main diff --git a/docs/logos/sponsors/numfocus.png b/docs/logos/sponsors/numfocus.png new file mode 100644 index 0000000000000000000000000000000000000000..adf2de2257cccef14ba295c7daa596474ccbd14d GIT binary patch literal 42399 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 z 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≦%g+AJ z&c?D=i5&}WbgQn=k~TJoR;>n3(7Y23GCy_QYsJ10ZQv?&pF@_3Ee7172G1n7M#j8% zRTWiMuHKX9aEtKYe153Cln*pxeX254Q)^d+xx3cJiqiMX_IAY1RtcBU zz1H7#*~(e)_8RBTnYvRap1yc?-`p4P zn;q5_oQwQ4T_*nCwc7=yzxKxMQo4LQtqQo;M$r1u%)^@!d>f6U#m*d$S)pmLRcckf zZ}E!kC3jzk9hdv``p(Ire-o+p1KC_jX6n?CCY4Yx9wpHEl vuim{Sa<(sfrf0@&8Q#^Iw%U diff --git a/docs/source/_templates/footer.html b/docs/source/_templates/footer.html new file mode 100644 index 0000000000..93083ce2cc --- /dev/null +++ b/docs/source/_templates/footer.html @@ -0,0 +1,9 @@ +
+
+ {% for footer_item in theme_footer_items %} + + {% endfor %} +
+
diff --git a/docs/source/_templates/layout.html b/docs/source/_templates/layout.html index fbcc5b278e..0f4ea8c215 100644 --- a/docs/source/_templates/layout.html +++ b/docs/source/_templates/layout.html @@ -2,25 +2,25 @@ {% block docs_sidebar %} - {% if pagename != 'index' %} - {{ super() }} - {% endif %} +{% if pagename != 'index' %} +{{ super() }} +{% endif %} {% endblock %} {% block docs_toc %} - {% if pagename != 'index' %} - {{ super() }} - {% endif %} +{% if pagename != 'index' %} +{{ super() }} +{% endif %} {% endblock %} {% block docs_main %} - {% if pagename == 'index' %} -
- {% block body %} {% endblock %} -
- {% else %} - {{ super() }} - {% endif %} +{% if pagename == 'index' %} +
+ {% block body %} {% endblock %} +
+{% else %} +{{ super() }} +{% endif %} {% endblock %} diff --git a/docs/source/about.rst b/docs/source/about.rst index 03aa510b0a..6a9669c59f 100644 --- a/docs/source/about.rst +++ b/docs/source/about.rst @@ -1,8 +1,3 @@ -:orphan: - -.. - _href from docs/source/index.rst - .. _about: ********** diff --git a/docs/source/api.rst b/docs/source/api.rst index d53175bdfc..5a8daee222 100644 --- a/docs/source/api.rst +++ b/docs/source/api.rst @@ -1,8 +1,3 @@ -:orphan: - -.. - _"api" is referenced in html_theme_options docs/source/conf.py - .. _api: ************* @@ -13,20 +8,14 @@ API Reference :maxdepth: 2 api/distributions - api/bounds - api/inference - api/glm api/gp - api/plots - api/stats - api/backends - api/math - api/data api/model - api/model_graph - api/variables - api/shape_utils api/ode + api/samplers + api/smc + api/step_methods + api/inference + api/plots Indices and tables =================== diff --git a/docs/source/api/backends.rst b/docs/source/api/backends.rst deleted file mode 100644 index 89a9918efb..0000000000 --- a/docs/source/api/backends.rst +++ /dev/null @@ -1,24 +0,0 @@ -******** -Backends -******** - -.. currentmodule:: pymc.backends - -.. automodule:: pymc.backends - :members: - -ndarray -^^^^^^^ - -.. currentmodule:: pymc.backends.ndarray - -.. automodule:: pymc.backends.ndarray - :members: - -tracetab -^^^^^^^^ - -.. currentmodule:: pymc.backends.tracetab - -.. automodule:: pymc.backends.tracetab - :members: diff --git a/docs/source/api/bounds.rst b/docs/source/api/bounds.rst deleted file mode 100644 index 7db2ade609..0000000000 --- a/docs/source/api/bounds.rst +++ /dev/null @@ -1,57 +0,0 @@ -================= -Bounded Variables -================= - -PyMC includes the construct :class:`~pymc.distributions.bound.Bound` for -placing constraints on existing probability distributions. It modifies a given -distribution to take values only within a specified interval. - -Some types of variables require constraints. For instance, it doesn't make -sense for a standard deviation to have a negative value, so something like a -Normal prior on a parameter that represents a standard deviation would be -inappropriate. PyMC includes distributions that have positive support, such -as :class:`~pymc.distributions.continuous.Gamma` or -:class:`~pymc.distributions.continuous.Exponential`. PyMC also includes -several bounded distributions, such as -:class:`~pymc.distributions.continuous.Uniform`, -:class:`~pymc.distributions.continuous.HalfNormal`, and -:class:`~pymc.distributions.continuous.HalfCauchy`, that are restricted to a -specific domain. - -All univariate distributions in PyMC can be given bounds. The distribution of -a continuous variable that has been bounded is automatically transformed into -an unnormalized distribution whose domain is unconstrained. The transformation -improves the efficiency of sampling and variational inference algorithms. - -Usage -##### - -For example, one may have prior information that suggests that the value of a -parameter representing a standard deviation is near one. One could use a -Normal distribution while constraining the support to be positive. The -specification of a bounded distribution should go within the model block:: - - import pymc as pm - - with pm.Model() as model: - norm = Normal.dist(mu=1.0, sigma=3.0) - x = Bound('x', norm, lower=0.0) - -Caveats -####### - -* Bounds cannot be given to variables that are ``observed``. To model - truncated data, use a :func:`~pymc.model.Potential` in combination with a cumulative - probability function. See `this example notebook `_. - -* The automatic transformation applied to continuous distributions results in - an unnormalized probability distribution. This doesn't effect inference - algorithms but may complicate some model comparison procedures. - -Bounded Variable API -#################### - - -.. currentmodule:: pymc.distributions.bound -.. automodule:: pymc.distributions.bound - :members: diff --git a/docs/source/api/data.rst b/docs/source/api/data.rst deleted file mode 100644 index 6b1971e9cb..0000000000 --- a/docs/source/api/data.rst +++ /dev/null @@ -1,8 +0,0 @@ -**** -Data -**** - -.. currentmodule:: pymc.data - -.. automodule:: pymc.data - :members: diff --git a/docs/source/api/distributions.rst b/docs/source/api/distributions.rst index 60bb36aa36..91d4ceee65 100644 --- a/docs/source/api/distributions.rst +++ b/docs/source/api/distributions.rst @@ -6,6 +6,7 @@ Distributions distributions/continuous distributions/discrete + distributions/logprob distributions/multivariate distributions/mixture distributions/simulator diff --git a/docs/source/api/distributions/continuous.rst b/docs/source/api/distributions/continuous.rst index a6d4d99507..6deacb2549 100644 --- a/docs/source/api/distributions/continuous.rst +++ b/docs/source/api/distributions/continuous.rst @@ -10,32 +10,33 @@ Continuous HalfFlat Normal TruncatedNormal - HalfNormal - SkewNormal Beta Kumaraswamy Exponential Laplace - AsymmetricLaplace StudentT - HalfStudentT Cauchy HalfCauchy Gamma - InverseGamma Weibull + HalfStudentT LogNormal ChiSquared + HalfNormal Wald Pareto + InverseGamma ExGaussian VonMises + SkewNormal Triangular Gumbel - Rice Logistic LogitNormal Interpolated + Rice + Moyal + AsymmetricLaplace PolyaGamma .. automodule:: pymc.distributions.continuous diff --git a/docs/source/api/distributions/discrete.rst b/docs/source/api/distributions/discrete.rst index 1d10c592b7..363bb0cb46 100644 --- a/docs/source/api/distributions/discrete.rst +++ b/docs/source/api/distributions/discrete.rst @@ -6,19 +6,19 @@ Discrete .. autosummary:: Binomial - ZeroInflatedBinomial BetaBinomial Bernoulli + DiscreteWeibull Poisson - ZeroInflatedPoisson NegativeBinomial + Constant + ZeroInflatedPoisson + ZeroInflatedBinomial ZeroInflatedNegativeBinomial DiscreteUniform Geometric HyperGeometric Categorical - DiscreteWeibull - Constant OrderedLogistic OrderedProbit diff --git a/docs/source/api/distributions/multivariate.rst b/docs/source/api/distributions/multivariate.rst index 7c3f5c9861..8c25761a2f 100644 --- a/docs/source/api/distributions/multivariate.rst +++ b/docs/source/api/distributions/multivariate.rst @@ -6,16 +6,17 @@ Multivariate .. autosummary:: MvNormal - MatrixNormal - KroneckerNormal MvStudentT - Wishart - LKJCholeskyCov - LKJCorr - Multinomial - OrderedMultinomial Dirichlet + Multinomial DirichletMultinomial + OrderedMultinomial + Wishart + WishartBartlett + LKJCorr + LKJCholeskyCov + MatrixNormal + KroneckerNormal CAR .. automodule:: pymc.distributions.multivariate diff --git a/docs/source/api/distributions/simulator.rst b/docs/source/api/distributions/simulator.rst index ed03609e01..aa8385a410 100644 --- a/docs/source/api/distributions/simulator.rst +++ b/docs/source/api/distributions/simulator.rst @@ -5,7 +5,9 @@ Simulator .. currentmodule:: pymc.distributions.simulator .. autosummary:: + SimulatorRV Simulator + KullbackLiebler .. automodule:: pymc.distributions.simulator :members: diff --git a/docs/source/api/distributions/transforms.rst b/docs/source/api/distributions/transforms.rst index 1a8d71341e..ef3cf4a048 100644 --- a/docs/source/api/distributions/transforms.rst +++ b/docs/source/api/distributions/transforms.rst @@ -1,10 +1,10 @@ **************************************************************** -Transformations of a random variable from one space to another. +Transformations of a random variable from one space to another **************************************************************** Note that for convenience these entities can be addressed as ``pm.transforms.``\ *X* for any name *X*, although they are actually -implemented as ``pm.distributions.transforms.``\*X*. +implemented as ``pm.distributions.transforms.``\ *X*. .. currentmodule:: pymc.distributions.transforms @@ -14,13 +14,11 @@ implemented as ``pm.distributions.transforms.``\*X*. .. .. autosummary:: - transform + Transform stick_breaking logodds interval log_exp_m1 - lowerbound - upperbound ordered log sum_to_1 diff --git a/docs/source/api/distributions/utilities.rst b/docs/source/api/distributions/utilities.rst index 9e1be98faf..022308aea2 100644 --- a/docs/source/api/distributions/utilities.rst +++ b/docs/source/api/distributions/utilities.rst @@ -11,7 +11,6 @@ Distribution utility classes and functions NoDistribution DensityDist - .. autoclass:: Distribution .. autoclass:: Discrete .. autoclass:: Continuous diff --git a/docs/source/api/glm.rst b/docs/source/api/glm.rst index f3dcb307d3..051d2582db 100644 --- a/docs/source/api/glm.rst +++ b/docs/source/api/glm.rst @@ -1,6 +1,6 @@ -************************* -Generalized Linear Models -************************* +******************************** +Generalized Linear Models (GLMs) +******************************** .. currentmodule:: pymc.glm.linear diff --git a/docs/source/api/gp/cov.rst b/docs/source/api/gp/cov.rst index 215f8a32e8..024832e0b2 100644 --- a/docs/source/api/gp/cov.rst +++ b/docs/source/api/gp/cov.rst @@ -4,21 +4,22 @@ Covariance Functions .. currentmodule:: pymc.gp.cov .. autosummary:: - Constant - WhiteNoise - ExpQuad - RatQuad - Matern32 - Matern52 - Exponential - Cosine - Periodic - Linear - Polynomial - WarpedInput - Gibbs - Kron - Coregion + Constant + WhiteNoise + ExpQuad + RatQuad + Exponential + Matern52 + Matern32 + Linear + Polynomial + Cosine + Periodic + WarpedInput + Gibbs + Coregion + ScaledCov + Kron .. automodule:: pymc.gp.cov :members: diff --git a/docs/source/api/inference.rst b/docs/source/api/inference.rst index c5348bb5b2..ad7c54f37c 100644 --- a/docs/source/api/inference.rst +++ b/docs/source/api/inference.rst @@ -31,9 +31,9 @@ Metropolis ~~~~~~~~~~ .. currentmodule:: pymc.step_methods.metropolis - -.. automodule:: pymc.step_methods.metropolis +odule:: pymc.step_methods.metropolis :members: +.. autom Slice ~~~~~ diff --git a/docs/source/api/model_graph.rst b/docs/source/api/model_graph.rst deleted file mode 100644 index de9b9f223b..0000000000 --- a/docs/source/api/model_graph.rst +++ /dev/null @@ -1,6 +0,0 @@ -Graphing Models ---------------- - -.. currentmodule:: pymc.model_graph -.. automodule:: pymc.model_graph - :members: diff --git a/docs/source/api/ode.rst b/docs/source/api/ode.rst index bf61bc2ada..f99585c4b7 100644 --- a/docs/source/api/ode.rst +++ b/docs/source/api/ode.rst @@ -1,6 +1,6 @@ -==== -ODE -==== +************************************** +Ordinary differential equations (ODEs) +************************************** This submodule contains tools used to perform inference on ordinary differential equations. diff --git a/docs/source/api/samplers.rst b/docs/source/api/samplers.rst new file mode 100644 index 0000000000..e36c0e4b82 --- /dev/null +++ b/docs/source/api/samplers.rst @@ -0,0 +1,13 @@ +==== +Samplers +==== + +This submodule contains functions for MCMC sampling. + + +.. currentmodule:: pymc.sampling + +.. autosummary:: + +.. automodule:: pymc.sampling + :members: diff --git a/docs/source/api/smc.rst b/docs/source/api/smc.rst new file mode 100644 index 0000000000..ddac99d27c --- /dev/null +++ b/docs/source/api/smc.rst @@ -0,0 +1,8 @@ +************* +Sequential Monte Carlo +************* + +.. toctree:: + + smc/sample_smc + smc/smc diff --git a/docs/source/api/smc/sample_smc.rst b/docs/source/api/smc/sample_smc.rst new file mode 100644 index 0000000000..b20681d1f0 --- /dev/null +++ b/docs/source/api/smc/sample_smc.rst @@ -0,0 +1,9 @@ +*********************************** +Sample Sequential Monte Carlo (SMC) +*********************************** + +.. currentmodule:: pymc.smc.sample_smc +.. autosummary:: + sample_smc + +.. autofunction:: pymc.smc.sample_smc diff --git a/docs/source/api/smc/smc.rst b/docs/source/api/smc/smc.rst new file mode 100644 index 0000000000..92e849e1e8 --- /dev/null +++ b/docs/source/api/smc/smc.rst @@ -0,0 +1,12 @@ +**************************** +Sequential Monte Carlo (SMC) +**************************** + +.. currentmodule:: pymc.smc.smc +.. autosummary:: + SMC_KERNEL + IMH + MH + +.. automodule:: pymc.smc.smc + :members: diff --git a/docs/source/api/variables.rst b/docs/source/api/variables.rst deleted file mode 100644 index 78d9ca7cd0..0000000000 --- a/docs/source/api/variables.rst +++ /dev/null @@ -1,10 +0,0 @@ -Random Variables ----------------- - -.. currentmodule:: pymc.model - -The normal PyMC programmer will typically not need to interact with these classes, except possibly when debugging. Otherwise they are primarily of interest to developers. - - -.. autoclass:: ValueGradFunction - :members: diff --git a/docs/source/community.md b/docs/source/community.md new file mode 100644 index 0000000000..612b90accb --- /dev/null +++ b/docs/source/community.md @@ -0,0 +1,36 @@ +# Community + +:::{list-table} +:header-rows: 0 +:widths: 10 150 + +* - {fa}`discourse,fa-2x,style=fab` + - [Discourse Forum](https://discourse.pymc.io/) + + The PyMC discourse forum is a great place to ask general questions about Bayesian statistics, or more specific ones about PyMC usage. +* - {fa}`meetup,fa-2x,style=fab` + - Conferences + + PyMC talks have been given at a number of conferences, including [PyCon](https://us.pycon.org/), + [PyData](https://pydata.org/events/), and [ODSC](https://odsc.com/) events. +* - {fa}`python,fa-2x,style=fab` + - [Meetup Groups](https://www.meetup.com/) + + Many areas have an local Bayesian, PyData, or Stan meetup. +::: + +## Videos + +:::{list-table} +:header-rows: 0 +:widths: 10 150 + +* - {fa}`youtube,fa-2x,style=fab` + - [YouTube Playlist](https://www.youtube.com/playlist?list=PL1Ma_1DBbE82OVW8Fz_6Ts1oOeyOAiovy) + + There is an actively curated playlist of PyMC talks on YouTube. +* - {fa}`youtube,fa-2x,style=fab` + - [Advance Bayesian Modelling with PyMC](https://github.com/junpenglao/advance-bayesian-modelling-with-PyMC) + + A two days advance workshop in May 2018 @CEAi in the Czech Republic. +::: diff --git a/docs/source/conf.py b/docs/source/conf.py index c899b9a441..14fafd730e 100755 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -19,12 +19,10 @@ import os import sys - # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath(os.path.join("..", ".."))) -sys.path.insert(0, os.path.abspath("sphinxext")) import pymc # isort:skip # -- General configuration ------------------------------------------------ @@ -47,11 +45,12 @@ "IPython.sphinxext.ipython_directive", "sphinx.ext.autosectionlabel", "sphinx.ext.napoleon", - "gallery_generator", "myst_nb", "sphinx_design", "sphinx_panels", "notfound.extension", + "sphinx_design", + "sphinx_copybutton", ] # Don't auto-generate summary for class members. @@ -116,7 +115,7 @@ # myst and panels config jupyter_execute_notebooks = "off" -myst_heading_anchors = 3 +myst_heading_anchors = 2 myst_enable_extensions = [ "colon_fence", ] @@ -154,6 +153,7 @@ "arviz": ("https://arviz-devs.github.io/arviz/", None), "aesara": ("https://aesara.readthedocs.io/en/latest/", None), "numpy": ("https://numpy.org/doc/stable/", None), + "nb": ("https://pymc-examples.readthedocs.io/en/latest/", None), } @@ -180,12 +180,19 @@ "url": "https://twitter.com/pymc_devs", "icon": "fab fa-twitter-square", }, + { + "name": "Discourse", + "url": "https://discourse.pymc.io", + "icon": "fab fa-discourse", + }, ], "show_prev_next": False, + "navbar_align": "left", "navbar_start": ["navbar-logo", "navbar-version"], "navbar_end": ["search-field.html", "navbar-icon-links.html"], "search_bar_text": "Search...", "use_edit_page_button": False, # TODO: see how to skip of fix for generated pages + "externalrefs": True, "google_analytics_id": "UA-176578023-1", } html_context = { @@ -194,7 +201,12 @@ "github_version": "main", "doc_path": "docs/source/", } -html_sidebars = {"learn": [], "**": ["sidebar-nav-bs.html", "sidebar-ethical-ads.html"]} +# this controls which sidebar sections are available in which pages. [] removes the left sidebar +html_sidebars = { + "learn": [], + "installation": [], + "**": ["sidebar-nav-bs.html", "sidebar-ethical-ads.html"], +} # Add any paths that contain custom themes here, relative to this directory. # html_theme_path = [] @@ -208,7 +220,7 @@ # The name of an image file (relative to this directory) to place at the top # of the sidebar. -html_logo = "../pymc_logo.jpg" +html_logo = "../logos/PyMC.jpg" # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 diff --git a/docs/source/developer_guide.rst b/docs/source/contributing/developer_guide.rst similarity index 100% rename from docs/source/developer_guide.rst rename to docs/source/contributing/developer_guide.rst diff --git a/docs/source/developer_guide_implementing_distribution.md b/docs/source/contributing/developer_guide_implementing_distribution.md similarity index 100% rename from docs/source/developer_guide_implementing_distribution.md rename to docs/source/contributing/developer_guide_implementing_distribution.md diff --git a/docs/source/contributing/index.md b/docs/source/contributing/index.md new file mode 100644 index 0000000000..8d9f5e0d3a --- /dev/null +++ b/docs/source/contributing/index.md @@ -0,0 +1,34 @@ +# Contributing + +PyMC is an open source, collective effort. Find all the ways in which you can help make it better. + +## Help develop PyMC + +Learn about developing PyMC in our Developer's section. + +See open issues + +## Help improve the documentation + +:::{list-table} +:header-rows: 0 +:widths: 10 150 + +* - {fa}`discourse,fa-2x,style=fab` + - Beginners + +New to the open source space? Find a good beginner friendly documentation issue you can help with [here](https://github.com/pymc-devs/pymc/issues?q=is%3Aissue+is%3Aopen+label%3A%22beginner+friendly%22+label%3A%22docs%22) or [here](https://github.com/pymc-devs/pymc-examples/issues?q=is%3Aopen+label%3Adocs+label%3A%22good+first+issue%22). + +You will need to express your interest in the issue by commenting on it using your Github account, and you will need to use some beginner level Git to complete the Pull Request process, but don't worry! There are plenty of good [tutorials](https://guides.github.com/activities/hello-world/) out there, and PyMC reviewers are happy to help. +:::: + + +## Others +Issue triaging + +:::{toctree} +:hidden: + +developer_guide +developer_guide_implementing_distribution +::: \ No newline at end of file diff --git a/docs/source/glossary.md b/docs/source/glossary.md index fe73454b84..460820e993 100644 --- a/docs/source/glossary.md +++ b/docs/source/glossary.md @@ -3,16 +3,7 @@ A glossary of common terms used throughout the PyMC documentation and examples. :::::{glossary} -:sorted: -[Term with external reference](https://www.youtube.com/watch?v=6dc7JgR8eI0) - Terms are defined within this glossary directive. The term id is defined as the non - indented line, and can be text alone (like {term}`second term`) or also include a link - to an external reference. - -Second term - Definitions can have as many lines as desired, and should be written in markdown. Definitions - can contain any markdown formatting for MyST to parse, this includes basic markdown like **bold** - as well as MyST directives and roles like {fa}`fort awesome,style=fab` + Functional Programming Functional programming is a programming style that prefers the use of basic functions with explicit and distinct inputs and outputs. This contrasts with functions or methods that depend on variables that are not explicitly passed as an input (such as accessing `self.variable` inside a method) or that alter the inputs or other state variables in-place, instead of returning new distinct variables as outputs. diff --git a/docs/source/Gaussian_Processes.rst b/docs/source/guides/Gaussian_Processes.rst similarity index 100% rename from docs/source/Gaussian_Processes.rst rename to docs/source/guides/Gaussian_Processes.rst diff --git a/docs/source/Probability_Distributions.rst b/docs/source/guides/Probability_Distributions.rst similarity index 100% rename from docs/source/Probability_Distributions.rst rename to docs/source/guides/Probability_Distributions.rst diff --git a/docs/source/index.md b/docs/source/index.md new file mode 100644 index 0000000000..17cad3ab26 --- /dev/null +++ b/docs/source/index.md @@ -0,0 +1,100 @@ +--- +sd_hide_title: true +--- + +# PyMC Documentation + +:::{card} +:img-top: https://raw.githubusercontent.com/pymc-devs/pymc/main/docs/logos/PyMC.jpg +:margin: 0 2 auto auto +:width: 50% +:text-align: center + ++++ +Probabilistic Programming in Python +::: + +:::{button-ref} learning +:color: primary +:shadow: + +Get started! +::: + + +:::{card} Announcements: library name change and launching PyMC 4.0! +:width: 75% +:margin: auto + +We have two major announcements that we're excited to share. First of all, a new name for our library: the PyMC3 library you know and love is now called PyMC. PyMC3 still exists, as a specific major release between PyMC2 and PyMC 4.0. Read more about the renaming and how to solve related issues you might experience from this update [here](). + +This ties into our second announcement, which is that we are hereby launching the newest version of PyMC: PyMC 4.0! Read more about this new release [here](). +::: + +--- + +# Main Features & Benefits + +::::{grid} 1 2 2 2 +:::{grid-item-card} Friendly modelling API +PyMC allows you to write down models using an intuitive syntax to describe a data generating process. +::: +:::{grid-item-card} Cutting edge algorithms and model building blocks +Fit your model using gradient-based MCMC algorithms like NUTS, using ADVI for fast approximate inference — including minibatch-ADVI for scaling to large datasets — or using Gaussian processes to build Bayesian nonparametric models. +::: +:::: + +# Support + +PyMC is a non-profit project under NumFOCUS umbrella. If you value PyMC and want to support its development, consider donating to the project. + +:::{button-link} https://numfocus.org/donate-to-pymc3 +:color: secondary +:shadow: + +Donate +::: + +## Our sponsors + +::::{grid} 2 4 4 4 + +:::{grid-item} +::: + +:::{grid-item-card} +:img-background: https://www.numfocus.org/wp-content/uploads/2017/07/NumFocus_LRG.png +:link: https://numfocus.org/ +::: + +:::{grid-item-card} +:img-background: https://github.com/pymc-devs/pymc/raw/main/docs/pymc-labs-logo.png +:link: https://www.pymc-labs.io/ +::: + +:::{grid-item} +::: + +:::: + +# Citing PyMC + +Use this to cite the library: + +Salvatier J., Wiecki T.V., Fonnesbeck C. (2016) Probabilistic programming in Python using PyMC3. PeerJ Computer Science 2:e55 [DOI: 10.7717/peerj-cs.55.](https://doi.org/10.7717/peerj-cs.55) + +See [Google Scholar](https://scholar.google.de/scholar?oi=bibs&hl=en&authuser=1&cites=6936955228135731011) for a continuously updated list of papers citing PyMC3. + +:::{toctree} +:maxdepth: 1 +:hidden: + +installation +learning +api +developers +community +contributing/index +about +::: + diff --git a/docs/source/index.rst b/docs/source/index.rst deleted file mode 100644 index 1ef2b4c258..0000000000 --- a/docs/source/index.rst +++ /dev/null @@ -1,159 +0,0 @@ -.. title:: PyMC Documentation - -.. raw:: html - -
-
-
- -
-

Friendly modelling API

-

PyMC allows you to write down models using an intuitive syntax to describe a data generating - process.

-

Cutting edge algorithms and model building blocks

-

Fit your model using gradient-based MCMC algorithms like NUTS, using ADVI for fast approximate - inference — including minibatch-ADVI for scaling to large datasets — or using - Gaussian processes to build Bayesian nonparametric models.

-
-
- -.. toctree:: - :maxdepth: 1 - :hidden: - - Tutorials - Examples - Books + Videos - API - Developer Guide - About PyMC - -.. code-block:: python - - import pymc as pm - - X = np.random.normal(size=100) - y = np.random.normal(X) * 1.2 - - with pm.Model() as linear_model: - weights = pm.Normal("weights", mu=0, sigma=1) - noise = pm.Gamma("noise", alpha=2, beta=1) - y_observed = pm.Normal( - "y_observed", - mu=X @ weights, - sigma=noise, - observed=y, - ) - - prior = pm.sample_prior_predictive() - posterior = pm.sample() - posterior_pred = pm.sample_posterior_predictive(posterior) - -.. raw:: html - -
-
-
- -
- -

Installation

- -
-
-

Via conda-forge:

- -.. code-block:: bash - - conda install -c conda-forge pymc - - -.. raw:: html - -

Latest (unstable):

- -.. code-block:: bash - - pip install git+https://github.com/pymc-devs/pymc - -.. raw:: html - -
-
-
- - - -
-

License

-

PyMC is licensed under the Apache License, V2.

-
- -
-

Citing PyMC

-

Please choose from the following:

-
    -
  • DOIpaper Probabilistic programming in Python using PyMC3, Salvatier J., Wiecki T.V., Fonnesbeck C. (2016)
  • -
  • DOIzenodo A DOI for all versions.
  • -
  • DOIs for specific versions are shown on Zenodo and under Releases
  • -
-

See Google Scholar for a continuously updated list of papers citing PyMC.

-
- -
-

Support and sponsors

-

PyMC is a non-profit project under NumFOCUS umbrella. - If you value PyMC and want to support its development, consider - donating to the project or - read our support PyMC page. -

- -
- -
-
-
diff --git a/docs/source/installation.md b/docs/source/installation.md new file mode 100644 index 0000000000..60ec17cc82 --- /dev/null +++ b/docs/source/installation.md @@ -0,0 +1,13 @@ +# Installation + +To install PyMC, select the operating system where you want to perform the installation. + + +## Linux +[Linux installation guide](https://github.com/pymc-devs/pymc/wiki/Installation-Guide-(Linux)) + +## MacOS +[MacOS installation guide](https://github.com/pymc-devs/pymc/wiki/Installation-Guide-(MacOS)) + +## Windows +[Windows installation guide](https://github.com/pymc-devs/pymc/wiki/Installation-Guide-(Windows)) diff --git a/docs/source/learn.md b/docs/source/learn.md deleted file mode 100644 index 8766060759..0000000000 --- a/docs/source/learn.md +++ /dev/null @@ -1,182 +0,0 @@ -# Learn Bayesian statistics - -## ...with others! - -:::{list-table} -:header-rows: 0 -:widths: 10 150 - -* - {fa}`discourse,fa-2x,style=fab` - - [Discourse Forum](https://discourse.pymc.io/) - - The PyMC discourse forum is a great place to ask general questions about Bayesian statistics, or more specific ones about PyMC usage. -* - {fa}`meetup,fa-2x,style=fab` - - Conferences - - PyMC talks have been given at a number of conferences, including [PyCon](https://us.pycon.org/), - [PyData](https://pydata.org/events/), and [ODSC](https://odsc.com/) events. -* - {fa}`python,fa-2x,style=fab` - - [Meetup Groups](https://www.meetup.com/) - - Many areas have an local Bayesian, PyData, or Stan meetup. -::: - -## ...with a video! - -:::{list-table} -:header-rows: 0 -:widths: 10 150 - -* - {fa}`youtube,fa-2x,style=fab` - - [YouTube Playlist](https://www.youtube.com/playlist?list=PL1Ma_1DBbE82OVW8Fz_6Ts1oOeyOAiovy) - - There is an actively curated playlist of PyMC talks on YouTube. -* - {fa}`youtube,fa-2x,style=fab` - - [Advance Bayesian Modelling with PyMC](https://github.com/junpenglao/advance-bayesian-modelling-with-PyMC) - - A two days advance workshop in May 2018 @CEAi in the Czech Republic. -::: - -## ...with a book! - -::::{panels} -:column: col-lg-4 col-md-4 - ---- -:img-top: https://camo.githubusercontent.com/4a0aca82ca82efab71747d00db30f3a68de98e82/687474703a2f2f692e696d6775722e636f6d2f36444b596250622e706e673f31 - -Bayesian Methods for Hackers - -*Cameron Davidson-Pilon* -^^^^^^^^ - -Fantastic book with many applied code examples. - -:::{list-table} -:header-rows: 0 -:widths: 4 60 - -* - [{fa}`link`][hackers source] - - [Github Repo][hackers source] -* - [{fa}`link`][hackers homepage] - - [Project Homepage][hackers homepage] -::: - ---- -:img-top: https://lh3.googleusercontent.com/qU5yWpiVSkujyCnRZhQo8cBUrW_3e_7Cx4jEs5yfpmMbEEuDnxTGOELhy2x7F7qkwFwQJ4pFYNszZhNpN1jCSdrdHsVUHtf1Mg6F8qwb3SQe1TDE=w1280 - -Doing Bayesian Data Analysis - -*John Kruschke* -^^^^^^^^ - -Principled introduction to Bayesian data analysis. - -:::{list-table} -:header-rows: 0 -:widths: 4 60 - -* - [{fa}`link`][dbda website] - - [Book Website][dbda website] -* - [{fa}`link`][dbda 1st ed nb] - - [PyMC notebooks for *first edition*][dbda 1st ed nb] -* - [{fa}`link`][dbda 2nd ed nb] - - [PyMC notebooks for *second edition*][dbda 2nd ed nb] -::: - ---- -:img-top: http://xcelab.net/rm/wp-content/uploads/2012/01/9781482253443-191x300.jpg - -Statistical Rethingking - -*Richard McElreath* -^^^^^^^^ - -A Bayesian Course with Examples in R and Stan. - -:::{list-table} -:header-rows: 0 -:widths: 4 60 - -* - [{fa}`link`][rethinking website] - - [Book Website][rethinking website] -* - [{fa}`link`][rethinking port] - - [PyMC port of the code][rethinking port] -::: - ---- -:img-top: https://raw.githubusercontent.com/aloctavodia/BAP/master/Cover.png - -Bayesian Analysis with Python - -*Osvaldo Martin* -^^^^^^^^ - -A great introductory book written by a maintainer of PyMC. - -:::{list-table} -:header-rows: 0 -:widths: 4 60 - -* - [{fa}`link`][bap website] - - [Book Website][bap website] -* - [{fa}`link`][bap code] - - [Code and errata in PyMC][bap code] -::: - ---- -:img-top: https://images-na.ssl-images-amazon.com/images/I/51K33XI2I8L._SX330_BO1,204,203,200_.jpg - -Bayesian Cognitive Modeling: A Practical Course - -*Michael Lee and Eric-Jan Wagenmakers* -^^^^^^^^ - -Focused on using Bayesian statistics in cognitive modeling. - -:::{list-table} -:header-rows: 0 -:widths: 4 60 - -* - [{fa}`link`][bcm website] - - [Book Website][bcm website] -* - [{fa}`link`][bcm code] - - [PyMC implementation][bcm code] -::: - ---- -:img-top: http://www.stat.columbia.edu/~gelman/book/bda_cover.png - -Bayesian Data Analysis - -*Andrew Gelman, John Carlin, Hal Stern, David Dunson, Aki Vehtari, and Donald Rubin* -^^^^^^^^ - -A comprehensive, standard, and wonderful textbook on Bayesian methods. - -:::{list-table} -:header-rows: 0 -:widths: 4 60 - -* - [{fa}`link`][bda3 website] - - [Book Website][bda3 website] -* - [{fa}`link`][bda3 port] - - [Examples and exercises implemented in PyMC][bda3 port] -::: - -:::: - - -[hackers source]: https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers -[hackers homepage]: http://camdavidsonpilon.github.io/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/ -[dbda website]: https://sites.google.com/site/doingbayesiandataanalysis/home -[dbda 1st ed nb]: https://github.com/aloctavodia/Doing_bayesian_data_analysis -[dbda 2nd ed nb]: https://github.com/JWarmenhoven/DBDA-python -[rethinking website]: http://xcelab.net/rm/statistical-rethinking/ -[rethinking port]: https://github.com/pymc-devs/resources/tree/master/Rethinking -[bap website]: https://www.packtpub.com/big-data-and-business-intelligence/bayesian-analysis-python-second-edition -[bap code]: https://github.com/aloctavodia/BAP -[bcm website]: https://bayesmodels.com/ -[bcm code]: https://github.com/pymc-devs/resources/tree/master/BCM -[bda3 website]: https://www.stat.columbia.edu/~gelman/book/ -[bda3 port]: https://github.com/pymc-devs/resources/tree/master/BDA3 diff --git a/docs/source/learn/step1.md b/docs/source/learn/step1.md new file mode 100644 index 0000000000..236d3846df --- /dev/null +++ b/docs/source/learn/step1.md @@ -0,0 +1,6 @@ +# Step 1 + +Detailed explanation of step 1, which sections of the documentation are indicated +and which external references are recommended. i.e. to make the most of pymc3, you should +be familiar with Bayesian statistics. Here are some books whose code is available using pymc3 to +help you learn Bayesian statistics with pymc3. diff --git a/docs/source/learn/step2.md b/docs/source/learn/step2.md new file mode 100644 index 0000000000..b249cdf397 --- /dev/null +++ b/docs/source/learn/step2.md @@ -0,0 +1,28 @@ +# Step 2 + +Detailed explanation of step 2, which sections of the documentation are indicated +and which external references are recommended. + +::::{grid} 1 2 3 4 + +:::{grid-item} +{fas}`info-circle;fa-5x` + +{doc}`case_studies/multilevel_modeling` +::: +:::{grid-item} +{fas}`golf-ball;fa-5x` + +{doc}`case_studies/putting_workflow` +::: +:::{grid-item} +{fas}`book-open;fa-5x` + +{doc}`diagnostics_and_criticism/model_comparison` +::: +:::{grid-item} +{fas}`football-ball;fa-5x` + +{doc}`case_studies/rugby_analytics` +::: +:::: diff --git a/docs/source/learn/step3.md b/docs/source/learn/step3.md new file mode 100644 index 0000000000..78890e488a --- /dev/null +++ b/docs/source/learn/step3.md @@ -0,0 +1,3 @@ +# Step 3 + +More content diff --git a/docs/source/learning.md b/docs/source/learning.md new file mode 100644 index 0000000000..1c56c90f34 --- /dev/null +++ b/docs/source/learning.md @@ -0,0 +1,88 @@ +(learning)= +# Learning + +## Getting started + +Start here to get acquainted with the core concepts of Bayesian analysis and PyMC. The following resources only assume a very basic knowledge of code and statistics. + +::::{grid} 2 +:gutter: 4 + +:::{grid-item-card} Bayesian Methods for Hackers + +By Cameron Davidson-Pilon + +The "hacker" in the title means learn-as-you-code. This hands-on introduction teaches intuitive definitions of the Bayesian approach to statistics, worklflow and decision-making by applying them using PyMC. + +[Github repo](https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers) + +[Project homepage](http://camdavidsonpilon.github.io/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/) +::: + +:::{grid-item-card} Bayesian Analysis with Python + +by Osvaldo Martin + +A great introductory book written by a maintainer of PyMC. It provides a hands-on introduction to the main concepts of Bayesian statistics using synthetic and real data sets. Mastering the concepts in this book is a great foundation to pursue more advanced knowledge. + +[Book website](https://www.packtpub.com/big-data-and-business-intelligence/bayesian-analysis-python-second-edition) + +[Code and errata in PyMC](https://github.com/aloctavodia/BAP) +::: + +:::{grid-item-card} Getting started with PyMC + +The {doc}`nb:getting_started` notebook in our documentation shows the PyMC 4.0 code in action +::: + +:::{grid-item-card} Glossary + +PyMC's own {doc}`glossary` defines many core terms and provides useful references. +::: +:::: + +--- + +## Using PyMC + +(the path in pymc-examples repo excluding the `examples` folder, or using manual anchors if we decide to create them). + +::::{grid} 2 +:gutter: 4 + +:::{grid-item-card} TODO + + +TODO +::: + +:::: + +--- +## Diving deeper + +Links to intermediate notebooks. {doc}`More about step 3... ` + +::::{grid} 2 +:gutter: 4 + +:::{grid-item-card} TODO + + +TODO +::: + +:::{grid-item-card} TODO + + +TODO +::: +:::: + +:::{toctree} +:hidden: + +learn/step1 +learn/step2 +learn/step3 +::: diff --git a/docs/source/pymc-examples b/docs/source/pymc-examples deleted file mode 160000 index 04d973bf0a..0000000000 --- a/docs/source/pymc-examples +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 04d973bf0ab6fb632b03dcb2897be291f734cb1a diff --git a/docs/source/semantic_sphinx/layout.html b/docs/source/semantic_sphinx/layout.html deleted file mode 100644 index 778952c41d..0000000000 --- a/docs/source/semantic_sphinx/layout.html +++ /dev/null @@ -1,159 +0,0 @@ -{% extends "basic/layout.html" %} - - -{% set script_files = script_files + [ -'_static/highlight.min.js', -'_static/semantic.min.js', -] -%} -{% if pagename == 'nb_examples/index' or pagename == 'nb_tutorials/index' %} -{% set script_files = script_files + [ -'_static/gallery.js', -] -%} -{% endif %} - -{%- block extrahead %} - - - - - - -{% if pagename == 'nb_tutorials/index' %} - -{# this is used when loading the gallery index using $.ajax fails, -such as on Chrome for documents on localhost #} - -{% endif %} -{% if pagename == 'nb_examples/index' %} - -{# this is used when loading the gallery index using $.ajax fails, -such as on Chrome for documents on localhost #} - -{% endif %} -{% endblock %} - -{# Silence the sidebar's, relbar's #} -{% block header %}{% endblock %} -{% block relbar1 %}{% endblock %} -{% block relbar2 %}{% endblock %} -{% block sidebarsourcelink %}{% endblock %} - -{%- block content %} -
- -
- -
- {% if pagename == 'index' %} -
- -

Probabilistic Programming in Python

- -
Quickstart
-
-
- {% endif %} -
- -
- {% if pagename == 'index' %} - - {% endif %} - -
- {% block body %}{% endblock %} -
-
-{%- endblock %} - -{%- block footer %} - -{%- endblock %} diff --git a/docs/source/semantic_sphinx/search.html b/docs/source/semantic_sphinx/search.html deleted file mode 100644 index 9de9fc0be3..0000000000 --- a/docs/source/semantic_sphinx/search.html +++ /dev/null @@ -1,71 +0,0 @@ -{# -basic/search.html -~~~~~~~~~~~~~~~~~ - -Template for the search page. - -:copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. -:license: BSD, see LICENSE for details. -#} -{%- extends "layout.html" %} -{% set title = _('Search') %} -{% set script_files = script_files + ['_static/searchtools.js'] %} -{% block extrahead %} - -{# this is used when loading the search index using $.ajax fails, -such as on Chrome for documents on localhost #} - -{{ super() }} -{% endblock %} -{% block body %} -
-

{{ _('Search') }}

-
- -

- {% trans %}Please activate JavaScript to enable the search - functionality.{% endtrans %} -

-
-

- {% trans %}From here you can search these documents. Enter your search - words into the box below and click "search". Note that the search - function will automatically search for all of the words. Pages - containing fewer words won't appear in the result list.{% endtrans %} -

- - -
-
- {% if search_performed %} -

{{ _('Search Results') }}

- {% if not search_results %} -

{{ _('Your search did not match any documents. Please make sure that all words are spelled correctly and that - you\'ve selected enough categories.') }}

- {% endif %} - {% endif %} -
- {% if search_results %} -
- {% for href, caption, context in search_results %} -
-
- - {{ context|e }} -
-
> - {% endfor %} -
- {% endif %} -
-
-{% endblock %} diff --git a/docs/source/semantic_sphinx/static/gallery.js b/docs/source/semantic_sphinx/static/gallery.js deleted file mode 100644 index b89177fb68..0000000000 --- a/docs/source/semantic_sphinx/static/gallery.js +++ /dev/null @@ -1,93 +0,0 @@ -var Gallery = { - examples: null, - contents: null, - categories: null, - - drawExample: function (key) { - var example = this.examples[key] - - var image_div = $('
', { - class: 'image' - }).append($('', { - src: "../_static/" + example.thumb - })) - - var contents_div = $('
', { - class: 'content' - }).append($('
', { - class: 'header' - }).text(example.title)) - - var div = $('', { - class: 'card', - href: example.url - }).append(image_div).append(contents_div) - return div - }, - - makeExamples: function (examples) { - var cards = $("
", { - class: "ui link six stackable cards" - }) - for (var j = 0; j < examples.length; j++) { - cards.append(this.drawExample(examples[j])) - } - return cards - }, - - drawExamples: function () { - var main_div = $("#gallery") - var gallery = this; - var categories = this.getCategories() - var cats = Object.keys(categories) - cats.sort() - - cats.map(function (category) { - var div = $("
", { - class: "ui vertical segment" - }) - div.append($("

", { - class: "ui header" - }).text(category)) - div.append(gallery.makeExamples(categories[category])) - main_div.append(div) - }) - }, - - getCategories: function () { - var categories = {}; - var gallery = this; - var uniqueCategories = Array.from(new Set(Object.values(this.contents))) - for (var i in uniqueCategories) { - categories[uniqueCategories[i]] = [] - } - categories["Other"] = [] - Object.keys(this.examples).forEach(function (key) { - if (key in gallery.contents) { - categories[gallery.contents[key]].push(key) - } - else { - categories["Other"].push(key) - } - }) - if(categories["Other"].length === 0){ - delete categories["Other"] - } - return categories - }, - - loadScript: function (url, eltId) { - var self = this; - $.ajax({ - type: "GET", url: url, data: null, - dataType: "script", cache: true, - complete: function (jqxhr, textstatus) { - if (textstatus != "success") { - document.getElementById(eltId).src = url; - } - self.drawExamples(); - } - }); - } - -} diff --git a/docs/source/semantic_sphinx/static/highlight.min.js b/docs/source/semantic_sphinx/static/highlight.min.js deleted file mode 100644 index 7f6e56fc5e..0000000000 --- a/docs/source/semantic_sphinx/static/highlight.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! highlight.js v9.13.1 | BSD3 License | git.io/hljslicense */ -!function(e){var t="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):t&&(t.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return t.hljs}))}(function(e){function t(e){return e.replace(/&/g,"&").replace(//g,">")}function r(e){return e.nodeName.toLowerCase()}function a(e,t){var r=e&&e.exec(t);return r&&0===r.index}function n(e){return M.test(e)}function i(e){var t,r,a,i,s=e.className+" ";if(s+=e.parentNode?e.parentNode.className:"",r=B.exec(s))return w(r[1])?r[1]:"no-highlight";for(s=s.split(/\s+/),t=0,a=s.length;a>t;t++)if(i=s[t],n(i)||w(i))return i}function s(e){var t,r={},a=Array.prototype.slice.call(arguments,1);for(t in e)r[t]=e[t];return a.forEach(function(e){for(t in e)r[t]=e[t]}),r}function c(e){var t=[];return function a(e,n){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?n+=i.nodeValue.length:1===i.nodeType&&(t.push({event:"start",offset:n,node:i}),n=a(i,n),r(i).match(/br|hr|img|input/)||t.push({event:"stop",offset:n,node:i}));return n}(e,0),t}function o(e,a,n){function i(){return e.length&&a.length?e[0].offset!==a[0].offset?e[0].offset"}function c(e){u+=""}function o(e){("start"===e.event?s:c)(e.node)}for(var l=0,u="",d=[];e.length||a.length;){var b=i();if(u+=t(n.substring(l,b[0].offset)),l=b[0].offset,b===e){d.reverse().forEach(c);do o(b.splice(0,1)[0]),b=i();while(b===e&&b.length&&b[0].offset===l);d.reverse().forEach(s)}else"start"===b[0].event?d.push(b[0].node):d.pop(),o(b.splice(0,1)[0])}return u+t(n.substr(l))}function l(e){return e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(t){return s(e,{v:null},t)})),e.cached_variants||e.eW&&[s(e)]||[e]}function u(e){function t(e){return e&&e.source||e}function r(r,a){return new RegExp(t(r),"m"+(e.cI?"i":"")+(a?"g":""))}function a(n,i){if(!n.compiled){if(n.compiled=!0,n.k=n.k||n.bK,n.k){var s={},c=function(t,r){e.cI&&(r=r.toLowerCase()),r.split(" ").forEach(function(e){var r=e.split("|");s[r[0]]=[t,r[1]?Number(r[1]):1]})};"string"==typeof n.k?c("keyword",n.k):x(n.k).forEach(function(e){c(e,n.k[e])}),n.k=s}n.lR=r(n.l||/\w+/,!0),i&&(n.bK&&(n.b="\\b("+n.bK.split(" ").join("|")+")\\b"),n.b||(n.b=/\B|\b/),n.bR=r(n.b),n.endSameAsBegin&&(n.e=n.b),n.e||n.eW||(n.e=/\B|\b/),n.e&&(n.eR=r(n.e)),n.tE=t(n.e)||"",n.eW&&i.tE&&(n.tE+=(n.e?"|":"")+i.tE)),n.i&&(n.iR=r(n.i)),null==n.r&&(n.r=1),n.c||(n.c=[]),n.c=Array.prototype.concat.apply([],n.c.map(function(e){return l("self"===e?n:e)})),n.c.forEach(function(e){a(e,n)}),n.starts&&a(n.starts,i);var o=n.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([n.tE,n.i]).map(t).filter(Boolean);n.t=o.length?r(o.join("|"),!0):{exec:function(){return null}}}}a(e)}function d(e,r,n,i){function s(e){return new RegExp(e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")}function c(e,t){var r,n;for(r=0,n=t.c.length;n>r;r++)if(a(t.c[r].bR,e))return t.c[r].endSameAsBegin&&(t.c[r].eR=s(t.c[r].bR.exec(e)[0])),t.c[r]}function o(e,t){if(a(e.eR,t)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?o(e.parent,t):void 0}function l(e,t){return!n&&a(t.iR,e)}function p(e,t){var r=y.cI?t[0].toLowerCase():t[0];return e.k.hasOwnProperty(r)&&e.k[r]}function m(e,t,r,a){var n=a?"":S.classPrefix,i='',i+t+s}function f(){var e,r,a,n;if(!k.k)return t(M);for(n="",r=0,k.lR.lastIndex=0,a=k.lR.exec(M);a;)n+=t(M.substring(r,a.index)),e=p(k,a),e?(B+=e[1],n+=m(e[0],t(a[0]))):n+=t(a[0]),r=k.lR.lastIndex,a=k.lR.exec(M);return n+t(M.substr(r))}function g(){var e="string"==typeof k.sL;if(e&&!E[k.sL])return t(M);var r=e?d(k.sL,M,!0,x[k.sL]):b(M,k.sL.length?k.sL:void 0);return k.r>0&&(B+=r.r),e&&(x[k.sL]=r.top),m(r.language,r.value,!1,!0)}function _(){C+=null!=k.sL?g():f(),M=""}function h(e){C+=e.cN?m(e.cN,"",!0):"",k=Object.create(e,{parent:{value:k}})}function v(e,t){if(M+=e,null==t)return _(),0;var r=c(t,k);if(r)return r.skip?M+=t:(r.eB&&(M+=t),_(),r.rB||r.eB||(M=t)),h(r,t),r.rB?0:t.length;var a=o(k,t);if(a){var n=k;n.skip?M+=t:(n.rE||n.eE||(M+=t),_(),n.eE&&(M=t));do k.cN&&(C+=R),k.skip||k.sL||(B+=k.r),k=k.parent;while(k!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.eR=a.eR),h(a.starts,"")),n.rE?0:t.length}if(l(t,k))throw new Error('Illegal lexeme "'+t+'" for mode "'+(k.cN||"")+'"');return M+=t,t.length||1}var y=w(e);if(!y)throw new Error('Unknown language: "'+e+'"');u(y);var N,k=i||y,x={},C="";for(N=k;N!==y;N=N.parent)N.cN&&(C=m(N.cN,"",!0)+C);var M="",B=0;try{for(var L,A,$=0;;){if(k.t.lastIndex=$,L=k.t.exec(r),!L)break;A=v(r.substring($,L.index),L[0]),$=L.index+A}for(v(r.substr($)),N=k;N.parent;N=N.parent)N.cN&&(C+=R);return{r:B,value:C,language:e,top:k}}catch(I){if(I.message&&-1!==I.message.indexOf("Illegal"))return{r:0,value:t(r)};throw I}}function b(e,r){r=r||S.languages||x(E);var a={r:0,value:t(e)},n=a;return r.filter(w).filter(N).forEach(function(t){var r=d(t,e,!1);r.language=t,r.r>n.r&&(n=r),r.r>a.r&&(n=a,a=r)}),n.language&&(a.second_best=n),a}function p(e){return S.tabReplace||S.useBR?e.replace(L,function(e,t){return S.useBR&&"\n"===e?"
":S.tabReplace?t.replace(/\t/g,S.tabReplace):""}):e}function m(e,t,r){var a=t?C[t]:r,n=[e.trim()];return e.match(/\bhljs\b/)||n.push("hljs"),-1===e.indexOf(a)&&n.push(a),n.join(" ").trim()}function f(e){var t,r,a,s,l,u=i(e);n(u)||(S.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):t=e,l=t.textContent,a=u?d(u,l,!0):b(l),r=c(t),r.length&&(s=document.createElementNS("http://www.w3.org/1999/xhtml","div"),s.innerHTML=a.value,a.value=o(r,c(s),l)),a.value=p(a.value),e.innerHTML=a.value,e.className=m(e.className,u,a.language),e.result={language:a.language,re:a.r},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.r}))}function g(e){S=s(S,e)}function _(){if(!_.called){_.called=!0;var e=document.querySelectorAll("pre code");k.forEach.call(e,f)}}function h(){addEventListener("DOMContentLoaded",_,!1),addEventListener("load",_,!1)}function v(t,r){var a=E[t]=r(e);a.aliases&&a.aliases.forEach(function(e){C[e]=t})}function y(){return x(E)}function w(e){return e=(e||"").toLowerCase(),E[e]||E[C[e]]}function N(e){var t=w(e);return t&&!t.disableAutodetect}var k=[],x=Object.keys,E={},C={},M=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,L=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,R="
",S={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=d,e.highlightAuto=b,e.fixMarkup=p,e.highlightBlock=f,e.configure=g,e.initHighlighting=_,e.initHighlightingOnLoad=h,e.registerLanguage=v,e.listLanguages=y,e.getLanguage=w,e.autoDetection=N,e.inherit=s,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.C=function(t,r,a){var n=e.inherit({cN:"comment",b:t,e:r,c:[]},a||{});return n.c.push(e.PWM),n.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),n},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e.registerLanguage("apache",function(e){var t={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:""},{cN:"attribute",b:/\w+/,r:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",t]},t,e.QSM]}}],i:/\S/}}),e.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},r={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,r,a,t]}}),e.registerLanguage("coffeescript",function(e){var t={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},r="[A-Za-z$_][0-9A-Za-z$_]*",a={cN:"subst",b:/#\{/,e:/}/,k:t},n=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,a]},{b:/"/,e:/"/,c:[e.BE,a]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[a,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{b:"@"+r},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];a.c=n;var i=e.inherit(e.TM,{b:r}),s="(\\(.*\\))?\\s*\\B[-=]>",c={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:t,c:["self"].concat(n)}]};return{aliases:["coffee","cson","iced"],k:t,i:/\/\*/,c:n.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+r+"\\s*=\\s*"+s,e:"[-=]>",rB:!0,c:[i,c]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:s,e:"[-=]>",rB:!0,c:[c]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[i]},i]},{b:r+":",e:":",rB:!0,rE:!0,r:0}])}}),e.registerLanguage("cpp",function(e){var t={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U|L)?"',e:'"',i:"\\n",c:[e.BE]},{b:'(u8?|U|L)?R"\\(',e:'\\)"'},{b:"'\\\\?.",e:"'",i:"."}]},a={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},n={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},e.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},e.CLCM,e.CBCM]},i=e.IR+"\\s*\\(",s={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},c=[t,e.CLCM,e.CBCM,a,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:s,i:"",k:s,c:["self",t]},{b:e.IR+"::",k:s},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:s,c:c.concat([{b:/\(/,e:/\)/,k:s,c:c.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+e.IR+"[\\*&\\s]+)+"+i,rB:!0,e:/[{;=]/,eE:!0,k:s,i:/[^\w\s\*&]/,c:[{b:i,rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:s,r:0,c:[e.CLCM,e.CBCM,r,a,t,{b:/\(/,e:/\)/,k:s,r:0,c:["self",e.CLCM,e.CBCM,r,a,t]}]},e.CLCM,e.CBCM,n]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b://,c:["self"]},e.TM]}]),exports:{preprocessor:n,strings:r,k:s}}}),e.registerLanguage("cs",function(e){var t={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long nameof object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let on orderby partial remove select set value var where yield",literal:"null false true"},r={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},a={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},n=e.inherit(a,{i:/\n/}),i={cN:"subst",b:"{",e:"}",k:t},s=e.inherit(i,{i:/\n/}),c={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,s]},o={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},i]},l=e.inherit(o,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},s]});i.c=[o,c,a,e.ASM,e.QSM,r,e.CBCM],s.c=[l,c,n,e.ASM,e.QSM,r,e.inherit(e.CBCM,{i:/\n/})];var u={v:[o,c,a,e.ASM,e.QSM]},d=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp"],k:t,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",r:0},{b:""},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},u,r,{bK:"class interface",e:/[{;=]/,i:/[^\s:,]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{cN:"meta",b:"^\\s*\\[",eB:!0,e:"\\]",eE:!0,c:[{cN:"meta-string",b:/"/,e:/"/}]},{bK:"new return throw await else",r:0},{cN:"function",b:"("+d+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/\s*[{;=]/,eE:!0,k:t,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,r:0,c:[u,r,e.CBCM]},e.CLCM,e.CBCM]}]}}),e.registerLanguage("css",function(e){var t="[a-zA-Z-][a-zA-Z0-9_-]*",r={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:t,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,r]}]}}),e.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}}),e.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}}),e.registerLanguage("ini",function(e){var t={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},t,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}}),e.registerLanguage("java",function(e){var t="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",r=t+"(<"+t+"(\\s*,\\s*"+t+")*>)?",a="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",n="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",i={cN:"number",b:n,r:0};return{aliases:["jsp"],k:a,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+r+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:a,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:a,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},i,{cN:"meta",b:"@[A-Za-z]+"}]}}),e.registerLanguage("javascript",function(e){var t="[A-Za-z$_][0-9A-Za-z$_]*",r={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:r,c:[]},i={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,i,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:r,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,i,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:t+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:t,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+t+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:t},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,c:s}]}]},{b://,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:t}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}}),e.registerLanguage("json",function(e){var t={literal:"true false null"},r=[e.QSM,e.CNM],a={e:",",eW:!0,eE:!0,c:r,k:t},n={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(a,{b:/:/})],i:"\\S"},i={b:"\\[",e:"\\]",c:[e.inherit(a)],i:"\\S"};return r.splice(r.length,0,n,i),{c:r,k:t,i:"\\S"}}),e.registerLanguage("makefile",function(e){var t={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},e.C("",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"meta",b:/<\?xml/,e:/\?>/,r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0},{b:'b"',e:'"',skip:!0},{b:"b'",e:"'",skip:!0},e.inherit(e.ASM,{i:null,cN:null,c:null,skip:!0}),e.inherit(e.QSM,{i:null,cN:null,c:null,skip:!0})]},{cN:"tag",b:"|$)",e:">",k:{name:"style"},c:[r],starts:{e:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"|$)",e:">",k:{name:"script"},c:[r],starts:{e:"",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"tag",b:"",c:[{cN:"name",b:/[^\/><\s]+/,r:0},r]}]}}),e.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}}),e.registerLanguage("nginx",function(e){var t={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},r={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,t],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[t]},{cN:"regexp",c:[e.BE,t],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},t]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],r:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:r}],r:0}],i:"[^\\s\\}]"}}),e.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},r={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},a=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:r,l:a,i:""}]}]},{cN:"class",b:"("+n.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:n,l:a,c:[e.UTM]},{b:"\\."+e.UIR,r:0}]}}),e.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},a={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},i=[e.BE,r,n],s=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),a,{cN:"string",c:i,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,r:5,c:[e.TM]},{b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=s,a.c=s,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:s}}),e.registerLanguage("php",function(e){var t={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},r={cN:"meta",b:/<\?(php)?|\?>/},a={cN:"string",c:[e.BE,r],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},n={v:[e.BNM,e.CNM]};return{aliases:["php","php3","php4","php5","php6","php7"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[r]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},r,{cN:"keyword",b:/\$this\b/},t,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",t,e.CBCM,a,n]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},a,n]}}),e.registerLanguage("properties",function(e){var t="[ \\t\\f]*",r="[ \\t\\f]+",a="("+t+"[:=]"+t+"|"+r+")",n="([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",i="([^\\\\:= \\t\\f\\n]|\\\\.)+",s={e:a,r:0,starts:{cN:"string",e:/$/,r:0,c:[{b:"\\\\\\n"}]}};return{cI:!0,i:/\S/,c:[e.C("^\\s*[!#]","$"),{b:n+a,rB:!0,c:[{cN:"attr",b:n,endsParent:!0,r:0}],starts:s},{b:i+a,rB:!0,r:0,c:[{cN:"meta",b:i,endsParent:!0,r:0}],starts:s},{cN:"attr",r:0,b:i+t+"$"}]}}),e.registerLanguage("python",function(e){ -var t={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},r={cN:"meta",b:/^(>>>|\.\.\.) /},a={cN:"subst",b:/\{/,e:/\}/,k:t,i:/#/},n={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[e.BE,r],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[e.BE,r],r:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[e.BE,r,a]},{b:/(fr|rf|f)"""/,e:/"""/,c:[e.BE,r,a]},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[e.BE,a]},{b:/(fr|rf|f)"/,e:/"/,c:[e.BE,a]},e.ASM,e.QSM]},i={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},s={cN:"params",b:/\(/,e:/\)/,c:["self",r,i,n]};return a.c=[n,i,r],{aliases:["py","gyp"],k:t,i:/(<\/|->|\?)|=>/,c:[r,i,n,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,s,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}}),e.registerLanguage("ruby",function(e){var t="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},a={cN:"doctag",b:"@[A-Za-z]+"},n={b:"#<",e:">"},i=[e.C("#","$",{c:[a]}),e.C("^\\=begin","^\\=end",{c:[a],r:10}),e.C("^__END__","\\n$")],s={cN:"subst",b:"#\\{",e:"}",k:r},c={cN:"string",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},o={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},l=[c,n,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(i)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:t}),o].concat(i)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[c,{b:t}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[n,{cN:"regexp",c:[e.BE,s],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(i),r:0}].concat(i);s.c=l,o.c=l;var u="[>?]>",d="[\\w#]+\\(\\w+\\):\\d+:\\d+>",b="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",p=[{b:/^\s*=>/,starts:{e:"$",c:l}},{cN:"meta",b:"^("+u+"|"+d+"|"+b+")",starts:{e:"$",c:l}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:i.concat(p).concat(l)}}),e.registerLanguage("shell",function(e){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}}),e.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment with",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t,e.HCM]},e.CBCM,t,e.HCM]}}),e}); diff --git a/docs/source/semantic_sphinx/static/searchtools.js b/docs/source/semantic_sphinx/static/searchtools.js deleted file mode 100644 index bdb8bf9295..0000000000 --- a/docs/source/semantic_sphinx/static/searchtools.js +++ /dev/null @@ -1,505 +0,0 @@ -/* - * searchtools.js - * ~~~~~~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for the full-text search. - * - * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -if (!Scorer) { - /** - * Simple result scoring code. - */ - var Scorer = { - // Implement the following function to further tweak the score for each result - // The function takes a result array [filename, title, anchor, descr, score] - // and returns the new score. - /* - score: function(result) { - return result[4]; - }, - */ - - // query matches the full name of an object - objNameMatch: 11, - // or matches in the last dotted part of the object name - objPartialMatch: 6, - // Additive scores depending on the priority of the object - objPrio: { - 0: 15, // used to be importantResults - 1: 5, // used to be objectResults - 2: -5 - }, // used to be unimportantResults - // Used when the priority is not in the mapping. - objPrioDefault: 0, - - // query found in title - title: 15, - // query found in terms - term: 5 - }; -} - -if (!splitQuery) { - function splitQuery(query) { - return query.split(/\s+/); - } -} - -/** - * Search Module - */ -var Search = { - - _index: null, - _queued_query: null, - _pulse_status: -1, - - htmlToText: function (htmlString) { - var htmlElement = document.createElement('span'); - htmlElement.innerHTML = htmlString; - $(htmlElement).find('.headerlink').remove(); - docContent = $(htmlElement).find('[role=main]')[0]; - return docContent.textContent || docContent.innerText; - }, - - init: function () { - var params = $.getQueryParameters(); - if (params.q) { - var query = params.q[0]; - $('input[name="q"]')[0].value = query; - this.performSearch(query); - } - }, - - loadIndex: function (url) { - $.ajax({ - type: "GET", url: url, data: null, - dataType: "script", cache: true, - complete: function (jqxhr, textstatus) { - if (textstatus != "success") { - document.getElementById("searchindexloader").src = url; - } - } - }); - }, - - setIndex: function (index) { - var q; - this._index = index; - if ((q = this._queued_query) !== null) { - this._queued_query = null; - Search.query(q); - } - }, - - hasIndex: function () { - return this._index !== null; - }, - - deferQuery: function (query) { - this._queued_query = query; - }, - - stopPulse: function () { - this._pulse_status = 0; - }, - - startPulse: function () { - if (this._pulse_status >= 0) - return; - function pulse() { - var i; - Search._pulse_status = (Search._pulse_status + 1) % 4; - var dotString = ''; - for (i = 0; i < Search._pulse_status; i++) - dotString += '.'; - Search.dots.text(dotString); - if (Search._pulse_status > -1) - window.setTimeout(pulse, 500); - } - pulse(); - }, - - /** - * perform a search for something (or wait until index is loaded) - */ - performSearch: function (query) { - // create the required interface elements - this.out = $('#search-results'); - this.title = $('

' + _('Searching') + '

').appendTo(this.out); - this.dots = $('').appendTo(this.title); - this.status = $('

').appendTo(this.out); - this.output = $('
').appendTo(this.out); - - $('#search-progress').text(_('Preparing search...')); - this.startPulse(); - - // index already loaded, the browser was quick! - if (this.hasIndex()) - this.query(query); - else - this.deferQuery(query); - }, - - /** - * execute search (requires search index to be loaded) - */ - query: function (query) { - var i; - var stopwords = DOCUMENTATION_OPTIONS.SEARCH_LANGUAGE_STOP_WORDS; - - // stem the searchterms and add them to the correct list - var stemmer = new Stemmer(); - var searchterms = []; - var excluded = []; - var hlterms = []; - var tmp = splitQuery(query); - var objectterms = []; - for (i = 0; i < tmp.length; i++) { - if (tmp[i] !== "") { - objectterms.push(tmp[i].toLowerCase()); - } - - if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) || - tmp[i] === "") { - // skip this "word" - continue; - } - // stem the word - var word = stemmer.stemWord(tmp[i].toLowerCase()); - // prevent stemmer from cutting word smaller than two chars - if (word.length < 3 && tmp[i].length >= 3) { - word = tmp[i]; - } - var toAppend; - // select the correct list - if (word[0] == '-') { - toAppend = excluded; - word = word.substr(1); - } - else { - toAppend = searchterms; - hlterms.push(tmp[i].toLowerCase()); - } - // only add if not already in the list - if (!$u.contains(toAppend, word)) - toAppend.push(word); - } - var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" ")); - - // console.debug('SEARCH: searching for:'); - // console.info('required: ', searchterms); - // console.info('excluded: ', excluded); - - // prepare search - var terms = this._index.terms; - var titleterms = this._index.titleterms; - - // array of [filename, title, anchor, descr, score] - var results = []; - $('#search-progress').empty(); - - // lookup as object - for (i = 0; i < objectterms.length; i++) { - var others = [].concat(objectterms.slice(0, i), - objectterms.slice(i + 1, objectterms.length)); - results = results.concat(this.performObjectSearch(objectterms[i], others)); - } - - // lookup as search terms in fulltext - results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms)); - - // let the scorer override scores with a custom scoring function - if (Scorer.score) { - for (i = 0; i < results.length; i++) - results[i][4] = Scorer.score(results[i]); - } - - // now sort the results by score (in opposite order of appearance, since the - // display function below uses pop() to retrieve items) and then - // alphabetically - results.sort(function (a, b) { - var left = a[4]; - var right = b[4]; - if (left > right) { - return 1; - } else if (left < right) { - return -1; - } else { - // same score: sort alphabetically - left = a[1].toLowerCase(); - right = b[1].toLowerCase(); - return (left > right) ? -1 : ((left < right) ? 1 : 0); - } - }); - - // for debugging - //Search.lastresults = results.slice(); // a copy - //console.info('search results:', Search.lastresults); - - // print the results - var resultCount = results.length; - function displayNextItem() { - // results left, load the summary and display it - if (results.length) { - var item = results.pop(); - var listItem = $('
'); - var isMethod = item[1].startsWith('pymc.') - var header = isMethod ? item[1].slice(item[1].lastIndexOf('.') + 1, item[1].length) : item[1]; - if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') { - // dirhtml builder - var dirname = item[0] + '/'; - if (dirname.match(/\/index\/$/)) { - dirname = dirname.substring(0, dirname.length - 6); - } else if (dirname == 'index/') { - dirname = ''; - } - listItem.append($('
').html( - $('
').attr('href', - DOCUMENTATION_OPTIONS.URL_ROOT + dirname + - highlightstring + item[2]).html(header)) - ); - } else { - // normal html builders - listItem.append($('
').html( - $('
').attr('href', - item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX + - highlightstring + item[2]).html(header)) - ); - } - - if (isMethod) { - listItem.append($('
').html( - $('
').html( - $('
In ' + - item[1].replace('pymc.', 'pm.') + '
') - ) - )); - Search.output.append(listItem); - listItem.slideDown(5, function () { - displayNextItem(); - }); - } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) { - $.ajax({ - url: DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX, - dataType: "text", - complete: function (jqxhr, textstatus) { - var data = jqxhr.responseText; - if (data !== '' && data !== undefined) { - listItem.append(Search.makeSearchSummary(data, searchterms, hlterms)); - } - Search.output.append(listItem); - listItem.slideDown(5, function () { - displayNextItem(); - }); - } - }); - } else { - // no source available, just display title - Search.output.append(listItem); - listItem.slideDown(5, function () { - displayNextItem(); - }); - } - } - // search finished, update title and status message - else { - Search.stopPulse(); - Search.title.text(_('Search Results')); - if (!resultCount) - Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.')); - else - Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount)); - Search.status.fadeIn(500); - } - } - displayNextItem(); - }, - - /** - * search for object names - */ - performObjectSearch: function (object, otherterms) { - var filenames = this._index.filenames; - var docnames = this._index.docnames; - var objects = this._index.objects; - var objnames = this._index.objnames; - var titles = this._index.titles; - - var i; - var results = []; - - for (var prefix in objects) { - for (var name in objects[prefix]) { - var fullname = (prefix ? prefix + '.' : '') + name; - if (fullname.toLowerCase().indexOf(object) > -1) { - var score = 0; - var parts = fullname.split('.'); - // check for different match types: exact matches of full name or - // "last name" (i.e. last dotted part) - if (fullname.toLowerCase() == object || parts[parts.length - 1].toLowerCase() == object) { - score += Scorer.objNameMatch; - // matches in last name - } else if (parts[parts.length - 1].indexOf(object) > -1) { - score += Scorer.objPartialMatch; - } - var match = objects[prefix][name]; - var objname = objnames[match[1]][2]; - var title = titles[match[0]]; - // If more than one term searched for, we require other words to be - // found in the name/title/description - if (otherterms.length > 0) { - var haystack = (prefix + ' ' + name + ' ' + - objname + ' ' + title).toLowerCase(); - var allfound = true; - for (i = 0; i < otherterms.length; i++) { - if (haystack.indexOf(otherterms[i]) == -1) { - allfound = false; - break; - } - } - if (!allfound) { - continue; - } - } - var descr = objname + _(', in ') + title; - - var anchor = match[3]; - if (anchor === '') - anchor = fullname; - else if (anchor == '-') - anchor = objnames[match[1]][1] + '-' + fullname; - // add custom score for some objects according to scorer - if (Scorer.objPrio.hasOwnProperty(match[2])) { - score += Scorer.objPrio[match[2]]; - } else { - score += Scorer.objPrioDefault; - } - results.push([docnames[match[0]], fullname, '#' + anchor, descr, score, filenames[match[0]]]); - } - } - } - - return results; - }, - - /** - * search for full-text terms in the index - */ - performTermsSearch: function (searchterms, excluded, terms, titleterms) { - var docnames = this._index.docnames; - var filenames = this._index.filenames; - var titles = this._index.titles; - - var i, j, file; - var fileMap = {}; - var scoreMap = {}; - var results = []; - - // perform the search on the required terms - for (i = 0; i < searchterms.length; i++) { - var word = searchterms[i]; - var files = []; - var _o = [ - { files: terms[word], score: Scorer.term }, - { files: titleterms[word], score: Scorer.title } - ]; - - // no match but word was a required one - if ($u.every(_o, function (o) { return o.files === undefined; })) { - break; - } - // found search word in contents - $u.each(_o, function (o) { - var _files = o.files; - if (_files === undefined) - return - - if (_files.length === undefined) - _files = [_files]; - files = files.concat(_files); - - // set score for the word in each file to Scorer.term - for (j = 0; j < _files.length; j++) { - file = _files[j]; - if (!(file in scoreMap)) - scoreMap[file] = {} - scoreMap[file][word] = o.score; - } - }); - - // create the mapping - for (j = 0; j < files.length; j++) { - file = files[j]; - if (file in fileMap) - fileMap[file].push(word); - else - fileMap[file] = [word]; - } - } - - // now check if the files don't contain excluded terms - for (file in fileMap) { - var valid = true; - - // check if all requirements are matched - if (fileMap[file].length != searchterms.length) - continue; - - // ensure that none of the excluded terms is in the search result - for (i = 0; i < excluded.length; i++) { - if (terms[excluded[i]] == file || - titleterms[excluded[i]] == file || - $u.contains(terms[excluded[i]] || [], file) || - $u.contains(titleterms[excluded[i]] || [], file)) { - valid = false; - break; - } - } - - // if we have still a valid result we can add it to the result list - if (valid) { - // select one (max) score for the file. - // for better ranking, we should calculate ranking by using words statistics like basic tf-idf... - var score = $u.max($u.map(fileMap[file], function (w) { return scoreMap[file][w] })); - results.push([docnames[file], titles[file], '', null, score, filenames[file]]); - } - } - return results; - }, - - /** - * helper function to return a node containing the - * search summary for a given text. keywords is a list - * of stemmed words, hlwords is the list of normal, unstemmed - * words. the first one is used to find the occurrence, the - * latter for highlighting it. - */ - makeSearchSummary: function (htmlText, keywords, hlwords) { - var text = Search.htmlToText(htmlText); - var textLower = text.toLowerCase(); - var start = 0; - $.each(keywords, function () { - var i = textLower.indexOf(this.toLowerCase()); - if (i > -1) - start = i; - }); - start = Math.max(start - 120, 0); - var excerpt = ((start > 0) ? '...' : '') + - $.trim(text.substr(start, 240)) + - ((start + 240 - text.length) ? '...' : ''); - var rv = $('
').text(excerpt); - $.each(hlwords, function () { - rv = rv.highlightText(this, 'ui teal label'); - }); - return rv; - } -}; - -$(document).ready(function () { - Search.init(); -}); diff --git a/docs/source/semantic_sphinx/static/semantic.min.js b/docs/source/semantic_sphinx/static/semantic.min.js deleted file mode 100644 index 35e518d1ff..0000000000 --- a/docs/source/semantic_sphinx/static/semantic.min.js +++ /dev/null @@ -1,11 +0,0 @@ - /* - * # Semantic UI - 2.4.1 - * https://github.com/Semantic-Org/Semantic-UI - * http://www.semantic-ui.com/ - * - * Copyright 2014 Contributors - * Released under the MIT license - * http://opensource.org/licenses/MIT - * - */ -!function(p,h,v,b){p.site=p.fn.site=function(e){var s,l,i=(new Date).getTime(),o=[],t=e,n="string"==typeof t,c=[].slice.call(arguments,1),u=p.isPlainObject(e)?p.extend(!0,{},p.site.settings,e):p.extend({},p.site.settings),a=u.namespace,d=u.error,r="module-"+a,f=p(v),m=this,g=f.data(r);return s={initialize:function(){s.instantiate()},instantiate:function(){s.verbose("Storing instance of site",s),g=s,f.data(r,s)},normalize:function(){s.fix.console(),s.fix.requestAnimationFrame()},fix:{console:function(){s.debug("Normalizing window.console"),console!==b&&console.log!==b||(s.verbose("Console not available, normalizing events"),s.disable.console()),void 0!==console.group&&void 0!==console.groupEnd&&void 0!==console.groupCollapsed||(s.verbose("Console group not available, normalizing events"),h.console.group=function(){},h.console.groupEnd=function(){},h.console.groupCollapsed=function(){}),void 0===console.markTimeline&&(s.verbose("Mark timeline not available, normalizing events"),h.console.markTimeline=function(){})},consoleClear:function(){s.debug("Disabling programmatic console clearing"),h.console.clear=function(){}},requestAnimationFrame:function(){s.debug("Normalizing requestAnimationFrame"),h.requestAnimationFrame===b&&(s.debug("RequestAnimationFrame not available, normalizing event"),h.requestAnimationFrame=h.requestAnimationFrame||h.mozRequestAnimationFrame||h.webkitRequestAnimationFrame||h.msRequestAnimationFrame||function(e){setTimeout(e,0)})}},moduleExists:function(e){return p.fn[e]!==b&&p.fn[e].settings!==b},enabled:{modules:function(e){var n=[];return e=e||u.modules,p.each(e,function(e,t){s.moduleExists(t)&&n.push(t)}),n}},disabled:{modules:function(e){var n=[];return e=e||u.modules,p.each(e,function(e,t){s.moduleExists(t)||n.push(t)}),n}},change:{setting:function(o,a,e,r){e="string"==typeof e?"all"===e?u.modules:[e]:e||u.modules,r=r===b||r,p.each(e,function(e,t){var n,i=!s.moduleExists(t)||(p.fn[t].settings.namespace||!1);s.moduleExists(t)&&(s.verbose("Changing default setting",o,a,t),p.fn[t].settings[o]=a,r&&i&&0<(n=p(":data(module-"+i+")")).length&&(s.verbose("Modifying existing settings",n),n[t]("setting",o,a)))})},settings:function(i,e,o){e="string"==typeof e?[e]:e||u.modules,o=o===b||o,p.each(e,function(e,t){var n;s.moduleExists(t)&&(s.verbose("Changing default setting",i,t),p.extend(!0,p.fn[t].settings,i),o&&a&&0<(n=p(":data(module-"+a+")")).length&&(s.verbose("Modifying existing settings",n),n[t]("setting",i)))})}},enable:{console:function(){s.console(!0)},debug:function(e,t){e=e||u.modules,s.debug("Enabling debug for modules",e),s.change.setting("debug",!0,e,t)},verbose:function(e,t){e=e||u.modules,s.debug("Enabling verbose debug for modules",e),s.change.setting("verbose",!0,e,t)}},disable:{console:function(){s.console(!1)},debug:function(e,t){e=e||u.modules,s.debug("Disabling debug for modules",e),s.change.setting("debug",!1,e,t)},verbose:function(e,t){e=e||u.modules,s.debug("Disabling verbose debug for modules",e),s.change.setting("verbose",!1,e,t)}},console:function(e){if(e){if(g.cache.console===b)return void s.error(d.console);s.debug("Restoring console function"),h.console=g.cache.console}else s.debug("Disabling console function"),g.cache.console=h.console,h.console={clear:function(){},error:function(){},group:function(){},groupCollapsed:function(){},groupEnd:function(){},info:function(){},log:function(){},markTimeline:function(){},warn:function(){}}},destroy:function(){s.verbose("Destroying previous site for",f),f.removeData(r)},cache:{},setting:function(e,t){if(p.isPlainObject(e))p.extend(!0,u,e);else{if(t===b)return u[e];u[e]=t}},internal:function(e,t){if(p.isPlainObject(e))p.extend(!0,s,e);else{if(t===b)return s[e];s[e]=t}},debug:function(){u.debug&&(u.performance?s.performance.log(arguments):(s.debug=Function.prototype.bind.call(console.info,console,u.name+":"),s.debug.apply(console,arguments)))},verbose:function(){u.verbose&&u.debug&&(u.performance?s.performance.log(arguments):(s.verbose=Function.prototype.bind.call(console.info,console,u.name+":"),s.verbose.apply(console,arguments)))},error:function(){s.error=Function.prototype.bind.call(console.error,console,u.name+":"),s.error.apply(console,arguments)},performance:{log:function(e){var t,n;u.performance&&(n=(t=(new Date).getTime())-(i||t),i=t,o.push({Element:m,Name:e[0],Arguments:[].slice.call(e,1)||"","Execution Time":n})),clearTimeout(s.performance.timer),s.performance.timer=setTimeout(s.performance.display,500)},display:function(){var e=u.name+":",n=0;i=!1,clearTimeout(s.performance.timer),p.each(o,function(e,t){n+=t["Execution Time"]}),e+=" "+n+"ms",(console.group!==b||console.table!==b)&&0")},fields:function(e){var n=F();return F.each(e,function(e,t){n=n.add(h.get.field(t))}),n},validation:function(n){var i,o;return!!c&&(F.each(c,function(e,t){o=t.identifier||e,h.get.field(o)[0]==n[0]&&(t.identifier=o,i=t)}),i||!1)},value:function(e){var t=[];return t.push(e),h.get.values.call(v,t)[e]},values:function(e){var t=F.isArray(e)?h.get.fields(e):n,c={};return t.each(function(e,t){var n=F(t),i=(n.prop("type"),n.prop("name")),o=n.val(),a=n.is(f.checkbox),r=n.is(f.radio),s=-1!==i.indexOf("[]"),l=!!a&&n.is(":checked");i&&(s?(i=i.replace("[]",""),c[i]||(c[i]=[]),a?l?c[i].push(o||!0):c[i].push(!1):c[i].push(o)):r?c[i]!==D&&0!=c[i]||(c[i]=!!l&&(o||!0)):c[i]=a?!!l&&(o||!0):o)}),c}},has:{field:function(e){return h.verbose("Checking for existence of a field with identifier",e),"string"!=typeof(e=h.escape.string(e))&&h.error(s.identifier,e),0"}),F(n+="")},prompt:function(e){return F("
").addClass("ui basic red pointing prompt label").html(e[0])}},rules:{empty:function(e){return!(e===D||""===e||F.isArray(e)&&0===e.length)},checked:function(){return 0=t},length:function(e,t){return e!==D&&e.length>=t},exactLength:function(e,t){return e!==D&&e.length==t},maxLength:function(e,t){return e!==D&&e.length<=t},match:function(e,t){var n;F(this);return 0=t)},exactCount:function(e,t){return 0==t?""===e:1==t?""!==e&&-1===e.search(","):e.split(",").length==t},maxCount:function(e,t){return 0!=t&&(1==t?-1===e.search(","):e.split(",").length<=t)}}}}(jQuery,window,document),function(S,k,e,T){"use strict";k=void 0!==k&&k.Math==Math?k:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),S.fn.accordion=function(a){var v,r=S(this),b=(new Date).getTime(),y=[],x=a,C="string"==typeof x,w=[].slice.call(arguments,1);k.requestAnimationFrame||k.mozRequestAnimationFrame||k.webkitRequestAnimationFrame||k.msRequestAnimationFrame;return r.each(function(){var e,c,u=S.isPlainObject(a)?S.extend(!0,{},S.fn.accordion.settings,a):S.extend({},S.fn.accordion.settings),d=u.className,t=u.namespace,f=u.selector,s=u.error,n="."+t,i="module-"+t,o=r.selector||"",m=S(this),g=m.find(f.title),p=m.find(f.content),l=this,h=m.data(i);c={initialize:function(){c.debug("Initializing",m),c.bind.events(),u.observeChanges&&c.observeChanges(),c.instantiate()},instantiate:function(){h=c,m.data(i,c)},destroy:function(){c.debug("Destroying previous instance",m),m.off(n).removeData(i)},refresh:function(){g=m.find(f.title),p=m.find(f.content)},observeChanges:function(){"MutationObserver"in k&&((e=new MutationObserver(function(e){c.debug("DOM tree modified, updating selector cache"),c.refresh()})).observe(l,{childList:!0,subtree:!0}),c.debug("Setting up mutation observer",e))},bind:{events:function(){c.debug("Binding delegated events"),m.on(u.on+n,f.trigger,c.event.click)}},event:{click:function(){c.toggle.call(this)}},toggle:function(e){var t=e!==T?"number"==typeof e?g.eq(e):S(e).closest(f.title):S(this).closest(f.title),n=t.next(p),i=n.hasClass(d.animating),o=n.hasClass(d.active),a=o&&!i,r=!o&&i;c.debug("Toggling visibility of content",t),a||r?u.collapsible?c.close.call(t):c.debug("Cannot close accordion content collapsing is disabled"):c.open.call(t)},open:function(e){var t=e!==T?"number"==typeof e?g.eq(e):S(e).closest(f.title):S(this).closest(f.title),n=t.next(p),i=n.hasClass(d.animating);n.hasClass(d.active)||i?c.debug("Accordion already open, skipping",n):(c.debug("Opening accordion content",t),u.onOpening.call(n),u.onChanging.call(n),u.exclusive&&c.closeOthers.call(t),t.addClass(d.active),n.stop(!0,!0).addClass(d.animating),u.animateChildren&&(S.fn.transition!==T&&m.transition("is supported")?n.children().transition({animation:"fade in",queue:!1,useFailSafe:!0,debug:u.debug,verbose:u.verbose,duration:u.duration}):n.children().stop(!0,!0).animate({opacity:1},u.duration,c.resetOpacity)),n.slideDown(u.duration,u.easing,function(){n.removeClass(d.animating).addClass(d.active),c.reset.display.call(this),u.onOpen.call(this),u.onChange.call(this)}))},close:function(e){var t=e!==T?"number"==typeof e?g.eq(e):S(e).closest(f.title):S(this).closest(f.title),n=t.next(p),i=n.hasClass(d.animating),o=n.hasClass(d.active);!o&&!(!o&&i)||o&&i||(c.debug("Closing accordion content",n),u.onClosing.call(n),u.onChanging.call(n),t.removeClass(d.active),n.stop(!0,!0).addClass(d.animating),u.animateChildren&&(S.fn.transition!==T&&m.transition("is supported")?n.children().transition({animation:"fade out",queue:!1,useFailSafe:!0,debug:u.debug,verbose:u.verbose,duration:u.duration}):n.children().stop(!0,!0).animate({opacity:0},u.duration,c.resetOpacity)),n.slideUp(u.duration,u.easing,function(){n.removeClass(d.animating).removeClass(d.active),c.reset.display.call(this),u.onClose.call(this),u.onChange.call(this)}))},closeOthers:function(e){var t,n,i,o=e!==T?g.eq(e):S(this).closest(f.title),a=o.parents(f.content).prev(f.title),r=o.closest(f.accordion),s=f.title+"."+d.active+":visible",l=f.content+"."+d.active+":visible";i=u.closeNested?(t=r.find(s).not(a)).next(p):(t=r.find(s).not(a),n=r.find(l).find(s).not(a),(t=t.not(n)).next(p)),0 adjusting invoked element"),c=c.closest(o.checkbox),s.refresh())}},setup:function(){s.set.initialLoad(),s.is.indeterminate()?(s.debug("Initial value is indeterminate"),s.indeterminate()):s.is.checked()?(s.debug("Initial value is checked"),s.check()):(s.debug("Initial value is unchecked"),s.uncheck()),s.remove.initialLoad()},refresh:function(){u=c.children(o.label),d=c.children(o.input),f=d[0]},hide:{input:function(){s.verbose("Modifying z-index to be unselectable"),d.addClass(t.hidden)}},show:{input:function(){s.verbose("Modifying z-index to be selectable"),d.removeClass(t.hidden)}},observeChanges:function(){"MutationObserver"in A&&((e=new MutationObserver(function(e){s.debug("DOM tree modified, updating selector cache"),s.refresh()})).observe(h,{childList:!0,subtree:!0}),s.debug("Setting up mutation observer",e))},attachEvents:function(e,t){var n=T(e);t=T.isFunction(s[t])?s[t]:s.toggle,0").insertAfter(d),s.debug("Creating label",u))}},has:{label:function(){return 0 .ui.dimmer",content:".ui.dimmer > .content, .ui.dimmer > .content > .center"},template:{dimmer:function(){return S("
").attr("class","ui dimmer")}}}}(jQuery,window,document),function(Y,Z,K,J){"use strict";Z=void 0!==Z&&Z.Math==Math?Z:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),Y.fn.dropdown=function(M){var L,V=Y(this),N=Y(K),H=V.selector||"",U="ontouchstart"in K.documentElement,W=(new Date).getTime(),B=[],Q=M,X="string"==typeof Q,$=[].slice.call(arguments,1);return V.each(function(n){var e,t,i,o,a,r,s,g,p=Y.isPlainObject(M)?Y.extend(!0,{},Y.fn.dropdown.settings,M):Y.extend({},Y.fn.dropdown.settings),h=p.className,c=p.message,l=p.fields,v=p.keys,b=p.metadata,u=p.namespace,d=p.regExp,y=p.selector,f=p.error,m=p.templates,x="."+u,C="module-"+u,w=Y(this),S=Y(p.context),k=w.find(y.text),T=w.find(y.search),A=w.find(y.sizer),R=w.find(y.input),P=w.find(y.icon),E=0").html(o).attr("data-"+b.value,t).attr("data-"+b.text,t).addClass(h.addition).addClass(h.item),p.hideAdditions&&i.addClass(h.hidden),n=n===J?i:n.add(i),g.verbose("Creating user choices for value",t,i))}),n)},userLabels:function(e){var t=g.get.userValues();t&&(g.debug("Adding user labels",t),Y.each(t,function(e,t){g.verbose("Adding custom user value"),g.add.label(t,t)}))},menu:function(){F=Y("
").addClass(h.menu).appendTo(w)},sizer:function(){A=Y("").addClass(h.sizer).insertAfter(T)}},search:function(e){e=e!==J?e:g.get.query(),g.verbose("Searching for query",e),g.has.minCharacters(e)?g.filter(e):g.hide()},select:{firstUnfiltered:function(){g.verbose("Selecting first non-filtered element"),g.remove.selectedItem(),O.not(y.unselectable).not(y.addition+y.hidden).eq(0).addClass(h.selected)},nextAvailable:function(e){var t=(e=e.eq(0)).nextAll(y.item).not(y.unselectable).eq(0),n=e.prevAll(y.item).not(y.unselectable).eq(0);0").addClass(h.search).prop("autocomplete","off").insertBefore(k)),g.is.multiple()&&g.is.searchSelection()&&!g.has.sizer()&&g.create.sizer(),p.allowTab&&g.set.tabbable()},select:function(){var e=g.get.selectValues();g.debug("Dropdown initialized on a select",e),w.is("select")&&(R=w),0").attr("class",R.attr("class")).addClass(h.selection).addClass(h.dropdown).html(m.dropdown(e)).insertBefore(R),R.hasClass(h.multiple)&&!1===R.prop("multiple")&&(g.error(f.missingMultiple),R.prop("multiple",!0)),R.is("[multiple]")&&g.set.multiple(),R.prop("disabled")&&(g.debug("Disabling dropdown"),w.addClass(h.disabled)),R.removeAttr("class").detach().prependTo(w)),g.refresh()},menu:function(e){F.html(m.menu(e,l)),O=F.find(y.item)},reference:function(){g.debug("Dropdown behavior was called on select, replacing with closest dropdown"),w=w.parent(y.dropdown),I=w.data(C),z=w.get(0),g.refresh(),g.setup.returnedObject()},returnedObject:function(){var e=V.slice(0,n),t=V.slice(n+1);V=e.add(w).add(t)}},refresh:function(){g.refreshSelectors(),g.refreshData()},refreshItems:function(){O=F.find(y.item)},refreshSelectors:function(){g.verbose("Refreshing selector cache"),k=w.find(y.text),T=w.find(y.search),R=w.find(y.input),P=w.find(y.icon),E=0 modified, recreating menu");var n=!1;Y.each(e,function(e,t){if(Y(t.target).is("select")||Y(t.addedNodes).is("select"))return n=!0}),n&&(g.disconnect.selectObserver(),g.refresh(),g.setup.select(),g.set.selected(),g.observe.select())}},menu:{mutation:function(e){var t=e[0],n=t.addedNodes?Y(t.addedNodes[0]):Y(!1),i=t.removedNodes?Y(t.removedNodes[0]):Y(!1),o=n.add(i),a=o.is(y.addition)||0t.name?1:-1}),g.debug("Retrieved and sorted values from select",o)):g.debug("Retrieved values from select",o),o},activeItem:function(){return O.filter("."+h.active)},selectedItem:function(){var e=O.not(y.unselectable).filter("."+h.selected);return 0=p.maxSelections?(g.debug("Maximum selection count reached"),p.useLabels&&(O.addClass(h.filtered),g.add.message(c.maxSelections)),!0):(g.verbose("No longer at maximum selection count"),g.remove.message(),g.remove.filteredItem(),g.is.searchSelection()&&g.filterItems(),!1))}},restore:{defaults:function(){g.clear(),g.restore.defaultText(),g.restore.defaultValue()},defaultText:function(){var e=g.get.defaultText();e===g.get.placeholderText?(g.debug("Restoring default placeholder text",e),g.set.placeholderText(e)):(g.debug("Restoring default text",e),g.set.text(e))},placeholderText:function(){g.set.placeholderText()},defaultValue:function(){var e=g.get.defaultValue();e!==J&&(g.debug("Restoring default value",e),""!==e?(g.set.value(e),g.set.selected()):(g.remove.activeItem(),g.remove.selectedItem()))},labels:function(){p.allowAdditions&&(p.useLabels||(g.error(f.labels),p.useLabels=!0),g.debug("Restoring selected values"),g.create.userLabels()),g.check.maxSelections()},selected:function(){g.restore.values(),g.is.multiple()?(g.debug("Restoring previously selected values and labels"),g.restore.labels()):g.debug("Restoring previously selected values")},values:function(){g.set.initialLoad(),p.apiSettings&&p.saveRemoteData&&g.get.remoteValues()?g.restore.remoteValues():g.set.selected(),g.remove.initialLoad()},remoteValues:function(){var e=g.get.remoteValues();g.debug("Recreating selected from session data",e),e&&(g.is.single()?Y.each(e,function(e,t){g.set.text(t)}):Y.each(e,function(e,t){g.add.label(e,t)}))}},read:{remoteData:function(e){var t;if(Z.Storage!==J)return(t=sessionStorage.getItem(e))!==J&&t;g.error(f.noStorage)}},save:{defaults:function(){g.save.defaultText(),g.save.placeholderText(),g.save.defaultValue()},defaultValue:function(){var e=g.get.value();g.verbose("Saving default value as",e),w.data(b.defaultValue,e)},defaultText:function(){var e=g.get.text();g.verbose("Saving default text as",e),w.data(b.defaultText,e)},placeholderText:function(){var e;!1!==p.placeholder&&k.hasClass(h.placeholder)&&(e=g.get.text(),g.verbose("Saving placeholder text as",e),w.data(b.placeholderText,e))},remoteData:function(e,t){Z.Storage!==J?(g.verbose("Saving remote data to session storage",t,e),sessionStorage.setItem(t,e)):g.error(f.noStorage)}},clear:function(){g.is.multiple()&&p.useLabels?g.remove.labels():(g.remove.activeItem(),g.remove.selectedItem()),g.set.placeholderText(),g.clearValue()},clearValue:function(){g.set.value("")},scrollPage:function(e,t){var n,i,o=t||g.get.selectedItem(),a=o.closest(y.menu),r=a.outerHeight(),s=a.scrollTop(),l=O.eq(0).outerHeight(),c=Math.floor(r/l),u=(a.prop("scrollHeight"),"up"==e?s-l*c:s+l*c),d=O.not(y.unselectable);i="up"==e?d.index(o)-c:d.index(o)+c,0<(n=("up"==e?0<=i:i").addClass(h.label).attr("data-"+b.value,a).html(m.label(a,t)),i=p.onLabelCreate.call(i,a,t),g.has.label(e)?g.debug("User selection already exists, skipping",a):(p.label.variation&&i.addClass(p.label.variation),!0===n?(g.debug("Animating in label",i),i.addClass(h.hidden).insertBefore(o).transition(p.label.transition,p.label.duration)):(g.debug("Adding selection label",i),i.insertBefore(o)))},message:function(e){var t=F.children(y.message),n=p.templates.message(g.add.variables(e));0").html(n).addClass(h.message).appendTo(F)},optionValue:function(e){var t=g.escape.value(e);0").prop("value",t).addClass(h.addition).html(e).appendTo(R),g.verbose("Adding user addition as an
").addClass(t.embed).html(s.generate.embed(e)).appendTo(d),i.onCreate.call(m,e),s.debug("Creating embed object",f)},changeEmbed:function(e){f.html(s.generate.embed(e))},createAndShow:function(){s.createEmbed(),s.show()},change:function(e,t,n){s.debug("Changing video to ",e,t,n),d.data(a.source,e).data(a.id,t),n?d.data(a.url,n):d.removeData(a.url),s.has.embed()?s.changeEmbed():s.create()},reset:function(){s.debug("Clearing embed and showing placeholder"),s.remove.data(),s.remove.active(),s.remove.embed(),s.showPlaceholder(),i.onReset.call(m)},show:function(){s.debug("Showing embed"),s.set.active(),i.onDisplay.call(m)},hide:function(){s.debug("Hiding embed"),s.showPlaceholder()},showPlaceholder:function(){s.debug("Showing placeholder image"),s.remove.active(),i.onPlaceholderDisplay.call(m)},get:{id:function(){return i.id||d.data(a.id)},placeholder:function(){return i.placeholder||d.data(a.placeholder)},icon:function(){return i.icon?i.icon:d.data(a.icon)!==A?d.data(a.icon):s.determine.icon()},source:function(e){return i.source?i.source:d.data(a.source)!==A?d.data(a.source):s.determine.source()},type:function(){var e=s.get.source();return o[e]!==A&&o[e].type},url:function(){return i.url?i.url:d.data(a.url)!==A?d.data(a.url):s.determine.url()}},determine:{autoplay:function(){s.should.autoplay()&&(i.autoplay=!0)},source:function(n){var i=!1;return(n=n||s.get.url())&&k.each(o,function(e,t){if(-1!==n.search(t.domain))return i=e,!1}),i},icon:function(){var e=s.get.source();return o[e]!==A&&o[e].icon},url:function(){var e,t=i.id||d.data(a.id),n=i.source||d.data(a.source);return(e=o[n]!==A&&o[n].url.replace("{id}",t))&&d.data(a.url,e),e}},set:{active:function(){d.addClass(t.active)}},remove:{data:function(){d.removeData(a.id).removeData(a.icon).removeData(a.placeholder).removeData(a.source).removeData(a.url)},active:function(){d.removeClass(t.active)},embed:function(){f.empty()}},encode:{parameters:function(e){var t,n=[];for(t in e)n.push(encodeURIComponent(t)+"="+encodeURIComponent(e[t]));return n.join("&")}},generate:{embed:function(e){s.debug("Generating embed html");var t,n,i=s.get.source();return(e=s.get.url(e))?(n=s.generate.parameters(i),t=r.iframe(e,n)):s.error(l.noURL,d),t},parameters:function(e,t){var n=o[e]&&o[e].parameters!==A?o[e].parameters(i):{};return(t=t||i.parameters)&&(n=k.extend({},n,t)),n=i.onEmbed(n),s.encode.parameters(n)}},has:{embed:function(){return 0'},placeholder:function(e,t){var n="";return t&&(n+=''),e&&(n+=''),n}},api:!1,onPause:function(){},onPlay:function(){},onStop:function(){}}}(jQuery,window,document),function(j,z,I,M){"use strict";z=void 0!==z&&z.Math==Math?z:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),j.fn.modal=function(w){var S,e=j(this),k=j(z),T=j(I),A=j("body"),R=e.selector||"",P=(new Date).getTime(),E=[],F=w,O="string"==typeof F,D=[].slice.call(arguments,1),q=z.requestAnimationFrame||z.mozRequestAnimationFrame||z.webkitRequestAnimationFrame||z.msRequestAnimationFrame||function(e){setTimeout(e,0)};return e.each(function(){var n,i,e,o,a,t,r,s,l,c=j.isPlainObject(w)?j.extend(!0,{},j.fn.modal.settings,w):j.extend({},j.fn.modal.settings),u=c.selector,d=c.className,f=c.namespace,m=c.error,g="."+f,p="module-"+f,h=j(this),v=j(c.context),b=h.find(u.close),y=this,x=h.data(p),C=!1;l={initialize:function(){l.verbose("Initializing dimmer",v),l.create.id(),l.create.dimmer(),l.refreshModals(),l.bind.events(),c.observeChanges&&l.observeChanges(),l.instantiate()},instantiate:function(){l.verbose("Storing instance of modal"),x=l,h.data(p,x)},create:{dimmer:function(){var e={debug:c.debug,variation:!c.centered&&"top aligned",dimmerName:"modals"},t=j.extend(!0,e,c.dimmerSettings);j.fn.dimmer!==M?(l.debug("Creating dimmer"),o=v.dimmer(t),c.detachable?(l.verbose("Modal is detachable, moving content into dimmer"),o.dimmer("add content",h)):l.set.undetached(),a=o.dimmer("get dimmer")):l.error(m.dimmer)},id:function(){r=(Math.random().toString(16)+"000000000").substr(2,8),t="."+r,l.verbose("Creating unique id for element",r)}},destroy:function(){l.verbose("Destroying previous modal"),h.removeData(p).off(g),k.off(t),a.off(t),b.off(g),v.dimmer("destroy")},observeChanges:function(){"MutationObserver"in z&&((s=new MutationObserver(function(e){l.debug("DOM tree modified, refreshing"),l.refresh()})).observe(y,{childList:!0,subtree:!0}),l.debug("Setting up mutation observer",s))},refresh:function(){l.remove.scrolling(),l.cacheSizes(),l.can.useFlex()||l.set.modalOffset(),l.set.screenHeight(),l.set.type()},refreshModals:function(){i=h.siblings(u.modal),n=i.add(h)},attachEvents:function(e,t){var n=j(e);t=j.isFunction(l[t])?l[t]:l.toggle,0 .close",approve:".actions .positive, .actions .approve, .actions .ok",deny:".actions .negative, .actions .deny, .actions .cancel",modal:".ui.modal"},error:{dimmer:"UI Dimmer, a required component is not included in this page",method:"The method you called is not defined.",notFound:"The element you specified could not be found"},className:{active:"active",animating:"animating",blurring:"blurring",inverted:"inverted",legacy:"legacy",loading:"loading",scrolling:"scrolling",undetached:"undetached"}}}(jQuery,window,document),function(y,x,e,C){"use strict";x=void 0!==x&&x.Math==Math?x:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),y.fn.nag=function(d){var f,e=y(this),m=e.selector||"",g=(new Date).getTime(),p=[],h=d,v="string"==typeof h,b=[].slice.call(arguments,1);return e.each(function(){var s,i=y.isPlainObject(d)?y.extend(!0,{},y.fn.nag.settings,d):y.extend({},y.fn.nag.settings),e=(i.className,i.selector),l=i.error,t=i.namespace,n="."+t,o=t+"-module",a=y(this),r=(a.find(e.close),i.context?y(i.context):y("body")),c=this,u=a.data(o);x.requestAnimationFrame||x.mozRequestAnimationFrame||x.webkitRequestAnimationFrame||x.msRequestAnimationFrame;s={initialize:function(){s.verbose("Initializing element"),a.on("click"+n,e.close,s.dismiss).data(o,s),i.detachable&&a.parent()[0]!==r[0]&&a.detach().prependTo(r),0").addClass(m.popup).data(p.activator,h).html(e),f.inline?(d.verbose("Inserting popup element inline",u),u.insertAfter(h)):(d.verbose("Appending popup element to body",u),u.appendTo(s)),d.refresh(),d.set.variation(),f.hoverable&&d.bind.popup(),f.onCreate.call(u,w)):0!==b.next(o.popup).length?(d.verbose("Pre-existing popup found"),f.inline=!0,f.popup=b.next(o.popup).data(p.activator,h),d.refresh(),f.hoverable&&d.bind.popup()):f.popup?(z(f.popup).data(p.activator,h),d.verbose("Used popup specified in settings"),d.refresh(),f.hoverable&&d.bind.popup()):d.debug("No content specified skipping display",w)},createID:function(){n=(Math.random().toString(16)+"000000000").substr(2,8),t="."+n,d.verbose("Creating unique id for element",n)},toggle:function(){d.debug("Toggling pop-up"),d.is.hidden()?(d.debug("Popup is hidden, showing pop-up"),d.unbind.close(),d.show()):(d.debug("Popup is visible, hiding pop-up"),d.hide())},show:function(e){if(e=e||function(){},d.debug("Showing pop-up",f.transition),d.is.hidden()&&(!d.is.active()||!d.is.dropdown())){if(d.exists()||d.create(),!1===f.onShow.call(u,w))return void d.debug("onShow callback returned false, cancelling popup animation");f.preserve||f.popup||d.refresh(),u&&d.set.position()&&(d.save.conditions(),f.exclusive&&d.hideAll(),d.animate.show(e))}},hide:function(e){if(e=e||function(){},d.is.visible()||d.is.animating()){if(!1===f.onHide.call(u,w))return void d.debug("onHide callback returned false, cancelling popup animation");d.remove.visible(),d.unbind.close(),d.restore.conditions(),d.animate.hide(e)}},hideAll:function(){z(o.popup).filter("."+m.popupVisible).each(function(){z(this).data(p.activator).popup("hide")})},exists:function(){return!!u&&(f.inline||f.popup?d.has.popup():1<=u.closest(s).length)},removePopup:function(){d.has.popup()&&!f.popup&&(d.debug("Removing popup",u),u.remove(),u=L,f.onRemove.call(u,w))},save:{conditions:function(){d.cache={title:h.attr("title")},d.cache.title&&h.removeAttr("title"),d.verbose("Saving original attributes",d.cache.title)}},restore:{conditions:function(){return d.cache&&d.cache.title&&(h.attr("title",d.cache.title),d.verbose("Restoring original attributes",d.cache.title)),!0}},supports:{svg:function(){return"undefined"==typeof SVGGraphicsElement}},animate:{show:function(e){e=z.isFunction(e)?e:function(){},f.transition&&z.fn.transition!==L&&h.transition("is supported")?(d.set.visible(),u.transition({animation:f.transition+" in",queue:!1,debug:f.debug,verbose:f.verbose,duration:f.duration,onComplete:function(){d.bind.close(),e.call(u,w),f.onVisible.call(u,w)}})):d.error(g.noTransition)},hide:function(e){e=z.isFunction(e)?e:function(){},d.debug("Hiding pop-up"),!1!==f.onHide.call(u,w)?f.transition&&z.fn.transition!==L&&h.transition("is supported")?u.transition({animation:f.transition+" out",queue:!1,duration:f.duration,debug:f.debug,verbose:f.verbose,onComplete:function(){d.reset(),e.call(u,w),f.onHidden.call(u,w)}}):d.error(g.noTransition):d.debug("onHide callback returned false, cancelling popup animation")}},change:{content:function(e){u.html(e)}},get:{html:function(){return h.removeData(p.html),h.data(p.html)||f.html},title:function(){return h.removeData(p.title),h.data(p.title)||f.title},content:function(){return h.removeData(p.content),h.data(p.content)||f.content||h.attr("title")},variation:function(){return h.removeData(p.variation),h.data(p.variation)||f.variation},popup:function(){return u},popupOffset:function(){return u.offset()},calculations:function(){var e,t=d.get.offsetParent(u),n=b[0],i=v[0]==I,o=f.inline||f.popup&&f.movePopup?b.position():b.offset(),a=i?{top:0,left:0}:v.offset(),r={},s=i?{top:R.scrollTop(),left:R.scrollLeft()}:{top:0,left:0};if(r={target:{element:b[0],width:b.outerWidth(),height:b.outerHeight(),top:o.top,left:o.left,margin:{}},popup:{width:u.outerWidth(),height:u.outerHeight()},parent:{width:c.outerWidth(),height:c.outerHeight()},screen:{top:a.top,left:a.left,scroll:{top:s.top,left:s.left},width:v.width(),height:v.height()}},t.get(0)!==c.get(0)){var l=t.offset();r.target.top-=l.top,r.target.left-=l.left,r.parent.width=t.outerWidth(),r.parent.height=t.outerHeight()}return f.setFluidWidth&&d.is.fluid()&&(r.container={width:u.parent().outerWidth()},r.popup.width=r.container.width),r.target.margin.top=f.inline?parseInt(I.getComputedStyle(n).getPropertyValue("margin-top"),10):0,r.target.margin.left=f.inline?d.is.rtl()?parseInt(I.getComputedStyle(n).getPropertyValue("margin-right"),10):parseInt(I.getComputedStyle(n).getPropertyValue("margin-left"),10):0,e=r.screen,r.boundary={top:e.top+e.scroll.top,bottom:e.top+e.scroll.top+e.height,left:e.left+e.scroll.left,right:e.left+e.scroll.left+e.width},r},id:function(){return n},startEvent:function(){return"hover"==f.on?"mouseenter":"focus"==f.on&&"focus"},scrollEvent:function(){return"scroll"},endEvent:function(){return"hover"==f.on?"mouseleave":"focus"==f.on&&"blur"},distanceFromBoundary:function(e,t){var n,i,o={};return n=(t=t||d.get.calculations()).popup,i=t.boundary,e&&(o={top:e.top-i.top,left:e.left-i.left,right:i.right-(e.left+n.width),bottom:i.bottom-(e.top+n.height)},d.verbose("Distance from boundaries determined",e,o)),o},offsetParent:function(e){var t=(e!==L?e[0]:b[0]).parentNode,n=z(t);if(t)for(var i="none"===n.css("transform"),o="static"===n.css("position"),a=n.is("body");t&&!a&&o&&i;)t=t.parentNode,i="none"===(n=z(t)).css("transform"),o="static"===n.css("position"),a=n.is("body");return n&&0",notFound:"The target or popup you specified does not exist on the page"},metadata:{activator:"activator",content:"content",html:"html",offset:"offset",position:"position",title:"title",variation:"variation"},className:{active:"active",basic:"basic",animating:"animating",dropdown:"dropdown",fluid:"fluid",loading:"loading",popup:"ui popup",position:"top left center bottom right",visible:"visible",popupVisible:"visible"},selector:{popup:".ui.popup"},templates:{escape:function(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"};return/[&<>"'`]/.test(e)?e.replace(/[&<>"'`]/g,function(e){return t[e]}):e},popup:function(e){var t="",n=z.fn.popup.settings.templates.escape;return typeof e!==L&&(typeof e.title!==L&&e.title&&(e.title=n(e.title),t+='
'+e.title+"
"),typeof e.content!==L&&e.content&&(e.content=n(e.content),t+='
'+e.content+"
")),t}}}}(jQuery,window,document),function(k,e,T,A){"use strict";void 0!==(e=void 0!==e&&e.Math==Math?e:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")())&&e.Math==Math||("undefined"!=typeof self&&self.Math==Math?self:Function("return this")());k.fn.progress=function(h){var v,e=k(this),b=e.selector||"",y=(new Date).getTime(),x=[],C=h,w="string"==typeof C,S=[].slice.call(arguments,1);return e.each(function(){var s,i=k.isPlainObject(h)?k.extend(!0,{},k.fn.progress.settings,h):k.extend({},k.fn.progress.settings),t=i.className,n=i.metadata,e=i.namespace,o=i.selector,l=i.error,a="."+e,r="module-"+e,c=k(this),u=k(this).find(o.bar),d=k(this).find(o.progress),f=k(this).find(o.label),m=this,g=c.data(r),p=!1;s={initialize:function(){s.debug("Initializing progress bar",i),s.set.duration(),s.set.transitionEvent(),s.read.metadata(),s.read.settings(),s.instantiate()},instantiate:function(){s.verbose("Storing instance of progress",s),g=s,c.data(r,s)},destroy:function(){s.verbose("Destroying previous progress for",c),clearInterval(g.interval),s.remove.state(),c.removeData(r),g=A},reset:function(){s.remove.nextValue(),s.update.progress(0)},complete:function(){(s.percent===A||s.percent<100)&&(s.remove.progressPoll(),s.set.percent(100))},read:{metadata:function(){var e={percent:c.data(n.percent),total:c.data(n.total),value:c.data(n.value)};e.percent&&(s.debug("Current percent value set from metadata",e.percent),s.set.percent(e.percent)),e.total&&(s.debug("Total value set from metadata",e.total),s.set.total(e.total)),e.value&&(s.debug("Current value set from metadata",e.value),s.set.value(e.value),s.set.progress(e.value))},settings:function(){!1!==i.total&&(s.debug("Current total set in settings",i.total),s.set.total(i.total)),!1!==i.value&&(s.debug("Current value set in settings",i.value),s.set.value(i.value),s.set.progress(s.value)),!1!==i.percent&&(s.debug("Current percent set in settings",i.percent),s.set.percent(i.percent))}},bind:{transitionEnd:function(t){var e=s.get.transitionEnd();u.one(e+a,function(e){clearTimeout(s.failSafeTimer),t.call(this,e)}),s.failSafeTimer=setTimeout(function(){u.triggerHandler(e)},i.duration+i.failSafeDelay),s.verbose("Adding fail safe timer",s.timer)}},increment:function(e){var t,n;s.has.total()?n=(t=s.get.value())+(e=e||1):(n=(t=s.get.percent())+(e=e||s.get.randomValue()),100,s.debug("Incrementing percentage by",t,n)),n=s.get.normalizedValue(n),s.set.progress(n)},decrement:function(e){var t,n;s.get.total()?(n=(t=s.get.value())-(e=e||1),s.debug("Decrementing value by",e,t)):(n=(t=s.get.percent())-(e=e||s.get.randomValue()),s.debug("Decrementing percentage by",e,t)),n=s.get.normalizedValue(n),s.set.progress(n)},has:{progressPoll:function(){return s.progressPoll},total:function(){return!1!==s.get.total()}},get:{text:function(e){var t=s.value||0,n=s.total||0,i=p?s.get.displayPercent():s.percent||0,o=0s.total)return s.debug("Value cannot increment above total",s.total),s.total}else if(100 .bar",label:"> .label",progress:".bar > .progress"},text:{active:!1,error:!1,success:!1,warning:!1,percent:"{percent}%",ratio:"{value} of {total}"},className:{active:"active",error:"error",success:"success",warning:"warning"}}}(jQuery,window,document),function(w,e,t,S){"use strict";e=void 0!==e&&e.Math==Math?e:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),w.fn.rating=function(m){var g,p=w(this),h=p.selector||"",v=(new Date).getTime(),b=[],y=m,x="string"==typeof y,C=[].slice.call(arguments,1);return p.each(function(){var e,i,o=w.isPlainObject(m)?w.extend(!0,{},w.fn.rating.settings,m):w.extend({},w.fn.rating.settings),t=o.namespace,a=o.className,n=o.metadata,r=o.selector,s=(o.error,"."+t),l="module-"+t,c=this,u=w(this).data(l),d=w(this),f=d.find(r.icon);i={initialize:function(){i.verbose("Initializing rating module",o),0===f.length&&i.setup.layout(),o.interactive?i.enable():i.disable(),i.set.initialLoad(),i.set.rating(i.get.initialRating()),i.remove.initialLoad(),i.instantiate()},instantiate:function(){i.verbose("Instantiating module",o),u=i,d.data(l,i)},destroy:function(){i.verbose("Destroying previous instance",u),i.remove.events(),d.removeData(l)},refresh:function(){f=d.find(r.icon)},setup:{layout:function(){var e=i.get.maxRating(),t=w.fn.rating.settings.templates.icon(e);i.debug("Generating icon html dynamically"),d.html(t),i.refresh()}},event:{mouseenter:function(){var e=w(this);e.nextAll().removeClass(a.selected),d.addClass(a.selected),e.addClass(a.selected).prevAll().addClass(a.selected)},mouseleave:function(){d.removeClass(a.selected),f.removeClass(a.selected)},click:function(){var e=w(this),t=i.get.rating(),n=f.index(e)+1;("auto"==o.clearable?1===f.length:o.clearable)&&t==n?i.clearRating():i.set.rating(n)}},clearRating:function(){i.debug("Clearing current rating"),i.set.rating(0)},bind:{events:function(){i.verbose("Binding events"),d.on("mouseenter"+s,r.icon,i.event.mouseenter).on("mouseleave"+s,r.icon,i.event.mouseleave).on("click"+s,r.icon,i.event.click)}},remove:{events:function(){i.verbose("Removing events"),d.off(s)},initialLoad:function(){e=!1}},enable:function(){i.debug("Setting rating to interactive mode"),i.bind.events(),d.removeClass(a.disabled)},disable:function(){i.debug("Setting rating to read-only mode"),i.remove.events(),d.addClass(a.disabled)},is:{initialLoad:function(){return e}},get:{initialRating:function(){return d.data(n.rating)!==S?(d.removeData(n.rating),d.data(n.rating)):o.initialRating},maxRating:function(){return d.data(n.maxRating)!==S?(d.removeData(n.maxRating),d.data(n.maxRating)):o.maxRating},rating:function(){var e=f.filter("."+a.active).length;return i.verbose("Current rating retrieved",e),e}},set:{rating:function(e){var t=0<=e-1?e-1:0,n=f.eq(t);d.removeClass(a.selected),f.removeClass(a.selected).removeClass(a.active),0',t++;return n}}}}(jQuery,window,document),function(E,F,O,D){"use strict";F=void 0!==F&&F.Math==Math?F:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),E.fn.search=function(l){var C,w=E(this),S=w.selector||"",k=(new Date).getTime(),T=[],A=l,R="string"==typeof A,P=[].slice.call(arguments,1);return E(this).each(function(){var f,c=E.isPlainObject(l)?E.extend(!0,{},E.fn.search.settings,l):E.extend({},E.fn.search.settings),m=c.className,u=c.metadata,d=c.regExp,a=c.fields,g=c.selector,p=c.error,e=c.namespace,i="."+e,t=e+"-module",h=E(this),v=h.find(g.prompt),n=h.find(g.searchButton),o=h.find(g.results),r=h.find(g.result),b=(h.find(g.category),this),s=h.data(t),y=!1,x=!1;f={initialize:function(){f.verbose("Initializing module"),f.get.settings(),f.determine.searchFields(),f.bind.events(),f.set.type(),f.create.results(),f.instantiate()},instantiate:function(){f.verbose("Storing instance of module",f),s=f,h.data(t,f)},destroy:function(){f.verbose("Destroying instance"),h.off(i).removeData(t)},refresh:function(){f.debug("Refreshing selector cache"),v=h.find(g.prompt),n=h.find(g.searchButton),h.find(g.category),o=h.find(g.results),r=h.find(g.result)},refreshResults:function(){o=h.find(g.results),r=h.find(g.result)},bind:{events:function(){f.verbose("Binding events to search"),c.automatic&&(h.on(f.get.inputEvent()+i,g.prompt,f.event.input),v.attr("autocomplete","off")),h.on("focus"+i,g.prompt,f.event.focus).on("blur"+i,g.prompt,f.event.blur).on("keydown"+i,g.prompt,f.handleKeyboard).on("click"+i,g.searchButton,f.query).on("mousedown"+i,g.results,f.event.result.mousedown).on("mouseup"+i,g.results,f.event.result.mouseup).on("click"+i,g.result,f.event.result.click)}},determine:{searchFields:function(){l&&l.searchFields!==D&&(c.searchFields=l.searchFields)}},event:{input:function(){c.searchDelay?(clearTimeout(f.timer),f.timer=setTimeout(function(){f.is.focused()&&f.query()},c.searchDelay)):f.query()},focus:function(){f.set.focus(),c.searchOnFocus&&f.has.minimumCharacters()&&f.query(function(){f.can.show()&&f.showResults()})},blur:function(e){var t=O.activeElement===this,n=function(){f.cancel.query(),f.remove.focus(),f.timer=setTimeout(f.hideResults,c.hideDelay)};t||(x=!1,f.resultsClicked?(f.debug("Determining if user action caused search to close"),h.one("click.close"+i,g.results,function(e){f.is.inMessage(e)||y?v.focus():(y=!1,f.is.animating()||f.is.hidden()||n())})):(f.debug("Input blurred without user action, closing results"),n()))},result:{mousedown:function(){f.resultsClicked=!0},mouseup:function(){f.resultsClicked=!1},click:function(e){f.debug("Search result selected");var t=E(this),n=t.find(g.title).eq(0),i=t.is("a[href]")?t:t.find("a[href]").eq(0),o=i.attr("href")||!1,a=i.attr("target")||!1,r=(n.html(),0=c.minCharacters},results:function(){return 0!==o.length&&""!=o.html()}},clear:{cache:function(e){var t=h.data(u.cache);e?e&&t&&t[e]&&(f.debug("Removing value from cache",e),delete t[e],h.data(u.cache,t)):(f.debug("Clearing cache",e),h.removeData(u.cache))}},read:{cache:function(e){var t=h.data(u.cache);return!!c.cache&&(f.verbose("Checking cache for generated html for query",e),"object"==typeof t&&t[e]!==D&&t[e])}},create:{categoryResults:function(e){var n={};return E.each(e,function(e,t){t.category&&(n[t.category]===D?(f.verbose("Creating new category of results",t.category),n[t.category]={name:t.category,results:[t]}):n[t.category].results.push(t))}),n},id:function(e,t){var n,i=e+1;return t!==D?(n=String.fromCharCode(97+t)+i,f.verbose("Creating category result id",n)):(n=i,f.verbose("Creating result id",n)),n},results:function(){0===o.length&&(o=E("
").addClass(m.results).appendTo(h))}},inject:{result:function(e,t,n){f.verbose("Injecting result into results");var i=n!==D?o.children().eq(n).children(g.results).first().children(g.result).eq(t):o.children(g.result).eq(t);f.verbose("Injecting results metadata",i),i.data(u.result,e)},id:function(i){f.debug("Injecting unique ids into results");var o=0,a=0;return"category"===c.type?E.each(i,function(e,i){a=0,E.each(i.results,function(e,t){var n=i.results[e];n.id===D&&(n.id=f.create.id(a,o)),f.inject.result(n,a,o),a++}),o++}):E.each(i,function(e,t){var n=i[e];n.id===D&&(n.id=f.create.id(a)),f.inject.result(n,a),a++}),i}},save:{results:function(e){f.verbose("Saving current search results to metadata",e),h.data(u.results,e)}},write:{cache:function(e,t){var n=h.data(u.cache)!==D?h.data(u.cache):{};c.cache&&(f.verbose("Writing generated html to cache",e,t),n[e]=t,h.data(u.cache,n))}},addResults:function(e){if(E.isFunction(c.onResultsAdd)&&!1===c.onResultsAdd.call(o,e))return f.debug("onResultsAdd callback cancelled default action"),!1;e?(o.html(e),f.refreshResults(),c.selectFirstResult&&f.select.firstResult(),f.showResults()):f.hideResults(function(){o.empty()})},showResults:function(e){e=E.isFunction(e)?e:function(){},x||!f.is.visible()&&f.has.results()&&(f.can.transition()?(f.debug("Showing results with css animations"),o.transition({animation:c.transition+" in",debug:c.debug,verbose:c.verbose,duration:c.duration,onComplete:function(){e()},queue:!0})):(f.debug("Showing results with javascript"),o.stop().fadeIn(c.duration,c.easing)),c.onResultsOpen.call(o))},hideResults:function(e){e=E.isFunction(e)?e:function(){},f.is.visible()&&(f.can.transition()?(f.debug("Hiding results with css animations"),o.transition({animation:c.transition+" out",debug:c.debug,verbose:c.verbose,duration:c.duration,onComplete:function(){e()},queue:!0})):(f.debug("Hiding results with javascript"),o.stop().fadeOut(c.duration,c.easing)),c.onResultsClose.call(o))},generateResults:function(e){f.debug("Generating html from response",e);var t=c.templates[c.type],n=E.isPlainObject(e[a.results])&&!E.isEmptyObject(e[a.results]),i=E.isArray(e[a.results])&&0 .message",category:".category",result:".result",title:".title, .name"},templates:{escape:function(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"};return/[&<>"'`]/.test(e)?e.replace(/[&<>"'`]/g,function(e){return t[e]}):e},message:function(e,t){var n="";return e!==D&&t!==D&&(n+='
',n+="empty"==t?'
No Results
'+e+'
':'
'+e+"
",n+="
"),n},category:function(e,n){var i="";E.fn.search.settings.templates.escape;return e[n.categoryResults]!==D&&(E.each(e[n.categoryResults],function(e,t){t[n.results]!==D&&0',t[n.categoryName]!==D&&(i+='
'+t[n.categoryName]+"
"),i+='
",i+="
")}),e[n.action]&&(i+=''+e[n.action][n.actionText]+""),i)},standard:function(e,n){var i="";return e[n.results]!==D&&(E.each(e[n.results],function(e,t){t[n.url]?i+='':i+='',t[n.image]!==D&&(i+='
'),i+='
',t[n.price]!==D&&(i+='
'+t[n.price]+"
"),t[n.title]!==D&&(i+='
'+t[n.title]+"
"),t[n.description]!==D&&(i+='
'+t[n.description]+"
"),i+="
",i+="
"}),e[n.action]&&(i+=''+e[n.action][n.actionText]+""),i)}}}}(jQuery,window,document),function(A,e,R,P){"use strict";e=void 0!==e&&e.Math==Math?e:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),A.fn.shape=function(v){var b,y=A(this),x=(A("body"),(new Date).getTime()),C=[],w=v,S="string"==typeof w,k=[].slice.call(arguments,1),T=e.requestAnimationFrame||e.mozRequestAnimationFrame||e.webkitRequestAnimationFrame||e.msRequestAnimationFrame||function(e){setTimeout(e,0)};return y.each(function(){var i,o,a,t=y.selector||"",r=A.isPlainObject(v)?A.extend(!0,{},A.fn.shape.settings,v):A.extend({},A.fn.shape.settings),e=r.namespace,s=r.selector,n=r.error,l=r.className,c="."+e,u="module-"+e,d=A(this),f=d.find(s.sides),m=d.find(s.side),g=!1,p=this,h=d.data(u);a={initialize:function(){a.verbose("Initializing module for",p),a.set.defaultSide(),a.instantiate()},instantiate:function(){a.verbose("Storing instance of module",a),h=a,d.data(u,h)},destroy:function(){a.verbose("Destroying previous module for",p),d.removeData(u).off(c)},refresh:function(){a.verbose("Refreshing selector cache for",p),d=A(p),f=A(this).find(s.shape),m=A(this).find(s.side)},repaint:function(){a.verbose("Forcing repaint event");(f[0]||R.createElement("div")).offsetWidth},animate:function(e,t){a.verbose("Animating box with properties",e),t=t||function(e){a.verbose("Executing animation callback"),e!==P&&e.stopPropagation(),a.reset(),a.set.active()},r.beforeChange.call(o[0]),a.get.transitionEvent()?(a.verbose("Starting CSS animation"),d.addClass(l.animating),f.css(e).one(a.get.transitionEvent(),t),a.set.duration(r.duration),T(function(){d.addClass(l.animating),i.addClass(l.hidden)})):t()},queue:function(e){a.debug("Queueing animation of",e),f.one(a.get.transitionEvent(),function(){a.debug("Executing queued animation"),setTimeout(function(){d.shape(e)},0)})},reset:function(){a.verbose("Animating states reset"),d.removeClass(l.animating).attr("style","").removeAttr("style"),f.attr("style","").removeAttr("style"),m.attr("style","").removeAttr("style").removeClass(l.hidden),o.removeClass(l.animating).attr("style","").removeAttr("style")},is:{complete:function(){return m.filter("."+l.active)[0]==o[0]},animating:function(){return d.hasClass(l.animating)}},set:{defaultSide:function(){i=d.find("."+r.className.active),o=0=b.scrollHeight&&(b.scrollTop=b.scrollHeight-b.offsetHeight-1)},scroll:function(e){0===q(e.target).closest(n.sidebar).length&&e.preventDefault()}},bind:{clickaway:function(){c.verbose("Adding clickaway events to context",p),u.closable&&p.on("click"+s,c.event.clickaway).on("touchend"+s,c.event.clickaway)},scrollLock:function(){u.scrollLock&&(c.debug("Disabling page scroll"),w.on("DOMMouseScroll"+s,c.event.scroll)),c.verbose("Adding events to contain sidebar scroll"),S.on("touchmove"+s,c.event.touch),g.on("scroll"+f,c.event.containScroll)}},unbind:{clickaway:function(){c.verbose("Removing clickaway events from context",p),p.off(s)},scrollLock:function(){c.verbose("Removing scroll lock from page"),S.off(s),w.off(s),g.off("scroll"+f)}},add:{inlineCSS:function(){var e,t=c.cache.width||g.outerWidth(),n=c.cache.height||g.outerHeight(),i=c.is.rtl(),o=c.get.direction(),a={left:t,right:-t,top:n,bottom:-n};i&&(c.verbose("RTL detected, flipping widths"),a.left=-t,a.right=t),e="").appendTo(T),c.debug("Adding sizing css to head",r)}},refresh:function(){c.verbose("Refreshing selector cache"),p=q(u.context),h=p.children(n.sidebar),v=p.children(n.pusher),p.children(n.fixed),c.clear.cache()},refreshSidebars:function(){c.verbose("Refreshing other sidebars"),h=p.children(n.sidebar)},repaint:function(){c.verbose("Forcing repaint event"),b.style.display="none";b.offsetHeight;b.scrollTop=b.scrollTop,b.style.display=""},setup:{cache:function(){c.cache={width:g.outerWidth(),height:g.outerHeight(),rtl:"rtl"==g.css("direction")}},layout:function(){0===p.children(n.pusher).length&&(c.debug("Adding wrapper element for sidebar"),c.error(d.pusher),v=q('
'),p.children().not(n.omitted).not(h).wrapAll(v),c.refresh()),0!==g.nextAll(n.pusher).length&&g.nextAll(n.pusher)[0]===v[0]||(c.debug("Moved sidebar to correct parent element"),c.error(d.movedSidebar,b),g.detach().prependTo(p),c.refresh()),c.clear.cache(),c.set.pushable(),c.set.direction()}},attachEvents:function(e,t){var n=q(e);t=q.isFunction(c[t])?c[t]:c.toggle,0d.cache.context.height)return d.reset(),void d.error(r.elementSize,c)},bind:{events:function(){u.on("load"+s,d.event.load).on("resize"+s,d.event.resize),m.off("scroll"+s).on("scroll"+s,d.event.scroll).on("scrollchange"+s,d.event.scrollchange)}},event:{changed:function(e){clearTimeout(d.timer),d.timer=setTimeout(function(){d.verbose("DOM tree modified, updating sticky menu",e),d.refresh()},100)},documentChanged:function(e){[].forEach.call(e,function(e){e.removedNodes&&[].forEach.call(e.removedNodes,function(e){(e==h||0");e[0];return e.addClass(n.supported),e.css("position").match("sticky")}},save:{lastScroll:function(e){d.lastScroll=e},elementScroll:function(e){d.elementScroll=e},positions:function(){var e={height:m.height()},t={margin:{top:parseInt(c.css("margin-top"),10),bottom:parseInt(c.css("margin-bottom"),10)},offset:c.offset(),width:c.outerWidth(),height:c.outerHeight()},n={offset:o.offset(),height:o.outerHeight()};i.outerHeight();d.is.standardScroll()||(d.debug("Non-standard scroll. Removing scroll offset from element offset"),e.top=m.scrollTop(),e.left=m.scrollLeft(),t.offset.top+=e.top,n.offset.top+=e.top,t.offset.left+=e.left,n.offset.left+=e.left),d.cache={fits:t.height+f.offset<=e.height,sameHeight:t.height==n.height,scrollContext:{height:e.height},element:{margin:t.margin,top:t.offset.top-t.margin.top,left:t.offset.left,width:t.width,height:t.height,bottom:t.offset.top+t.height},context:{top:n.offset.top,height:n.height,bottom:n.offset.top+n.height}},d.set.containerSize(),d.stick(),d.debug("Caching element positions",d.cache)}},get:{direction:function(e){var t="down";return e=e||m.scrollTop(),d.lastScroll!==P&&(d.lastScrolle&&(t="up")),t},scrollChange:function(e){return e=e||m.scrollTop(),d.lastScroll?e-d.lastScroll:0},currentElementScroll:function(){return d.elementScroll?d.elementScroll:d.is.top()?Math.abs(parseInt(c.css("top"),10))||0:Math.abs(parseInt(c.css("bottom"),10))||0},elementScroll:function(e){e=e||m.scrollTop();var t=d.cache.element,n=d.cache.scrollContext,i=d.get.scrollChange(e),o=t.height-n.height+f.offset,a=d.get.currentElementScroll(),r=a+i;return a=d.cache.fits||r<0?0:of.jitter&&(d.debug("Context has padding, specifying exact height for container",d.cache.context.height),i.css({height:d.cache.context.height}))},minimumSize:function(){var e=d.cache.element;i.css("min-height",e.height)},scroll:function(e){d.debug("Setting scroll on element",e),d.elementScroll!=e&&(d.is.top()&&c.css("bottom","").css("top",-e),d.is.bottom()&&c.css("top","").css("bottom",e))},size:function(){0!==d.cache.element.height&&0!==d.cache.element.width&&(h.style.setProperty("width",d.cache.element.width+"px","important"),h.style.setProperty("height",d.cache.element.height+"px","important"))}},is:{standardScroll:function(){return m[0]==A},top:function(){return c.hasClass(n.top)},bottom:function(){return c.hasClass(n.bottom)},initialPosition:function(){return!d.is.fixed()&&!d.is.bound()},hidden:function(){return!c.is(":visible")},bound:function(){return c.hasClass(n.bound)},fixed:function(){return c.hasClass(n.fixed)}},stick:function(e){var t=e||m.scrollTop(),n=d.cache,i=n.fits,o=n.sameHeight,a=n.element,r=n.scrollContext,s=n.context,l=d.is.bottom()&&f.pushing?f.bottomOffset:f.offset,c=(e={top:t+l,bottom:t+l+r.height},d.get.direction(e.top),i?0:d.get.elementScroll(e.top)),u=!i;0!==a.height&&!o&&(d.is.initialPosition()?e.top>=s.bottom?(d.debug("Initial element position is bottom of container"),d.bindBottom()):e.top>a.top&&(a.height+e.top-c>=s.bottom?(d.debug("Initial element position is bottom of container"),d.bindBottom()):(d.debug("Initial element position is fixed"),d.fixTop())):d.is.fixed()?d.is.top()?e.top<=a.top?(d.debug("Fixed element reached top of container"),d.setInitialPosition()):a.height+e.top-c>=s.bottom?(d.debug("Fixed element reached bottom of container"),d.bindBottom()):u&&(d.set.scroll(c),d.save.lastScroll(e.top),d.save.elementScroll(c)):d.is.bottom()&&(e.bottom-a.height<=a.top?(d.debug("Bottom fixed rail has reached top of container"),d.setInitialPosition()):e.bottom>=s.bottom?(d.debug("Bottom fixed rail has reached bottom of container"),d.bindBottom()):u&&(d.set.scroll(c),d.save.lastScroll(e.top),d.save.elementScroll(c))):d.is.bottom()&&(e.top<=a.top?(d.debug("Jumped from bottom fixed to top fixed, most likely used home/end button"),d.setInitialPosition()):f.pushing?d.is.bound()&&e.bottom<=s.bottom&&(d.debug("Fixing bottom attached element to bottom of browser."),d.fixBottom()):d.is.bound()&&e.top<=s.bottom-a.height&&(d.debug("Fixing bottom attached element to top of browser."),d.fixTop())))},bindTop:function(){d.debug("Binding element to top of parent container"),d.remove.offset(),c.css({left:"",top:"",marginBottom:""}).removeClass(n.fixed).removeClass(n.bottom).addClass(n.bound).addClass(n.top),f.onTop.call(h),f.onUnstick.call(h)},bindBottom:function(){d.debug("Binding element to bottom of parent container"),d.remove.offset(),c.css({left:"",top:""}).removeClass(n.fixed).removeClass(n.top).addClass(n.bound).addClass(n.bottom),f.onBottom.call(h),f.onUnstick.call(h)},setInitialPosition:function(){d.debug("Returning to initial position"),d.unfix(),d.unbind()},fixTop:function(){d.debug("Fixing element to top of page"),f.setSize&&d.set.size(),d.set.minimumSize(),d.set.offset(),c.css({left:d.cache.element.left,bottom:"",marginBottom:""}).removeClass(n.bound).removeClass(n.bottom).addClass(n.fixed).addClass(n.top),f.onStick.call(h)},fixBottom:function(){d.debug("Sticking element to bottom of page"),f.setSize&&d.set.size(),d.set.minimumSize(),d.set.offset(),c.css({left:d.cache.element.left,bottom:"",marginBottom:""}).removeClass(n.bound).removeClass(n.top).addClass(n.fixed).addClass(n.bottom),f.onStick.call(h)},unbind:function(){d.is.bound()&&(d.debug("Removing container bound position on element"),d.remove.offset(),c.removeClass(n.bound).removeClass(n.top).removeClass(n.bottom))},unfix:function(){d.is.fixed()&&(d.debug("Removing fixed position on element"),d.remove.minimumSize(),d.remove.offset(),c.removeClass(n.fixed).removeClass(n.top).removeClass(n.bottom),f.onUnstick.call(h))},reset:function(){d.debug("Resetting elements position"),d.unbind(),d.unfix(),d.resetCSS(),d.remove.offset(),d.remove.lastScroll()},resetCSS:function(){c.css({width:"",height:""}),i.css({height:""})},setting:function(e,t){if(T.isPlainObject(e))T.extend(!0,f,e);else{if(t===P)return f[e];f[e]=t}},internal:function(e,t){if(T.isPlainObject(e))T.extend(!0,d,e);else{if(t===P)return d[e];d[e]=t}},debug:function(){!f.silent&&f.debug&&(f.performance?d.performance.log(arguments):(d.debug=Function.prototype.bind.call(console.info,console,f.name+":"),d.debug.apply(console,arguments)))},verbose:function(){!f.silent&&f.verbose&&f.debug&&(f.performance?d.performance.log(arguments):(d.verbose=Function.prototype.bind.call(console.info,console,f.name+":"),d.verbose.apply(console,arguments)))},error:function(){f.silent||(d.error=Function.prototype.bind.call(console.error,console,f.name+":"),d.error.apply(console,arguments))},performance:{log:function(e){var t,n;f.performance&&(n=(t=(new Date).getTime())-(x||t),x=t,C.push({Name:e[0],Arguments:[].slice.call(e,1)||"",Element:h,"Execution Time":n})),clearTimeout(d.performance.timer),d.performance.timer=setTimeout(d.performance.display,0)},display:function(){var e=f.name+":",n=0;x=!1,clearTimeout(d.performance.timer),T.each(C,function(e,t){n+=t["Execution Time"]}),e+=" "+n+"ms",y&&(e+=" '"+y+"'"),(console.group!==P||console.table!==P)&&0