Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

DSpace 4.2 XMLUI Theming


Published on

Published in: Technology
  • Be the first to comment

DSpace 4.2 XMLUI Theming

  1. 1. DSpace 4.2 XMLUI Theming DSpace 4.2 Advanced Training by James Creel is licensed under a Creative Commons Attribution 4.0 International License. Special thanks to the DuraSpace Foundation and the Texas Digital Library for making this course possible.
  2. 2. Theming Module Outline • Creating a new theme • Colors, Fonts, Images, and Layouts with CSS • Presentation of Data with XSL • Interactive Interfaces with JavaScript
  3. 3. Theming for the XMLUI • Themes are applied in the [dspace-install- dir]configxmlui.xconf configuration file • Each theme is configured in its constituent sitemap.xmap file • Inside the xmlui webapp, you can find a themes directory containing the themes… • As with other configuration changes, the server must be restarted to enact changes to how themes are applied. • However, a currently applied theme may be edited on-the-fly while Tomcat is running – but make sure you save your work elsewhere so it is not erased when you redeploy!
  4. 4. Applying themes in the XMLUI • Within your [dspace-data- dir]/config/xmlui.xconf file, have a look at the <themes> section. • Use the handle attribute to apply to specific handles in your repo. • Apply another theme to your favorite collection (look into your [tomcat]/webapps/xmlui/themes directory for a few options) • Restart Tomcat to see the effects.
  5. 5. Ideas for Customizing Themes Easy Intermediate Challenging Fonts Adding new elements Ordering elements logically Colors Adjusting element presentation AJAX Images Interactive animations Removing elements
  6. 6. Create a custom theme • Navigate your file browser to the C:Developmenttomcatwebappsxmluithemes directory. • Duplicate the Mirage directory to MiragePlus or some such. Rename the primary stylesheet as well. • Open the sitemap.xmap within your new theme directory to see how it is configured • To enable it in the xmlui.xconf, we will need to change the <theme-path> element.
  7. 7. Customizing a Theme with CSS - Topics • Basics • Colors • Images • Fonts • Positioning and displaying elements in the Box Model
  8. 8. Customizing a Theme with CSS - Basics • Elements within the <body> of the HTML document may possess id attributes and class attributes, e.g. • <p class=“someclass” id=“myFavoritePTag> • Any id attribute value should be unique to an element of the page • The class element may have repeated values
  9. 9. Customizing a Theme with CSS - Basics • Declarations consist of a property (such as “color”) and a value (such as “blue”) • Rules are applied with selectors • p would select all <p> elements • selects all <p class=“foo”> elements • p#bar selects all <p id=“bar”> elements • p,div selects all <p> elements and all <div> elements • div p selects all <p> elements that are children of a <div> element • Styles take the form of selector {declaration; declaration; … } • Declarations will be inherited by or cascade to contained elements where appropriate
  10. 10. Customizing a Theme with CSS – Colors • Set using the color attribute and background-color attribute • Rendered using combinations of red, green and blue light • Value may be expressed as a pre-set string, hexadecimal, or a trio of integers body { color:red; /*looks red */ } h1 { color:#00ff00; /*looks green */ } p { color:rgb(0,0,255); /*looks blue*/ }
  11. 11. Customizing a Theme with CSS – Images • Set using the image and background-image attributes • Images are referred to with values of the form url('URL') which can be relative or a full URL, as in body { background-image:url(‘local-image.gif’); } div { background-image:url(‘’); }
  12. 12. Customizing a Theme with CSS - Fonts • Apply to any element in which text might occur • font-family attribute allows one to list the fonts in order of preference • font-style attribute allows vaules of normal, italic, and oblique • font-size specifiable in pixels or points • font attribute is shorthand allowing one to specify all info about a font in one declaration (order matters) body { font-family: arial; font-size: 30px; font-style: italic; }
  13. 13. Positioning an element with CSS – The Box Model • All HTML elements are rendered as rectangles within the ultimate rectangle, the document body. • The box-model represents each element as four nested concentric rectangles, from center outward: • Content • Padding • Border • Margin (Image credit: W3C)
  14. 14. Positioning an element with CSS – Block vs. Inline elements • Block elements - These elements will start by default on a new line and be as wide as their container. They may contain inline elements. • Headings • Tables • Lists • Forms • Divisions • Paragraphs • Inline elements - These elements will start on the current line in their container and have the width of their own content. They may contain data or other inline elements • Anchors • Spans • Images • Buttons • Inputs • Labels
  15. 15. Positioning an element with CSS – the Position properties • There’s been a proliferation of possibilities in new browsers, but the classic values for this attribute are • static – the default, rendering by the flow in the box model • relative – relative to where it would be appearing • absolute – relative to first non-static ancestor • Fixed- always fixed at the same position in the browser window • Then do the actual positioning with top and left attributes. div.alwaysThere { position:fixed; top: 10px; left: 10px; }
  16. 16. Example: Aligining the Checkboxes on Submssion – Initial Questions • Might the initial checkboxes look better to the left of their help text instead of below? • No problem with relative positioning and moving them around a few pixels. • The trick is selecting these checkboxes uniquely among other elements throughout DSpace’s many pages • We will want to appeal to an id attribute
  17. 17. Controlling Data Presentation with XSL - Outline • Introduction • XSLT and XPath • How DSpace applies XSL • Examples • Eliding elements • Amending elements • Ordering elements
  18. 18. Customizing a Theme’s XSL • Change the order and contents of the generated page • Add anything available in the DRI • Add new CSS and Javascript files
  19. 19. Customizing a Theme’s XSL • Bring up one your favorite collections. • Put the string “/DRI” in between the webapp name and “handle” as in • http://localhost:8080/xmlui/DRI/handle/123 456789/4 • The resultant XML is transformed with the i18n messages. • Get an even earlier version of the XML with the ?XML parmeter, as in • http://localhost:8080/xmlui/handle/1234567 89/4?XML
  20. 20. Controlling Data Presentation with XSL – XSLT and XPath • XSLT – Composed of <template> elements that select XML elements to style • Sub elements of the template are used to write the transformation (i.e. the output) and to pass the control of flow to other parts of the stylesheet • At least one template had better select the whole document to get started – in fact, XSLT does this for you with a hidden first call of <xsl:apply- templates select="/"/> which selects the root node. Thenceforth, templates are applied to elements in the order that they occur in the source XML and get matched by a template. • In general, use <xsl:template match=“xpath”> to transform the source nodes matching the xpath • Use <xsl:apply-templates select = “xpath”> within a template to pass the flow of control to any templates matching the xpath in the current context
  21. 21. Controlling Data Presentation with XSL – XSLT • Transformations can be made to occur conditionally with the <xsl:if test=“boolean-expression”> • Multiple choice is achieved with the <xsl:choose> tag, which may contain one or more <xsl:when test=“boolean-expression”> tags and optionally a final <xsl:otherwise> tag • Iteration over sets of elements is achieved with the <xsl:for-each select=“xpath”> tag • The boolean expressions may employ XSL functions and operators – some useful ones: • &gt; and &lt; - greater than and less than • = and != - equality and inequality • not(expression) - negation
  22. 22. Controlling Data Presentation with XSL – XSLT and XPath • XPath – The language of selectors in XSLT • / selects the root and also delimits steps on the selection path • // selects with further sub-selectors starting from anywhere • . is the current node • .. is the previous node • @ precedes an attribute name • node selects elements named “node” • Predicates: • Use the brackets [] on a sub-selector to limit its selection with an expression • Wildcards: • Use the star * to select any and all nodes in the context of the current step along the path • Multiple Paths • Use the bar | as an AND operator between two selectors
  23. 23. DSpace applies XSL with Apache Cocoon • Flow of control determined in sitemap.xmap, themes.xmap, and aspects.xmap • All requests begin to be processed at [xmlui]/sitemap.xmap • URLs for static resources get returned as such • XMLUI resources are processed in [xmlui]/themes/themes.xmap which reads the xmlui.xconf to pick the theme and makes an internal request to generate the DRI for the page • sitemap.xmap calls aspects.xmap which matches the request for the DRI and loads xmlui.xconf to determine the aspects. • Each aspect has its own sitemap.xmap which modifies the DRI in its turn • Low level details at
  24. 24. XSL Theming Capabilities • Eliding elements - Simply delete an element from an XSL template to stop it appearing from your page. Or add conditionals to your selectors to elide a subset of a group of rendered elements. • Moving elements – Re-order elements in an XSL template by moving them or even splitting them into programmatically chosen categories • Amending elements – Add an attribute directly as a static value or programmatically with the <attribute> XSL element. Appearances can also be altered by changing text (or keys) that are used as labels, etc.
  25. 25. XSL Theming – Amending Metadata Value Presentation in the Simple Item View • A common use case: customizing the simple item view for a collection • In the the duplicated Mirage theme, we can find the item view templates in libxslaspectartifactbrowseritem- view.xsl • The metadata field rows are indicated by nice comments. • Track down the “Author(s) row”, and precede the <span> elements with a textual label of your choice. Optionally, give it a class or id and some CSS. • To get this to apply to just a specific collection, you will of course need to duplicate the theme before applying the changes and map it to your chosen collection in the xmlui.xconf.
  26. 26. Customizing a Theme with Javascript - Outline Everything that CSS can do plus… • Animation • DOM manipulation • AJAX Many of these functions are achieved most easily with a supplementary library such as jQuery.
  27. 27. Examples: The Discovery Search Page Widgets • Add filters button to provide new options to the user • Sorting widget that reissues the search request • Find the magic in [tomcat]webappsxmluistaticjsdiscoverysearch- controls.js
  28. 28. Example: Autocomplete for Subject keywords with VIAF • The Virtual International Authority File is a collaborative name authority hosted by OCLC • VIAF includes personal names, corporate names, place names, and names of works among others. • VIAF offers a web service that allows querying for XML output as well as text-input autocomplete
  29. 29. Autocomplete for Subject keywords with VIAF (1) – upgrade jQuery • Navigate to your duplicated Mirage theme and find the libxslcorepage-structure.xsl file • Find the addJavascript template at line 667 • Change the text value of the jqueryVersion variable to “1.11.1” • This will be automatically read from Google’s library hosting service -
  30. 30. Autocomplete for Subject keywords with VIAF (2) – supply the code • Find the codes on the share at Developmentcode-samples • Add the viaf-autocomplete.js file to Tomcat’s (not [dspace-install-dir]’s!) webappsxmluithemes[themename]libjs directory • Add the viaf-autocomplete.css file to the webappsxmluithtmes[themename]libcss directory • Add the new javascript and css to the theme’s sitemap.xmap. • Restart Tomcat
  31. 31. Autocomplete for Subject keywords with VIAF (3) – Check the Functionality • Enter the item submission workflow – • On the second Describe page, we will find the subject keyword text input that the JavaScript file is hard-coded to find
  32. 32. Autocomplete for Subject keywords with VIAF – Reflections on Functionality • dc.subject text values do not fully realize the potential of linked open data • The DC Terms schema gets closer, but not quite there yet • Security concerns in the browser limit more robust access to VIAF with Ajax. • Safe browsers don’t permit cross-domain Ajax calls • One could set up a local semantic-web service proxy
  33. 33. Topics To Explore Further • Responsive design • Paradigm for Mirage 2 • Interacting directly with the DSpace database • One may, if necessary, issue queries directly to one’s database through psql • Caution is urged • Coding Core DSpace • Complete control over aspects as well as internal functionality • However, if your changes don’t make it back into the next point release, keeping your changes after an upgrade could be difficult • Major challenges to rapid development: • Build time • Automated testing