From 24ef173ef7540636ec65c287d05e3425f741099d Mon Sep 17 00:00:00 2001 From: smithdc1 Date: Sat, 10 Aug 2024 15:13:36 +0000 Subject: [PATCH] deploy: 47db6409a3a3c8358ee147577fc71803a4b9606c --- .buildinfo | 2 +- _static/basic.css | 2 +- _static/doctools.js | 2 +- _static/language_data.js | 4 +- _static/searchtools.js | 170 +++++++++++++++++++++++++-------------- contributing.html | 2 +- custom.html | 2 +- examples.html | 2 +- genindex.html | 2 +- getting_started.html | 2 +- index.html | 2 +- layout_objects.html | 2 +- search.html | 2 +- searchindex.js | 2 +- 14 files changed, 122 insertions(+), 76 deletions(-) diff --git a/.buildinfo b/.buildinfo index 4c5e4d7..716ab03 100644 --- a/.buildinfo +++ b/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: cac3160ba02bb9527932d66d2b03fffe +config: c3cb2d5b9992c85b516c35ed140f56d7 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/_static/basic.css b/_static/basic.css index 30fee9d..f316efc 100644 --- a/_static/basic.css +++ b/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ diff --git a/_static/doctools.js b/_static/doctools.js index d06a71d..4d67807 100644 --- a/_static/doctools.js +++ b/_static/doctools.js @@ -4,7 +4,7 @@ * * Base JavaScript utilities for all Sphinx HTML documentation. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ diff --git a/_static/language_data.js b/_static/language_data.js index 250f566..367b8ed 100644 --- a/_static/language_data.js +++ b/_static/language_data.js @@ -5,7 +5,7 @@ * This script contains the language-specific data used by searchtools.js, * namely the list of stopwords, stemmer, scorer and splitter. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -13,7 +13,7 @@ var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; -/* Non-minified version is copied as a separate JS file, is available */ +/* Non-minified version is copied as a separate JS file, if available */ /** * Porter Stemmer diff --git a/_static/searchtools.js b/_static/searchtools.js index 7918c3f..b08d58c 100644 --- a/_static/searchtools.js +++ b/_static/searchtools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for the full-text search. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -99,7 +99,7 @@ const _displayItem = (item, searchTerms, highlightTerms) => { .then((data) => { if (data) listItem.appendChild( - Search.makeSearchSummary(data, searchTerms) + Search.makeSearchSummary(data, searchTerms, anchor) ); // highlight search terms in the summary if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js @@ -116,8 +116,8 @@ const _finishSearch = (resultCount) => { ); else Search.status.innerText = _( - `Search finished, found ${resultCount} page(s) matching the search query.` - ); + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); }; const _displayNextItem = ( results, @@ -137,6 +137,22 @@ const _displayNextItem = ( // search finished, update title and status message else _finishSearch(resultCount); }; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; /** * Default splitQuery function. Can be overridden in ``sphinx.search`` with a @@ -160,13 +176,26 @@ const Search = { _queued_query: null, _pulse_status: -1, - htmlToText: (htmlString) => { + htmlToText: (htmlString, anchor) => { const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent !== undefined) return docContent.textContent; + if (docContent) return docContent.textContent; + console.warn( - "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." ); return ""; }, @@ -239,16 +268,7 @@ const Search = { else Search.deferQuery(query); }, - /** - * execute search (requires search index to be loaded) - */ - query: (query) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - + _parseQuery: (query) => { // stem the search terms and add them to the correct list const stemmer = new Stemmer(); const searchTerms = new Set(); @@ -284,21 +304,38 @@ const Search = { // console.info("required: ", [...searchTerms]); // console.info("excluded: ", [...excludedTerms]); - // array of [docname, title, anchor, descr, score, filename] - let results = []; + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + _removeChildren(document.getElementById("search-progress")); - const queryLower = query.toLowerCase(); + const queryLower = query.toLowerCase().trim(); for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { for (const [file, id] of foundTitles) { - let score = Math.round(100 * queryLower.length / title.length) - results.push([ + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ docNames[file], titles[file] !== title ? `${titles[file]} > ${title}` : title, id !== null ? "#" + id : "", null, - score, + score + boost, filenames[file], ]); } @@ -308,46 +345,47 @@ const Search = { // search for explicit entries in index directives for (const [entry, foundEntries] of Object.entries(indexEntries)) { if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id] of foundEntries) { - let score = Math.round(100 * queryLower.length / entry.length) - results.push([ + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ docNames[file], titles[file], id ? "#" + id : "", null, score, filenames[file], - ]); + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } } } } // lookup as object objectTerms.forEach((term) => - results.push(...Search.performObjectSearch(term, objectTerms)) + normalResults.push(...Search.performObjectSearch(term, objectTerms)) ); // lookup as search terms in fulltext - results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); // let the scorer override scores with a custom scoring function - if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); - - // 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((a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; - }); + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; // remove duplicate search results // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept @@ -361,7 +399,12 @@ const Search = { return acc; }, []); - results = results.reverse(); + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); // for debugging //Search.lastresults = results.slice(); // a copy @@ -466,14 +509,18 @@ const Search = { // add support for partial matches if (word.length > 2) { const escapedWord = _escapeRegExp(word); - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord) && !terms[word]) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord) && !titleTerms[word]) - arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); - }); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } } // no match but word was a required one @@ -496,9 +543,8 @@ const Search = { // create the mapping files.forEach((file) => { - if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) - fileMap.get(file).push(word); - else fileMap.set(file, [word]); + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); }); }); @@ -549,8 +595,8 @@ const Search = { * search summary for a given text. keywords is a list * of stemmed words. */ - makeSearchSummary: (htmlText, keywords) => { - const text = Search.htmlToText(htmlText); + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); if (text === "") return null; const textLower = text.toLowerCase(); diff --git a/contributing.html b/contributing.html index 7fe4f24..358c01c 100644 --- a/contributing.html +++ b/contributing.html @@ -16,7 +16,7 @@ - + diff --git a/custom.html b/custom.html index f709a4f..eb9b1e3 100644 --- a/custom.html +++ b/custom.html @@ -16,7 +16,7 @@ - + diff --git a/examples.html b/examples.html index f844163..bd65b86 100644 --- a/examples.html +++ b/examples.html @@ -16,7 +16,7 @@ - + diff --git a/genindex.html b/genindex.html index 0cc4f22..954225f 100644 --- a/genindex.html +++ b/genindex.html @@ -15,7 +15,7 @@ - + diff --git a/getting_started.html b/getting_started.html index 42c4f45..e4517cd 100644 --- a/getting_started.html +++ b/getting_started.html @@ -16,7 +16,7 @@ - + diff --git a/index.html b/index.html index b941722..8c42ee1 100644 --- a/index.html +++ b/index.html @@ -16,7 +16,7 @@ - + diff --git a/layout_objects.html b/layout_objects.html index 8c62714..ea08593 100644 --- a/layout_objects.html +++ b/layout_objects.html @@ -16,7 +16,7 @@ - + diff --git a/search.html b/search.html index 8ff616d..46df257 100644 --- a/search.html +++ b/search.html @@ -16,7 +16,7 @@ - + diff --git a/searchindex.js b/searchindex.js index 18c136e..7c49867 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["contributing", "custom", "examples", "getting_started", "index", "layout_objects"], "filenames": ["contributing.txt", "custom.txt", "examples.txt", "getting_started.txt", "index.txt", "layout_objects.txt"], "titles": ["Contributing", "Custom Styles", "Example Images", "Getting Started", "Welcome to crispy-tailwind\u2019s documentation!", "Layout Objects"], "terms": {"crispi": [0, 5], "tailwind": [0, 1, 2, 3, 5], "ar": [0, 1, 2, 3, 5], "veri": 0, "welcom": 0, "here": [0, 2, 3, 5], "some": [0, 2, 5], "note": [0, 3, 5], "how": [0, 2, 5], "get": [0, 1, 4], "setup": 0, "develop": [0, 3], "environ": 0, "clone": 0, "repo": 0, "from": [0, 1, 5], "github": 0, "creat": [0, 5], "new": 0, "virtual": 0, "instal": [0, 4], "requir": [0, 3, 5], "txt": 0, "well": 0, "pip": [0, 3], "e": [0, 3, 5], "make": 0, "sure": 0, "you": [0, 1, 3, 5], "can": [0, 1, 3, 5], "run": 0, "test": [0, 2, 5], "suit": 0, "local": 0, "pytest": 0, "d": 0, "test_set": 0, "after": 0, "document": 0, "chang": [0, 1, 3, 5], "build": 0, "html": 0, "review": 0, "render": [0, 2, 3, 5], "output": 0, "via": [0, 3], "http": [0, 3, 5], "localhost": 0, "8000": 0, "your": [0, 1, 3, 5], "browser": 0, "cd": 0, "doc": [0, 3, 5], "_build": 0, "python": [0, 3], "m": 0, "server": [0, 3], "mai": [0, 1, 5], "find": [0, 5], "project": [0, 3], "help": [0, 1], "see": [0, 2, 5], "packag": [0, 3], "branch": 0, "depend": 0, "path": [0, 3], "With": 1, "being": 1, "util": 1, "framework": [1, 5], "i": [1, 3, 4, 5], "much": 1, "more": [1, 3, 5], "abil": [1, 5], "customis": [1, 5], "site": [1, 3], "than": 1, "mani": 1, "other": [1, 5], "css": [1, 5], "bootstrap": [1, 4], "while": 1, "our": 1, "opinion": [1, 3, 5], "so": [1, 3, 5], "far": 1, "wish": [1, 5], "The": [1, 3, 5], "templat": [1, 2, 3, 4, 5], "pack": [1, 2, 3, 4, 5], "aim": 1, "form": [1, 2, 3, 4, 5], "dry": 1, "wai": [1, 3], "thi": [1, 2, 3, 4, 5], "come": [1, 3], "class": [1, 3, 5], "call": [1, 3], "which": [1, 3, 5], "attach": 1, "helper": [1, 5], "import": [1, 5], "crispy_tailwind": [1, 3, 4], "hold": 1, "current": 1, "input": [1, 5], "tag": [1, 5], "within": [1, 3, 5], "expect": 1, "dict": 1, "django": [1, 3, 4, 5], "widget": [1, 5], "text": [1, 3, 5], "border": [1, 5], "grai": [1, 5], "300": 1, "number": [1, 3], "As": 1, "option": 1, "pass": 1, "base": 1, "kei": 1, "appli": [1, 3, 5], "all": [1, 5], "bg": [1, 5], "white": [1, 5], "email": [1, 5], "also": [1, 3], "updat": [1, 3], "add": [1, 3, 5], "remov": 1, "us": [2, 3, 5], "A": [2, 5], "non_form_error": 2, "field": [2, 3], "error": [2, 3], "test_formset_with_error": 2, "configur": [2, 3], "formhelp": [2, 3, 5], "layout": [2, 3, 4], "need": [3, 5], "": [3, 5], "set": [3, 5], "file": [3, 5], "crispy_form": [3, 4], "installed_app": 3, "an": [3, 5], "allow": [3, 5], "default": [3, 5], "crispy_allowed_template_pack": 3, "crispy_template_pack": 3, "If": [3, 5], "cli": 3, "have": [3, 5], "provid": [3, 5], "sinc": 3, "contain": 3, "hard": 3, "tell": 3, "where": [3, 5], "live": 3, "thank": 3, "carlton": 3, "gibson": 3, "blog": 3, "implement": 3, "aka": 3, "copi": 3, "past": 3, "manag": 3, "command": 3, "correspond": 3, "noumen": 3, "integr": 3, "There": 3, "method": 3, "least": 3, "amount": 3, "effort": 3, "involv": 3, "style": [3, 4, 5], "control": [3, 5], "utilis": 3, "full": 3, "power": 3, "through": 3, "its": 3, "capabl": 3, "It": 3, "avoid": 3, "complex": 3, "load": 3, "tailwind_filt": 3, "two": 3, "exampl": [3, 4, 5], "first": [3, 5], "show": [3, 5], "second": [3, 5], "side": 3, "core": [3, 5], "function": 3, "crispy_forms_tag": 3, "same": 3, "larg": 3, "held": 3, "csscontain": [3, 4], "meet": 3, "area": 3, "continu": 3, "singl": [3, 5], "includ": [3, 5], "label": 3, "prepend": 3, "append": 3, "tailwind_field": 3, "crispy_addon": 3, "my_field": 3, "00": 3, "like": [3, 5], "start": 4, "usag": 4, "addon": 4, "object": 4, "custom": [4, 5], "imag": [4, 5], "formset": 4, "contribut": 4, "index": 4, "modul": 4, "search": 4, "page": [4, 5], "look": 5, "when": 5, "For": 5, "we": 5, "given": 5, "thei": 5, "should": 5, "filter": 5, "wherev": 5, "possibl": 5, "itself": 5, "either": 5, "version": 5, "mean": 5, "found": 5, "one": 5, "three": 5, "standard": 5, "work": 5, "out": 5, "box": 5, "knowledg": 5, "assum": 5, "pleas": 5, "readthedoc": 5, "io": 5, "en": 5, "latest": 5, "further": 5, "inform": 5, "parent": 5, "wrap": 5, "individu": 5, "wrapper": 5, "ad": 5, "form_field_1": 5, "form_field_2": 5, "css_class": 5, "addit": 5, "flex": 5, "replac": 5, "typic": 5, "togeth": 5, "first_nam": 5, "last_nam": 5, "px": 5, "2": 5, "attribut": 5, "easili": 5, "No": 5, "pure": 5, "code": 5, "behav": 5, "univers": 5, "paramet": 5, "legend": 5, "By": 5, "block": 5, "700": 5, "font": 5, "bold": 5, "mb": 5, "below": 5, "is_compani": 5, "over": 5, "ride": 5, "guidanc": 5, "do": 5, "multifield": 5, "multiwidgetfield": 5, "follow": 5, "boostrap": 5, "oppinion": 5, "prependedtext": 5, "argument": 5, "name": 5, "appendedtext": 5, "prependedappendedtext": 5, "combin": 5, "thirdli": 5, "activ": 5, "doe": 5, "ani": 5, "impact": 5, "reset": 5, "submit": 5, "been": 5, "buttonhold": 5, "cancel": 5, "them": 5, "transpar": 5, "hover": 5, "blue": 5, "500": 5, "semibold": 5, "py": 5, "4": 5, "round": 5, "messag": 5, "content": 5, "strong": 5, "warn": 5, "simpl": 5, "g": 5, "colour": 5, "close": 5, "To": 5, "disabl": 5, "dismiss": 5, "fals": 5, "In": 5, "varieti": 5, "wide": 5, "differ": 5, "case": 5}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"contribut": 0, "custom": 1, "style": 1, "csscontain": 1, "exampl": 2, "imag": 2, "formset": 2, "get": 3, "start": 3, "instal": 3, "usag": 3, "crispi": [3, 4], "filter": 3, "tag": 3, "addon": 3, "welcom": 4, "tailwind": 4, "": 4, "document": 4, "content": 4, "indic": 4, "tabl": 4, "layout": 5, "object": 5, "crispy_form": 5, "column": 5, "row": 5, "field": 5, "div": 5, "html": 5, "hidden": 5, "fieldset": 5, "tbc": 5, "bootstrap": 5, "With": 5, "button": 5, "inlin": 5, "prepend": 5, "append": 5, "crispy_tailwind": 5, "alert": 5}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Contributing": [[0, "contributing"]], "Custom Styles": [[1, "custom-styles"]], "CSSContainer": [[1, "csscontainer"]], "Example Images": [[2, "example-images"]], "Formsets": [[2, "formsets"]], "Getting Started": [[3, "getting-started"]], "Installation": [[3, "installation"]], "Usage": [[3, "usage"]], "|crispy filter": [[3, "crispy-filter"]], "{% crispy %} tags": [[3, "crispy-tags"]], "Crispy-addon": [[3, "crispy-addon"]], "Welcome to crispy-tailwind\u2019s documentation!": [[4, "welcome-to-crispy-tailwind-s-documentation"]], "Contents:": [[4, null]], "Indices and tables": [[4, "indices-and-tables"]], "Layout Objects": [[5, "layout-objects"]], "crispy_forms.layout": [[5, "crispy-forms-layout"]], "Layout": [[5, "layout"]], "Column": [[5, "column"]], "Row": [[5, "row"]], "Field": [[5, "field"]], "Div": [[5, "div"]], "HTML": [[5, "html"]], "Hidden": [[5, "hidden"]], "Fieldset": [[5, "fieldset"]], "TBC": [[5, "tbc"]], "crispy_forms.bootstrap": [[5, "crispy-forms-bootstrap"]], "Field With Buttons": [[5, "field-with-buttons"]], "Inline Field": [[5, "inline-field"]], "Prepended and Appended": [[5, "prepended-and-appended"]], "crispy_tailwind.layout": [[5, "crispy-tailwind-layout"]], "Buttons": [[5, "buttons"]], "Alert": [[5, "alert"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"alltitles": {"Alert": [[5, "alert"]], "Buttons": [[5, "buttons"]], "CSSContainer": [[1, "csscontainer"]], "Column": [[5, "column"]], "Contents:": [[4, null]], "Contributing": [[0, null]], "Crispy-addon": [[3, "crispy-addon"]], "Custom Styles": [[1, null]], "Div": [[5, "div"]], "Example Images": [[2, null]], "Field": [[5, "field"]], "Field With Buttons": [[5, "field-with-buttons"]], "Fieldset": [[5, "fieldset"]], "Formsets": [[2, "formsets"]], "Getting Started": [[3, null]], "HTML": [[5, "html"]], "Hidden": [[5, "hidden"]], "Indices and tables": [[4, "indices-and-tables"]], "Inline Field": [[5, "inline-field"]], "Installation": [[3, "installation"]], "Layout": [[5, "layout"]], "Layout Objects": [[5, null]], "Prepended and Appended": [[5, "prepended-and-appended"]], "Row": [[5, "row"]], "TBC": [[5, "tbc"]], "Usage": [[3, "usage"]], "Welcome to crispy-tailwind\u2019s documentation!": [[4, null]], "crispy_forms.bootstrap": [[5, "crispy-forms-bootstrap"]], "crispy_forms.layout": [[5, "crispy-forms-layout"]], "crispy_tailwind.layout": [[5, "crispy-tailwind-layout"]], "{% crispy %} tags": [[3, "crispy-tags"]], "|crispy filter": [[3, "crispy-filter"]]}, "docnames": ["contributing", "custom", "examples", "getting_started", "index", "layout_objects"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["contributing.txt", "custom.txt", "examples.txt", "getting_started.txt", "index.txt", "layout_objects.txt"], "indexentries": {}, "objects": {}, "objnames": {}, "objtypes": {}, "terms": {"": [3, 5], "00": 3, "2": 5, "300": 1, "4": 5, "500": 5, "700": 5, "8000": 0, "A": [2, 5], "As": 1, "By": 5, "For": 5, "If": [3, 5], "In": 5, "It": 3, "No": 5, "The": [1, 3, 5], "There": 3, "To": 5, "With": 1, "_build": 0, "abil": [1, 5], "activ": 5, "ad": 5, "add": [1, 3, 5], "addit": 5, "addon": 4, "after": 0, "aim": 1, "aka": 3, "all": [1, 5], "allow": [3, 5], "also": [1, 3], "amount": 3, "an": [3, 5], "ani": 5, "append": 3, "appendedtext": 5, "appli": [1, 3, 5], "ar": [0, 1, 2, 3, 5], "area": 3, "argument": 5, "assum": 5, "attach": 1, "attribut": 5, "avoid": 3, "base": 1, "been": 5, "behav": 5, "being": 1, "below": 5, "bg": [1, 5], "block": 5, "blog": 3, "blue": 5, "bold": 5, "boostrap": 5, "bootstrap": [1, 4], "border": [1, 5], "box": 5, "branch": 0, "browser": 0, "build": 0, "buttonhold": 5, "call": [1, 3], "can": [0, 1, 3, 5], "cancel": 5, "capabl": 3, "carlton": 3, "case": 5, "cd": 0, "chang": [0, 1, 3, 5], "class": [1, 3, 5], "cli": 3, "clone": 0, "close": 5, "code": 5, "colour": 5, "combin": 5, "come": [1, 3], "command": 3, "complex": 3, "configur": [2, 3], "contain": 3, "content": 5, "continu": 3, "contribut": 4, "control": [3, 5], "copi": 3, "core": [3, 5], "correspond": 3, "creat": [0, 5], "crispi": [0, 5], "crispy_addon": 3, "crispy_allowed_template_pack": 3, "crispy_form": [3, 4], "crispy_forms_tag": 3, "crispy_tailwind": [1, 3, 4], "crispy_template_pack": 3, "css": [1, 5], "css_class": 5, "csscontain": [3, 4], "current": 1, "custom": [4, 5], "customis": [1, 5], "d": 0, "default": [3, 5], "depend": 0, "develop": [0, 3], "dict": 1, "differ": 5, "disabl": 5, "dismiss": 5, "django": [1, 3, 4, 5], "do": 5, "doc": [0, 3, 5], "document": 0, "doe": 5, "dry": 1, "e": [0, 3, 5], "easili": 5, "effort": 3, "either": 5, "email": [1, 5], "en": 5, "environ": 0, "error": [2, 3], "exampl": [3, 4, 5], "expect": 1, "fals": 5, "far": 1, "field": [2, 3], "file": [3, 5], "filter": 5, "find": [0, 5], "first": [3, 5], "first_nam": 5, "flex": 5, "follow": 5, "font": 5, "form": [1, 2, 3, 4, 5], "form_field_1": 5, "form_field_2": 5, "formhelp": [2, 3, 5], "formset": 4, "found": 5, "framework": [1, 5], "from": [0, 1, 5], "full": 3, "function": 3, "further": 5, "g": 5, "get": [0, 1, 4], "gibson": 3, "github": 0, "given": 5, "grai": [1, 5], "guidanc": 5, "hard": 3, "have": [3, 5], "held": 3, "help": [0, 1], "helper": [1, 5], "here": [0, 2, 3, 5], "hold": 1, "hover": 5, "how": [0, 2, 5], "html": 0, "http": [0, 3, 5], "i": [1, 3, 4, 5], "imag": [4, 5], "impact": 5, "implement": 3, "import": [1, 5], "includ": [3, 5], "index": 4, "individu": 5, "inform": 5, "input": [1, 5], "instal": [0, 4], "installed_app": 3, "integr": 3, "involv": 3, "io": 5, "is_compani": 5, "its": 3, "itself": 5, "kei": 1, "knowledg": 5, "label": 3, "larg": 3, "last_nam": 5, "latest": 5, "layout": [2, 3, 4], "least": 3, "legend": 5, "like": [3, 5], "live": 3, "load": 3, "local": 0, "localhost": 0, "look": 5, "m": 0, "mai": [0, 1, 5], "make": 0, "manag": 3, "mani": 1, "mb": 5, "mean": 5, "meet": 3, "messag": 5, "method": 3, "modul": 4, "more": [1, 3, 5], "much": 1, "multifield": 5, "multiwidgetfield": 5, "my_field": 3, "name": 5, "need": [3, 5], "new": 0, "non_form_error": 2, "note": [0, 3, 5], "noumen": 3, "number": [1, 3], "object": 4, "one": 5, "opinion": [1, 3, 5], "oppinion": 5, "option": 1, "other": [1, 5], "our": 1, "out": 5, "output": 0, "over": 5, "pack": [1, 2, 3, 4, 5], "packag": [0, 3], "page": [4, 5], "paramet": 5, "parent": 5, "pass": 1, "past": 3, "path": [0, 3], "pip": [0, 3], "pleas": 5, "possibl": 5, "power": 3, "prepend": 3, "prependedappendedtext": 5, "prependedtext": 5, "project": [0, 3], "provid": [3, 5], "pure": 5, "px": 5, "py": 5, "pytest": 0, "python": [0, 3], "readthedoc": 5, "remov": 1, "render": [0, 2, 3, 5], "replac": 5, "repo": 0, "requir": [0, 3, 5], "reset": 5, "review": 0, "ride": 5, "round": 5, "run": 0, "same": 3, "search": 4, "second": [3, 5], "see": [0, 2, 5], "semibold": 5, "server": [0, 3], "set": [3, 5], "setup": 0, "should": 5, "show": [3, 5], "side": 3, "simpl": 5, "sinc": 3, "singl": [3, 5], "site": [1, 3], "so": [1, 3, 5], "some": [0, 2, 5], "standard": 5, "start": 4, "strong": 5, "style": [3, 4, 5], "submit": 5, "suit": 0, "sure": 0, "tag": [1, 5], "tailwind": [0, 1, 2, 3, 5], "tailwind_field": 3, "tailwind_filt": 3, "tell": 3, "templat": [1, 2, 3, 4, 5], "test": [0, 2, 5], "test_formset_with_error": 2, "test_set": 0, "text": [1, 3, 5], "than": 1, "thank": 3, "thei": 5, "them": 5, "thi": [1, 2, 3, 4, 5], "thirdli": 5, "three": 5, "through": 3, "togeth": 5, "transpar": 5, "two": 3, "txt": 0, "typic": 5, "univers": 5, "updat": [1, 3], "us": [2, 3, 5], "usag": 4, "util": 1, "utilis": 3, "varieti": 5, "veri": 0, "version": 5, "via": [0, 3], "virtual": 0, "wai": [1, 3], "warn": 5, "we": 5, "welcom": 0, "well": 0, "when": 5, "where": [3, 5], "wherev": 5, "which": [1, 3, 5], "while": 1, "white": [1, 5], "wide": 5, "widget": [1, 5], "wish": [1, 5], "within": [1, 3, 5], "work": 5, "wrap": 5, "wrapper": 5, "you": [0, 1, 3, 5], "your": [0, 1, 3, 5]}, "titles": ["Contributing", "Custom Styles", "Example Images", "Getting Started", "Welcome to crispy-tailwind\u2019s documentation!", "Layout Objects"], "titleterms": {"": 4, "With": 5, "addon": 3, "alert": 5, "append": 5, "bootstrap": 5, "button": 5, "column": 5, "content": 4, "contribut": 0, "crispi": [3, 4], "crispy_form": 5, "crispy_tailwind": 5, "csscontain": 1, "custom": 1, "div": 5, "document": 4, "exampl": 2, "field": 5, "fieldset": 5, "filter": 3, "formset": 2, "get": 3, "hidden": 5, "html": 5, "imag": 2, "indic": 4, "inlin": 5, "instal": 3, "layout": 5, "object": 5, "prepend": 5, "row": 5, "start": 3, "style": 1, "tabl": 4, "tag": 3, "tailwind": 4, "tbc": 5, "usag": 3, "welcom": 4}}) \ No newline at end of file