ÄïŒÔ������ådocutils.nodesîådocumentîìî)Åî}î(å rawsourceîå�îåchildrenî]îh�åsectionîìî)Åî}î(hhh]î(h�åtitleîìî)Åî}î(håModifying and Creating Themesîh]îh�åTextîìîåModifying and Creating ThemesîÖîÅî}î(hhåparentîhhhåsourceîNålineîNubaå attributesî}î(åidsî]îåclassesî]îånamesî]îådupnamesî]îåbackrefsî]îårefidîåid2îuåtagnameîhhhhhhåX/var/lib/jenkins/jobs/metacat_beta/workspace/metacat/docs/user/metacat/source/themes.rstîhKubåsphinx.addnodesîåversionmodifiedîìî)Åî}î(håNew in version 2.2.0.îh]îh�å paragraphîìî)Åî}î(håNew in version 2.2.0.îh]îh�åinlineîìî)Åî}î(håNew in version 2.2.0.îh]îhåNew in version 2.2.0.îÖîÅî}î(hhhh<ubah}î(h]îh!]îh.ah#]îh%]îh']îuh+h:hh6ubah}î(h]îh!]îh#]îh%]îh']îåtranslatableîâuh+h4hh0hhhh,hKubah}î(h]îh!]îh#]îh%]îh']îåtypeîåversionaddedîåversionîå2.2.0îuh+h.hhhh,hKhhubh�åtopicîìî)Åî}î(hhh]î(h)Åî}î(håContentsîh]îhåContentsîÖîÅî}î(hhhh`ubah}î(h]îh!]îh#]îh%]îh']îuh+hhh]ubh�åbullet_listîìî)Åî}î(hhh]îh�å list_itemîìî)Åî}î(hhh]î(h5)Åî}î(hhh]îh�å referenceîìî)Åî}î(hhh]îhåModifying and Creating ThemesîÖîÅî}î(hhhh}ubah}î(h]îh*ah!]îh#]îh%]îh']îårefidîåmodifying-and-creating-themesîuh+h{hhxubah}î(h]îh!]îh#]îh%]îh']îuh+h4hhuubho)Åî}î(hhh]î(ht)Åî}î(hhh]îh5)Åî}î(hhh]îh|)Åî}î(hhh]îhå#Quick Start Using the Default ThemeîÖîÅî}î(hå#Quick Start Using the Default Themeîhhõubah}î(h]îåid3îah!]îh#]îh%]îh']îårefidîå#quick-start-using-the-default-themeîuh+h{hhòubah}î(h]îh!]îh#]îh%]îh']îuh+h4hhïubah}î(h]îh!]îh#]îh%]îh']îuh+hshhíubht)Åî}î(hhh]î(h5)Åî}î(hhh]îh|)Åî}î(hhh]îhåCreating a Custom ThemeîÖîÅî}î(håCreating a Custom Themeîhhæubah}î(h]îåid4îah!]îh#]îh%]îh']îårefidîåcreating-a-custom-themeîuh+h{hhªubah}î(h]îh!]îh#]îh%]îh']îuh+h4hh∏ubho)Åî}î(hhh]î(ht)Åî}î(hhh]îh5)Åî}î(hhh]îh|)Åî}î(hhh]îhå3Changing the background images on the default themeîÖîÅî}î(hå3Changing the background images on the default themeîhhfiubah}î(h]îåid5îah!]îh#]îh%]îh']îårefidîå3changing-the-background-images-on-the-default-themeîuh+h{hh€ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hhÿubah}î(h]îh!]îh#]îh%]îh']îuh+hshh’ubht)Åî}î(hhh]îh5)Åî}î(hhh]îh|)Åî}î(hhh]îhå"Advanced options for custom themesîÖîÅî}î(hå"Advanced options for custom themesîhj��ubah}î(h]îåid6îah!]îh#]îh%]îh']îårefidîå"advanced-options-for-custom-themesîuh+h{hh˛ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hh˚ubah}î(h]îh!]îh#]îh%]îh']îuh+hshh’ubeh}î(h]îh!]îh#]îh%]îh']îuh+hnhh∏ubeh}î(h]îh!]îh#]îh%]îh']îuh+hshhíubht)Åî}î(hhh]îh5)Åî}î(hhh]îh|)Åî}î(hhh]îhåUsing Custom EndpointsîÖîÅî}î(håUsing Custom Endpointsîhj0��ubah}î(h]îåid7îah!]îh#]îh%]îh']îårefidîåusing-custom-endpointsîuh+h{hj-��ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hj*��ubah}î(h]îh!]îh#]îh%]îh']îuh+hshhíubht)Åî}î(hhh]îh5)Åî}î(hhh]îh|)Åî}î(hhh]îhåCreating a Custom SkinîÖîÅî}î(håCreating a Custom SkinîhjS��ubah}î(h]îåid8îah!]îh#]îh%]îh']îårefidîåcreating-a-custom-skinîuh+h{hjP��ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hjM��ubah}î(h]îh!]îh#]îh%]îh']îuh+hshhíubeh}î(h]îh!]îh#]îh%]îh']îuh+hnhhuubeh}î(h]îh!]îh#]îh%]îh']îuh+hshhpubah}î(h]îh!]îh#]îh%]îh']îuh+hnhh]hhhNhNubeh}î(h]îåcontentsîah!]îåcontentsîah#]îåcontentsîah%]îh']îuh+h[hh,hKhhhhubh5)Åî}î(hX ��Metacat's theming system, `MetacatUI <https://github.com/NCEAS/metacatui>`_, is deployed separately from Metacat, allowing more independent user interface customization. Check the `MetacatUI GitHub <https://github.com/NCEAS/metacatui>`_ for the most up to date version.îh]î(håMetacat‚Äôs theming system, îÖîÅî}î(håMetacat's theming system, îhjã��hhhNhNubh|)Åî}î(hå1`MetacatUI <https://github.com/NCEAS/metacatui>`_îh]îhå MetacatUIîÖîÅî}î(hhhjî��ubah}î(h]îh!]îh#]îh%]îh']îånameîå MetacatUIîårefuriîå"https://github.com/NCEAS/metacatuiîuh+h{hjã��ubh�åtargetîìî)Åî}î(hå% <https://github.com/NCEAS/metacatui>îh]îh}î(h]îå metacatuiîah!]îh#]îå metacatuiîah%]îh']îårefuriîj•��uh+j¶��å referencedîKhjã��ubhåi, is deployed separately from Metacat, allowing more independent user interface customization. Check the îÖîÅî}î(håi, is deployed separately from Metacat, allowing more independent user interface customization. Check the îhjã��hhhNhNubh|)Åî}î(hå8`MetacatUI GitHub <https://github.com/NCEAS/metacatui>`_îh]îhåMetacatUI GitHubîÖîÅî}î(hhhjª��ubah}î(h]îh!]îh#]îh%]îh']îånameîåMetacatUI GitHubîj§��å"https://github.com/NCEAS/metacatuiîuh+h{hjã��ubjß��)Åî}î(hå% <https://github.com/NCEAS/metacatui>îh]îh}î(h]îåmetacatui-githubîah!]îh#]îåmetacatui githubîah%]îh']îårefuriîjÀ��uh+j¶��jµ��Khjã��ubhå! for the most up to date version.îÖîÅî}î(hå! for the most up to date version.îhjã��hhhNhNubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKhhhhubh5)Åî}î(hX,��MetacatUI is structured in a model-view-controller architecture using `Backbone.js <http://www.backbonejs.org>`_. 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]î(håFMetacatUI is structured in a model-view-controller architecture using îÖîÅî}î(håFMetacatUI is structured in a model-view-controller architecture using îhj‰��hhhNhNubh|)Åî}î(hå*`Backbone.js <http://www.backbonejs.org>`_îh]îhåBackbone.jsîÖîÅî}î(hhhjÌ��ubah}î(h]îh!]îh#]îh%]îh']îånameîåBackbone.jsîj§��åhttp://www.backbonejs.orgîuh+h{hj‰��ubjß��)Åî}î(hå <http://www.backbonejs.org>îh]îh}î(h]îåbackbone-jsîah!]îh#]îåbackbone.jsîah%]îh']îårefuriîj˝��uh+j¶��jµ��Khj‰��ubhåº. 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.îhj‰��hhhNhNubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hK hhhhubh�åfigureîìî)Åî}î(hhh]î(h�åimageîìî)Åî}î(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']îåuriîåimages/screenshots/image007.pngîå candidatesî}îå*îj(��suh+j��hj��hh,hKubh�åcaptionîìî)Åî}î(håOMetacatUI's default home page. Users can customize the appearance using themes.îh]îhåQMetacatUI‚Äôs default home page. Users can customize the appearance using themes.îÖîÅî}î(hj0��hj.��ubah}î(h]îh!]îh#]îh%]îh']îuh+j,��hh,hKhj��ubeh}î(h]îåid1îah!]îh#]îh%]îh']îuh+j��hKhhhhhh,ubh )Åî}î(hhh]î(h)Åî}î(hh¢h]îhå#Quick Start Using the Default ThemeîÖîÅî}î(hh¢hjF��hhhNhNubah}î(h]îh!]îh#]îh%]îh']îh)h•uh+hhjC��hhhh,hKubh5)Åî}î(hXZ��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.î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.îÖîÅî}î(hjU��hjS��hhhNhNubah}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKhjC��hhubh�åenumerated_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)Åî}î(håz**Create a new theme:** Duplicate the ``js/themes/default`` directory and rename it to a unique theme name with no spaces.îh]î(h�åstrongîìî)Åî}î(hå**Create a new theme:**îh]îhåCreate a new theme:îÖîÅî}î(hhhjp��ubah}î(h]îh!]îh#]îh%]îh']îuh+jn��hjj��ubhå Duplicate the îÖîÅî}î(hå Duplicate the îhjj��ubh�åliteralîìî)Åî}î(hå``js/themes/default``îh]îhåjs/themes/defaultîÖîÅî}î(hhhjÖ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjj��ubhå? 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.îhjj��ubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKhjf��ubah}î(h]îh!]îh#]îh%]îh']îuh+hshjc��hhhh,hNubht)Åî}î(håº**Add your logo:** In the ``js/themes/<yourtheme>/img`` directory, add the following image files: * Your organization's logo * Any supporter or donor logos to use in the footer îh]î(h5)Åî}î(håa**Add your logo:** In the ``js/themes/<yourtheme>/img`` directory, add the following image files:îh]î(jo��)Åî}î(hå**Add your logo:**îh]îhåAdd your logo:îÖîÅî}î(hhhj¨��ubah}î(h]îh!]îh#]îh%]îh']îuh+jn��hj®��ubhå In the îÖîÅî}î(hå In the îhj®��ubjÑ��)Åî}î(hå``js/themes/<yourtheme>/img``îh]îhåjs/themes/<yourtheme>/imgîÖîÅî}î(hhhjø��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj®��ubhå* directory, add the following image files:îÖîÅî}î(hå* directory, add the following image files:îhj®��ubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKhj§��ubh�åblock_quoteîìî)Åî}î(hhh]îho)Åî}î(hhh]î(ht)Åî}î(håYour organization's logoîh]îh5)Åî}î(hj‚��h]îhåYour organization‚Äôs logoîÖîÅî}î(hj‚��hj‰��ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKhj‡��ubah}î(h]îh!]îh#]îh%]îh']îuh+hshj›��ubht)Åî}î(hå2Any supporter or donor logos to use in the footer îh]îh5)Åî}î(hå1Any supporter or donor logos to use in the footerîh]îhå1Any supporter or donor logos to use in the footerîÖîÅî}î(hj˝��hj˚��ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKhj˜��ubah}î(h]îh!]îh#]îh%]îh']îuh+hshj›��ubeh}î(h]îh!]îh#]îh%]îh']îåbulletîj+��uh+hnhh,hKhj⁄��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hj§��ubeh}î(h]îh!]îh#]îh%]îh']îuh+hshjc��hhhh,hNubeh}î(h]îh!]îh#]îh%]îh']îåenumtypeîåarabicîåprefixîhåsuffixîå.îuh+ja��hjC��hhhh,hKubh5)Åî}î(hå±3. **Customize the header and footer:** Create a ``templates`` directory in ``js/themes/<yourtheme>`` and copy the following files from ``js/templates`` into that new directory:îh]î(hå3. îÖîÅî}î(hå3. îhj-��hhhNhNubjo��)Åî}î(hå$**Customize the header and footer:**îh]îhå Customize the header and footer:îÖîÅî}î(hhhj6��ubah}î(h]îh!]îh#]îh%]îh']îuh+jn��hj-��ubhå Create a îÖîÅî}î(hå Create a îhj-��hhhNhNubjÑ��)Åî}î(hå ``templates``îh]îhå templatesîÖîÅî}î(hhhjI��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj-��ubhå directory in îÖîÅî}î(hå directory in îhj-��hhhNhNubjÑ��)Åî}î(hå``js/themes/<yourtheme>``îh]îhåjs/themes/<yourtheme>îÖîÅî}î(hhhj\��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj-��ubhå# and copy the following files from îÖîÅî}î(hå# and copy the following files from îhj-��hhhNhNubjÑ��)Åî}î(hå``js/templates``îh]îhåjs/templatesîÖîÅî}î(hhhjo��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj-��ubhå into that new directory:îÖîÅî}î(hå into that new directory:îhj-��hhhNhNubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKhjC��hhubjŸ��)Åî}î(hhh]îho)Åî}î(hhh]î(ht)Åî}î(håfooter.htmlîh]îh5)Åî}î(hjê��h]îhåfooter.htmlîÖîÅî}î(hjê��hjí��ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hK!hjé��ubah}î(h]îh!]îh#]îh%]îh']îuh+hshjã��ubht)Åî}î(hånavbar.html îh]îh5)Åî}î(hånavbar.htmlîh]îhånavbar.htmlîÖîÅî}î(hj´��hj©��ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hK"hj•��ubah}î(h]îh!]îh#]îh%]îh']îuh+hshjã��ubeh}î(h]îh!]îh#]îh%]îh']îj��j+��uh+hnhh,hK!hjà��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hjC��hhhNhNubh5)Åî}î(hå”3a. Open the ``js/themes/<yourtheme>/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 îhj…��hhhNhNubjÑ��)Åî}î(hå/``js/themes/<yourtheme>/templates/footer.html``îh]îhå+js/themes/<yourtheme>/templates/footer.htmlîÖîÅî}î(hhhj“��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj…��ubhåó 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,îhj…��hhhNhNubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hK$hjC��hhubjŸ��)Åî}î(hhh]î(h�å literal_blockîìî)Åî}î(håÇ<a href="http://nceas.ucsb.edu" target="_blank"> <img alt="NCEAS" src="./js/themes/yourtheme/img/nceas-logo-white.png"> </a>îh]îhåÇ<a href="http://nceas.ucsb.edu" target="_blank"> <img alt="NCEAS" src="./js/themes/yourtheme/img/nceas-logo-white.png"> </a>îÖîÅî}î(hhhj��ubah}î(h]îh!]îh#]îh%]îh']îå xml:spaceîåpreserveîuh+jÓ��hK)hjÎ��ubh5)Åî}î(håjYou can add or modify any of the HTML in the footer; we are using the logo only as a simple demonstration.îh]îhåjYou can add or modify any of the HTML in the footer; we are using the logo only as a simple demonstration.îÖîÅî}î(hj��hj���ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hK-hjÎ��ubeh}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hjC��hhhh,hNubh5)Åî}î(hå…3b. Similarly, open the ``js/themes/<yourtheme>/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]î(hå3b. Similarly, open the îÖîÅî}î(hå3b. Similarly, open the îhj��hhhNhNubjÑ��)Åî}î(hå/``js/themes/<yourtheme>/templates/navbar.html``îh]îhå+js/themes/<yourtheme>/templates/navbar.htmlîÖîÅî}î(hhhj��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj��ubhåÑ 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.îhj��hhhNhNubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hK/hjC��hhubh5)Åî}î(hX‹��4. **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/<yourtheme>/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]î(hå4. îÖîÅî}î(hå4. îhj6��hhhNhNubjo��)Åî}î(hå**Create your theme map:**îh]îhåCreate your theme map:îÖîÅî}î(hhhj?��ubah}î(h]îh!]îh#]îh%]îh']îuh+jn��hj6��ubhå¶ 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 îhj6��hhhNhNubjÑ��)Åî}î(hå#``js/themes/<yourtheme>/config.js``îh]îhåjs/themes/<yourtheme>/config.jsîÖîÅî}î(hhhjR��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj6��ubhå( file, change the theme name on line 1, îÖîÅî}î(hå( file, change the theme name on line 1, îhj6��hhhNhNubjÑ��)Åî}î(hå``default``îh]îhådefaultîÖîÅî}î(hhhje��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj6��ubhå(, to your chosen new theme name. In the îÖîÅî}î(hå(, to your chosen new theme name. In the îhj6��hhhNhNubjÑ��)Åî}î(hå``themeMap``îh]îhåthemeMapîÖîÅî}î(hhhjx��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj6��ubhåè, 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.îhj6��hhhNhNubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hK1hjC��hhubjŸ��)Åî}î(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' } };îÖîÅî}î(hhhjî��ubah}î(h]îh!]îh#]îh%]îh']îj˛��jˇ��uh+jÓ��hK7hjë��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hjC��hhhh,hNubjb��)Åî}î(hhh]îht)Åî}î(håDRepeat step 3-4 as necessary for any other template files you edit. îh]îh5)Åî}î(håCRepeat step 3-4 as necessary for any other template files you edit.îh]îhåCRepeat step 3-4 as necessary for any other template files you edit.îÖîÅî}î(hj±��hjØ��ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKAhj´��ubah}î(h]îh!]îh#]îh%]îh']îuh+hshj®��hhhh,hNubah}î(h]îh!]îh#]îh%]îh']îj(��j)��j*��hj+��j,��åstartîKuh+ja��hjC��hhhh,hKAubjb��)Åî}î(hhh]îht)Åî}î(hX›��Open ``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)Åî}î(hX›��Open ``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]î(håOpen îÖîÅî}î(håOpen îhj—��ubjÑ��)Åî}î(hå``index.html``îh]îhå index.htmlîÖîÅî}î(hhhj⁄��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj—��ubhå6. Edit the following line to reflect your theme name (îÖîÅî}î(hå6. Edit the following line to reflect your theme name (îhj—��ubjÑ��)Åî}î(hå``data-theme``îh]îhå data-themeîÖîÅî}î(hhhjÌ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj—��ubhå) and your Metacat context (îÖîÅî}î(hå) and your Metacat context (îhj—��ubjÑ��)Åî}î(hå``data-metacat-context``îh]îhådata-metacat-contextîÖîÅî}î(hhhj���ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj—��ubhXV��). (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.)îhj—��ubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKChjÕ��ubah}î(h]îh!]îh#]îh%]îh']îuh+hshj ��hhhh,hNubah}î(h]îh!]îh#]îh%]îh']îj(��j)��j*��hj+��j,��j…��Kuh+ja��hjC��hhhh,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.) :: <script data-theme="default" data-metacat-context="metacat" id="loader" type="text/javascript" src="loader.js"></script> î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îÖîÅî}î(hhhj0��ubah}î(h]îh!]îh#]îh%]îh']îuh+jn��hj,��ubhå Open îÖîÅî}î(hå Open îhj,��ubjÑ��)Åî}î(hå``index.html``îh]îhå index.htmlîÖîÅî}î(hhhjC��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj,��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îÖîÅî}î(hhhjV��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj,��ubhå&) and your Metacat context (attribute îÖîÅî}î(hå&) and your Metacat context (attribute îhj,��ubjÑ��)Åî}î(hå``data-metacat-context``îh]îhådata-metacat-contextîÖîÅî}î(hhhji��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj,��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Ô��)Åî}î(håx<script data-theme="default" data-metacat-context="metacat" id="loader" type="text/javascript" src="loader.js"></script>îh]îhåx<script data-theme="default" data-metacat-context="metacat" id="loader" type="text/javascript" src="loader.js"></script>îÖîÅî}î(hhhjÖ��ubah}î(h]îh!]îh#]îh%]îh']îj˛��jˇ��uh+jÓ��hKJhjÇ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hj(��ubeh}î(h]îh!]îh#]îh%]îh']îuh+hshj%��hhhh,hNubah}î(h]îh!]îh#]îh%]îh']îj(��j)��j*��hj+��j,��j…��Kuh+ja��hjC��hhhh,hKEubeh}î(h]îh´ah!]îh#]îå#quick start using the default themeîah%]îh']îuh+h hhhhhh,hKubh )Åî}î(hhh]î(h)Åî}î(hh≈h]îhåCreating a Custom ThemeîÖîÅî}î(hh≈hjØ��hhhNhNubah}î(h]îh!]îh#]îh%]îh']îh)h»uh+hhj¨��hhhh,hKNubh5)Åî}î(hå”All 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]îhå”All 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.îÖîÅî}î(hjæ��hjº��hhhNhNubah}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKOhj¨��hhubh5)Åî}î(hå 1. **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]î(hå1. îÖîÅî}î(hå1. îhj ��hhhNhNubjo��)Åî}î(hå**Create a new theme:**îh]îhåCreate a new theme:îÖîÅî}î(hhhj”��ubah}î(h]îh!]îh#]îh%]îh']îuh+jn��hj ��ubhå6 Copy an existing theme directory structure, found in îÖîÅî}î(hå6 Copy an existing theme directory structure, found in îhj ��hhhNhNubjÑ��)Åî}î(hå ``js/themes``îh]îhå js/themesîÖîÅî}î(hhhjÊ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj ��ubhåm, and rename that directory after your new theme. Notice that each theme directory looks something like this:îÖîÅî}î(håm, and rename that directory after your new theme. Notice that each theme directory looks something like this:îhj ��hhhNhNubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKRhj¨��hhubjŸ��)Åî}î(hhh]îjÔ��)Åî}î(hå'css/ img/ routers/ templates/ config.jsîh]îhå'css/ img/ routers/ templates/ config.jsîÖîÅî}î(hhhj��ubah}î(h]îh!]îh#]îh%]îh']îj˛��jˇ��uh+jÓ��hKWhjˇ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hj¨��hhhh,hNubjb��)Åî}î(hhh]î(ht)Åî}î(håë**Style your theme** Add a CSS file to your theme by creating a CSS file in the ``js/themes/<yourtheme>/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/<yourtheme>/css/`` directory named ``metacatui.css``îh]î(jo��)Åî}î(hå**Style your theme**îh]îhåStyle your themeîÖîÅî}î(hhhj!��ubah}î(h]îh!]îh#]îh%]îh']îuh+jn��hj��ubhå< 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 îhj��ubjÑ��)Åî}î(hå``js/themes/<yourtheme>/css/``îh]îhåjs/themes/<yourtheme>/css/îÖîÅî}î(hhhj4��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj��ubhå directory named îÖîÅî}î(hå directory named îhj��ubjÑ��)Åî}î(hå``metacatui.css``îh]îhå metacatui.cssîÖîÅî}î(hhhjG��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj��ubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hK]hj��ubah}î(h]îh!]îh#]îh%]îh']îuh+hshj��hhhh,hNubht)Åî}î(håV**Add images** Add your custom images to the ``js/themes/<yourtheme>/img`` directory. îh]îh5)Åî}î(håU**Add images** Add your custom images to the ``js/themes/<yourtheme>/img`` directory.îh]î(jo��)Åî}î(hå**Add images**îh]îhå Add imagesîÖîÅî}î(hhhji��ubah}î(h]îh!]îh#]îh%]îh']îuh+jn��hje��ubhå Add your custom images to the îÖîÅî}î(hå Add your custom images to the îhje��ubjÑ��)Åî}î(hå``js/themes/<yourtheme>/img``îh]îhåjs/themes/<yourtheme>/imgîÖîÅî}î(hhhj|��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hje��ubhå directory.îÖîÅî}î(hå directory.îhje��ubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hK`hja��ubah}î(h]îh!]îh#]îh%]îh']îuh+hshj��hhhh,hNubht)Åî}î(hå\**Edit templates** Add HTML templates to the ``js/themes/<yourtheme>/templates`` directory. îh]îh5)Åî}î(hå[**Edit templates** Add HTML templates to the ``js/themes/<yourtheme>/templates`` directory.îh]î(jo��)Åî}î(hå**Edit templates**îh]îhåEdit templatesîÖîÅî}î(hhhj£��ubah}î(h]îh!]îh#]îh%]îh']îuh+jn��hjü��ubhå Add HTML templates to the îÖîÅî}î(hå Add HTML templates to the îhjü��ubjÑ��)Åî}î(hå#``js/themes/<yourtheme>/templates``îh]îhåjs/themes/<yourtheme>/templatesîÖîÅî}î(hhhj∂��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjü��ubhå directory.îÖîÅî}î(hå directory.îhjü��ubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKbhjõ��ubah}î(h]îh!]îh#]îh%]îh']îuh+hshj��hhhh,hNubht)Åî}î(hX��**Create your theme map** Open the ``js/themes/<yourtheme>/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/<yourtheme>/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]îhåCreate your theme mapîÖîÅî}î(hhhj›��ubah}î(h]îh!]îh#]îh%]îh']îuh+jn��hjŸ��ubhå Open the îÖîÅî}î(hå Open the îhjŸ��ubjÑ��)Åî}î(hå#``js/themes/<yourtheme>/config.js``îh]îhåjs/themes/<yourtheme>/config.jsîÖîÅî}î(hhhj��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjŸ��ubhå’ 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.îhjŸ��ubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKdhj’��ubah}î(h]îh!]îh#]îh%]îh']îuh+hshj��hhhh,hNubeh}î(h]îh!]îh#]îh%]îh']îj(��j)��j*��hj+��j,��j…��Kuh+ja��hj¨��hhhh,hK]ubjŸ��)Åî}î(hhh]îjÔ��)Åî}î(hX5��var 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]îhX5��var 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' } };îÖîÅî}î(hhhj��ubah}î(h]îh!]îh#]îh%]îh']îj˛��jˇ��uh+jÓ��hKhhj��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hj¨��hhhh,hNubh5)Åî}î(hå¸Change 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]îhådefaultîÖîÅî}î(hhhj5��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj,��ubhåK, to your chosen new theme name. Then follow the commented out examples in îÖîÅî}î(håK, to your chosen new theme name. Then follow the commented out examples in îhj,��hhhNhNubjÑ��)Åî}î(hå``themeMap``îh]îhåthemeMapîÖîÅî}î(hhhjH��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj,��ubhåy to explicitly tell Metacat which default shared files should be overridden with your custom theme files. The pattern is:îÖîÅî}î(håy 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,hKrhj¨��hhubjŸ��)Åî}î(hhh]îh5)Åî}î(håE``path/originalFile.html : 'themes/' + theme + '/path/newFile.html'``îh]îjÑ��)Åî}î(hjf��h]îhåApath/originalFile.html : 'themes/' + theme + '/path/newFile.html'îÖîÅî}î(hhhjh��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjd��ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKvhja��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hj¨��hhhh,hNubh5)Åî}î(hå;*Note: You do not have to override the CSS or image files.*îh]îh�åemphasisîìî)Åî}î(hjÉ��h]îhå9Note: You do not have to override the CSS or image files.îÖîÅî}î(hhhjá��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÖ��hjÅ��ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKxhj¨��hhubh5)Åî}î(håœ7. **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]î(hå7. îÖîÅî}î(hå7. îhjö��hhhNhNubjo��)Åî}î(hå***Specify your theme and metacat context**îh]îhå&Specify your theme and metacat contextîÖîÅî}î(hhhj£��ubah}î(h]îh!]îh#]îh%]îh']îuh+jn��hjö��ubhå Open îÖîÅî}î(hå Open îhjö��hhhNhNubjÑ��)Åî}î(hå``index.html``îh]îhå index.htmlîÖîÅî}î(hhhj∂��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjö��ubhå@. Edit the following line to specify your theme name (attribute îÖîÅî}î(hå@. Edit the following line to specify your theme name (attribute îhjö��hhhNhNubjÑ��)Åî}î(hå``data-theme``îh]îhå data-themeîÖîÅî}î(hhhj…��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjö��ubhå&) and your Metacat context (attribute îÖîÅî}î(hå&) and your Metacat context (attribute îhjö��hhhNhNubjÑ��)Åî}î(hå``data-metacat-context``îh]îhådata-metacat-contextîÖîÅî}î(hhhj‹��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjö��ubhå):îÖîÅî}î(hå):îhjö��hhhNhNubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKzhj¨��hhubjŸ��)Åî}î(hhh]îjÔ��)Åî}î(håx<script data-theme="default" data-metacat-context="metacat" id="loader" type="text/javascript" src="loader.js"></script>îh]îhåx<script data-theme="default" data-metacat-context="metacat" id="loader" type="text/javascript" src="loader.js"></script>îÖîÅî}î(hhhj¯��ubah}î(h]îh!]îh#]îh%]îh']îj˛��jˇ��uh+jÓ��hKhjı��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hj¨��hhhh,hNubh )Åî}î(hhh]î(h)Åî}î(hhÂh]îhå3Changing the background images on the default themeîÖîÅî}î(hhÂhj��hhhNhNubah}î(h]îh!]îh#]îh%]îh']îh)hËuh+hhj��hhhh,hKÉubh5)Åî}î(hå[The ``js/templates/app.html`` file contains the ``<img>`` element for the background image:îh]î(håThe îÖîÅî}î(håThe îhj��hhhNhNubjÑ��)Åî}î(hå``js/templates/app.html``îh]îhåjs/templates/app.htmlîÖîÅî}î(hhhj%��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj��ubhå file contains the îÖîÅî}î(hå file contains the îhj��hhhNhNubjÑ��)Åî}î(hå ``<img>``îh]îhå<img>îÖîÅî}î(hhhj8��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj��ubhå" element for the background image:îÖîÅî}î(hå" element for the background image:îhj��hhhNhNubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKÑhj��hhubjŸ��)Åî}î(hhh]îjÔ��)Åî}î(hå<<img src="" class="bg" id="bg_image" data-image-count="9" />îh]îhå<<img src="" class="bg" id="bg_image" data-image-count="9" />îÖîÅî}î(hhhjT��ubah}î(h]îh!]îh#]îh%]îh']îj˛��jˇ��uh+jÓ��hKàhjQ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hj��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 ``<img>`` element.îh]î(håChange the îÖîÅî}î(håChange the îhjh��hhhNhNubjÑ��)Åî}î(hå``data-image-count``îh]îhådata-image-countîÖîÅî}î(hhhjq��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjh��ubhå‹ 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 îhjh��hhhNhNubjÑ��)Åî}î(hå ``<img>``îh]îhå<img>îÖîÅî}î(hhhjÑ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjh��ubhå element.îÖîÅî}î(hå element.îhjh��hhhNhNubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKähj��hhubh5)Åî}î(hX:��Store your custom background image files in ``js/themes/<yourtheme>/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 îhjù��hhhNhNubjÑ��)Åî}î(hå)``js/themes/<yourtheme>/img/backgrounds``îh]îhå%js/themes/<yourtheme>/img/backgroundsîÖîÅî}î(hhhj¶��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjù��ubhå . Keep the naming convention of îÖîÅî}î(hå . Keep the naming convention of îhjù��hhhNhNubjÑ��)Åî}î(hå``bg1.jpg``îh]îhåbg1.jpgîÖîÅî}î(hhhjπ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjù��ubhå, îÖîÅî}î(hå, îhjù��hhhNhNubjÑ��)Åî}î(hå``bg2.jpg``îh]îhåbg2.jpgîÖîÅî}î(hhhjÃ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjù��ubhåE, etc., making sure that all numbers from 1 to your specified total (îÖîÅî}î(håE, etc., making sure that all numbers from 1 to your specified total (îhjù��hhhNhNubjÑ��)Åî}î(hå``data-image-count``îh]îhådata-image-countîÖîÅî}î(hhhjfl��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjù��ubhå7) are included. (i.e. do not skip any numbers, such as îÖîÅî}î(hå7) are included. (i.e. do not skip any numbers, such as îhjù��hhhNhNubjÑ��)Åî}î(hå``bg1.jpg``îh]îhåbg1.jpgîÖîÅî}î(hhhjÚ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjù��ubhå, îÖîÅî}î(hjÀ��hjù��ubjÑ��)Åî}î(hå``bg3.jpg``îh]îhåbg3.jpgîÖîÅî}î(hhhj ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjù��ubhå ‚Ä¶)îÖîÅî}î(hå ...)îhjù��hhhNhNubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKçhj��hhubeh}î(h]îhÓah!]îh#]îå3changing the background images on the default themeîah%]îh']îuh+h hj¨��hhhh,hKÉubh )Åî}î(hhh]î(h)Åî}î(hj��h]îhå"Advanced options for custom themesîÖîÅî}î(hj��hj' ��hhhNhNubah}î(h]îh!]îh#]îh%]îh']îh)j��uh+hhj$ ��hhhh,hKíubh5)Åî}î(hådAdvanced users can choose to override the JavaScript files for even more customization of MetacatUI.îh]îhådAdvanced users can choose to override the JavaScript files for even more customization of MetacatUI.îÖîÅî}î(hj6 ��hj4 ��hhhNhNubah}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKìhj$ ��hhubh5)Åî}î(hå‹The ``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]î(håThe îÖîÅî}î(håThe îhjB ��hhhNhNubjÑ��)Åî}î(hå ``router.js``îh]îhå router.jsîÖîÅî}î(hhhjK ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjB ��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]îhåDataCatalogViewîÖîÅî}î(hhhj^ ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjB ��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+jÉ��hjB ��ubhå like so:îÖîÅî}î(hå like so:îhjB ��hhhNhNubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKñhj$ ��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']îj˛��jˇ��uh+jÓ��hKúhjä ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hj$ ��hhhh,hNubh5)Åî}î(hå€In 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+jÉ��hj° ��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+jÉ��hj° ��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+jÉ��hj° ��ubhå view, to îÖîÅî}î(hå view, to îhj° ��hhhNhNubjÑ��)Åî}î(hå``routeToData``îh]îhårouteToDataîÖîÅî}î(hhhj„ ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj° ��ubhå which reroutes to îÖîÅî}î(hå which reroutes to îhj° ��hhhNhNubjÑ��)Åî}î(hå``data``îh]îhådataîÖîÅî}î(hhhjˆ ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj° ��ubhå, in turn rendering the îÖîÅî}î(hå, in turn rendering the îhj° ��hhhNhNubjÑ��)Åî}î(hå``DataCatalogView``îh]îhåDataCatalogViewîÖîÅî}î(hhhj ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj° ��ubhå view.îÖîÅî}î(hå view.îhj° ��hhhNhNubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKÆhj$ ��hhubjŸ��)Åî}î(hhh]î(jÔ��)Åî}î(håÉrouteToData: function () { console.log('Called UIRouter.routeToData()'); this.navigate("data", {trigger: true}); },îh]îhåÉrouteToData: function () { console.log('Called UIRouter.routeToData()'); this.navigate("data", {trigger: true}); },îÖîÅî}î(hhhj% ��ubah}î(h]îh!]îh#]îh%]îh']îj˛��jˇ��uh+jÓ��hK¥hj" ��ubh5)Åî}î(håà**Note: Remember to include any views or routers in your list of overrides in js/themes/<yourtheme>/config.js for each file you modify**îh]îjo��)Åî}î(hj5 ��h]îhåÑNote: Remember to include any views or routers in your list of overrides in js/themes/<yourtheme>/config.js for each file you modifyîÖîÅî}î(hhhj7 ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jn��hj3 ��ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKπhj" ��ubeh}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hj$ ��hhhh,hNubh5)Åî}î(håÇFor more information about ``Backbone.js``, see the Backbone.js documentation at `www.backbonejs.org <http://www.backbonejs.org>`_îh]î(håFor more information about îÖîÅî}î(håFor more information about îhjP ��hhhNhNubjÑ��)Åî}î(hå``Backbone.js``îh]îhåBackbone.jsîÖîÅî}î(hhhjY ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjP ��ubhå', see the Backbone.js documentation at îÖîÅî}î(hå', see the Backbone.js documentation at îhjP ��hhhNhNubh|)Åî}î(hå1`www.backbonejs.org <http://www.backbonejs.org>`_îh]îhåwww.backbonejs.orgîÖîÅî}î(hhhjl ��ubah}î(h]îh!]îh#]îh%]îh']îånameîåwww.backbonejs.orgîj§��åhttp://www.backbonejs.orgîuh+h{hjP ��ubjß��)Åî}î(hå <http://www.backbonejs.org>îh]îh}î(h]îåwww-backbonejs-orgîah!]îh#]îåwww.backbonejs.orgîah%]îh']îårefuriîj| ��uh+j¶��jµ��KhjP ��ubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKΩhj$ ��hhubeh}î(h]îj��ah!]îh#]îå"advanced options for custom themesîah%]îh']îuh+h hj¨��hhhh,hKíubeh}î(h]îhŒah!]îh#]îåcreating a custom themeîah%]îh']îuh+h hhhhhh,hKNubh )Åî}î(hhh]î(h)Åî}î(hj7��h]îhåUsing Custom EndpointsîÖîÅî}î(hj7��hj° ��hhhNhNubah}î(h]îh!]îh#]îh%]îh']îh)j:��uh+hhjû ��hhhh,hK¡ubh5)Åî}î(hX5��MetacatUI 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]î(håvMetacatUI can also be configured to use custom DataONE endpoints for both Member Node and Coordinating Node APIs. The îÖîÅî}î(håvMetacatUI can also be configured to use custom DataONE endpoints for both Member Node and Coordinating Node APIs. The îhjÆ ��hhhNhNubjÑ��)Åî}î(hå``dataone``îh]îhådataoneîÖîÅî}î(hhhj∑ ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjÆ ��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+jÉ��hjÆ ��ubhåg file. In custom themes, the AppModel.js values can be edited to suit your particular deployment needs.îÖîÅî}î(håg 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,hK¬hjû ��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,hK∆hjû ��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']îj˛��jˇ��uh+jÓ��hK hjÒ ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hjû ��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,hK–hjû ��hhubjŸ��)Åî}î(hhh]îjÔ��)Åî}î(håjcontext: '/metacat', d1Service: '/d1/mn/v2', d1CNBaseUrl: "https://cn.dataone.org/", d1CNService: "cn/v2",îh]îhåjcontext: '/metacat', d1Service: '/d1/mn/v2', d1CNBaseUrl: "https://cn.dataone.org/", d1CNService: "cn/v2",îÖîÅî}î(hhhj��ubah}î(h]îh!]îh#]îh%]îh']îj˛��jˇ��uh+jÓ��hK‘hj��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hjû ��hhhh,hNubeh}î(h]îj@��ah!]îh#]îåusing custom endpointsîah%]îh']îuh+h hhhhhh,hK¡ubh )Åî}î(hhh]î(h)Åî}î(hjZ��h]îhåCreating a Custom SkinîÖîÅî}î(hjZ��hj7��hhhNhNubah}î(h]îh!]îh#]îh%]îh']îh)j]��uh+hhj4��hhhh,hK‹ubh/)Åî}î(hXn��Deprecated 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)Åî}î(hå˙Deprecated 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,hNubhå‹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å⁄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.îhjH��hhhNhNubeh}î(h]îh!]îh#]îh%]îh']îåtranslatableîâuh+h4hjD��hhhh,hNubh5)Åî}î(håxTo MetacatUI themes, select ``metacatui`` as the default skin during skin configuration in the administration interface.îh]î(håTo MetacatUI themes, select îÖîÅî}î(håTo MetacatUI themes, select îhjf��hhhNhNubjÑ��)Åî}î(hå ``metacatui``îh]îhå metacatuiîÖîÅî}î(hhhjo��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjf��ubhåO as the default skin during skin configuration in the administration interface.îÖîÅî}î(håO as the default skin during skin configuration in the administration interface.îhjf��hhhNhNubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hK‚hjD��hhubeh}î(h]îh!]îh#]îh%]îh']îhWå deprecatedîhYå2.2.0îuh+h.hhhh,hK›hj4��ubh5)Åî}î(håÚSkins 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]îhåÚSkins 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,hKÂhj4��hhubh5)Åî}î(hå˛To 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]îhå˛To 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,hKÈhj4��hhubjb��)Åî}î(hhh]îht)Åî}î(håMCopy an existing skin directory. We recommend using the "default" directory. îh]îh5)Åî}î(håLCopy an existing skin directory. We recommend using the "default" directory.îh]îhåPCopy an existing skin directory. We recommend using the ‚Äúdefault‚Äù directory.îÖîÅî}î(hjµ��hj≥��ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKÓhjØ��ubah}î(h]îh!]îh#]îh%]îh']îuh+hshj¨��hhhh,hNubah}î(h]îh!]îh#]îh%]îh']îj(��j)��j*��hj+��j,��uh+ja��hj4��hhhh,hKÓubjŸ��)Åî}î(hhh]î(jÔ��)Åî}î(håSsudo cp -r <CONTEXT_DIR>/style/skins/default/ <CONTEXT_DIR>/style/skins/[yourSkin]/îh]îhåSsudo cp -r <CONTEXT_DIR>/style/skins/default/ <CONTEXT_DIR>/style/skins/[yourSkin]/îÖîÅî}î(hhhj–��ubah}î(h]îh!]îh#]îh%]îh']îj˛��jˇ��uh+jÓ��hKÚhjÕ��ubh5)Åî}î(håîWhere ``<CONTEXT_DIR>`` is the directory in which the Metacat application code lives and ``[yourSkin]`` is the name you wish to apply to your skin.îh]î(håWhere îÖîÅî}î(håWhere îhjfi��ubjÑ��)Åî}î(hå``<CONTEXT_DIR>``îh]îhå <CONTEXT_DIR>îÖîÅî}î(hhhjÁ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjfi��ubhåC is the directory in which the Metacat application code lives and îÖîÅî}î(håC is the directory in which the Metacat application code lives and îhjfi��ubjÑ��)Åî}î(hå``[yourSkin]``îh]îhå [yourSkin]îÖîÅî}î(hhhj˙��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjfi��ubhå, is the name you wish to apply to your skin.îÖîÅî}î(hå, is the name you wish to apply to your skin.îhjfi��ubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hKÙhjÕ��ubeh}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hj4��hhhh,hNubjb��)Åî}î(hhh]îht)Åî}î(håÄIn ``[yourSkin]`` directory, change all files named ``default.xxx`` to ``yourSkin.xxx``. The following files should be changed: îh]îh5)Åî}î(håIn ``[yourSkin]`` directory, change all files named ``default.xxx`` to ``yourSkin.xxx``. The following files should be changed:îh]î(håIn îÖîÅî}î(håIn îhj ��ubjÑ��)Åî}î(hå``[yourSkin]``îh]îhå [yourSkin]îÖîÅî}î(hhhj)��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj ��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+jÉ��hj ��ubhå to îÖîÅî}î(hå to îhj ��ubjÑ��)Åî}î(hå``yourSkin.xxx``îh]îhåyourSkin.xxxîÖîÅî}î(hhhjO��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hj ��ubhå(. The following files should be changed:îÖîÅî}î(hå(. The following files should be changed:îhj ��ubeh}î(h]îh!]îh#]îh%]îh']îuh+h4hh,hK˜hj��ubah}î(h]îh!]îh#]îh%]îh']îuh+hshj��hhhh,hNubah}î(h]îh!]îh#]îh%]îh']îj(��j)��j*��hj+��j,��j…��Kuh+ja��hj4��hhhh,hK˜ubjŸ��)Åî}î(hhh]îjÔ��)Åî}î(håUdefault.css default.js default.properties default.properties.metadata.xml default.xmlîh]îhåUdefault.css default.js default.properties default.properties.metadata.xml default.xmlîÖîÅî}î(hhhjw��ubah}î(h]îh!]îh#]îh%]îh']îj˛��jˇ��uh+jÓ��hK¸hjt��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hj4��hhhh,hNubjb��)Åî}î(hhh]î(ht)Åî}î(håäIn the metacat.properties file(``<CONTEXT_DIR>/WEB_INF/metacat.properties``), add ``[yourSkin]`` to the value of the skin.names property. îh]îh5)Åî}î(håâIn the metacat.properties file(``<CONTEXT_DIR>/WEB_INF/metacat.properties``), add ``[yourSkin]`` to the value of the skin.names property.îh]î(håIn the metacat.properties file(îÖîÅî}î(håIn the metacat.properties file(îhjí��ubjÑ��)Åî}î(hå,``<CONTEXT_DIR>/WEB_INF/metacat.properties``îh]îhå(<CONTEXT_DIR>/WEB_INF/metacat.propertiesîÖîÅî}î(hhhjõ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjí��ubhå), add îÖîÅî}î(hå), add îhjí��ubjÑ��)Åî}î(hå``[yourSkin]``îh]îhå [yourSkin]îÖîÅî}î(hhhjÆ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÉ��hjí��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)Åî}î(håZRestart 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,��j…��Kuh+ja��hj4��hhhh,hMubjŸ��)Åî}î(hhh]îjÔ��)Åî}î(hå/etc/init.d/tomcat7 restartîh]îhå/etc/init.d/tomcat7 restartîÖîÅî}î(hhhjÓ��ubah}î(h]îh!]îh#]îh%]îh']îj˛��jˇ��uh+jÓ��hM hjÎ��ubah}î(h]îh!]îh#]îh%]îh']îuh+jÿ��hj4��hhhh,hNubh5)Åî}î(håˇNavigate 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]îhX��Navigate 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,hMhj4��hhubh5)Åî}î(håæIt 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]îhåæIt 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]îjc��ah!]îh#]îåcreating a custom skinîah%]îh']îuh+h hhhhhh,hK‹ubeh}î(h]îhãah!]îh#]îåmodifying and creating themesîah%]îh']îuh+h hhhhhh,hKubah}î(h]îh!]îh#]îh%]îh']îåsourceîh,uh+håcurrent_sourceîNåcurrent_lineîNåsettingsîådocutils.frontendîåValuesîìî)Åî}î(hNå generatorîNå datestampîNåsource_linkîNå source_urlîNå toc_backlinksîåentryîåfootnote_backlinksîKå sectnum_xformîKåstrip_commentsîNåstrip_elements_with_classesîNå strip_classesîNåreport_levelîKå halt_levelîKåexit_status_levelîKådebugîNåwarning_streamîNå tracebackîàåinput_encodingîå utf-8-sigîåinput_encoding_error_handlerîåstrictîåoutput_encodingîåutf-8îåoutput_encoding_error_handlerîjO ��åerror_encodingîåUTF-8îåerror_encoding_error_handlerîåbackslashreplaceîå language_codeîåenîårecord_dependenciesîNåconfigîNå id_prefixîhåauto_id_prefixîåidîå dump_settingsîNådump_internalsîNådump_transformsîNådump_pseudo_xmlîNåexpose_internalsîNåstrict_visitorîNå_disable_configîNå_sourceîh,å_destinationîNå _config_filesî]îåpep_referencesîNåpep_base_urlîå https://www.python.org/dev/peps/îåpep_file_url_templateîåpep-%04dîårfc_referencesîNårfc_base_urlîåhttps://tools.ietf.org/html/îå tab_widthîKåtrim_footnote_reference_spaceîâåfile_insertion_enabledîàåraw_enabledîKåsyntax_highlightîålongîåsmart_quotesîàåsmartquotes_localesîNåcharacter_level_inline_markupîâådoctitle_xformîâå docinfo_xformîKåsectsubtitle_xformîâåembed_stylesheetîâåcloak_email_addressesîàåenvîNågettext_compactîàubåreporterîNåindirect_targetsî]îåsubstitution_defsî}îåsubstitution_namesî}îårefnamesî}îårefidsî}îånameidsî}î(j) ��hãjà��jÑ��j±��jÆ��j’��j“��j��j��j©��h´jõ ��hŒj! ��hÓjî ��j��jÜ ��jÉ ��j1��j@��j" ��jc��uå nametypesî}î(j) ��Njà��Nj±��àj’��àj��àj©��Njõ ��Nj! ��Njî ��NjÜ ��àj1��Nj" ��Nuh}î(hãhjÑ��h]jÆ��j®��j“��jÃ��j��j˛��h´jC��hŒj¨��hÓj��j��j$ ��jÉ ��j} ��j@��jû ��jc��j4��j>��j��h*h}h•hõh»hæhËhfij��j��j:��j0��j]��jS��uå footnote_refsî}îå citation_refsî}îå autofootnotesî]îåautofootnote_refsî]îåsymbol_footnotesî]îåsymbol_footnote_refsî]îå footnotesî]îå citationsî]îåautofootnote_startîKåsymbol_footnote_startîK�åid_startîK åparse_messagesî]î(h�åsystem_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']îålevelîKåtypeîåINFOîåsourceîh,ålineîKuh+j¶ ��hjC��hhhh,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']îålevelîKåtypeîj¡ ��åsourceîh,ålineîKuh+j¶ ��hjC��hhhh,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+h4hjfl ��ubah}î(h]îh!]îh#]îh%]îh']îålevelîKåtypeîåWARNINGîålineîKEåsourceîh,uh+j¶ ��hjC��hhhh,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']îålevelîKåtypeîj¡ ��åsourceîh,ålineîKuh+j¶ ��hjC��hhhh,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)îÖîÅî}î(hhhj��ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hj��ubah}î(h]îh!]îh#]îh%]îh']îålevelîKåtypeîj¡ ��åsourceîh,ålineîKuh+j¶ ��hj¨��hhhh,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)îÖîÅî}î(hhhj4��ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hj1��ubah}î(h]îh!]îh#]îh%]îh']îålevelîKåtypeîj¡ ��åsourceîh,ålineîKuh+j¶ ��hj4��hhhh,hK˜ubjß ��)Åî}î(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)îÖîÅî}î(hhhjO��ubah}î(h]îh!]îh#]îh%]îh']îuh+h4hjL��ubah}î(h]îh!]îh#]îh%]îh']îålevelîKåtypeîj¡ ��åsourceîh,ålineîKuh+j¶ ��hj4��hhhh,hMubeåtransform_messagesî]îåtransformerîNå decorationîNhhub.