Refactored documentation.
4
.gitignore
vendored
|
|
@ -168,6 +168,10 @@ output/*/index.html
|
|||
junit-*.xml
|
||||
flake8-errors.txt
|
||||
|
||||
# Documentation building
|
||||
_build
|
||||
doc_src/api/categories*.rst
|
||||
|
||||
RELEASE.txt
|
||||
site-packages
|
||||
reports
|
||||
|
|
|
|||
7
Makefile
|
|
@ -83,3 +83,10 @@ release-patch: set-release-patch-env-var release-helper ## Release a new patch
|
|||
release-minor: set-release-minor-env-var release-helper ## Release a new minor version: 1.1.1 -> 1.2.0
|
||||
|
||||
release-major: set-release-major-env-var release-helper ## release a new major version: 1.1.1 -> 2.0.0
|
||||
|
||||
documentation:
|
||||
mkdir -p docs
|
||||
rm -f doc_src/api/$(SOURCE_DIR)*.rst
|
||||
ls -A1 docs | xargs -I {} rm -rf docs/{}
|
||||
$(MAKE) -C doc_src clean html
|
||||
cp -a doc_src/_build/html/. docs
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ SPHINXOPTS = -a
|
|||
SPHINXBUILD = sphinx-build
|
||||
PAPER =
|
||||
BUILDDIR = _build
|
||||
DESTDIR = ..
|
||||
DESTDIR = _build
|
||||
|
||||
# Internal variables.
|
||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||
|
|
@ -32,9 +32,9 @@ clean:
|
|||
-rm -rf $(BUILDDIR)/*
|
||||
|
||||
html:
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(DESTDIR)/docs
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(DESTDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(DESTDIR)/docs."
|
||||
@echo "Build finished. The HTML pages are in $(DESTDIR)/html."
|
||||
|
||||
dirhtml:
|
||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 136 B |
32
doc_src/_static/css/custom.css
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
.sig-prename.descclassname {
|
||||
display: none;
|
||||
}
|
||||
dl.attribute {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
dl.field-list {
|
||||
display: block;
|
||||
}
|
||||
dl.field-list > dt {
|
||||
padding-left: 0;
|
||||
}
|
||||
dl.field-list > dd {
|
||||
padding-left: 1em;
|
||||
border-left: 0;
|
||||
}
|
||||
dl.field-list > dd > ul.simple {
|
||||
list-style-type: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
dl.field-list > dd + dt {
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
dd {
|
||||
margin-left: 0;
|
||||
padding-left: 30px;
|
||||
border-left: 1px solid #c9c9c9;
|
||||
}
|
||||
.table.autosummary td {
|
||||
border-top: 0;
|
||||
border-bottom: 1px solid #dee2e6;
|
||||
}
|
||||
|
|
@ -1,773 +0,0 @@
|
|||
/**
|
||||
* Sphinx stylesheet -- basic theme
|
||||
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
*/
|
||||
h3 {
|
||||
color:#000000;
|
||||
font-size: 17px;
|
||||
margin-bottom:0.5em;
|
||||
margin-top:2em;
|
||||
}
|
||||
/* -- main layout ----------------------------------------------------------- */
|
||||
|
||||
div.clearer {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* -- header ---------------------------------------------------------------- */
|
||||
|
||||
#header #title {
|
||||
background:#29334F url(title_background.png) repeat-x scroll 0 0;
|
||||
border-bottom:1px solid #B6B6B6;
|
||||
height:25px;
|
||||
overflow:hidden;
|
||||
}
|
||||
#headerButtons {
|
||||
position: absolute;
|
||||
list-style: none outside;
|
||||
top: 26px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border-top: 1px solid #2B334F;
|
||||
border-bottom: 1px solid #EDEDED;
|
||||
height: 20px;
|
||||
font-size: 8pt;
|
||||
overflow: hidden;
|
||||
background-color: #D8D8D8;
|
||||
}
|
||||
|
||||
#headerButtons li {
|
||||
background-repeat:no-repeat;
|
||||
display:inline;
|
||||
margin-top:0;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
.headerButton {
|
||||
display: inline;
|
||||
height:20px;
|
||||
}
|
||||
|
||||
.headerButton a {
|
||||
text-decoration: none;
|
||||
float: right;
|
||||
height: 20px;
|
||||
padding: 4px 15px;
|
||||
border-left: 1px solid #ACACAC;
|
||||
font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
|
||||
color: black;
|
||||
}
|
||||
.headerButton a:hover {
|
||||
color: white;
|
||||
background-color: #787878;
|
||||
|
||||
}
|
||||
|
||||
li#toc_button {
|
||||
text-align:left;
|
||||
}
|
||||
|
||||
li#toc_button .headerButton a {
|
||||
width:198px;
|
||||
padding-top: 4px;
|
||||
font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
|
||||
color: black;
|
||||
float: left;
|
||||
padding-left:15px;
|
||||
border-right:1px solid #ACACAC;
|
||||
background:transparent url(triangle_open.png) no-repeat scroll 4px 6px;
|
||||
}
|
||||
|
||||
li#toc_button .headerButton a:hover {
|
||||
background-color: #787878;
|
||||
color: white;
|
||||
}
|
||||
|
||||
li#page_buttons {
|
||||
position:absolute;
|
||||
right:0;
|
||||
}
|
||||
|
||||
#breadcrumbs {
|
||||
color: black;
|
||||
background-image:url(breadcrumb_background.png);
|
||||
border-top:1px solid #2B334F;
|
||||
bottom:0;
|
||||
font-size:10px;
|
||||
height:15px;
|
||||
left:0;
|
||||
overflow:hidden;
|
||||
padding:3px 10px 0;
|
||||
position:absolute;
|
||||
right:0;
|
||||
white-space:nowrap;
|
||||
z-index:901;
|
||||
}
|
||||
#breadcrumbs a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
}
|
||||
#breadcrumbs a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
#breadcrumbs img {
|
||||
padding-left: 3px;
|
||||
}
|
||||
/* -- sidebar --------------------------------------------------------------- */
|
||||
#sphinxsidebar {
|
||||
position: absolute;
|
||||
top: 84px;
|
||||
bottom: 19px;
|
||||
left: 0px;
|
||||
width: 229px;
|
||||
background-color: #E4EBF7;
|
||||
border-right: 1px solid #ACACAC;
|
||||
border-top: 1px solid #2B334F;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
padding: 0px 0px 0px 0px;
|
||||
font-size:11px;
|
||||
}
|
||||
|
||||
div.sphinxsidebarwrapper {
|
||||
padding: 10px 5px 0 10px;
|
||||
}
|
||||
|
||||
#sphinxsidebar li {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
font-weight: normal;
|
||||
margin: 0px 0px 7px 0px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
#sphinxsidebar ul {
|
||||
list-style: none;
|
||||
margin: 0px 0px 0px 0px;
|
||||
padding: 0px 5px 0px 5px;
|
||||
}
|
||||
|
||||
#sphinxsidebar ul ul,
|
||||
#sphinxsidebar ul.want-points {
|
||||
list-style: square;
|
||||
}
|
||||
|
||||
#sphinxsidebar ul ul {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
#sphinxsidebar form {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
#sphinxsidebar input {
|
||||
border: 1px solid #787878;
|
||||
font-family: sans-serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
#sphinxsidebar li.toctree-l1 a {
|
||||
font-weight: bold;
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#sphinxsidebar li.toctree-l2 a {
|
||||
font-weight: bold;
|
||||
color: #4f4f4f;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* -- search page ----------------------------------------------------------- */
|
||||
|
||||
ul.search {
|
||||
margin: 10px 0 0 20px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul.search li {
|
||||
padding: 5px 0 5px 20px;
|
||||
background-image: url(file.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 7px;
|
||||
}
|
||||
|
||||
ul.search li a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
ul.search li div.context {
|
||||
color: #888;
|
||||
margin: 2px 0 0 30px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
ul.keywordmatches li.goodmatch a {
|
||||
font-weight: bold;
|
||||
}
|
||||
#sphinxsidebar input.prettysearch {border:none;}
|
||||
input.searchbutton {
|
||||
float: right;
|
||||
}
|
||||
.search-wrapper {width: 100%; height: 25px;}
|
||||
.search-wrapper input.prettysearch { border: none; width:200px; height: 16px; background: url(searchfield_repeat.png) center top repeat-x; border: 0px; margin: 0; padding: 3px 0 0 0; font: 11px "Lucida Grande", "Lucida Sans Unicode", Arial, sans-serif; }
|
||||
.search-wrapper input.prettysearch { width: 184px; margin-left: 20px; *margin-top:-1px; *margin-right:-2px; *margin-left:10px; }
|
||||
.search-wrapper .search-left { display: block; position: absolute; width: 20px; height: 19px; background: url(searchfield_leftcap.png) left top no-repeat; }
|
||||
.search-wrapper .search-right { display: block; position: relative; left: 204px; top: -19px; width: 10px; height: 19px; background: url(searchfield_rightcap.png) right top no-repeat; }
|
||||
|
||||
/* -- index page ------------------------------------------------------------ */
|
||||
|
||||
table.contentstable {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
table.contentstable p.biglink {
|
||||
line-height: 150%;
|
||||
}
|
||||
|
||||
a.biglink {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
span.linkdescr {
|
||||
font-style: italic;
|
||||
padding-top: 5px;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
/* -- general index --------------------------------------------------------- */
|
||||
|
||||
table.indextable td {
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
table.indextable dl, table.indextable dd {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
table.indextable tr.pcap {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
table.indextable tr.cap {
|
||||
margin-top: 10px;
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
img.toggler {
|
||||
margin-right: 3px;
|
||||
margin-top: 3px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* -- general body styles --------------------------------------------------- */
|
||||
.document {
|
||||
border-top:1px solid #2B334F;
|
||||
overflow:auto;
|
||||
padding-left:2em;
|
||||
padding-right:2em;
|
||||
position:absolute;
|
||||
z-index:1;
|
||||
top:84px;
|
||||
bottom:19px;
|
||||
right:0;
|
||||
left:230px;
|
||||
}
|
||||
|
||||
a.headerlink {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
h1:hover > a.headerlink,
|
||||
h2:hover > a.headerlink,
|
||||
h3:hover > a.headerlink,
|
||||
h4:hover > a.headerlink,
|
||||
h5:hover > a.headerlink,
|
||||
h6:hover > a.headerlink,
|
||||
dt:hover > a.headerlink {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
div.body p.caption {
|
||||
text-align: inherit;
|
||||
}
|
||||
|
||||
div.body td {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.field-list ul {
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
.first {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
p.rubric {
|
||||
margin-top: 30px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* -- sidebars -------------------------------------------------------------- */
|
||||
|
||||
/*div.sidebar {
|
||||
margin: 0 0 0.5em 1em;
|
||||
border: 1px solid #ddb;
|
||||
padding: 7px 7px 0 7px;
|
||||
background-color: #ffe;
|
||||
width: 40%;
|
||||
float: right;
|
||||
}
|
||||
|
||||
p.sidebar-title {
|
||||
font-weight: bold;
|
||||
}
|
||||
*/
|
||||
/* -- topics ---------------------------------------------------------------- */
|
||||
|
||||
div.topic {
|
||||
border: 1px solid #ccc;
|
||||
padding: 7px 7px 0 7px;
|
||||
margin: 10px 0 10px 0;
|
||||
}
|
||||
|
||||
p.topic-title {
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
/* -- admonitions ----------------------------------------------------------- */
|
||||
.admonition {
|
||||
border: 1px solid #a1a5a9;
|
||||
background-color: #f7f7f7;
|
||||
margin: 20px;
|
||||
padding: 0px 8px 7px 9px;
|
||||
text-align: left;
|
||||
}
|
||||
.warning {
|
||||
background-color:#E8E8E8;
|
||||
border:1px solid #111111;
|
||||
margin:30px;
|
||||
}
|
||||
.admonition p {
|
||||
font: 12px 'Lucida Grande', Geneva, Helvetica, Arial, sans-serif;
|
||||
margin-top: 7px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
div.admonition dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.admonition dl {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
p.admonition-title {
|
||||
margin: 0px 10px 5px 0px;
|
||||
font-weight: bold;
|
||||
padding-top: 3px;
|
||||
}
|
||||
|
||||
div.body p.centered {
|
||||
text-align: center;
|
||||
margin-top: 25px;
|
||||
}
|
||||
|
||||
/* -- tables ---------------------------------------------------------------- */
|
||||
|
||||
table.docutils {
|
||||
border-collapse: collapse;
|
||||
border-top: 1px solid #919699;
|
||||
border-left: 1px solid #919699;
|
||||
border-right: 1px solid #919699;
|
||||
font-size:12px;
|
||||
padding:8px;
|
||||
text-align:left;
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
table.docutils td, table.docutils th {
|
||||
padding: 8px;
|
||||
font-size: 12px;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
border-bottom: 1px solid #919699;
|
||||
}
|
||||
|
||||
table.docutils th {
|
||||
font-weight: bold;
|
||||
}
|
||||
/* This alternates colors in up to six table rows (light blue for odd, white for even)*/
|
||||
.docutils tr {
|
||||
background: #F0F5F9;
|
||||
}
|
||||
|
||||
.docutils tr + tr {
|
||||
background: #FFFFFF;
|
||||
}
|
||||
|
||||
.docutils tr + tr + tr {
|
||||
background: #F0F5F9;
|
||||
}
|
||||
|
||||
.docutils tr + tr + tr + tr {
|
||||
background: #FFFFFF;
|
||||
}
|
||||
|
||||
.docutils tr + tr + tr +tr + tr {
|
||||
background: #F0F5F9;
|
||||
}
|
||||
|
||||
.docutils tr + tr + tr + tr + tr + tr {
|
||||
background: #FFFFFF;
|
||||
}
|
||||
|
||||
.docutils tr + tr + tr + tr + tr + tr + tr {
|
||||
background: #F0F5F9;
|
||||
}
|
||||
|
||||
table.footnote td, table.footnote th {
|
||||
border: 0 !important;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
/* -- other body styles ----------------------------------------------------- */
|
||||
|
||||
dl {
|
||||
margin-bottom: 15px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
dd p {
|
||||
margin-top: 0px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
dd ul, dd table {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-top: 3px;
|
||||
margin-bottom: 10px;
|
||||
margin-left: 30px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
dt:target, .highlight {
|
||||
background-color: #fbe54e;
|
||||
}
|
||||
|
||||
dl.glossary dt {
|
||||
font-weight: bold;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
dl.glossary dd {
|
||||
font-size:12px;
|
||||
}
|
||||
.field-list ul {
|
||||
vertical-align: top;
|
||||
margin: 0;
|
||||
padding-bottom: 0;
|
||||
list-style: none inside;
|
||||
}
|
||||
|
||||
.field-list ul li {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.field-list p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.refcount {
|
||||
color: #060;
|
||||
}
|
||||
|
||||
.optional {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
.versionmodified {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.system-message {
|
||||
background-color: #fda;
|
||||
padding: 5px;
|
||||
border: 3px solid red;
|
||||
}
|
||||
|
||||
.footnote:target {
|
||||
background-color: #ffa
|
||||
}
|
||||
|
||||
/* -- code displays --------------------------------------------------------- */
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
background-color:#F1F5F9;
|
||||
border:1px solid #C9D1D7;
|
||||
border-spacing:0;
|
||||
font-family:"Bitstream Vera Sans Mono",Monaco,"Lucida Console",Courier,Consolas,monospace;
|
||||
font-size:11px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
td.linenos {
|
||||
width: 2em;
|
||||
}
|
||||
|
||||
td.linenos pre {
|
||||
padding: 5px 0px;
|
||||
border: 0;
|
||||
background-color: transparent;
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
td.code {
|
||||
|
||||
}
|
||||
|
||||
table.highlighttable {
|
||||
margin-left: 0.5em;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
table.highlighttable td {
|
||||
padding: 0 0.5em 0 0.5em;
|
||||
}
|
||||
table.highlighttable td.linenos {
|
||||
text-align: right;
|
||||
width: 1.5em;
|
||||
padding-right: 0;
|
||||
}
|
||||
tt {
|
||||
font-family:"Bitstream Vera Sans Mono",Monaco,"Lucida Console",Courier,Consolas,monospace;
|
||||
}
|
||||
|
||||
tt.descname {
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
tt.descclassname {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
tt.xref, a tt {
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* -- math display ---------------------------------------------------------- */
|
||||
|
||||
img.math {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
div.body div.math p {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
span.eqno {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* -- printout stylesheet --------------------------------------------------- */
|
||||
|
||||
@media print {
|
||||
div.document,
|
||||
div.documentwrapper,
|
||||
div.bodywrapper {
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
div.sphinxsidebar,
|
||||
div.related,
|
||||
div.footer,
|
||||
#top-link {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
|
||||
}
|
||||
|
||||
dl.class dt {
|
||||
padding: 3px;
|
||||
/* border-top: 2px solid #999;*/
|
||||
}
|
||||
|
||||
em.property {
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
dl.class dd p {
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
dl.class dd dl.exception dt {
|
||||
padding: 3px;
|
||||
background-color: #FFD6D6;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
dl.class dd dl.method dt {
|
||||
padding: 3px;
|
||||
background-color: #e9e9e9;
|
||||
border-top: none;
|
||||
|
||||
}
|
||||
|
||||
dl.function dt {
|
||||
padding: 3px;
|
||||
border-top: 2px solid #999;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-image:none;
|
||||
list-style-position:outside;
|
||||
list-style-type:square;
|
||||
margin:0 0 0 30px;
|
||||
padding:0 0 12px 6px;
|
||||
}
|
||||
#docstitle {
|
||||
height: 36px;
|
||||
background-image: url(header_sm_mid.png);
|
||||
left: 0;
|
||||
top: 0;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
}
|
||||
#docstitle p {
|
||||
padding:7px 0 0 45px;
|
||||
margin: 0;
|
||||
color: white;
|
||||
text-shadow:0 1px 0 #787878;
|
||||
background: transparent url(documentation.png) no-repeat scroll 10px 3px;
|
||||
height: 36px;
|
||||
font-size: 15px;
|
||||
}
|
||||
#header {
|
||||
height:45px;
|
||||
left:0;
|
||||
position:absolute;
|
||||
right:0;
|
||||
top:36px;
|
||||
z-index:900;
|
||||
}
|
||||
|
||||
#header h1 {
|
||||
font-size:10pt;
|
||||
margin:0;
|
||||
padding:5px 0 0 10px;
|
||||
text-shadow:0 1px 0 #D5D5D5;
|
||||
white-space:nowrap;
|
||||
}
|
||||
|
||||
h1 {
|
||||
-x-system-font:none;
|
||||
color:#000000;
|
||||
font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
|
||||
font-size:30px;
|
||||
font-size-adjust:none;
|
||||
font-stretch:normal;
|
||||
font-style:normal;
|
||||
font-variant:normal;
|
||||
font-weight:bold;
|
||||
line-height:normal;
|
||||
margin-bottom:25px;
|
||||
margin-top:1em;
|
||||
}
|
||||
|
||||
.footer {
|
||||
border-top:1px solid #DDDDDD;
|
||||
clear:both;
|
||||
padding-top:9px;
|
||||
width:100%;
|
||||
font-size:10px;
|
||||
}
|
||||
|
||||
p {
|
||||
-x-system-font:none;
|
||||
font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
|
||||
font-size:12px;
|
||||
font-size-adjust:none;
|
||||
font-stretch:normal;
|
||||
font-style:normal;
|
||||
font-variant:normal;
|
||||
font-weight:normal;
|
||||
line-height:normal;
|
||||
margin-bottom:10px;
|
||||
margin-top:0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
border-bottom:1px solid #919699;
|
||||
color:#000000;
|
||||
font-size:24px;
|
||||
margin-top:2.5em;
|
||||
padding-bottom:2px;
|
||||
}
|
||||
|
||||
a:link:hover {
|
||||
color:#093D92;
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
a:link {
|
||||
color:#093D92;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
|
||||
ol {
|
||||
list-style-position:outside;
|
||||
list-style-type:decimal;
|
||||
margin:0 0 0 30px;
|
||||
padding:0 0 12px 6px;
|
||||
}
|
||||
li {
|
||||
margin-top:7px;
|
||||
font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
|
||||
font-size:12px;
|
||||
font-size-adjust:none;
|
||||
font-stretch:normal;
|
||||
font-style:normal;
|
||||
font-variant:normal;
|
||||
font-weight:normal;
|
||||
line-height:normal;
|
||||
}
|
||||
li > p {
|
||||
display:inline;
|
||||
}
|
||||
li p {
|
||||
margin-top:8px;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 412 B |
|
Before Width: | Height: | Size: 159 B |
|
Before Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 855 B |
|
Before Width: | Height: | Size: 158 B |
|
Before Width: | Height: | Size: 530 B |
|
Before Width: | Height: | Size: 132 B |
|
|
@ -1,20 +0,0 @@
|
|||
var TOC = {
|
||||
load: function () {
|
||||
$('#toc_button').click(TOC.toggle);
|
||||
},
|
||||
|
||||
toggle: function () {
|
||||
if ($('#sphinxsidebar').toggle().is(':hidden')) {
|
||||
$('div.document').css('left', "0px");
|
||||
$('toc_button').removeClass("open");
|
||||
} else {
|
||||
$('div.document').css('left', "230px");
|
||||
$('#toc_button').addClass("open");
|
||||
}
|
||||
return $('#sphinxsidebar');
|
||||
}
|
||||
};
|
||||
|
||||
$(document).ready(function () {
|
||||
TOC.load();
|
||||
});
|
||||
|
Before Width: | Height: | Size: 181 B |
|
Before Width: | Height: | Size: 195 B |
|
Before Width: | Height: | Size: 191 B |
10
doc_src/_templates/autosummary/base.rst
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
.. rst-class:: h4 text-secondary
|
||||
|
||||
{{ fullname }}
|
||||
|
||||
{{ objname | escape | underline}}
|
||||
|
||||
.. currentmodule:: {{ module }}
|
||||
{%- if not objname.startswith("test") %}
|
||||
.. auto{{ objtype }}:: {{ objname }}
|
||||
{%- endif %}
|
||||
34
doc_src/_templates/autosummary/class.rst
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
.. rst-class:: h4 text-secondary
|
||||
|
||||
{{ fullname }}
|
||||
|
||||
{{ objname | escape | underline}}
|
||||
|
||||
.. currentmodule:: {{ module }}
|
||||
|
||||
.. autoclass:: {{ objname }}
|
||||
|
||||
{% block methods %}
|
||||
{% if methods %}
|
||||
.. rubric:: {{ _('Methods') }}
|
||||
|
||||
.. autosummary::
|
||||
{% for item in methods %}
|
||||
{%- if "__" not in item %}
|
||||
~{{ name }}.{{ item }}
|
||||
{% endif -%}
|
||||
{%- endfor %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block attributes %}
|
||||
{% if attributes %}
|
||||
.. rubric:: {{ _('Attributes') }}
|
||||
|
||||
.. autosummary::
|
||||
{% for item in attributes %}
|
||||
{%- if "__" not in item %}
|
||||
~{{ name }}.{{ item }}{% endif %}
|
||||
{% endfor -%}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
70
doc_src/_templates/autosummary/module.rst
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
.. rst-class:: h4 text-secondary
|
||||
|
||||
{{ fullname }}
|
||||
|
||||
{{ objname | escape | underline}}
|
||||
.. currentmodule:: {{ fullname }}
|
||||
|
||||
|
||||
.. automodule:: {{ fullname }}
|
||||
|
||||
{% block modules -%}
|
||||
{% if modules %}
|
||||
|
||||
.. rubric:: Submodules
|
||||
|
||||
.. autosummary::
|
||||
:toctree:
|
||||
:recursive:
|
||||
{% for item in modules %}
|
||||
{% if "migrations" not in item and "tests" not in item%}{{ item }}{% endif %}
|
||||
{%- endfor %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
{% block attributes -%}
|
||||
{%- if attributes -%}
|
||||
.. rubric:: {{ _('Module Attributes') }}
|
||||
|
||||
.. autosummary::
|
||||
:toctree:
|
||||
{% for item in attributes %}
|
||||
{{ item }}
|
||||
{%- endfor -%}
|
||||
{%- endif -%}
|
||||
{% endblock attributes -%}
|
||||
{%- block functions -%}
|
||||
{%- if functions %}
|
||||
|
||||
.. rubric:: {{ _('Functions') }}
|
||||
|
||||
.. autosummary::
|
||||
:toctree:
|
||||
{% for item in functions %}
|
||||
{{ item }}
|
||||
{%- endfor -%}
|
||||
{%- endif -%}
|
||||
{% endblock functions -%}
|
||||
{% block classes -%}
|
||||
{% if classes %}
|
||||
|
||||
.. rubric:: {{ _('Classes') }}
|
||||
|
||||
.. autosummary::
|
||||
:toctree:
|
||||
{% for item in classes %}
|
||||
{{ item }}
|
||||
{%- endfor -%}
|
||||
{%- endif -%}
|
||||
{% endblock classes -%}
|
||||
{% block exceptions -%}
|
||||
{% if exceptions %}
|
||||
|
||||
.. rubric:: {{ _('Exceptions') }}
|
||||
|
||||
.. autosummary::
|
||||
:toctree:
|
||||
{% for item in exceptions %}
|
||||
{{ item }}
|
||||
{%- endfor -%}
|
||||
{%- endif -%}
|
||||
{% endblock exceptions -%}
|
||||
|
|
@ -1,144 +0,0 @@
|
|||
{% extends "basic/layout.html" %}
|
||||
{%- block doctype -%}
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
{%- endblock %}
|
||||
{%- set reldelim1 = reldelim1 is not defined and ' »' or reldelim1 %}
|
||||
{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %}
|
||||
{%- block linktags %}
|
||||
{%- if hasdoc('about') %}
|
||||
<link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
|
||||
{%- endif %}
|
||||
{%- if hasdoc('genindex') %}
|
||||
<link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
|
||||
{%- endif %}
|
||||
{%- if hasdoc('search') %}
|
||||
<link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
|
||||
{%- endif %}
|
||||
{%- if hasdoc('copyright') %}
|
||||
<link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
|
||||
{%- endif %}
|
||||
<link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" />
|
||||
{%- if parents %}
|
||||
<link rel="up" title="{{ parents[-1].title|striptags }}" href="{{ parents[-1].link|e }}" />
|
||||
{%- endif %}
|
||||
{%- if next %}
|
||||
<link rel="next" title="{{ next.title|striptags }}" href="{{ next.link|e }}" />
|
||||
{%- endif %}
|
||||
{%- if prev %}
|
||||
<link rel="prev" title="{{ prev.title|striptags }}" href="{{ prev.link|e }}" />
|
||||
{%- endif %}
|
||||
{%- endblock %}
|
||||
{%- block extrahead %} {% endblock %}
|
||||
{%- block header %}{% endblock %}
|
||||
{%- block relbar1 %}
|
||||
<div id="docstitle">
|
||||
<p>{{docstitle}}</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>{{ title|striptags }}</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
{%- for rellink in rellinks %}
|
||||
<div class="headerButton"><a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags }}" {{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a></div>
|
||||
{%- endfor %}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{%- block sidebar1 %}
|
||||
{%- if not embedded %}{% if not theme_nosidebar|tobool %}
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
{%- block sidebarlogo %}
|
||||
{%- if logo %}
|
||||
<p class="logo"><a href="{{ pathto(master_doc) }}">
|
||||
<img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/>
|
||||
</a></p>
|
||||
{%- endif %}
|
||||
{%- endblock %}
|
||||
{%- block sidebartoc %}
|
||||
<ul><li class="toctree-l1"><a href="{{ pathto(master_doc) }}">{{ _('Main Page') }}</a></li></ul>
|
||||
{{ toctree() }}
|
||||
{%- endblock %}
|
||||
{%- block sidebarrel %}
|
||||
{%- endblock %}
|
||||
{%- block sidebarsourcelink %}
|
||||
{%- if show_source and has_source and sourcename %}
|
||||
<h3>{{ _('This Page') }}</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="{{ pathto('_sources/' + sourcename, true)|e }}"
|
||||
rel="nofollow">{{ _('Show Source') }}</a></li>
|
||||
</ul>
|
||||
{%- endif %}
|
||||
{%- endblock %}
|
||||
{%- if customsidebar %}
|
||||
{% include customsidebar %}
|
||||
{%- endif %}
|
||||
{%- block sidebarsearch %}
|
||||
{%- if pagename != "search" %}
|
||||
<div id="searchbox" style="display: none">
|
||||
{# <h3>{{ _('Quick search') }}</h3> #}
|
||||
<form class="search" action="{{ pathto('search') }}" method="get">
|
||||
<div class="search-wrapper">
|
||||
<span class="search-left"></span>
|
||||
<input class="prettysearch" type="text" name="q" size="18" />
|
||||
<span class="search-right"> </span>
|
||||
</div>
|
||||
<input type="submit" value="{{ _('Search') }}" class="searchbutton" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
{{ _('Enter search terms or a module, class or function name.') }}
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
{%- endif %}
|
||||
{%- endblock %}
|
||||
</div>
|
||||
</div>
|
||||
{%- endif %}{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
{%- block document %}
|
||||
<div class="documentwrapper">
|
||||
{%- if not embedded %}{% if not theme_nosidebar|tobool %}
|
||||
<div class="bodywrapper">
|
||||
{%- endif %}{% endif %}
|
||||
<div class="body">
|
||||
{% block body %} {% endblock %}
|
||||
</div>
|
||||
{%- if not embedded %}{% if not theme_nosidebar|tobool %}
|
||||
</div>
|
||||
{%- endif %}{% endif %}
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>{%- if hasdoc('copyright') %}
|
||||
{% trans path=pathto('copyright'), copyright=copyright|e %}© <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
|
||||
{%- else %}
|
||||
{% trans copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %}
|
||||
{%- endif %}
|
||||
{%- if last_updated %}
|
||||
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
|
||||
{%- endif %}
|
||||
{%- if show_sphinx %}
|
||||
{% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %}
|
||||
{%- endif %}
|
||||
</p>
|
||||
</div>
|
||||
{%- endblock %}
|
||||
{%- block sidebar2 %}{% endblock %}
|
||||
{%- block relbar2 %}{% endblock %}
|
||||
{%- block footer %}
|
||||
<div id="breadcrumbs">
|
||||
{%- for parent in parents %}
|
||||
<a href="{{ parent.link|e }}" {{ accesskey("U") }}>{{ parent.title|safe }}</a><img src="{{ pathto('_static/triangle_closed.png', 1) }}" height="9" width="9" alt=">">
|
||||
{%- endfor %}
|
||||
{{ title|safe|e }}
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="{{ pathto('_static/toc.js', 1) }}"></script>
|
||||
{%- endblock %}
|
||||
8
doc_src/api/index.rst
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
API
|
||||
===
|
||||
|
||||
.. autosummary::
|
||||
:toctree:
|
||||
:recursive:
|
||||
|
||||
categories
|
||||
2
doc_src/changelog.md
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
```{include} ../CHANGELOG.md
|
||||
```
|
||||
241
doc_src/conf.py
|
|
@ -1,196 +1,85 @@
|
|||
#
|
||||
# Django Categories documentation build configuration file, created by
|
||||
# sphinx-quickstart on Tue Oct 6 07:53:33 2009.
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its containing dir.
|
||||
#
|
||||
# Note that not all possible configuration values are present in this
|
||||
# autogenerated file.
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
"""
|
||||
Sphinx configuration.
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
from datetime import date
|
||||
from pathlib import Path
|
||||
|
||||
# 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.append(os.path.abspath(".."))
|
||||
project_root = Path("..").resolve()
|
||||
sys.path.insert(0, str(project_root / "example"))
|
||||
sys.path.insert(0, str(project_root))
|
||||
os.environ["DJANGO_SETTINGS_MODULE"] = "example.settings"
|
||||
|
||||
# Setup Django
|
||||
import django # NOQA
|
||||
|
||||
django.setup()
|
||||
|
||||
import categories # noqa
|
||||
import categories.urls # noqa
|
||||
|
||||
project = "Django Categories"
|
||||
copyright = f"2010-{date.today():%Y}, Corey Oordt"
|
||||
|
||||
version = categories.__version__
|
||||
release = categories.__version__
|
||||
|
||||
# -- General configuration -----------------------------------------------------
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be extensions
|
||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||
extensions = []
|
||||
extensions = [
|
||||
"myst_parser",
|
||||
"sphinx.ext.autodoc",
|
||||
"sphinx.ext.viewcode",
|
||||
"sphinx.ext.autosummary",
|
||||
"sphinx.ext.intersphinx",
|
||||
"sphinx.ext.autosectionlabel",
|
||||
"sphinx.ext.napoleon",
|
||||
"sphinx_autodoc_typehints",
|
||||
"sphinx.ext.coverage",
|
||||
"sphinx.ext.githubpages",
|
||||
"sphinxcontrib_django2",
|
||||
]
|
||||
autosectionlabel_prefix_document = True
|
||||
autosectionlabel_maxdepth = 2
|
||||
autosummary_generate = True
|
||||
napoleon_attr_annotations = True
|
||||
napoleon_include_special_with_doc = False
|
||||
napoleon_include_private_with_doc = True
|
||||
napoleon_include_init_with_doc = True
|
||||
myst_enable_extensions = [
|
||||
"amsmath",
|
||||
"colon_fence",
|
||||
"deflist",
|
||||
"dollarmath",
|
||||
"linkify",
|
||||
"replacements",
|
||||
"smartquotes",
|
||||
"substitution",
|
||||
"tasklist",
|
||||
]
|
||||
intersphinx_mapping = {
|
||||
"python": ("https://docs.python.org/3", None),
|
||||
"django": (
|
||||
"https://docs.djangoproject.com/en/stable",
|
||||
"https://docs.djangoproject.com/en/stable/_objects",
|
||||
),
|
||||
}
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix of source filenames.
|
||||
source_suffix = ".rst"
|
||||
|
||||
# The encoding of source files.
|
||||
# ource_encoding = 'utf-8'
|
||||
|
||||
# The master toctree document.
|
||||
templates_path = ["_templates"]
|
||||
source_suffix = [".rst", ".md"]
|
||||
master_doc = "index"
|
||||
|
||||
# General information about the project.
|
||||
project = "Django Categories"
|
||||
copyright = "2010-2012, Corey Oordt"
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = categories.get_version(short=True)
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = categories.get_version()
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
# anguage = None
|
||||
|
||||
# There are two options for replacing |today|: either, you set today to some
|
||||
# non-false value, then it is used:
|
||||
# oday = ''
|
||||
# Else, today_fmt is used as the format for a strftime call.
|
||||
# oday_fmt = '%B %d, %Y'
|
||||
|
||||
# List of documents that shouldn't be included in the build.
|
||||
# nused_docs = []
|
||||
|
||||
# List of directories, relative to source directory, that shouldn't be searched
|
||||
# for source files.
|
||||
exclude_trees = ["_build"]
|
||||
|
||||
# The reST default role (used for this markup: `text`) to use for all documents.
|
||||
# efault_role = None
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||
# dd_function_parentheses = True
|
||||
|
||||
# If true, the current module name will be prepended to all description
|
||||
# unit titles (such as .. function::).
|
||||
# dd_module_names = True
|
||||
|
||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||
# output. They are ignored by default.
|
||||
# how_authors = False
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
|
||||
pygments_style = "sphinx"
|
||||
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
# odindex_common_prefix = []
|
||||
todo_include_todos = False
|
||||
|
||||
|
||||
# -- Options for HTML output ---------------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. Major themes that come with
|
||||
# Sphinx are currently 'default' and 'sphinxdoc'.
|
||||
html_theme = 'default'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
# tml_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
# tml_theme_path = []
|
||||
|
||||
# The name for this set of Sphinx documents. If None, it defaults to
|
||||
# "<project> v<release> documentation".
|
||||
# tml_title = None
|
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
# tml_short_title = None
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
# tml_logo = None
|
||||
|
||||
# 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
|
||||
# pixels large.
|
||||
# tml_favicon = None
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_theme = "pydata_sphinx_theme"
|
||||
html_static_path = ["_static"]
|
||||
|
||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||
# using the given strftime format.
|
||||
# tml_last_updated_fmt = '%b %d, %Y'
|
||||
|
||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||
# typographically correct entities.
|
||||
# tml_use_smartypants = True
|
||||
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
# tml_sidebars = {}
|
||||
|
||||
# Additional templates that should be rendered to pages, maps page names to
|
||||
# template names.
|
||||
# tml_additional_pages = {}
|
||||
|
||||
# If false, no module index is generated.
|
||||
# tml_use_modindex = True
|
||||
|
||||
# If false, no index is generated.
|
||||
# tml_use_index = True
|
||||
|
||||
# If true, the index is split into individual pages for each letter.
|
||||
# tml_split_index = False
|
||||
|
||||
# If true, links to the reST sources are added to the pages.
|
||||
# tml_show_sourcelink = True
|
||||
|
||||
# If true, an OpenSearch description file will be output, and all pages will
|
||||
# contain a <link> tag referring to it. The value of this option must be the
|
||||
# base URL from which the finished HTML is served.
|
||||
# tml_use_opensearch = ''
|
||||
|
||||
# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
|
||||
# tml_file_suffix = ''
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = "DjangoCategoriesdoc"
|
||||
|
||||
|
||||
# -- Options for LaTeX output --------------------------------------------------
|
||||
|
||||
# The paper size ('letter' or 'a4').
|
||||
# atex_paper_size = 'letter'
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
# atex_font_size = '10pt'
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title, author, documentclass [howto/manual]).
|
||||
latex_documents = [
|
||||
("index", "DjangoCategories.tex", "Django Categories Documentation", "CoreyOordt", "manual"),
|
||||
html_css_files = [
|
||||
"css/custom.css",
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
# the title page.
|
||||
# atex_logo = None
|
||||
|
||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||
# not chapters.
|
||||
# atex_use_parts = False
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
# atex_preamble = ''
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
# atex_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
# atex_use_modindex = True
|
||||
|
|
|
|||
|
|
@ -6,18 +6,6 @@ Django Categories grew out of our need to provide a basic hierarchical taxonomy
|
|||
|
||||
As a news site, our stories, photos, and other content get divided into "sections" and we wanted all the apps to use the same set of sections. As our needs grew, the Django Categories grew in the functionality it gave to category handling within web pages.
|
||||
|
||||
New in 1.1
|
||||
==========
|
||||
|
||||
* Fixed a cosmetic bug in the Django 1.4 admin. Action checkboxes now only appear once.
|
||||
|
||||
* Template tags are refactored to allow easy use of any model derived from ``CategoryBase``.
|
||||
|
||||
* Improved test suite.
|
||||
|
||||
* Improved some of the documentation.
|
||||
|
||||
|
||||
|
||||
Contents
|
||||
========
|
||||
|
|
@ -28,12 +16,10 @@ Contents
|
|||
|
||||
installation
|
||||
getting_started
|
||||
usage
|
||||
registering_models
|
||||
adding_the_fields
|
||||
admin_settings
|
||||
custom_categories
|
||||
user_guide/index
|
||||
reference/index
|
||||
api/index
|
||||
changelog
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
|
|
|
|||
12
doc_src/user_guide/index.md
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
# User Guide
|
||||
|
||||
```{toctree}
|
||||
---
|
||||
maxdepth: 2
|
||||
---
|
||||
usage
|
||||
registering_models
|
||||
adding_the_fields
|
||||
admin_settings
|
||||
custom_categories
|
||||
```
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
# 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:
|
||||
tags:
|
||||
|
|
@ -1,74 +0,0 @@
|
|||
===============
|
||||
Getting Started
|
||||
===============
|
||||
|
||||
You can use Django Categories in two ways:
|
||||
|
||||
1. As storage for one tree of categories, using the :py:class:`Category` model::
|
||||
|
||||
Top Category 1
|
||||
Subcategory 1-1
|
||||
Subcategory 1-2
|
||||
subcategory 1-2-1
|
||||
Top Category 2
|
||||
Subcategory 2-1
|
||||
|
||||
2. As the basis for several custom categories (see :ref:`creating_custom_categories`), e.g. a **MusicGenre** model
|
||||
|
||||
::
|
||||
|
||||
MusicGenre 1
|
||||
MusicSubGenre 1-1
|
||||
MusicSubGenre 1-2
|
||||
MusicSubGenre 1-2-1
|
||||
MusicGenre 2
|
||||
MusicSubGenre 2-1
|
||||
|
||||
and a **Subject** model
|
||||
|
||||
::
|
||||
|
||||
Subject 1
|
||||
Discipline 1-1
|
||||
Discipline 1-2
|
||||
SubDiscipline 1-2-1
|
||||
Subject 2
|
||||
Discipline 2-1
|
||||
|
||||
|
||||
|
||||
Connecting your model with Django-Categories
|
||||
============================================
|
||||
|
||||
There are two ways to add Category fields to an application. If you are in control of the code (it's your application) or you are willing to take control of the code (fork someone else's app) you can make a :ref:`hard_coded_connection`\ .
|
||||
|
||||
For 3rd-party apps or even your own apps that you don't wish to add Django-Categories as a dependency, you can configure a :ref:`lazy_connection`\ .
|
||||
|
||||
.. _hard_coded_connection:
|
||||
|
||||
Hard Coded Connection
|
||||
---------------------
|
||||
|
||||
Hard coded connections are done in the exact same way you handle any other foreign key or many-to-many relations to a model.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from django.db import models
|
||||
|
||||
class MyModel(models.Model):
|
||||
name = models.CharField(max_length=100)
|
||||
category = models.ForeignKey('categories.Category')
|
||||
|
||||
Don't forget to add the field or fields to your ``ModelAdmin`` class as well.
|
||||
|
||||
|
||||
.. _lazy_connection:
|
||||
|
||||
Lazy Connection
|
||||
---------------
|
||||
|
||||
Lazy connections are done through configuring Django Categories in the project's ``settings.py`` file. When the project starts up, the configured fields are dynamically added to the configured models and admin.
|
||||
|
||||
If you do this before you have created the database (before you ran ``manage.py syncdb``), the fields will also be in the tables. If you do this after you have already created all the tables, you can run ``manage.py add_category_fields`` to create the fields (this requires Django South to be installed).
|
||||
|
||||
You add a many-to-one or many-to-many relationship with Django Categories using the :ref:`FK_REGISTRY` and :ref:`M2M_REGISTRY` settings respectively. For more information see :ref:`registering_models`\ .
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
=============================
|
||||
Django Categories v |version|
|
||||
=============================
|
||||
|
||||
Django Categories grew out of our need to provide a basic hierarchical taxonomy management system that multiple applications could use independently or in concert.
|
||||
|
||||
As a news site, our stories, photos, and other content get divided into "sections" and we wanted all the apps to use the same set of sections. As our needs grew, the Django Categories grew in the functionality it gave to category handling within web pages.
|
||||
|
||||
New in 1.1
|
||||
==========
|
||||
|
||||
* Fixed a cosmetic bug in the Django 1.4 admin. Action checkboxes now only appear once.
|
||||
|
||||
* Template tags are refactored to allow easy use of any model derived from ``CategoryBase``.
|
||||
|
||||
* Improved test suite.
|
||||
|
||||
* Improved some of the documentation.
|
||||
|
||||
|
||||
|
||||
Contents
|
||||
========
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:glob:
|
||||
|
||||
installation
|
||||
getting_started
|
||||
usage
|
||||
registering_models
|
||||
adding_the_fields
|
||||
custom_categories
|
||||
reference/index
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
||||
* :ref:`search`
|
||||
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
============
|
||||
Installation
|
||||
============
|
||||
|
||||
To use the Category model
|
||||
=========================
|
||||
|
||||
1. Install django-categories::
|
||||
|
||||
pip install django-categories
|
||||
|
||||
2. Add ``"categories"`` and ``"categories.editor"`` to your ``INSTALLED_APPS`` list in your project's ``settings.py`` file.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
INSTALLED_APPS = [
|
||||
# ...
|
||||
"categories",
|
||||
"categories.editor",
|
||||
]
|
||||
|
||||
3. Run ``./manage.py syncdb`` (or ``./manage.py migrate categories`` if you are using `South <http://south.aeracode.org/>`_)
|
||||
|
||||
|
||||
To only subclass CategoryBase
|
||||
=============================
|
||||
|
||||
If you are going to create your own models using :py:class:`CategoryBase`, (see :ref:`creating_custom_categories`) you'll need a few different steps.
|
||||
|
||||
1. Install django-categories::
|
||||
|
||||
pip install django-categories
|
||||
|
||||
2. Add ``"categories.editor"`` to your ``INSTALLED_APPS`` list in your project's ``settings.py`` file.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
INSTALLED_APPS = [
|
||||
# ...
|
||||
"categories.editor",
|
||||
]
|
||||
|
||||
3. Create your own models.
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
=========
|
||||
Reference
|
||||
=========
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:glob:
|
||||
|
||||
management_commands
|
||||
models
|
||||
settings
|
||||
templatetags
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
.. _management-commands:
|
||||
|
||||
===================
|
||||
Management Commands
|
||||
===================
|
||||
|
||||
.. _import_categories:
|
||||
|
||||
import_categories
|
||||
=================
|
||||
|
||||
**Usage:** ``./manage.py import_categories /path/to/file.txt [/path/to/file2.txt]``
|
||||
|
||||
Imports category tree(s) from a file. Sub categories must be indented by the same multiple of spaces or tabs. The first line in the file cannot start with a space or tab and you can't mix spaces and tabs.
|
||||
|
||||
|
||||
.. _add_category_fields:
|
||||
|
||||
add_category_fields
|
||||
===================
|
||||
|
||||
**Usage:** ``./manage.py add_category_fields [app1 app2 ...]``
|
||||
|
||||
Add missing registered category fields to the database table of a specified application or all registered applications.
|
||||
|
||||
Requires Django South.
|
||||
|
||||
|
||||
.. _drop_category_field:
|
||||
|
||||
drop_category_field
|
||||
===================
|
||||
|
||||
**Usage:** ``./manage.py drop_category_field app_name model_name field_name``
|
||||
|
||||
Drop the ``field_name`` field from the ``app_name_model_name`` table, if the field is currently registered in ``CATEGORIES_SETTINGS``\ .
|
||||
|
||||
Requires Django South.
|
||||
|
|
@ -1,115 +0,0 @@
|
|||
======
|
||||
Models
|
||||
======
|
||||
|
||||
CategoryBase
|
||||
============
|
||||
|
||||
.. py:class:: CategoryBase
|
||||
|
||||
.. py:attribute:: parent
|
||||
|
||||
:py:class:`TreeForeignKey` ``(self)``
|
||||
|
||||
The category's parent category. Leave this blank for an root category.
|
||||
|
||||
.. py:attribute:: name
|
||||
|
||||
**Required** ``CharField(100)``
|
||||
|
||||
The name of the category.
|
||||
|
||||
.. py:attribute:: slug
|
||||
|
||||
**Required** ``SlugField``
|
||||
|
||||
URL-friendly title. It is automatically generated from the title.
|
||||
|
||||
.. py:attribute:: active
|
||||
|
||||
**Required** ``BooleanField`` *default:* ``True``
|
||||
|
||||
Is this item active. If it is inactive, all children are set to inactive as well.
|
||||
|
||||
.. py:attribute:: objects
|
||||
|
||||
``CategoryManager``
|
||||
|
||||
An object manager that adds an ``active`` method for only selecting items whose ``active`` attribute is ``True``.
|
||||
|
||||
.. py:attribute:: tree
|
||||
|
||||
``TreeManager``
|
||||
|
||||
A Django-MPTT `TreeManager <http://readthedocs.org/docs/django-mptt/en/latest/models.html#the-treemanager-custom-manager>`_ instance.
|
||||
|
||||
Category
|
||||
========
|
||||
|
||||
.. py:class:: Category
|
||||
|
||||
Category is a subclass of :py:class:`CategoryBase` and includes all its attributes.
|
||||
|
||||
.. py:attribute:: thumbnail
|
||||
|
||||
``FileField``
|
||||
|
||||
An optional thumbnail, that is uploaded to :ref:`thumbnail_upload_path` via :ref:`THUMBNAIL_STORAGE`.
|
||||
|
||||
.. note:: Why isn't this an ``ImageField``?
|
||||
|
||||
For ``ImageField``\ s, Django checks the file system for the existance of the files to handle the height and width. In many cases this can lead to problems and impact performance.
|
||||
|
||||
For these reasons, a ``FileField`` that manually manages the width and height was chosen.
|
||||
|
||||
.. py:attribute:: thumbnail_width
|
||||
|
||||
``IntegerField``
|
||||
|
||||
The thumbnail width. Automatically set on save if a thumbnail is uploaded.
|
||||
|
||||
.. py:attribute:: thumbnail_height
|
||||
|
||||
``IntegerField``
|
||||
|
||||
The thumbnail height. Automatically set on save if a thumbnail is uploaded.
|
||||
|
||||
.. py:attribute:: order
|
||||
|
||||
**Required** ``IntegerField`` *default:* 0
|
||||
|
||||
A manually-managed order of this category in the listing. Items with the same order are sorted alphabetically.
|
||||
|
||||
.. py:attribute:: alternate_title
|
||||
|
||||
``CharField(100)``
|
||||
|
||||
An alternative title to use on pages with this category.
|
||||
|
||||
.. py:attribute:: alternate_url
|
||||
|
||||
``CharField(200)``
|
||||
|
||||
An alternative URL to use instead of the one derived from the category hierarchy.
|
||||
|
||||
.. note:: Why isn't this a ``URLField``?
|
||||
|
||||
For ``URLField``\ s, Django checks that the URL includes ``http://`` and the site name. This makes it impossible to use relative URLs in that field.
|
||||
|
||||
.. py:attribute:: description
|
||||
|
||||
``TextField``
|
||||
|
||||
An optional longer description of the category. Very useful on category landing pages.
|
||||
|
||||
.. py:attribute:: meta_keywords
|
||||
|
||||
``CharField(255)``
|
||||
|
||||
Comma-separated keywords for search engines.
|
||||
|
||||
.. py:attribute:: meta_extra
|
||||
|
||||
``TextField``
|
||||
|
||||
(Advanced) Any additional HTML to be placed verbatim in the ``<head>`` of the page.
|
||||
|
|
@ -1,121 +0,0 @@
|
|||
.. _reference_settings:
|
||||
|
||||
========
|
||||
Settings
|
||||
========
|
||||
|
||||
The ``CATEGORIES_SETTINGS`` dictionary is where you can override the default settings. You don't have to include all the settings; only the ones which you want to override.
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
|
||||
The default settings are:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
CATEGORIES_SETTINGS = {
|
||||
'ALLOW_SLUG_CHANGE': False,
|
||||
'CACHE_VIEW_LENGTH': 0,
|
||||
'RELATION_MODELS': [],
|
||||
'M2M_REGISTRY': {},
|
||||
'FK_REGISTRY': {},
|
||||
'THUMBNAIL_UPLOAD_PATH': 'uploads/categories/thumbnails',
|
||||
'THUMBNAIL_STORAGE': settings.DEFAULT_FILE_STORAGE,
|
||||
'SLUG_TRANSLITERATOR': lambda x: x,
|
||||
}
|
||||
|
||||
|
||||
.. _ALLOW_SLUG_CHANGE:
|
||||
|
||||
ALLOW_SLUG_CHANGE
|
||||
=================
|
||||
|
||||
**Default:** ``False``
|
||||
|
||||
**Description:** Changing the slug for a category can have serious consequences if it is used as part of a URL. Setting this to ``True`` will allow users to change the slug of a category.
|
||||
|
||||
.. _SLUG_TRANSLITERATOR:
|
||||
|
||||
SLUG_TRANSLITERATOR
|
||||
===================
|
||||
|
||||
**Default:** ``lambda x: x``
|
||||
|
||||
**Description:** Allows the specification of a function to convert non-ASCII characters in the potential slug to ASCII characters. Allows specifying a ``callable()`` or a string in the form of ``'path.to.module.function'``.
|
||||
|
||||
A great tool for this is `Unidecode <http://pypi.python.org/pypi/Unidecode>`_. Use it by setting ``SLUG_TRANSLITERATOR`` to ``'unidecode.unidecode``.
|
||||
|
||||
|
||||
.. _CACHE_VIEW_LENGTH:
|
||||
|
||||
CACHE_VIEW_LENGTH
|
||||
=================
|
||||
|
||||
**Default:** ``0``
|
||||
|
||||
**Description:** This setting will be deprecated soon, but in the mean time, it allows you to specify the amount of time each view result is cached.
|
||||
|
||||
.. _RELATION_MODELS:
|
||||
|
||||
RELATION_MODELS
|
||||
===============
|
||||
|
||||
**Default:** ``[]``
|
||||
|
||||
**Description:** Relation models is a set of models that a user can associate with this category. You specify models using ``'app_name.modelname'`` syntax.
|
||||
|
||||
.. _M2M_REGISTRY:
|
||||
|
||||
M2M_REGISTRY
|
||||
============
|
||||
|
||||
**Default:** {}
|
||||
|
||||
**Description:** A dictionary where the keys are in ``'app_name.model_name'`` syntax, and the values are a string, dict, or tuple of dicts. See :ref:`registering_models`\ .
|
||||
|
||||
.. _FK_REGISTRY:
|
||||
|
||||
FK_REGISTRY
|
||||
============
|
||||
|
||||
**Default:** {}
|
||||
|
||||
**Description:** A dictionary where the keys are in ``'app_name.model_name'`` syntax, and the values are a string, dict, or tuple of dicts. See :ref:`registering_models`\ .
|
||||
|
||||
.. _THUMBNAIL_UPLOAD_PATH:
|
||||
|
||||
.. _REGISTER_ADMIN:
|
||||
|
||||
REGISTER_ADMIN
|
||||
==============
|
||||
|
||||
**Default:** ``True``
|
||||
|
||||
**Description:** If you write your own category class by subclassing ``CategoryBase`` then you probably have no use for registering the default ``Category`` class in the admin.
|
||||
|
||||
|
||||
THUMBNAIL_UPLOAD_PATH
|
||||
=====================
|
||||
|
||||
**Default:** ``'uploads/categories/thumbnails'``
|
||||
|
||||
**Description:** Where thumbnails for the categories will be saved.
|
||||
|
||||
.. _THUMBNAIL_STORAGE:
|
||||
|
||||
THUMBNAIL_STORAGE
|
||||
=================
|
||||
|
||||
**Default:** ``settings.DEFAULT_FILE_STORAGE``
|
||||
|
||||
**Description:** How to store the thumbnails. Allows for external storage engines like S3.
|
||||
|
||||
.. _JAVASCRIPT_URL:
|
||||
|
||||
JAVASCRIPT_URL
|
||||
==============
|
||||
|
||||
**Default:** ``STATIC_URL or MEDIA_URL + 'js/'``
|
||||
|
||||
**Description:** Allows for customization of javascript placement.
|
||||
|
|
@ -1,348 +0,0 @@
|
|||
=========================
|
||||
Template tags and filters
|
||||
=========================
|
||||
|
||||
.. contents::
|
||||
:depth: 2
|
||||
:local:
|
||||
:backlinks: top
|
||||
|
||||
|
||||
Filters
|
||||
=======
|
||||
|
||||
|
||||
``category_path``
|
||||
-----------------
|
||||
|
||||
**Optional Parameter:** separator string. *Default:* ``" :: "``
|
||||
|
||||
Creates a path represented by a categories by joining the items with a separator.
|
||||
|
||||
Each path item will be coerced to unicode, so you can pass a list of category instances, if required.
|
||||
|
||||
**Example using a list of categories:**
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{{ some_list|category_path }}
|
||||
|
||||
If ``some_list`` is ``[ <Category: Country>, <Category: Country pop>, <Category: Urban Cowboy>]`` the result will be::
|
||||
|
||||
Country :: Country pop :: Urban Cowboy
|
||||
|
||||
**Example using a category node and optional separator parameter:**
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{{ some_node.get_ancestors|category_path:" > " }}
|
||||
|
||||
If ``some_node`` was category "Urban Cowboy", the result will be::
|
||||
|
||||
Country > Country pop > Urban Cowboy
|
||||
|
||||
.. _tree_info:
|
||||
|
||||
``tree_info``
|
||||
-------------
|
||||
|
||||
**Optional Parameter:** ``"ancestors"``
|
||||
|
||||
Given a list of categories, it iterates over the list, generating a tuple of the current category and a dict containing information about the tree structure around it, with the following keys:
|
||||
|
||||
``'new_level'``
|
||||
``True`` if the current item is the start of a new level in the tree, ``False`` otherwise.
|
||||
|
||||
``'closed_levels'``
|
||||
A list of levels which end after the current item. This will be an empty list if the next category's level is the same as or greater than the level of the current item.
|
||||
|
||||
Provide the optional argument, ``"ancestors"``, to add a list of unicode representations of the ancestors of the current category, in descending order (root node first, immediate parent last), under the key 'ancestors'.
|
||||
|
||||
For example: given the sample tree below, the contents of the list which would be available under the 'ancestors' key are given on the right::
|
||||
|
||||
Country -> []
|
||||
Country pop -> [u'Country pop']
|
||||
Urban Cowboy -> [u'Country', u'Country pop']
|
||||
|
||||
Using this filter with unpacking in a {% for %} tag, you should have enough information about the tree structure to create a hierarchical representation of the tree.
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% for node,structure in objects|tree_info %}
|
||||
{% if structure.new_level %}<ul><li>{% else %}</li><li>{% endif %}
|
||||
{{ node.name }}
|
||||
{% for level in structure.closed_levels %}</li></ul>{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
``tree_queryset``
|
||||
-----------------
|
||||
|
||||
Convert a regular category :py:class:`QuerySet` into a new, ordered :py:class:`QuerySet` that includes the categories selected and their ancestors.
|
||||
|
||||
This is especially helpful when you have a subset of categories and want to show the hierarchy for all the items.
|
||||
|
||||
For example, if we add it to the example for :ref:`tree_info`:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% for node,structure in objects|tree_queryset|tree_info %}
|
||||
{% if structure.new_level %}<ul><li>{% else %}</li><li>{% endif %}
|
||||
{{ node.name }}
|
||||
{% for level in structure.closed_levels %}</li></ul>{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
A list of unrelated categories such as ``[<Category: Urban cowboy>, <Category: Urban comtemporary>]``, the above template example will output the two categories and their ancestors:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<ul><li>
|
||||
Country
|
||||
<ul><li>
|
||||
Country pop
|
||||
<ul><li>
|
||||
Urban cowboy
|
||||
</li></ul></li></ul></li></ul>
|
||||
<ul><li>
|
||||
Rhythm and blues
|
||||
<ul><li>
|
||||
Urban contemporary
|
||||
</li></ul></li></ul>
|
||||
|
||||
.. note::
|
||||
Categories that have similar ancestors are grouped accordingly. There is no duplication of the ancestor tree.
|
||||
|
||||
|
||||
Inclusion tags
|
||||
==============
|
||||
|
||||
``display_path_as_ul``
|
||||
----------------------
|
||||
|
||||
**Template Rendered:** ``categories/ul_tree.html``
|
||||
|
||||
**Syntax 1:** ``{% display_path_as_ul <category_obj> %}``
|
||||
|
||||
**Syntax 2:** ``{% display_path_as_ul <path_string>[ using="app.Model"] %}``
|
||||
|
||||
Render the category with ancestors, but no children.
|
||||
|
||||
Pass either an object that subclasses :py:class:`CategoryBase` or a path string for the category. Add ``using="app.Model"`` to specify which model when using a path string. The default model used is :py:class:`Category`.
|
||||
|
||||
**Example, using Category model:**
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% display_path_as_ul "/Grandparent/Parent" %}
|
||||
|
||||
**Example, using custom model:**
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% display_path_as_ul "/Grandparent/Parent" using="coolapp.MusicGenre" %}
|
||||
|
||||
**Example, using an object:**
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% display_path_as_ul category_obj %}
|
||||
|
||||
Returns:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<ul>
|
||||
<li><a href="/categories/">Top</a>
|
||||
<ul>
|
||||
<li><a href="/categories/grandparent/">Grandparent</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
``display_drilldown_as_ul``
|
||||
---------------------------
|
||||
|
||||
**Template rendered:** ``categories/ul_tree.html``
|
||||
|
||||
**Syntax 1:** ``{% display_drilldown_as_ul category_obj %}``
|
||||
|
||||
**Syntax 2:** ``{% display_drilldown_as_ul "/Grandparent/Parent" [using="app.Model"] %}``
|
||||
|
||||
Render the category with ancestors and children.
|
||||
|
||||
**Example, using Category model:**
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% display_drilldown_as_ul "/Grandparent/Parent" %}
|
||||
|
||||
**Example, using custom model:**
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% display_drilldown_as_ul "/Grandparent/Parent" using="coolapp.MusicGenre" %}
|
||||
|
||||
**Example, using an object:**
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% display_drilldown_as_ul category_obj %}
|
||||
|
||||
Returns:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<ul>
|
||||
<li><a href="/categories/">Top</a>
|
||||
<ul>
|
||||
<li><a href="/categories/grandparent/">Grandparent</a>
|
||||
<ul>
|
||||
<li><a href="/categories/grandparent/parent/">Parent</a>
|
||||
<ul>
|
||||
<li><a href="/categories/grandparent/parent/child1">Child1</a></li>
|
||||
<li><a href="/categories/grandparent/parent/child2">Child2</a></li>
|
||||
<li><a href="/categories/grandparent/parent/child3">Child3</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
``breadcrumbs tag``
|
||||
-------------------
|
||||
|
||||
**Template rendered:** ``categories/breadcrumbs.html``
|
||||
|
||||
**Syntax 1:** ``{% breadcrumbs category_obj [separator=" :: "] %}``
|
||||
|
||||
**Syntax 2:** ``{% breadcrumbs "/Grandparent/Parent" [separator=" :: "] [using="app.Model"] %}``
|
||||
|
||||
Render breadcrumbs for the given path using ``::`` or the given separator.
|
||||
|
||||
**Example using Category model:**
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% breadcrumbs "/Grandparent/Parent" %}
|
||||
|
||||
**Example using a custom model:**
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% breadcrumbs "/Grandparent/Parent" using="coolapp.MusicGenre" %}
|
||||
|
||||
**Example using an object:**
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% breadcrumbs category_obj %}
|
||||
|
||||
Returns:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<a href="/categories/grandparent/">Grandparent</a> / Parent
|
||||
|
||||
You can alter the separator used in the template by adding a separator argument:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% breadcrumbs category_obj separator=" > " %}
|
||||
|
||||
Returns:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<a href="/categories/grandparent/">Grandparent</a> > Parent
|
||||
|
||||
|
||||
Template Tags
|
||||
=============
|
||||
|
||||
``get_top_level_categories``
|
||||
----------------------------
|
||||
|
||||
Retrieves an alphabetical list of all the categories that have no parents.
|
||||
|
||||
Syntax:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% get_top_level_categories [using "app.Model"] as categories %}
|
||||
|
||||
Returns an list of categories ``[<category>, <category>, <category, ...]``
|
||||
|
||||
|
||||
``get_category_drilldown``
|
||||
--------------------------
|
||||
|
||||
**Syntax 1:** ``{% get_category_drilldown <path_string> [using "app.Model"] as <varname> %}``
|
||||
|
||||
**Syntax 2:** ``{% get_category_drilldown <object> as <varname> %}``
|
||||
|
||||
Retrieves the specified category, its ancestors and its immediate children as an iterable. Syntax 1 allows for the retrieval of the category object via a slash-delimited path. The optional ``using "app.Model"`` allows you to specify from which model to retrieve the object.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% get_category_drilldown "/Grandparent/Parent" using "family.Member" as family %}
|
||||
|
||||
The second syntax uses an instance of any object that subclasses :py:class:`CategoryBase`
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% get_category_drilldown category_obj as family %}
|
||||
|
||||
Both examples sets ``family`` to::
|
||||
|
||||
[Grandparent, Parent, Child 1, Child 2, Child n]
|
||||
|
||||
``recursetree``
|
||||
---------------
|
||||
|
||||
This tag renders a section of your template recursively for each node in your
|
||||
tree.
|
||||
|
||||
For example:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
<ul class="root">
|
||||
{% recursetree nodes %}
|
||||
<li>
|
||||
{{ node.name }}
|
||||
{% if not node.is_leaf_node %}
|
||||
<ul class="children">
|
||||
{{ children }}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endrecursetree %}
|
||||
</ul>
|
||||
|
||||
Note the special variables ``node`` and ``children``.
|
||||
These are magically inserted into your context while you're inside the
|
||||
``recursetree`` tag.
|
||||
|
||||
``node`` is an instance of your MPTT model.
|
||||
|
||||
``children`` : This variable holds the rendered HTML for the children of
|
||||
``node``.
|
||||
|
||||
.. note::
|
||||
If you already have variables called ``node`` or ``children`` in your
|
||||
template, and you need to access them inside the ``recursetree`` block,
|
||||
you'll need to alias them to some other name first:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% with node as friendly_node %}
|
||||
{% recursetree nodes %}
|
||||
{{ node.name }} is friends with {{ friendly_node.name }}
|
||||
{{ children }}
|
||||
{% endrecursetree %}
|
||||
{% endwith %}
|
||||
|
|
@ -1,146 +0,0 @@
|
|||
=============
|
||||
Template Tags
|
||||
=============
|
||||
|
||||
get_top_level_categories
|
||||
========================
|
||||
|
||||
Retrieves an alphabetical list of all the categories that have no parents.
|
||||
|
||||
Syntax:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% get_top_level_categories as categories %}
|
||||
|
||||
Returns an list of categories ``[<category>, <category>, <category, ...]``
|
||||
|
||||
|
||||
display_path_as_ul
|
||||
==================
|
||||
|
||||
Render the category with ancestors, but no children using the ``categories/ul_tree.html`` template.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% display_path_as_ul "/Grandparent/Parent" %}
|
||||
|
||||
or
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% display_path_as_ul category_obj %}
|
||||
|
||||
Returns:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<ul>
|
||||
<li><a href="/categories/">Top</a>
|
||||
<ul>
|
||||
<li><a href="/categories/grandparent/">Grandparent</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
get_category_drilldown
|
||||
======================
|
||||
|
||||
Retrieves the specified category, its ancestors and its immediate children
|
||||
as an iterable.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% get_category_drilldown "/Grandparent/Parent" as family %}
|
||||
|
||||
or
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% get_category_drilldown category_obj as family %}
|
||||
|
||||
Sets ``family`` to::
|
||||
|
||||
[Grandparent, Parent, Child 1, Child 2, Child n]
|
||||
|
||||
|
||||
display_drilldown_as_ul
|
||||
=======================
|
||||
|
||||
Render the category with ancestors and children using the
|
||||
``categories/ul_tree.html`` template.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% display_drilldown_as_ul "/Grandparent/Parent" %}
|
||||
|
||||
or:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% display_drilldown_as_ul category_obj %}
|
||||
|
||||
Returns:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<ul>
|
||||
<li><a href="/categories/">Top</a>
|
||||
<ul>
|
||||
<li><a href="/categories/grandparent/">Grandparent</a>
|
||||
<ul>
|
||||
<li><a href="/categories/grandparent/parent/">Parent</a>
|
||||
<ul>
|
||||
<li><a href="/categories/grandparent/parent/child1">Child1</a></li>
|
||||
<li><a href="/categories/grandparent/parent/child2">Child2</a></li>
|
||||
<li><a href="/categories/grandparent/parent/child3">Child3</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
breadcrumbs tag
|
||||
===============
|
||||
|
||||
Render breadcrumbs, using the ``categories/breadcrumbs.html`` template, using the optional ``separator`` argument.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% breadcrumbs "/Grandparent/Parent" %}
|
||||
|
||||
or:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% breadcrumbs category_obj %}
|
||||
|
||||
Returns:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<a href="/categories/grandparent/">Grandparent</a> / Parent
|
||||
|
||||
You can alter the separator used in the template by adding a string argument to be the separator:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% breadcrumbs category_obj "::" %}
|
||||
|
||||
Returns:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<a href="/categories/grandparent/">Grandparent</a> :: Parent
|
||||
BIN
docs/_static/ajax-loader.gif
vendored
|
Before Width: | Height: | Size: 673 B |
528
docs/_static/basic.css
vendored
|
|
@ -1,528 +0,0 @@
|
|||
/*
|
||||
* basic.css
|
||||
* ~~~~~~~~~
|
||||
*
|
||||
* Sphinx stylesheet -- basic theme.
|
||||
*
|
||||
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
/* -- main layout ----------------------------------------------------------- */
|
||||
|
||||
div.clearer {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* -- relbar ---------------------------------------------------------------- */
|
||||
|
||||
div.related {
|
||||
width: 100%;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
div.related h3 {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.related ul {
|
||||
margin: 0;
|
||||
padding: 0 0 0 10px;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
div.related li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
div.related li.right {
|
||||
float: right;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
/* -- sidebar --------------------------------------------------------------- */
|
||||
|
||||
div.sphinxsidebarwrapper {
|
||||
padding: 10px 5px 0 10px;
|
||||
}
|
||||
|
||||
div.sphinxsidebar {
|
||||
float: left;
|
||||
width: 230px;
|
||||
margin-left: -100%;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul ul,
|
||||
div.sphinxsidebar ul.want-points {
|
||||
margin-left: 20px;
|
||||
list-style: square;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul ul {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
div.sphinxsidebar form {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
div.sphinxsidebar input {
|
||||
border: 1px solid #98dbcc;
|
||||
font-family: sans-serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/* -- search page ----------------------------------------------------------- */
|
||||
|
||||
ul.search {
|
||||
margin: 10px 0 0 20px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul.search li {
|
||||
padding: 5px 0 5px 20px;
|
||||
background-image: url(file.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 7px;
|
||||
}
|
||||
|
||||
ul.search li a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
ul.search li div.context {
|
||||
color: #888;
|
||||
margin: 2px 0 0 30px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
ul.keywordmatches li.goodmatch a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* -- index page ------------------------------------------------------------ */
|
||||
|
||||
table.contentstable {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
table.contentstable p.biglink {
|
||||
line-height: 150%;
|
||||
}
|
||||
|
||||
a.biglink {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
span.linkdescr {
|
||||
font-style: italic;
|
||||
padding-top: 5px;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
/* -- general index --------------------------------------------------------- */
|
||||
|
||||
table.indextable {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
table.indextable td {
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
table.indextable dl, table.indextable dd {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
table.indextable tr.pcap {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
table.indextable tr.cap {
|
||||
margin-top: 10px;
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
img.toggler {
|
||||
margin-right: 3px;
|
||||
margin-top: 3px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div.modindex-jumpbox {
|
||||
border-top: 1px solid #ddd;
|
||||
border-bottom: 1px solid #ddd;
|
||||
margin: 1em 0 1em 0;
|
||||
padding: 0.4em;
|
||||
}
|
||||
|
||||
div.genindex-jumpbox {
|
||||
border-top: 1px solid #ddd;
|
||||
border-bottom: 1px solid #ddd;
|
||||
margin: 1em 0 1em 0;
|
||||
padding: 0.4em;
|
||||
}
|
||||
|
||||
/* -- general body styles --------------------------------------------------- */
|
||||
|
||||
a.headerlink {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
h1:hover > a.headerlink,
|
||||
h2:hover > a.headerlink,
|
||||
h3:hover > a.headerlink,
|
||||
h4:hover > a.headerlink,
|
||||
h5:hover > a.headerlink,
|
||||
h6:hover > a.headerlink,
|
||||
dt:hover > a.headerlink {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
div.body p.caption {
|
||||
text-align: inherit;
|
||||
}
|
||||
|
||||
div.body td {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.field-list ul {
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
.first {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
p.rubric {
|
||||
margin-top: 30px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
img.align-left, .figure.align-left, object.align-left {
|
||||
clear: left;
|
||||
float: left;
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
img.align-right, .figure.align-right, object.align-right {
|
||||
clear: right;
|
||||
float: right;
|
||||
margin-left: 1em;
|
||||
}
|
||||
|
||||
img.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.align-center {
|
||||
clear: both;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* -- sidebars -------------------------------------------------------------- */
|
||||
|
||||
div.sidebar {
|
||||
margin: 0 0 0.5em 1em;
|
||||
border: 1px solid #ddb;
|
||||
padding: 7px 7px 0 7px;
|
||||
background-color: #ffe;
|
||||
width: 40%;
|
||||
float: right;
|
||||
}
|
||||
|
||||
p.sidebar-title {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* -- topics ---------------------------------------------------------------- */
|
||||
|
||||
div.topic {
|
||||
border: 1px solid #ccc;
|
||||
padding: 7px 7px 0 7px;
|
||||
margin: 10px 0 10px 0;
|
||||
}
|
||||
|
||||
p.topic-title {
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
/* -- admonitions ----------------------------------------------------------- */
|
||||
|
||||
div.admonition {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
padding: 7px;
|
||||
}
|
||||
|
||||
div.admonition dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.admonition dl {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
p.admonition-title {
|
||||
margin: 0px 10px 5px 0px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.body p.centered {
|
||||
text-align: center;
|
||||
margin-top: 25px;
|
||||
}
|
||||
|
||||
/* -- tables ---------------------------------------------------------------- */
|
||||
|
||||
table.docutils {
|
||||
border: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table.docutils td, table.docutils th {
|
||||
padding: 1px 8px 1px 5px;
|
||||
border-top: 0;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
border-bottom: 1px solid #aaa;
|
||||
}
|
||||
|
||||
table.field-list td, table.field-list th {
|
||||
border: 0 !important;
|
||||
}
|
||||
|
||||
table.footnote td, table.footnote th {
|
||||
border: 0 !important;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px;
|
||||
}
|
||||
|
||||
table.citation td {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
/* -- other body styles ----------------------------------------------------- */
|
||||
|
||||
ol.arabic {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
ol.loweralpha {
|
||||
list-style: lower-alpha;
|
||||
}
|
||||
|
||||
ol.upperalpha {
|
||||
list-style: upper-alpha;
|
||||
}
|
||||
|
||||
ol.lowerroman {
|
||||
list-style: lower-roman;
|
||||
}
|
||||
|
||||
ol.upperroman {
|
||||
list-style: upper-roman;
|
||||
}
|
||||
|
||||
dl {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
dd p {
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
dd ul, dd table {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-top: 3px;
|
||||
margin-bottom: 10px;
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
dt:target, .highlighted {
|
||||
background-color: #fbe54e;
|
||||
}
|
||||
|
||||
dl.glossary dt {
|
||||
font-weight: bold;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
.field-list ul {
|
||||
margin: 0;
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
.field-list p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.refcount {
|
||||
color: #060;
|
||||
}
|
||||
|
||||
.optional {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
.versionmodified {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.system-message {
|
||||
background-color: #fda;
|
||||
padding: 5px;
|
||||
border: 3px solid red;
|
||||
}
|
||||
|
||||
.footnote:target {
|
||||
background-color: #ffa;
|
||||
}
|
||||
|
||||
.line-block {
|
||||
display: block;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.line-block .line-block {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
margin-left: 1.5em;
|
||||
}
|
||||
|
||||
.guilabel, .menuselection {
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
.accelerator {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.classifier {
|
||||
font-style: oblique;
|
||||
}
|
||||
|
||||
/* -- code displays --------------------------------------------------------- */
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
overflow-y: hidden; /* fixes display issues on Chrome browsers */
|
||||
}
|
||||
|
||||
td.linenos pre {
|
||||
padding: 5px 0px;
|
||||
border: 0;
|
||||
background-color: transparent;
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
table.highlighttable {
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
|
||||
table.highlighttable td {
|
||||
padding: 0 0.5em 0 0.5em;
|
||||
}
|
||||
|
||||
tt.descname {
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
tt.descclassname {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
tt.xref, a tt {
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.viewcode-link {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.viewcode-back {
|
||||
float: right;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
div.viewcode-block:target {
|
||||
margin: -1px -10px;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
/* -- math display ---------------------------------------------------------- */
|
||||
|
||||
img.math {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
div.body div.math p {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
span.eqno {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* -- printout stylesheet --------------------------------------------------- */
|
||||
|
||||
@media print {
|
||||
div.document,
|
||||
div.documentwrapper,
|
||||
div.bodywrapper {
|
||||
margin: 0 !important;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
div.sphinxsidebar,
|
||||
div.related,
|
||||
div.footer,
|
||||
#top-link {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
BIN
docs/_static/breadcrumb_background.png
vendored
|
Before Width: | Height: | Size: 136 B |
BIN
docs/_static/comment-bright.png
vendored
|
Before Width: | Height: | Size: 3.4 KiB |
BIN
docs/_static/comment-close.png
vendored
|
Before Width: | Height: | Size: 3.5 KiB |
BIN
docs/_static/comment.png
vendored
|
Before Width: | Height: | Size: 3.4 KiB |
773
docs/_static/default.css
vendored
|
|
@ -1,773 +0,0 @@
|
|||
/**
|
||||
* Sphinx stylesheet -- basic theme
|
||||
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
*/
|
||||
h3 {
|
||||
color:#000000;
|
||||
font-size: 17px;
|
||||
margin-bottom:0.5em;
|
||||
margin-top:2em;
|
||||
}
|
||||
/* -- main layout ----------------------------------------------------------- */
|
||||
|
||||
div.clearer {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* -- header ---------------------------------------------------------------- */
|
||||
|
||||
#header #title {
|
||||
background:#29334F url(title_background.png) repeat-x scroll 0 0;
|
||||
border-bottom:1px solid #B6B6B6;
|
||||
height:25px;
|
||||
overflow:hidden;
|
||||
}
|
||||
#headerButtons {
|
||||
position: absolute;
|
||||
list-style: none outside;
|
||||
top: 26px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border-top: 1px solid #2B334F;
|
||||
border-bottom: 1px solid #EDEDED;
|
||||
height: 20px;
|
||||
font-size: 8pt;
|
||||
overflow: hidden;
|
||||
background-color: #D8D8D8;
|
||||
}
|
||||
|
||||
#headerButtons li {
|
||||
background-repeat:no-repeat;
|
||||
display:inline;
|
||||
margin-top:0;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
.headerButton {
|
||||
display: inline;
|
||||
height:20px;
|
||||
}
|
||||
|
||||
.headerButton a {
|
||||
text-decoration: none;
|
||||
float: right;
|
||||
height: 20px;
|
||||
padding: 4px 15px;
|
||||
border-left: 1px solid #ACACAC;
|
||||
font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
|
||||
color: black;
|
||||
}
|
||||
.headerButton a:hover {
|
||||
color: white;
|
||||
background-color: #787878;
|
||||
|
||||
}
|
||||
|
||||
li#toc_button {
|
||||
text-align:left;
|
||||
}
|
||||
|
||||
li#toc_button .headerButton a {
|
||||
width:198px;
|
||||
padding-top: 4px;
|
||||
font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
|
||||
color: black;
|
||||
float: left;
|
||||
padding-left:15px;
|
||||
border-right:1px solid #ACACAC;
|
||||
background:transparent url(triangle_open.png) no-repeat scroll 4px 6px;
|
||||
}
|
||||
|
||||
li#toc_button .headerButton a:hover {
|
||||
background-color: #787878;
|
||||
color: white;
|
||||
}
|
||||
|
||||
li#page_buttons {
|
||||
position:absolute;
|
||||
right:0;
|
||||
}
|
||||
|
||||
#breadcrumbs {
|
||||
color: black;
|
||||
background-image:url(breadcrumb_background.png);
|
||||
border-top:1px solid #2B334F;
|
||||
bottom:0;
|
||||
font-size:10px;
|
||||
height:15px;
|
||||
left:0;
|
||||
overflow:hidden;
|
||||
padding:3px 10px 0;
|
||||
position:absolute;
|
||||
right:0;
|
||||
white-space:nowrap;
|
||||
z-index:901;
|
||||
}
|
||||
#breadcrumbs a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
}
|
||||
#breadcrumbs a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
#breadcrumbs img {
|
||||
padding-left: 3px;
|
||||
}
|
||||
/* -- sidebar --------------------------------------------------------------- */
|
||||
#sphinxsidebar {
|
||||
position: absolute;
|
||||
top: 84px;
|
||||
bottom: 19px;
|
||||
left: 0px;
|
||||
width: 229px;
|
||||
background-color: #E4EBF7;
|
||||
border-right: 1px solid #ACACAC;
|
||||
border-top: 1px solid #2B334F;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
padding: 0px 0px 0px 0px;
|
||||
font-size:11px;
|
||||
}
|
||||
|
||||
div.sphinxsidebarwrapper {
|
||||
padding: 10px 5px 0 10px;
|
||||
}
|
||||
|
||||
#sphinxsidebar li {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
font-weight: normal;
|
||||
margin: 0px 0px 7px 0px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
#sphinxsidebar ul {
|
||||
list-style: none;
|
||||
margin: 0px 0px 0px 0px;
|
||||
padding: 0px 5px 0px 5px;
|
||||
}
|
||||
|
||||
#sphinxsidebar ul ul,
|
||||
#sphinxsidebar ul.want-points {
|
||||
list-style: square;
|
||||
}
|
||||
|
||||
#sphinxsidebar ul ul {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
#sphinxsidebar form {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
#sphinxsidebar input {
|
||||
border: 1px solid #787878;
|
||||
font-family: sans-serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
#sphinxsidebar li.toctree-l1 a {
|
||||
font-weight: bold;
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#sphinxsidebar li.toctree-l2 a {
|
||||
font-weight: bold;
|
||||
color: #4f4f4f;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* -- search page ----------------------------------------------------------- */
|
||||
|
||||
ul.search {
|
||||
margin: 10px 0 0 20px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul.search li {
|
||||
padding: 5px 0 5px 20px;
|
||||
background-image: url(file.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 7px;
|
||||
}
|
||||
|
||||
ul.search li a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
ul.search li div.context {
|
||||
color: #888;
|
||||
margin: 2px 0 0 30px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
ul.keywordmatches li.goodmatch a {
|
||||
font-weight: bold;
|
||||
}
|
||||
#sphinxsidebar input.prettysearch {border:none;}
|
||||
input.searchbutton {
|
||||
float: right;
|
||||
}
|
||||
.search-wrapper {width: 100%; height: 25px;}
|
||||
.search-wrapper input.prettysearch { border: none; width:200px; height: 16px; background: url(searchfield_repeat.png) center top repeat-x; border: 0px; margin: 0; padding: 3px 0 0 0; font: 11px "Lucida Grande", "Lucida Sans Unicode", Arial, sans-serif; }
|
||||
.search-wrapper input.prettysearch { width: 184px; margin-left: 20px; *margin-top:-1px; *margin-right:-2px; *margin-left:10px; }
|
||||
.search-wrapper .search-left { display: block; position: absolute; width: 20px; height: 19px; background: url(searchfield_leftcap.png) left top no-repeat; }
|
||||
.search-wrapper .search-right { display: block; position: relative; left: 204px; top: -19px; width: 10px; height: 19px; background: url(searchfield_rightcap.png) right top no-repeat; }
|
||||
|
||||
/* -- index page ------------------------------------------------------------ */
|
||||
|
||||
table.contentstable {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
table.contentstable p.biglink {
|
||||
line-height: 150%;
|
||||
}
|
||||
|
||||
a.biglink {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
span.linkdescr {
|
||||
font-style: italic;
|
||||
padding-top: 5px;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
/* -- general index --------------------------------------------------------- */
|
||||
|
||||
table.indextable td {
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
table.indextable dl, table.indextable dd {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
table.indextable tr.pcap {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
table.indextable tr.cap {
|
||||
margin-top: 10px;
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
img.toggler {
|
||||
margin-right: 3px;
|
||||
margin-top: 3px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* -- general body styles --------------------------------------------------- */
|
||||
.document {
|
||||
border-top:1px solid #2B334F;
|
||||
overflow:auto;
|
||||
padding-left:2em;
|
||||
padding-right:2em;
|
||||
position:absolute;
|
||||
z-index:1;
|
||||
top:84px;
|
||||
bottom:19px;
|
||||
right:0;
|
||||
left:230px;
|
||||
}
|
||||
|
||||
a.headerlink {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
h1:hover > a.headerlink,
|
||||
h2:hover > a.headerlink,
|
||||
h3:hover > a.headerlink,
|
||||
h4:hover > a.headerlink,
|
||||
h5:hover > a.headerlink,
|
||||
h6:hover > a.headerlink,
|
||||
dt:hover > a.headerlink {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
div.body p.caption {
|
||||
text-align: inherit;
|
||||
}
|
||||
|
||||
div.body td {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.field-list ul {
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
.first {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
p.rubric {
|
||||
margin-top: 30px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* -- sidebars -------------------------------------------------------------- */
|
||||
|
||||
/*div.sidebar {
|
||||
margin: 0 0 0.5em 1em;
|
||||
border: 1px solid #ddb;
|
||||
padding: 7px 7px 0 7px;
|
||||
background-color: #ffe;
|
||||
width: 40%;
|
||||
float: right;
|
||||
}
|
||||
|
||||
p.sidebar-title {
|
||||
font-weight: bold;
|
||||
}
|
||||
*/
|
||||
/* -- topics ---------------------------------------------------------------- */
|
||||
|
||||
div.topic {
|
||||
border: 1px solid #ccc;
|
||||
padding: 7px 7px 0 7px;
|
||||
margin: 10px 0 10px 0;
|
||||
}
|
||||
|
||||
p.topic-title {
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
/* -- admonitions ----------------------------------------------------------- */
|
||||
.admonition {
|
||||
border: 1px solid #a1a5a9;
|
||||
background-color: #f7f7f7;
|
||||
margin: 20px;
|
||||
padding: 0px 8px 7px 9px;
|
||||
text-align: left;
|
||||
}
|
||||
.warning {
|
||||
background-color:#E8E8E8;
|
||||
border:1px solid #111111;
|
||||
margin:30px;
|
||||
}
|
||||
.admonition p {
|
||||
font: 12px 'Lucida Grande', Geneva, Helvetica, Arial, sans-serif;
|
||||
margin-top: 7px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
div.admonition dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.admonition dl {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
p.admonition-title {
|
||||
margin: 0px 10px 5px 0px;
|
||||
font-weight: bold;
|
||||
padding-top: 3px;
|
||||
}
|
||||
|
||||
div.body p.centered {
|
||||
text-align: center;
|
||||
margin-top: 25px;
|
||||
}
|
||||
|
||||
/* -- tables ---------------------------------------------------------------- */
|
||||
|
||||
table.docutils {
|
||||
border-collapse: collapse;
|
||||
border-top: 1px solid #919699;
|
||||
border-left: 1px solid #919699;
|
||||
border-right: 1px solid #919699;
|
||||
font-size:12px;
|
||||
padding:8px;
|
||||
text-align:left;
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
table.docutils td, table.docutils th {
|
||||
padding: 8px;
|
||||
font-size: 12px;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
border-bottom: 1px solid #919699;
|
||||
}
|
||||
|
||||
table.docutils th {
|
||||
font-weight: bold;
|
||||
}
|
||||
/* This alternates colors in up to six table rows (light blue for odd, white for even)*/
|
||||
.docutils tr {
|
||||
background: #F0F5F9;
|
||||
}
|
||||
|
||||
.docutils tr + tr {
|
||||
background: #FFFFFF;
|
||||
}
|
||||
|
||||
.docutils tr + tr + tr {
|
||||
background: #F0F5F9;
|
||||
}
|
||||
|
||||
.docutils tr + tr + tr + tr {
|
||||
background: #FFFFFF;
|
||||
}
|
||||
|
||||
.docutils tr + tr + tr +tr + tr {
|
||||
background: #F0F5F9;
|
||||
}
|
||||
|
||||
.docutils tr + tr + tr + tr + tr + tr {
|
||||
background: #FFFFFF;
|
||||
}
|
||||
|
||||
.docutils tr + tr + tr + tr + tr + tr + tr {
|
||||
background: #F0F5F9;
|
||||
}
|
||||
|
||||
table.footnote td, table.footnote th {
|
||||
border: 0 !important;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
/* -- other body styles ----------------------------------------------------- */
|
||||
|
||||
dl {
|
||||
margin-bottom: 15px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
dd p {
|
||||
margin-top: 0px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
dd ul, dd table {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-top: 3px;
|
||||
margin-bottom: 10px;
|
||||
margin-left: 30px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
dt:target, .highlight {
|
||||
background-color: #fbe54e;
|
||||
}
|
||||
|
||||
dl.glossary dt {
|
||||
font-weight: bold;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
dl.glossary dd {
|
||||
font-size:12px;
|
||||
}
|
||||
.field-list ul {
|
||||
vertical-align: top;
|
||||
margin: 0;
|
||||
padding-bottom: 0;
|
||||
list-style: none inside;
|
||||
}
|
||||
|
||||
.field-list ul li {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.field-list p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.refcount {
|
||||
color: #060;
|
||||
}
|
||||
|
||||
.optional {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
.versionmodified {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.system-message {
|
||||
background-color: #fda;
|
||||
padding: 5px;
|
||||
border: 3px solid red;
|
||||
}
|
||||
|
||||
.footnote:target {
|
||||
background-color: #ffa
|
||||
}
|
||||
|
||||
/* -- code displays --------------------------------------------------------- */
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
background-color:#F1F5F9;
|
||||
border:1px solid #C9D1D7;
|
||||
border-spacing:0;
|
||||
font-family:"Bitstream Vera Sans Mono",Monaco,"Lucida Console",Courier,Consolas,monospace;
|
||||
font-size:11px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
td.linenos {
|
||||
width: 2em;
|
||||
}
|
||||
|
||||
td.linenos pre {
|
||||
padding: 5px 0px;
|
||||
border: 0;
|
||||
background-color: transparent;
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
td.code {
|
||||
|
||||
}
|
||||
|
||||
table.highlighttable {
|
||||
margin-left: 0.5em;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
table.highlighttable td {
|
||||
padding: 0 0.5em 0 0.5em;
|
||||
}
|
||||
table.highlighttable td.linenos {
|
||||
text-align: right;
|
||||
width: 1.5em;
|
||||
padding-right: 0;
|
||||
}
|
||||
tt {
|
||||
font-family:"Bitstream Vera Sans Mono",Monaco,"Lucida Console",Courier,Consolas,monospace;
|
||||
}
|
||||
|
||||
tt.descname {
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
tt.descclassname {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
tt.xref, a tt {
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* -- math display ---------------------------------------------------------- */
|
||||
|
||||
img.math {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
div.body div.math p {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
span.eqno {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* -- printout stylesheet --------------------------------------------------- */
|
||||
|
||||
@media print {
|
||||
div.document,
|
||||
div.documentwrapper,
|
||||
div.bodywrapper {
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
div.sphinxsidebar,
|
||||
div.related,
|
||||
div.footer,
|
||||
#top-link {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
|
||||
}
|
||||
|
||||
dl.class dt {
|
||||
padding: 3px;
|
||||
/* border-top: 2px solid #999;*/
|
||||
}
|
||||
|
||||
em.property {
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
dl.class dd p {
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
dl.class dd dl.exception dt {
|
||||
padding: 3px;
|
||||
background-color: #FFD6D6;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
dl.class dd dl.method dt {
|
||||
padding: 3px;
|
||||
background-color: #e9e9e9;
|
||||
border-top: none;
|
||||
|
||||
}
|
||||
|
||||
dl.function dt {
|
||||
padding: 3px;
|
||||
border-top: 2px solid #999;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-image:none;
|
||||
list-style-position:outside;
|
||||
list-style-type:square;
|
||||
margin:0 0 0 30px;
|
||||
padding:0 0 12px 6px;
|
||||
}
|
||||
#docstitle {
|
||||
height: 36px;
|
||||
background-image: url(header_sm_mid.png);
|
||||
left: 0;
|
||||
top: 0;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
}
|
||||
#docstitle p {
|
||||
padding:7px 0 0 45px;
|
||||
margin: 0;
|
||||
color: white;
|
||||
text-shadow:0 1px 0 #787878;
|
||||
background: transparent url(documentation.png) no-repeat scroll 10px 3px;
|
||||
height: 36px;
|
||||
font-size: 15px;
|
||||
}
|
||||
#header {
|
||||
height:45px;
|
||||
left:0;
|
||||
position:absolute;
|
||||
right:0;
|
||||
top:36px;
|
||||
z-index:900;
|
||||
}
|
||||
|
||||
#header h1 {
|
||||
font-size:10pt;
|
||||
margin:0;
|
||||
padding:5px 0 0 10px;
|
||||
text-shadow:0 1px 0 #D5D5D5;
|
||||
white-space:nowrap;
|
||||
}
|
||||
|
||||
h1 {
|
||||
-x-system-font:none;
|
||||
color:#000000;
|
||||
font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
|
||||
font-size:30px;
|
||||
font-size-adjust:none;
|
||||
font-stretch:normal;
|
||||
font-style:normal;
|
||||
font-variant:normal;
|
||||
font-weight:bold;
|
||||
line-height:normal;
|
||||
margin-bottom:25px;
|
||||
margin-top:1em;
|
||||
}
|
||||
|
||||
.footer {
|
||||
border-top:1px solid #DDDDDD;
|
||||
clear:both;
|
||||
padding-top:9px;
|
||||
width:100%;
|
||||
font-size:10px;
|
||||
}
|
||||
|
||||
p {
|
||||
-x-system-font:none;
|
||||
font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
|
||||
font-size:12px;
|
||||
font-size-adjust:none;
|
||||
font-stretch:normal;
|
||||
font-style:normal;
|
||||
font-variant:normal;
|
||||
font-weight:normal;
|
||||
line-height:normal;
|
||||
margin-bottom:10px;
|
||||
margin-top:0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
border-bottom:1px solid #919699;
|
||||
color:#000000;
|
||||
font-size:24px;
|
||||
margin-top:2.5em;
|
||||
padding-bottom:2px;
|
||||
}
|
||||
|
||||
a:link:hover {
|
||||
color:#093D92;
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
a:link {
|
||||
color:#093D92;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
|
||||
ol {
|
||||
list-style-position:outside;
|
||||
list-style-type:decimal;
|
||||
margin:0 0 0 30px;
|
||||
padding:0 0 12px 6px;
|
||||
}
|
||||
li {
|
||||
margin-top:7px;
|
||||
font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
|
||||
font-size:12px;
|
||||
font-size-adjust:none;
|
||||
font-stretch:normal;
|
||||
font-style:normal;
|
||||
font-variant:normal;
|
||||
font-weight:normal;
|
||||
line-height:normal;
|
||||
}
|
||||
li > p {
|
||||
display:inline;
|
||||
}
|
||||
li p {
|
||||
margin-top:8px;
|
||||
}
|
||||
247
docs/_static/doctools.js
vendored
|
|
@ -1,247 +0,0 @@
|
|||
/*
|
||||
* doctools.js
|
||||
* ~~~~~~~~~~~
|
||||
*
|
||||
* Sphinx JavaScript utilties for all documentation.
|
||||
*
|
||||
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* select a different prefix for underscore
|
||||
*/
|
||||
$u = _.noConflict();
|
||||
|
||||
/**
|
||||
* make the code below compatible with browsers without
|
||||
* an installed firebug like debugger
|
||||
if (!window.console || !console.firebug) {
|
||||
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
|
||||
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
|
||||
"profile", "profileEnd"];
|
||||
window.console = {};
|
||||
for (var i = 0; i < names.length; ++i)
|
||||
window.console[names[i]] = function() {};
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* small helper function to urldecode strings
|
||||
*/
|
||||
jQuery.urldecode = function(x) {
|
||||
return decodeURIComponent(x).replace(/\+/g, ' ');
|
||||
}
|
||||
|
||||
/**
|
||||
* small helper function to urlencode strings
|
||||
*/
|
||||
jQuery.urlencode = encodeURIComponent;
|
||||
|
||||
/**
|
||||
* This function returns the parsed url parameters of the
|
||||
* current request. Multiple values per key are supported,
|
||||
* it will always return arrays of strings for the value parts.
|
||||
*/
|
||||
jQuery.getQueryParameters = function(s) {
|
||||
if (typeof s == 'undefined')
|
||||
s = document.location.search;
|
||||
var parts = s.substr(s.indexOf('?') + 1).split('&');
|
||||
var result = {};
|
||||
for (var i = 0; i < parts.length; i++) {
|
||||
var tmp = parts[i].split('=', 2);
|
||||
var key = jQuery.urldecode(tmp[0]);
|
||||
var value = jQuery.urldecode(tmp[1]);
|
||||
if (key in result)
|
||||
result[key].push(value);
|
||||
else
|
||||
result[key] = [value];
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
/**
|
||||
* small function to check if an array contains
|
||||
* a given item.
|
||||
*/
|
||||
jQuery.contains = function(arr, item) {
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
if (arr[i] == item)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* highlight a given string on a jquery object by wrapping it in
|
||||
* span elements with the given class name.
|
||||
*/
|
||||
jQuery.fn.highlightText = function(text, className) {
|
||||
function highlight(node) {
|
||||
if (node.nodeType == 3) {
|
||||
var val = node.nodeValue;
|
||||
var pos = val.toLowerCase().indexOf(text);
|
||||
if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
|
||||
var span = document.createElement("span");
|
||||
span.className = className;
|
||||
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
|
||||
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
|
||||
document.createTextNode(val.substr(pos + text.length)),
|
||||
node.nextSibling));
|
||||
node.nodeValue = val.substr(0, pos);
|
||||
}
|
||||
}
|
||||
else if (!jQuery(node).is("button, select, textarea")) {
|
||||
jQuery.each(node.childNodes, function() {
|
||||
highlight(this);
|
||||
});
|
||||
}
|
||||
}
|
||||
return this.each(function() {
|
||||
highlight(this);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Small JavaScript module for the documentation.
|
||||
*/
|
||||
var Documentation = {
|
||||
|
||||
init : function() {
|
||||
this.fixFirefoxAnchorBug();
|
||||
this.highlightSearchWords();
|
||||
this.initIndexTable();
|
||||
},
|
||||
|
||||
/**
|
||||
* i18n support
|
||||
*/
|
||||
TRANSLATIONS : {},
|
||||
PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; },
|
||||
LOCALE : 'unknown',
|
||||
|
||||
// gettext and ngettext don't access this so that the functions
|
||||
// can safely bound to a different name (_ = Documentation.gettext)
|
||||
gettext : function(string) {
|
||||
var translated = Documentation.TRANSLATIONS[string];
|
||||
if (typeof translated == 'undefined')
|
||||
return string;
|
||||
return (typeof translated == 'string') ? translated : translated[0];
|
||||
},
|
||||
|
||||
ngettext : function(singular, plural, n) {
|
||||
var translated = Documentation.TRANSLATIONS[singular];
|
||||
if (typeof translated == 'undefined')
|
||||
return (n == 1) ? singular : plural;
|
||||
return translated[Documentation.PLURALEXPR(n)];
|
||||
},
|
||||
|
||||
addTranslations : function(catalog) {
|
||||
for (var key in catalog.messages)
|
||||
this.TRANSLATIONS[key] = catalog.messages[key];
|
||||
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
|
||||
this.LOCALE = catalog.locale;
|
||||
},
|
||||
|
||||
/**
|
||||
* add context elements like header anchor links
|
||||
*/
|
||||
addContextElements : function() {
|
||||
$('div[id] > :header:first').each(function() {
|
||||
$('<a class="headerlink">\u00B6</a>').
|
||||
attr('href', '#' + this.id).
|
||||
attr('title', _('Permalink to this headline')).
|
||||
appendTo(this);
|
||||
});
|
||||
$('dt[id]').each(function() {
|
||||
$('<a class="headerlink">\u00B6</a>').
|
||||
attr('href', '#' + this.id).
|
||||
attr('title', _('Permalink to this definition')).
|
||||
appendTo(this);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* workaround a firefox stupidity
|
||||
*/
|
||||
fixFirefoxAnchorBug : function() {
|
||||
if (document.location.hash && $.browser.mozilla)
|
||||
window.setTimeout(function() {
|
||||
document.location.href += '';
|
||||
}, 10);
|
||||
},
|
||||
|
||||
/**
|
||||
* highlight the search words provided in the url in the text
|
||||
*/
|
||||
highlightSearchWords : function() {
|
||||
var params = $.getQueryParameters();
|
||||
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
|
||||
if (terms.length) {
|
||||
var body = $('div.body');
|
||||
window.setTimeout(function() {
|
||||
$.each(terms, function() {
|
||||
body.highlightText(this.toLowerCase(), 'highlighted');
|
||||
});
|
||||
}, 10);
|
||||
$('<li class="highlight-link"><a href="javascript:Documentation.' +
|
||||
'hideSearchWords()">' + _('Hide Search Matches') + '</a></li>')
|
||||
.appendTo($('.sidebar .this-page-menu'));
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* init the domain index toggle buttons
|
||||
*/
|
||||
initIndexTable : function() {
|
||||
var togglers = $('img.toggler').click(function() {
|
||||
var src = $(this).attr('src');
|
||||
var idnum = $(this).attr('id').substr(7);
|
||||
$('tr.cg-' + idnum).toggle();
|
||||
if (src.substr(-9) == 'minus.png')
|
||||
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
|
||||
else
|
||||
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
|
||||
}).css('display', '');
|
||||
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
|
||||
togglers.click();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* helper function to hide the search marks again
|
||||
*/
|
||||
hideSearchWords : function() {
|
||||
$('.sidebar .this-page-menu li.highlight-link').fadeOut(300);
|
||||
$('span.highlighted').removeClass('highlighted');
|
||||
},
|
||||
|
||||
/**
|
||||
* make the url absolute
|
||||
*/
|
||||
makeURL : function(relativeURL) {
|
||||
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
|
||||
},
|
||||
|
||||
/**
|
||||
* get the current relative url
|
||||
*/
|
||||
getCurrentURL : function() {
|
||||
var path = document.location.pathname;
|
||||
var parts = path.split(/\//);
|
||||
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
|
||||
if (this == '..')
|
||||
parts.pop();
|
||||
});
|
||||
var url = parts.join('/');
|
||||
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
|
||||
}
|
||||
};
|
||||
|
||||
// quick alias for translations
|
||||
_ = Documentation.gettext;
|
||||
|
||||
$(document).ready(function() {
|
||||
Documentation.init();
|
||||
});
|
||||
BIN
docs/_static/documentation.png
vendored
|
Before Width: | Height: | Size: 412 B |
BIN
docs/_static/down-pressed.png
vendored
|
Before Width: | Height: | Size: 368 B |
BIN
docs/_static/down.png
vendored
|
Before Width: | Height: | Size: 363 B |
BIN
docs/_static/file.png
vendored
|
Before Width: | Height: | Size: 392 B |
BIN
docs/_static/header_sm_mid.png
vendored
|
Before Width: | Height: | Size: 159 B |
154
docs/_static/jquery.js
vendored
|
|
@ -1,154 +0,0 @@
|
|||
/*!
|
||||
* jQuery JavaScript Library v1.4.2
|
||||
* http://jquery.com/
|
||||
*
|
||||
* Copyright 2010, John Resig
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* Includes Sizzle.js
|
||||
* http://sizzlejs.com/
|
||||
* Copyright 2010, The Dojo Foundation
|
||||
* Released under the MIT, BSD, and GPL Licenses.
|
||||
*
|
||||
* Date: Sat Feb 13 22:33:48 2010 -0500
|
||||
*/
|
||||
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
|
||||
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
|
||||
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
|
||||
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
|
||||
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
|
||||
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
|
||||
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
|
||||
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
|
||||
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
|
||||
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
|
||||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
|
||||
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
|
||||
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
|
||||
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
|
||||
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
|
||||
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
|
||||
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
|
||||
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
|
||||
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
|
||||
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
|
||||
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
|
||||
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
|
||||
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
|
||||
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
|
||||
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
|
||||
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
|
||||
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
|
||||
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
|
||||
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
|
||||
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
|
||||
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
|
||||
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
|
||||
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
|
||||
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
|
||||
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
|
||||
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
|
||||
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
|
||||
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
|
||||
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
|
||||
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
|
||||
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
|
||||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
|
||||
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
|
||||
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
|
||||
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
|
||||
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
|
||||
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
|
||||
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
|
||||
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
|
||||
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
|
||||
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
|
||||
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
|
||||
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
|
||||
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
|
||||
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
|
||||
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
|
||||
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
|
||||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
|
||||
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
|
||||
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
|
||||
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
|
||||
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
|
||||
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
|
||||
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
|
||||
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
|
||||
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
|
||||
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
|
||||
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
|
||||
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
|
||||
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
|
||||
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
|
||||
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
|
||||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
|
||||
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
|
||||
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
|
||||
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
|
||||
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
|
||||
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
|
||||
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
|
||||
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
|
||||
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
|
||||
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
|
||||
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
|
||||
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
|
||||
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
|
||||
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
|
||||
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
|
||||
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
|
||||
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
|
||||
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
|
||||
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
|
||||
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
|
||||
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
|
||||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
|
||||
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
|
||||
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
|
||||
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
|
||||
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
|
||||
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
|
||||
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
|
||||
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
|
||||
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
|
||||
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
|
||||
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
|
||||
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
|
||||
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
|
||||
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
|
||||
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
|
||||
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
|
||||
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
|
||||
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
|
||||
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
|
||||
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
|
||||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
|
||||
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
|
||||
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
|
||||
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
|
||||
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
|
||||
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
|
||||
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
|
||||
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
|
||||
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
|
||||
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
|
||||
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
|
||||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
|
||||
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
|
||||
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
|
||||
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
|
||||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
|
||||
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
|
||||
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
|
||||
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
|
||||
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
|
||||
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
|
||||
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
|
||||
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
|
||||
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
|
||||
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
|
||||
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
|
||||
BIN
docs/_static/minus.png
vendored
|
Before Width: | Height: | Size: 199 B |
BIN
docs/_static/plus.png
vendored
|
Before Width: | Height: | Size: 199 B |
62
docs/_static/pygments.css
vendored
|
|
@ -1,62 +0,0 @@
|
|||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight { background: #eeffcc; }
|
||||
.highlight .c { color: #408090; font-style: italic } /* Comment */
|
||||
.highlight .err { border: 1px solid #FF0000 } /* Error */
|
||||
.highlight .k { color: #007020; font-weight: bold } /* Keyword */
|
||||
.highlight .o { color: #666666 } /* Operator */
|
||||
.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #007020 } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
|
||||
.highlight .gd { color: #A00000 } /* Generic.Deleted */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #FF0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #00A000 } /* Generic.Inserted */
|
||||
.highlight .go { color: #303030 } /* Generic.Output */
|
||||
.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #0040D0 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #007020 } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #902000 } /* Keyword.Type */
|
||||
.highlight .m { color: #208050 } /* Literal.Number */
|
||||
.highlight .s { color: #4070a0 } /* Literal.String */
|
||||
.highlight .na { color: #4070a0 } /* Name.Attribute */
|
||||
.highlight .nb { color: #007020 } /* Name.Builtin */
|
||||
.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
|
||||
.highlight .no { color: #60add5 } /* Name.Constant */
|
||||
.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
|
||||
.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
|
||||
.highlight .ne { color: #007020 } /* Name.Exception */
|
||||
.highlight .nf { color: #06287e } /* Name.Function */
|
||||
.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
|
||||
.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
|
||||
.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #bb60d5 } /* Name.Variable */
|
||||
.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.highlight .mf { color: #208050 } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #208050 } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #208050 } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #208050 } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #4070a0 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
|
||||
.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #c65d09 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #235388 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #517918 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
|
||||
BIN
docs/_static/scrn1.png
vendored
|
Before Width: | Height: | Size: 106 KiB |
BIN
docs/_static/scrn2.png
vendored
|
Before Width: | Height: | Size: 118 KiB |
BIN
docs/_static/searchfield_leftcap.png
vendored
|
Before Width: | Height: | Size: 855 B |
BIN
docs/_static/searchfield_repeat.png
vendored
|
Before Width: | Height: | Size: 158 B |
BIN
docs/_static/searchfield_rightcap.png
vendored
|
Before Width: | Height: | Size: 530 B |
518
docs/_static/searchtools.js
vendored
|
|
@ -1,518 +0,0 @@
|
|||
/*
|
||||
* searchtools.js
|
||||
* ~~~~~~~~~~~~~~
|
||||
*
|
||||
* Sphinx JavaScript utilties for the full-text search.
|
||||
*
|
||||
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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 occurance, the
|
||||
* latter for highlighting it.
|
||||
*/
|
||||
|
||||
jQuery.makeSearchSummary = function(text, keywords, hlwords) {
|
||||
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 = $('<div class="context"></div>').text(excerpt);
|
||||
$.each(hlwords, function() {
|
||||
rv = rv.highlightText(this, 'highlighted');
|
||||
});
|
||||
return rv;
|
||||
}
|
||||
|
||||
/**
|
||||
* Porter Stemmer
|
||||
*/
|
||||
var PorterStemmer = function() {
|
||||
|
||||
var step2list = {
|
||||
ational: 'ate',
|
||||
tional: 'tion',
|
||||
enci: 'ence',
|
||||
anci: 'ance',
|
||||
izer: 'ize',
|
||||
bli: 'ble',
|
||||
alli: 'al',
|
||||
entli: 'ent',
|
||||
eli: 'e',
|
||||
ousli: 'ous',
|
||||
ization: 'ize',
|
||||
ation: 'ate',
|
||||
ator: 'ate',
|
||||
alism: 'al',
|
||||
iveness: 'ive',
|
||||
fulness: 'ful',
|
||||
ousness: 'ous',
|
||||
aliti: 'al',
|
||||
iviti: 'ive',
|
||||
biliti: 'ble',
|
||||
logi: 'log'
|
||||
};
|
||||
|
||||
var step3list = {
|
||||
icate: 'ic',
|
||||
ative: '',
|
||||
alize: 'al',
|
||||
iciti: 'ic',
|
||||
ical: 'ic',
|
||||
ful: '',
|
||||
ness: ''
|
||||
};
|
||||
|
||||
var c = "[^aeiou]"; // consonant
|
||||
var v = "[aeiouy]"; // vowel
|
||||
var C = c + "[^aeiouy]*"; // consonant sequence
|
||||
var V = v + "[aeiou]*"; // vowel sequence
|
||||
|
||||
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
|
||||
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
|
||||
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
|
||||
var s_v = "^(" + C + ")?" + v; // vowel in stem
|
||||
|
||||
this.stemWord = function (w) {
|
||||
var stem;
|
||||
var suffix;
|
||||
var firstch;
|
||||
var origword = w;
|
||||
|
||||
if (w.length < 3)
|
||||
return w;
|
||||
|
||||
var re;
|
||||
var re2;
|
||||
var re3;
|
||||
var re4;
|
||||
|
||||
firstch = w.substr(0,1);
|
||||
if (firstch == "y")
|
||||
w = firstch.toUpperCase() + w.substr(1);
|
||||
|
||||
// Step 1a
|
||||
re = /^(.+?)(ss|i)es$/;
|
||||
re2 = /^(.+?)([^s])s$/;
|
||||
|
||||
if (re.test(w))
|
||||
w = w.replace(re,"$1$2");
|
||||
else if (re2.test(w))
|
||||
w = w.replace(re2,"$1$2");
|
||||
|
||||
// Step 1b
|
||||
re = /^(.+?)eed$/;
|
||||
re2 = /^(.+?)(ed|ing)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
re = new RegExp(mgr0);
|
||||
if (re.test(fp[1])) {
|
||||
re = /.$/;
|
||||
w = w.replace(re,"");
|
||||
}
|
||||
}
|
||||
else if (re2.test(w)) {
|
||||
var fp = re2.exec(w);
|
||||
stem = fp[1];
|
||||
re2 = new RegExp(s_v);
|
||||
if (re2.test(stem)) {
|
||||
w = stem;
|
||||
re2 = /(at|bl|iz)$/;
|
||||
re3 = new RegExp("([^aeiouylsz])\\1$");
|
||||
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
||||
if (re2.test(w))
|
||||
w = w + "e";
|
||||
else if (re3.test(w)) {
|
||||
re = /.$/;
|
||||
w = w.replace(re,"");
|
||||
}
|
||||
else if (re4.test(w))
|
||||
w = w + "e";
|
||||
}
|
||||
}
|
||||
|
||||
// Step 1c
|
||||
re = /^(.+?)y$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
re = new RegExp(s_v);
|
||||
if (re.test(stem))
|
||||
w = stem + "i";
|
||||
}
|
||||
|
||||
// Step 2
|
||||
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
suffix = fp[2];
|
||||
re = new RegExp(mgr0);
|
||||
if (re.test(stem))
|
||||
w = stem + step2list[suffix];
|
||||
}
|
||||
|
||||
// Step 3
|
||||
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
suffix = fp[2];
|
||||
re = new RegExp(mgr0);
|
||||
if (re.test(stem))
|
||||
w = stem + step3list[suffix];
|
||||
}
|
||||
|
||||
// Step 4
|
||||
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
|
||||
re2 = /^(.+?)(s|t)(ion)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
re = new RegExp(mgr1);
|
||||
if (re.test(stem))
|
||||
w = stem;
|
||||
}
|
||||
else if (re2.test(w)) {
|
||||
var fp = re2.exec(w);
|
||||
stem = fp[1] + fp[2];
|
||||
re2 = new RegExp(mgr1);
|
||||
if (re2.test(stem))
|
||||
w = stem;
|
||||
}
|
||||
|
||||
// Step 5
|
||||
re = /^(.+?)e$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
re = new RegExp(mgr1);
|
||||
re2 = new RegExp(meq1);
|
||||
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
||||
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
|
||||
w = stem;
|
||||
}
|
||||
re = /ll$/;
|
||||
re2 = new RegExp(mgr1);
|
||||
if (re.test(w) && re2.test(w)) {
|
||||
re = /.$/;
|
||||
w = w.replace(re,"");
|
||||
}
|
||||
|
||||
// and turn initial Y back to y
|
||||
if (firstch == "y")
|
||||
w = firstch.toLowerCase() + w.substr(1);
|
||||
return w;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Search Module
|
||||
*/
|
||||
var Search = {
|
||||
|
||||
_index : null,
|
||||
_queued_query : null,
|
||||
_pulse_status : -1,
|
||||
|
||||
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, success: null,
|
||||
dataType: "script", cache: true});
|
||||
},
|
||||
|
||||
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() {
|
||||
Search._pulse_status = (Search._pulse_status + 1) % 4;
|
||||
var dotString = '';
|
||||
for (var 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
|
||||
*/
|
||||
performSearch : function(query) {
|
||||
// create the required interface elements
|
||||
this.out = $('#search-results');
|
||||
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
|
||||
this.dots = $('<span></span>').appendTo(this.title);
|
||||
this.status = $('<p style="display: none"></p>').appendTo(this.out);
|
||||
this.output = $('<ul class="search"/>').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);
|
||||
},
|
||||
|
||||
query : function(query) {
|
||||
var stopwords = ['and', 'then', 'into', 'it', 'as', 'are', 'in',
|
||||
'if', 'for', 'no', 'there', 'their', 'was', 'is',
|
||||
'be', 'to', 'that', 'but', 'they', 'not', 'such',
|
||||
'with', 'by', 'a', 'on', 'these', 'of', 'will',
|
||||
'this', 'near', 'the', 'or', 'at'];
|
||||
|
||||
// stem the searchterms and add them to the correct list
|
||||
var stemmer = new PorterStemmer();
|
||||
var searchterms = [];
|
||||
var excluded = [];
|
||||
var hlterms = [];
|
||||
var tmp = query.split(/\s+/);
|
||||
var object = (tmp.length == 1) ? tmp[0].toLowerCase() : null;
|
||||
for (var i = 0; i < tmp.length; i++) {
|
||||
if ($u.indexOf(stopwords, tmp[i]) != -1 || tmp[i].match(/^\d+$/) ||
|
||||
tmp[i] == "") {
|
||||
// skip this "word"
|
||||
continue;
|
||||
}
|
||||
// stem the word
|
||||
var word = stemmer.stemWord(tmp[i]).toLowerCase();
|
||||
// select the correct list
|
||||
if (word[0] == '-') {
|
||||
var toAppend = excluded;
|
||||
word = word.substr(1);
|
||||
}
|
||||
else {
|
||||
var toAppend = searchterms;
|
||||
hlterms.push(tmp[i].toLowerCase());
|
||||
}
|
||||
// only add if not already in the list
|
||||
if (!$.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 filenames = this._index.filenames;
|
||||
var titles = this._index.titles;
|
||||
var terms = this._index.terms;
|
||||
var objects = this._index.objects;
|
||||
var objtypes = this._index.objtypes;
|
||||
var objnames = this._index.objnames;
|
||||
var fileMap = {};
|
||||
var files = null;
|
||||
// different result priorities
|
||||
var importantResults = [];
|
||||
var objectResults = [];
|
||||
var regularResults = [];
|
||||
var unimportantResults = [];
|
||||
$('#search-progress').empty();
|
||||
|
||||
// lookup as object
|
||||
if (object != null) {
|
||||
for (var prefix in objects) {
|
||||
for (var name in objects[prefix]) {
|
||||
var fullname = (prefix ? prefix + '.' : '') + name;
|
||||
if (fullname.toLowerCase().indexOf(object) > -1) {
|
||||
match = objects[prefix][name];
|
||||
descr = objnames[match[1]] + _(', in ') + titles[match[0]];
|
||||
// XXX the generated anchors are not generally correct
|
||||
// XXX there may be custom prefixes
|
||||
result = [filenames[match[0]], fullname, '#'+fullname, descr];
|
||||
switch (match[2]) {
|
||||
case 1: objectResults.push(result); break;
|
||||
case 0: importantResults.push(result); break;
|
||||
case 2: unimportantResults.push(result); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// sort results descending
|
||||
objectResults.sort(function(a, b) {
|
||||
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
|
||||
});
|
||||
|
||||
importantResults.sort(function(a, b) {
|
||||
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
|
||||
});
|
||||
|
||||
unimportantResults.sort(function(a, b) {
|
||||
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
|
||||
});
|
||||
|
||||
|
||||
// perform the search on the required terms
|
||||
for (var i = 0; i < searchterms.length; i++) {
|
||||
var word = searchterms[i];
|
||||
// no match but word was a required one
|
||||
if ((files = terms[word]) == null)
|
||||
break;
|
||||
if (files.length == undefined) {
|
||||
files = [files];
|
||||
}
|
||||
// create the mapping
|
||||
for (var j = 0; j < files.length; j++) {
|
||||
var 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 (var 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 (var i = 0; i < excluded.length; i++) {
|
||||
if (terms[excluded[i]] == file ||
|
||||
$.contains(terms[excluded[i]] || [], file)) {
|
||||
valid = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// if we have still a valid result we can add it
|
||||
// to the result list
|
||||
if (valid)
|
||||
regularResults.push([filenames[file], titles[file], '', null]);
|
||||
}
|
||||
|
||||
// delete unused variables in order to not waste
|
||||
// memory until list is retrieved completely
|
||||
delete filenames, titles, terms;
|
||||
|
||||
// now sort the regular results descending by title
|
||||
regularResults.sort(function(a, b) {
|
||||
var left = a[1].toLowerCase();
|
||||
var right = b[1].toLowerCase();
|
||||
return (left > right) ? -1 : ((left < right) ? 1 : 0);
|
||||
});
|
||||
|
||||
// combine all results
|
||||
var results = unimportantResults.concat(regularResults)
|
||||
.concat(objectResults).concat(importantResults);
|
||||
|
||||
// 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 = $('<li style="display:none"></li>');
|
||||
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($('<a/>').attr('href',
|
||||
DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
|
||||
highlightstring + item[2]).html(item[1]));
|
||||
} else {
|
||||
// normal html builders
|
||||
listItem.append($('<a/>').attr('href',
|
||||
item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
|
||||
highlightstring + item[2]).html(item[1]));
|
||||
}
|
||||
if (item[3]) {
|
||||
listItem.append($('<span> (' + item[3] + ')</span>'));
|
||||
Search.output.append(listItem);
|
||||
listItem.slideDown(5, function() {
|
||||
displayNextItem();
|
||||
});
|
||||
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
|
||||
$.get(DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' +
|
||||
item[0] + '.txt', function(data) {
|
||||
if (data != '') {
|
||||
listItem.append($.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();
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
Search.init();
|
||||
});
|
||||
148
docs/_static/sidebar.js
vendored
|
|
@ -1,148 +0,0 @@
|
|||
/*
|
||||
* sidebar.js
|
||||
* ~~~~~~~~~~
|
||||
*
|
||||
* This script makes the Sphinx sidebar collapsible.
|
||||
*
|
||||
* .sphinxsidebar contains .sphinxsidebarwrapper. This script adds
|
||||
* in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton
|
||||
* used to collapse and expand the sidebar.
|
||||
*
|
||||
* When the sidebar is collapsed the .sphinxsidebarwrapper is hidden
|
||||
* and the width of the sidebar and the margin-left of the document
|
||||
* are decreased. When the sidebar is expanded the opposite happens.
|
||||
* This script saves a per-browser/per-session cookie used to
|
||||
* remember the position of the sidebar among the pages.
|
||||
* Once the browser is closed the cookie is deleted and the position
|
||||
* reset to the default (expanded).
|
||||
*
|
||||
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
$(function() {
|
||||
// global elements used by the functions.
|
||||
// the 'sidebarbutton' element is defined as global after its
|
||||
// creation, in the add_sidebar_button function
|
||||
var bodywrapper = $('.bodywrapper');
|
||||
var sidebar = $('.sphinxsidebar');
|
||||
var sidebarwrapper = $('.sphinxsidebarwrapper');
|
||||
|
||||
// original margin-left of the bodywrapper and width of the sidebar
|
||||
// with the sidebar expanded
|
||||
var bw_margin_expanded = bodywrapper.css('margin-left');
|
||||
var ssb_width_expanded = sidebar.width();
|
||||
|
||||
// margin-left of the bodywrapper and width of the sidebar
|
||||
// with the sidebar collapsed
|
||||
var bw_margin_collapsed = '.8em';
|
||||
var ssb_width_collapsed = '.8em';
|
||||
|
||||
// colors used by the current theme
|
||||
var dark_color = $('.related').css('background-color');
|
||||
var light_color = $('.document').css('background-color');
|
||||
|
||||
function sidebar_is_collapsed() {
|
||||
return sidebarwrapper.is(':not(:visible)');
|
||||
}
|
||||
|
||||
function toggle_sidebar() {
|
||||
if (sidebar_is_collapsed())
|
||||
expand_sidebar();
|
||||
else
|
||||
collapse_sidebar();
|
||||
}
|
||||
|
||||
function collapse_sidebar() {
|
||||
sidebarwrapper.hide();
|
||||
sidebar.css('width', ssb_width_collapsed);
|
||||
bodywrapper.css('margin-left', bw_margin_collapsed);
|
||||
sidebarbutton.css({
|
||||
'margin-left': '0',
|
||||
'height': bodywrapper.height()
|
||||
});
|
||||
sidebarbutton.find('span').text('»');
|
||||
sidebarbutton.attr('title', _('Expand sidebar'));
|
||||
document.cookie = 'sidebar=collapsed';
|
||||
}
|
||||
|
||||
function expand_sidebar() {
|
||||
bodywrapper.css('margin-left', bw_margin_expanded);
|
||||
sidebar.css('width', ssb_width_expanded);
|
||||
sidebarwrapper.show();
|
||||
sidebarbutton.css({
|
||||
'margin-left': ssb_width_expanded-12,
|
||||
'height': bodywrapper.height()
|
||||
});
|
||||
sidebarbutton.find('span').text('«');
|
||||
sidebarbutton.attr('title', _('Collapse sidebar'));
|
||||
document.cookie = 'sidebar=expanded';
|
||||
}
|
||||
|
||||
function add_sidebar_button() {
|
||||
sidebarwrapper.css({
|
||||
'float': 'left',
|
||||
'margin-right': '0',
|
||||
'width': ssb_width_expanded - 28
|
||||
});
|
||||
// create the button
|
||||
sidebar.append(
|
||||
'<div id="sidebarbutton"><span>«</span></div>'
|
||||
);
|
||||
var sidebarbutton = $('#sidebarbutton');
|
||||
light_color = sidebarbutton.css('background-color');
|
||||
// find the height of the viewport to center the '<<' in the page
|
||||
var viewport_height;
|
||||
if (window.innerHeight)
|
||||
viewport_height = window.innerHeight;
|
||||
else
|
||||
viewport_height = $(window).height();
|
||||
sidebarbutton.find('span').css({
|
||||
'display': 'block',
|
||||
'margin-top': (viewport_height - sidebar.position().top - 20) / 2
|
||||
});
|
||||
|
||||
sidebarbutton.click(toggle_sidebar);
|
||||
sidebarbutton.attr('title', _('Collapse sidebar'));
|
||||
sidebarbutton.css({
|
||||
'color': '#FFFFFF',
|
||||
'border-left': '1px solid ' + dark_color,
|
||||
'font-size': '1.2em',
|
||||
'cursor': 'pointer',
|
||||
'height': bodywrapper.height(),
|
||||
'padding-top': '1px',
|
||||
'margin-left': ssb_width_expanded - 12
|
||||
});
|
||||
|
||||
sidebarbutton.hover(
|
||||
function () {
|
||||
$(this).css('background-color', dark_color);
|
||||
},
|
||||
function () {
|
||||
$(this).css('background-color', light_color);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function set_position_from_cookie() {
|
||||
if (!document.cookie)
|
||||
return;
|
||||
var items = document.cookie.split(';');
|
||||
for(var k=0; k<items.length; k++) {
|
||||
var key_val = items[k].split('=');
|
||||
var key = key_val[0];
|
||||
if (key == 'sidebar') {
|
||||
var value = key_val[1];
|
||||
if ((value == 'collapsed') && (!sidebar_is_collapsed()))
|
||||
collapse_sidebar();
|
||||
else if ((value == 'expanded') && (sidebar_is_collapsed()))
|
||||
expand_sidebar();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
add_sidebar_button();
|
||||
var sidebarbutton = $('#sidebarbutton');
|
||||
set_position_from_cookie();
|
||||
});
|
||||
BIN
docs/_static/title_background.png
vendored
|
Before Width: | Height: | Size: 132 B |
20
docs/_static/toc.js
vendored
|
|
@ -1,20 +0,0 @@
|
|||
var TOC = {
|
||||
load: function () {
|
||||
$('#toc_button').click(TOC.toggle);
|
||||
},
|
||||
|
||||
toggle: function () {
|
||||
if ($('#sphinxsidebar').toggle().is(':hidden')) {
|
||||
$('div.document').css('left', "0px");
|
||||
$('toc_button').removeClass("open");
|
||||
} else {
|
||||
$('div.document').css('left', "230px");
|
||||
$('#toc_button').addClass("open");
|
||||
}
|
||||
return $('#sphinxsidebar');
|
||||
}
|
||||
};
|
||||
|
||||
$(document).ready(function () {
|
||||
TOC.load();
|
||||
});
|
||||
BIN
docs/_static/triangle_closed.png
vendored
|
Before Width: | Height: | Size: 181 B |
BIN
docs/_static/triangle_left.png
vendored
|
Before Width: | Height: | Size: 195 B |
BIN
docs/_static/triangle_open.png
vendored
|
Before Width: | Height: | Size: 191 B |
16
docs/_static/underscore.js
vendored
|
|
@ -1,16 +0,0 @@
|
|||
(function(){var j=this,n=j._,i=function(a){this._wrapped=a},m=typeof StopIteration!=="undefined"?StopIteration:"__break__",b=j._=function(a){return new i(a)};if(typeof exports!=="undefined")exports._=b;var k=Array.prototype.slice,o=Array.prototype.unshift,p=Object.prototype.toString,q=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;b.VERSION="0.5.5";b.each=function(a,c,d){try{if(a.forEach)a.forEach(c,d);else if(b.isArray(a)||b.isArguments(a))for(var e=0,f=a.length;e<f;e++)c.call(d,
|
||||
a[e],e,a);else{var g=b.keys(a);f=g.length;for(e=0;e<f;e++)c.call(d,a[g[e]],g[e],a)}}catch(h){if(h!=m)throw h;}return a};b.map=function(a,c,d){if(a&&b.isFunction(a.map))return a.map(c,d);var e=[];b.each(a,function(f,g,h){e.push(c.call(d,f,g,h))});return e};b.reduce=function(a,c,d,e){if(a&&b.isFunction(a.reduce))return a.reduce(b.bind(d,e),c);b.each(a,function(f,g,h){c=d.call(e,c,f,g,h)});return c};b.reduceRight=function(a,c,d,e){if(a&&b.isFunction(a.reduceRight))return a.reduceRight(b.bind(d,e),c);
|
||||
var f=b.clone(b.toArray(a)).reverse();b.each(f,function(g,h){c=d.call(e,c,g,h,a)});return c};b.detect=function(a,c,d){var e;b.each(a,function(f,g,h){if(c.call(d,f,g,h)){e=f;b.breakLoop()}});return e};b.select=function(a,c,d){if(a&&b.isFunction(a.filter))return a.filter(c,d);var e=[];b.each(a,function(f,g,h){c.call(d,f,g,h)&&e.push(f)});return e};b.reject=function(a,c,d){var e=[];b.each(a,function(f,g,h){!c.call(d,f,g,h)&&e.push(f)});return e};b.all=function(a,c,d){c=c||b.identity;if(a&&b.isFunction(a.every))return a.every(c,
|
||||
d);var e=true;b.each(a,function(f,g,h){(e=e&&c.call(d,f,g,h))||b.breakLoop()});return e};b.any=function(a,c,d){c=c||b.identity;if(a&&b.isFunction(a.some))return a.some(c,d);var e=false;b.each(a,function(f,g,h){if(e=c.call(d,f,g,h))b.breakLoop()});return e};b.include=function(a,c){if(b.isArray(a))return b.indexOf(a,c)!=-1;var d=false;b.each(a,function(e){if(d=e===c)b.breakLoop()});return d};b.invoke=function(a,c){var d=b.rest(arguments,2);return b.map(a,function(e){return(c?e[c]:e).apply(e,d)})};b.pluck=
|
||||
function(a,c){return b.map(a,function(d){return d[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);var e={computed:-Infinity};b.each(a,function(f,g,h){g=c?c.call(d,f,g,h):f;g>=e.computed&&(e={value:f,computed:g})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);var e={computed:Infinity};b.each(a,function(f,g,h){g=c?c.call(d,f,g,h):f;g<e.computed&&(e={value:f,computed:g})});return e.value};b.sortBy=function(a,c,d){return b.pluck(b.map(a,
|
||||
function(e,f,g){return{value:e,criteria:c.call(d,e,f,g)}}).sort(function(e,f){e=e.criteria;f=f.criteria;return e<f?-1:e>f?1:0}),"value")};b.sortedIndex=function(a,c,d){d=d||b.identity;for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?(e=g+1):(f=g)}return e};b.toArray=function(a){if(!a)return[];if(a.toArray)return a.toArray();if(b.isArray(a))return a;if(b.isArguments(a))return k.call(a);return b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=function(a,c,d){return c&&!d?k.call(a,
|
||||
0,c):a[0]};b.rest=function(a,c,d){return k.call(a,b.isUndefined(c)||d?1:c)};b.last=function(a){return a[a.length-1]};b.compact=function(a){return b.select(a,function(c){return!!c})};b.flatten=function(a){return b.reduce(a,[],function(c,d){if(b.isArray(d))return c.concat(b.flatten(d));c.push(d);return c})};b.without=function(a){var c=b.rest(arguments);return b.select(a,function(d){return!b.include(c,d)})};b.uniq=function(a,c){return b.reduce(a,[],function(d,e,f){if(0==f||(c===true?b.last(d)!=e:!b.include(d,
|
||||
e)))d.push(e);return d})};b.intersect=function(a){var c=b.rest(arguments);return b.select(b.uniq(a),function(d){return b.all(c,function(e){return b.indexOf(e,d)>=0})})};b.zip=function(){for(var a=b.toArray(arguments),c=b.max(b.pluck(a,"length")),d=new Array(c),e=0;e<c;e++)d[e]=b.pluck(a,String(e));return d};b.indexOf=function(a,c){if(a.indexOf)return a.indexOf(c);for(var d=0,e=a.length;d<e;d++)if(a[d]===c)return d;return-1};b.lastIndexOf=function(a,c){if(a.lastIndexOf)return a.lastIndexOf(c);for(var d=
|
||||
a.length;d--;)if(a[d]===c)return d;return-1};b.range=function(a,c,d){var e=b.toArray(arguments),f=e.length<=1;a=f?0:e[0];c=f?e[0]:e[1];d=e[2]||1;e=Math.ceil((c-a)/d);if(e<=0)return[];e=new Array(e);f=a;for(var g=0;1;f+=d){if((d>0?f-c:c-f)>=0)return e;e[g++]=f}};b.bind=function(a,c){var d=b.rest(arguments,2);return function(){return a.apply(c||j,d.concat(b.toArray(arguments)))}};b.bindAll=function(a){var c=b.rest(arguments);if(c.length==0)c=b.functions(a);b.each(c,function(d){a[d]=b.bind(a[d],a)});
|
||||
return a};b.delay=function(a,c){var d=b.rest(arguments,2);return setTimeout(function(){return a.apply(a,d)},c)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(b.rest(arguments)))};b.wrap=function(a,c){return function(){var d=[a].concat(b.toArray(arguments));return c.apply(c,d)}};b.compose=function(){var a=b.toArray(arguments);return function(){for(var c=b.toArray(arguments),d=a.length-1;d>=0;d--)c=[a[d].apply(this,c)];return c[0]}};b.keys=function(a){if(b.isArray(a))return b.range(0,a.length);
|
||||
var c=[];for(var d in a)q.call(a,d)&&c.push(d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=function(a){return b.select(b.keys(a),function(c){return b.isFunction(a[c])}).sort()};b.extend=function(a,c){for(var d in c)a[d]=c[d];return a};b.clone=function(a){if(b.isArray(a))return a.slice(0);return b.extend({},a)};b.tap=function(a,c){c(a);return a};b.isEqual=function(a,c){if(a===c)return true;var d=typeof a;if(d!=typeof c)return false;if(a==c)return true;if(!a&&c||a&&!c)return false;
|
||||
if(a.isEqual)return a.isEqual(c);if(b.isDate(a)&&b.isDate(c))return a.getTime()===c.getTime();if(b.isNaN(a)&&b.isNaN(c))return true;if(b.isRegExp(a)&&b.isRegExp(c))return a.source===c.source&&a.global===c.global&&a.ignoreCase===c.ignoreCase&&a.multiline===c.multiline;if(d!=="object")return false;if(a.length&&a.length!==c.length)return false;d=b.keys(a);var e=b.keys(c);if(d.length!=e.length)return false;for(var f in a)if(!b.isEqual(a[f],c[f]))return false;return true};b.isEmpty=function(a){return b.keys(a).length==
|
||||
0};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=function(a){return!!(a&&a.concat&&a.unshift)};b.isArguments=function(a){return a&&b.isNumber(a.length)&&!b.isArray(a)&&!r.call(a,"length")};b.isFunction=function(a){return!!(a&&a.constructor&&a.call&&a.apply)};b.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)};b.isNumber=function(a){return p.call(a)==="[object Number]"};b.isDate=function(a){return!!(a&&a.getTimezoneOffset&&a.setUTCFullYear)};b.isRegExp=function(a){return!!(a&&
|
||||
a.test&&a.exec&&(a.ignoreCase||a.ignoreCase===false))};b.isNaN=function(a){return b.isNumber(a)&&isNaN(a)};b.isNull=function(a){return a===null};b.isUndefined=function(a){return typeof a=="undefined"};b.noConflict=function(){j._=n;return this};b.identity=function(a){return a};b.breakLoop=function(){throw m;};var s=0;b.uniqueId=function(a){var c=s++;return a?a+c:c};b.template=function(a,c){a=new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+a.replace(/[\r\t\n]/g,
|
||||
" ").replace(/'(?=[^%]*%>)/g,"\t").split("'").join("\\'").split("\t").join("'").replace(/<%=(.+?)%>/g,"',$1,'").split("<%").join("');").split("%>").join("p.push('")+"');}return p.join('');");return c?a(c):a};b.forEach=b.each;b.foldl=b.inject=b.reduce;b.foldr=b.reduceRight;b.filter=b.select;b.every=b.all;b.some=b.any;b.head=b.first;b.tail=b.rest;b.methods=b.functions;var l=function(a,c){return c?b(a).chain():a};b.each(b.functions(b),function(a){var c=b[a];i.prototype[a]=function(){var d=b.toArray(arguments);
|
||||
o.call(d,this._wrapped);return l(c.apply(b,d),this._chain)}});b.each(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var c=Array.prototype[a];i.prototype[a]=function(){c.apply(this._wrapped,arguments);return l(this._wrapped,this._chain)}});b.each(["concat","join","slice"],function(a){var c=Array.prototype[a];i.prototype[a]=function(){return l(c.apply(this._wrapped,arguments),this._chain)}});i.prototype.chain=function(){this._chain=true;return this};i.prototype.value=function(){return this._wrapped}})();
|
||||
BIN
docs/_static/up-pressed.png
vendored
|
Before Width: | Height: | Size: 372 B |
BIN
docs/_static/up.png
vendored
|
Before Width: | Height: | Size: 363 B |
808
docs/_static/websupport.js
vendored
|
|
@ -1,808 +0,0 @@
|
|||
/*
|
||||
* websupport.js
|
||||
* ~~~~~~~~~~~~~
|
||||
*
|
||||
* sphinx.websupport utilties for all documentation.
|
||||
*
|
||||
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
(function($) {
|
||||
$.fn.autogrow = function() {
|
||||
return this.each(function() {
|
||||
var textarea = this;
|
||||
|
||||
$.fn.autogrow.resize(textarea);
|
||||
|
||||
$(textarea)
|
||||
.focus(function() {
|
||||
textarea.interval = setInterval(function() {
|
||||
$.fn.autogrow.resize(textarea);
|
||||
}, 500);
|
||||
})
|
||||
.blur(function() {
|
||||
clearInterval(textarea.interval);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
$.fn.autogrow.resize = function(textarea) {
|
||||
var lineHeight = parseInt($(textarea).css('line-height'), 10);
|
||||
var lines = textarea.value.split('\n');
|
||||
var columns = textarea.cols;
|
||||
var lineCount = 0;
|
||||
$.each(lines, function() {
|
||||
lineCount += Math.ceil(this.length / columns) || 1;
|
||||
});
|
||||
var height = lineHeight * (lineCount + 1);
|
||||
$(textarea).css('height', height);
|
||||
};
|
||||
})(jQuery);
|
||||
|
||||
(function($) {
|
||||
var comp, by;
|
||||
|
||||
function init() {
|
||||
initEvents();
|
||||
initComparator();
|
||||
}
|
||||
|
||||
function initEvents() {
|
||||
$('a.comment-close').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
hide($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.vote').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
handleVote($(this));
|
||||
});
|
||||
$('a.reply').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
openReply($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.close-reply').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
closeReply($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.sort-option').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
handleReSort($(this));
|
||||
});
|
||||
$('a.show-proposal').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
showProposal($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.hide-proposal').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
hideProposal($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.show-propose-change').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
showProposeChange($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.hide-propose-change').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
hideProposeChange($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.accept-comment').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
acceptComment($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.delete-comment').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
deleteComment($(this).attr('id').substring(2));
|
||||
});
|
||||
$('a.comment-markup').live("click", function(event) {
|
||||
event.preventDefault();
|
||||
toggleCommentMarkupBox($(this).attr('id').substring(2));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Set comp, which is a comparator function used for sorting and
|
||||
* inserting comments into the list.
|
||||
*/
|
||||
function setComparator() {
|
||||
// If the first three letters are "asc", sort in ascending order
|
||||
// and remove the prefix.
|
||||
if (by.substring(0,3) == 'asc') {
|
||||
var i = by.substring(3);
|
||||
comp = function(a, b) { return a[i] - b[i]; };
|
||||
} else {
|
||||
// Otherwise sort in descending order.
|
||||
comp = function(a, b) { return b[by] - a[by]; };
|
||||
}
|
||||
|
||||
// Reset link styles and format the selected sort option.
|
||||
$('a.sel').attr('href', '#').removeClass('sel');
|
||||
$('a.by' + by).removeAttr('href').addClass('sel');
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a comp function. If the user has preferences stored in
|
||||
* the sortBy cookie, use those, otherwise use the default.
|
||||
*/
|
||||
function initComparator() {
|
||||
by = 'rating'; // Default to sort by rating.
|
||||
// If the sortBy cookie is set, use that instead.
|
||||
if (document.cookie.length > 0) {
|
||||
var start = document.cookie.indexOf('sortBy=');
|
||||
if (start != -1) {
|
||||
start = start + 7;
|
||||
var end = document.cookie.indexOf(";", start);
|
||||
if (end == -1) {
|
||||
end = document.cookie.length;
|
||||
by = unescape(document.cookie.substring(start, end));
|
||||
}
|
||||
}
|
||||
}
|
||||
setComparator();
|
||||
}
|
||||
|
||||
/**
|
||||
* Show a comment div.
|
||||
*/
|
||||
function show(id) {
|
||||
$('#ao' + id).hide();
|
||||
$('#ah' + id).show();
|
||||
var context = $.extend({id: id}, opts);
|
||||
var popup = $(renderTemplate(popupTemplate, context)).hide();
|
||||
popup.find('textarea[name="proposal"]').hide();
|
||||
popup.find('a.by' + by).addClass('sel');
|
||||
var form = popup.find('#cf' + id);
|
||||
form.submit(function(event) {
|
||||
event.preventDefault();
|
||||
addComment(form);
|
||||
});
|
||||
$('#s' + id).after(popup);
|
||||
popup.slideDown('fast', function() {
|
||||
getComments(id);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide a comment div.
|
||||
*/
|
||||
function hide(id) {
|
||||
$('#ah' + id).hide();
|
||||
$('#ao' + id).show();
|
||||
var div = $('#sc' + id);
|
||||
div.slideUp('fast', function() {
|
||||
div.remove();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an ajax request to get comments for a node
|
||||
* and insert the comments into the comments tree.
|
||||
*/
|
||||
function getComments(id) {
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: opts.getCommentsURL,
|
||||
data: {node: id},
|
||||
success: function(data, textStatus, request) {
|
||||
var ul = $('#cl' + id);
|
||||
var speed = 100;
|
||||
$('#cf' + id)
|
||||
.find('textarea[name="proposal"]')
|
||||
.data('source', data.source);
|
||||
|
||||
if (data.comments.length === 0) {
|
||||
ul.html('<li>No comments yet.</li>');
|
||||
ul.data('empty', true);
|
||||
} else {
|
||||
// If there are comments, sort them and put them in the list.
|
||||
var comments = sortComments(data.comments);
|
||||
speed = data.comments.length * 100;
|
||||
appendComments(comments, ul);
|
||||
ul.data('empty', false);
|
||||
}
|
||||
$('#cn' + id).slideUp(speed + 200);
|
||||
ul.slideDown(speed);
|
||||
},
|
||||
error: function(request, textStatus, error) {
|
||||
showError('Oops, there was a problem retrieving the comments.');
|
||||
},
|
||||
dataType: 'json'
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a comment via ajax and insert the comment into the comment tree.
|
||||
*/
|
||||
function addComment(form) {
|
||||
var node_id = form.find('input[name="node"]').val();
|
||||
var parent_id = form.find('input[name="parent"]').val();
|
||||
var text = form.find('textarea[name="comment"]').val();
|
||||
var proposal = form.find('textarea[name="proposal"]').val();
|
||||
|
||||
if (text == '') {
|
||||
showError('Please enter a comment.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Disable the form that is being submitted.
|
||||
form.find('textarea,input').attr('disabled', 'disabled');
|
||||
|
||||
// Send the comment to the server.
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: opts.addCommentURL,
|
||||
dataType: 'json',
|
||||
data: {
|
||||
node: node_id,
|
||||
parent: parent_id,
|
||||
text: text,
|
||||
proposal: proposal
|
||||
},
|
||||
success: function(data, textStatus, error) {
|
||||
// Reset the form.
|
||||
if (node_id) {
|
||||
hideProposeChange(node_id);
|
||||
}
|
||||
form.find('textarea')
|
||||
.val('')
|
||||
.add(form.find('input'))
|
||||
.removeAttr('disabled');
|
||||
var ul = $('#cl' + (node_id || parent_id));
|
||||
if (ul.data('empty')) {
|
||||
$(ul).empty();
|
||||
ul.data('empty', false);
|
||||
}
|
||||
insertComment(data.comment);
|
||||
var ao = $('#ao' + node_id);
|
||||
ao.find('img').attr({'src': opts.commentBrightImage});
|
||||
if (node_id) {
|
||||
// if this was a "root" comment, remove the commenting box
|
||||
// (the user can get it back by reopening the comment popup)
|
||||
$('#ca' + node_id).slideUp();
|
||||
}
|
||||
},
|
||||
error: function(request, textStatus, error) {
|
||||
form.find('textarea,input').removeAttr('disabled');
|
||||
showError('Oops, there was a problem adding the comment.');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively append comments to the main comment list and children
|
||||
* lists, creating the comment tree.
|
||||
*/
|
||||
function appendComments(comments, ul) {
|
||||
$.each(comments, function() {
|
||||
var div = createCommentDiv(this);
|
||||
ul.append($(document.createElement('li')).html(div));
|
||||
appendComments(this.children, div.find('ul.comment-children'));
|
||||
// To avoid stagnating data, don't store the comments children in data.
|
||||
this.children = null;
|
||||
div.data('comment', this);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* After adding a new comment, it must be inserted in the correct
|
||||
* location in the comment tree.
|
||||
*/
|
||||
function insertComment(comment) {
|
||||
var div = createCommentDiv(comment);
|
||||
|
||||
// To avoid stagnating data, don't store the comments children in data.
|
||||
comment.children = null;
|
||||
div.data('comment', comment);
|
||||
|
||||
var ul = $('#cl' + (comment.node || comment.parent));
|
||||
var siblings = getChildren(ul);
|
||||
|
||||
var li = $(document.createElement('li'));
|
||||
li.hide();
|
||||
|
||||
// Determine where in the parents children list to insert this comment.
|
||||
for(i=0; i < siblings.length; i++) {
|
||||
if (comp(comment, siblings[i]) <= 0) {
|
||||
$('#cd' + siblings[i].id)
|
||||
.parent()
|
||||
.before(li.html(div));
|
||||
li.slideDown('fast');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// If we get here, this comment rates lower than all the others,
|
||||
// or it is the only comment in the list.
|
||||
ul.append(li.html(div));
|
||||
li.slideDown('fast');
|
||||
}
|
||||
|
||||
function acceptComment(id) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: opts.acceptCommentURL,
|
||||
data: {id: id},
|
||||
success: function(data, textStatus, request) {
|
||||
$('#cm' + id).fadeOut('fast');
|
||||
$('#cd' + id).removeClass('moderate');
|
||||
},
|
||||
error: function(request, textStatus, error) {
|
||||
showError('Oops, there was a problem accepting the comment.');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function deleteComment(id) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: opts.deleteCommentURL,
|
||||
data: {id: id},
|
||||
success: function(data, textStatus, request) {
|
||||
var div = $('#cd' + id);
|
||||
if (data == 'delete') {
|
||||
// Moderator mode: remove the comment and all children immediately
|
||||
div.slideUp('fast', function() {
|
||||
div.remove();
|
||||
});
|
||||
return;
|
||||
}
|
||||
// User mode: only mark the comment as deleted
|
||||
div
|
||||
.find('span.user-id:first')
|
||||
.text('[deleted]').end()
|
||||
.find('div.comment-text:first')
|
||||
.text('[deleted]').end()
|
||||
.find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id +
|
||||
', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id)
|
||||
.remove();
|
||||
var comment = div.data('comment');
|
||||
comment.username = '[deleted]';
|
||||
comment.text = '[deleted]';
|
||||
div.data('comment', comment);
|
||||
},
|
||||
error: function(request, textStatus, error) {
|
||||
showError('Oops, there was a problem deleting the comment.');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function showProposal(id) {
|
||||
$('#sp' + id).hide();
|
||||
$('#hp' + id).show();
|
||||
$('#pr' + id).slideDown('fast');
|
||||
}
|
||||
|
||||
function hideProposal(id) {
|
||||
$('#hp' + id).hide();
|
||||
$('#sp' + id).show();
|
||||
$('#pr' + id).slideUp('fast');
|
||||
}
|
||||
|
||||
function showProposeChange(id) {
|
||||
$('#pc' + id).hide();
|
||||
$('#hc' + id).show();
|
||||
var textarea = $('#pt' + id);
|
||||
textarea.val(textarea.data('source'));
|
||||
$.fn.autogrow.resize(textarea[0]);
|
||||
textarea.slideDown('fast');
|
||||
}
|
||||
|
||||
function hideProposeChange(id) {
|
||||
$('#hc' + id).hide();
|
||||
$('#pc' + id).show();
|
||||
var textarea = $('#pt' + id);
|
||||
textarea.val('').removeAttr('disabled');
|
||||
textarea.slideUp('fast');
|
||||
}
|
||||
|
||||
function toggleCommentMarkupBox(id) {
|
||||
$('#mb' + id).toggle();
|
||||
}
|
||||
|
||||
/** Handle when the user clicks on a sort by link. */
|
||||
function handleReSort(link) {
|
||||
var classes = link.attr('class').split(/\s+/);
|
||||
for (var i=0; i<classes.length; i++) {
|
||||
if (classes[i] != 'sort-option') {
|
||||
by = classes[i].substring(2);
|
||||
}
|
||||
}
|
||||
setComparator();
|
||||
// Save/update the sortBy cookie.
|
||||
var expiration = new Date();
|
||||
expiration.setDate(expiration.getDate() + 365);
|
||||
document.cookie= 'sortBy=' + escape(by) +
|
||||
';expires=' + expiration.toUTCString();
|
||||
$('ul.comment-ul').each(function(index, ul) {
|
||||
var comments = getChildren($(ul), true);
|
||||
comments = sortComments(comments);
|
||||
appendComments(comments, $(ul).empty());
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to process a vote when a user clicks an arrow.
|
||||
*/
|
||||
function handleVote(link) {
|
||||
if (!opts.voting) {
|
||||
showError("You'll need to login to vote.");
|
||||
return;
|
||||
}
|
||||
|
||||
var id = link.attr('id');
|
||||
if (!id) {
|
||||
// Didn't click on one of the voting arrows.
|
||||
return;
|
||||
}
|
||||
// If it is an unvote, the new vote value is 0,
|
||||
// Otherwise it's 1 for an upvote, or -1 for a downvote.
|
||||
var value = 0;
|
||||
if (id.charAt(1) != 'u') {
|
||||
value = id.charAt(0) == 'u' ? 1 : -1;
|
||||
}
|
||||
// The data to be sent to the server.
|
||||
var d = {
|
||||
comment_id: id.substring(2),
|
||||
value: value
|
||||
};
|
||||
|
||||
// Swap the vote and unvote links.
|
||||
link.hide();
|
||||
$('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id)
|
||||
.show();
|
||||
|
||||
// The div the comment is displayed in.
|
||||
var div = $('div#cd' + d.comment_id);
|
||||
var data = div.data('comment');
|
||||
|
||||
// If this is not an unvote, and the other vote arrow has
|
||||
// already been pressed, unpress it.
|
||||
if ((d.value !== 0) && (data.vote === d.value * -1)) {
|
||||
$('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide();
|
||||
$('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show();
|
||||
}
|
||||
|
||||
// Update the comments rating in the local data.
|
||||
data.rating += (data.vote === 0) ? d.value : (d.value - data.vote);
|
||||
data.vote = d.value;
|
||||
div.data('comment', data);
|
||||
|
||||
// Change the rating text.
|
||||
div.find('.rating:first')
|
||||
.text(data.rating + ' point' + (data.rating == 1 ? '' : 's'));
|
||||
|
||||
// Send the vote information to the server.
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: opts.processVoteURL,
|
||||
data: d,
|
||||
error: function(request, textStatus, error) {
|
||||
showError('Oops, there was a problem casting that vote.');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Open a reply form used to reply to an existing comment.
|
||||
*/
|
||||
function openReply(id) {
|
||||
// Swap out the reply link for the hide link
|
||||
$('#rl' + id).hide();
|
||||
$('#cr' + id).show();
|
||||
|
||||
// Add the reply li to the children ul.
|
||||
var div = $(renderTemplate(replyTemplate, {id: id})).hide();
|
||||
$('#cl' + id)
|
||||
.prepend(div)
|
||||
// Setup the submit handler for the reply form.
|
||||
.find('#rf' + id)
|
||||
.submit(function(event) {
|
||||
event.preventDefault();
|
||||
addComment($('#rf' + id));
|
||||
closeReply(id);
|
||||
})
|
||||
.find('input[type=button]')
|
||||
.click(function() {
|
||||
closeReply(id);
|
||||
});
|
||||
div.slideDown('fast', function() {
|
||||
$('#rf' + id).find('textarea').focus();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the reply form opened with openReply.
|
||||
*/
|
||||
function closeReply(id) {
|
||||
// Remove the reply div from the DOM.
|
||||
$('#rd' + id).slideUp('fast', function() {
|
||||
$(this).remove();
|
||||
});
|
||||
|
||||
// Swap out the hide link for the reply link
|
||||
$('#cr' + id).hide();
|
||||
$('#rl' + id).show();
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively sort a tree of comments using the comp comparator.
|
||||
*/
|
||||
function sortComments(comments) {
|
||||
comments.sort(comp);
|
||||
$.each(comments, function() {
|
||||
this.children = sortComments(this.children);
|
||||
});
|
||||
return comments;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the children comments from a ul. If recursive is true,
|
||||
* recursively include childrens' children.
|
||||
*/
|
||||
function getChildren(ul, recursive) {
|
||||
var children = [];
|
||||
ul.children().children("[id^='cd']")
|
||||
.each(function() {
|
||||
var comment = $(this).data('comment');
|
||||
if (recursive)
|
||||
comment.children = getChildren($(this).find('#cl' + comment.id), true);
|
||||
children.push(comment);
|
||||
});
|
||||
return children;
|
||||
}
|
||||
|
||||
/** Create a div to display a comment in. */
|
||||
function createCommentDiv(comment) {
|
||||
if (!comment.displayed && !opts.moderator) {
|
||||
return $('<div class="moderate">Thank you! Your comment will show up '
|
||||
+ 'once it is has been approved by a moderator.</div>');
|
||||
}
|
||||
// Prettify the comment rating.
|
||||
comment.pretty_rating = comment.rating + ' point' +
|
||||
(comment.rating == 1 ? '' : 's');
|
||||
// Make a class (for displaying not yet moderated comments differently)
|
||||
comment.css_class = comment.displayed ? '' : ' moderate';
|
||||
// Create a div for this comment.
|
||||
var context = $.extend({}, opts, comment);
|
||||
var div = $(renderTemplate(commentTemplate, context));
|
||||
|
||||
// If the user has voted on this comment, highlight the correct arrow.
|
||||
if (comment.vote) {
|
||||
var direction = (comment.vote == 1) ? 'u' : 'd';
|
||||
div.find('#' + direction + 'v' + comment.id).hide();
|
||||
div.find('#' + direction + 'u' + comment.id).show();
|
||||
}
|
||||
|
||||
if (opts.moderator || comment.text != '[deleted]') {
|
||||
div.find('a.reply').show();
|
||||
if (comment.proposal_diff)
|
||||
div.find('#sp' + comment.id).show();
|
||||
if (opts.moderator && !comment.displayed)
|
||||
div.find('#cm' + comment.id).show();
|
||||
if (opts.moderator || (opts.username == comment.username))
|
||||
div.find('#dc' + comment.id).show();
|
||||
}
|
||||
return div;
|
||||
}
|
||||
|
||||
/**
|
||||
* A simple template renderer. Placeholders such as <%id%> are replaced
|
||||
* by context['id'] with items being escaped. Placeholders such as <#id#>
|
||||
* are not escaped.
|
||||
*/
|
||||
function renderTemplate(template, context) {
|
||||
var esc = $(document.createElement('div'));
|
||||
|
||||
function handle(ph, escape) {
|
||||
var cur = context;
|
||||
$.each(ph.split('.'), function() {
|
||||
cur = cur[this];
|
||||
});
|
||||
return escape ? esc.text(cur || "").html() : cur;
|
||||
}
|
||||
|
||||
return template.replace(/<([%#])([\w\.]*)\1>/g, function() {
|
||||
return handle(arguments[2], arguments[1] == '%' ? true : false);
|
||||
});
|
||||
}
|
||||
|
||||
/** Flash an error message briefly. */
|
||||
function showError(message) {
|
||||
$(document.createElement('div')).attr({'class': 'popup-error'})
|
||||
.append($(document.createElement('div'))
|
||||
.attr({'class': 'error-message'}).text(message))
|
||||
.appendTo('body')
|
||||
.fadeIn("slow")
|
||||
.delay(2000)
|
||||
.fadeOut("slow");
|
||||
}
|
||||
|
||||
/** Add a link the user uses to open the comments popup. */
|
||||
$.fn.comment = function() {
|
||||
return this.each(function() {
|
||||
var id = $(this).attr('id').substring(1);
|
||||
var count = COMMENT_METADATA[id];
|
||||
var title = count + ' comment' + (count == 1 ? '' : 's');
|
||||
var image = count > 0 ? opts.commentBrightImage : opts.commentImage;
|
||||
var addcls = count == 0 ? ' nocomment' : '';
|
||||
$(this)
|
||||
.append(
|
||||
$(document.createElement('a')).attr({
|
||||
href: '#',
|
||||
'class': 'sphinx-comment-open' + addcls,
|
||||
id: 'ao' + id
|
||||
})
|
||||
.append($(document.createElement('img')).attr({
|
||||
src: image,
|
||||
alt: 'comment',
|
||||
title: title
|
||||
}))
|
||||
.click(function(event) {
|
||||
event.preventDefault();
|
||||
show($(this).attr('id').substring(2));
|
||||
})
|
||||
)
|
||||
.append(
|
||||
$(document.createElement('a')).attr({
|
||||
href: '#',
|
||||
'class': 'sphinx-comment-close hidden',
|
||||
id: 'ah' + id
|
||||
})
|
||||
.append($(document.createElement('img')).attr({
|
||||
src: opts.closeCommentImage,
|
||||
alt: 'close',
|
||||
title: 'close'
|
||||
}))
|
||||
.click(function(event) {
|
||||
event.preventDefault();
|
||||
hide($(this).attr('id').substring(2));
|
||||
})
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
var opts = {
|
||||
processVoteURL: '/_process_vote',
|
||||
addCommentURL: '/_add_comment',
|
||||
getCommentsURL: '/_get_comments',
|
||||
acceptCommentURL: '/_accept_comment',
|
||||
deleteCommentURL: '/_delete_comment',
|
||||
commentImage: '/static/_static/comment.png',
|
||||
closeCommentImage: '/static/_static/comment-close.png',
|
||||
loadingImage: '/static/_static/ajax-loader.gif',
|
||||
commentBrightImage: '/static/_static/comment-bright.png',
|
||||
upArrow: '/static/_static/up.png',
|
||||
downArrow: '/static/_static/down.png',
|
||||
upArrowPressed: '/static/_static/up-pressed.png',
|
||||
downArrowPressed: '/static/_static/down-pressed.png',
|
||||
voting: false,
|
||||
moderator: false
|
||||
};
|
||||
|
||||
if (typeof COMMENT_OPTIONS != "undefined") {
|
||||
opts = jQuery.extend(opts, COMMENT_OPTIONS);
|
||||
}
|
||||
|
||||
var popupTemplate = '\
|
||||
<div class="sphinx-comments" id="sc<%id%>">\
|
||||
<p class="sort-options">\
|
||||
Sort by:\
|
||||
<a href="#" class="sort-option byrating">best rated</a>\
|
||||
<a href="#" class="sort-option byascage">newest</a>\
|
||||
<a href="#" class="sort-option byage">oldest</a>\
|
||||
</p>\
|
||||
<div class="comment-header">Comments</div>\
|
||||
<div class="comment-loading" id="cn<%id%>">\
|
||||
loading comments... <img src="<%loadingImage%>" alt="" /></div>\
|
||||
<ul id="cl<%id%>" class="comment-ul"></ul>\
|
||||
<div id="ca<%id%>">\
|
||||
<p class="add-a-comment">Add a comment\
|
||||
(<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
|
||||
<div class="comment-markup-box" id="mb<%id%>">\
|
||||
reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
|
||||
<tt>``code``</tt>, \
|
||||
code blocks: <tt>::</tt> and an indented block after blank line</div>\
|
||||
<form method="post" id="cf<%id%>" class="comment-form" action="">\
|
||||
<textarea name="comment" cols="80"></textarea>\
|
||||
<p class="propose-button">\
|
||||
<a href="#" id="pc<%id%>" class="show-propose-change">\
|
||||
Propose a change ▹\
|
||||
</a>\
|
||||
<a href="#" id="hc<%id%>" class="hide-propose-change">\
|
||||
Propose a change ▿\
|
||||
</a>\
|
||||
</p>\
|
||||
<textarea name="proposal" id="pt<%id%>" cols="80"\
|
||||
spellcheck="false"></textarea>\
|
||||
<input type="submit" value="Add comment" />\
|
||||
<input type="hidden" name="node" value="<%id%>" />\
|
||||
<input type="hidden" name="parent" value="" />\
|
||||
</form>\
|
||||
</div>\
|
||||
</div>';
|
||||
|
||||
var commentTemplate = '\
|
||||
<div id="cd<%id%>" class="sphinx-comment<%css_class%>">\
|
||||
<div class="vote">\
|
||||
<div class="arrow">\
|
||||
<a href="#" id="uv<%id%>" class="vote" title="vote up">\
|
||||
<img src="<%upArrow%>" />\
|
||||
</a>\
|
||||
<a href="#" id="uu<%id%>" class="un vote" title="vote up">\
|
||||
<img src="<%upArrowPressed%>" />\
|
||||
</a>\
|
||||
</div>\
|
||||
<div class="arrow">\
|
||||
<a href="#" id="dv<%id%>" class="vote" title="vote down">\
|
||||
<img src="<%downArrow%>" id="da<%id%>" />\
|
||||
</a>\
|
||||
<a href="#" id="du<%id%>" class="un vote" title="vote down">\
|
||||
<img src="<%downArrowPressed%>" />\
|
||||
</a>\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class="comment-content">\
|
||||
<p class="tagline comment">\
|
||||
<span class="user-id"><%username%></span>\
|
||||
<span class="rating"><%pretty_rating%></span>\
|
||||
<span class="delta"><%time.delta%></span>\
|
||||
</p>\
|
||||
<div class="comment-text comment"><#text#></div>\
|
||||
<p class="comment-opts comment">\
|
||||
<a href="#" class="reply hidden" id="rl<%id%>">reply ▹</a>\
|
||||
<a href="#" class="close-reply" id="cr<%id%>">reply ▿</a>\
|
||||
<a href="#" id="sp<%id%>" class="show-proposal">proposal ▹</a>\
|
||||
<a href="#" id="hp<%id%>" class="hide-proposal">proposal ▿</a>\
|
||||
<a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\
|
||||
<span id="cm<%id%>" class="moderation hidden">\
|
||||
<a href="#" id="ac<%id%>" class="accept-comment">accept</a>\
|
||||
</span>\
|
||||
</p>\
|
||||
<pre class="proposal" id="pr<%id%>">\
|
||||
<#proposal_diff#>\
|
||||
</pre>\
|
||||
<ul class="comment-children" id="cl<%id%>"></ul>\
|
||||
</div>\
|
||||
<div class="clearleft"></div>\
|
||||
</div>\
|
||||
</div>';
|
||||
|
||||
var replyTemplate = '\
|
||||
<li>\
|
||||
<div class="reply-div" id="rd<%id%>">\
|
||||
<form id="rf<%id%>">\
|
||||
<textarea name="comment" cols="80"></textarea>\
|
||||
<input type="submit" value="Add reply" />\
|
||||
<input type="button" value="Cancel" />\
|
||||
<input type="hidden" name="parent" value="<%id%>" />\
|
||||
<input type="hidden" name="node" value="" />\
|
||||
</form>\
|
||||
</div>\
|
||||
</li>';
|
||||
|
||||
$(document).ready(function() {
|
||||
init();
|
||||
});
|
||||
})(jQuery);
|
||||
|
||||
$(document).ready(function() {
|
||||
// add comment anchors for all paragraphs that are commentable
|
||||
$('.sphinx-has-comment').comment();
|
||||
|
||||
// highlight search words in search results
|
||||
$("div.context").each(function() {
|
||||
var params = $.getQueryParameters();
|
||||
var terms = (params.q) ? params.q[0].split(/\s+/) : [];
|
||||
var result = $(this);
|
||||
$.each(terms, function() {
|
||||
result.highlightText(this.toLowerCase(), 'highlighted');
|
||||
});
|
||||
});
|
||||
|
||||
// directly open comment window if requested
|
||||
var anchor = document.location.hash;
|
||||
if (anchor.substring(0, 9) == '#comment-') {
|
||||
$('#ao' + anchor.substring(9)).click();
|
||||
document.location.hash = '#s' + anchor.substring(9);
|
||||
}
|
||||
});
|
||||
|
|
@ -1,127 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Adding the fields to the database — Django Categories v1.1 documentation</title>
|
||||
<link rel="stylesheet" href="_static/default.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '1.1',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<link rel="top" title="Django Categories v1.1 documentation" href="index.html" />
|
||||
<link rel="next" title="Creating Custom Categories" href="custom_categories.html" />
|
||||
<link rel="prev" title="Registering Models" href="registering_models.html" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="docstitle">
|
||||
<p>Django Categories v1.1 documentation</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>Adding the fields to the database</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
<div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
|
||||
<div class="headerButton"><a href="custom_categories.html" title="Creating Custom Categories" accesskey="N">next</a></div>
|
||||
<div class="headerButton"><a href="registering_models.html" title="Registering Models" accesskey="P">previous</a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="getting_started.html">Getting Started</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Using categories in templates</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="registering_models.html">Registering Models</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Adding the fields to the database</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#enter-south">Enter South</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#reconfiguring-fields">Reconfiguring Fields</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="custom_categories.html">Creating Custom Categories</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="reference/index.html">Reference</a></li>
|
||||
</ul>
|
||||
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="_sources/adding_the_fields.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
<div id="searchbox" style="display: none">
|
||||
|
||||
<form class="search" action="search.html" method="get">
|
||||
<div class="search-wrapper">
|
||||
<span class="search-left"></span>
|
||||
<input class="prettysearch" type="text" name="q" size="18" />
|
||||
<span class="search-right"> </span>
|
||||
</div>
|
||||
<input type="submit" value="Search" class="searchbutton" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="adding-the-fields-to-the-database">
|
||||
<span id="adding-the-fields"></span><h1>Adding the fields to the database<a class="headerlink" href="#adding-the-fields-to-the-database" title="Permalink to this headline">¶</a></h1>
|
||||
<p>While Django will create the appropriate columns and tables if you configure Django Categories first, many times that is not possible. You could also reset the table, but you would loose all data in it. There is another way.</p>
|
||||
<div class="section" id="enter-south">
|
||||
<h2>Enter South<a class="headerlink" href="#enter-south" title="Permalink to this headline">¶</a></h2>
|
||||
<p><a class="reference external" href="http://south.aeracode.org/">South</a> is a Django application for managing database schema changes. South’s default behavior is for managing permanent changes to a model’s structure. In the case of dynamically adding a field or fields to a model, this doesn’t work because you are not making the change permanent. And probably don’t want to.</p>
|
||||
<p>Django Categories has a management command to create any missing fields. It requires South because it uses the South’s API for making changes to databases. The management command is simple: <tt class="docutils literal"><span class="pre">python</span> <span class="pre">manage.py</span> <span class="pre">add_category_fields</span> <span class="pre">[app]</span></tt>. If you do not include an app name, it will attempt to do all applications configured.</p>
|
||||
<p>Running this command several times will not hurt any data or cause any errors.</p>
|
||||
</div>
|
||||
<div class="section" id="reconfiguring-fields">
|
||||
<h2>Reconfiguring Fields<a class="headerlink" href="#reconfiguring-fields" title="Permalink to this headline">¶</a></h2>
|
||||
<p>You can make changes to the field configurations as long as they do not change the underlying database structure. For example, adding a <tt class="docutils literal"><span class="pre">related_name</span></tt> (see <a class="reference internal" href="registering_models.html#registering-a-m2one-relationship"><em>Registering a many-to-one relationship</em></a>) because it only affects Django code. Changing the name of the field, however, is a different matter.</p>
|
||||
<p>Django Categories provides a complementary management command to drop a field from the database (the field must still be in the configuration to do so): <tt class="docutils literal"><span class="pre">python</span> <span class="pre">manage.py</span> <span class="pre">drop_category_field</span> <span class="pre">app_name</span> <span class="pre">model_name</span> <span class="pre">field_name</span></tt></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>
|
||||
© Copyright 2010-2012, Corey Oordt.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
|
||||
</p>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div id="breadcrumbs">
|
||||
Adding the fields to the database
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="_static/toc.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,341 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Creating Custom Categories — Django Categories v1.1 documentation</title>
|
||||
<link rel="stylesheet" href="_static/default.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '1.1',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<link rel="top" title="Django Categories v1.1 documentation" href="index.html" />
|
||||
<link rel="next" title="Reference" href="reference/index.html" />
|
||||
<link rel="prev" title="Adding the fields to the database" href="adding_the_fields.html" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="docstitle">
|
||||
<p>Django Categories v1.1 documentation</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>Creating Custom Categories</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
<div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
|
||||
<div class="headerButton"><a href="reference/index.html" title="Reference" accesskey="N">next</a></div>
|
||||
<div class="headerButton"><a href="adding_the_fields.html" title="Adding the fields to the database" accesskey="P">previous</a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="getting_started.html">Getting Started</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Using categories in templates</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="registering_models.html">Registering Models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="adding_the_fields.html">Adding the fields to the database</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Creating Custom Categories</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#name-only">Name only</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#name-and-other-data">Name and other data</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="reference/index.html">Reference</a></li>
|
||||
</ul>
|
||||
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="_sources/custom_categories.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
<div id="searchbox" style="display: none">
|
||||
|
||||
<form class="search" action="search.html" method="get">
|
||||
<div class="search-wrapper">
|
||||
<span class="search-left"></span>
|
||||
<input class="prettysearch" type="text" name="q" size="18" />
|
||||
<span class="search-right"> </span>
|
||||
</div>
|
||||
<input type="submit" value="Search" class="searchbutton" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="creating-custom-categories">
|
||||
<span id="id1"></span><h1>Creating Custom Categories<a class="headerlink" href="#creating-custom-categories" title="Permalink to this headline">¶</a></h1>
|
||||
<p>Django Categories isn’t just for using a single category model. It allows you to create your own custom category-like models with as little or much customization as you need.</p>
|
||||
<div class="section" id="name-only">
|
||||
<h2>Name only<a class="headerlink" href="#name-only" title="Permalink to this headline">¶</a></h2>
|
||||
<p>For many cases, you want a simple user-managed lookup table. You can do this with just a little bit of code. The resulting model will include name, slug and active fields and a hierarchical admin.</p>
|
||||
<ol class="arabic">
|
||||
<li><p class="first">Create a model that subclasses <a class="reference internal" href="reference/models.html#CategoryBase" title="CategoryBase"><tt class="xref py py-class docutils literal"><span class="pre">CategoryBase</span></tt></a></p>
|
||||
<div class="highlight-python"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9</pre></div></td><td class="code"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">categories.models</span> <span class="kn">import</span> <span class="n">CategoryBase</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">SimpleCategory</span><span class="p">(</span><span class="n">CategoryBase</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> A simple of catgorizing example</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
|
||||
<span class="n">verbose_name_plural</span> <span class="o">=</span> <span class="s">'simple categories'</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</li>
|
||||
<li><p class="first">Create a subclass of CategoryBaseAdmin.</p>
|
||||
<div class="highlight-python"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10</pre></div></td><td class="code"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">django.contrib</span> <span class="kn">import</span> <span class="n">admin</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">categories.admin</span> <span class="kn">import</span> <span class="n">CategoryBaseAdmin</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">.models</span> <span class="kn">import</span> <span class="n">SimpleCategory</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">SimpleCategoryAdmin</span><span class="p">(</span><span class="n">CategoryBaseAdmin</span><span class="p">):</span>
|
||||
<span class="k">pass</span>
|
||||
|
||||
<span class="n">admin</span><span class="o">.</span><span class="n">site</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">SimpleCategory</span><span class="p">,</span> <span class="n">SimpleCategoryAdmin</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</li>
|
||||
<li><p class="first">Register your model and custom model admin class.</p>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
<div class="section" id="name-and-other-data">
|
||||
<h2>Name and other data<a class="headerlink" href="#name-and-other-data" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Sometimes you need more functionality, such as extra metadata and custom functions. The <a class="reference internal" href="reference/models.html#Category" title="Category"><tt class="xref py py-class docutils literal"><span class="pre">Category</span></tt></a> model in this package does this.</p>
|
||||
<ol class="arabic">
|
||||
<li><p class="first">Create a model that subclasses <a class="reference internal" href="reference/models.html#CategoryBase" title="CategoryBase"><tt class="xref py py-class docutils literal"><span class="pre">CategoryBase</span></tt></a> as above.</p>
|
||||
</li>
|
||||
<li><p class="first">Add new fields to the model. The <a class="reference internal" href="reference/models.html#Category" title="Category"><tt class="xref py py-class docutils literal"><span class="pre">Category</span></tt></a> model adds these extra fields.</p>
|
||||
<div class="highlight-python"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29</pre></div></td><td class="code"><div class="highlight"><pre><span class="k">class</span> <span class="nc">Category</span><span class="p">(</span><span class="n">CategoryBase</span><span class="p">):</span>
|
||||
<span class="n">thumbnail</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">FileField</span><span class="p">(</span>
|
||||
<span class="n">upload_to</span><span class="o">=</span><span class="n">THUMBNAIL_UPLOAD_PATH</span><span class="p">,</span>
|
||||
<span class="n">null</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
|
||||
<span class="n">storage</span><span class="o">=</span><span class="n">STORAGE</span><span class="p">(),)</span>
|
||||
<span class="n">thumbnail_width</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">IntegerField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
|
||||
<span class="n">thumbnail_height</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">IntegerField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
|
||||
<span class="n">order</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">IntegerField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="n">alternate_title</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span>
|
||||
<span class="n">blank</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
|
||||
<span class="n">default</span><span class="o">=</span><span class="s">""</span><span class="p">,</span>
|
||||
<span class="n">max_length</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
|
||||
<span class="n">help_text</span><span class="o">=</span><span class="s">"An alternative title to use on pages with this category."</span><span class="p">)</span>
|
||||
<span class="n">alternate_url</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span>
|
||||
<span class="n">blank</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
|
||||
<span class="n">max_length</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
|
||||
<span class="n">help_text</span><span class="o">=</span><span class="s">"An alternative URL to use instead of the one derived from "</span>
|
||||
<span class="s">"the category hierarchy."</span><span class="p">)</span>
|
||||
<span class="n">description</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
|
||||
<span class="n">meta_keywords</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span>
|
||||
<span class="n">blank</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
|
||||
<span class="n">default</span><span class="o">=</span><span class="s">""</span><span class="p">,</span>
|
||||
<span class="n">max_length</span><span class="o">=</span><span class="mi">255</span><span class="p">,</span>
|
||||
<span class="n">help_text</span><span class="o">=</span><span class="s">"Comma-separated keywords for search engines."</span><span class="p">)</span>
|
||||
<span class="n">meta_extra</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span>
|
||||
<span class="n">blank</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
|
||||
<span class="n">default</span><span class="o">=</span><span class="s">""</span><span class="p">,</span>
|
||||
<span class="n">help_text</span><span class="o">=</span><span class="s">"(Advanced) Any additional HTML to be placed verbatim "</span>
|
||||
<span class="s">"in the &lt;head&gt;"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</li>
|
||||
<li><p class="first">Add new methods to the model. For example, the <a class="reference internal" href="reference/models.html#Category" title="Category"><tt class="xref py py-class docutils literal"><span class="pre">Category</span></tt></a> model adds several new methods, including overriding the <tt class="xref py py-meth docutils literal"><span class="pre">save()</span></tt> method.</p>
|
||||
<div class="highlight-python"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15</pre></div></td><td class="code"><div class="highlight"><pre><span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">thumbnail</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">django.core.files.images</span> <span class="kn">import</span> <span class="n">get_image_dimensions</span>
|
||||
<span class="kn">import</span> <span class="nn">django</span>
|
||||
<span class="k">if</span> <span class="n">django</span><span class="o">.</span><span class="n">VERSION</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o"><</span> <span class="mi">2</span><span class="p">:</span>
|
||||
<span class="n">width</span><span class="p">,</span> <span class="n">height</span> <span class="o">=</span> <span class="n">get_image_dimensions</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">thumbnail</span><span class="o">.</span><span class="n">file</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">width</span><span class="p">,</span> <span class="n">height</span> <span class="o">=</span> <span class="n">get_image_dimensions</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">thumbnail</span><span class="o">.</span><span class="n">file</span><span class="p">,</span> <span class="n">close</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">width</span><span class="p">,</span> <span class="n">height</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="bp">None</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">thumbnail_width</span> <span class="o">=</span> <span class="n">width</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">thumbnail_height</span> <span class="o">=</span> <span class="n">height</span>
|
||||
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">Category</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</li>
|
||||
<li><p class="first">Alter <tt class="xref py py-class docutils literal"><span class="pre">Meta</span></tt> or <tt class="xref py py-class docutils literal"><span class="pre">MPTTMeta</span></tt> class. Either of these inner classes can be overridden, however your <tt class="xref py py-class docutils literal"><span class="pre">Meta</span></tt> class should inherit <tt class="xref py py-class docutils literal"><span class="pre">CategoryBase.Meta</span></tt>. Options for <tt class="xref py py-class docutils literal"><span class="pre">Meta</span></tt> are in the <a class="reference external" href="http://readthedocs.org/docs/django-mptt/en/latest/models.html#model-options">Django-MPTT docs</a>.</p>
|
||||
<div class="highlight-python"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1
|
||||
2
|
||||
3
|
||||
4
|
||||
5</pre></div></td><td class="code"><div class="highlight"><pre><span class="k">class</span> <span class="nc">Meta</span><span class="p">(</span><span class="n">CategoryBase</span><span class="o">.</span><span class="n">Meta</span><span class="p">):</span>
|
||||
<span class="n">verbose_name_plural</span> <span class="o">=</span> <span class="s">'categories'</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">MPTTMeta</span><span class="p">:</span>
|
||||
<span class="n">order_insertion_by</span> <span class="o">=</span> <span class="p">(</span><span class="s">'order'</span><span class="p">,</span> <span class="s">'name'</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</li>
|
||||
<li><p class="first">For the admin, you must create a form that subclasses <tt class="xref py py-class docutils literal"><span class="pre">CategoryBaseAdminForm</span></tt> and at least sets the <tt class="docutils literal"><span class="pre">Meta.model</span></tt> attribute. You can also alter the form fields and cleaning methods, as <a class="reference internal" href="reference/models.html#Category" title="Category"><tt class="xref py py-class docutils literal"><span class="pre">Category</span></tt></a> does.</p>
|
||||
<div class="highlight-python"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9</pre></div></td><td class="code"><div class="highlight"><pre><span class="k">class</span> <span class="nc">CategoryAdminForm</span><span class="p">(</span><span class="n">CategoryBaseAdminForm</span><span class="p">):</span>
|
||||
<span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
|
||||
<span class="n">model</span> <span class="o">=</span> <span class="n">Category</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">clean_alternate_title</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">instance</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s">'alternate_title'</span><span class="p">]:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s">'name'</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s">'alternate_title'</span><span class="p">]</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</li>
|
||||
<li><p class="first">Next you must subclass <tt class="xref py py-class docutils literal"><span class="pre">CategoryBaseAdmin</span></tt> and assign the <tt class="docutils literal"><span class="pre">form</span></tt> attribute the form class created above. You can alter any other attributes as necessary.</p>
|
||||
<div class="highlight-python"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17</pre></div></td><td class="code"><div class="highlight"><pre><span class="k">class</span> <span class="nc">CategoryAdmin</span><span class="p">(</span><span class="n">CategoryBaseAdmin</span><span class="p">):</span>
|
||||
<span class="n">form</span> <span class="o">=</span> <span class="n">CategoryAdminForm</span>
|
||||
<span class="n">list_display</span> <span class="o">=</span> <span class="p">(</span><span class="s">'name'</span><span class="p">,</span> <span class="s">'alternate_title'</span><span class="p">,</span> <span class="s">'active'</span><span class="p">)</span>
|
||||
<span class="n">fieldsets</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="p">{</span>
|
||||
<span class="s">'fields'</span><span class="p">:</span> <span class="p">(</span><span class="s">'parent'</span><span class="p">,</span> <span class="s">'name'</span><span class="p">,</span> <span class="s">'thumbnail'</span><span class="p">,</span> <span class="s">'active'</span><span class="p">)</span>
|
||||
<span class="p">}),</span>
|
||||
<span class="p">(</span><span class="s">'Meta Data'</span><span class="p">,</span> <span class="p">{</span>
|
||||
<span class="s">'fields'</span><span class="p">:</span> <span class="p">(</span><span class="s">'alternate_title'</span><span class="p">,</span> <span class="s">'alternate_url'</span><span class="p">,</span> <span class="s">'description'</span><span class="p">,</span>
|
||||
<span class="s">'meta_keywords'</span><span class="p">,</span> <span class="s">'meta_extra'</span><span class="p">),</span>
|
||||
<span class="s">'classes'</span><span class="p">:</span> <span class="p">(</span><span class="s">'collapse'</span><span class="p">,),</span>
|
||||
<span class="p">}),</span>
|
||||
<span class="p">(</span><span class="s">'Advanced'</span><span class="p">,</span> <span class="p">{</span>
|
||||
<span class="s">'fields'</span><span class="p">:</span> <span class="p">(</span><span class="s">'order'</span><span class="p">,</span> <span class="s">'slug'</span><span class="p">),</span>
|
||||
<span class="s">'classes'</span><span class="p">:</span> <span class="p">(</span><span class="s">'collapse'</span><span class="p">,),</span>
|
||||
<span class="p">}),</span>
|
||||
<span class="p">)</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>
|
||||
© Copyright 2010-2012, Corey Oordt.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
|
||||
</p>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div id="breadcrumbs">
|
||||
Creating Custom Categories
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="_static/toc.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,199 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Index — Django Categories v1.1 documentation</title>
|
||||
<link rel="stylesheet" href="_static/default.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '1.1',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<link rel="top" title="Django Categories v1.1 documentation" href="index.html" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="docstitle">
|
||||
<p>Django Categories v1.1 documentation</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>Index</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
<div class="headerButton"><a href="#" title="General Index" accesskey="I">index</a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="getting_started.html">Getting Started</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Using categories in templates</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="registering_models.html">Registering Models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="adding_the_fields.html">Adding the fields to the database</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="custom_categories.html">Creating Custom Categories</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="reference/index.html">Reference</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="searchbox" style="display: none">
|
||||
|
||||
<form class="search" action="search.html" method="get">
|
||||
<div class="search-wrapper">
|
||||
<span class="search-left"></span>
|
||||
<input class="prettysearch" type="text" name="q" size="18" />
|
||||
<span class="search-right"> </span>
|
||||
</div>
|
||||
<input type="submit" value="Search" class="searchbutton" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
|
||||
<h1 id="index">Index</h1>
|
||||
|
||||
<div class="genindex-jumpbox">
|
||||
<a href="#A"><strong>A</strong></a> | <a href="#C"><strong>C</strong></a> | <a href="#D"><strong>D</strong></a> | <a href="#M"><strong>M</strong></a> | <a href="#N"><strong>N</strong></a> | <a href="#O"><strong>O</strong></a> | <a href="#P"><strong>P</strong></a> | <a href="#R"><strong>R</strong></a> | <a href="#S"><strong>S</strong></a> | <a href="#T"><strong>T</strong></a>
|
||||
</div>
|
||||
<h2 id="A">A</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="reference/models.html#CategoryBase.active">active (CategoryBase attribute)</a></dt>
|
||||
<dt><a href="reference/models.html#Category.alternate_title">alternate_title (Category attribute)</a></dt>
|
||||
</dl></td>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="reference/models.html#Category.alternate_url">alternate_url (Category attribute)</a></dt>
|
||||
</dl></td>
|
||||
</tr></table>
|
||||
|
||||
<h2 id="C">C</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="reference/models.html#Category">Category (built-in class)</a></dt>
|
||||
</dl></td>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="reference/models.html#CategoryBase">CategoryBase (built-in class)</a></dt>
|
||||
</dl></td>
|
||||
</tr></table>
|
||||
|
||||
<h2 id="D">D</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="reference/models.html#Category.description">description (Category attribute)</a></dt>
|
||||
</dl></td>
|
||||
</tr></table>
|
||||
|
||||
<h2 id="M">M</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="reference/models.html#Category.meta_extra">meta_extra (Category attribute)</a></dt>
|
||||
</dl></td>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="reference/models.html#Category.meta_keywords">meta_keywords (Category attribute)</a></dt>
|
||||
</dl></td>
|
||||
</tr></table>
|
||||
|
||||
<h2 id="N">N</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="reference/models.html#CategoryBase.name">name (CategoryBase attribute)</a></dt>
|
||||
</dl></td>
|
||||
</tr></table>
|
||||
|
||||
<h2 id="O">O</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="reference/models.html#CategoryBase.objects">objects (CategoryBase attribute)</a></dt>
|
||||
</dl></td>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="reference/models.html#Category.order">order (Category attribute)</a></dt>
|
||||
</dl></td>
|
||||
</tr></table>
|
||||
|
||||
<h2 id="P">P</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="reference/models.html#CategoryBase.parent">parent (CategoryBase attribute)</a></dt>
|
||||
</dl></td>
|
||||
</tr></table>
|
||||
|
||||
<h2 id="R">R</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="registering_models.html#register_fk">register_fk() (built-in function)</a></dt>
|
||||
</dl></td>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="registering_models.html#register_m2m">register_m2m() (built-in function)</a></dt>
|
||||
</dl></td>
|
||||
</tr></table>
|
||||
|
||||
<h2 id="S">S</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="reference/models.html#CategoryBase.slug">slug (CategoryBase attribute)</a></dt>
|
||||
</dl></td>
|
||||
</tr></table>
|
||||
|
||||
<h2 id="T">T</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="reference/models.html#Category.thumbnail">thumbnail (Category attribute)</a></dt>
|
||||
<dt><a href="reference/models.html#Category.thumbnail_height">thumbnail_height (Category attribute)</a></dt>
|
||||
</dl></td>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
<dt><a href="reference/models.html#Category.thumbnail_width">thumbnail_width (Category attribute)</a></dt>
|
||||
<dt><a href="reference/models.html#CategoryBase.tree">tree (CategoryBase attribute)</a></dt>
|
||||
</dl></td>
|
||||
</tr></table>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>
|
||||
© Copyright 2010-2012, Corey Oordt.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
|
||||
</p>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div id="breadcrumbs">
|
||||
Index
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="_static/toc.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,166 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Getting Started — Django Categories v1.1 documentation</title>
|
||||
<link rel="stylesheet" href="_static/default.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '1.1',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<link rel="top" title="Django Categories v1.1 documentation" href="index.html" />
|
||||
<link rel="next" title="Using categories in templates" href="usage.html" />
|
||||
<link rel="prev" title="Installation" href="installation.html" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="docstitle">
|
||||
<p>Django Categories v1.1 documentation</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>Getting Started</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
<div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
|
||||
<div class="headerButton"><a href="usage.html" title="Using categories in templates" accesskey="N">next</a></div>
|
||||
<div class="headerButton"><a href="installation.html" title="Installation" accesskey="P">previous</a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Getting Started</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#connecting-your-model-with-django-categories">Connecting your model with Django-Categories</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Using categories in templates</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="registering_models.html">Registering Models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="adding_the_fields.html">Adding the fields to the database</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="custom_categories.html">Creating Custom Categories</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="reference/index.html">Reference</a></li>
|
||||
</ul>
|
||||
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="_sources/getting_started.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
<div id="searchbox" style="display: none">
|
||||
|
||||
<form class="search" action="search.html" method="get">
|
||||
<div class="search-wrapper">
|
||||
<span class="search-left"></span>
|
||||
<input class="prettysearch" type="text" name="q" size="18" />
|
||||
<span class="search-right"> </span>
|
||||
</div>
|
||||
<input type="submit" value="Search" class="searchbutton" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="getting-started">
|
||||
<h1>Getting Started<a class="headerlink" href="#getting-started" title="Permalink to this headline">¶</a></h1>
|
||||
<p>You can use Django Categories in two ways:</p>
|
||||
<ol class="arabic">
|
||||
<li><p class="first">As storage for one tree of categories, using the <a class="reference internal" href="reference/models.html#Category" title="Category"><tt class="xref py py-class docutils literal"><span class="pre">Category</span></tt></a> model:</p>
|
||||
<div class="highlight-python"><pre>Top Category 1
|
||||
Subcategory 1-1
|
||||
Subcategory 1-2
|
||||
subcategory 1-2-1
|
||||
Top Category 2
|
||||
Subcategory 2-1</pre>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">As the basis for several custom categories (see <a class="reference internal" href="custom_categories.html#creating-custom-categories"><em>Creating Custom Categories</em></a>), e.g. a <strong>MusicGenre</strong> model</p>
|
||||
<div class="highlight-python"><pre>MusicGenre 1
|
||||
MusicSubGenre 1-1
|
||||
MusicSubGenre 1-2
|
||||
MusicSubGenre 1-2-1
|
||||
MusicGenre 2
|
||||
MusicSubGenre 2-1</pre>
|
||||
</div>
|
||||
<p>and a <strong>Subject</strong> model</p>
|
||||
<div class="highlight-python"><pre>Subject 1
|
||||
Discipline 1-1
|
||||
Discipline 1-2
|
||||
SubDiscipline 1-2-1
|
||||
Subject 2
|
||||
Discipline 2-1</pre>
|
||||
</div>
|
||||
</li>
|
||||
</ol>
|
||||
<div class="section" id="connecting-your-model-with-django-categories">
|
||||
<h2>Connecting your model with Django-Categories<a class="headerlink" href="#connecting-your-model-with-django-categories" title="Permalink to this headline">¶</a></h2>
|
||||
<p>There are two ways to add Category fields to an application. If you are in control of the code (it’s your application) or you are willing to take control of the code (fork someone else’s app) you can make a <a class="reference internal" href="#hard-coded-connection"><em>Hard Coded Connection</em></a>.</p>
|
||||
<p>For 3rd-party apps or even your own apps that you don’t wish to add Django-Categories as a dependency, you can configure a <a class="reference internal" href="#lazy-connection"><em>Lazy Connection</em></a>.</p>
|
||||
<div class="section" id="hard-coded-connection">
|
||||
<span id="id1"></span><h3>Hard Coded Connection<a class="headerlink" href="#hard-coded-connection" title="Permalink to this headline">¶</a></h3>
|
||||
<p>Hard coded connections are done in the exact same way you handle any other foreign key or many-to-many relations to a model.</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">django.db</span> <span class="kn">import</span> <span class="n">models</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">MyModel</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
|
||||
<span class="n">category</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s">'categories.Category'</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Don’t forget to add the field or fields to your <tt class="docutils literal"><span class="pre">ModelAdmin</span></tt> class as well.</p>
|
||||
</div>
|
||||
<div class="section" id="lazy-connection">
|
||||
<span id="id2"></span><h3>Lazy Connection<a class="headerlink" href="#lazy-connection" title="Permalink to this headline">¶</a></h3>
|
||||
<p>Lazy connections are done through configuring Django Categories in the project’s <tt class="docutils literal"><span class="pre">settings.py</span></tt> file. When the project starts up, the configured fields are dynamically added to the configured models and admin.</p>
|
||||
<p>If you do this before you have created the database (before you ran <tt class="docutils literal"><span class="pre">manage.py</span> <span class="pre">syncdb</span></tt>), the fields will also be in the tables. If you do this after you have already created all the tables, you can run <tt class="docutils literal"><span class="pre">manage.py</span> <span class="pre">add_category_fields</span></tt> to create the fields (this requires Django South to be installed).</p>
|
||||
<p>You add a many-to-one or many-to-many relationship with Django Categories using the <a class="reference internal" href="reference/settings.html#fk-registry"><em>FK_REGISTRY</em></a> and <a class="reference internal" href="reference/settings.html#m2m-registry"><em>M2M_REGISTRY</em></a> settings respectively. For more information see <a class="reference internal" href="registering_models.html#registering-models"><em>Registering Models</em></a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>
|
||||
© Copyright 2010-2012, Corey Oordt.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
|
||||
</p>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div id="breadcrumbs">
|
||||
Getting Started
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="_static/toc.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
172
docs/index.html
|
|
@ -1,172 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Django Categories v 1.1 — Django Categories v1.1 documentation</title>
|
||||
<link rel="stylesheet" href="_static/default.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '1.1',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<link rel="top" title="Django Categories v1.1 documentation" href="#" />
|
||||
<link rel="next" title="Installation" href="installation.html" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="docstitle">
|
||||
<p>Django Categories v1.1 documentation</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>Django Categories v 1.1</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
<div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
|
||||
<div class="headerButton"><a href="installation.html" title="Installation" accesskey="N">next</a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<ul><li class="toctree-l1"><a href="#">Main Page</a></li></ul>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="getting_started.html">Getting Started</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Using categories in templates</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="registering_models.html">Registering Models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="adding_the_fields.html">Adding the fields to the database</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="custom_categories.html">Creating Custom Categories</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="reference/index.html">Reference</a></li>
|
||||
</ul>
|
||||
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="_sources/index.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
<div id="searchbox" style="display: none">
|
||||
|
||||
<form class="search" action="search.html" method="get">
|
||||
<div class="search-wrapper">
|
||||
<span class="search-left"></span>
|
||||
<input class="prettysearch" type="text" name="q" size="18" />
|
||||
<span class="search-right"> </span>
|
||||
</div>
|
||||
<input type="submit" value="Search" class="searchbutton" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="django-categories-v-version">
|
||||
<h1>Django Categories v 1.1<a class="headerlink" href="#django-categories-v-version" title="Permalink to this headline">¶</a></h1>
|
||||
<p>Django Categories grew out of our need to provide a basic hierarchical taxonomy management system that multiple applications could use independently or in concert.</p>
|
||||
<p>As a news site, our stories, photos, and other content get divided into “sections” and we wanted all the apps to use the same set of sections. As our needs grew, the Django Categories grew in the functionality it gave to category handling within web pages.</p>
|
||||
<div class="section" id="new-in-1-1">
|
||||
<h2>New in 1.1<a class="headerlink" href="#new-in-1-1" title="Permalink to this headline">¶</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Fixed a cosmetic bug in the Django 1.4 admin. Action checkboxes now only appear once.</li>
|
||||
<li>Template tags are refactored to allow easy use of any model derived from <tt class="docutils literal"><span class="pre">CategoryBase</span></tt>.</li>
|
||||
<li>Improved test suite.</li>
|
||||
<li>Improved some of the documentation.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="contents">
|
||||
<h2>Contents<a class="headerlink" href="#contents" title="Permalink to this headline">¶</a></h2>
|
||||
<div class="toctree-wrapper compound">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="installation.html#to-use-the-category-model">To use the Category model</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="installation.html#to-only-subclass-categorybase">To only subclass CategoryBase</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="getting_started.html">Getting Started</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="getting_started.html#connecting-your-model-with-django-categories">Connecting your model with Django-Categories</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Using categories in templates</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="usage.html#getting-all-items-within-a-category">Getting all items within a category</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="usage.html#template-tags">Template Tags</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="registering_models.html">Registering Models</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="registering_models.html#registering-models-in-settings-py">Registering models in settings.py</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="registering_models.html#registering-a-many-to-one-relationship">Registering a many-to-one relationship</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="registering_models.html#registering-a-many-to-many-relationship">Registering a many-to-many relationship</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="adding_the_fields.html">Adding the fields to the database</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="adding_the_fields.html#enter-south">Enter South</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="adding_the_fields.html#reconfiguring-fields">Reconfiguring Fields</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="custom_categories.html">Creating Custom Categories</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="custom_categories.html#name-only">Name only</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="custom_categories.html#name-and-other-data">Name and other data</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="reference/index.html">Reference</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="reference/management_commands.html">Management Commands</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="reference/models.html">Models</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="reference/settings.html">Settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="reference/templatetags.html">Template tags and filters</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="indices-and-tables">
|
||||
<h2>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h2>
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="genindex.html"><em>Index</em></a></li>
|
||||
<li><a class="reference internal" href="py-modindex.html"><em>Module Index</em></a></li>
|
||||
<li><a class="reference internal" href="search.html"><em>Search Page</em></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>
|
||||
© Copyright 2010-2012, Corey Oordt.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
|
||||
</p>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div id="breadcrumbs">
|
||||
Django Categories v 1.1
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="_static/toc.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,155 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Installation — Django Categories v1.1 documentation</title>
|
||||
<link rel="stylesheet" href="_static/default.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '1.1',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<link rel="top" title="Django Categories v1.1 documentation" href="index.html" />
|
||||
<link rel="next" title="Getting Started" href="getting_started.html" />
|
||||
<link rel="prev" title="Django Categories v 1.1" href="index.html" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="docstitle">
|
||||
<p>Django Categories v1.1 documentation</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>Installation</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
<div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
|
||||
<div class="headerButton"><a href="getting_started.html" title="Getting Started" accesskey="N">next</a></div>
|
||||
<div class="headerButton"><a href="index.html" title="Django Categories v 1.1" accesskey="P">previous</a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Installation</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#to-use-the-category-model">To use the Category model</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#to-only-subclass-categorybase">To only subclass CategoryBase</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="getting_started.html">Getting Started</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Using categories in templates</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="registering_models.html">Registering Models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="adding_the_fields.html">Adding the fields to the database</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="custom_categories.html">Creating Custom Categories</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="reference/index.html">Reference</a></li>
|
||||
</ul>
|
||||
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="_sources/installation.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
<div id="searchbox" style="display: none">
|
||||
|
||||
<form class="search" action="search.html" method="get">
|
||||
<div class="search-wrapper">
|
||||
<span class="search-left"></span>
|
||||
<input class="prettysearch" type="text" name="q" size="18" />
|
||||
<span class="search-right"> </span>
|
||||
</div>
|
||||
<input type="submit" value="Search" class="searchbutton" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="installation">
|
||||
<h1>Installation<a class="headerlink" href="#installation" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="section" id="to-use-the-category-model">
|
||||
<h2>To use the Category model<a class="headerlink" href="#to-use-the-category-model" title="Permalink to this headline">¶</a></h2>
|
||||
<ol class="arabic">
|
||||
<li><p class="first">Install django-categories:</p>
|
||||
<div class="highlight-python"><pre>pip install django-categories</pre>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">Add <tt class="docutils literal"><span class="pre">"categories"</span></tt> and <tt class="docutils literal"><span class="pre">"categories.editor"</span></tt> to your <tt class="docutils literal"><span class="pre">INSTALLED_APPS</span></tt> list in your project’s <tt class="docutils literal"><span class="pre">settings.py</span></tt> file.</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">INSTALLED_APPS</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="c"># ...</span>
|
||||
<span class="s">"categories"</span><span class="p">,</span>
|
||||
<span class="s">"categories.editor"</span><span class="p">,</span>
|
||||
<span class="p">]</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">Run <tt class="docutils literal"><span class="pre">./manage.py</span> <span class="pre">syncdb</span></tt> (or <tt class="docutils literal"><span class="pre">./manage.py</span> <span class="pre">migrate</span> <span class="pre">categories</span></tt> if you are using <a class="reference external" href="http://south.aeracode.org/">South</a>)</p>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
<div class="section" id="to-only-subclass-categorybase">
|
||||
<h2>To only subclass CategoryBase<a class="headerlink" href="#to-only-subclass-categorybase" title="Permalink to this headline">¶</a></h2>
|
||||
<p>If you are going to create your own models using <a class="reference internal" href="reference/models.html#CategoryBase" title="CategoryBase"><tt class="xref py py-class docutils literal"><span class="pre">CategoryBase</span></tt></a>, (see <a class="reference internal" href="custom_categories.html#creating-custom-categories"><em>Creating Custom Categories</em></a>) you’ll need a few different steps.</p>
|
||||
<ol class="arabic">
|
||||
<li><p class="first">Install django-categories:</p>
|
||||
<div class="highlight-python"><pre>pip install django-categories</pre>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">Add <tt class="docutils literal"><span class="pre">"categories.editor"</span></tt> to your <tt class="docutils literal"><span class="pre">INSTALLED_APPS</span></tt> list in your project’s <tt class="docutils literal"><span class="pre">settings.py</span></tt> file.</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">INSTALLED_APPS</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="c"># ...</span>
|
||||
<span class="s">"categories.editor"</span><span class="p">,</span>
|
||||
<span class="p">]</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p class="first">Create your own models.</p>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>
|
||||
© Copyright 2010-2012, Corey Oordt.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
|
||||
</p>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div id="breadcrumbs">
|
||||
Installation
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="_static/toc.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
BIN
docs/objects.inv
|
|
@ -1,151 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Reference — Django Categories v1.1 documentation</title>
|
||||
<link rel="stylesheet" href="../_static/default.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../',
|
||||
VERSION: '1.1',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="../_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="../_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="../_static/doctools.js"></script>
|
||||
<link rel="top" title="Django Categories v1.1 documentation" href="../index.html" />
|
||||
<link rel="next" title="Management Commands" href="management_commands.html" />
|
||||
<link rel="prev" title="Creating Custom Categories" href="../custom_categories.html" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="docstitle">
|
||||
<p>Django Categories v1.1 documentation</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>Reference</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
<div class="headerButton"><a href="../genindex.html" title="General Index" accesskey="I">index</a></div>
|
||||
<div class="headerButton"><a href="management_commands.html" title="Management Commands" accesskey="N">next</a></div>
|
||||
<div class="headerButton"><a href="../custom_categories.html" title="Creating Custom Categories" accesskey="P">previous</a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<ul><li class="toctree-l1"><a href="../index.html">Main Page</a></li></ul>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../getting_started.html">Getting Started</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../usage.html">Using categories in templates</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../registering_models.html">Registering Models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../adding_the_fields.html">Adding the fields to the database</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../custom_categories.html">Creating Custom Categories</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Reference</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="management_commands.html">Management Commands</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="models.html">Models</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="settings.html">Settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="templatetags.html">Template tags and filters</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="../_sources/reference/index.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
<div id="searchbox" style="display: none">
|
||||
|
||||
<form class="search" action="../search.html" method="get">
|
||||
<div class="search-wrapper">
|
||||
<span class="search-left"></span>
|
||||
<input class="prettysearch" type="text" name="q" size="18" />
|
||||
<span class="search-right"> </span>
|
||||
</div>
|
||||
<input type="submit" value="Search" class="searchbutton" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="reference">
|
||||
<h1>Reference<a class="headerlink" href="#reference" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="toctree-wrapper compound">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="management_commands.html">Management Commands</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="management_commands.html#import-categories">import_categories</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="management_commands.html#add-category-fields">add_category_fields</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="management_commands.html#drop-category-field">drop_category_field</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="models.html">Models</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="models.html#categorybase">CategoryBase</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="models.html#category">Category</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="settings.html">Settings</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="settings.html#allow-slug-change">ALLOW_SLUG_CHANGE</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="settings.html#slug-transliterator">SLUG_TRANSLITERATOR</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="settings.html#cache-view-length">CACHE_VIEW_LENGTH</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="settings.html#relation-models">RELATION_MODELS</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="settings.html#m2m-registry">M2M_REGISTRY</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="settings.html#fk-registry">FK_REGISTRY</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="settings.html#register-admin">REGISTER_ADMIN</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="settings.html#id8">THUMBNAIL_UPLOAD_PATH</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="settings.html#thumbnail-storage">THUMBNAIL_STORAGE</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="settings.html#javascript-url">JAVASCRIPT_URL</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="templatetags.html">Template tags and filters</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="templatetags.html#filters">Filters</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="templatetags.html#inclusion-tags">Inclusion tags</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="templatetags.html#template-tags">Template Tags</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>
|
||||
© Copyright 2010-2012, Corey Oordt.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
|
||||
</p>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div id="breadcrumbs">
|
||||
Reference
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="../_static/toc.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,136 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Management Commands — Django Categories v1.1 documentation</title>
|
||||
<link rel="stylesheet" href="../_static/default.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../',
|
||||
VERSION: '1.1',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="../_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="../_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="../_static/doctools.js"></script>
|
||||
<link rel="top" title="Django Categories v1.1 documentation" href="../index.html" />
|
||||
<link rel="up" title="Reference" href="index.html" />
|
||||
<link rel="next" title="Models" href="models.html" />
|
||||
<link rel="prev" title="Reference" href="index.html" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="docstitle">
|
||||
<p>Django Categories v1.1 documentation</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>Management Commands</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
<div class="headerButton"><a href="../genindex.html" title="General Index" accesskey="I">index</a></div>
|
||||
<div class="headerButton"><a href="models.html" title="Models" accesskey="N">next</a></div>
|
||||
<div class="headerButton"><a href="index.html" title="Reference" accesskey="P">previous</a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<ul><li class="toctree-l1"><a href="../index.html">Main Page</a></li></ul>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../getting_started.html">Getting Started</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../usage.html">Using categories in templates</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../registering_models.html">Registering Models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../adding_the_fields.html">Adding the fields to the database</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../custom_categories.html">Creating Custom Categories</a></li>
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Reference</a><ul class="current">
|
||||
<li class="toctree-l2 current"><a class="current reference internal" href="">Management Commands</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="models.html">Models</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="settings.html">Settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="templatetags.html">Template tags and filters</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="../_sources/reference/management_commands.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
<div id="searchbox" style="display: none">
|
||||
|
||||
<form class="search" action="../search.html" method="get">
|
||||
<div class="search-wrapper">
|
||||
<span class="search-left"></span>
|
||||
<input class="prettysearch" type="text" name="q" size="18" />
|
||||
<span class="search-right"> </span>
|
||||
</div>
|
||||
<input type="submit" value="Search" class="searchbutton" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="management-commands">
|
||||
<span id="id1"></span><h1>Management Commands<a class="headerlink" href="#management-commands" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="section" id="import-categories">
|
||||
<span id="id2"></span><h2>import_categories<a class="headerlink" href="#import-categories" title="Permalink to this headline">¶</a></h2>
|
||||
<p><strong>Usage:</strong> <tt class="docutils literal"><span class="pre">./manage.py</span> <span class="pre">import_categories</span> <span class="pre">/path/to/file.txt</span> <span class="pre">[/path/to/file2.txt]</span></tt></p>
|
||||
<p>Imports category tree(s) from a file. Sub categories must be indented by the same multiple of spaces or tabs. The first line in the file cannot start with a space or tab and you can’t mix spaces and tabs.</p>
|
||||
</div>
|
||||
<div class="section" id="add-category-fields">
|
||||
<span id="id3"></span><h2>add_category_fields<a class="headerlink" href="#add-category-fields" title="Permalink to this headline">¶</a></h2>
|
||||
<p><strong>Usage:</strong> <tt class="docutils literal"><span class="pre">./manage.py</span> <span class="pre">add_category_fields</span> <span class="pre">[app1</span> <span class="pre">app2</span> <span class="pre">...]</span></tt></p>
|
||||
<p>Add missing registered category fields to the database table of a specified application or all registered applications.</p>
|
||||
<p>Requires Django South.</p>
|
||||
</div>
|
||||
<div class="section" id="drop-category-field">
|
||||
<span id="id4"></span><h2>drop_category_field<a class="headerlink" href="#drop-category-field" title="Permalink to this headline">¶</a></h2>
|
||||
<p><strong>Usage:</strong> <tt class="docutils literal"><span class="pre">./manage.py</span> <span class="pre">drop_category_field</span> <span class="pre">app_name</span> <span class="pre">model_name</span> <span class="pre">field_name</span></tt></p>
|
||||
<p>Drop the <tt class="docutils literal"><span class="pre">field_name</span></tt> field from the <tt class="docutils literal"><span class="pre">app_name_model_name</span></tt> table, if the field is currently registered in <tt class="docutils literal"><span class="pre">CATEGORIES_SETTINGS</span></tt>.</p>
|
||||
<p>Requires Django South.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>
|
||||
© Copyright 2010-2012, Corey Oordt.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
|
||||
</p>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div id="breadcrumbs">
|
||||
<a href="index.html" accesskey="U">Reference</a><img src="../_static/triangle_closed.png" height="9" width="9" alt=">">
|
||||
Management Commands
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="../_static/toc.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,252 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Models — Django Categories v1.1 documentation</title>
|
||||
<link rel="stylesheet" href="../_static/default.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../',
|
||||
VERSION: '1.1',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="../_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="../_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="../_static/doctools.js"></script>
|
||||
<link rel="top" title="Django Categories v1.1 documentation" href="../index.html" />
|
||||
<link rel="up" title="Reference" href="index.html" />
|
||||
<link rel="next" title="Settings" href="settings.html" />
|
||||
<link rel="prev" title="Management Commands" href="management_commands.html" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="docstitle">
|
||||
<p>Django Categories v1.1 documentation</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>Models</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
<div class="headerButton"><a href="../genindex.html" title="General Index" accesskey="I">index</a></div>
|
||||
<div class="headerButton"><a href="settings.html" title="Settings" accesskey="N">next</a></div>
|
||||
<div class="headerButton"><a href="management_commands.html" title="Management Commands" accesskey="P">previous</a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<ul><li class="toctree-l1"><a href="../index.html">Main Page</a></li></ul>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../getting_started.html">Getting Started</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../usage.html">Using categories in templates</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../registering_models.html">Registering Models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../adding_the_fields.html">Adding the fields to the database</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../custom_categories.html">Creating Custom Categories</a></li>
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Reference</a><ul class="current">
|
||||
<li class="toctree-l2"><a class="reference internal" href="management_commands.html">Management Commands</a></li>
|
||||
<li class="toctree-l2 current"><a class="current reference internal" href="">Models</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="settings.html">Settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="templatetags.html">Template tags and filters</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="../_sources/reference/models.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
<div id="searchbox" style="display: none">
|
||||
|
||||
<form class="search" action="../search.html" method="get">
|
||||
<div class="search-wrapper">
|
||||
<span class="search-left"></span>
|
||||
<input class="prettysearch" type="text" name="q" size="18" />
|
||||
<span class="search-right"> </span>
|
||||
</div>
|
||||
<input type="submit" value="Search" class="searchbutton" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="models">
|
||||
<h1>Models<a class="headerlink" href="#models" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="section" id="categorybase">
|
||||
<h2>CategoryBase<a class="headerlink" href="#categorybase" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="class">
|
||||
<dt id="CategoryBase">
|
||||
<em class="property">class </em><tt class="descname">CategoryBase</tt><a class="headerlink" href="#CategoryBase" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><dl class="attribute">
|
||||
<dt id="CategoryBase.parent">
|
||||
<tt class="descname">parent</tt><a class="headerlink" href="#CategoryBase.parent" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><tt class="xref py py-class docutils literal"><span class="pre">TreeForeignKey</span></tt> <tt class="docutils literal"><span class="pre">(self)</span></tt></p>
|
||||
<p>The category’s parent category. Leave this blank for an root category.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="CategoryBase.name">
|
||||
<tt class="descname">name</tt><a class="headerlink" href="#CategoryBase.name" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><strong>Required</strong> <tt class="docutils literal"><span class="pre">CharField(100)</span></tt></p>
|
||||
<p>The name of the category.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="CategoryBase.slug">
|
||||
<tt class="descname">slug</tt><a class="headerlink" href="#CategoryBase.slug" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><strong>Required</strong> <tt class="docutils literal"><span class="pre">SlugField</span></tt></p>
|
||||
<p>URL-friendly title. It is automatically generated from the title.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="CategoryBase.active">
|
||||
<tt class="descname">active</tt><a class="headerlink" href="#CategoryBase.active" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><strong>Required</strong> <tt class="docutils literal"><span class="pre">BooleanField</span></tt> <em>default:</em> <tt class="xref docutils literal"><span class="pre">True</span></tt></p>
|
||||
<p>Is this item active. If it is inactive, all children are set to inactive as well.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="CategoryBase.objects">
|
||||
<tt class="descname">objects</tt><a class="headerlink" href="#CategoryBase.objects" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><tt class="docutils literal"><span class="pre">CategoryManager</span></tt></p>
|
||||
<p>An object manager that adds an <tt class="docutils literal"><span class="pre">active</span></tt> method for only selecting items whose <tt class="docutils literal"><span class="pre">active</span></tt> attribute is <tt class="xref docutils literal"><span class="pre">True</span></tt>.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="CategoryBase.tree">
|
||||
<tt class="descname">tree</tt><a class="headerlink" href="#CategoryBase.tree" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><tt class="docutils literal"><span class="pre">TreeManager</span></tt></p>
|
||||
<p>A Django-MPTT <a class="reference external" href="http://readthedocs.org/docs/django-mptt/en/latest/models.html#the-treemanager-custom-manager">TreeManager</a> instance.</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
<div class="section" id="category">
|
||||
<h2>Category<a class="headerlink" href="#category" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="class">
|
||||
<dt id="Category">
|
||||
<em class="property">class </em><tt class="descname">Category</tt><a class="headerlink" href="#Category" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Category is a subclass of <a class="reference internal" href="#CategoryBase" title="CategoryBase"><tt class="xref py py-class docutils literal"><span class="pre">CategoryBase</span></tt></a> and includes all its attributes.</p>
|
||||
<dl class="attribute">
|
||||
<dt id="Category.thumbnail">
|
||||
<tt class="descname">thumbnail</tt><a class="headerlink" href="#Category.thumbnail" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><tt class="docutils literal"><span class="pre">FileField</span></tt></p>
|
||||
<p>An optional thumbnail, that is uploaded to <a class="reference internal" href="settings.html#thumbnail-upload-path"><em>REGISTER_ADMIN</em></a> via <a class="reference internal" href="settings.html#thumbnail-storage"><em>THUMBNAIL_STORAGE</em></a>.</p>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p>Why isn’t this an <tt class="docutils literal"><span class="pre">ImageField</span></tt>?</p>
|
||||
<p>For <tt class="docutils literal"><span class="pre">ImageField</span></tt>s, Django checks the file system for the existance of the files to handle the height and width. In many cases this can lead to problems and impact performance.</p>
|
||||
<p class="last">For these reasons, a <tt class="docutils literal"><span class="pre">FileField</span></tt> that manually manages the width and height was chosen.</p>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="Category.thumbnail_width">
|
||||
<tt class="descname">thumbnail_width</tt><a class="headerlink" href="#Category.thumbnail_width" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><tt class="docutils literal"><span class="pre">IntegerField</span></tt></p>
|
||||
<p>The thumbnail width. Automatically set on save if a thumbnail is uploaded.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="Category.thumbnail_height">
|
||||
<tt class="descname">thumbnail_height</tt><a class="headerlink" href="#Category.thumbnail_height" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><tt class="docutils literal"><span class="pre">IntegerField</span></tt></p>
|
||||
<p>The thumbnail height. Automatically set on save if a thumbnail is uploaded.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="Category.order">
|
||||
<tt class="descname">order</tt><a class="headerlink" href="#Category.order" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><strong>Required</strong> <tt class="docutils literal"><span class="pre">IntegerField</span></tt> <em>default:</em> 0</p>
|
||||
<p>A manually-managed order of this category in the listing. Items with the same order are sorted alphabetically.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="Category.alternate_title">
|
||||
<tt class="descname">alternate_title</tt><a class="headerlink" href="#Category.alternate_title" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><tt class="docutils literal"><span class="pre">CharField(100)</span></tt></p>
|
||||
<p>An alternative title to use on pages with this category.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="Category.alternate_url">
|
||||
<tt class="descname">alternate_url</tt><a class="headerlink" href="#Category.alternate_url" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><tt class="docutils literal"><span class="pre">CharField(200)</span></tt></p>
|
||||
<p>An alternative URL to use instead of the one derived from the category hierarchy.</p>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p>Why isn’t this a <tt class="docutils literal"><span class="pre">URLField</span></tt>?</p>
|
||||
<p class="last">For <tt class="docutils literal"><span class="pre">URLField</span></tt>s, Django checks that the URL includes <tt class="docutils literal"><span class="pre">http://</span></tt> and the site name. This makes it impossible to use relative URLs in that field.</p>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="Category.description">
|
||||
<tt class="descname">description</tt><a class="headerlink" href="#Category.description" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><tt class="docutils literal"><span class="pre">TextField</span></tt></p>
|
||||
<p>An optional longer description of the category. Very useful on category landing pages.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="Category.meta_keywords">
|
||||
<tt class="descname">meta_keywords</tt><a class="headerlink" href="#Category.meta_keywords" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><tt class="docutils literal"><span class="pre">CharField(255)</span></tt></p>
|
||||
<p>Comma-separated keywords for search engines.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="Category.meta_extra">
|
||||
<tt class="descname">meta_extra</tt><a class="headerlink" href="#Category.meta_extra" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p><tt class="docutils literal"><span class="pre">TextField</span></tt></p>
|
||||
<p>(Advanced) Any additional HTML to be placed verbatim in the <tt class="docutils literal"><span class="pre"><head></span></tt> of the page.</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>
|
||||
© Copyright 2010-2012, Corey Oordt.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
|
||||
</p>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div id="breadcrumbs">
|
||||
<a href="index.html" accesskey="U">Reference</a><img src="../_static/triangle_closed.png" height="9" width="9" alt=">">
|
||||
Models
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="../_static/toc.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,198 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Settings — Django Categories v1.1 documentation</title>
|
||||
<link rel="stylesheet" href="../_static/default.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../',
|
||||
VERSION: '1.1',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="../_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="../_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="../_static/doctools.js"></script>
|
||||
<link rel="top" title="Django Categories v1.1 documentation" href="../index.html" />
|
||||
<link rel="up" title="Reference" href="index.html" />
|
||||
<link rel="next" title="Template tags and filters" href="templatetags.html" />
|
||||
<link rel="prev" title="Models" href="models.html" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="docstitle">
|
||||
<p>Django Categories v1.1 documentation</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>Settings</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
<div class="headerButton"><a href="../genindex.html" title="General Index" accesskey="I">index</a></div>
|
||||
<div class="headerButton"><a href="templatetags.html" title="Template tags and filters" accesskey="N">next</a></div>
|
||||
<div class="headerButton"><a href="models.html" title="Models" accesskey="P">previous</a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<ul><li class="toctree-l1"><a href="../index.html">Main Page</a></li></ul>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../getting_started.html">Getting Started</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../usage.html">Using categories in templates</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../registering_models.html">Registering Models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../adding_the_fields.html">Adding the fields to the database</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../custom_categories.html">Creating Custom Categories</a></li>
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Reference</a><ul class="current">
|
||||
<li class="toctree-l2"><a class="reference internal" href="management_commands.html">Management Commands</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="models.html">Models</a></li>
|
||||
<li class="toctree-l2 current"><a class="current reference internal" href="">Settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="templatetags.html">Template tags and filters</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="../_sources/reference/settings.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
<div id="searchbox" style="display: none">
|
||||
|
||||
<form class="search" action="../search.html" method="get">
|
||||
<div class="search-wrapper">
|
||||
<span class="search-left"></span>
|
||||
<input class="prettysearch" type="text" name="q" size="18" />
|
||||
<span class="search-right"> </span>
|
||||
</div>
|
||||
<input type="submit" value="Search" class="searchbutton" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="settings">
|
||||
<span id="reference-settings"></span><h1>Settings<a class="headerlink" href="#settings" title="Permalink to this headline">¶</a></h1>
|
||||
<p>The <tt class="docutils literal"><span class="pre">CATEGORIES_SETTINGS</span></tt> dictionary is where you can override the default settings. You don’t have to include all the settings; only the ones which you want to override.</p>
|
||||
<div class="contents local topic" id="contents">
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#allow-slug-change" id="id11">ALLOW_SLUG_CHANGE</a></li>
|
||||
<li><a class="reference internal" href="#slug-transliterator" id="id12">SLUG_TRANSLITERATOR</a></li>
|
||||
<li><a class="reference internal" href="#cache-view-length" id="id13">CACHE_VIEW_LENGTH</a></li>
|
||||
<li><a class="reference internal" href="#relation-models" id="id14">RELATION_MODELS</a></li>
|
||||
<li><a class="reference internal" href="#m2m-registry" id="id15">M2M_REGISTRY</a></li>
|
||||
<li><a class="reference internal" href="#fk-registry" id="id16">FK_REGISTRY</a></li>
|
||||
<li><a class="reference internal" href="#register-admin" id="id17">REGISTER_ADMIN</a></li>
|
||||
<li><a class="reference internal" href="#id8" id="id18">THUMBNAIL_UPLOAD_PATH</a></li>
|
||||
<li><a class="reference internal" href="#thumbnail-storage" id="id19">THUMBNAIL_STORAGE</a></li>
|
||||
<li><a class="reference internal" href="#javascript-url" id="id20">JAVASCRIPT_URL</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<p>The default settings are:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">CATEGORIES_SETTINGS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s">'ALLOW_SLUG_CHANGE'</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span>
|
||||
<span class="s">'CACHE_VIEW_LENGTH'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
|
||||
<span class="s">'RELATION_MODELS'</span><span class="p">:</span> <span class="p">[],</span>
|
||||
<span class="s">'M2M_REGISTRY'</span><span class="p">:</span> <span class="p">{},</span>
|
||||
<span class="s">'FK_REGISTRY'</span><span class="p">:</span> <span class="p">{},</span>
|
||||
<span class="s">'THUMBNAIL_UPLOAD_PATH'</span><span class="p">:</span> <span class="s">'uploads/categories/thumbnails'</span><span class="p">,</span>
|
||||
<span class="s">'THUMBNAIL_STORAGE'</span><span class="p">:</span> <span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_FILE_STORAGE</span><span class="p">,</span>
|
||||
<span class="s">'SLUG_TRANSLITERATOR'</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="section" id="allow-slug-change">
|
||||
<span id="id1"></span><h2><a class="toc-backref" href="#id11">ALLOW_SLUG_CHANGE</a><a class="headerlink" href="#allow-slug-change" title="Permalink to this headline">¶</a></h2>
|
||||
<p><strong>Default:</strong> <tt class="xref docutils literal"><span class="pre">False</span></tt></p>
|
||||
<p><strong>Description:</strong> Changing the slug for a category can have serious consequences if it is used as part of a URL. Setting this to <tt class="xref docutils literal"><span class="pre">True</span></tt> will allow users to change the slug of a category.</p>
|
||||
</div>
|
||||
<div class="section" id="slug-transliterator">
|
||||
<span id="id2"></span><h2><a class="toc-backref" href="#id12">SLUG_TRANSLITERATOR</a><a class="headerlink" href="#slug-transliterator" title="Permalink to this headline">¶</a></h2>
|
||||
<p><strong>Default:</strong> <tt class="docutils literal"><span class="pre">lambda</span> <span class="pre">x:</span> <span class="pre">x</span></tt></p>
|
||||
<p><strong>Description:</strong> Allows the specification of a function to convert non-ASCII characters in the potential slug to ASCII characters. Allows specifying a <tt class="docutils literal"><span class="pre">callable()</span></tt> or a string in the form of <tt class="docutils literal"><span class="pre">'path.to.module.function'</span></tt>.</p>
|
||||
<p>A great tool for this is <a class="reference external" href="http://pypi.python.org/pypi/Unidecode">Unidecode</a>. Use it by setting <tt class="docutils literal"><span class="pre">SLUG_TRANSLITERATOR</span></tt> to <tt class="docutils literal"><span class="pre">'unidecode.unidecode</span></tt>.</p>
|
||||
</div>
|
||||
<div class="section" id="cache-view-length">
|
||||
<span id="id3"></span><h2><a class="toc-backref" href="#id13">CACHE_VIEW_LENGTH</a><a class="headerlink" href="#cache-view-length" title="Permalink to this headline">¶</a></h2>
|
||||
<p><strong>Default:</strong> <tt class="docutils literal"><span class="pre">0</span></tt></p>
|
||||
<p><strong>Description:</strong> This setting will be deprecated soon, but in the mean time, it allows you to specify the amount of time each view result is cached.</p>
|
||||
</div>
|
||||
<div class="section" id="relation-models">
|
||||
<span id="id4"></span><h2><a class="toc-backref" href="#id14">RELATION_MODELS</a><a class="headerlink" href="#relation-models" title="Permalink to this headline">¶</a></h2>
|
||||
<p><strong>Default:</strong> <tt class="docutils literal"><span class="pre">[]</span></tt></p>
|
||||
<p><strong>Description:</strong> Relation models is a set of models that a user can associate with this category. You specify models using <tt class="docutils literal"><span class="pre">'app_name.modelname'</span></tt> syntax.</p>
|
||||
</div>
|
||||
<div class="section" id="m2m-registry">
|
||||
<span id="id5"></span><h2><a class="toc-backref" href="#id15">M2M_REGISTRY</a><a class="headerlink" href="#m2m-registry" title="Permalink to this headline">¶</a></h2>
|
||||
<p><strong>Default:</strong> {}</p>
|
||||
<p><strong>Description:</strong> A dictionary where the keys are in <tt class="docutils literal"><span class="pre">'app_name.model_name'</span></tt> syntax, and the values are a string, dict, or tuple of dicts. See <a class="reference internal" href="../registering_models.html#registering-models"><em>Registering Models</em></a>.</p>
|
||||
</div>
|
||||
<div class="section" id="fk-registry">
|
||||
<span id="id6"></span><h2><a class="toc-backref" href="#id16">FK_REGISTRY</a><a class="headerlink" href="#fk-registry" title="Permalink to this headline">¶</a></h2>
|
||||
<p><strong>Default:</strong> {}</p>
|
||||
<p><strong>Description:</strong> A dictionary where the keys are in <tt class="docutils literal"><span class="pre">'app_name.model_name'</span></tt> syntax, and the values are a string, dict, or tuple of dicts. See <a class="reference internal" href="../registering_models.html#registering-models"><em>Registering Models</em></a>.</p>
|
||||
</div>
|
||||
<div class="section" id="register-admin">
|
||||
<span id="thumbnail-upload-path"></span><span id="id7"></span><h2><a class="toc-backref" href="#id17">REGISTER_ADMIN</a><a class="headerlink" href="#register-admin" title="Permalink to this headline">¶</a></h2>
|
||||
<p><strong>Default:</strong> <tt class="xref docutils literal"><span class="pre">True</span></tt></p>
|
||||
<p><strong>Description:</strong> If you write your own category class by subclassing <tt class="docutils literal"><span class="pre">CategoryBase</span></tt> then you probably have no use for registering the default <tt class="docutils literal"><span class="pre">Category</span></tt> class in the admin.</p>
|
||||
</div>
|
||||
<div class="section" id="id8">
|
||||
<h2><a class="toc-backref" href="#id18">THUMBNAIL_UPLOAD_PATH</a><a class="headerlink" href="#id8" title="Permalink to this headline">¶</a></h2>
|
||||
<p><strong>Default:</strong> <tt class="docutils literal"><span class="pre">'uploads/categories/thumbnails'</span></tt></p>
|
||||
<p><strong>Description:</strong> Where thumbnails for the categories will be saved.</p>
|
||||
</div>
|
||||
<div class="section" id="thumbnail-storage">
|
||||
<span id="id9"></span><h2><a class="toc-backref" href="#id19">THUMBNAIL_STORAGE</a><a class="headerlink" href="#thumbnail-storage" title="Permalink to this headline">¶</a></h2>
|
||||
<p><strong>Default:</strong> <tt class="docutils literal"><span class="pre">settings.DEFAULT_FILE_STORAGE</span></tt></p>
|
||||
<p><strong>Description:</strong> How to store the thumbnails. Allows for external storage engines like S3.</p>
|
||||
</div>
|
||||
<div class="section" id="javascript-url">
|
||||
<span id="id10"></span><h2><a class="toc-backref" href="#id20">JAVASCRIPT_URL</a><a class="headerlink" href="#javascript-url" title="Permalink to this headline">¶</a></h2>
|
||||
<p><strong>Default:</strong> <tt class="docutils literal"><span class="pre">STATIC_URL</span> <span class="pre">or</span> <span class="pre">MEDIA_URL</span> <span class="pre">+</span> <span class="pre">'js/'</span></tt></p>
|
||||
<p><strong>Description:</strong> Allows for customization of javascript placement.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>
|
||||
© Copyright 2010-2012, Corey Oordt.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
|
||||
</p>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div id="breadcrumbs">
|
||||
<a href="index.html" accesskey="U">Reference</a><img src="../_static/triangle_closed.png" height="9" width="9" alt=">">
|
||||
Settings
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="../_static/toc.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,393 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Template tags and filters — Django Categories v1.1 documentation</title>
|
||||
<link rel="stylesheet" href="../_static/default.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../',
|
||||
VERSION: '1.1',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="../_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="../_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="../_static/doctools.js"></script>
|
||||
<link rel="top" title="Django Categories v1.1 documentation" href="../index.html" />
|
||||
<link rel="up" title="Reference" href="index.html" />
|
||||
<link rel="prev" title="Settings" href="settings.html" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="docstitle">
|
||||
<p>Django Categories v1.1 documentation</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>Template tags and filters</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
<div class="headerButton"><a href="../genindex.html" title="General Index" accesskey="I">index</a></div>
|
||||
<div class="headerButton"><a href="settings.html" title="Settings" accesskey="P">previous</a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<ul><li class="toctree-l1"><a href="../index.html">Main Page</a></li></ul>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../getting_started.html">Getting Started</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../usage.html">Using categories in templates</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../registering_models.html">Registering Models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../adding_the_fields.html">Adding the fields to the database</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../custom_categories.html">Creating Custom Categories</a></li>
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Reference</a><ul class="current">
|
||||
<li class="toctree-l2"><a class="reference internal" href="management_commands.html">Management Commands</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="models.html">Models</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="settings.html">Settings</a></li>
|
||||
<li class="toctree-l2 current"><a class="current reference internal" href="">Template tags and filters</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="../_sources/reference/templatetags.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
<div id="searchbox" style="display: none">
|
||||
|
||||
<form class="search" action="../search.html" method="get">
|
||||
<div class="search-wrapper">
|
||||
<span class="search-left"></span>
|
||||
<input class="prettysearch" type="text" name="q" size="18" />
|
||||
<span class="search-right"> </span>
|
||||
</div>
|
||||
<input type="submit" value="Search" class="searchbutton" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="template-tags-and-filters">
|
||||
<h1>Template tags and filters<a class="headerlink" href="#template-tags-and-filters" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="contents local topic" id="contents">
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#filters" id="id2">Filters</a><ul>
|
||||
<li><a class="reference internal" href="#category-path" id="id3"><tt class="docutils literal"><span class="pre">category_path</span></tt></a></li>
|
||||
<li><a class="reference internal" href="#tree-info" id="id4"><tt class="docutils literal"><span class="pre">tree_info</span></tt></a></li>
|
||||
<li><a class="reference internal" href="#tree-queryset" id="id5"><tt class="docutils literal"><span class="pre">tree_queryset</span></tt></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#inclusion-tags" id="id6">Inclusion tags</a><ul>
|
||||
<li><a class="reference internal" href="#display-path-as-ul" id="id7"><tt class="docutils literal"><span class="pre">display_path_as_ul</span></tt></a></li>
|
||||
<li><a class="reference internal" href="#display-drilldown-as-ul" id="id8"><tt class="docutils literal"><span class="pre">display_drilldown_as_ul</span></tt></a></li>
|
||||
<li><a class="reference internal" href="#breadcrumbs-tag" id="id9"><tt class="docutils literal"><span class="pre">breadcrumbs</span> <span class="pre">tag</span></tt></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#template-tags" id="id10">Template Tags</a><ul>
|
||||
<li><a class="reference internal" href="#get-top-level-categories" id="id11"><tt class="docutils literal"><span class="pre">get_top_level_categories</span></tt></a></li>
|
||||
<li><a class="reference internal" href="#get-category-drilldown" id="id12"><tt class="docutils literal"><span class="pre">get_category_drilldown</span></tt></a></li>
|
||||
<li><a class="reference internal" href="#recursetree" id="id13"><tt class="docutils literal"><span class="pre">recursetree</span></tt></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="filters">
|
||||
<h2><a class="toc-backref" href="#contents">Filters</a><a class="headerlink" href="#filters" title="Permalink to this headline">¶</a></h2>
|
||||
<div class="section" id="category-path">
|
||||
<h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">category_path</span></tt></a><a class="headerlink" href="#category-path" title="Permalink to this headline">¶</a></h3>
|
||||
<p><strong>Optional Parameter:</strong> separator string. <em>Default:</em> <tt class="docutils literal"><span class="pre">"</span> <span class="pre">::</span> <span class="pre">"</span></tt></p>
|
||||
<p>Creates a path represented by a categories by joining the items with a separator.</p>
|
||||
<p>Each path item will be coerced to unicode, so you can pass a list of category instances, if required.</p>
|
||||
<p><strong>Example using a list of categories:</strong></p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{{</span> <span class="nv">some_list</span><span class="o">|</span><span class="nf">category_path</span> <span class="cp">}}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>If <tt class="docutils literal"><span class="pre">some_list</span></tt> is <tt class="docutils literal"><span class="pre">[</span> <span class="pre"><Category:</span> <span class="pre">Country>,</span> <span class="pre"><Category:</span> <span class="pre">Country</span> <span class="pre">pop>,</span> <span class="pre"><Category:</span> <span class="pre">Urban</span> <span class="pre">Cowboy>]</span></tt> the result will be:</p>
|
||||
<div class="highlight-python"><pre>Country :: Country pop :: Urban Cowboy</pre>
|
||||
</div>
|
||||
<p><strong>Example using a category node and optional separator parameter:</strong></p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{{</span> <span class="nv">some_node.get_ancestors</span><span class="o">|</span><span class="nf">category_path</span><span class="s2">:" > "</span> <span class="cp">}}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>If <tt class="docutils literal"><span class="pre">some_node</span></tt> was category “Urban Cowboy”, the result will be:</p>
|
||||
<div class="highlight-python"><pre>Country > Country pop > Urban Cowboy</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="tree-info">
|
||||
<span id="id1"></span><h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">tree_info</span></tt></a><a class="headerlink" href="#tree-info" title="Permalink to this headline">¶</a></h3>
|
||||
<p><strong>Optional Parameter:</strong> <tt class="docutils literal"><span class="pre">"ancestors"</span></tt></p>
|
||||
<p>Given a list of categories, it iterates over the list, generating a tuple of the current category and a dict containing information about the tree structure around it, with the following keys:</p>
|
||||
<dl class="docutils">
|
||||
<dt><tt class="docutils literal"><span class="pre">'new_level'</span></tt></dt>
|
||||
<dd><tt class="xref docutils literal"><span class="pre">True</span></tt> if the current item is the start of a new level in the tree, <tt class="xref docutils literal"><span class="pre">False</span></tt> otherwise.</dd>
|
||||
<dt><tt class="docutils literal"><span class="pre">'closed_levels'</span></tt></dt>
|
||||
<dd>A list of levels which end after the current item. This will be an empty list if the next category’s level is the same as or greater than the level of the current item.</dd>
|
||||
</dl>
|
||||
<p>Provide the optional argument, <tt class="docutils literal"><span class="pre">"ancestors"</span></tt>, to add a list of unicode representations of the ancestors of the current category, in descending order (root node first, immediate parent last), under the key ‘ancestors’.</p>
|
||||
<p>For example: given the sample tree below, the contents of the list which would be available under the ‘ancestors’ key are given on the right:</p>
|
||||
<div class="highlight-python"><pre>Country -> []
|
||||
Country pop -> [u'Country pop']
|
||||
Urban Cowboy -> [u'Country', u'Country pop']</pre>
|
||||
</div>
|
||||
<p>Using this filter with unpacking in a {% for %} tag, you should have enough information about the tree structure to create a hierarchical representation of the tree.</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">for</span> <span class="nv">node</span><span class="o">,</span><span class="nv">structure</span> <span class="k">in</span> <span class="nv">objects</span><span class="o">|</span><span class="nf">tree_info</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> </span><span class="cp">{%</span> <span class="k">if</span> <span class="nv">structure.new_level</span> <span class="cp">%}</span><span class="x"><ul><li></span><span class="cp">{%</span> <span class="k">else</span> <span class="cp">%}</span><span class="x"></li><li></span><span class="cp">{%</span> <span class="k">endif</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> </span><span class="cp">{{</span> <span class="nv">node.name</span> <span class="cp">}}</span><span class="x"></span>
|
||||
<span class="x"> </span><span class="cp">{%</span> <span class="k">for</span> <span class="nv">level</span> <span class="k">in</span> <span class="nv">structure.closed_levels</span> <span class="cp">%}</span><span class="x"></li></ul></span><span class="cp">{%</span> <span class="k">endfor</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="cp">{%</span> <span class="k">endfor</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="tree-queryset">
|
||||
<h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">tree_queryset</span></tt></a><a class="headerlink" href="#tree-queryset" title="Permalink to this headline">¶</a></h3>
|
||||
<p>Convert a regular category <tt class="xref py py-class docutils literal"><span class="pre">QuerySet</span></tt> into a new, ordered <tt class="xref py py-class docutils literal"><span class="pre">QuerySet</span></tt> that includes the categories selected and their ancestors.</p>
|
||||
<p>This is especially helpful when you have a subset of categories and want to show the hierarchy for all the items.</p>
|
||||
<p>For example, if we add it to the example for <a class="reference internal" href="#tree-info"><em>tree_info</em></a>:</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">for</span> <span class="nv">node</span><span class="o">,</span><span class="nv">structure</span> <span class="k">in</span> <span class="nv">objects</span><span class="o">|</span><span class="nf">tree_queryset</span><span class="o">|</span><span class="nf">tree_info</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> </span><span class="cp">{%</span> <span class="k">if</span> <span class="nv">structure.new_level</span> <span class="cp">%}</span><span class="x"><ul><li></span><span class="cp">{%</span> <span class="k">else</span> <span class="cp">%}</span><span class="x"></li><li></span><span class="cp">{%</span> <span class="k">endif</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> </span><span class="cp">{{</span> <span class="nv">node.name</span> <span class="cp">}}</span><span class="x"></span>
|
||||
<span class="x"> </span><span class="cp">{%</span> <span class="k">for</span> <span class="nv">level</span> <span class="k">in</span> <span class="nv">structure.closed_levels</span> <span class="cp">%}</span><span class="x"></li></ul></span><span class="cp">{%</span> <span class="k">endfor</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="cp">{%</span> <span class="k">endfor</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>A list of unrelated categories such as <tt class="docutils literal"><span class="pre">[<Category:</span> <span class="pre">Urban</span> <span class="pre">cowboy>,</span> <span class="pre"><Category:</span> <span class="pre">Urban</span> <span class="pre">comtemporary>]</span></tt>, the above template example will output the two categories and their ancestors:</p>
|
||||
<div class="highlight-html"><div class="highlight"><pre><span class="nt"><ul><li></span>
|
||||
Country
|
||||
<span class="nt"><ul><li></span>
|
||||
Country pop
|
||||
<span class="nt"><ul><li></span>
|
||||
Urban cowboy
|
||||
<span class="nt"></li></ul></li></ul></li></ul></span>
|
||||
<span class="nt"><ul><li></span>
|
||||
Rhythm and blues
|
||||
<span class="nt"><ul><li></span>
|
||||
Urban contemporary
|
||||
<span class="nt"></li></ul></li></ul></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">Categories that have similar ancestors are grouped accordingly. There is no duplication of the ancestor tree.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="inclusion-tags">
|
||||
<h2><a class="toc-backref" href="#contents">Inclusion tags</a><a class="headerlink" href="#inclusion-tags" title="Permalink to this headline">¶</a></h2>
|
||||
<div class="section" id="display-path-as-ul">
|
||||
<h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">display_path_as_ul</span></tt></a><a class="headerlink" href="#display-path-as-ul" title="Permalink to this headline">¶</a></h3>
|
||||
<p><strong>Template Rendered:</strong> <tt class="docutils literal"><span class="pre">categories/ul_tree.html</span></tt></p>
|
||||
<p><strong>Syntax 1:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">display_path_as_ul</span> <span class="pre"><category_obj></span> <span class="pre">%}</span></tt></p>
|
||||
<p><strong>Syntax 2:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">display_path_as_ul</span> <span class="pre"><path_string>[</span> <span class="pre">using="app.Model"]</span> <span class="pre">%}</span></tt></p>
|
||||
<p>Render the category with ancestors, but no children.</p>
|
||||
<p>Pass either an object that subclasses <a class="reference internal" href="models.html#CategoryBase" title="CategoryBase"><tt class="xref py py-class docutils literal"><span class="pre">CategoryBase</span></tt></a> or a path string for the category. Add <tt class="docutils literal"><span class="pre">using="app.Model"</span></tt> to specify which model when using a path string. The default model used is <a class="reference internal" href="models.html#Category" title="Category"><tt class="xref py py-class docutils literal"><span class="pre">Category</span></tt></a>.</p>
|
||||
<p><strong>Example, using Category model:</strong></p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_path_as_ul</span> <span class="s2">"/Grandparent/Parent"</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><strong>Example, using custom model:</strong></p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_path_as_ul</span> <span class="s2">"/Grandparent/Parent"</span> <span class="nv">using</span><span class="o">=</span><span class="s2">"coolapp.MusicGenre"</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><strong>Example, using an object:</strong></p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_path_as_ul</span> <span class="nv">category_obj</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Returns:</p>
|
||||
<div class="highlight-html"><div class="highlight"><pre><span class="nt"><ul></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/"</span><span class="nt">></span>Top<span class="nt"></a></span>
|
||||
<span class="nt"><ul></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/"</span><span class="nt">></span>Grandparent<span class="nt"></a></li></span>
|
||||
<span class="nt"></ul></span>
|
||||
<span class="nt"></li></span>
|
||||
<span class="nt"></ul></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="display-drilldown-as-ul">
|
||||
<h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">display_drilldown_as_ul</span></tt></a><a class="headerlink" href="#display-drilldown-as-ul" title="Permalink to this headline">¶</a></h3>
|
||||
<p><strong>Template rendered:</strong> <tt class="docutils literal"><span class="pre">categories/ul_tree.html</span></tt></p>
|
||||
<p><strong>Syntax 1:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">display_drilldown_as_ul</span> <span class="pre">category_obj</span> <span class="pre">%}</span></tt></p>
|
||||
<p><strong>Syntax 2:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">display_drilldown_as_ul</span> <span class="pre">"/Grandparent/Parent"</span> <span class="pre">[using="app.Model"]</span> <span class="pre">%}</span></tt></p>
|
||||
<p>Render the category with ancestors and children.</p>
|
||||
<p><strong>Example, using Category model:</strong></p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_drilldown_as_ul</span> <span class="s2">"/Grandparent/Parent"</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><strong>Example, using custom model:</strong></p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_drilldown_as_ul</span> <span class="s2">"/Grandparent/Parent"</span> <span class="nv">using</span><span class="o">=</span><span class="s2">"coolapp.MusicGenre"</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><strong>Example, using an object:</strong></p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_drilldown_as_ul</span> <span class="nv">category_obj</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Returns:</p>
|
||||
<div class="highlight-html"><div class="highlight"><pre><span class="nt"><ul></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/"</span><span class="nt">></span>Top<span class="nt"></a></span>
|
||||
<span class="nt"><ul></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/"</span><span class="nt">></span>Grandparent<span class="nt"></a></span>
|
||||
<span class="nt"><ul></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/parent/"</span><span class="nt">></span>Parent<span class="nt"></a></span>
|
||||
<span class="nt"><ul></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/parent/child1"</span><span class="nt">></span>Child1<span class="nt"></a></li></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/parent/child2"</span><span class="nt">></span>Child2<span class="nt"></a></li></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/parent/child3"</span><span class="nt">></span>Child3<span class="nt"></a></li></span>
|
||||
<span class="nt"></ul></span>
|
||||
<span class="nt"></li></span>
|
||||
<span class="nt"></ul></span>
|
||||
<span class="nt"></li></span>
|
||||
<span class="nt"></ul></span>
|
||||
<span class="nt"></li></span>
|
||||
<span class="nt"></ul></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="breadcrumbs-tag">
|
||||
<h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">breadcrumbs</span> <span class="pre">tag</span></tt></a><a class="headerlink" href="#breadcrumbs-tag" title="Permalink to this headline">¶</a></h3>
|
||||
<p><strong>Template rendered:</strong> <tt class="docutils literal"><span class="pre">categories/breadcrumbs.html</span></tt></p>
|
||||
<p><strong>Syntax 1:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">breadcrumbs</span> <span class="pre">category_obj</span> <span class="pre">[separator="</span> <span class="pre">::</span> <span class="pre">"]</span> <span class="pre">%}</span></tt></p>
|
||||
<p><strong>Syntax 2:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">breadcrumbs</span> <span class="pre">"/Grandparent/Parent"</span> <span class="pre">[separator="</span> <span class="pre">::</span> <span class="pre">"]</span> <span class="pre">[using="app.Model"]</span> <span class="pre">%}</span></tt></p>
|
||||
<p>Render breadcrumbs for the given path using <tt class="docutils literal"><span class="pre">::</span></tt> or the given separator.</p>
|
||||
<p><strong>Example using Category model:</strong></p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">breadcrumbs</span> <span class="s2">"/Grandparent/Parent"</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><strong>Example using a custom model:</strong></p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">breadcrumbs</span> <span class="s2">"/Grandparent/Parent"</span> <span class="nv">using</span><span class="o">=</span><span class="s2">"coolapp.MusicGenre"</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><strong>Example using an object:</strong></p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">breadcrumbs</span> <span class="nv">category_obj</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Returns:</p>
|
||||
<div class="highlight-html"><div class="highlight"><pre><span class="nt"><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/"</span><span class="nt">></span>Grandparent<span class="nt"></a></span> / Parent
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>You can alter the separator used in the template by adding a separator argument:</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">breadcrumbs</span> <span class="nv">category_obj</span> <span class="nv">separator</span><span class="o">=</span><span class="s2">" &gt; "</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Returns:</p>
|
||||
<div class="highlight-html"><div class="highlight"><pre><span class="nt"><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/"</span><span class="nt">></span>Grandparent<span class="nt"></a></span> <span class="ni">&gt;</span> Parent
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="template-tags">
|
||||
<h2><a class="toc-backref" href="#contents">Template Tags</a><a class="headerlink" href="#template-tags" title="Permalink to this headline">¶</a></h2>
|
||||
<div class="section" id="get-top-level-categories">
|
||||
<h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">get_top_level_categories</span></tt></a><a class="headerlink" href="#get-top-level-categories" title="Permalink to this headline">¶</a></h3>
|
||||
<p>Retrieves an alphabetical list of all the categories that have no parents.</p>
|
||||
<p>Syntax:</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">get_top_level_categories</span> <span class="o">[</span><span class="nv">using</span> <span class="s2">"app.Model"</span><span class="o">]</span> <span class="k">as</span> <span class="nv">categories</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Returns an list of categories <tt class="docutils literal"><span class="pre">[<category>,</span> <span class="pre"><category>,</span> <span class="pre"><category,</span> <span class="pre">...]</span></tt></p>
|
||||
</div>
|
||||
<div class="section" id="get-category-drilldown">
|
||||
<h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">get_category_drilldown</span></tt></a><a class="headerlink" href="#get-category-drilldown" title="Permalink to this headline">¶</a></h3>
|
||||
<p><strong>Syntax 1:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">get_category_drilldown</span> <span class="pre"><path_string></span> <span class="pre">[using</span> <span class="pre">"app.Model"]</span> <span class="pre">as</span> <span class="pre"><varname></span> <span class="pre">%}</span></tt></p>
|
||||
<p><strong>Syntax 2:</strong> <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">get_category_drilldown</span> <span class="pre"><object></span> <span class="pre">as</span> <span class="pre"><varname></span> <span class="pre">%}</span></tt></p>
|
||||
<p>Retrieves the specified category, its ancestors and its immediate children as an iterable. Syntax 1 allows for the retrieval of the category object via a slash-delimited path. The optional <tt class="docutils literal"><span class="pre">using</span> <span class="pre">"app.Model"</span></tt> allows you to specify from which model to retrieve the object.</p>
|
||||
<p>Example:</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">get_category_drilldown</span> <span class="s2">"/Grandparent/Parent"</span> <span class="nv">using</span> <span class="s2">"family.Member"</span> <span class="k">as</span> <span class="nv">family</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>The second syntax uses an instance of any object that subclasses <a class="reference internal" href="models.html#CategoryBase" title="CategoryBase"><tt class="xref py py-class docutils literal"><span class="pre">CategoryBase</span></tt></a></p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">get_category_drilldown</span> <span class="nv">category_obj</span> <span class="k">as</span> <span class="nv">family</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Both examples sets <tt class="docutils literal"><span class="pre">family</span></tt> to:</p>
|
||||
<div class="highlight-python"><pre>[Grandparent, Parent, Child 1, Child 2, Child n]</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="recursetree">
|
||||
<h3><a class="toc-backref" href="#contents"><tt class="docutils literal"><span class="pre">recursetree</span></tt></a><a class="headerlink" href="#recursetree" title="Permalink to this headline">¶</a></h3>
|
||||
<p>This tag renders a section of your template recursively for each node in your
|
||||
tree.</p>
|
||||
<p>For example:</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="x"><ul class="root"></span>
|
||||
<span class="x"> </span><span class="cp">{%</span> <span class="k">recursetree</span> <span class="nv">nodes</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> <li></span>
|
||||
<span class="x"> </span><span class="cp">{{</span> <span class="nv">node.name</span> <span class="cp">}}</span><span class="x"></span>
|
||||
<span class="x"> </span><span class="cp">{%</span> <span class="k">if</span> <span class="k">not</span> <span class="nv">node.is_leaf_node</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> <ul class="children"></span>
|
||||
<span class="x"> </span><span class="cp">{{</span> <span class="nv">children</span> <span class="cp">}}</span><span class="x"></span>
|
||||
<span class="x"> </ul></span>
|
||||
<span class="x"> </span><span class="cp">{%</span> <span class="k">endif</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> </li></span>
|
||||
<span class="x"> </span><span class="cp">{%</span> <span class="k">endrecursetree</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"></ul></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Note the special variables <tt class="docutils literal"><span class="pre">node</span></tt> and <tt class="docutils literal"><span class="pre">children</span></tt>.
|
||||
These are magically inserted into your context while you’re inside the
|
||||
<tt class="docutils literal"><span class="pre">recursetree</span></tt> tag.</p>
|
||||
<blockquote>
|
||||
<div><p><tt class="docutils literal"><span class="pre">node</span></tt> is an instance of your MPTT model.</p>
|
||||
<p><tt class="docutils literal"><span class="pre">children</span></tt> : This variable holds the rendered HTML for the children of
|
||||
<tt class="docutils literal"><span class="pre">node</span></tt>.</p>
|
||||
</div></blockquote>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p>If you already have variables called <tt class="docutils literal"><span class="pre">node</span></tt> or <tt class="docutils literal"><span class="pre">children</span></tt> in your
|
||||
template, and you need to access them inside the <tt class="docutils literal"><span class="pre">recursetree</span></tt> block,
|
||||
you’ll need to alias them to some other name first:</p>
|
||||
<div class="last highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">with</span> <span class="nv">node</span> <span class="k">as</span> <span class="nv">friendly_node</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> </span><span class="cp">{%</span> <span class="k">recursetree</span> <span class="nv">nodes</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> </span><span class="cp">{{</span> <span class="nv">node.name</span> <span class="cp">}}</span><span class="x"> is friends with </span><span class="cp">{{</span> <span class="nv">friendly_node.name</span> <span class="cp">}}</span><span class="x"></span>
|
||||
<span class="x"> </span><span class="cp">{{</span> <span class="nv">children</span> <span class="cp">}}</span><span class="x"></span>
|
||||
<span class="x"> </span><span class="cp">{%</span> <span class="k">endrecursetree</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="cp">{%</span> <span class="k">endwith</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>
|
||||
© Copyright 2010-2012, Corey Oordt.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
|
||||
</p>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div id="breadcrumbs">
|
||||
<a href="index.html" accesskey="U">Reference</a><img src="../_static/triangle_closed.png" height="9" width="9" alt=">">
|
||||
Template tags and filters
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="../_static/toc.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,249 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Registering Models — Django Categories v1.1 documentation</title>
|
||||
<link rel="stylesheet" href="_static/default.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '1.1',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<link rel="top" title="Django Categories v1.1 documentation" href="index.html" />
|
||||
<link rel="next" title="Adding the fields to the database" href="adding_the_fields.html" />
|
||||
<link rel="prev" title="Using categories in templates" href="usage.html" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="docstitle">
|
||||
<p>Django Categories v1.1 documentation</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>Registering Models</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
<div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
|
||||
<div class="headerButton"><a href="adding_the_fields.html" title="Adding the fields to the database" accesskey="N">next</a></div>
|
||||
<div class="headerButton"><a href="usage.html" title="Using categories in templates" accesskey="P">previous</a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="getting_started.html">Getting Started</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Using categories in templates</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Registering Models</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#registering-models-in-settings-py">Registering models in settings.py</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#registering-a-many-to-one-relationship">Registering a many-to-one relationship</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#registering-a-many-to-many-relationship">Registering a many-to-many relationship</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="adding_the_fields.html">Adding the fields to the database</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="custom_categories.html">Creating Custom Categories</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="reference/index.html">Reference</a></li>
|
||||
</ul>
|
||||
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="_sources/registering_models.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
<div id="searchbox" style="display: none">
|
||||
|
||||
<form class="search" action="search.html" method="get">
|
||||
<div class="search-wrapper">
|
||||
<span class="search-left"></span>
|
||||
<input class="prettysearch" type="text" name="q" size="18" />
|
||||
<span class="search-right"> </span>
|
||||
</div>
|
||||
<input type="submit" value="Search" class="searchbutton" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="registering-models">
|
||||
<span id="id1"></span><h1>Registering Models<a class="headerlink" href="#registering-models" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="section" id="registering-models-in-settings-py">
|
||||
<h2>Registering models in settings.py<a class="headerlink" href="#registering-models-in-settings-py" title="Permalink to this headline">¶</a></h2>
|
||||
<p>It is nice to not have to modify the code of applications to add a relation to categories. You can therefore do all the registering in <tt class="docutils literal"><span class="pre">settings.py</span></tt>. For example:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">CATEGORIES_SETTINGS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s">'FK_REGISTRY'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s">'app.AModel'</span><span class="p">:</span> <span class="s">'category'</span><span class="p">,</span>
|
||||
<span class="s">'app.MyModel'</span><span class="p">:</span> <span class="p">(</span>
|
||||
<span class="s">'primary_category'</span><span class="p">,</span>
|
||||
<span class="p">{</span><span class="s">'name'</span><span class="p">:</span> <span class="s">'secondary_category'</span><span class="p">,</span> <span class="s">'related_name'</span><span class="p">:</span> <span class="s">'mymodel_sec_cat'</span><span class="p">},</span> <span class="p">)</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s">'M2M_REGISTRY'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s">'app.BModel'</span><span class="p">:</span> <span class="s">'categories'</span><span class="p">,</span>
|
||||
<span class="s">'app.MyModel'</span><span class="p">:</span> <span class="p">(</span><span class="s">'other_categories'</span><span class="p">,</span> <span class="s">'more_categories'</span><span class="p">,</span> <span class="p">),</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>The <tt class="docutils literal"><span class="pre">FK_REGISTRY</span></tt> is a dictionary whose keys are the model to which to add the new field(s). The value is a string or tuple of strings or dictionaries specifying the necessary information for each field.</p>
|
||||
<p>The <tt class="docutils literal"><span class="pre">M2M_REGISTRY</span></tt> is a dictionary whose keys are the model to which to add the new field(s). The value is a string or tuple of strings specifying the necessary information for each field.</p>
|
||||
<div class="section" id="registering-one-category-field-to-model">
|
||||
<h3>Registering one Category field to model<a class="headerlink" href="#registering-one-category-field-to-model" title="Permalink to this headline">¶</a></h3>
|
||||
<p>The simplest way is to specify the name of the field, such as:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">CATEGORIES_SETTINGS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s">'FK_REGISTRY'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s">'app.AModel'</span><span class="p">:</span> <span class="s">'category'</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>This is equivalent to adding the following the <tt class="docutils literal"><span class="pre">AModel</span></tt> of <tt class="docutils literal"><span class="pre">app</span></tt>:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">category</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="n">Category</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>If you want more control over the new field, you can use a dictionary and pass other <tt class="docutils literal"><span class="pre">ForeignKey</span></tt> options. The <tt class="docutils literal"><span class="pre">name</span></tt> key is required:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">CATEGORIES_SETTINGS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s">'FK_REGISTRY'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s">'app.AModel'</span><span class="p">:</span> <span class="p">{</span><span class="s">'name'</span><span class="p">:</span> <span class="s">'category'</span><span class="p">,</span> <span class="s">'related_name'</span><span class="p">:</span> <span class="s">'amodel_cats'</span><span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>This is equivalent to adding the following the <tt class="docutils literal"><span class="pre">AModel</span></tt> of <tt class="docutils literal"><span class="pre">app</span></tt>:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">category</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="n">Category</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s">'amodel_cats'</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="registering-two-or-more-category-fields-to-a-model">
|
||||
<h3>Registering two or more Category fields to a Model<a class="headerlink" href="#registering-two-or-more-category-fields-to-a-model" title="Permalink to this headline">¶</a></h3>
|
||||
<p>When you want more than one relation to <tt class="docutils literal"><span class="pre">Category</span></tt>, all but one of the fields must specify a <tt class="docutils literal"><span class="pre">related_name</span></tt> to avoid conflicts, like so:</p>
|
||||
<div class="highlight-python"><pre>CATEGORIES_SETTINGS = {
|
||||
'FK_REGISTRY': {
|
||||
'app.MyModel': (
|
||||
'primary_category',
|
||||
{'name': 'secondary_category', 'related_name': 'mymodel_sec_cat'}, )
|
||||
},</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="registering-one-or-more-many-to-many-category-fields-to-a-model">
|
||||
<h3>Registering one or more Many-to-Many Category fields to a Model<a class="headerlink" href="#registering-one-or-more-many-to-many-category-fields-to-a-model" title="Permalink to this headline">¶</a></h3>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">CATEGORIES_SETTINGS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s">'M2M_REGISTRY'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s">'app.AModel'</span><span class="p">:</span> <span class="s">'categories'</span><span class="p">,</span>
|
||||
<span class="s">'app.MyModel'</span><span class="p">:</span> <span class="p">(</span>
|
||||
<span class="p">{</span><span class="s">'name'</span><span class="p">:</span> <span class="s">'other_categories'</span><span class="p">,</span> <span class="s">'related_name'</span><span class="p">:</span> <span class="s">'other_cats'</span><span class="p">},</span>
|
||||
<span class="p">{</span><span class="s">'name'</span><span class="p">:</span> <span class="s">'more_categories'</span><span class="p">,</span> <span class="s">'related_name'</span><span class="p">:</span> <span class="s">'more_cats'</span><span class="p">},</span>
|
||||
<span class="p">),</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="registering-a-many-to-one-relationship">
|
||||
<span id="registering-a-m2one-relationship"></span><h2>Registering a many-to-one relationship<a class="headerlink" href="#registering-a-many-to-one-relationship" title="Permalink to this headline">¶</a></h2>
|
||||
<p>To create a many-to-one relationship (foreign key) between a model and Django Categories, you register your model with the <tt class="docutils literal"><span class="pre">register_fk</span></tt> function.</p>
|
||||
<dl class="function">
|
||||
<dt id="register_fk">
|
||||
<tt class="descname">register_fk</tt><big>(</big><em>model, field_name='category', extra_params={}]</em><big>)</big><a class="headerlink" href="#register_fk" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
|
||||
<li><strong>model</strong> – The Django Model to link to Django Categories</li>
|
||||
<li><strong>field_name</strong> – Optional name for the field <strong>default:</strong> category</li>
|
||||
<li><strong>extra_params</strong> – Optional dictionary of extra parameters passed to the <tt class="docutils literal"><span class="pre">ForeignKey</span></tt> class.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<p>Example, in your <tt class="docutils literal"><span class="pre">models.py</span></tt>:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">categories</span>
|
||||
<span class="n">categories</span><span class="o">.</span><span class="n">register_fk</span><span class="p">(</span><span class="n">MyModel</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>If you want more than one field on a model you have to have some extra arguments:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">categories</span>
|
||||
<span class="n">categories</span><span class="o">.</span><span class="n">register_fk</span><span class="p">(</span><span class="n">MyModel</span><span class="p">,</span> <span class="s">'primary_category'</span><span class="p">)</span>
|
||||
<span class="n">categories</span><span class="o">.</span><span class="n">register_fk</span><span class="p">(</span><span class="n">MyModel</span><span class="p">,</span> <span class="s">'secondary_category'</span><span class="p">,</span> <span class="p">{</span><span class="s">'related_name'</span><span class="p">:</span><span class="s">'mymodel_sec_cat'</span><span class="p">})</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>The <tt class="docutils literal"><span class="pre">extra_args</span></tt> allows you to specify the related_name of one of the fields so it doesn’t clash.</p>
|
||||
</div>
|
||||
<div class="section" id="registering-a-many-to-many-relationship">
|
||||
<h2>Registering a many-to-many relationship<a class="headerlink" href="#registering-a-many-to-many-relationship" title="Permalink to this headline">¶</a></h2>
|
||||
<p>To create a many-to-many relationship between a model and Django Categories, you register your model with the <tt class="docutils literal"><span class="pre">register_m2m</span></tt> function.</p>
|
||||
<dl class="function">
|
||||
<dt id="register_m2m">
|
||||
<tt class="descname">register_m2m</tt><big>(</big><em>model, field_name='categories', extra_params={}]</em><big>)</big><a class="headerlink" href="#register_m2m" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><table class="docutils field-list" frame="void" rules="none">
|
||||
<col class="field-name" />
|
||||
<col class="field-body" />
|
||||
<tbody valign="top">
|
||||
<tr class="field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
|
||||
<li><strong>model</strong> – The Django Model to link to Django Categories</li>
|
||||
<li><strong>field_name</strong> – Optional name for the field <strong>default:</strong> categories</li>
|
||||
<li><strong>extra_params</strong> – Optional dictionary of extra parameters passed to the <tt class="docutils literal"><span class="pre">ManyToManyField</span></tt> class.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</dd></dl>
|
||||
|
||||
<p>Example, in your <tt class="docutils literal"><span class="pre">models.py</span></tt>:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">categories</span>
|
||||
<span class="n">categories</span><span class="o">.</span><span class="n">register_m2m</span><span class="p">(</span><span class="n">MyModel</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>
|
||||
© Copyright 2010-2012, Corey Oordt.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
|
||||
</p>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div id="breadcrumbs">
|
||||
Registering Models
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="_static/toc.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
110
docs/search.html
|
|
@ -1,110 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Search — Django Categories v1.1 documentation</title>
|
||||
<link rel="stylesheet" href="_static/default.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '1.1',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="_static/searchtools.js"></script>
|
||||
<link rel="top" title="Django Categories v1.1 documentation" href="index.html" />
|
||||
<script type="text/javascript">
|
||||
jQuery(function() { Search.loadIndex("searchindex.js"); });
|
||||
</script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="docstitle">
|
||||
<p>Django Categories v1.1 documentation</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>Search</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
<div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="getting_started.html">Getting Started</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Using categories in templates</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="registering_models.html">Registering Models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="adding_the_fields.html">Adding the fields to the database</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="custom_categories.html">Creating Custom Categories</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="reference/index.html">Reference</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<h1 id="search-documentation">Search</h1>
|
||||
<div id="fallback" class="admonition warning">
|
||||
<script type="text/javascript">$('#fallback').hide();</script>
|
||||
<p>
|
||||
Please activate JavaScript to enable the search
|
||||
functionality.
|
||||
</p>
|
||||
</div>
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
<form action="" method="get">
|
||||
<input type="text" name="q" value="" />
|
||||
<input type="submit" value="search" />
|
||||
<span id="search-progress" style="padding-left: 10px"></span>
|
||||
</form>
|
||||
|
||||
<div id="search-results">
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>
|
||||
© Copyright 2010-2012, Corey Oordt.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
|
||||
</p>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div id="breadcrumbs">
|
||||
Search
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="_static/toc.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,221 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Template Tags — Django Categories v0.7beta1 documentation</title>
|
||||
<link rel="stylesheet" href="_static/default.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '0.7beta1',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<link rel="top" title="Django Categories v0.7beta1 documentation" href="index.html" />
|
||||
<link rel="next" title="Reference" href="reference/index.html" />
|
||||
<link rel="prev" title="Adding the fields to the database" href="adding_the_fields.html" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="docstitle">
|
||||
<p>Django Categories v0.7beta1 documentation</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>Template Tags</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
<div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
|
||||
<div class="headerButton"><a href="reference/index.html" title="Reference" accesskey="N">next</a></div>
|
||||
<div class="headerButton"><a href="adding_the_fields.html" title="Adding the fields to the database" accesskey="P">previous</a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="getting_started.html">Getting Started</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="usage.html">Using categories in templates</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="registering_models.html">Registering Models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="adding_the_fields.html">Adding the fields to the database</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Template Tags</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#get-top-level-categories">get_top_level_categories</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#display-path-as-ul">display_path_as_ul</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#get-category-drilldown">get_category_drilldown</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#display-drilldown-as-ul">display_drilldown_as_ul</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#breadcrumbs-tag">breadcrumbs tag</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="reference/index.html">Reference</a></li>
|
||||
</ul>
|
||||
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="_sources/templatetags.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
<div id="searchbox" style="display: none">
|
||||
|
||||
<form class="search" action="search.html" method="get">
|
||||
<div class="search-wrapper">
|
||||
<span class="search-left"></span>
|
||||
<input class="prettysearch" type="text" name="q" size="18" />
|
||||
<span class="search-right"> </span>
|
||||
</div>
|
||||
<input type="submit" value="Search" class="searchbutton" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="template-tags">
|
||||
<h1>Template Tags<a class="headerlink" href="#template-tags" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="section" id="get-top-level-categories">
|
||||
<h2>get_top_level_categories<a class="headerlink" href="#get-top-level-categories" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Retrieves an alphabetical list of all the categories that have no parents.</p>
|
||||
<p>Syntax:</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">get_top_level_categories</span> <span class="k">as</span> <span class="nv">categories</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Returns an list of categories <tt class="docutils literal"><span class="pre">[<category>,</span> <span class="pre"><category>,</span> <span class="pre"><category,</span> <span class="pre">...]</span></tt></p>
|
||||
</div>
|
||||
<div class="section" id="display-path-as-ul">
|
||||
<h2>display_path_as_ul<a class="headerlink" href="#display-path-as-ul" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Render the category with ancestors, but no children using the <tt class="docutils literal"><span class="pre">categories/ul_tree.html</span></tt> template.</p>
|
||||
<p>Example:</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_path_as_ul</span> <span class="s2">"/Grandparent/Parent"</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>or</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_path_as_ul</span> <span class="nv">category_obj</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Returns:</p>
|
||||
<div class="highlight-html"><div class="highlight"><pre><span class="nt"><ul></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/"</span><span class="nt">></span>Top<span class="nt"></a></span>
|
||||
<span class="nt"><ul></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/"</span><span class="nt">></span>Grandparent<span class="nt"></a></li></span>
|
||||
<span class="nt"></ul></span>
|
||||
<span class="nt"></li></span>
|
||||
<span class="nt"></ul></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="get-category-drilldown">
|
||||
<h2>get_category_drilldown<a class="headerlink" href="#get-category-drilldown" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Retrieves the specified category, its ancestors and its immediate children
|
||||
as an iterable.</p>
|
||||
<p>Example:</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">get_category_drilldown</span> <span class="s2">"/Grandparent/Parent"</span> <span class="k">as</span> <span class="nv">family</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>or</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">get_category_drilldown</span> <span class="nv">category_obj</span> <span class="k">as</span> <span class="nv">family</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Sets <tt class="docutils literal"><span class="pre">family</span></tt> to:</p>
|
||||
<div class="highlight-python"><pre>[Grandparent, Parent, Child 1, Child 2, Child n]</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="display-drilldown-as-ul">
|
||||
<h2>display_drilldown_as_ul<a class="headerlink" href="#display-drilldown-as-ul" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Render the category with ancestors and children using the
|
||||
<tt class="docutils literal"><span class="pre">categories/ul_tree.html</span></tt> template.</p>
|
||||
<p>Example:</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_drilldown_as_ul</span> <span class="s2">"/Grandparent/Parent"</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>or:</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">display_drilldown_as_ul</span> <span class="nv">category_obj</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Returns:</p>
|
||||
<div class="highlight-html"><div class="highlight"><pre><span class="nt"><ul></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/"</span><span class="nt">></span>Top<span class="nt"></a></span>
|
||||
<span class="nt"><ul></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/"</span><span class="nt">></span>Grandparent<span class="nt"></a></span>
|
||||
<span class="nt"><ul></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/parent/"</span><span class="nt">></span>Parent<span class="nt"></a></span>
|
||||
<span class="nt"><ul></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/parent/child1"</span><span class="nt">></span>Child1<span class="nt"></a></li></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/parent/child2"</span><span class="nt">></span>Child2<span class="nt"></a></li></span>
|
||||
<span class="nt"><li><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/parent/child3"</span><span class="nt">></span>Child3<span class="nt"></a></li></span>
|
||||
<span class="nt"></ul></span>
|
||||
<span class="nt"></li></span>
|
||||
<span class="nt"></ul></span>
|
||||
<span class="nt"></li></span>
|
||||
<span class="nt"></ul></span>
|
||||
<span class="nt"></li></span>
|
||||
<span class="nt"></ul></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="breadcrumbs-tag">
|
||||
<h2>breadcrumbs tag<a class="headerlink" href="#breadcrumbs-tag" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Render breadcrumbs, using the <tt class="docutils literal"><span class="pre">categories/breadcrumbs.html</span></tt> template, using the optional <tt class="docutils literal"><span class="pre">separator</span></tt> argument.</p>
|
||||
<p>Example:</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">breadcrumbs</span> <span class="s2">"/Grandparent/Parent"</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>or:</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">breadcrumbs</span> <span class="nv">category_obj</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Returns:</p>
|
||||
<div class="highlight-html"><div class="highlight"><pre><span class="nt"><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/"</span><span class="nt">></span>Grandparent<span class="nt"></a></span> / Parent
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>You can alter the separator used in the template by adding a string argument to be the separator:</p>
|
||||
<div class="highlight-django"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">breadcrumbs</span> <span class="nv">category_obj</span> <span class="s2">"::"</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Returns:</p>
|
||||
<div class="highlight-html"><div class="highlight"><pre><span class="nt"><a</span> <span class="na">href=</span><span class="s">"/categories/grandparent/"</span><span class="nt">></span>Grandparent<span class="nt"></a></span> :: Parent
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>
|
||||
© Copyright 2010, CoreyOordt.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.5.
|
||||
</p>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div id="breadcrumbs">
|
||||
Template Tags
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="_static/toc.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
221
docs/usage.html
|
|
@ -1,221 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<title>Using categories in templates — Django Categories v1.1 documentation</title>
|
||||
<link rel="stylesheet" href="_static/default.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '',
|
||||
VERSION: '1.1',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<link rel="top" title="Django Categories v1.1 documentation" href="index.html" />
|
||||
<link rel="next" title="Registering Models" href="registering_models.html" />
|
||||
<link rel="prev" title="Getting Started" href="getting_started.html" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="docstitle">
|
||||
<p>Django Categories v1.1 documentation</p>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="title"><h1>Using categories in templates</h1></div>
|
||||
<ul id="headerButtons">
|
||||
<li id="toc_button"><div class="headerButton"><a href="#">Table of Contents</a></div></li>
|
||||
<li id="page_buttons">
|
||||
<div class="headerButton"><a href="genindex.html" title="General Index" accesskey="I">index</a></div>
|
||||
<div class="headerButton"><a href="registering_models.html" title="Registering Models" accesskey="N">next</a></div>
|
||||
<div class="headerButton"><a href="getting_started.html" title="Getting Started" accesskey="P">previous</a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<ul><li class="toctree-l1"><a href="index.html">Main Page</a></li></ul>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="getting_started.html">Getting Started</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="">Using categories in templates</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#getting-all-items-within-a-category">Getting all items within a category</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#template-tags">Template Tags</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="registering_models.html">Registering Models</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="adding_the_fields.html">Adding the fields to the database</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="custom_categories.html">Creating Custom Categories</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="reference/index.html">Reference</a></li>
|
||||
</ul>
|
||||
|
||||
<h3>This Page</h3>
|
||||
<ul class="this-page-menu">
|
||||
<li><a href="_sources/usage.txt"
|
||||
rel="nofollow">Show Source</a></li>
|
||||
</ul>
|
||||
<div id="searchbox" style="display: none">
|
||||
|
||||
<form class="search" action="search.html" method="get">
|
||||
<div class="search-wrapper">
|
||||
<span class="search-left"></span>
|
||||
<input class="prettysearch" type="text" name="q" size="18" />
|
||||
<span class="search-right"> </span>
|
||||
</div>
|
||||
<input type="submit" value="Search" class="searchbutton" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
Enter search terms or a module, class or function name.
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
|
||||
<div class="section" id="using-categories-in-templates">
|
||||
<h1>Using categories in templates<a class="headerlink" href="#using-categories-in-templates" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="section" id="getting-all-items-within-a-category">
|
||||
<h2>Getting all items within a category<a class="headerlink" href="#getting-all-items-within-a-category" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The <a class="reference internal" href="reference/models.html#Category" title="Category"><tt class="xref py py-class docutils literal"><span class="pre">Category</span></tt></a> model automatically gets <a class="reference external" href="https://docs.djangoproject.com/en/1.3/topics/db/queries/#following-relationships-backward">reverse relationships</a> with all other models related to it.</p>
|
||||
<p>This allows you access to the related objects from the template without altering any views. For example, if you only had <tt class="docutils literal"><span class="pre">Entry</span></tt> models related to <a class="reference internal" href="reference/models.html#Category" title="Category"><tt class="xref py py-class docutils literal"><span class="pre">Category</span></tt></a>, your <tt class="docutils literal"><span class="pre">categories/category_detail.html</span></tt> template could look like</p>
|
||||
<div class="highlight-django"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28</pre></div></td><td class="code"><div class="highlight"><pre><span class="cp">{%</span> <span class="k">extends</span> <span class="s1">'categories/base.html'</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="cp">{%</span> <span class="k">block</span> <span class="nv">content</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"><h1></span><span class="cp">{{</span> <span class="nv">category</span> <span class="cp">}}</span><span class="x"></h1></span>
|
||||
<span class="cp">{%</span> <span class="k">if</span> <span class="nv">category.parent</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> <h2>Go up to </span>
|
||||
<span class="x"> <a href="</span><span class="cp">{{</span> <span class="nv">category.parent.get_absolute_url</span> <span class="cp">}}</span><span class="x">"></span>
|
||||
<span class="x"> </span><span class="cp">{{</span> <span class="nv">category.parent</span> <span class="cp">}}</span><span class="x"></span>
|
||||
<span class="x"> </a></h2></span>
|
||||
<span class="cp">{%</span> <span class="k">endif</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="cp">{%</span> <span class="k">if</span> <span class="nv">category.description</span> <span class="cp">%}</span><span class="x"><p></span><span class="cp">{{</span> <span class="nv">category.description</span> <span class="cp">}}</span><span class="x"></p></span><span class="cp">{%</span> <span class="k">endif</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="cp">{%</span> <span class="k">if</span> <span class="nv">category.children.count</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> <h2>Subcategories</h2></span>
|
||||
<span class="x"> <ul></span>
|
||||
<span class="x"> </span><span class="cp">{%</span> <span class="k">for</span> <span class="nv">child</span> <span class="k">in</span> <span class="nv">category.children.all</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> <li><a href="</span><span class="cp">{{</span> <span class="nv">child.get_absolute_url</span> <span class="cp">}}</span><span class="x">"></span><span class="cp">{{</span> <span class="nv">child</span> <span class="cp">}}</span><span class="x"></a></li></span>
|
||||
<span class="x"> </span><span class="cp">{%</span> <span class="k">endfor</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> </ul></span>
|
||||
<span class="cp">{%</span> <span class="k">endif</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"><h2>Entries</h2></span>
|
||||
<span class="cp">{%</span> <span class="k">if</span> <span class="nv">category.entries_set.all</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> </span><span class="cp">{%</span> <span class="k">for</span> <span class="nv">entry</span> <span class="k">in</span> <span class="nv">category.entries_set.all</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> <p><a href="</span><span class="cp">{{</span> <span class="nv">entry.get_absolute_url</span> <span class="cp">}}</span><span class="x">"></span><span class="cp">{{</span> <span class="nv">entry.headline</span> <span class="cp">}}</span><span class="x"></a></p></span>
|
||||
<span class="x"> </span><span class="cp">{%</span> <span class="k">endfor</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="cp">{%</span> <span class="k">else</span> <span class="cp">%}</span><span class="x"></span>
|
||||
<span class="x"> <p><em>No entries for </span><span class="cp">{{</span> <span class="nv">category</span> <span class="cp">}}</span><span class="x"></em></p></span>
|
||||
<span class="cp">{%</span> <span class="k">endif</span> <span class="cp">%}</span><span class="x"></span>
|
||||
|
||||
<span class="cp">{%</span> <span class="k">endblock</span> <span class="cp">%}</span><span class="x"></span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
<p>If you have <tt class="docutils literal"><span class="pre">related_name</span></tt> parameters to the configuration (see <a class="reference internal" href="registering_models.html#registering-models"><em>Registering Models</em></a>), then you would use <tt class="docutils literal"><span class="pre">category.related_name.all</span></tt> instead of <tt class="docutils literal"><span class="pre">category.relatedmodel_set.all</span></tt>.</p>
|
||||
</div>
|
||||
<div class="section" id="template-tags">
|
||||
<h2>Template Tags<a class="headerlink" href="#template-tags" title="Permalink to this headline">¶</a></h2>
|
||||
<p>To use the template tags:</p>
|
||||
<div class="highlight-python"><pre>{% import category_tags %}</pre>
|
||||
</div>
|
||||
<div class="section" id="tree-info">
|
||||
<h3><tt class="docutils literal"><span class="pre">tree_info</span></tt><a class="headerlink" href="#tree-info" title="Permalink to this headline">¶</a></h3>
|
||||
<p>Given a list of categories, iterates over the list, generating
|
||||
two-tuples of the current tree item and a <tt class="docutils literal"><span class="pre">dict</span></tt> containing
|
||||
information about the tree structure around the item, with the following
|
||||
keys:</p>
|
||||
<blockquote>
|
||||
<div><dl class="docutils">
|
||||
<dt><tt class="docutils literal"><span class="pre">'new_level'</span></tt></dt>
|
||||
<dd><tt class="xref docutils literal"><span class="pre">True</span></tt> if the current item is the start of a new level in
|
||||
the tree, <tt class="xref docutils literal"><span class="pre">False</span></tt> otherwise.</dd>
|
||||
<dt><tt class="docutils literal"><span class="pre">'closed_levels'</span></tt></dt>
|
||||
<dd>A list of levels which end after the current item. This will
|
||||
be an empty list if the next item’s level is the same as or
|
||||
greater than the level of the current item.</dd>
|
||||
</dl>
|
||||
</div></blockquote>
|
||||
<p>An optional argument can be provided to specify extra details about the
|
||||
structure which should appear in the <tt class="docutils literal"><span class="pre">dict</span></tt>. This should be a
|
||||
comma-separated list of feature names. The valid feature names are:</p>
|
||||
<blockquote>
|
||||
<div><dl class="docutils">
|
||||
<dt>ancestors</dt>
|
||||
<dd><p class="first">Adds a list of unicode representations of the ancestors of the
|
||||
current node, in descending order (root node first, immediate
|
||||
parent last), under the key <tt class="docutils literal"><span class="pre">'ancestors'</span></tt>.</p>
|
||||
<p>For example: given the sample tree below, the contents of the list
|
||||
which would be available under the <tt class="docutils literal"><span class="pre">'ancestors'</span></tt> key are given
|
||||
on the right:</p>
|
||||
<div class="last highlight-python"><pre>Books -> []
|
||||
Sci-fi -> [u'Books']
|
||||
Dystopian Futures -> [u'Books', u'Sci-fi']</pre>
|
||||
</div>
|
||||
</dd>
|
||||
</dl>
|
||||
</div></blockquote>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>
|
||||
© Copyright 2010-2012, Corey Oordt.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
|
||||
</p>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div id="breadcrumbs">
|
||||
Using categories in templates
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="_static/toc.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1 +1,8 @@
|
|||
-r prod.txt
|
||||
linkify-it-py
|
||||
myst-parser
|
||||
|
||||
pydata-sphinx-theme
|
||||
Sphinx>=4.3.0
|
||||
sphinx-autodoc-typehints
|
||||
sphinxcontrib-django2
|
||||
|
|
|
|||