docutils.nodesdocument)}( rawsourcechildren]hsection)}(hhh](htitle)}(hModifying and Creating Themesh]hTextModifying and Creating Themes}(hhparenthhhsourceNlineNuba attributes}(ids]classes]names]dupnames]backrefs]refidid2utagnamehhh hhhX/var/lib/jenkins/jobs/metacat_beta/workspace/metacat/docs/user/metacat/source/themes.rsthKubsphinx.addnodesversionmodified)}(hNew in version 2.2.0.h]h paragraph)}(hNew in version 2.2.0.h]hinline)}(hNew in version 2.2.0.h]hNew in version 2.2.0.}(hhhh`_, is deployed separately from Metacat, allowing more independent user interface customization. Check the `MetacatUI GitHub `_ for the most up to date version.h](hMetacat’s theming system, }(hMetacat's theming system, hjhhhNhNubh|)}(h1`MetacatUI `_h]h MetacatUI}(hhhjubah}(h]h!]h#]h%]h']name MetacatUIrefuri"https://github.com/NCEAS/metacatuiuh+h{hjubhtarget)}(h% h]h}(h] metacatuiah!]h#] metacatuiah%]h']refurijuh+j referencedKhjubhi, is deployed separately from Metacat, allowing more independent user interface customization. Check the }(hi, is deployed separately from Metacat, allowing more independent user interface customization. Check the hjhhhNhNubh|)}(h8`MetacatUI GitHub `_h]hMetacatUI GitHub}(hhhjubah}(h]h!]h#]h%]h']nameMetacatUI GitHubj"https://github.com/NCEAS/metacatuiuh+h{hjubj)}(h% h]h}(h]metacatui-githubah!]h#]metacatui githubah%]h']refurijuh+jjKhjubh! for the most up to date version.}(h! for the most up to date version.hjhhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hKhh hhubh5)}(hX,MetacatUI is structured in a model-view-controller architecture using `Backbone.js `_. Some background knowledge on Backbone.js may be helpful for advanced modification of MetacatUI, but is not necessary for editing the CSS styling and HTML of the included MetacatUI views.h](hFMetacatUI is structured in a model-view-controller architecture using }(hFMetacatUI is structured in a model-view-controller architecture using hjhhhNhNubh|)}(h*`Backbone.js `_h]h Backbone.js}(hhhjubah}(h]h!]h#]h%]h']name Backbone.jsjhttp://www.backbonejs.orguh+h{hjubj)}(h h]h}(h] backbone-jsah!]h#] backbone.jsah%]h']refurijuh+jjKhjubh. Some background knowledge on Backbone.js may be helpful for advanced modification of MetacatUI, but is not necessary for editing the CSS styling and HTML of the included MetacatUI views.}(h. Some background knowledge on Backbone.js may be helpful for advanced modification of MetacatUI, but is not necessary for editing the CSS styling and HTML of the included MetacatUI views.hjhhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hK hh hhubhfigure)}(hhh](himage)}(h.. figure:: images/screenshots/image007.png MetacatUI's default home page. Users can customize the appearance using themes. h]h}(h]h!]h#]h%]h']uriimages/screenshots/image007.png candidates}*j(suh+jhjhh,hKubhcaption)}(hOMetacatUI's default home page. Users can customize the appearance using themes.h]hQMetacatUI’s default home page. Users can customize the appearance using themes.}(hj0hj.ubah}(h]h!]h#]h%]h']uh+j,hh,hKhjubeh}(h]id1ah!]h#]h%]h']uh+jhKhh hhhh,ubh )}(hhh](h)}(hhh]h#Quick Start Using the Default Theme}(hhhjFhhhNhNubah}(h]h!]h#]h%]h']h)huh+hhjChhhh,hKubh5)}(hXZThe default theme can be used out-of-box. To make simple edits such as change the logo in the header or footer, add links to the navigation, etc., we will need to create a new theme, make our changes to the header and footer HTML templates, but borrow all other templates from the default theme so we don't have to create everything from scratch.h]hX\The default theme can be used out-of-box. To make simple edits such as change the logo in the header or footer, add links to the navigation, etc., we will need to create a new theme, make our changes to the header and footer HTML templates, but borrow all other templates from the default theme so we don’t have to create everything from scratch.}(hjUhjShhhNhNubah}(h]h!]h#]h%]h']uh+h4hh,hKhjChhubhenumerated_list)}(hhh](ht)}(h{**Create a new theme:** Duplicate the ``js/themes/default`` directory and rename it to a unique theme name with no spaces. h]h5)}(hz**Create a new theme:** Duplicate the ``js/themes/default`` directory and rename it to a unique theme name with no spaces.h](hstrong)}(h**Create a new theme:**h]hCreate a new theme:}(hhhjpubah}(h]h!]h#]h%]h']uh+jnhjjubh Duplicate the }(h Duplicate the hjjubhliteral)}(h``js/themes/default``h]hjs/themes/default}(hhhjubah}(h]h!]h#]h%]h']uh+jhjjubh? directory and rename it to a unique theme name with no spaces.}(h? directory and rename it to a unique theme name with no spaces.hjjubeh}(h]h!]h#]h%]h']uh+h4hh,hKhjfubah}(h]h!]h#]h%]h']uh+hshjchhhh,hNubht)}(h**Add your logo:** In the ``js/themes//img`` directory, add the following image files: * Your organization's logo * Any supporter or donor logos to use in the footer h](h5)}(ha**Add your logo:** In the ``js/themes//img`` directory, add the following image files:h](jo)}(h**Add your logo:**h]hAdd your logo:}(hhhjubah}(h]h!]h#]h%]h']uh+jnhjubh In the }(h In the hjubj)}(h``js/themes//img``h]hjs/themes//img}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubh* directory, add the following image files:}(h* directory, add the following image files:hjubeh}(h]h!]h#]h%]h']uh+h4hh,hKhjubh block_quote)}(hhh]ho)}(hhh](ht)}(hYour organization's logoh]h5)}(hjh]hYour organization’s logo}(hjhjubah}(h]h!]h#]h%]h']uh+h4hh,hKhjubah}(h]h!]h#]h%]h']uh+hshjubht)}(h2Any supporter or donor logos to use in the footer h]h5)}(h1Any supporter or donor logos to use in the footerh]h1Any supporter or donor logos to use in the footer}(hjhjubah}(h]h!]h#]h%]h']uh+h4hh,hKhjubah}(h]h!]h#]h%]h']uh+hshjubeh}(h]h!]h#]h%]h']bulletj+uh+hnhh,hKhjubah}(h]h!]h#]h%]h']uh+jhjubeh}(h]h!]h#]h%]h']uh+hshjchhhh,hNubeh}(h]h!]h#]h%]h']enumtypearabicprefixhsuffix.uh+jahjChhhh,hKubh5)}(h3. **Customize the header and footer:** Create a ``templates`` directory in ``js/themes/`` and copy the following files from ``js/templates`` into that new directory:h](h3. }(h3. hj-hhhNhNubjo)}(h$**Customize the header and footer:**h]h Customize the header and footer:}(hhhj6ubah}(h]h!]h#]h%]h']uh+jnhj-ubh Create a }(h Create a hj-hhhNhNubj)}(h ``templates``h]h templates}(hhhjIubah}(h]h!]h#]h%]h']uh+jhj-ubh directory in }(h directory in hj-hhhNhNubj)}(h``js/themes/``h]hjs/themes/}(hhhj\ubah}(h]h!]h#]h%]h']uh+jhj-ubh# and copy the following files from }(h# and copy the following files from hj-hhhNhNubj)}(h``js/templates``h]h js/templates}(hhhjoubah}(h]h!]h#]h%]h']uh+jhj-ubh into that new directory:}(h into that new directory:hj-hhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hKhjChhubj)}(hhh]ho)}(hhh](ht)}(h footer.htmlh]h5)}(hjh]h footer.html}(hjhjubah}(h]h!]h#]h%]h']uh+h4hh,hK!hjubah}(h]h!]h#]h%]h']uh+hshjubht)}(h navbar.html h]h5)}(h navbar.htmlh]h navbar.html}(hjhjubah}(h]h!]h#]h%]h']uh+h4hh,hK"hjubah}(h]h!]h#]h%]h']uh+hshjubeh}(h]h!]h#]h%]h']jj+uh+hnhh,hK!hjubah}(h]h!]h#]h%]h']uh+jhjChhhNhNubh5)}(h3a. Open the ``js/themes//templates/footer.html`` file and change the footer logo image paths and the link paths to direct to your new footer images and their corresponding web addresses. For example,h](h 3a. Open the }(h 3a. Open the hjhhhNhNubj)}(h/``js/themes//templates/footer.html``h]h+js/themes//templates/footer.html}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubh file and change the footer logo image paths and the link paths to direct to your new footer images and their corresponding web addresses. For example,}(h file and change the footer logo image paths and the link paths to direct to your new footer images and their corresponding web addresses. For example,hjhhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hK$hjChhubj)}(hhh](h literal_block)}(h NCEAS h]h NCEAS }(hhhjubah}(h]h!]h#]h%]h'] xml:spacepreserveuh+jhK)hjubh5)}(hjYou can add or modify any of the HTML in the footer; we are using the logo only as a simple demonstration.h]hjYou can add or modify any of the HTML in the footer; we are using the logo only as a simple demonstration.}(hjhjubah}(h]h!]h#]h%]h']uh+h4hh,hK-hjubeh}(h]h!]h#]h%]h']uh+jhjChhhh,hNubh5)}(h3b. Similarly, open the ``js/themes//templates/navbar.html`` file and replace the Metacat logo file with your organization's logo file. You can also add more links to this header navigation.h](h3b. Similarly, open the }(h3b. Similarly, open the hjhhhNhNubj)}(h/``js/themes//templates/navbar.html``h]h+js/themes//templates/navbar.html}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubh file and replace the Metacat logo file with your organization’s logo file. You can also add more links to this header navigation.}(h file and replace the Metacat logo file with your organization's logo file. You can also add more links to this header navigation.hjhhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hK/hjChhubh5)}(hX4. **Create your theme map:** By default, Metacat will use the default theme templates unless you specifically tell Metacat to override these with the template files in your custom theme. In the ``js/themes//config.js`` file, change the theme name on line 1, ``default``, to your chosen new theme name. In the ``themeMap``, add a new line for every template you have edited and added to your new theme. An example for the footer.html and navbar.html files is below.h](h4. }(h4. hj6hhhNhNubjo)}(h**Create your theme map:**h]hCreate your theme map:}(hhhj?ubah}(h]h!]h#]h%]h']uh+jnhj6ubh By default, Metacat will use the default theme templates unless you specifically tell Metacat to override these with the template files in your custom theme. In the }(h By default, Metacat will use the default theme templates unless you specifically tell Metacat to override these with the template files in your custom theme. In the hj6hhhNhNubj)}(h#``js/themes//config.js``h]hjs/themes//config.js}(hhhjRubah}(h]h!]h#]h%]h']uh+jhj6ubh( file, change the theme name on line 1, }(h( file, change the theme name on line 1, hj6hhhNhNubj)}(h ``default``h]hdefault}(hhhjeubah}(h]h!]h#]h%]h']uh+jhj6ubh(, to your chosen new theme name. In the }(h(, to your chosen new theme name. In the hj6hhhNhNubj)}(h ``themeMap``h]hthemeMap}(hhhjxubah}(h]h!]h#]h%]h']uh+jhj6ubh, add a new line for every template you have edited and added to your new theme. An example for the footer.html and navbar.html files is below.}(h, add a new line for every template you have edited and added to your new theme. An example for the footer.html and navbar.html files is below.hj6hhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hK1hjChhubj)}(hhh]j)}(hX:var theme = theme || "default"; var themeMap = { '*': { // example overrides are provided here 'templates/navbar.html' : 'themes/' + theme + '/templates/navbar.html', 'templates/footer.html' : 'themes/' + theme + '/templates/footer.html' } };h]hX:var theme = theme || "default"; var themeMap = { '*': { // example overrides are provided here 'templates/navbar.html' : 'themes/' + theme + '/templates/navbar.html', 'templates/footer.html' : 'themes/' + theme + '/templates/footer.html' } };}(hhhjubah}(h]h!]h#]h%]h']jjuh+jhK7hjubah}(h]h!]h#]h%]h']uh+jhjChhhh,hNubjb)}(hhh]ht)}(hDRepeat step 3-4 as necessary for any other template files you edit. h]h5)}(hCRepeat step 3-4 as necessary for any other template files you edit.h]hCRepeat step 3-4 as necessary for any other template files you edit.}(hjhjubah}(h]h!]h#]h%]h']uh+h4hh,hKAhjubah}(h]h!]h#]h%]h']uh+hshjhhhh,hNubah}(h]h!]h#]h%]h']j(j)j*hj+j,startKuh+jahjChhhh,hKAubjb)}(hhh]ht)}(hXOpen ``index.html``. Edit the following line to reflect your theme name (``data-theme``) and your Metacat context (``data-metacat-context``). (The Metacat context is the name of the directory in which Metacat is installed in the Tomcat web-application directory (most likely "metacat"). Whomever installed Metacat will know what this directory is called. If your MetacatUI is already successfully retrieving datasets during searches, this is already set and can be left as is.)h]h5)}(hXOpen ``index.html``. Edit the following line to reflect your theme name (``data-theme``) and your Metacat context (``data-metacat-context``). (The Metacat context is the name of the directory in which Metacat is installed in the Tomcat web-application directory (most likely "metacat"). Whomever installed Metacat will know what this directory is called. If your MetacatUI is already successfully retrieving datasets during searches, this is already set and can be left as is.)h](hOpen }(hOpen hjubj)}(h``index.html``h]h index.html}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubh6. Edit the following line to reflect your theme name (}(h6. Edit the following line to reflect your theme name (hjubj)}(h``data-theme``h]h data-theme}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubh) and your Metacat context (}(h) and your Metacat context (hjubj)}(h``data-metacat-context``h]hdata-metacat-context}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubhXV). (The Metacat context is the name of the directory in which Metacat is installed in the Tomcat web-application directory (most likely “metacat”). Whomever installed Metacat will know what this directory is called. If your MetacatUI is already successfully retrieving datasets during searches, this is already set and can be left as is.)}(hXR). (The Metacat context is the name of the directory in which Metacat is installed in the Tomcat web-application directory (most likely "metacat"). Whomever installed Metacat will know what this directory is called. If your MetacatUI is already successfully retrieving datasets during searches, this is already set and can be left as is.)hjubeh}(h]h!]h#]h%]h']uh+h4hh,hKChjubah}(h]h!]h#]h%]h']uh+hshjhhhh,hNubah}(h]h!]h#]h%]h']j(j)j*hj+j,jKuh+jahjChhhh,hKCubjb)}(hhh]ht)}(hX**Specify your theme and metacat context** Open ``index.html``. Edit the following line to specify your theme name (attribute ``data-theme``) and your Metacat context (attribute ``data-metacat-context``) (The Metacat context is the name of the directory in which Metacat is installed in the Tomcat web-application directory (most likely "metacat"). Whomever installed Metacat will know what this directory is called. If your MetacatUI is already successfully retrieving datasets during searches, this is already set and can be left as is.) :: h](h5)}(hX**Specify your theme and metacat context** Open ``index.html``. Edit the following line to specify your theme name (attribute ``data-theme``) and your Metacat context (attribute ``data-metacat-context``) (The Metacat context is the name of the directory in which Metacat is installed in the Tomcat web-application directory (most likely "metacat"). Whomever installed Metacat will know what this directory is called. If your MetacatUI is already successfully retrieving datasets during searches, this is already set and can be left as is.)h](jo)}(h***Specify your theme and metacat context**h]h&Specify your theme and metacat context}(hhhj0ubah}(h]h!]h#]h%]h']uh+jnhj,ubh Open }(h Open hj,ubj)}(h``index.html``h]h index.html}(hhhjCubah}(h]h!]h#]h%]h']uh+jhj,ubh@. Edit the following line to specify your theme name (attribute }(h@. Edit the following line to specify your theme name (attribute hj,ubj)}(h``data-theme``h]h data-theme}(hhhjVubah}(h]h!]h#]h%]h']uh+jhj,ubh&) and your Metacat context (attribute }(h&) and your Metacat context (attribute hj,ubj)}(h``data-metacat-context``h]hdata-metacat-context}(hhhjiubah}(h]h!]h#]h%]h']uh+jhj,ubhXU) (The Metacat context is the name of the directory in which Metacat is installed in the Tomcat web-application directory (most likely “metacat”). Whomever installed Metacat will know what this directory is called. If your MetacatUI is already successfully retrieving datasets during searches, this is already set and can be left as is.)}(hXQ) (The Metacat context is the name of the directory in which Metacat is installed in the Tomcat web-application directory (most likely "metacat"). Whomever installed Metacat will know what this directory is called. If your MetacatUI is already successfully retrieving datasets during searches, this is already set and can be left as is.)hj,ubeh}(h]h!]h#]h%]h']uh+h4hh,hKEhj(ubj)}(hhh]j)}(hxh]hx}(hhhjubah}(h]h!]h#]h%]h']jjuh+jhKJhjubah}(h]h!]h#]h%]h']uh+jhj(ubeh}(h]h!]h#]h%]h']uh+hshj%hhhh,hNubah}(h]h!]h#]h%]h']j(j)j*hj+j,jKuh+jahjChhhh,hKEubeh}(h]hah!]h#]#quick start using the default themeah%]h']uh+h hh hhhh,hKubh )}(hhh](h)}(hhh]hCreating a Custom Theme}(hhhjhhhNhNubah}(h]h!]h#]h%]h']h)huh+hhjhhhh,hKNubh5)}(hAll themes share the same CSS, HTML, JavaScript and image files. Any of these files can be customized by creating a new theme and telling Metacat to override the default files with the ones in your custom theme.h]hAll themes share the same CSS, HTML, JavaScript and image files. Any of these files can be customized by creating a new theme and telling Metacat to override the default files with the ones in your custom theme.}(hjhjhhhNhNubah}(h]h!]h#]h%]h']uh+h4hh,hKOhjhhubh5)}(h1. **Create a new theme:** Copy an existing theme directory structure, found in ``js/themes``, and rename that directory after your new theme. Notice that each theme directory looks something like this:h](h1. }(h1. hjhhhNhNubjo)}(h**Create a new theme:**h]hCreate a new theme:}(hhhjubah}(h]h!]h#]h%]h']uh+jnhjubh6 Copy an existing theme directory structure, found in }(h6 Copy an existing theme directory structure, found in hjhhhNhNubj)}(h ``js/themes``h]h js/themes}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubhm, and rename that directory after your new theme. Notice that each theme directory looks something like this:}(hm, and rename that directory after your new theme. Notice that each theme directory looks something like this:hjhhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hKRhjhhubj)}(hhh]j)}(h'css/ img/ routers/ templates/ config.jsh]h'css/ img/ routers/ templates/ config.js}(hhhjubah}(h]h!]h#]h%]h']jjuh+jhKWhjubah}(h]h!]h#]h%]h']uh+jhjhhhh,hNubjb)}(hhh](ht)}(h**Style your theme** Add a CSS file to your theme by creating a CSS file in the ``js/themes//css/`` directory named ``metacatui.css`` h]h5)}(h**Style your theme** Add a CSS file to your theme by creating a CSS file in the ``js/themes//css/`` directory named ``metacatui.css``h](jo)}(h**Style your theme**h]hStyle your theme}(hhhj!ubah}(h]h!]h#]h%]h']uh+jnhjubh< Add a CSS file to your theme by creating a CSS file in the }(h< Add a CSS file to your theme by creating a CSS file in the hjubj)}(h``js/themes//css/``h]hjs/themes//css/}(hhhj4ubah}(h]h!]h#]h%]h']uh+jhjubh directory named }(h directory named hjubj)}(h``metacatui.css``h]h metacatui.css}(hhhjGubah}(h]h!]h#]h%]h']uh+jhjubeh}(h]h!]h#]h%]h']uh+h4hh,hK]hjubah}(h]h!]h#]h%]h']uh+hshjhhhh,hNubht)}(hV**Add images** Add your custom images to the ``js/themes//img`` directory. h]h5)}(hU**Add images** Add your custom images to the ``js/themes//img`` directory.h](jo)}(h**Add images**h]h Add images}(hhhjiubah}(h]h!]h#]h%]h']uh+jnhjeubh Add your custom images to the }(h Add your custom images to the hjeubj)}(h``js/themes//img``h]hjs/themes//img}(hhhj|ubah}(h]h!]h#]h%]h']uh+jhjeubh directory.}(h directory.hjeubeh}(h]h!]h#]h%]h']uh+h4hh,hK`hjaubah}(h]h!]h#]h%]h']uh+hshjhhhh,hNubht)}(h\**Edit templates** Add HTML templates to the ``js/themes//templates`` directory. h]h5)}(h[**Edit templates** Add HTML templates to the ``js/themes//templates`` directory.h](jo)}(h**Edit templates**h]hEdit templates}(hhhjubah}(h]h!]h#]h%]h']uh+jnhjubh Add HTML templates to the }(h Add HTML templates to the hjubj)}(h#``js/themes//templates``h]hjs/themes//templates}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubh directory.}(h directory.hjubeh}(h]h!]h#]h%]h']uh+h4hh,hKbhjubah}(h]h!]h#]h%]h']uh+hshjhhhh,hNubht)}(hX**Create your theme map** Open the ``js/themes//config.js`` file. In here you will define your theme and themeMap. By default, Metacat will use the default theme templates unless you specifically tell Metacat to override these with the template files in your custom theme. h]h5)}(hX**Create your theme map** Open the ``js/themes//config.js`` file. In here you will define your theme and themeMap. By default, Metacat will use the default theme templates unless you specifically tell Metacat to override these with the template files in your custom theme.h](jo)}(h**Create your theme map**h]hCreate your theme map}(hhhjubah}(h]h!]h#]h%]h']uh+jnhjubh Open the }(h Open the hjubj)}(h#``js/themes//config.js``h]hjs/themes//config.js}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubh file. In here you will define your theme and themeMap. By default, Metacat will use the default theme templates unless you specifically tell Metacat to override these with the template files in your custom theme.}(h file. In here you will define your theme and themeMap. By default, Metacat will use the default theme templates unless you specifically tell Metacat to override these with the template files in your custom theme.hjubeh}(h]h!]h#]h%]h']uh+h4hh,hKdhjubah}(h]h!]h#]h%]h']uh+hshjhhhh,hNubeh}(h]h!]h#]h%]h']j(j)j*hj+j,jKuh+jahjhhhh,hK]ubj)}(hhh]j)}(hX5var theme = theme || "default"; var themeMap = { '*': { // example overrides are provided here //'views/AboutView' : 'themes/' + theme + '/views/AboutView.js', //'templates/navbar.html' : 'themes/' + theme + '/templates/navbar.html' } };h]hX5var theme = theme || "default"; var themeMap = { '*': { // example overrides are provided here //'views/AboutView' : 'themes/' + theme + '/views/AboutView.js', //'templates/navbar.html' : 'themes/' + theme + '/templates/navbar.html' } };}(hhhjubah}(h]h!]h#]h%]h']jjuh+jhKhhjubah}(h]h!]h#]h%]h']uh+jhjhhhh,hNubh5)}(hChange the theme name on line 1, ``default``, to your chosen new theme name. Then follow the commented out examples in ``themeMap`` to explicitly tell Metacat which default shared files should be overridden with your custom theme files. The pattern is:h](h!Change the theme name on line 1, }(h!Change the theme name on line 1, hj,hhhNhNubj)}(h ``default``h]hdefault}(hhhj5ubah}(h]h!]h#]h%]h']uh+jhj,ubhK, to your chosen new theme name. Then follow the commented out examples in }(hK, to your chosen new theme name. Then follow the commented out examples in hj,hhhNhNubj)}(h ``themeMap``h]hthemeMap}(hhhjHubah}(h]h!]h#]h%]h']uh+jhj,ubhy to explicitly tell Metacat which default shared files should be overridden with your custom theme files. The pattern is:}(hy to explicitly tell Metacat which default shared files should be overridden with your custom theme files. The pattern is:hj,hhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hKrhjhhubj)}(hhh]h5)}(hE``path/originalFile.html : 'themes/' + theme + '/path/newFile.html'``h]j)}(hjfh]hApath/originalFile.html : 'themes/' + theme + '/path/newFile.html'}(hhhjhubah}(h]h!]h#]h%]h']uh+jhjdubah}(h]h!]h#]h%]h']uh+h4hh,hKvhjaubah}(h]h!]h#]h%]h']uh+jhjhhhh,hNubh5)}(h;*Note: You do not have to override the CSS or image files.*h]hemphasis)}(hjh]h9Note: You do not have to override the CSS or image files.}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubah}(h]h!]h#]h%]h']uh+h4hh,hKxhjhhubh5)}(h7. **Specify your theme and metacat context** Open ``index.html``. Edit the following line to specify your theme name (attribute ``data-theme``) and your Metacat context (attribute ``data-metacat-context``):h](h7. }(h7. hjhhhNhNubjo)}(h***Specify your theme and metacat context**h]h&Specify your theme and metacat context}(hhhjubah}(h]h!]h#]h%]h']uh+jnhjubh Open }(h Open hjhhhNhNubj)}(h``index.html``h]h index.html}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubh@. Edit the following line to specify your theme name (attribute }(h@. Edit the following line to specify your theme name (attribute hjhhhNhNubj)}(h``data-theme``h]h data-theme}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubh&) and your Metacat context (attribute }(h&) and your Metacat context (attribute hjhhhNhNubj)}(h``data-metacat-context``h]hdata-metacat-context}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubh):}(h):hjhhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hKzhjhhubj)}(hhh]j)}(hxh]hx}(hhhjubah}(h]h!]h#]h%]h']jjuh+jhKhjubah}(h]h!]h#]h%]h']uh+jhjhhhh,hNubh )}(hhh](h)}(hhh]h3Changing the background images on the default theme}(hhhjhhhNhNubah}(h]h!]h#]h%]h']h)huh+hhj hhhh,hKubh5)}(h[The ``js/templates/app.html`` file contains the ```` element for the background image:h](hThe }(hThe hjhhhNhNubj)}(h``js/templates/app.html``h]hjs/templates/app.html}(hhhj%ubah}(h]h!]h#]h%]h']uh+jhjubh file contains the }(h file contains the hjhhhNhNubj)}(h ````h]h}(hhhj8ubah}(h]h!]h#]h%]h']uh+jhjubh" element for the background image:}(h" element for the background image:hjhhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hKhj hhubj)}(hhh]j)}(h<h]h<}(hhhjTubah}(h]h!]h#]h%]h']jjuh+jhKhjQubah}(h]h!]h#]h%]h']uh+jhj hhhh,hNubh5)}(hX Change the ``data-image-count`` attribute to the number of images you would like to cycle through in your custom theme. To have the same background image on all views, change this value to 1. To not use the background image at all, simply remove this ```` element.h](h Change the }(h Change the hjhhhhNhNubj)}(h``data-image-count``h]hdata-image-count}(hhhjqubah}(h]h!]h#]h%]h']uh+jhjhubh attribute to the number of images you would like to cycle through in your custom theme. To have the same background image on all views, change this value to 1. To not use the background image at all, simply remove this }(h attribute to the number of images you would like to cycle through in your custom theme. To have the same background image on all views, change this value to 1. To not use the background image at all, simply remove this hjhhhhNhNubj)}(h ````h]h}(hhhjubah}(h]h!]h#]h%]h']uh+jhjhubh element.}(h element.hjhhhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hKhj hhubh5)}(hX:Store your custom background image files in ``js/themes//img/backgrounds``. Keep the naming convention of ``bg1.jpg``, ``bg2.jpg``, etc., making sure that all numbers from 1 to your specified total (``data-image-count``) are included. (i.e. do not skip any numbers, such as ``bg1.jpg``, ``bg3.jpg`` ...)h](h,Store your custom background image files in }(h,Store your custom background image files in hjhhhNhNubj)}(h)``js/themes//img/backgrounds``h]h%js/themes//img/backgrounds}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubh . Keep the naming convention of }(h . Keep the naming convention of hjhhhNhNubj)}(h ``bg1.jpg``h]hbg1.jpg}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubh, }(h, hjhhhNhNubj)}(h ``bg2.jpg``h]hbg2.jpg}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubhE, etc., making sure that all numbers from 1 to your specified total (}(hE, etc., making sure that all numbers from 1 to your specified total (hjhhhNhNubj)}(h``data-image-count``h]hdata-image-count}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubh7) are included. (i.e. do not skip any numbers, such as }(h7) are included. (i.e. do not skip any numbers, such as hjhhhNhNubj)}(h ``bg1.jpg``h]hbg1.jpg}(hhhjubah}(h]h!]h#]h%]h']uh+jhjubh, }(hjhjubj)}(h ``bg3.jpg``h]hbg3.jpg}(hhhj ubah}(h]h!]h#]h%]h']uh+jhjubh …)}(h ...)hjhhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hKhj hhubeh}(h]hah!]h#]3changing the background images on the default themeah%]h']uh+h hjhhhh,hKubh )}(hhh](h)}(hjh]h"Advanced options for custom themes}(hjhj' hhhNhNubah}(h]h!]h#]h%]h']h)j uh+hhj$ hhhh,hKubh5)}(hdAdvanced users can choose to override the JavaScript files for even more customization of MetacatUI.h]hdAdvanced users can choose to override the JavaScript files for even more customization of MetacatUI.}(hj6 hj4 hhhNhNubah}(h]h!]h#]h%]h']uh+h4hh,hKhj$ hhubh5)}(hThe ``router.js`` file can be modified to render different views based on the URL. For example, a theme which has no home page and routes users to the ``DataCatalogView`` view instead, would modify ``router.js`` like so:h](hThe }(hThe hjB hhhNhNubj)}(h ``router.js``h]h router.js}(hhhjK ubah}(h]h!]h#]h%]h']uh+jhjB ubh file can be modified to render different views based on the URL. For example, a theme which has no home page and routes users to the }(h file can be modified to render different views based on the URL. For example, a theme which has no home page and routes users to the hjB hhhNhNubj)}(h``DataCatalogView``h]hDataCatalogView}(hhhj^ ubah}(h]h!]h#]h%]h']uh+jhjB ubh view instead, would modify }(h view instead, would modify hjB hhhNhNubj)}(h ``router.js``h]h router.js}(hhhjq ubah}(h]h!]h#]h%]h']uh+jhjB ubh like so:}(h like so:hjB hhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hKhj$ hhubj)}(hhh]j)}(hX// MetacatUI Router // ---------------- var UIRouter = Backbone.Router.extend({ routes: { '' : 'routeToData', // route ROOT to data 'about' : 'renderAbout', 'about(/:anchorId)' : 'renderAbout', 'plans' : 'renderPlans', 'tools(/:anchorId)' : 'renderTools', 'data(/search/:searchTerm)(/page/:page)' : 'renderData', 'view/*pid' : 'renderMetadata', 'external(/*url)' : 'renderExternal', 'logout' : 'logout', 'signup' : 'renderLdap', 'account(/:stage)' : 'renderLdap', 'share' : 'renderRegistry' },h]hX// MetacatUI Router // ---------------- var UIRouter = Backbone.Router.extend({ routes: { '' : 'routeToData', // route ROOT to data 'about' : 'renderAbout', 'about(/:anchorId)' : 'renderAbout', 'plans' : 'renderPlans', 'tools(/:anchorId)' : 'renderTools', 'data(/search/:searchTerm)(/page/:page)' : 'renderData', 'view/*pid' : 'renderMetadata', 'external(/*url)' : 'renderExternal', 'logout' : 'logout', 'signup' : 'renderLdap', 'account(/:stage)' : 'renderLdap', 'share' : 'renderRegistry' },}(hhhj ubah}(h]h!]h#]h%]h']jjuh+jhKhj ubah}(h]h!]h#]h%]h']uh+jhj$ hhhh,hNubh5)}(hIn this example, the index path, ``''``, was changed from the value ``renderIndex`` which renders the ``IndexView.js`` view, to ``routeToData`` which reroutes to ``data``, in turn rendering the ``DataCatalogView`` view.h](h!In this example, the index path, }(h!In this example, the index path, hj hhhNhNubj)}(h``''``h]h''}(hhhj ubah}(h]h!]h#]h%]h']uh+jhj ubh, was changed from the value }(h, was changed from the value hj hhhNhNubj)}(h``renderIndex``h]h renderIndex}(hhhj ubah}(h]h!]h#]h%]h']uh+jhj ubh which renders the }(h which renders the hj hhhNhNubj)}(h``IndexView.js``h]h IndexView.js}(hhhj ubah}(h]h!]h#]h%]h']uh+jhj ubh view, to }(h view, to hj hhhNhNubj)}(h``routeToData``h]h routeToData}(hhhj ubah}(h]h!]h#]h%]h']uh+jhj ubh which reroutes to }(h which reroutes to hj hhhNhNubj)}(h``data``h]hdata}(hhhj ubah}(h]h!]h#]h%]h']uh+jhj ubh, in turn rendering the }(h, in turn rendering the hj hhhNhNubj)}(h``DataCatalogView``h]hDataCatalogView}(hhhj ubah}(h]h!]h#]h%]h']uh+jhj ubh view.}(h view.hj hhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hKhj$ hhubj)}(hhh](j)}(hrouteToData: function () { console.log('Called UIRouter.routeToData()'); this.navigate("data", {trigger: true}); },h]hrouteToData: function () { console.log('Called UIRouter.routeToData()'); this.navigate("data", {trigger: true}); },}(hhhj% ubah}(h]h!]h#]h%]h']jjuh+jhKhj" ubh5)}(h**Note: Remember to include any views or routers in your list of overrides in js/themes//config.js for each file you modify**h]jo)}(hj5 h]hNote: Remember to include any views or routers in your list of overrides in js/themes//config.js for each file you modify}(hhhj7 ubah}(h]h!]h#]h%]h']uh+jnhj3 ubah}(h]h!]h#]h%]h']uh+h4hh,hKhj" ubeh}(h]h!]h#]h%]h']uh+jhj$ hhhh,hNubh5)}(hFor more information about ``Backbone.js``, see the Backbone.js documentation at `www.backbonejs.org `_h](hFor more information about }(hFor more information about hjP hhhNhNubj)}(h``Backbone.js``h]h Backbone.js}(hhhjY ubah}(h]h!]h#]h%]h']uh+jhjP ubh', see the Backbone.js documentation at }(h', see the Backbone.js documentation at hjP hhhNhNubh|)}(h1`www.backbonejs.org `_h]hwww.backbonejs.org}(hhhjl ubah}(h]h!]h#]h%]h']namewww.backbonejs.orgjhttp://www.backbonejs.orguh+h{hjP ubj)}(h h]h}(h]www-backbonejs-orgah!]h#]www.backbonejs.orgah%]h']refurij| uh+jjKhjP ubeh}(h]h!]h#]h%]h']uh+h4hh,hKhj$ hhubeh}(h]jah!]h#]"advanced options for custom themesah%]h']uh+h hjhhhh,hKubeh}(h]hah!]h#]creating a custom themeah%]h']uh+h hh hhhh,hKNubh )}(hhh](h)}(hj7h]hUsing Custom Endpoints}(hj7hj hhhNhNubah}(h]h!]h#]h%]h']h)j:uh+hhj hhhh,hKubh5)}(hX5MetacatUI can also be configured to use custom DataONE endpoints for both Member Node and Coordinating Node APIs. The ``dataone`` theme shows an example of this endpoint customization in the ``AppModel.js`` file. In custom themes, the AppModel.js values can be edited to suit your particular deployment needs.h](hvMetacatUI can also be configured to use custom DataONE endpoints for both Member Node and Coordinating Node APIs. The }(hvMetacatUI can also be configured to use custom DataONE endpoints for both Member Node and Coordinating Node APIs. The hj hhhNhNubj)}(h ``dataone``h]hdataone}(hhhj ubah}(h]h!]h#]h%]h']uh+jhj ubh> theme shows an example of this endpoint customization in the }(h> theme shows an example of this endpoint customization in the hj hhhNhNubj)}(h``AppModel.js``h]h AppModel.js}(hhhj ubah}(h]h!]h#]h%]h']uh+jhj ubhg file. In custom themes, the AppModel.js values can be edited to suit your particular deployment needs.}(hg file. In custom themes, the AppModel.js values can be edited to suit your particular deployment needs.hj hhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hKhj hhubh5)}(h_For querying the DataONE Coordinating Node, for example, the following properties would be set:h]h_For querying the DataONE Coordinating Node, for example, the following properties would be set:}(hj hj hhhNhNubah}(h]h!]h#]h%]h']uh+h4hh,hKhj hhubj)}(hhh]j)}(h`context: '', d1Service: "/cn/v2", d1CNBaseUrl: "https://cn.dataone.org", d1CNService: "/cn/v2",h]h`context: '', d1Service: "/cn/v2", d1CNBaseUrl: "https://cn.dataone.org", d1CNService: "/cn/v2",}(hhhj ubah}(h]h!]h#]h%]h']jjuh+jhKhj ubah}(h]h!]h#]h%]h']uh+jhj hhhh,hNubh5)}(h:But querying a Metacat Member Node would be configured as:h]h:But querying a Metacat Member Node would be configured as:}(hj hj hhhNhNubah}(h]h!]h#]h%]h']uh+h4hh,hKhj hhubj)}(hhh]j)}(hjcontext: '/metacat', d1Service: '/d1/mn/v2', d1CNBaseUrl: "https://cn.dataone.org/", d1CNService: "cn/v2",h]hjcontext: '/metacat', d1Service: '/d1/mn/v2', d1CNBaseUrl: "https://cn.dataone.org/", d1CNService: "cn/v2",}(hhhj ubah}(h]h!]h#]h%]h']jjuh+jhKhj ubah}(h]h!]h#]h%]h']uh+jhj hhhh,hNubeh}(h]j@ah!]h#]using custom endpointsah%]h']uh+h hh hhhh,hKubh )}(hhh](h)}(hjZh]hCreating a Custom Skin}(hjZhj7 hhhNhNubah}(h]h!]h#]h%]h']h)j]uh+hhj4 hhhh,hKubh/)}(hXnDeprecated since version 2.2.0: Use MetacatUI themes for any new UI development. Metacat's original skinning mechanism is still included and used for aspects of rendering metadata, but is not the preferred method for building web clients for Metacat.To MetacatUI themes, select metacatui as the default skin during skin configuration in the administration interface.h](h5)}(hDeprecated since version 2.2.0: Use MetacatUI themes for any new UI development. Metacat's original skinning mechanism is still included and used for aspects of rendering metadata, but is not the preferred method for building web clients for Metacat.h](h;)}(h Deprecated since version 2.2.0: h]h Deprecated since version 2.2.0: }(hhhjL hhhNhNubah}(h]h!]h.ah#]h%]h']uh+h:hjH hhhh,hNubhUse MetacatUI themes for any new UI development. Metacat’s original skinning mechanism is still included and used for aspects of rendering metadata, but is not the preferred method for building web clients for Metacat.}(hUse MetacatUI themes for any new UI development. Metacat's original skinning mechanism is still included and used for aspects of rendering metadata, but is not the preferred method for building web clients for Metacat.hjH hhhNhNubeh}(h]h!]h#]h%]h'] translatableuh+h4hjD hhhh,hNubh5)}(hxTo MetacatUI themes, select ``metacatui`` as the default skin during skin configuration in the administration interface.h](hTo MetacatUI themes, select }(hTo MetacatUI themes, select hjf hhhNhNubj)}(h ``metacatui``h]h metacatui}(hhhjo ubah}(h]h!]h#]h%]h']uh+jhjf ubhO as the default skin during skin configuration in the administration interface.}(hO as the default skin during skin configuration in the administration interface.hjf hhhNhNubeh}(h]h!]h#]h%]h']uh+h4hh,hKhjD hhubeh}(h]h!]h#]h%]h']hW deprecatedhY2.2.0uh+h.hhhh,hKhj4 ubh5)}(hSkins are used in Metacat to customize the appearance of the search and display web interface that is presented by Metacat. Skins can be used to make a Metacat instance exactly integrate into an existing web site, and are fully customizable.h]hSkins are used in Metacat to customize the appearance of the search and display web interface that is presented by Metacat. Skins can be used to make a Metacat instance exactly integrate into an existing web site, and are fully customizable.}(hj hj hhhNhNubah}(h]h!]h#]h%]h']uh+h4hh,hKhj4 hhubh5)}(hTo create and customize your own Metacat skin, you must first create a skin directory. This is most easily accomplished by copying one of the existing skin directories. Step-by-step directions for creating and installing a custom skin are included below:h]hTo create and customize your own Metacat skin, you must first create a skin directory. This is most easily accomplished by copying one of the existing skin directories. Step-by-step directions for creating and installing a custom skin are included below:}(hj hj hhhNhNubah}(h]h!]h#]h%]h']uh+h4hh,hKhj4 hhubjb)}(hhh]ht)}(hMCopy an existing skin directory. We recommend using the "default" directory. h]h5)}(hLCopy an existing skin directory. We recommend using the "default" directory.h]hPCopy an existing skin directory. We recommend using the “default” directory.}(hj hj ubah}(h]h!]h#]h%]h']uh+h4hh,hKhj ubah}(h]h!]h#]h%]h']uh+hshj hhhh,hNubah}(h]h!]h#]h%]h']j(j)j*hj+j,uh+jahj4 hhhh,hKubj)}(hhh](j)}(hSsudo cp -r /style/skins/default/ /style/skins/[yourSkin]/h]hSsudo cp -r /style/skins/default/ /style/skins/[yourSkin]/}(hhhj ubah}(h]h!]h#]h%]h']jjuh+jhKhj ubh5)}(hWhere ```` is the directory in which the Metacat application code lives and ``[yourSkin]`` is the name you wish to apply to your skin.h](hWhere }(hWhere hj ubj)}(h````h]h }(hhhj ubah}(h]h!]h#]h%]h']uh+jhj ubhC is the directory in which the Metacat application code lives and }(hC is the directory in which the Metacat application code lives and hj ubj)}(h``[yourSkin]``h]h [yourSkin]}(hhhj ubah}(h]h!]h#]h%]h']uh+jhj ubh, is the name you wish to apply to your skin.}(h, is the name you wish to apply to your skin.hj ubeh}(h]h!]h#]h%]h']uh+h4hh,hKhj ubeh}(h]h!]h#]h%]h']uh+jhj4 hhhh,hNubjb)}(hhh]ht)}(hIn ``[yourSkin]`` directory, change all files named ``default.xxx`` to ``yourSkin.xxx``. The following files should be changed: h]h5)}(hIn ``[yourSkin]`` directory, change all files named ``default.xxx`` to ``yourSkin.xxx``. The following files should be changed:h](hIn }(hIn hj ubj)}(h``[yourSkin]``h]h [yourSkin]}(hhhj) ubah}(h]h!]h#]h%]h']uh+jhj ubh# directory, change all files named }(h# directory, change all files named hj ubj)}(h``default.xxx``h]h default.xxx}(hhhj< ubah}(h]h!]h#]h%]h']uh+jhj ubh to }(h to hj ubj)}(h``yourSkin.xxx``h]h yourSkin.xxx}(hhhjO ubah}(h]h!]h#]h%]h']uh+jhj ubh(. The following files should be changed:}(h(. The following files should be changed:hj ubeh}(h]h!]h#]h%]h']uh+h4hh,hKhj ubah}(h]h!]h#]h%]h']uh+hshj hhhh,hNubah}(h]h!]h#]h%]h']j(j)j*hj+j,jKuh+jahj4 hhhh,hKubj)}(hhh]j)}(hUdefault.css default.js default.properties default.properties.metadata.xml default.xmlh]hUdefault.css default.js default.properties default.properties.metadata.xml default.xml}(hhhjw ubah}(h]h!]h#]h%]h']jjuh+jhKhjt ubah}(h]h!]h#]h%]h']uh+jhj4 hhhh,hNubjb)}(hhh](ht)}(hIn the metacat.properties file(``/WEB_INF/metacat.properties``), add ``[yourSkin]`` to the value of the skin.names property. h]h5)}(hIn the metacat.properties file(``/WEB_INF/metacat.properties``), add ``[yourSkin]`` to the value of the skin.names property.h](hIn the metacat.properties file(}(hIn the metacat.properties file(hj ubj)}(h,``/WEB_INF/metacat.properties``h]h(/WEB_INF/metacat.properties}(hhhj ubah}(h]h!]h#]h%]h']uh+jhj ubh), add }(h), add hj ubj)}(h``[yourSkin]``h]h [yourSkin]}(hhhj ubah}(h]h!]h#]h%]h']uh+jhj ubh) to the value of the skin.names property.}(h) to the value of the skin.names property.hj ubeh}(h]h!]h#]h%]h']uh+h4hh,hMhj ubah}(h]h!]h#]h%]h']uh+hshj hhhh,hNubht)}(h[Restart Tomcat. Log in as the user that runs your Tomcat server (often "tomcat") and type: h]h5)}(hZRestart Tomcat. Log in as the user that runs your Tomcat server (often "tomcat") and type:h]h^Restart Tomcat. Log in as the user that runs your Tomcat server (often “tomcat”) and type:}(hj hj ubah}(h]h!]h#]h%]h']uh+h4hh,hMhj ubah}(h]h!]h#]h%]h']uh+hshj hhhh,hNubeh}(h]h!]h#]h%]h']j(j)j*hj+j,jKuh+jahj4 hhhh,hMubj)}(hhh]j)}(h/etc/init.d/tomcat7 restarth]h/etc/init.d/tomcat7 restart}(hhhj ubah}(h]h!]h#]h%]h']jjuh+jhM hj ubah}(h]h!]h#]h%]h']uh+jhj4 hhhh,hNubh5)}(hNavigate to Metacat's Configuration utility and select the Configure Skins option. Your custom skin should appear as a choice in the skins list. Change the layout and style by modifying the header, footer, css, and other files in your new skin directory.h]hXNavigate to Metacat’s Configuration utility and select the Configure Skins option. Your custom skin should appear as a choice in the skins list. Change the layout and style by modifying the header, footer, css, and other files in your new skin directory.}(hj hj hhhNhNubah}(h]h!]h#]h%]h']uh+h4hh,hM hj4 hhubh5)}(hIt is important to note that all customized skins will be overwritten when Metacat is reinstalled or upgraded. Please remember to back up your skins before reinstalling or upgrading Metacat.h]hIt is important to note that all customized skins will be overwritten when Metacat is reinstalled or upgraded. Please remember to back up your skins before reinstalling or upgrading Metacat.}(hj hj hhhNhNubah}(h]h!]h#]h%]h']uh+h4hh,hMhj4 hhubeh}(h]jcah!]h#]creating a custom skinah%]h']uh+h hh hhhh,hKubeh}(h]hah!]h#]modifying and creating themesah%]h']uh+h hhhhhh,hKubah}(h]h!]h#]h%]h']sourceh,uh+hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjO error_encodingUTF-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh, _destinationN _config_files]pep_referencesN pep_base_url https://www.python.org/dev/peps/pep_file_url_templatepep-%04drfc_referencesN rfc_base_urlhttps://tools.ietf.org/html/ tab_widthKtrim_footnote_reference_spacefile_insertion_enabled raw_enabledKsyntax_highlightlong smart_quotessmartquotes_localesNcharacter_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xformembed_stylesheetcloak_email_addressesenvNgettext_compactubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j) hjjjjjjjjjhj hj! hj jj j j1 j@j" jcu nametypes}(j) NjNjjjjNj Nj! Nj Nj j1 Nj" Nuh}(hh jh]jjjjjjhjChjhj jj$ j j} j@j jcj4 j>jh*h}hhhhhhj jj:j0j]jSu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startKid_startK parse_messages](hsystem_message)}(hhh]h5)}(h:Enumerated list start value not ordinal-1: "5" (ordinal 5)h]h>Enumerated list start value not ordinal-1: “5” (ordinal 5)}(hhhj ubah}(h]h!]h#]h%]h']uh+h4hj ubah}(h]h!]h#]h%]h']levelKtypeINFOsourceh,lineKuh+j hjChhhh,hKAubj )}(hhh]h5)}(h:Enumerated list start value not ordinal-1: "7" (ordinal 7)h]h>Enumerated list start value not ordinal-1: “7” (ordinal 7)}(hhhj ubah}(h]h!]h#]h%]h']uh+h4hj ubah}(h]h!]h#]h%]h']levelKtypej sourceh,lineKuh+j hjChhhh,hKCubj )}(hhh]h5)}(h?Enumerated list ends without a blank line; unexpected unindent.h]h?Enumerated list ends without a blank line; unexpected unindent.}(hhhj ubah}(h]h!]h#]h%]h']uh+h4hj ubah}(h]h!]h#]h%]h']levelKtypeWARNINGlineKEsourceh,uh+j hjChhhh,hKDubj )}(hhh]h5)}(h:Enumerated list start value not ordinal-1: "6" (ordinal 6)h]h>Enumerated list start value not ordinal-1: “6” (ordinal 6)}(hhhj ubah}(h]h!]h#]h%]h']uh+h4hj ubah}(h]h!]h#]h%]h']levelKtypej sourceh,lineKuh+j hjChhhh,hKEubj )}(hhh]h5)}(h:Enumerated list start value not ordinal-1: "2" (ordinal 2)h]h>Enumerated list start value not ordinal-1: “2” (ordinal 2)}(hhhjubah}(h]h!]h#]h%]h']uh+h4hjubah}(h]h!]h#]h%]h']levelKtypej sourceh,lineKuh+j hjhhhh,hK]ubj )}(hhh]h5)}(h:Enumerated list start value not ordinal-1: "2" (ordinal 2)h]h>Enumerated list start value not ordinal-1: “2” (ordinal 2)}(hhhj4ubah}(h]h!]h#]h%]h']uh+h4hj1ubah}(h]h!]h#]h%]h']levelKtypej sourceh,lineKuh+j hj4 hhhh,hKubj )}(hhh]h5)}(h:Enumerated list start value not ordinal-1: "3" (ordinal 3)h]h>Enumerated list start value not ordinal-1: “3” (ordinal 3)}(hhhjOubah}(h]h!]h#]h%]h']uh+h4hjLubah}(h]h!]h#]h%]h']levelKtypej sourceh,lineKuh+j hj4 hhhh,hMubetransform_messages] transformerN decorationNhhub.