Arkadiusz Binder 3 年之前
父节点
当前提交
a079444ede
共有 100 个文件被更改,包括 12634 次插入0 次删除
  1. 0 0
      templates/out/out/pdf-css-html5/master.fo
  2. 49 0
      templates/out/out/pdf-css-html5/master.merged.html
  3. 49 0
      templates/out/out/pdf-css-html5/master.merged.xml
  4. 二进制
      templates/out/out/pdf-css-html5/master.pdf
  5. 0 0
      templates/out/out/pdf-css-html5/master.style.xml
  6. 0 0
      templates/out/pdf-css-html5/wibo.fo
  7. 28 0
      templates/out/pdf-css-html5/wibo.merged.html
  8. 28 0
      templates/out/pdf-css-html5/wibo.merged.xml
  9. 二进制
      templates/out/pdf-css-html5/wibo.pdf
  10. 0 0
      templates/out/pdf-css-html5/wibo.style.xml
  11. 607 0
      templates/out/webhelp-responsive/commonltr.css
  12. 657 0
      templates/out/webhelp-responsive/commonrtl.css
  13. 5 0
      templates/out/webhelp-responsive/context-help-map.xml
  14. 104 0
      templates/out/webhelp-responsive/index.html
  15. 1 0
      templates/out/webhelp-responsive/index.xml
  16. 81 0
      templates/out/webhelp-responsive/indexTerms.html
  17. 1 0
      templates/out/webhelp-responsive/indexterms.properties
  18. 130 0
      templates/out/webhelp-responsive/kwp.html
  19. 130 0
      templates/out/webhelp-responsive/kzp.html
  20. 629 0
      templates/out/webhelp-responsive/license-3rd-party.txt
  21. 122 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/config.js
  22. 1 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/context-help/context-help-map.js
  23. 25 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/context-help/context-help.js
  24. 49 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/core/expand.css
  25. 207 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/core/expand.js
  26. 2 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/core/fonts.css
  27. 40 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/core/icons.css
  28. 11 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/core/polyfill.js
  29. 23 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/core/redirect.js
  30. 10 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/core/webhelp-dot3x.css
  31. 1550 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/core/webhelp.css
  32. 463 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/core/webhelp.js
  33. 16 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/image-map/image-map.js
  34. 二进制
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/Copy.png
  35. 22 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/attention.svg
  36. 80 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/caution.svg
  37. 22 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/danger.svg
  38. 二进制
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/dot.png
  39. 51 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/fastpath.svg
  40. 66 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/important.svg
  41. 二进制
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/link-icon.png
  42. 81 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/note.svg
  43. 62 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/notice.svg
  44. 24 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/remember.svg
  45. 22 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/restriction.svg
  46. 二进制
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/star.png
  47. 二进制
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/starsSmall.png
  48. 66 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/tip.svg
  49. 63 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/troubleshooting.svg
  50. 22 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/img/warning.svg
  51. 11 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/indexterms-page.css
  52. 11 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/indexterms-page.js
  53. 90 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/indexterms/indexterms.css
  54. 8 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/jquery-private/jquery-private.js
  55. 4 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/jquery-private/jquery.bootpag.amd.js
  56. 12 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/jquery-private/jquery.highlight.amd.js
  57. 4 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/jquery-private/jquery.rwdImageMaps.amd.js
  58. 21 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/localization/localization.js
  59. 224 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/localization/strings.js
  60. 11 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/main-page.css
  61. 15 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/main-page.js
  62. 1 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/nav-links/json/nav-links.js
  63. 361 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/nav-links/menu-loader.js
  64. 111 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/nav-links/nav-links.css
  65. 30 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/nav-links/nav.js
  66. 290 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/nav-links/toc-loader.js
  67. 108 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/nav-links/tooltip.css
  68. 31 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/options/options.js
  69. 1 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/options/properties.js
  70. 13 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search-page.css
  71. 14 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search-page.js
  72. 3 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/htmlFileInfoList.js
  73. 4 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/index-1.js
  74. 4 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/index-2.js
  75. 4 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/index-3.js
  76. 25 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/index.js
  77. 9 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/keywords.js
  78. 4 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/link-to-parent.js
  79. 4 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/stopwords.js
  80. 17 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/nwSearchFnt.LICENSE.txt
  81. 1763 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/nwSearchFnt.js
  82. 22 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/search-init.js
  83. 48 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/search.css
  84. 782 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/search.js
  85. 363 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/searchAutocomplete.js
  86. 176 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/searchHistoryItems.js
  87. 247 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/stemmers/de_stemmer.js
  88. 204 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/stemmers/en_stemmer.js
  89. 276 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/stemmers/fr_stemmer.js
  90. 40 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/stemmers/index.html
  91. 12 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/search/stemmers/stemmer.js
  92. 523 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/side-notes/p-side-notes.css
  93. 62 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/template/template-module-loader.js
  94. 10 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/topic-page-basic.css
  95. 4 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/topic-page-print.css
  96. 14 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/topic-page.css
  97. 17 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/topic-page.js
  98. 704 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/topic/commonltr.css
  99. 284 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/topic/elements.css
  100. 39 0
      templates/out/webhelp-responsive/oxygen-webhelp/app/topic/print.css

文件差异内容过多而无法显示
+ 0 - 0
templates/out/out/pdf-css-html5/master.fo


+ 49 - 0
templates/out/out/pdf-css-html5/master.merged.html

@@ -0,0 +1,49 @@
+<html xtrf="file:/Users/arkadiuszbinder/se/SE/projects/wibo/templates/out/master.ditamap"><head><meta charset="UTF-8"></meta><meta name="copyright" content="(C) Copyright 2020"></meta><meta name="DC.rights.owner" content="(C) Copyright 2020"></meta>
+<link rel='stylesheet' type='text/css' href='file:/Applications/Oxygen XML Editor/frameworks/dita/DITA-OT3.x/plugins/com.oxygenxml.webhelp.responsive/oxygen-webhelp/app/topic-page-print.css' />
+<link rel='stylesheet' type='text/css' href='file:/Applications/Oxygen XML Editor/frameworks/dita/css/print/p-dita.css' />
+<link rel='stylesheet' type='text/css' href='file:/Applications/Oxygen XML Editor/frameworks/dita/DITA-OT3.x/plugins/com.oxygenxml.editlink/pdf-css.css' />
+<link rel='stylesheet' type='text/css' href='file:/Applications/Oxygen%20XML%20Editor/frameworks/dita/DITA-OT3.x/plugins/com.oxygenxml.webhelp.responsive/templates/oxygen/oxygen-print.css' />
+<meta name="DC.type" content="map"></meta><meta name="DC.format" content="HTML5"></meta><meta name="DC.language" content="en"></meta><title></title></head><body class="wh_topic_page"><div class="wh_content_area"><div class="wh_topic_body"><div class="wh_topic_content"><div xmlns:ditaarch="http://dita.oasis-open.org/architecture/2005/" cascade="merge" class="- map/map map" ditaarch:DITAArchVersion="1.3" domains="(map mapgroup-d) (topic abbrev-d) (topic delay-d) a(props deliveryTarget) (map ditavalref-d) (map glossref-d) (topic hazard-d) (topic hi-d) (topic indexing-d) (topic markup-d) (topic pr-d) (topic relmgmt-d) (topic sw-d) (topic ui-d) (topic ut-d) (topic markup-d xml-d)" xml:lang="en" lang="en"><div class="- front-page/front-page front-page"><div class="- front-page/front-page-title front-page-title"><div class="- topic/title title">#23 Testowy i przykładowy druk PDF KZP z wykorzystaniem technologii: DITA, XML-Schema, XSLT, CSS, PrinceXML.</div></div></div><div class="- toc/toc toc"><div empty="true" class="- toc/title title"></div>
+
+    <div class="- topic/title title">#23 Testowy i przykładowy druk PDF KZP z wykorzystaniem technologii: DITA, XML-Schema, XSLT, CSS, PrinceXML.</div>
+    
+    
+
+
+    
+    <div is-chapter="true" href="#unique_1" type="topic" class="- map/topicref topicref"><div data-topic-id="WIBO_produkt_karta_zgodnosci.xsd" class="- map/topicmeta topicmeta"><div appid="WIBO_produkt_karta_zgodnosci.xsd" oxy-source="topic" class="- topic/resourceid resourceid"></div><div href="#unique_1" class="- topic/navtitle navtitle">2020-12-07 draft analizy zależności kart produktów, przekazanych do tego dnia, w celu opracowania obiektów biznesowych uruchomieniowych w silniku PROCESY5, w celu ich obsługi oraz generowania drukow</div></div></div>
+    <div is-chapter="true" href="#unique_2" type="topic" class="- map/topicref topicref"><div data-topic-id="WIBO_produkt_karta_wprowadzenia.xsd" class="- map/topicmeta topicmeta"><div appid="WIBO_produkt_karta_wprowadzenia.xsd" oxy-source="topic" class="- topic/resourceid resourceid"></div><div href="#unique_2" class="- topic/navtitle navtitle">2020-12-07 draft analizy zależności kart produktów, przekazanych do tego dnia, w celu opracowania obiektów biznesowych uruchomieniowych w silniku PROCESY5, w celu ich obsługi oraz generowania drukow</div></div></div>
+</div><article xmlns:nd="http://www.oxygenxml.com/css2fo/named-destinations" class="- topic/topic topic nested0" aria-labelledby="ariaid-title1" break-before="true" is-chapter="true" id="unique_1" topicrefclass="- map/topicref " nd:nd-id="WIBO_produkt_karta_zgodnosci.xsd" oid="WIBO_produkt_karta_zgodnosci.xsd"><h1 class="- topic/title title topictitle1" id="ariaid-title1"><span class="- topic/ph topic/title-wrapper ph title-wrapper">2020-12-07 draft analizy zależności kart produktów, przekazanych do tego dnia, w celu opracowania obiektów biznesowych uruchomieniowych w silniku PROCESY5, w celu ich obsługi oraz generowania drukow</span></h1><div class="- topic/body body"><p class="- topic/p p">
+   
+   
+   
+   
+   
+</p><p class="- topic/p p"></p></div></article><article xmlns:nd="http://www.oxygenxml.com/css2fo/named-destinations" class="- topic/topic topic nested0" aria-labelledby="ariaid-title2" break-before="true" is-chapter="true" id="unique_2" topicrefclass="- map/topicref " nd:nd-id="WIBO_produkt_karta_wprowadzenia.xsd" oid="WIBO_produkt_karta_wprowadzenia.xsd"><h1 class="- topic/title title topictitle1" id="ariaid-title2"><span class="- topic/ph topic/title-wrapper ph title-wrapper">2020-12-07 draft analizy zależności kart produktów, przekazanych do tego dnia, w celu opracowania obiektów biznesowych uruchomieniowych w silniku PROCESY5, w celu ich obsługi oraz generowania drukow</span></h1><div class="- topic/body body"><p class="- topic/p p">
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+</p><p class="- topic/p p"></p></div></article></div></div></div></div></body></html>

+ 49 - 0
templates/out/out/pdf-css-html5/master.merged.xml

@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type='text/css' href='file:/Applications/Oxygen XML Editor/frameworks/dita/DITA-OT3.x/plugins/com.oxygenxml.webhelp.responsive/oxygen-webhelp/app/topic-page-print.css'?>
+<?xml-stylesheet type='text/css' href='file:/Applications/Oxygen XML Editor/frameworks/dita/css/print/p-dita.css'?>
+<?xml-stylesheet type='text/css' href='file:/Applications/Oxygen XML Editor/frameworks/dita/DITA-OT3.x/plugins/com.oxygenxml.editlink/pdf-css.css'?>
+<?xml-stylesheet type='text/css' href='file:/Applications/Oxygen%20XML%20Editor/frameworks/dita/DITA-OT3.x/plugins/com.oxygenxml.webhelp.responsive/templates/oxygen/oxygen-print.css'?>
+<map xmlns:ditaarch="http://dita.oasis-open.org/architecture/2005/" xmlns:opentopic-index="http://www.idiominc.com/opentopic/index" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:oxy="http://www.oxygenxml.com/extensions/author" xmlns:nd="http://www.oxygenxml.com/css2fo/named-destinations" xmlns:opentopic="http://www.idiominc.com/opentopic" xmlns:css2fo="http://www.oxygenxml.com/css2fo" xmlns:dita-ot="dita-ot.sourceforge.net/ns/201007/dita-ot" cascade="merge" class="- map/map " ditaarch:DITAArchVersion="1.3" domains="(map mapgroup-d) (topic abbrev-d) (topic delay-d) a(props deliveryTarget) (map ditavalref-d) (map glossref-d) (topic hazard-d) (topic hi-d) (topic indexing-d) (topic markup-d) (topic pr-d) (topic relmgmt-d) (topic sw-d) (topic ui-d) (topic ut-d) (topic markup-d xml-d)" xtrc="map:1;4:6" xtrf="file:/Users/arkadiuszbinder/se/SE/projects/wibo/templates/out/master.ditamap" xml:lang="en"><oxy:front-page class="- front-page/front-page "><oxy:front-page-title class="- front-page/front-page-title "><title xmlns:dita-ot="http://dita-ot.sourceforge.net/ns/201007/dita-ot" xmlns:ot-placeholder="http://suite-sol.com/namespaces/ot-placeholder" class="- topic/title ">#23 Testowy i przykładowy druk PDF KZP z wykorzystaniem technologii: DITA, XML-Schema, XSLT, CSS, PrinceXML.</title></oxy:front-page-title></oxy:front-page><opentopic:map xmlns:ot-placeholder="http://suite-sol.com/namespaces/ot-placeholder" class="- toc/toc "><oxy:toc-title class="- toc/title " empty="true"/>
+
+    <title xmlns:dita-ot="http://dita-ot.sourceforge.net/ns/201007/dita-ot" class="- topic/title ">#23 Testowy i przykładowy druk PDF KZP z wykorzystaniem technologii: DITA, XML-Schema, XSLT, CSS, PrinceXML.</title>
+    
+    
+
+
+    
+    <topicref xmlns:dita-ot="http://dita-ot.sourceforge.net/ns/201007/dita-ot" is-chapter="true" class="- map/topicref " href="#unique_1" type="topic"><topicmeta class="- map/topicmeta " data-topic-id="WIBO_produkt_karta_zgodnosci.xsd"><resourceid appid="WIBO_produkt_karta_zgodnosci.xsd" class="- topic/resourceid " oxy-source="topic"/><navtitle href="#unique_1" class="- topic/navtitle ">2020-12-07 draft analizy zależności kart produktów, przekazanych do tego dnia, w celu opracowania obiektów biznesowych uruchomieniowych w silniku PROCESY5, w celu ich obsługi oraz generowania drukow</navtitle><?ditaot gentext?></topicmeta></topicref>
+    <topicref xmlns:dita-ot="http://dita-ot.sourceforge.net/ns/201007/dita-ot" is-chapter="true" class="- map/topicref " href="#unique_2" type="topic"><topicmeta class="- map/topicmeta " data-topic-id="WIBO_produkt_karta_wprowadzenia.xsd"><resourceid appid="WIBO_produkt_karta_wprowadzenia.xsd" class="- topic/resourceid " oxy-source="topic"/><navtitle href="#unique_2" class="- topic/navtitle ">2020-12-07 draft analizy zależności kart produktów, przekazanych do tego dnia, w celu opracowania obiektów biznesowych uruchomieniowych w silniku PROCESY5, w celu ich obsługi oraz generowania drukow</navtitle><?ditaot gentext?></topicmeta></topicref>
+</opentopic:map><topic xmlns:dita-ot="http://dita-ot.sourceforge.net/ns/201007/dita-ot" break-before="true" is-chapter="true" class="- topic/topic " id="unique_1" topicrefclass="- map/topicref " nd:nd-id="WIBO_produkt_karta_zgodnosci.xsd" oid="WIBO_produkt_karta_zgodnosci.xsd"><title class="- topic/title "><ph class="- topic/ph topic/title-wrapper ">2020-12-07 draft analizy zależności kart produktów, przekazanych do tego dnia, w celu opracowania obiektów biznesowych uruchomieniowych w silniku PROCESY5, w celu ich obsługi oraz generowania drukow</ph></title><body class="- topic/body "><p class="- topic/p ">
+   
+   
+   
+   
+   
+</p><p class="- topic/p "/></body></topic><topic xmlns:dita-ot="http://dita-ot.sourceforge.net/ns/201007/dita-ot" break-before="true" is-chapter="true" class="- topic/topic " id="unique_2" topicrefclass="- map/topicref " nd:nd-id="WIBO_produkt_karta_wprowadzenia.xsd" oid="WIBO_produkt_karta_wprowadzenia.xsd"><title class="- topic/title "><ph class="- topic/ph topic/title-wrapper ">2020-12-07 draft analizy zależności kart produktów, przekazanych do tego dnia, w celu opracowania obiektów biznesowych uruchomieniowych w silniku PROCESY5, w celu ich obsługi oraz generowania drukow</ph></title><body class="- topic/body "><p class="- topic/p ">
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+</p><p class="- topic/p "/></body></topic></map>

二进制
templates/out/out/pdf-css-html5/master.pdf


文件差异内容过多而无法显示
+ 0 - 0
templates/out/out/pdf-css-html5/master.style.xml


文件差异内容过多而无法显示
+ 0 - 0
templates/out/pdf-css-html5/wibo.fo


+ 28 - 0
templates/out/pdf-css-html5/wibo.merged.html

@@ -0,0 +1,28 @@
+<html xtrf="file:/Users/arkadiuszbinder/se/SE/projects/wibo/templates/wibo.ditamap"><head><meta charset="UTF-8"></meta><meta name="copyright" content="(C) Copyright 2020"></meta><meta name="DC.rights.owner" content="(C) Copyright 2020"></meta>
+<link rel='stylesheet' type='text/css' href='file:/Applications/Oxygen XML Editor/frameworks/dita/DITA-OT3.x/plugins/com.oxygenxml.webhelp.responsive/oxygen-webhelp/app/topic-page-print.css' />
+<link rel='stylesheet' type='text/css' href='file:/Applications/Oxygen XML Editor/frameworks/dita/css/print/p-dita.css' />
+<link rel='stylesheet' type='text/css' href='file:/Applications/Oxygen XML Editor/frameworks/dita/DITA-OT3.x/plugins/com.oxygenxml.editlink/pdf-css.css' />
+<link rel='stylesheet' type='text/css' href='file:/Users/arkadiuszbinder/se/SE/projects/wibo/templates/oxygen-wibo/oxygen-wibo.css' />
+<meta name="DC.type" content="map"></meta><meta name="DC.format" content="HTML5"></meta><meta name="DC.language" content="en"></meta><title></title></head><body class="wh_topic_page"><div class="wh_content_area"><div class="wh_topic_body"><div class="wh_topic_content"><div xmlns:ditaarch="http://dita.oasis-open.org/architecture/2005/" cascade="merge" class="- map/map map" ditaarch:DITAArchVersion="1.3" domains="(map mapgroup-d) (topic abbrev-d) (topic delay-d) a(props deliveryTarget) (map ditavalref-d) (map glossref-d) (topic hazard-d) (topic hi-d) (topic indexing-d) (topic markup-d) (topic pr-d) (topic relmgmt-d) (topic sw-d) (topic ui-d) (topic ut-d) (topic markup-d xml-d)" xml:lang="en" lang="en"><div class="- front-page/front-page front-page"><div class="- front-page/front-page-title front-page-title"><div class="- topic/title title">wibo</div></div></div><div class="- toc/toc toc"><div empty="true" class="- toc/title title"></div>
+    <div class="- topic/title title">wibo</div>
+    <div is-chapter="true" href="#unique_1" type="topic" class="- map/topicref topicref"><div data-topic-id="kzp" class="- map/topicmeta topicmeta"><div appid="kzp" oxy-source="topic" class="- topic/resourceid resourceid"></div><div href="#unique_1" class="- topic/navtitle navtitle">kzp</div><div class="- map/shortdesc shortdesc">dokument zawierający graficzne elementy oraz podpisy dedykowanych stanowisk         odpowiedzialnych za dany element. </div></div></div>
+    <div is-chapter="true" href="#unique_2" type="topic" class="- map/topicref topicref"><div data-topic-id="kwp" class="- map/topicmeta topicmeta"><div appid="kwp" oxy-source="topic" class="- topic/resourceid resourceid"></div><div href="#unique_2" class="- topic/navtitle navtitle">kwp</div><div class="- map/shortdesc shortdesc">zawiera parametry tabelaryczne, akceptowane w formie podpisu przez zdefiniowane         stanowiska dla danego elementu.</div></div></div>
+</div><article xmlns:nd="http://www.oxygenxml.com/css2fo/named-destinations" class="- topic/topic topic nested0" aria-labelledby="ariaid-title1" break-before="true" is-chapter="true" id="unique_1" topicrefclass="- map/topicref " nd:nd-id="kzp" oid="kzp">
+    <h1 class="- topic/title title topictitle1" id="ariaid-title1"><span class="- topic/ph topic/title-wrapper ph title-wrapper">kzp</span></h1>
+    
+    <div class="- topic/body body"><p class="- topic/shortdesc shortdesc">dokument zawierający graficzne elementy oraz podpisy dedykowanych stanowisk
+        odpowiedzialnych za dany element. </p>
+        <div class="- topic/example example">KZP Baza Doll Highlighter WIBO.PDF zawiera przykładowe elementy
+            przekazane</div>
+        <p class="- topic/p p"><img class="- topic/image image" href="file:/Users/arkadiuszbinder/se/SE/projects/wibo/templates/src.client/kzp_etyk_rezerw_112x17-kopia.png" id="unique_1_Connect_42_image_wtf_fvx_znb" nd:nd-id="image_wtf_fvx_znb" placement="inline" width="600" src="file:/Users/arkadiuszbinder/se/SE/projects/wibo/templates/src.client/kzp_etyk_rezerw_112x17-kopia.png"></img></p>
+    </div>
+</article><article xmlns:nd="http://www.oxygenxml.com/css2fo/named-destinations" class="- topic/topic topic nested0" aria-labelledby="ariaid-title2" break-before="true" is-chapter="true" id="unique_2" topicrefclass="- map/topicref " nd:nd-id="kwp" oid="kwp">
+    <h1 class="- topic/title title topictitle1" id="ariaid-title2"><span class="- topic/ph topic/title-wrapper ph title-wrapper">kwp</span></h1>
+    
+    <div class="- topic/body body"><p class="- topic/shortdesc shortdesc">zawiera parametry tabelaryczne, akceptowane w formie podpisu przez zdefiniowane
+        stanowiska dla danego elementu.</p>
+        <div class="- topic/example example">Przekazany przez klienta KWP wer. 12 po aktualizacji stanowiska w tabeli
+            badań.xlsx</div>
+        <p class="- topic/p p"></p>
+    </div>
+</article></div></div></div></div></body></html>

+ 28 - 0
templates/out/pdf-css-html5/wibo.merged.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type='text/css' href='file:/Applications/Oxygen XML Editor/frameworks/dita/DITA-OT3.x/plugins/com.oxygenxml.webhelp.responsive/oxygen-webhelp/app/topic-page-print.css'?>
+<?xml-stylesheet type='text/css' href='file:/Applications/Oxygen XML Editor/frameworks/dita/css/print/p-dita.css'?>
+<?xml-stylesheet type='text/css' href='file:/Applications/Oxygen XML Editor/frameworks/dita/DITA-OT3.x/plugins/com.oxygenxml.editlink/pdf-css.css'?>
+<?xml-stylesheet type='text/css' href='file:/Users/arkadiuszbinder/se/SE/projects/wibo/templates/oxygen-wibo/oxygen-wibo.css'?>
+<map xmlns:ditaarch="http://dita.oasis-open.org/architecture/2005/" xmlns:opentopic-index="http://www.idiominc.com/opentopic/index" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:oxy="http://www.oxygenxml.com/extensions/author" xmlns:nd="http://www.oxygenxml.com/css2fo/named-destinations" xmlns:opentopic="http://www.idiominc.com/opentopic" xmlns:css2fo="http://www.oxygenxml.com/css2fo" xmlns:dita-ot="dita-ot.sourceforge.net/ns/201007/dita-ot" cascade="merge" class="- map/map " ditaarch:DITAArchVersion="1.3" domains="(map mapgroup-d) (topic abbrev-d) (topic delay-d) a(props deliveryTarget) (map ditavalref-d) (map glossref-d) (topic hazard-d) (topic hi-d) (topic indexing-d) (topic markup-d) (topic pr-d) (topic relmgmt-d) (topic sw-d) (topic ui-d) (topic ut-d) (topic markup-d xml-d)" xtrc="map:1;3:6" xtrf="file:/Users/arkadiuszbinder/se/SE/projects/wibo/templates/wibo.ditamap" xml:lang="en"><oxy:front-page class="- front-page/front-page "><oxy:front-page-title class="- front-page/front-page-title "><title xmlns:dita-ot="http://dita-ot.sourceforge.net/ns/201007/dita-ot" xmlns:ot-placeholder="http://suite-sol.com/namespaces/ot-placeholder" class="- topic/title ">wibo</title></oxy:front-page-title></oxy:front-page><opentopic:map xmlns:ot-placeholder="http://suite-sol.com/namespaces/ot-placeholder" class="- toc/toc "><oxy:toc-title class="- toc/title " empty="true"/>
+    <title xmlns:dita-ot="http://dita-ot.sourceforge.net/ns/201007/dita-ot" class="- topic/title ">wibo</title>
+    <topicref xmlns:dita-ot="http://dita-ot.sourceforge.net/ns/201007/dita-ot" is-chapter="true" class="- map/topicref " href="#unique_1" type="topic"><topicmeta class="- map/topicmeta " data-topic-id="kzp"><resourceid appid="kzp" class="- topic/resourceid " oxy-source="topic"/><navtitle href="#unique_1" class="- topic/navtitle ">kzp</navtitle><?ditaot gentext?><?ditaot genshortdesc?><shortdesc class="- map/shortdesc ">dokument zawierający graficzne elementy oraz podpisy dedykowanych stanowisk         odpowiedzialnych za dany element. </shortdesc></topicmeta></topicref>
+    <topicref xmlns:dita-ot="http://dita-ot.sourceforge.net/ns/201007/dita-ot" is-chapter="true" class="- map/topicref " href="#unique_2" type="topic"><topicmeta class="- map/topicmeta " data-topic-id="kwp"><resourceid appid="kwp" class="- topic/resourceid " oxy-source="topic"/><navtitle href="#unique_2" class="- topic/navtitle ">kwp</navtitle><?ditaot gentext?><?ditaot genshortdesc?><shortdesc class="- map/shortdesc ">zawiera parametry tabelaryczne, akceptowane w formie podpisu przez zdefiniowane         stanowiska dla danego elementu.</shortdesc></topicmeta></topicref>
+</opentopic:map><topic xmlns:dita-ot="http://dita-ot.sourceforge.net/ns/201007/dita-ot" break-before="true" is-chapter="true" class="- topic/topic " id="unique_1" topicrefclass="- map/topicref " nd:nd-id="kzp" oid="kzp">
+    <title class="- topic/title "><ph class="- topic/ph topic/title-wrapper ">kzp</ph></title>
+    <shortdesc class="- topic/shortdesc ">dokument zawierający graficzne elementy oraz podpisy dedykowanych stanowisk
+        odpowiedzialnych za dany element. </shortdesc>
+    <body class="- topic/body ">
+        <example class="- topic/example ">KZP Baza Doll Highlighter WIBO.PDF zawiera przykładowe elementy
+            przekazane</example>
+        <p class="- topic/p "><image class="- topic/image " href="file:/Users/arkadiuszbinder/se/SE/projects/wibo/templates/src.client/kzp_etyk_rezerw_112x17-kopia.png" id="unique_1_Connect_42_image_wtf_fvx_znb" nd:nd-id="image_wtf_fvx_znb" placement="inline" width="600"/></p>
+    </body>
+</topic><topic xmlns:dita-ot="http://dita-ot.sourceforge.net/ns/201007/dita-ot" break-before="true" is-chapter="true" class="- topic/topic " id="unique_2" topicrefclass="- map/topicref " nd:nd-id="kwp" oid="kwp">
+    <title class="- topic/title "><ph class="- topic/ph topic/title-wrapper ">kwp</ph></title>
+    <shortdesc class="- topic/shortdesc ">zawiera parametry tabelaryczne, akceptowane w formie podpisu przez zdefiniowane
+        stanowiska dla danego elementu.</shortdesc>
+    <body class="- topic/body ">
+        <example class="- topic/example ">Przekazany przez klienta KWP wer. 12 po aktualizacji stanowiska w tabeli
+            badań.xlsx</example>
+        <p class="- topic/p "/>
+    </body>
+</topic></map>

二进制
templates/out/pdf-css-html5/wibo.pdf


文件差异内容过多而无法显示
+ 0 - 0
templates/out/pdf-css-html5/wibo.style.xml


+ 607 - 0
templates/out/webhelp-responsive/commonltr.css

@@ -0,0 +1,607 @@
+/*!
+ * This file is part of the DITA Open Toolkit project. 
+ *
+ * Copyright 2004, 2005 IBM Corporation
+ *
+ * See the accompanying LICENSE file for applicable license.
+ */
+.hazardstatement td,
+.hazardstatement th {
+  padding: 0.5rem;
+}
+
+.hazardstatement th {
+  text-align: center;
+  text-transform: uppercase;
+}
+
+.hazardstatement--caution {
+  background-color: #ffd100;
+}
+
+.hazardstatement--danger {
+  background-color: #c8102e;
+  color: #fff;
+}
+
+.hazardstatement--warning {
+  background-color: #ff8200;
+}
+
+.hazardstatement--attention, .hazardstatement--fastpath, .hazardstatement--important, .hazardstatement--note, .hazardstatement--notice, .hazardstatement--other, .hazardstatement--remember, .hazardstatement--restriction, .hazardstatement--tip {
+  background-color: #0072ce;
+  color: #fff;
+  font-style: italic;
+}
+
+.codeblock {
+  font-family: monospace;
+}
+
+.codeph {
+  font-family: monospace;
+}
+
+.kwd {
+  font-weight: bold;
+}
+
+.parmname {
+  font-weight: bold;
+}
+
+.var {
+  font-style: italic;
+}
+
+.filepath {
+  font-family: monospace;
+}
+
+.tasklabel {
+  font-size: 100%;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.screen {
+  background-color: #ccc;
+  border: outset;
+  margin-bottom: 2px;
+  margin-top: 2px;
+  padding: 5px;
+  white-space: pre;
+}
+
+.wintitle {
+  font-weight: bold;
+}
+
+.numcharref {
+  color: #639;
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.parameterentity {
+  color: #639;
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.textentity {
+  color: #639;
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.xmlatt {
+  color: #639;
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.xmlelement {
+  color: #639;
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.xmlnsname {
+  color: #639;
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.xmlpi {
+  color: #639;
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.frame-top {
+  border-top: solid 1px;
+  border-right: 0;
+  border-bottom: 0;
+  border-left: 0;
+}
+
+.frame-bottom {
+  border-top: 0;
+  border-right: 0;
+  border-bottom: solid 1px;
+  border-left: 0;
+}
+
+.frame-topbot {
+  border-top: solid 1px;
+  border-right: 0;
+  border-bottom: solid 1px;
+  border-left: 0;
+}
+
+.frame-all {
+  border: solid 1px;
+}
+
+.frame-sides {
+  border-top: 0;
+  border-left: solid 1px;
+  border-right: solid 1px;
+  border-bottom: 0;
+}
+
+.frame-none {
+  border: 0;
+}
+
+.scale-50 {
+  font-size: 50%;
+}
+
+.scale-60 {
+  font-size: 60%;
+}
+
+.scale-70 {
+  font-size: 70%;
+}
+
+.scale-80 {
+  font-size: 80%;
+}
+
+.scale-90 {
+  font-size: 90%;
+}
+
+.scale-100 {
+  font-size: 100%;
+}
+
+.scale-110 {
+  font-size: 110%;
+}
+
+.scale-120 {
+  font-size: 120%;
+}
+
+.scale-140 {
+  font-size: 140%;
+}
+
+.scale-160 {
+  font-size: 160%;
+}
+
+.scale-180 {
+  font-size: 180%;
+}
+
+.scale-200 {
+  font-size: 200%;
+}
+
+.expanse-page, .expanse-spread {
+  width: 100%;
+}
+
+.fig {
+  /* Default of italics to set apart figure captions */
+  /* Use @frame to create frames on figures */
+}
+
+.figcap {
+  font-style: italic;
+}
+
+.figdesc {
+  font-style: normal;
+}
+
+.figborder {
+  border-color: Silver;
+  border-style: solid;
+  border-width: 2px;
+  margin-top: 1em;
+  padding-left: 3px;
+  padding-right: 3px;
+}
+
+.figsides {
+  border-color: Silver;
+  border-left: 2px solid;
+  border-right: 2px solid;
+  margin-top: 1em;
+  padding-left: 3px;
+  padding-right: 3px;
+}
+
+.figtop {
+  border-color: Silver;
+  border-top: 2px solid;
+  margin-top: 1em;
+}
+
+.figbottom {
+  border-bottom: 2px solid;
+  border-color: Silver;
+}
+
+.figtopbot {
+  border-bottom: 2px solid;
+  border-color: Silver;
+  border-top: 2px solid;
+  margin-top: 1em;
+}
+
+/* Align images based on @align on topic/image */
+div.imageleft {
+  text-align: left;
+}
+
+div.imagecenter {
+  text-align: center;
+}
+
+div.imageright {
+  text-align: right;
+}
+
+div.imagejustify {
+  text-align: justify;
+}
+
+/* Set heading sizes, getting smaller for deeper nesting */
+.topictitle1 {
+  font-size: 1.34em;
+  margin-bottom: 0.1em;
+  margin-top: 0;
+}
+
+.topictitle2 {
+  font-size: 1.17em;
+  margin-bottom: 0.45em;
+  margin-top: 1pc;
+}
+
+.topictitle3 {
+  font-size: 1.17em;
+  font-weight: bold;
+  margin-bottom: 0.17em;
+  margin-top: 1pc;
+}
+
+.topictitle4 {
+  font-size: 1.17em;
+  font-weight: bold;
+  margin-top: 0.83em;
+}
+
+.topictitle5 {
+  font-size: 1.17em;
+  font-weight: bold;
+}
+
+.topictitle6 {
+  font-size: 1.17em;
+  font-style: italic;
+}
+
+.sectiontitle {
+  color: #000;
+  font-size: 1.17em;
+  font-weight: bold;
+  margin-bottom: 0;
+  margin-top: 1em;
+}
+
+.section {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.example {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.indexterm {
+  background-color: #fdf;
+  border: 1pt #000 solid;
+  margin: 1pt;
+}
+
+/* Most link groups are created with <div>. Ensure they have space before and after. */
+.ullinks {
+  list-style-type: none;
+}
+
+.ulchildlink {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.olchildlink {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.linklist {
+  margin-bottom: 1em;
+}
+
+ul.linklist {
+  margin-top: 0;
+  list-style-type: none;
+  padding-left: 0;
+}
+
+li.linklist {
+  margin-top: 0;
+  margin-bottom: 0;
+}
+
+.linklistwithchild {
+  margin-bottom: 1em;
+  margin-left: 1.5em;
+}
+
+.sublinklist {
+  margin-bottom: 1em;
+  margin-left: 1.5em;
+}
+
+.relconcepts {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.reltasks {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.relref {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.relinfo {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.breadcrumb {
+  font-size: smaller;
+  margin-bottom: 1em;
+}
+
+/* Simple lists do not get a bullet */
+ul.simple {
+  list-style-type: none;
+}
+
+/* Default of bold for definition list terms */
+.dlterm {
+  font-weight: bold;
+}
+
+/* Use CSS to expand lists with @compact="no" */
+.dltermexpand {
+  font-weight: bold;
+  margin-top: 1em;
+}
+
+*[compact="yes"] > li {
+  margin-top: 0;
+}
+
+*[compact="no"] > li {
+  margin-top: 0.53em;
+}
+
+.liexpand {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.sliexpand {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.dlexpand {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.ddexpand {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.stepexpand {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.substepexpand {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+dt.prereq {
+  margin-left: 20px;
+}
+
+/* All note formats have the same default presentation */
+.note {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.note .notetitle, .note .notelisttitle,
+.note .note__title {
+  font-weight: bold;
+}
+
+/* Various basic phrase styles */
+.bold {
+  font-weight: bold;
+}
+
+.bolditalic {
+  font-style: italic;
+  font-weight: bold;
+}
+
+.italic {
+  font-style: italic;
+}
+
+.underlined {
+  text-decoration: underline;
+}
+
+.uicontrol {
+  font-weight: bold;
+}
+
+.defkwd {
+  font-weight: bold;
+  text-decoration: underline;
+}
+
+.shortcut {
+  text-decoration: underline;
+}
+
+.menucascade > abbr {
+  text-decoration: none;
+}
+
+table {
+  border-collapse: collapse;
+}
+
+table .desc {
+  display: block;
+  font-style: italic;
+}
+
+.cellrowborder {
+  border-bottom: solid 1px;
+  border-left: 0;
+  border-right: solid 1px;
+  border-top: 0;
+}
+
+.row-nocellborder {
+  border-bottom: solid 1px;
+  border-left: 0;
+  border-top: 0;
+}
+
+.cell-norowborder {
+  border-left: 0;
+  border-right: solid 1px;
+  border-top: 0;
+}
+
+.nocellnorowborder {
+  border: 0;
+}
+
+.firstcol {
+  font-weight: bold;
+}
+
+.table--pgwide-1 {
+  width: 100%;
+}
+
+.align-left {
+  text-align: left;
+}
+
+.align-right {
+  text-align: right;
+}
+
+.align-center {
+  text-align: center;
+}
+
+.align-justify {
+  text-align: justify;
+}
+
+.align-char {
+  text-align: char;
+}
+
+.valign-top {
+  vertical-align: top;
+}
+
+.valign-bottom {
+  vertical-align: bottom;
+}
+
+.valign-middle {
+  vertical-align: middle;
+}
+
+.colsep-0 {
+  border-right: 0;
+}
+
+.colsep-1 {
+  border-right: 1px solid;
+}
+
+.rowsep-0 {
+  border-bottom: 0;
+}
+
+.rowsep-1 {
+  border-bottom: 1px solid;
+}
+
+.stentry {
+  border-right: 1px solid;
+  border-bottom: 1px solid;
+}
+
+.stentry:last-child {
+  border-right: 0;
+}
+
+.strow:last-child .stentry {
+  border-bottom: 0;
+}
+
+/* Add space for top level topics */
+.nested0 {
+  margin-top: 1em;
+}
+
+/* div with class=p is used for paragraphs that contain blocks, to keep the XHTML valid */
+.p {
+  margin-top: 1em;
+}

+ 657 - 0
templates/out/webhelp-responsive/commonrtl.css

@@ -0,0 +1,657 @@
+/*!
+ * This file is part of the DITA Open Toolkit project.
+ *
+ * Copyright 2015 Jarno Elovirta
+ *
+ * See the accompanying LICENSE file for applicable license.
+ */
+/*!
+ * This file is part of the DITA Open Toolkit project. 
+ *
+ * Copyright 2004, 2005 IBM Corporation
+ *
+ * See the accompanying LICENSE file for applicable license.
+ */
+.hazardstatement td,
+.hazardstatement th {
+  padding: 0.5rem;
+}
+
+.hazardstatement th {
+  text-align: center;
+  text-transform: uppercase;
+}
+
+.hazardstatement--caution {
+  background-color: #ffd100;
+}
+
+.hazardstatement--danger {
+  background-color: #c8102e;
+  color: #fff;
+}
+
+.hazardstatement--warning {
+  background-color: #ff8200;
+}
+
+.hazardstatement--attention, .hazardstatement--fastpath, .hazardstatement--important, .hazardstatement--note, .hazardstatement--notice, .hazardstatement--other, .hazardstatement--remember, .hazardstatement--restriction, .hazardstatement--tip {
+  background-color: #0072ce;
+  color: #fff;
+  font-style: italic;
+}
+
+.codeblock {
+  font-family: monospace;
+}
+
+.codeph {
+  font-family: monospace;
+}
+
+.kwd {
+  font-weight: bold;
+}
+
+.parmname {
+  font-weight: bold;
+}
+
+.var {
+  font-style: italic;
+}
+
+.filepath {
+  font-family: monospace;
+}
+
+.tasklabel {
+  font-size: 100%;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.screen {
+  background-color: #ccc;
+  border: outset;
+  margin-bottom: 2px;
+  margin-top: 2px;
+  padding: 5px;
+  white-space: pre;
+}
+
+.wintitle {
+  font-weight: bold;
+}
+
+.numcharref {
+  color: #639;
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.parameterentity {
+  color: #639;
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.textentity {
+  color: #639;
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.xmlatt {
+  color: #639;
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.xmlelement {
+  color: #639;
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.xmlnsname {
+  color: #639;
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.xmlpi {
+  color: #639;
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.frame-top {
+  border-top: solid 1px;
+  border-right: 0;
+  border-bottom: 0;
+  border-left: 0;
+}
+
+.frame-bottom {
+  border-top: 0;
+  border-right: 0;
+  border-bottom: solid 1px;
+  border-left: 0;
+}
+
+.frame-topbot {
+  border-top: solid 1px;
+  border-right: 0;
+  border-bottom: solid 1px;
+  border-left: 0;
+}
+
+.frame-all {
+  border: solid 1px;
+}
+
+.frame-sides {
+  border-top: 0;
+  border-left: solid 1px;
+  border-right: solid 1px;
+  border-bottom: 0;
+}
+
+.frame-none {
+  border: 0;
+}
+
+.scale-50 {
+  font-size: 50%;
+}
+
+.scale-60 {
+  font-size: 60%;
+}
+
+.scale-70 {
+  font-size: 70%;
+}
+
+.scale-80 {
+  font-size: 80%;
+}
+
+.scale-90 {
+  font-size: 90%;
+}
+
+.scale-100 {
+  font-size: 100%;
+}
+
+.scale-110 {
+  font-size: 110%;
+}
+
+.scale-120 {
+  font-size: 120%;
+}
+
+.scale-140 {
+  font-size: 140%;
+}
+
+.scale-160 {
+  font-size: 160%;
+}
+
+.scale-180 {
+  font-size: 180%;
+}
+
+.scale-200 {
+  font-size: 200%;
+}
+
+.expanse-page, .expanse-spread {
+  width: 100%;
+}
+
+.fig {
+  /* Default of italics to set apart figure captions */
+  /* Use @frame to create frames on figures */
+}
+
+.figcap {
+  font-style: italic;
+}
+
+.figdesc {
+  font-style: normal;
+}
+
+.figborder {
+  border-color: Silver;
+  border-style: solid;
+  border-width: 2px;
+  margin-top: 1em;
+  padding-left: 3px;
+  padding-right: 3px;
+}
+
+.figsides {
+  border-color: Silver;
+  border-left: 2px solid;
+  border-right: 2px solid;
+  margin-top: 1em;
+  padding-left: 3px;
+  padding-right: 3px;
+}
+
+.figtop {
+  border-color: Silver;
+  border-top: 2px solid;
+  margin-top: 1em;
+}
+
+.figbottom {
+  border-bottom: 2px solid;
+  border-color: Silver;
+}
+
+.figtopbot {
+  border-bottom: 2px solid;
+  border-color: Silver;
+  border-top: 2px solid;
+  margin-top: 1em;
+}
+
+/* Align images based on @align on topic/image */
+div.imageleft {
+  text-align: left;
+}
+
+div.imagecenter {
+  text-align: center;
+}
+
+div.imageright {
+  text-align: right;
+}
+
+div.imagejustify {
+  text-align: justify;
+}
+
+/* Set heading sizes, getting smaller for deeper nesting */
+.topictitle1 {
+  font-size: 1.34em;
+  margin-bottom: 0.1em;
+  margin-top: 0;
+}
+
+.topictitle2 {
+  font-size: 1.17em;
+  margin-bottom: 0.45em;
+  margin-top: 1pc;
+}
+
+.topictitle3 {
+  font-size: 1.17em;
+  font-weight: bold;
+  margin-bottom: 0.17em;
+  margin-top: 1pc;
+}
+
+.topictitle4 {
+  font-size: 1.17em;
+  font-weight: bold;
+  margin-top: 0.83em;
+}
+
+.topictitle5 {
+  font-size: 1.17em;
+  font-weight: bold;
+}
+
+.topictitle6 {
+  font-size: 1.17em;
+  font-style: italic;
+}
+
+.sectiontitle {
+  color: #000;
+  font-size: 1.17em;
+  font-weight: bold;
+  margin-bottom: 0;
+  margin-top: 1em;
+}
+
+.section {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.example {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.indexterm {
+  background-color: #fdf;
+  border: 1pt #000 solid;
+  margin: 1pt;
+}
+
+/* Most link groups are created with <div>. Ensure they have space before and after. */
+.ullinks {
+  list-style-type: none;
+}
+
+.ulchildlink {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.olchildlink {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.linklist {
+  margin-bottom: 1em;
+}
+
+ul.linklist {
+  margin-top: 0;
+  list-style-type: none;
+  padding-left: 0;
+}
+
+li.linklist {
+  margin-top: 0;
+  margin-bottom: 0;
+}
+
+.linklistwithchild {
+  margin-bottom: 1em;
+  margin-left: 1.5em;
+}
+
+.sublinklist {
+  margin-bottom: 1em;
+  margin-left: 1.5em;
+}
+
+.relconcepts {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.reltasks {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.relref {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.relinfo {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.breadcrumb {
+  font-size: smaller;
+  margin-bottom: 1em;
+}
+
+/* Simple lists do not get a bullet */
+ul.simple {
+  list-style-type: none;
+}
+
+/* Default of bold for definition list terms */
+.dlterm {
+  font-weight: bold;
+}
+
+/* Use CSS to expand lists with @compact="no" */
+.dltermexpand {
+  font-weight: bold;
+  margin-top: 1em;
+}
+
+*[compact="yes"] > li {
+  margin-top: 0;
+}
+
+*[compact="no"] > li {
+  margin-top: 0.53em;
+}
+
+.liexpand {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.sliexpand {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.dlexpand {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.ddexpand {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.stepexpand {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.substepexpand {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+dt.prereq {
+  margin-left: 20px;
+}
+
+/* All note formats have the same default presentation */
+.note {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.note .notetitle, .note .notelisttitle,
+.note .note__title {
+  font-weight: bold;
+}
+
+/* Various basic phrase styles */
+.bold {
+  font-weight: bold;
+}
+
+.bolditalic {
+  font-style: italic;
+  font-weight: bold;
+}
+
+.italic {
+  font-style: italic;
+}
+
+.underlined {
+  text-decoration: underline;
+}
+
+.uicontrol {
+  font-weight: bold;
+}
+
+.defkwd {
+  font-weight: bold;
+  text-decoration: underline;
+}
+
+.shortcut {
+  text-decoration: underline;
+}
+
+.menucascade > abbr {
+  text-decoration: none;
+}
+
+table {
+  border-collapse: collapse;
+}
+
+table .desc {
+  display: block;
+  font-style: italic;
+}
+
+.cellrowborder {
+  border-bottom: solid 1px;
+  border-left: 0;
+  border-right: solid 1px;
+  border-top: 0;
+}
+
+.row-nocellborder {
+  border-bottom: solid 1px;
+  border-left: 0;
+  border-top: 0;
+}
+
+.cell-norowborder {
+  border-left: 0;
+  border-right: solid 1px;
+  border-top: 0;
+}
+
+.nocellnorowborder {
+  border: 0;
+}
+
+.firstcol {
+  font-weight: bold;
+}
+
+.table--pgwide-1 {
+  width: 100%;
+}
+
+.align-left {
+  text-align: left;
+}
+
+.align-right {
+  text-align: right;
+}
+
+.align-center {
+  text-align: center;
+}
+
+.align-justify {
+  text-align: justify;
+}
+
+.align-char {
+  text-align: char;
+}
+
+.valign-top {
+  vertical-align: top;
+}
+
+.valign-bottom {
+  vertical-align: bottom;
+}
+
+.valign-middle {
+  vertical-align: middle;
+}
+
+.colsep-0 {
+  border-right: 0;
+}
+
+.colsep-1 {
+  border-right: 1px solid;
+}
+
+.rowsep-0 {
+  border-bottom: 0;
+}
+
+.rowsep-1 {
+  border-bottom: 1px solid;
+}
+
+.stentry {
+  border-right: 1px solid;
+  border-bottom: 1px solid;
+}
+
+.stentry:last-child {
+  border-right: 0;
+}
+
+.strow:last-child .stentry {
+  border-bottom: 0;
+}
+
+/* Add space for top level topics */
+.nested0 {
+  margin-top: 1em;
+}
+
+/* div with class=p is used for paragraphs that contain blocks, to keep the XHTML valid */
+.p {
+  margin-top: 1em;
+}
+
+.linklist {
+  margin-bottom: 1em;
+}
+
+ul.linklist {
+  margin-top: 0;
+  list-style-type: none;
+  padding-right: 0;
+}
+
+.linklistwithchild {
+  margin-right: 1.5em;
+  margin-top: 1em;
+}
+
+.sublinklist {
+  margin-right: 1.5em;
+  margin-top: 1em;
+}
+
+dt.prereq {
+  margin-right: 20px;
+}
+
+.cellrowborder {
+  border-left: solid 1px;
+  border-right: none;
+}
+
+.row-nocellborder {
+  border-left: hidden;
+  border-right: none;
+}
+
+.cell-norowborder {
+  border-left: solid 1px;
+  border-right: none;
+}
+
+.nocellnorowborder {
+  border-left: hidden;
+}

+ 5 - 0
templates/out/webhelp-responsive/context-help-map.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<map>
+   <appContext helpID="kzp" path="kzp.html"/>
+   <appContext helpID="kwp" path="kwp.html"/>
+</map>

+ 104 - 0
templates/out/webhelp-responsive/index.html

@@ -0,0 +1,104 @@
+
+<!DOCTYPE html
+  SYSTEM "about:legacy-compat">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:whc="http://www.oxygenxml.com/webhelp/components" whc:version="22.0" lang="en" dir="ltr">
+    <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><meta name="wh-path2root" content="" /><title>wibo</title>
+        
+        
+                
+        
+    <script type="text/javascript" src="./oxygen-webhelp/app/core/redirect.js"></script>
+    
+    <link rel="stylesheet" href="./oxygen-webhelp/lib/jquery-ui/jquery-ui.min.css" />
+    
+    <!-- Latest compiled and minified Bootstrap CSS -->
+    <link rel="stylesheet" type="text/css" href="./oxygen-webhelp/lib/bootstrap/css/bootstrap.min.css" />
+    
+    <!-- Template default styles  -->
+    <link rel="stylesheet" type="text/css" href="./oxygen-webhelp/app/main-page.css?buildId=2020100301" />
+    
+    
+    <script type="text/javascript" src="./oxygen-webhelp/lib/jquery/jquery-3.5.1.min.js"></script>
+    
+    <script data-main="./oxygen-webhelp/app/main-page.js" src="./oxygen-webhelp/lib/requirejs/require.js"></script>
+    
+
+        <!-- Skin resources -->
+        <link rel="stylesheet" type="text/css" href="oxygen-webhelp/template/oxygen-red.css?buildId=2020100301" />
+        <!-- EXM-36950 - Expand the args.hdf parameter here -->
+        
+        
+    </head>
+    <body class="wh_main_page">
+        <a href="#content" class="sr-only sr-only-focusable">Jump to main content</a>
+        <!-- EXM-36950 - Expand the args.hdr parameter here -->
+        
+        
+        
+        <header class="navbar navbar-default wh_header" whc:version="22.1">
+    <div class="container-fluid">
+        <div class="wh_header_flex_container navbar-nav navbar-expand-md navbar-dark">
+            <div class="wh_logo_and_publication_title_container">
+                <div class="wh_logo_and_publication_title">
+                    
+                    <!--
+                            This component will be generated when the next parameters are specified in the transformation scenario:
+                            'webhelp.logo.image' and 'webhelp.logo.image.target.url'.
+                            See: http://oxygenxml.com/doc/versions/17.1/ug-editor/#topics/dita_webhelp_output.html.
+                    -->
+                    
+                    <div class=" wh_publication_title "><a href="index.html"><span xmlns="" class="title">wibo</span></a></div>
+                    
+                </div>
+                
+                <!-- The menu button for mobile devices is copied in the output only when the 'webhelp.show.top.menu' parameter is set to 'yes' -->
+                <button type="button" data-target="#wh_top_menu_and_indexterms_link" id="wh_menu_mobile_button" data-toggle="collapse" class="navbar-toggler collapsed wh_toggle_button" aria-expanded="false" aria-label="Toggle menu" aria-controls="wh_top_menu_and_indexterms_link">
+                    <span class="navbar-toggler-icon"></span>
+                </button>
+            </div>
+
+            <div class="wh_top_menu_and_indexterms_link collapse navbar-collapse" id="wh_top_menu_and_indexterms_link">
+                
+                <nav class=" wh_top_menu "><ul xmlns:xhtml="http://www.w3.org/1999/xhtml" role="menubar" aria-label="Menu"><li role="menuitem"><span id="kzp-d61e11-mi" data-tocid="kzp-d61e11" data-state="leaf" class=" topicref " data-id="kzp"><span class="title"><a href="kzp.html">kzp</a></span></span></li><li role="menuitem"><span id="kwp-d61e23-mi" data-tocid="kwp-d61e23" data-state="leaf" class=" topicref " data-id="kwp"><span class="title"><a href="kwp.html">kwp</a></span></span></li></ul></nav>
+                
+                
+            </div>
+        </div>
+    </div>
+</header>        
+        
+        <!-- Search form -->
+        <div class=" wh_search_input navbar-form wh_main_page_search " role="form">
+          
+          <div class="wh_welcome"></div>          
+          <form id="searchForm" method="get" role="search" action="search.html"><div><input type="search" placeholder="Search " class="wh_search_textfield" id="textToSearch" name="searchQuery" aria-label="Search query" required="required" /><button type="submit" class="wh_search_button" aria-label="Search"><span>Search</span></button></div></form>
+          
+        </div>
+        <div class="wh_content_area " id="content">
+            
+            <!-- This is the placeholder for the main page tiles. -->
+            <div class="container-fluid wh_content_flex_container">
+                <!-- This is the placeholder for the main page tiles. -->
+                
+                <!--
+                    This is the placeholder for the main page entries
+                    presented in a tree-like fashion.
+                -->
+                <div class=" wh_main_page_toc "><div class=" wh_main_page_toc_entry "><span class="topicref"><a href="kzp.html" data-id="kzp">kzp</a></span><div class=" wh_toc_shortdesc " href="kzp.html" data-id="kzp">dokument zawierający graficzne elementy oraz podpisy dedykowanych stanowisk         odpowiedzialnych za dany element. </div></div><div class=" wh_main_page_toc_entry "><span class="topicref"><a href="kwp.html" data-id="kwp">kwp</a></span><div class=" wh_toc_shortdesc " href="kwp.html" data-id="kwp">zawiera parametry tabelaryczne, akceptowane w formie podpisu przez zdefiniowane         stanowiska dla danego elementu.</div></div></div>
+                
+            </div>
+        </div>
+        
+        <footer class="navbar navbar-default wh_footer" whc:version="22.1">
+  <div class=" footer-container mx-auto ">
+    
+            Generated by <a class="oxyFooter" href="http://www.oxygenxml.com/xml_webhelp.html" target="_blank">
+            &lt;oXygen/&gt; XML WebHelp
+            </a>
+        
+  </div>
+</footer>
+        
+        
+    </body>
+</html>

+ 1 - 0
templates/out/webhelp-responsive/index.xml

@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><index xmlns="http://www.oxygenxml.com/ns/webhelp/index" xmlns:xs="http://www.w3.org/2001/XMLSchema"/>

+ 81 - 0
templates/out/webhelp-responsive/indexTerms.html

@@ -0,0 +1,81 @@
+
+<!DOCTYPE html
+  SYSTEM "about:legacy-compat">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:whc="http://www.oxygenxml.com/webhelp/components" whc:version="22.0" lang="en" dir="ltr">
+    <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><meta name="wh-path2root" content="" /><title>Index Terms - wibo</title>
+        
+        
+         
+        
+        
+    <script type="text/javascript" src="./oxygen-webhelp/lib/jquery/jquery-3.5.1.min.js"><!----></script>
+    
+    <!-- Latest compiled and minified Bootstrap CSS -->
+    <link rel="stylesheet" href="./oxygen-webhelp/lib/bootstrap/css/bootstrap.min.css" />
+    
+    <link rel="stylesheet" type="text/css" href="./oxygen-webhelp/app/indexterms-page.css?buildId=2020100301" />
+    
+    <script data-main="./oxygen-webhelp/app/indexterms-page.js" src="./oxygen-webhelp/lib/requirejs/require.js"></script>
+
+        <!-- Skin resources -->
+        <link rel="stylesheet" type="text/css" href="oxygen-webhelp/template/oxygen-red.css?buildId=2020100301" />
+        <!-- EXM-36950 - Expand the args.hdf parameter here -->
+        
+        
+    </head>
+    <body class="wh_terms_page">
+        <a href="#content" class="sr-only sr-only-focusable">Jump to index list</a>
+        <!-- EXM-36950 - Expand the args.hdr parameter here -->
+        
+        
+        
+        <header class="navbar navbar-default wh_header" whc:version="22.1">
+    <div class="container-fluid">
+        <div class="wh_header_flex_container navbar-nav navbar-expand-md navbar-dark">
+            <div class="wh_logo_and_publication_title_container">
+                <div class="wh_logo_and_publication_title">
+                    
+                    <!--
+                            This component will be generated when the next parameters are specified in the transformation scenario:
+                            'webhelp.logo.image' and 'webhelp.logo.image.target.url'.
+                            See: http://oxygenxml.com/doc/versions/17.1/ug-editor/#topics/dita_webhelp_output.html.
+                    -->
+                    
+                    <div class=" wh_publication_title "><a href="index.html"><span class="title">wibo</span></a></div>
+                    
+                </div>
+                
+                <!-- The menu button for mobile devices is copied in the output only when the 'webhelp.show.top.menu' parameter is set to 'yes' -->
+                <button type="button" data-target="#wh_top_menu_and_indexterms_link" id="wh_menu_mobile_button" data-toggle="collapse" class="navbar-toggler collapsed wh_toggle_button" aria-expanded="false" aria-label="Toggle menu" aria-controls="wh_top_menu_and_indexterms_link">
+                    <span class="navbar-toggler-icon"></span>
+                </button>
+            </div>
+
+            <div class="wh_top_menu_and_indexterms_link collapse navbar-collapse" id="wh_top_menu_and_indexterms_link">
+                
+                <nav class=" wh_top_menu "><ul xmlns:xhtml="http://www.w3.org/1999/xhtml" role="menubar" aria-label="Menu"><li role="menuitem"><span id="kzp-d61e11-mi" data-tocid="kzp-d61e11" data-state="leaf" class=" topicref " data-id="kzp"><span class="title"><a href="kzp.html">kzp</a></span></span></li><li role="menuitem"><span id="kwp-d61e23-mi" data-tocid="kwp-d61e23" data-state="leaf" class=" topicref " data-id="kwp"><span class="title"><a href="kwp.html">kwp</a></span></span></li></ul></nav>
+                
+                
+            </div>
+        </div>
+    </div>
+</header>        
+        <div class="container-fluid" id="content">
+            <div class="row">
+                <div class=" wh_index_terms col-xs-12 col-sm-12 col-md-12 col-lg-12 "></div>
+            </div>
+        </div>
+        
+        <footer class="navbar navbar-default wh_footer" whc:version="22.1">
+  <div class=" footer-container mx-auto ">
+    
+            Generated by <a class="oxyFooter" href="http://www.oxygenxml.com/xml_webhelp.html" target="_blank">
+            &lt;oXygen/&gt; XML WebHelp
+            </a>
+        
+  </div>
+</footer>
+        
+        
+    </body>
+</html>

+ 1 - 0
templates/out/webhelp-responsive/indexterms.properties

@@ -0,0 +1 @@
+indexterms.available=false

+ 130 - 0
templates/out/webhelp-responsive/kwp.html

@@ -0,0 +1,130 @@
+
+<!DOCTYPE html
+  SYSTEM "about:legacy-compat">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:whc="http://www.oxygenxml.com/webhelp/components" xml:lang="en" lang="en" whc:version="22.0">
+    <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><meta charset="UTF-8" /><meta name="copyright" content="(C) Copyright 2020" /><meta name="DC.rights.owner" content="(C) Copyright 2020" /><meta name="DC.type" content="topic" /><meta name="description" content="zawiera parametry tabelaryczne, akceptowane w formie podpisu przez zdefiniowane stanowiska dla danego elementu." /><meta name="DC.format" content="HTML5" /><meta name="DC.identifier" content="kwp" />        
+      <title>kwp</title><!--  Generated with Oxygen version 22.1, build number 2020100301.  --><meta name="wh-path2root" content="" /><meta name="wh-toc-id" content="kwp-d61e23" /><meta name="wh-source-relpath" content="kwp.dita" /><meta name="wh-out-relpath" content="kwp.html" />
+    <!-- Latest compiled and minified Bootstrap CSS -->
+    <link rel="stylesheet" type="text/css" href="./oxygen-webhelp/lib/bootstrap/css/bootstrap.min.css" />
+    
+    <link rel="stylesheet" href="./oxygen-webhelp/lib/jquery-ui/jquery-ui.min.css" />
+    
+    <!-- Template default styles  -->
+    <link rel="stylesheet" type="text/css" href="./oxygen-webhelp/app/topic-page.css?buildId=2020100301" />
+    
+    
+    <script type="text/javascript" src="./oxygen-webhelp/lib/jquery/jquery-3.5.1.min.js"><!----></script>
+    
+    <script data-main="./oxygen-webhelp/app/topic-page.js" src="./oxygen-webhelp/lib/requirejs/require.js"></script>
+<link rel="stylesheet" type="text/css" href="oxygen-webhelp/template/oxygen-red.css?buildId=2020100301" /></head>
+
+    <body id="kwp" class="wh_topic_page frmBody">
+        <a href="#wh_topic_body" class="sr-only sr-only-focusable">Jump to main content</a>
+        <!-- EXM-36950 - Expand the args.hdr parameter here -->
+        
+        
+        
+        <header class="navbar navbar-default wh_header" whc:version="22.1">
+    <div class="container-fluid">
+        <div class="wh_header_flex_container navbar-nav navbar-expand-md navbar-dark">
+            <div class="wh_logo_and_publication_title_container">
+                <div class="wh_logo_and_publication_title">
+                    
+                    <!--
+                            This component will be generated when the next parameters are specified in the transformation scenario:
+                            'webhelp.logo.image' and 'webhelp.logo.image.target.url'.
+                            See: http://oxygenxml.com/doc/versions/17.1/ug-editor/#topics/dita_webhelp_output.html.
+                    -->
+                    
+                    <div class=" wh_publication_title "><a href="index.html"><span class="title">wibo</span></a></div>
+                    
+                </div>
+                
+                <!-- The menu button for mobile devices is copied in the output only when the 'webhelp.show.top.menu' parameter is set to 'yes' -->
+                <button type="button" data-target="#wh_top_menu_and_indexterms_link" id="wh_menu_mobile_button" data-toggle="collapse" class="navbar-toggler collapsed wh_toggle_button" aria-expanded="false" aria-label="Toggle menu" aria-controls="wh_top_menu_and_indexterms_link">
+                    <span class="navbar-toggler-icon"></span>
+                </button>
+            </div>
+
+            <div class="wh_top_menu_and_indexterms_link collapse navbar-collapse" id="wh_top_menu_and_indexterms_link">
+                
+                <nav class=" wh_top_menu "><ul xmlns:xhtml="http://www.w3.org/1999/xhtml" role="menubar" aria-label="Menu"><li role="menuitem"><span id="kzp-d61e11-mi" data-tocid="kzp-d61e11" data-state="leaf" class=" topicref " data-id="kzp"><span class="title"><a href="kzp.html">kzp</a></span></span></li><li role="menuitem"><span id="kwp-d61e23-mi" data-tocid="kwp-d61e23" data-state="leaf" class=" topicref " data-id="kwp"><span class="title"><a href="kwp.html">kwp</a></span></span></li></ul></nav>
+                
+                
+            </div>
+        </div>
+    </div>
+</header>
+        
+        <div class=" wh_search_input "><form id="searchForm" method="get" role="search" action="search.html"><div><input type="search" placeholder="Search " class="wh_search_textfield" id="textToSearch" name="searchQuery" aria-label="Search query" required="required" /><button type="submit" class="wh_search_button" aria-label="Search"><span>Search</span></button></div></form></div>
+        
+        <div class="container-fluid" id="wh_topic_container">
+            <div class="row">
+
+                <nav class="wh_tools d-print-none navbar-expand-md">
+                    <div data-tooltip-position="bottom" class=" wh_breadcrumb "><ol xmlns:html="http://www.w3.org/1999/xhtml" class="d-print-none"><li><span class="home"><a href="index.html"><span>Home</span></a></span></li><li class="active"><span class="topicref" data-id="kwp"><span class="title"><a href="kwp.html">kwp</a><span class="wh-tooltip"><p xmlns:toc="http://www.oxygenxml.com/ns/webhelp/toc" xmlns:xhtml="http://www.w3.org/1999/xhtml" class="shortdesc">zawiera parametry tabelaryczne, akceptowane w formie podpisu przez zdefiniowane         stanowiska dla danego elementu.</p></span></span></span></li></ol></div>
+
+                    <div class="wh_right_tools">
+                        <button class="wh_hide_highlight" aria-label="Toggle search highlights" title="Toggle search highlights"></button>
+                        <button class="webhelp_expand_collapse_sections" data-next-state="collapsed" aria-label="Collapse sections" title="Collapse sections"></button>
+                        <div class=" wh_navigation_links "><span id="topic_navigation_links" class="navheader"></span></div>
+                        <div class=" wh_print_link print d-none d-md-inline-block "><button onClick="window.print()" title="Print this page" aria-label="Print this page"></button></div>
+                        
+                        <!-- Expand/Collapse publishing TOC 
+                             The menu button for mobile devices is copied in the output only when the publication TOC is available
+                        -->
+                        
+                    </div>
+                </nav>
+            </div>
+
+            <div class="wh_content_area">
+                <div class="row">
+                    
+                    
+                    <div class="col-12" id="wh_topic_body">
+                        <div class=" wh_topic_content body "><main role="main"><article role="article" aria-labelledby="ariaid-title1">
+    <h1 class="- topic/title title topictitle1" id="ariaid-title1">kwp</h1>
+    
+    <div class="- topic/body body"><p class="- topic/shortdesc shortdesc">zawiera parametry tabelaryczne, akceptowane w formie podpisu przez zdefiniowane
+        stanowiska dla danego elementu.</p>
+        <div class="- topic/example example">Przekazany przez klienta KWP wer. 12 po aktualizacji stanowiska w tabeli
+            badań.xlsx</div>
+        <p class="- topic/p p"></p>
+    </div>
+</article></main></div>
+                        
+                        
+                        
+                        
+                    </div>
+                    
+                </div>
+            </div>
+        </div> 
+        <footer class="navbar navbar-default wh_footer" whc:version="22.1">
+  <div class=" footer-container mx-auto ">
+    
+            Generated by <a class="oxyFooter" href="http://www.oxygenxml.com/xml_webhelp.html" target="_blank">
+            &lt;oXygen/&gt; XML WebHelp
+            </a>
+        
+  </div>
+</footer>
+        
+        <div id="go2top">
+            <span class="oxy-icon oxy-icon-up"></span>
+        </div>
+        
+        <!-- The modal container for images -->
+        <div id="modal_img_large" class="modal">
+            <span class="close oxy-icon oxy-icon-remove"></span>
+            <!-- Modal Content (The Image) -->
+            <img class="modal-content" id="modal-img" />
+            <!-- Modal Caption (Image Text) -->
+            <div id="caption"></div>
+        </div>
+        
+        
+    </body>
+</html>

+ 130 - 0
templates/out/webhelp-responsive/kzp.html

@@ -0,0 +1,130 @@
+
+<!DOCTYPE html
+  SYSTEM "about:legacy-compat">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:whc="http://www.oxygenxml.com/webhelp/components" xml:lang="en" lang="en" whc:version="22.0">
+    <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><meta charset="UTF-8" /><meta name="copyright" content="(C) Copyright 2020" /><meta name="DC.rights.owner" content="(C) Copyright 2020" /><meta name="DC.type" content="topic" /><meta name="description" content="dokument zawierający graficzne elementy oraz podpisy dedykowanych stanowisk odpowiedzialnych za dany element." /><meta name="DC.format" content="HTML5" /><meta name="DC.identifier" content="kzp" />        
+      <title>kzp</title><!--  Generated with Oxygen version 22.1, build number 2020100301.  --><meta name="wh-path2root" content="" /><meta name="wh-toc-id" content="kzp-d61e11" /><meta name="wh-source-relpath" content="kzp.dita" /><meta name="wh-out-relpath" content="kzp.html" />
+    <!-- Latest compiled and minified Bootstrap CSS -->
+    <link rel="stylesheet" type="text/css" href="./oxygen-webhelp/lib/bootstrap/css/bootstrap.min.css" />
+    
+    <link rel="stylesheet" href="./oxygen-webhelp/lib/jquery-ui/jquery-ui.min.css" />
+    
+    <!-- Template default styles  -->
+    <link rel="stylesheet" type="text/css" href="./oxygen-webhelp/app/topic-page.css?buildId=2020100301" />
+    
+    
+    <script type="text/javascript" src="./oxygen-webhelp/lib/jquery/jquery-3.5.1.min.js"><!----></script>
+    
+    <script data-main="./oxygen-webhelp/app/topic-page.js" src="./oxygen-webhelp/lib/requirejs/require.js"></script>
+<link rel="stylesheet" type="text/css" href="oxygen-webhelp/template/oxygen-red.css?buildId=2020100301" /></head>
+
+    <body id="kzp" class="wh_topic_page frmBody">
+        <a href="#wh_topic_body" class="sr-only sr-only-focusable">Jump to main content</a>
+        <!-- EXM-36950 - Expand the args.hdr parameter here -->
+        
+        
+        
+        <header class="navbar navbar-default wh_header" whc:version="22.1">
+    <div class="container-fluid">
+        <div class="wh_header_flex_container navbar-nav navbar-expand-md navbar-dark">
+            <div class="wh_logo_and_publication_title_container">
+                <div class="wh_logo_and_publication_title">
+                    
+                    <!--
+                            This component will be generated when the next parameters are specified in the transformation scenario:
+                            'webhelp.logo.image' and 'webhelp.logo.image.target.url'.
+                            See: http://oxygenxml.com/doc/versions/17.1/ug-editor/#topics/dita_webhelp_output.html.
+                    -->
+                    
+                    <div class=" wh_publication_title "><a href="index.html"><span class="title">wibo</span></a></div>
+                    
+                </div>
+                
+                <!-- The menu button for mobile devices is copied in the output only when the 'webhelp.show.top.menu' parameter is set to 'yes' -->
+                <button type="button" data-target="#wh_top_menu_and_indexterms_link" id="wh_menu_mobile_button" data-toggle="collapse" class="navbar-toggler collapsed wh_toggle_button" aria-expanded="false" aria-label="Toggle menu" aria-controls="wh_top_menu_and_indexterms_link">
+                    <span class="navbar-toggler-icon"></span>
+                </button>
+            </div>
+
+            <div class="wh_top_menu_and_indexterms_link collapse navbar-collapse" id="wh_top_menu_and_indexterms_link">
+                
+                <nav class=" wh_top_menu "><ul xmlns:xhtml="http://www.w3.org/1999/xhtml" role="menubar" aria-label="Menu"><li role="menuitem"><span id="kzp-d61e11-mi" data-tocid="kzp-d61e11" data-state="leaf" class=" topicref " data-id="kzp"><span class="title"><a href="kzp.html">kzp</a></span></span></li><li role="menuitem"><span id="kwp-d61e23-mi" data-tocid="kwp-d61e23" data-state="leaf" class=" topicref " data-id="kwp"><span class="title"><a href="kwp.html">kwp</a></span></span></li></ul></nav>
+                
+                
+            </div>
+        </div>
+    </div>
+</header>
+        
+        <div class=" wh_search_input "><form id="searchForm" method="get" role="search" action="search.html"><div><input type="search" placeholder="Search " class="wh_search_textfield" id="textToSearch" name="searchQuery" aria-label="Search query" required="required" /><button type="submit" class="wh_search_button" aria-label="Search"><span>Search</span></button></div></form></div>
+        
+        <div class="container-fluid" id="wh_topic_container">
+            <div class="row">
+
+                <nav class="wh_tools d-print-none navbar-expand-md">
+                    <div data-tooltip-position="bottom" class=" wh_breadcrumb "><ol xmlns:html="http://www.w3.org/1999/xhtml" class="d-print-none"><li><span class="home"><a href="index.html"><span>Home</span></a></span></li><li class="active"><span class="topicref" data-id="kzp"><span class="title"><a href="kzp.html">kzp</a><span class="wh-tooltip"><p xmlns:toc="http://www.oxygenxml.com/ns/webhelp/toc" xmlns:xhtml="http://www.w3.org/1999/xhtml" class="shortdesc">dokument zawierający graficzne elementy oraz podpisy dedykowanych stanowisk         odpowiedzialnych za dany element. </p></span></span></span></li></ol></div>
+
+                    <div class="wh_right_tools">
+                        <button class="wh_hide_highlight" aria-label="Toggle search highlights" title="Toggle search highlights"></button>
+                        <button class="webhelp_expand_collapse_sections" data-next-state="collapsed" aria-label="Collapse sections" title="Collapse sections"></button>
+                        <div class=" wh_navigation_links "><span id="topic_navigation_links" class="navheader"></span></div>
+                        <div class=" wh_print_link print d-none d-md-inline-block "><button onClick="window.print()" title="Print this page" aria-label="Print this page"></button></div>
+                        
+                        <!-- Expand/Collapse publishing TOC 
+                             The menu button for mobile devices is copied in the output only when the publication TOC is available
+                        -->
+                        
+                    </div>
+                </nav>
+            </div>
+
+            <div class="wh_content_area">
+                <div class="row">
+                    
+                    
+                    <div class="col-12" id="wh_topic_body">
+                        <div class=" wh_topic_content body "><main role="main"><article role="article" aria-labelledby="ariaid-title1">
+    <h1 class="- topic/title title topictitle1" id="ariaid-title1">kzp</h1>
+    
+    <div class="- topic/body body"><p class="- topic/shortdesc shortdesc">dokument zawierający graficzne elementy oraz podpisy dedykowanych stanowisk
+        odpowiedzialnych za dany element. </p>
+        <div class="- topic/example example">KZP Baza Doll Highlighter WIBO.PDF zawiera przykładowe elementy
+            przekazane</div>
+        <p class="- topic/p p"><img class="- topic/image image" id="kzp__image_wtf_fvx_znb" src="src.client/kzp_etyk_rezerw_112x17-kopia.png" width="600" /></p>
+    </div>
+</article></main></div>
+                        
+                        
+                        
+                        
+                    </div>
+                    
+                </div>
+            </div>
+        </div> 
+        <footer class="navbar navbar-default wh_footer" whc:version="22.1">
+  <div class=" footer-container mx-auto ">
+    
+            Generated by <a class="oxyFooter" href="http://www.oxygenxml.com/xml_webhelp.html" target="_blank">
+            &lt;oXygen/&gt; XML WebHelp
+            </a>
+        
+  </div>
+</footer>
+        
+        <div id="go2top">
+            <span class="oxy-icon oxy-icon-up"></span>
+        </div>
+        
+        <!-- The modal container for images -->
+        <div id="modal_img_large" class="modal">
+            <span class="close oxy-icon oxy-icon-remove"></span>
+            <!-- Modal Content (The Image) -->
+            <img class="modal-content" id="modal-img" />
+            <!-- Modal Caption (Image Text) -->
+            <div id="caption"></div>
+        </div>
+        
+        
+    </body>
+</html>

+ 629 - 0
templates/out/webhelp-responsive/license-3rd-party.txt

@@ -0,0 +1,629 @@
+DO NOT TRANSLATE OR LOCALIZE.
+
+THIRD-PARTY SOFTWARE NOTICES 
+
+This product may be based on or incorporates copyrighted material from the files listed below (collectively, �Third Party Code�).  
+The Third Party Code is licensed to you under its original license terms which are provided below. 
+
+
+THIRDPARTY COMPONENT FILE                                           			LICENSE
+(path in the installation)                                          			(see license text reproduced below)
+
+Third Party Code in generated WebHelp Output:
+
+oxygen-webhelp/app/search/nwSearchFnt.js                                		BSD 3-Clause (see oxygen-webhelp/search/nwSearchFnt.LICENSE.txt )
+oxygen-webhelp/app/search/stemmers/de_stemmer.js                        		BSD 2-Clause (FormBlitz AG)
+oxygen-webhelp/app/search/stemmers/fr_stemmer.js                        		BSD 2-Clause (Kasun Gajasinghe)
+oxygen-webhelp/app/search/stemmers/en_stemmer.js                        		BSD 2-Clause (http://tartarus.org/~martin/PorterStemmer/)
+oxygen-webhelp/app/util/parseuri.js                             				MIT License (author Steven Levithan)
+
+
+Bootstrap v4.4.1 (https://getbootstrap.com/)                                    MIT License (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  - oxygen-webhelp/lib/bootstrap/css/bootstrap.min.css 
+  - oxygen-webhelp/lib/bootstrap/js/bootstrap.bundle.min.js
+  
+jQuery v3.5.1 (https://jquery.org)                                              MIT License (https://jquery.org/license/)
+  - oxygen-webhelp/lib/jquery/jquery-3.5.1.min.js
+  
+bootpag v1.07 (http://botmonster.com/jquery-bootpag/)                           MIT License (http://www.opensource.org/licenses/mit-license.php)
+  - oxygen-webhelp/lib/jquery-bootpag/jquery.bootpag.min.js
+
+highlight v3                                                                    MIT license (https://opensource.org/licenses/MIT)
+(https://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html)
+  - oxygen-webhelp/lib/jquery-highlight/jquery.highlight-3.js
+  
+jQuery UI v1.12.1  (http://jqueryui.com)                                        MIT License (https://jquery.org/license/) 
+  - oxygen-webhelp/lib/jquery-ui/jquery-ui.min.css
+  - oxygen-webhelp/lib/jquery-ui/jquery-ui.min.js
+  
+kuromoji v0.1.1 (https://github.com/takuyaa/kuromoji.js)                        Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
+  - oxygen-webhelp/lib/kuromoji/kuromoji.js
+  - oxygen-webhelp/lib/kuromoji/dict/base.dat.gz
+  - oxygen-webhelp/lib/kuromoji/dict/cc.dat.gz
+  - oxygen-webhelp/lib/kuromoji/dict/check.dat.gz
+  - oxygen-webhelp/lib/kuromoji/dict/tid_map.dat.gz
+  - oxygen-webhelp/lib/kuromoji/dict/tid_pos.dat.gz
+  - oxygen-webhelp/lib/kuromoji/dict/tid.dat.gz
+  - oxygen-webhelp/lib/kuromoji/dict/unk_char.dat.gz
+  - oxygen-webhelp/lib/kuromoji/dict/unk_compat.dat.gz
+  - oxygen-webhelp/lib/kuromoji/dict/unk_invoke.dat.gz
+  - oxygen-webhelp/lib/kuromoji/dict/unk_map.dat.gz
+  - oxygen-webhelp/lib/kuromoji/dict/unk_pos.dat.gz
+  - oxygen-webhelp/lib/kuromoji/dict/unk.dat.gz
+
+maphilight v1.3.1 (https://github.com/kemayo/maphilight)                        MIT License (https://github.com/kemayo/maphilight/blob/master/MIT-LICENSE.txt)
+  - oxygen-webhelp/lib/maphighlight/jquery.maphilight.min.js
+  
+RequireJS 2.3.5 (https://requirejs.org/)                                        MIT License (https://github.com/requirejs/requirejs/blob/master/LICENSE)
+  - oxygen-webhelp/lib/requirejs/require.js
+  
+rwdImageMaps v1.4 (https://github.com/stowball/jQuery-rwdImageMaps)             MIT License (https://github.com/stowball/jQuery-rwdImageMaps/blob/master/LICENSE)
+  - oxygen-webhelp/lib/rwdImageMaps/jquery.rwdImageMaps.min.js
+  
+Roboto Font (https://github.com/google/roboto/)                                 Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
+  - templates/oxygen/resources/fonts/Roboto-Bold.ttf
+  - templates/oxygen/resources/fonts/Roboto-Light.ttf
+  - templates/oxygen/resources/fonts/Roboto-Regular.ttf
+  - templates/oxygen/resources/fonts/Roboto-Thin.ttf
+
+Oxygen WebHelp FeedBack third party libraries:
+
+oxygen-webhelp/feedback/resources/js/jquery.plugin.min.js                    	MIT License (http://keith-wood.name/licence.html)
+oxygen-webhelp/feedback/resources/js/base64.js                               	CC BY 2.0 UK (http://www.webtoolkit.info/, see oxygen-webhelp/feedback/resources/js/base64.Creative-Commons-License.txt)
+oxygen-webhelp/feedback/resources/js/parseuri.js                     			MIT License (author Steven Levithan)
+
+Bootstrap v4.4.1 (https://getbootstrap.com/)                                    MIT License (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  - oxygen-webhelp/lib/bootstrap/css/bootstrap.min.css 
+  - oxygen-webhelp/lib/bootstrap/js/bootstrap.bundle.min.js
+
+CLEditor WYSIWYG Editor v1.4.4 (https://premiumsoftware.net/cleditor/)          MIT License (Chris Landowski, Premium Software, LLC)
+  - oxygen-webhelp/feedback/resources/css/jquery.cleditor.css
+  - oxygen-webhelp/feedback/resources/js/jquery.cleditor.min.js
+
+jQuery-QuickSearch - v2.0.0 (https://plugins.jquery.com/jquery.quicksearch/)    MIT License (http://deuxhuithuit.mit-license.org)
+  - oxygen-webhelp/feedback/resources/js/jquery.quicksearch.js                   	
+  
+Bootstrap v4.4.1 (https://getbootstrap.com/)                                    MIT License (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  - oxygen-webhelp/feedback/resources/bootstrap/css/bootstrap.min.css
+  - oxygen-webhelp/feedback/resources/bootstrap/js/bootstrap.min.js
+
+jQuery v3.5.1 (https://jquery.org)                                              MIT License (https://jquery.org/license/)
+  - oxygen-webhelp/feedback/resources/js/jquery-3.5.1.min.js                 
+
+Additional Third Party Code in Oxygen WebHelp Plug-In (inside Oxygen XML) distribution:
+
+dtd/xhtml1-frameset.dtd                                        					W3C (the original at https://www.w3.org/TR/xhtml1/) 
+dtd/xhtml1-strict.dtd                                          					W3C (the original at https://www.w3.org/TR/xhtml1/)
+dtd/xhtml1-transitional.dtd                                    					W3C (the original at https://www.w3.org/TR/xhtml1/)
+dtd/xhtml1-lat1.ent                                            					W3C (the original at https://www.w3.org/TR/xhtml1/)
+dtd/xhtml1-special.ent                                         					W3C (the original at https://www.w3.org/TR/xhtml1/)
+dtd/xhtml1-symbol.ent                                          					W3C (the original at https://www.w3.org/TR/xhtml1/)
+
+lib/xhtml-indexer.jar                                          					BSD 3-Clause (see lib/xhtml-indexer.LICENSE.txt)
+
+xsl/dita/original/output-messages.xsl                          					Apache-2.0 (part of DITA-OT, http://www.dita-ot.org/)
+xsl/dita/original/relpath_util.xsl                             					Apache-2.0 (part of DITA4Publishers, http://www.dita4publishers.org/)
+
+Additional Third Party Code in standalone Oxygen WebHelp distribution:
+
+../com.oxygenxml.common/lib/ant-contrib-1.0b3.jar              					Apache-2.0 (see ../com.oxygenxml.common/lib/ant.LICENSE.txt)
+../com.oxygenxml.common/lib/log4j-core-2.13.0.jar                   					Apache-2.0 (see ../com.oxygenxml.common/lib/log4j.LICENSE.txt)
+../com.oxygenxml.common/lib/log4j-1.2-api-2.13.0.jar                   					Apache-2.0 (see ../com.oxygenxml.common/lib/log4j.LICENSE.txt) 
+../com.oxygenxml.common/lib/lucene-analyzers-common-4.7.2.jar   					Apache-2.0  with additional 3rd party licenses (see ../com.oxygenxml.common/lib/lucene.LICENSE.txt)     
+../com.oxygenxml.common/lib/lucene-analyzers-kuromoji-4.7.2.jar					Apache-2.0  with additional 3rd party licenses (see ../com.oxygenxml.common/lib/lucene.LICENSE.txt)
+../com.oxygenxml.common/lib/lucene-core-4.7.2.jar              					Apache-2.0  with additional 3rd party license (see ../com.oxygenxml.common/lib/lucene.LICENSE.txt)     
+../com.oxygenxml.highlight/lib/xslthl-2.1.1.jar                					zlib/libpng License (see ../com.oxygenxml.highlight/lib/xslthl.LICENSE.txt)
+../com.oxygenxml.common/lib/activation-1.1.1.jar 								CDDL 1.0 (see: ../com.oxygenxml.common/lib/activation-1.1.1.jar\META-INF\LICENSE.txt)
+../com.oxygenxml.common/lib/jaxb-impl-2.3.0.1.jar 								CDDL 1.1 (see: https://javaee.github.io/glassfish/LICENSE)
+../com.oxygenxml.common/lib/jaxb-api-2.3.0.jar 									CDDL 1.1 (see: ../com.oxygenxml.common/lib/jaxb-api-2.3.0.jar\META-INF\LICENSE.txt)
+../com.oxygenxml.common/lib/jaxb-core-2.3.0.1.jar 								CDDL 1.1 (see https://javaee.github.io/glassfish/LICENSE)
+
+
+========================= W3C ==================================================
+
+W3C(R) SOFTWARE NOTICE AND LICENSE
+
+
+Copyright (c) 1994-2002 World Wide Web Consortium, (Massachusetts Institute of
+Technology, Institut National de Recherche en Informatique et en Automatique,
+Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/
+
+This W3C work (including software, documents, or other related items) is being
+provided by the copyright holders under the following license. By obtaining,
+using and/or copying this work, you (the licensee) agree that you have read,
+understood, and will comply with the following terms and conditions:
+Permission to use, copy, modify, and distribute this software and its
+documentation, with or without modification, for any purpose and without fee or
+royalty is hereby granted, provided that you include the following on ALL
+copies of the software and documentation or portions thereof, including
+modifications, that you make:
+
+  1. The full text of this NOTICE in a location viewable to users of the
+     redistributed or derivative work.
+  2. Any pre-existing intellectual property disclaimers, notices, or terms and
+     conditions. If none exist, a short notice of the following form (hypertext
+     is preferred, text is permitted) should be used within the body of any
+     redistributed or derivative code: "Copyright (c) [$date-of-software] World
+     Wide Web Consortium, (Massachusetts Institute of Technology, Institut
+     National de Recherche en Informatique et en Automatique, Keio University).
+     All Rights Reserved. http://www.w3.org/Consortium/Legal/"
+  3. Notice of any changes or modifications to the W3C files, including the
+     date changes were made. (We recommend you provide URIs to the location
+     from which the code is derived.)
+
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
+NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
+THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
+PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
+The name and trademarks of copyright holders may NOT be used in advertising or
+publicity pertaining to the software without specific, written prior
+permission. Title to copyright in this software and any associated
+documentation will at all times remain with copyright holders.
+____________________________________
+This formulation of W3C's notice and license became active on August 14 1998 so
+as to improve compatibility with GPL. This version ensures that W3C software
+licensing terms are no more restrictive than GPL and consequently W3C software
+may be distributed in GPL packages. See the older_formulation for the policy
+prior to this date. Please see our Copyright_FAQ for common questions about
+using materials from our site, including specific terms and conditions for
+packages like libwww, Amaya, and Jigsaw. Other questions about this notice can
+be directed to site-policy@w3.org.
+
+
+========================= Apache-2.0 ===========================================
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+===================== BSD 3-Clause =================================================
+
+http://www.opensource.org/licenses/BSD-3-Clause
+Copyright (c) <YEAR>, <OWNER>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this 
+list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this 
+list of conditions and the following disclaimer in the documentation and/or other
+materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors may
+be used to endorse or promote products derived from this software without specific 
+prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ 
+===================== BSD 2-Clause =====================================================
+https://opensource.org/licenses/BSD-2-Clause
+Copyright (c) <YEAR>, <OWNER>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, 
+are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this 
+list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this 
+list of conditions and the following disclaimer in the documentation and/or other 
+materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
+SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
+OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+===================== MIT License  ==================================================
+
+The MIT License
+
+Copyright (c) __YEARS__, __NAMES__
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+===================== CC BY 2.0 UK ==================================================
+http://creativecommons.org/licenses/by/2.0/uk/legalcode
+
+Licence
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENCE 
+("CCPL" OR "LICENCE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF 
+THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENCE OR COPYRIGHT LAW IS PROHIBITED. BY 
+EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF 
+THIS LICENCE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR 
+ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+This Creative Commons England and Wales Public Licence enables You (all capitalised terms defined 
+below) to view, edit, modify, translate and distribute Works worldwide, provided that You credit 
+the Original Author.
+
+'The Licensor' [one or more legally recognised persons or entities offering the Work under the 
+terms and conditions of this Licence]
+
+and
+
+'You'
+
+agree as follows:
+
+1. Definitions
+
+    "Attribution" means acknowledging all the parties who have contributed to and have rights in 
+    the Work, Derivative Work or Collective Work under this Licence.
+    "Collective Work" means the Work in its entirety in unmodified form along with a number of 
+    other separate and independent works, assembled into a collective whole.
+    "Derivative Work" means any work created by the editing, modification, adaptation or 
+    translation of the Work in any media (however a work that constitutes a Collective Work will 
+    not be considered a Derivative Work for the purpose of this Licence). For the avoidance of 
+    doubt, where the Work is a musical composition or sound recording, the synchronization of 
+    the Work in timed-relation with a moving image ("synching") will be considered a Derivative 
+    Work for the purpose of this Licence.
+    "Licence" means this Creative Commons England and Wales Public Licence agreement.
+    "Original Author" means the individual (or entity) who created the Work.
+    "Work" means the work protected by copyright which is offered under the terms of this Licence.
+    For the purpose of this Licence, when not inconsistent with the context, words in the singular 
+    number include the plural number.
+
+2. Licence Terms
+
+2.1 The Licensor hereby grants to You a worldwide, royalty-free, non-exclusive, Licence for use 
+and for the duration of copyright in the Work.
+
+You may:
+
+    copy the Work;
+    create one or more Derivative Works;
+    incorporate the Work into one or more Collective Works;
+    copy Derivative Works or the Work as incorporated in any Collective Work; and
+    publish, distribute, archive, perform or otherwise disseminate the Work, Derivative Works 
+    or the Work as incorporated in any Collective Work, to the public in any material form in any 
+    media whether now known or hereafter created.
+
+HOWEVER,
+
+You must not:
+
+    impose any terms on the use to be made of the Work, the Derivative Work or the Work as 
+    incorporated in a Collective Work that alter or restrict the terms of this Licence or any 
+    rights granted under it or has the effect or intent of restricting the ability to exercise 
+    those rights;
+    impose any digital rights management technology on the Work, the Derivative Work or the Work 
+    as incorporated in a Collective Work that alters or restricts the terms of this Licence or 
+    any rights granted under it or has the effect or intent of restricting the ability to 
+    exercise those rights;
+    sublicense the Work;
+    subject the Work to any derogatory treatment as defined in the Copyright, Designs and Patents 
+    Act 1988.
+
+FINALLY,
+
+You must:
+
+    make reference to this Licence (by Uniform Resource Identifier (URI), spoken word or as 
+    appropriate to the media used) on all copies of the Work and Derivative Works and Collective 
+    Works published, distributed, performed or otherwise disseminated or made available to the 
+    public by You;
+    recognise the Licensor's / Original Author's right of attribution in any Work, Derivative Work 
+    and Collective Work that You publish, distribute, perform or otherwise disseminate to the 
+    public and ensure that You credit the Licensor / Original Author as appropriate to the media 
+    used; and
+    to the extent reasonably practicable, keep intact all notices that refer to this Licence, in 
+    particular the URI, if any, that the Licensor specifies to be associated with the Work, 
+    unless such URI does not refer to the copyright notice or licensing information for the Work.
+
+Additional Provisions for third parties making use of the Work
+
+2.2. Further licence from the Licensor
+
+Each time You publish, distribute, perform or otherwise disseminate
+
+    the Work; or
+    any Derivative Work; or
+    the Work as incorporated in a Collective Work
+
+the Licensor agrees to offer to the relevant third party making use of the Work (in any of the 
+alternatives set out above) a licence to use the Work on the same terms and conditions as granted 
+to You hereunder.
+
+2.3. This Licence does not affect any rights that the User may have under any applicable law, 
+including fair use, fair dealing or any other legally recognised limitation or exception to 
+copyright infringement.
+
+2.4. All rights not expressly granted by the Licensor are hereby reserved, including but not 
+limited to, the exclusive right to collect, whether individually or via a licensing body, such as 
+a collecting society, royalties for any use of the Work.
+
+3. Warranties and Disclaimer
+
+Except as required by law, the Work or any Derivative Work is licensed by the Licensor on an 
+"as is" and "as available" basis and without any warranty of any kind, either express or implied.
+
+4. Limit of Liability
+
+Subject to any liability which may not be excluded or limited by law the Licensor shall not be 
+liable and hereby expressly excludes all liability for loss or damage howsoever and whenever 
+caused to You.
+
+5. Termination
+
+The rights granted to You under this Licence shall terminate automatically upon any breach by 
+You of the terms of this Licence. Individuals or entities who have received Derivative Works or 
+Collective Works from You under this Licence, however, will not have their Licences terminated 
+provided such individuals or entities remain in full compliance with those Licences.
+
+6. General
+
+6.1. The validity or enforceability of the remaining terms of this agreement is not affected by 
+the holding of any provision of it to be invalid or unenforceable.
+
+6.2. This Licence constitutes the entire Licence Agreement between the parties with respect to 
+the Work licensed here. There are no understandings, agreements or representations with respect 
+to the Work not specified here. The Licensor shall not be bound by any additional provisions that 
+may appear in any communication in any form.
+
+6.3. A person who is not a party to this Licence shall have no rights under the Contracts 
+(Rights of Third Parties) Act 1999 to enforce any of its terms.
+
+6.4. This Licence shall be governed by the law of England and Wales and the parties irrevocably 
+submit to the exclusive jurisdiction of the Courts of England and Wales.
+
+7. On the role of Creative Commons
+
+7.1. Neither the Licensor nor the User may use the Creative Commons logo except to indicate that 
+the Work is licensed under a Creative Commons Licence. Any permitted use has to be in compliance 
+with the Creative Commons trade mark usage guidelines at the time of use of the Creative Commons 
+trade mark. These guidelines may be found on the Creative Commons website or be otherwise 
+available upon request from time to time.
+
+7.2. Creative Commons Corporation does not profit financially from its role in providing this 
+Licence and will not investigate the claims of any Licensor or user of the Licence.
+
+7.3. One of the conditions that Creative Commons Corporation requires of the Licensor and You 
+is an acknowledgement of its limited role and agreement by all who use the Licence that the 
+Corporation is not responsible to anyone for the statements and actions of You or the Licensor 
+or anyone else attempting to use or using this Licence.
+
+7.4. Creative Commons Corporation is not a party to this Licence, and makes no warranty 
+whatsoever in connection to the Work or in connection to the Licence, and in all events is not 
+liable for any loss or damage resulting from the Licensor's or Your reliance on this Licence 
+or on its enforceability.
+
+7.5. USE OF THIS LICENCE MEANS THAT YOU AND THE LICENSOR EACH ACCEPTS THESE CONDITIONS IN 
+SECTION 7.1, 7.2, 7.3, 7.4 AND EACH ACKNOWLEDGES CREATIVE COMMONS CORPORATION'S VERY LIMITED ROLE 
+AS A FACILITATOR OF THE LICENCE FROM THE LICENSOR TO YOU.

+ 122 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/config.js

@@ -0,0 +1,122 @@
+define(function() {
+
+    var modulePaths = {
+        // core
+        "webhelp" : "core/webhelp",
+        "expand": "core/expand",
+        "polyfill": "core/polyfill",
+        // context sensitive help
+        "context-help" : "context-help/context-help",
+        "context-help-map" : "context-help/context-help-map",
+        // navigation links
+        "menu" : "nav-links/menu-loader",
+        "toc" : "nav-links/toc-loader",
+        "nav" : "nav-links/nav",
+        // search
+        "search-init" : "search/search-init",
+        "search" : "search/search",
+        "nwSearchFnt" : "search/nwSearchFnt",
+        "searchAutocomplete" : "search/searchAutocomplete",
+        "searchHistoryItems" : "search/searchHistoryItems",
+        // search index
+        "index" : "search/index/index",
+        "link2parent" : "search/index/link-to-parent",
+        "stopwords" : "search/index/stopwords",
+        "index-1" : "search/index/index-1",
+        "index-2" : "search/index/index-2",
+        "index-3" : "search/index/index-3",
+        "htmlFileInfoList" : "search/index/htmlFileInfoList",
+        "keywords" : "search/index/keywords",
+        // stemmers
+        "stemmer" : "search/stemmers/stemmer",
+        "en_stemmer" : "search/stemmers/en_stemmer",
+        "de_stemmer" : "search/stemmers/de_stemmer",
+        "fr_stemmer" : "search/stemmers/fr_stemmer",
+        // options
+        "options" : "options/options",
+        "properties" : "options/properties",
+        // utilities
+        "util" : "util/util",
+        "parseuri" : "util/parseuri",
+        // i18n
+        "localization" : "localization/localization",
+        "strings" : "localization/strings",
+        // image maps
+        "image-map" : "image-map/image-map",
+
+        // Publishing template JS module loader
+        "template-module-loader" : "template/template-module-loader",
+        // Publishing Template base directory
+        "template-base-dir" : "../template",
+
+        // jquery-private
+        "jquery-private" : "jquery-private/jquery-private",
+        "jquery.highlight.amd" : "jquery-private/jquery.highlight.amd",
+        "jquery.bootpag.amd" : "jquery-private/jquery.bootpag.amd",
+        "jquery.rwdImageMaps.amd" : "jquery-private/jquery.rwdImageMaps.amd",
+        /********************************************************
+         **************** 3rd Party Libraries *******************
+         ********************************************************/
+
+        // JQuery
+        "jquery" : "../lib/jquery/jquery-3.5.1.min",
+        // JQuery UI
+        "jquery.ui" : "../lib/jquery-ui/jquery-ui.min",
+        // JQuery Highlight
+        "jquery.highlight" : "../lib/jquery-highlight/jquery.highlight-3",
+        // JQuery Image maps highlighter
+        "jquery.maphilight" : "../lib/maphighlight/jquery.maphilight.min",
+        // JQuery Responsive image maps
+        "jquery.rwdImageMaps" : "../lib/rwdImageMaps/jquery.rwdImageMaps.min",
+        // JQuery Bootpag
+        "jquery.bootpag" : "../lib/jquery-bootpag/jquery.bootpag.min",
+        // Popper
+        "bootstrap" : "../lib/bootstrap/js/bootstrap.bundle.min",
+
+        "kuromoji" : "../lib/kuromoji/kuromoji"
+    };
+
+    var shimConfig = {
+        // Responsive image maps
+        "jquery.rwdImageMaps" : {
+            deps: ["jquery"],
+            exports : "jQuery.fn.rwdImageMaps"
+        },
+        // JQuery Highlight
+        "jquery.highlight" : {
+            deps: ["jquery"],
+            exports : "jQuery.fn.highlight"
+        },
+        // JQuery Bootpag
+        "jquery.bootpag" : {
+            deps: ["jquery"],
+            exports : "jQuery.fn.bootpag"
+        },
+    };
+
+    requirejs.config({
+        paths : modulePaths,
+        shim : shimConfig,
+        map: {
+            // @see http://requirejs.org/docs/jquery.html#noconflictmap
+
+            // '*' means all modules will get 'jquery-private'
+            // for their 'jquery' dependency.
+            "*": {
+                     "jquery": "jquery-private",
+                     "jquery.rwdImageMaps" : "jquery.rwdImageMaps.amd",
+                     "jquery.highlight" : "jquery.highlight.amd",
+                     "jquery.bootpag" : "jquery.bootpag.amd"
+            },
+
+            // 'jquery-private' wants the real jQuery module
+            // though. If this line was not here, there would
+            // be an unresolvable cyclic dependency.
+            "jquery-private": { "jquery": "jquery" },
+            "jquery.rwdImageMaps.amd" : {"jquery.rwdImageMaps" : "jquery.rwdImageMaps"},
+            "jquery.highlight.amd" : {"jquery.highlight" : "jquery.highlight"},
+            "jquery.bootpag.amd" : {"jquery.bootpag" : "jquery.bootpag"}
+
+        }
+    });
+});

+ 1 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/context-help/context-help-map.js

@@ -0,0 +1 @@
+define(function() { return [{"appname":"", "appid":"kzp", "path":"kzp.html"},{"appname":"", "appid":"kwp", "path":"kwp.html"}]});

+ 25 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/context-help/context-help.js

@@ -0,0 +1,25 @@
+define(["require", "util"], function (require, util) {
+    $(document).ready(function () {
+        // If we have a contextID, we must to redirect to the corresponding topic
+        var contextId = util.getParameter('contextId');
+        var appname = util.getParameter('appname');
+
+        if (contextId != undefined && contextId != "") {
+            require(["context-help-map"], function (helpContext) {
+                if (helpContext != undefined) {
+                    for (var i = 0; i < helpContext.length; i++) {
+                        var ctxt = helpContext[i];
+                        if (contextId == ctxt["appid"] && (appname == undefined || appname == ctxt["appname"])) {
+                            var path = ctxt["path"];
+                            if (path != undefined) {
+                                var anchor = window.location.hash;
+                                window.location = path + anchor;
+                            }
+                            break;
+                        }
+                    }
+                }
+            });
+        }
+    });
+});

+ 49 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/core/expand.css

@@ -0,0 +1,49 @@
+@media screen{
+
+/* Expand / collapse */
+ table > caption,
+.topic > .title,
+.sectiontitle:not(.tasklabel),
+.wh_term_group > .wh_first_letter {
+    padding-left: .7em
+}
+
+.wh_expand_btn.expanded:before {
+    content:"p";
+}
+
+.wh_expand_btn:before {
+    content:"q";
+    font-family: "oXygen WebHelp", serif;
+    font-style: normal;
+    font-size: 0.6em;
+    font-weight: lighter;
+    display: inline-block;
+}
+
+.wh_expand_btn {
+    cursor: pointer;
+    position: absolute;
+    left: .6em;
+}
+
+
+/* WH-1613 */
+.permalink{
+    padding: 0 0.4em;
+    margin:0 0.5em 0 0.5em;
+    opacity: 0.35;
+    transition: opacity .3s;
+    background: url(../img/link-icon.png) no-repeat;
+    background-size: contain;
+    background-position-y: 60%;
+    cursor:pointer
+}
+
+/* WH-1613 */
+.permalink:hover{
+    opacity: 1;
+    cursor:pointer
+}
+
+}

+ 207 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/core/expand.js

@@ -0,0 +1,207 @@
+define(["options", "localization", "jquery"], function (options, i18n, $) {
+
+
+    var selectors = {
+        /* Selectors for the nodes that will contain an expand/collapse button. */
+        "expand_buttons": [
+            /* Table caption */
+            "table > caption:not(:empty)",
+            /* Article title */
+            ".topic > .title",
+            /* Section title. Exclude task labels generated by DITA-OT (EXM-37958 & EXM-38501).*/
+            ".sectiontitle:not(.tasklabel)",
+            /* Index terms groups */
+            ".wh_term_group > .wh_first_letter"
+        ],
+        /* WH-1613 - permalink selector  */
+        "permalinks": [
+            ".dt[id]",
+            ".section[id] .sectiontitle",
+            ".title.topictitle2[id]",
+            "table[id] .tablecap"
+        ]
+    };
+
+    var expandInitialState = options.get("webhelp.topic.collapsible.elements.initial.state");
+
+    /**
+     * Add expand-collapse support.
+     */
+    $(document).ready(function () {
+        /* Add the expand/collapse buttons. */
+        selectors.expand_buttons.forEach(
+            function (selector) {
+                var matchedNodes = $(document).find(selector);
+                // Add the expand/collapse support only if the title node has visible siblings.
+                var visibleSiblings = matchedNodes.siblings(':not(:hidden)');
+                if (visibleSiblings.length > 0) {
+                    // Add the element with expand/collapse capabilities
+                    matchedNodes.prepend(
+                        $("<span>", {
+                            "class": "wh_expand_btn expanded",
+                            "role": "button",
+                            "aria-expanded" : "true",
+                            "tabindex" : 0,
+                            "aria-label" : i18n.getLocalization("collapse")
+
+                        })
+                    );
+                    markHiddenSiblingsAsNotExpandable(matchedNodes);
+                }
+            }
+        );
+
+        /*
+         * WH-1613
+         * Add the permalink icons
+         */
+        selectors.permalinks.forEach(
+            function (selector) {
+                var matchedNodes = $(document).find(selector);
+                // Add the element for the permalink action
+                matchedNodes.append("<span class='permalink'/>");
+            }
+        );
+
+
+        /*
+         * Slide down when click on a letter from the indexterms bar
+         * */
+        $('.wh-letters a').click(function (e) {
+            var id = $(this).attr('href').replace("#", "");
+            e.preventDefault();
+            history.replaceState({}, '', e.target.href);
+
+            if ($("[id='" + id + "']").length > 0) {
+                $('html, body').animate({scrollTop: $("[id='" + id + "']").offset().top}, 1000);
+            }
+        });
+
+
+        /*
+         * WH-1613
+         * Permalink action
+         * */
+        $('span.permalink').click(function (e) {
+            var id = $(this).closest('[id]').attr('id');
+            var hash = '#' + id;
+            e.preventDefault();
+            history.replaceState({}, '', hash);
+
+            $('html, body').animate({scrollTop: $("[id='" + id + "']").offset().top}, 1000);
+        });
+
+        /* Expand / collapse subtopic sections */
+        function toggleSubtopics(state) {
+            var siblings = $(this).parent().siblings(':not(.wh_not_expandable)');
+
+            if (state !== undefined) {
+                // Will expand-collapse the siblings of the parent node, excepting the ones that were marked otherwise
+                if (state == 'collapsed') {
+                    siblings.slideUp(0);
+                    $('.webhelp_expand_collapse_sections').attr('data-next-state', 'expanded').attr('title', i18n.getLocalization('expandSections'));
+                    $(this).removeClass('expanded');
+                    $(this).attr('aria-expanded', false);
+                    $(this).attr('aria-label', i18n.getLocalization('expand'));
+                } else {
+                    siblings.slideDown(0);
+                    $('.webhelp_expand_collapse_sections').attr('data-next-state', 'collapsed').attr('title', i18n.getLocalization('collapseSections'));
+                    $(this).addClass('expanded');
+                    $(this).attr('aria-expanded', true);
+                    $(this).attr('aria-label', i18n.getLocalization("collapse"));
+                }
+            } else {
+                // Change the button state
+                $(this).toggleClass("expanded");
+                var isExpanded = $(this).hasClass("expanded");
+                $(this).attr('aria-expanded', isExpanded);
+
+                if (isExpanded) {
+                    $(this).attr('aria-label', i18n.getLocalization("collapse"));
+                } else {
+                    $(this).attr('aria-label', i18n.getLocalization('expand'));
+                }
+
+                var parent = $(this).parent();
+                var tagName = parent.prop("tagName");
+                // Will expand-collapse the siblings of the parent node, excepting the ones that were marked otherwise
+                if (tagName == "CAPTION" || parent.hasClass('wh_first_letter')) {
+                    // The table does not have display:block, so it will not slide.
+                    // In this case we'll just hide it
+                    siblings.toggle();
+                } else {
+                    siblings.slideToggle("1000");
+                }
+            }
+        }
+
+
+        /*
+         * WH-235
+         * Sets the initial state of collapsible elements
+         */
+        $.each($(document).find('.wh_expand_btn'), function () {
+            toggleSubtopics.call(this, expandInitialState);
+        });
+
+
+        /*
+         * Toggle the subtopic sections
+         */
+        $('.webhelp_expand_collapse_sections').click(function () {
+            var state = $('.webhelp_expand_collapse_sections').attr('data-next-state');
+
+            $.each($(document).find('.wh_expand_btn'), function () {
+                toggleSubtopics.call(this, state);
+            });
+
+            return false;
+        });
+
+
+        /*
+         * WH-1750 - Handle topic TOC expand/collapse actions
+         */
+        $('.wh_topic_toc a').click(function () {
+            var currentNode = $(this).attr("href");
+            var contentNode = $(currentNode);
+            if(contentNode.length){
+                $.each(contentNode.parents(), function () {
+                    if ($(this).children(".title").length) {
+                        toggleSubtopics.call($(this).children('.title').find('.wh_expand_btn'),'expanded');
+                    }
+                });
+                toggleSubtopics.call(contentNode.children('.title').find('.wh_expand_btn'),'expanded');
+            }
+        });
+
+
+        /* Expand / collapse support for the marked content */
+        var expandWidgets = $(document).find('.wh_expand_btn');
+        expandWidgets.click(function (event) {
+            toggleSubtopics.call(this);
+
+            return false;
+        });
+
+        /* Toggle expand/collapse on enter and space */
+        expandWidgets.keypress(function( event ) {
+            // Enter & Spacebar events
+            if ( event.which === 13 || event.which === 32) {
+                event.preventDefault();
+                toggleSubtopics.call(this);
+            }
+        });
+
+    });
+
+    /**
+     * Marks the hidden siblings of the matched nodes as being not expandable.
+     *
+     * @param nodes The matched nodes.
+     */
+    function markHiddenSiblingsAsNotExpandable(nodes) {
+        var siblings = nodes.siblings(":hidden");
+        siblings.addClass("wh_not_expandable");
+    }
+});

文件差异内容过多而无法显示
+ 2 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/core/fonts.css


+ 40 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/core/icons.css

@@ -0,0 +1,40 @@
+.glyphicon:before,
+.glyphicon:after,
+.oxy-icon:before,
+.oxy-icon:after {
+    font-family: "oXygen WebHelp";
+}
+
+.glyphicon-chevron-up:before,
+.oxy-icon-up:before {
+    content: "r";
+}
+
+.glyphicon-remove:before,
+.oxy-icon-remove:before {
+    content: "g";
+}
+
+.glyphicon-print:before,
+.oxy-icon-print:before {
+    content: "n";
+}
+
+.glyphicon-arrow-left:before,
+.oxy-icon-arrow-left:before {
+    content: "u";
+}
+
+.glyphicon-arrow-right:before,
+.oxy-icon-arrow-right:before {
+    content: "t";
+}
+
+.glyphicon-ok:before,
+.oxy-icon-ok:before {
+    content: "i";
+}
+
+.home a:before {
+    font-family: "oXygen WebHelp", serif !important;
+}

+ 11 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/core/polyfill.js

@@ -0,0 +1,11 @@
+define(function() {
+    // IE: WH-2284
+    if (!String.prototype.endsWith) {
+        String.prototype.endsWith = function (search, this_len) {
+            if (this_len === undefined || this_len > this.length) {
+                this_len = this.length;
+            }
+            return this.substring(this_len - search.length, this_len) === search;
+        };
+    }
+});

+ 23 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/core/redirect.js

@@ -0,0 +1,23 @@
+/**
+ * If an old URL is given, redirect to the corresponding topic from the WebHelp Responsive
+ */
+var actualLocation = window.location.href;
+var newLocation;
+var request = new XMLHttpRequest();
+if (actualLocation.indexOf('/#')!=-1) {
+    newLocation = actualLocation.replace(/\/#/g, "/");
+}
+if (actualLocation.match(/\/index\.(.*)#/gi)!=null) {
+    newLocation = actualLocation.replace(/\/index\.(.*)#/gi, "/");
+}
+if (typeof newLocation != "undefined") {
+    request.open('GET', newLocation, true);
+    request.onreadystatechange = function () {
+        if (request.readyState === 4) {
+            if (request.status !== 404) {
+                window.location.replace(newLocation);
+            }
+        }
+    };
+    request.send();
+}

+ 10 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/core/webhelp-dot3x.css

@@ -0,0 +1,10 @@
+
+ul.linklist {
+  list-style: none;
+  padding: 0;
+}
+
+li.linklist {
+  margin-bottom: 0;
+  padding: 0;    
+}

+ 1550 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/core/webhelp.css

@@ -0,0 +1,1550 @@
+@import "fonts.css?buildId=2020100301";
+@import "icons.css?buildId=2020100301";
+@import "../indexterms/indexterms.css?buildId=2020100301";
+@import "webhelp-dot3x.css?buildId=2020100301";
+
+.container-fluid {
+    margin-right: auto;
+    margin-left: auto;
+    max-width: 1600px;
+}
+
+a.sr-only:focus {
+    display: block;
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100vw;
+    height: 1.5em;
+    text-align: center;
+    background-color: #333;
+    z-index: 1;
+    line-height: 1.5em;
+    font-size: 1.5em;
+    font-weight: bold;
+    color: #fff;
+}
+
+.embed-responsive {
+    background-color: #000;
+}
+
+
+/*
+ * Responsive images
+ */
+.image {
+    max-width: 100%;
+    height: auto;
+    background-repeat: no-repeat;
+}
+img.image:not(img[usemap]) {
+    border-radius: 5px;
+    cursor: pointer;
+    transition: 0.3s;
+}
+
+img.image:not(img[usemap]):hover {opacity: 0.7;}
+
+/* The Modal background */
+#modal_img_large {
+    display: none;
+    position: fixed;
+    padding-top: 100px;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    overflow: auto;
+    background-color: rgb(0,0,0);
+    background-color: rgba(0,0,0,0.9);
+}
+.modal-content {
+    margin: auto;
+    display: block;
+    width: 80%;
+}
+#modal-img{
+    width:auto;
+    max-width: 95%;
+    max-height: 95%;
+}
+
+.zoom{cursor: pointer}
+
+/* Caption of Modal Image (Image Text) */
+#caption {
+    margin: auto;
+    display: block;
+    width: 80%;
+    max-width: 700px;
+    text-align: center;
+    color: #ccc;
+    padding: 10px 0;
+    height: 150px;
+}
+/* Add Animation - Zoom in the Modal */
+.modal-content, #caption {
+    -webkit-animation-name: zoom;
+    -webkit-animation-duration: 0.6s;
+    animation-name: zoom;
+    animation-duration: 0.6s;
+}
+@media screen {
+	
+@-webkit-keyframes zoom {
+    from {-webkit-transform:scale(0)}
+    to {-webkit-transform:scale(1)}
+}
+@keyframes zoom {
+    from {transform:scale(0)}
+    to {transform:scale(1)}
+}
+
+}
+
+/* The Close button of the modal container*/
+.close {
+    position: absolute;
+    top: 15px;
+    right: 35px;
+    color: #f1f1f1;
+    font-size: 30px;
+    transition: 0.3s;
+    font-weight: 100;
+    opacity: .4;
+    text-shadow: none;
+}
+.close:hover,
+.close:focus {
+    color: #ccc;
+    text-decoration: none;
+    cursor: pointer;
+    opacity:1;
+}
+
+.wh_topic_toc{
+    border-left: 1px solid #cfe2f5;
+    margin-left:0;
+    padding-left:.5em;
+}
+.wh_topic_toc li, .wh_publication_toc li{
+    line-height: 1.4em;
+    margin:.5em 0;
+}
+
+.wh_topic_toc .wh_topic_label{
+    font-weight:600;
+}
+.wh_topic_toc .wh_topic_label:after{
+    content: ": "
+}
+
+.wh_topic_toc ul ul li:last-of-type, .wh_publication_toc ul ul li:last-of-type{
+    margin-bottom:0
+}
+
+#wh_topic_toc ul{
+    padding-left:0;
+    margin-left:0;
+    list-style:none;
+}
+
+#wh_topic_toc ul ul{
+    padding-left:1em
+}
+
+.wh_footer{
+    margin-top: 2em;
+}
+
+.wh_top_menu ul li a{
+    line-height:1.3em
+}
+
+/*
+ * ------------------------------------------------------------------
+ *  
+ * Fight bootstrap
+ *  
+ */
+
+/*Fix for: Bootstrap marks all the LIs as position:relative, so you cannot position an 
+  li:after or a li:before absolutely to a parent of your choice.*/
+.wh_publication_toc .nav>li {
+    position:inherit;
+}
+
+/* WH-231
+ * Compacting the side-toc
+ *  */
+li.hide-after, li.hide-before{display:none}
+.dots-before, .dots-after{cursor: pointer; text-indent: 1.1em; color: #ccc; font-size: .8em}
+.dots-before span, .dots-after span{border:1px solid #e1e1e1; padding: 2px 7px; border-radius: 14px; }
+.dots-before span:hover, .dots-after span:hover{border:1px solid #bbb; background-color:#fff }
+
+
+
+/*Fix for: Bootstrap puts a two pixels border bottom under the thead, 
+    with a light color and bottom alignement.*/
+.table>thead>tr>th,
+.table>thead>tr>td,
+.table>tfoot>tr>th,
+.table>tfoot>tr>td,
+.table>tbody>tr>th,
+.table>tbody>tr>td,
+.table>caption+thead>tr:first-child>td,
+.table>caption+thead>tr:first-child>th,
+.table>colgroup+thead>tr:first-child>td,
+.table>colgroup+thead>tr:first-child>th,
+.table>thead:first-child>tr:first-child>td,
+.table>thead:first-child>tr:first-child>th {
+    /*
+       WH-1947 In order for the default alignment to apply as it is defined
+       in elements.css we need not to override it from this very specific rule.
+    */
+    /*  vertical-align:inherit ;*/
+    border-color:inherit;
+}
+td, th {
+    padding: 0.5em;
+}
+
+/*Fix for: Bootstrap sets a light gray color to the table caption. Use a darker color.*/
+caption{
+    color:inherit;
+    margin-top:1em;
+    caption-side: top;
+}
+
+/* Bootstrap adds a dotted border-bottom for abbr elements and browser renders them with with a dotted underline */
+abbr, abbr[title] {
+    text-decoration: none;
+    border-bottom: none;
+}
+
+
+/*
+ * ------------------------------------------------------------------
+ *  
+ * Publication logo and title
+ *  
+ */
+
+.wh_header_flex_container {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    align-content: center;
+    flex-wrap: wrap;
+    width:100%;
+}
+
+.wh_header {
+    padding: 1em;
+}
+
+.wh_logo_and_publication_title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+}
+
+.wh_top_menu_and_indexterms_link {
+    padding: 0;
+}
+
+#topic_navigation_links {
+    white-space: nowrap;
+}
+
+@media only screen and (max-width: 767px) {
+    .wh_header_flex_container {
+        flex-direction: column;
+        align-items: stretch;
+    }
+
+    .wh_logo_and_publication_title_container {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        align-content: center;
+        flex-wrap: wrap;
+        align-self: stretch;
+        width: 100%;
+    }
+
+    .wh_indexterms_link a:before {
+        padding-left: .5em !important;
+    }
+}
+
+.wh_publication_title a {
+    display: inline-block;
+    margin: 1em 0;
+}
+
+@media only screen and (min-width: 768px) {
+    .wh_top_menu_and_indexterms_link.navbar-collapse {
+        float: none;
+        display: inline-block !important;
+        vertical-align: middle;
+    }
+
+    .wh_top_menu {
+        line-height: 1em;
+        vertical-align: middle;
+
+    }
+
+    .wh_header {
+        text-align: right;
+    }
+}
+
+@media only screen and (max-width: 767px) {
+    .wh_toggle_button {
+        float: none;
+        line-height: 1em;
+        margin: 0;
+    }
+
+    .wh_header {
+        text-align: left;
+    }
+}
+
+
+
+/*------------------------------------------------------*/
+
+
+
+
+.wh_logo{
+    display:inline-block;
+    vertical-align:baseline;
+}
+.wh_publication_title {
+    display:inline-block;
+}
+
+.wh_logo_and_publication_title.navbar-brand {
+    font-size: 1em;
+    line-height: 1em;
+}
+
+
+
+/* Generic top_menu styles*/
+.wh_top_menu ul {
+    list-style: none;
+    padding-left:0;
+}
+
+/* Render top_menu for devices larger than 767px */
+@media only screen and (min-width: 768px) {
+    .wh_top_menu {
+        display: inline-block;
+    }
+
+    .wh_top_menu ul ul {
+        display: none;
+    }
+
+    .wh_top_menu ul li:hover > ul {
+        display: block;
+    }
+
+    .wh_top_menu ul {
+        position: relative;
+        display: inline-table;
+        z-index: 999;
+        margin-bottom:0;
+    }
+
+    .wh_top_menu ul:after {
+        content: "";
+        clear: both;
+        display: block;
+    }
+
+    .wh_top_menu > ul > li {
+        display: inline-block;
+    }
+
+
+    .wh_top_menu ul li a {
+        display: block;
+        padding: 0.5em 1em;
+        text-decoration: none;
+    }
+
+    .wh_top_menu ul ul {
+        padding: 0;
+        position: absolute;
+        text-align: left;
+    }
+
+    .wh_top_menu ul ul li {
+        float: none;
+        position: relative;
+        border-top: 1px solid;
+        min-width:210px;
+    }
+
+
+    .wh_top_menu ul ul ul {
+        position: absolute;
+        left: 100%;
+        top: 0;
+    }
+
+    /* Mark the items that have a submenu with a small double arrow. */
+    .wh_top_menu ul ul li.has-children{
+        position:relative;
+    }
+    .wh_top_menu ul ul li.has-children > span > a{
+        padding-right: 1em;
+    }
+    .wh_top_menu ul ul li.has-children:after{
+        display:block;
+        content: "\00BB";
+        color:silver;
+        position:absolute;
+        right:5px;
+        top:0;
+        line-height: 2.5em;
+    }
+
+    .wh_top_menu ul ul {
+        background-color: #0f0f0f;
+    }
+    .wh_top_menu ul ul li {
+        border-top-color: #4b545f;
+    }
+    .wh_top_menu ul ul li.has-children:after{
+        color:silver;
+    }
+
+}
+
+/* Render top_menu for devices smaller than 767px */
+@media only screen and (max-width: 767px) {
+
+    .wh_top_menu ul {
+        margin-bottom: 0;
+    }
+    .wh_top_menu ul ul {
+        display: none;
+    }
+    .wh_top_menu ul li a {
+        display:block;
+        padding: .5em;
+        text-decoration: none;
+    }
+}
+.wh_top_menu ul li.active > ul {
+    display: block;
+    padding-left: .5em;
+}
+
+/*
+ * ------------------------------------------------------------------
+ *
+ * Welcome area, before search
+ *
+ */
+.wh_welcome:not(:empty) {
+    display: block;
+    font-family:"Roboto Bold", Verdana;
+    text-align: center;
+    font-size: 2.5em;
+    text-shadow: 0 0 10px black;
+    padding: 0.5em;
+    width: 80%;
+    margin: 0 auto .5em auto;
+    color: #fff;
+}
+.wh_welcome:empty{
+    display:none;
+}
+@media only screen and (max-width: 767px) {
+    .wh_welcome:not(:empty), .wh_welcome:empty {
+        display: none;
+    }
+}
+
+/*
+ * ------------------------------------------------------------------
+ *  
+ * Breadcrumb
+ *  
+ */
+
+/* Place the right tools in line with the breadcrumb. */
+.wh_tools{
+    position: relative;
+    padding-right: 10px;
+    display: flex;
+    justify-content: space-between;
+    flex: 1 0;
+}
+
+.wh_right_tools {
+    display: flex;
+    align-items: center;
+}
+
+.wh_breadcrumb {
+    display:inline-block;
+}
+
+/* Breadcrumb */
+.wh_breadcrumb ol {
+    margin:0;
+    border-radius: 0;
+    font-size: .9em;
+    padding: 8px 15px;
+    list-style: none;
+    background:none;
+}
+.wh_breadcrumb li{
+    display:inline-block;
+}
+.wh_breadcrumb li:not(:last-of-type):after {
+    content: "/";
+    padding: 0 5px;
+}
+
+/* WH-1520 */
+.webhelp_expand_collapse_sections:after{font-family: "oXygen WebHelp"; display:inline-block;}
+.webhelp_expand_collapse_sections[data-next-state='expanded']:after{content:'l'}
+.webhelp_expand_collapse_sections[data-next-state='collapsed']:after{content:'k'}
+
+.wh_hide_highlight, .webhelp_expand_collapse_sections{background: transparent; border:0; display: none}
+.wh_hide_highlight:after{font-family: "oXygen WebHelp"; content:'j'; display:inline-block; vertical-align: bottom;}
+.wh_hide_highlight:focus {outline: none}
+.wh_hide_highlight.hl-close:after{opacity:.7}
+
+@media screen {
+#printlink:before {
+    display: inline-block;
+    width: 16px;
+    height: 16px;
+    padding: 0 3px 0 3px;
+    margin-right: 3px;
+    cursor: pointer;
+    content: "";
+}
+#printlink:before {
+    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC1QTFRFAwQEAwQEAwQEgICAYGBggICAk5OT2tra3t7e5eXl7Ozs9PT0+/v7/f39////qdjBqAAAAAV0Uk5TAAsmTWgvFGPAAAAAWElEQVQI12NgYA4FAgMGBgbWd0AQQBzDNBTECA1miHsK0p73lCHmejkQ1BxliN4NBlsZolaBwVKGyKkgNZFTGSIguloZXCGMEAYhVZBUkCIDA5MSECgwAACPPj1sb0KIdAAAAABJRU5ErkJggg==');
+}
+
+#printlink:hover:before {
+    opacity: 0.5;
+}
+}
+
+#trigger.active {
+    transition: all 0.75s ease-in-out;
+}
+
+#trigger {
+    float:left;
+}
+
+#wh_publication_toc {
+    margin-bottom: 1em;
+}
+.wh_publication_toc ul{
+    list-style: none;
+    margin:0;
+    padding:0;
+    word-wrap: break-word;
+}
+.wh_publication_toc ul ul {
+    padding-left: 1em;
+}
+
+.current_node {
+    font-weight: 700;
+    text-decoration: underline;
+}
+/*
+ * ------------------------------------------------------------------
+ *  
+ * Tools and navigation
+ * 
+ */
+.wh_print_link,
+.wh_navigation_links,
+.wh_navigation_links .navnext,
+.wh_navigation_links .navprev{
+    display:inline-block;
+    margin-left:0.5em;
+}
+
+.wh_print_link button {
+    border: none;
+    background-color: transparent;
+}
+
+/**
+ * Content area
+ */
+@media screen{
+	/* On media print it creates problems if there is a two column page layout: big spaces around the elements that span all columns. */
+	.wh_content_area {
+	    min-height: 500px;
+	}
+}
+
+
+/*
+ * ------------------------------------------------------------------
+ *  
+ * Link to the index.
+ * 
+ */
+.wh_indexterms_link{
+    display: inline-block;
+    vertical-align: middle;
+}
+.wh_indexterms_link a:before{
+    content:"a"; /*The book symbol*/
+    font-family: "oXygen WebHelp";
+    display: inline-block;
+    position: relative;
+    bottom:0em;
+    font-size: 1.6em;
+    margin-left:0.8em;
+}
+
+@media only screen and (max-width: 767px) {
+
+    .wh_indexterms_link {
+        float: none;
+    }
+
+    .wh_indexterms_link a:before{
+        position: relative;
+        padding-bottom: 0 !important;
+        margin-left: 0;
+    }
+}
+
+/*
+ * ------------------------------------------------------------------
+ *  
+ * Tree TOC for the main page.
+ * 
+ */
+.wh_main_page_toc{
+    width: 80%;
+    margin: 1em auto 2em;
+}
+.wh_main_page_toc_entry{
+    padding: 0.5em;
+}
+.wh_main_page_toc_accordion_entries {
+    display: none;
+}
+
+/* The size of the tiltes should be larger, to standout more against the short descriptions. */
+.wh_main_page_toc a{
+    font-size:1.1em;
+}
+.wh_toc_shortdesc{
+    font-size:0.9em;
+    color:gray;
+}
+
+
+/* Padding for all children from the second level, but leave the shortdesc at the X as the header. */
+.wh_main_page_toc_accordion_entries > *{
+    margin-left:5em;
+}
+.wh_main_page_toc_accordion_entries > .wh_toc_shortdesc{
+    margin-left:3em;
+}
+
+
+.expanded + .wh_main_page_toc_accordion_entries {
+    display: block;
+}
+.wh_main_page_toc > .wh_main_page_toc_accordion_header,
+.wh_main_page_toc > .wh_main_page_toc_entry{
+    padding:0.5em;
+    padding-left:3em;
+    margin:0;
+}
+.wh_main_page_toc_accordion_entries .wh_main_page_toc_entry:last-child{
+    padding-bottom:0.7em
+}
+
+/* Expand / collapse symbols*/
+.wh_main_page_toc {
+    position:relative;
+}
+.wh_main_page_toc .wh_main_page_toc_accordion_header.expanded:before,
+.wh_main_page_toc .wh_main_page_toc_accordion_header:before{
+    display: inline-block;
+    font-weight: bold;
+    font-family:"oXygen WebHelp", serif;
+    position: absolute;
+    left: 1em;
+    cursor: pointer;
+}
+.wh_main_page_toc .wh_main_page_toc_accordion_header:before{
+    content: "q"; /* expand symbol */
+}
+.wh_main_page_toc .wh_main_page_toc_accordion_header.expanded:before{
+    content: "p"; /* collapse symbol */
+}
+
+/* Colors */
+.wh_main_page_toc{
+    border: 1px solid #c0c0c0;
+    background-color: #ffffff;
+}
+.wh_main_page_toc .wh_main_page_toc_accordion_header,
+.wh_main_page_toc > .wh_main_page_toc_entry {
+    border-bottom: 1px solid #c0c0c0;
+}
+.wh_main_page_toc>.wh_main_page_toc_entry:last-child {
+    border-bottom: none;
+}
+.wh_main_page_toc_accordion_entries{
+    background-color: #eeeeee;
+    border-bottom: 1px solid #c0c0c0;
+}
+.wh_main_page_toc .expanded {
+    background-color: #eeeeee;
+    border-bottom: 0;
+}
+.wh_main_page_toc .wh_main_page_toc_accordion_header:hover,
+.wh_main_page_toc>.wh_main_page_toc_entry:hover{
+    background-color: #eeeeee;
+}
+.wh_main_page_toc a {
+    color: #2874bd;
+}
+
+
+/**
+ * 
+ * Tiles
+ * 
+ */
+
+.wh_content_flex_container {
+    display: flex;
+    flex-direction: column;
+    justify-content: space-around;
+    align-items: stretch;
+    flex-wrap: nowrap;
+}
+
+.wh_tiles {
+    display: flex;
+    flex-direction: row;
+    justify-content: space-between;
+    align-items: stretch;
+    align-content: stretch;
+    flex-wrap: wrap;
+}
+
+.wh_tile {
+    margin: 1em;
+    padding: 1em;
+    width: 30%;
+    min-width: 300px;
+    min-height: 140px;
+}
+
+@media only screen and (max-width: 1200px) {
+    .wh_tile {
+        width: 45%;
+    }
+}
+
+
+@media only screen and (max-width: 767px) {
+    .wh_tile {
+        width: 100%;
+        min-width: 240px;
+    }
+}
+
+.wh_tile_image {
+    text-align: center;
+    padding-bottom: .5em;
+}
+
+/* Make the link from the tile the entire width */
+.wh_tile_text{
+    position:relative;
+    height:100%;
+    overflow:hidden;
+}
+
+.wh_tile_title span{
+    display: block;
+    width: 100%;
+    line-height: 1.2em;
+}
+
+.wh_tile_title a{
+    display: block;
+    width: 100%;
+}
+
+@media only screen and (max-width: 767px) {
+    .wh_tile_text:after{
+        display: none;
+    }
+}
+
+/**
+ *
+ * Remove outline border on focus
+ *
+ */
+input:focus{
+    outline:none;
+}
+
+.dd{
+    margin-bottom: .5em;
+    margin-left: 40px
+}
+
+/**
+ *
+ * Styles used for RTL pages
+ *
+ */
+html[dir='rtl'] * {
+	text-align: initial;
+}
+
+html[dir='rtl'] .title {
+    padding-right: .6em;
+}
+
+html[dir='rtl'] .wh_expand_btn {
+    right: .6em;
+}
+html[dir='rtl'] .wh_expand_btn:before,
+html[dir='rtl'] .wh-expand-btn{
+    transform: scaleX(-1);
+}
+
+html[dir='rtl'] .wh_breadcrumb li:not(:last-of-type):after {
+    content: "";
+}
+html[dir='rtl'] .wh_breadcrumb li:not(:first-of-type):before {
+    content: "/";
+    padding: 0 5px;
+}
+html[dir='rtl'] .wh_breadcrumb li:nth-child(2):before {
+    display: none;
+}
+
+ html[dir='rtl'] .wh_publication_toc ul ul{
+     padding-right: 1em;
+ }
+
+html[dir='rtl'] .wh_search_button{
+    left:0;
+    right: auto;
+    float:left;
+    border-radius: 5px 0 0 5px;
+}
+html[dir='rtl'] .wh_search_button:after{
+    left:-2px;
+}
+
+html[dir='rtl'] .wh_topic_toc {
+    border-right: 1px solid #cfe2f5;
+    border-left: none;
+    margin-right: 0;
+    padding-right: .5em;
+}
+
+html[dir='rtl'] .wh_publication_toc > ul {
+    border-left: none;
+    border-right: 2px solid #941e88;
+    margin-right: 1em;
+    padding-right: 1.5em;
+    position: relative;
+}
+
+html[dir='rtl'] .wh_publication_toc .active:before {
+    transform: scaleX(-1);
+    left: initial;
+    right: 1px;
+}
+
+html[dir='rtl'] .wh_right_tools {
+    right: auto;
+    left:0;
+}
+html[dir='rtl'] .wh_indexterms_link {
+    float: left;
+}
+html[dir='rtl'] .wh_toggle_button {
+    float:left;
+}
+html[dir='rtl'] .navprev, html[dir='rtl'] .navnext, html[dir='rtl'] .wh_print_link {
+    float:left;
+}
+
+@media only screen and (min-width: 768px){
+    html[dir='rtl'] .wh_logo_and_publication_title_container{
+        float:right;
+    }
+}
+@media only screen and (max-width: 767px) {
+    html[dir='rtl'] .wh_logo_and_publication_title {
+        float: right;
+    }
+    html[dir='rtl'] .wh_toggle_button {
+        margin-right: 0;
+        margin-left: 15px;
+    }
+}
+
+/* Render top_menu for devices larger than 767px */
+@media only screen and (min-width: 768px) {
+    html[dir='rtl'] .wh_top_menu {
+        float: left;
+    }
+
+    html[dir='rtl'] .wh_top_menu ul li {
+        float: right;
+    }
+
+    html[dir='rtl'] .wh_top_menu ul ul ul {
+        right: 100%;
+        left:auto;
+    }
+
+    /* Mark the items that have a submenu with a small double arrow. */
+    html[dir='rtl'] .wh_top_menu ul ul li.has-children > span > a{
+        padding-left: 0;
+        padding-right: 1em;
+    }
+    html[dir='rtl'] .wh_top_menu ul ul li.has-children:after{
+        left:5px;
+        right:auto;
+    }
+    html[dir='rtl'] .wh_top_menu ul li:hover > ul {
+        max-width: 210px;
+    }
+}
+
+/**
+ * WebHelp Feedback section
+ */
+#loginData .nav-tabs li.active:before{
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    width: 100%;
+    height: 4px;
+    background: #2CC185;
+    content: '';
+    -webkit-transition: -webkit-transform 0.3s;
+    transition: transform 0.3s;
+}
+
+#fbUnavailable{
+    text-align: center;
+    color: #a52a2a;
+}
+#wh_feedback
+{
+    padding: 10px;
+    margin-bottom: 20px;
+    margin-top: 20px;
+}
+#comments{
+    border-bottom:1px solid #eee;
+}
+
+.bt_reply
+{
+    color: grey;
+}
+.bt_reply:hover
+{
+    color: red;
+}
+input
+{
+    color: #000;
+}
+/**
+  * Administration page
+  */
+#signUp {
+    background-color: #fff;
+    border-style: solid;
+    border-width: 1px;
+    border-color: #ccc;
+}
+
+#loginResponse
+{
+    color: red;
+}
+
+/**
+  * Product / Version buttons
+  */
+.selectedItem
+{
+    background-color: #369;
+    color: #fff;
+}
+.selectable:hover,
+.p_selectable:hover
+{
+    background-color: #58b;
+    color: #fff;
+}
+.products, .versions
+{
+    border-style: solid;
+    border-width: 1px;
+    border-color: #ccc;
+}
+
+/**
+  * Tables
+  */
+.tbHRow
+{
+    font-weight: bold;
+    border-bottom-style: solid;
+    border-bottom-width: 1px;
+    border-bottom-color: #000;
+}
+.tbRow:nth-of-type(2n)
+{
+    background-color: #dfefff;
+}
+.tbRow:hover
+{
+    background-color: #cef4ff;
+}
+
+/**
+  * Set version
+  */
+.v_true,.v_false
+{
+    background-color: #eee;
+    border-radius: 7px;
+}
+.v_true:hover,.v_false:hover
+{
+    background-color: #9dc7dc;
+}
+.v_true
+{
+    background-color: #ddefff;
+}
+
+/* WH-1485: A wide table overflows the topic content area in the Responsive output. */
+.tablenoborder,
+.simpletable-container {
+    overflow-x: auto;
+}
+
+/*
+ * ------------------------------------------------------------------
+ *
+ * Search area
+ *
+ */
+.wh_search_input{
+    border: 0;
+}
+#searchForm{
+    margin:0;
+}
+#searchForm > div {
+    position: relative;
+    margin:auto;
+    width: 65%;
+    max-width: 1000px;
+}
+
+.wh_search_textfield {
+    display:inline-block;
+    width: 100%;
+    height:100%;
+    border:none;
+    margin: 0;
+}
+.wh_search_button{
+    display: inline-block;
+    position:absolute;
+    right:0;
+    top:0;
+    float:right;
+    width:2.8em;
+    height:100%;
+    border:none;
+    cursor: pointer;
+}
+.wh_search_button>span{
+    display: none;
+}
+.wh_search_button:after{
+    font-family: "oXygen WebHelp", serif;
+    content:"f";
+}
+
+.ui-menu-item-wrapper > .search-autocomplete-proposal-icon {
+    font-family: "oXygen WebHelp", serif;
+    display: inline-block;
+    min-width: 1.5em;
+    font-size: 0.7em;
+}
+
+/*
+ * ------------------------------------------------------------------
+ *
+ * Search page
+ *
+ */
+
+/* Render search area for devices smaller than 767px */
+@media only screen and (max-width: 767px) {
+    #searchForm > div {
+        width: 90%;
+    }
+    .wh_search_button {
+        display: none;
+    }
+}
+
+/*
+ * Search results.
+ */
+.wh_search_results {
+    margin-top:10px;
+}
+
+/** Remove left padding added by the browser for <ul> */
+.searchresult {
+    padding-left:0;
+}
+
+/* Search results header containing search expression and current displayed page */
+
+.wh_search_results_header {
+    border-bottom: solid 1px #EBEBEB;
+    margin-bottom: 10px;
+    display: flex;
+    justify-content: space-between;
+}
+
+.wh_search_results_header_docs {
+    font-size: 1.3em;
+    flex-grow: 2;
+}
+
+.wh_search_results_for {
+    font-size: 1.5em;
+}
+
+/* Current displayed page 'Page 1 of 4' */
+.wh_search_results_header_pages {
+    align-self: flex-end;
+}
+
+/** Errors */
+.errorMessage{
+    display: block;
+    position: relative;
+    background: #fff;
+    border: 1px solid #d04437;
+    color: #333;
+    padding: 10px 0 10px 50px;
+    border-radius: 5px;
+}
+.errorMessage:before{
+    position: absolute;
+    display: block;
+    font-family: 'oXygen WebHelp', serif;
+    content: 'm';
+    bottom: 0;
+    left: 0;
+    top: 0;
+    width: 40px;
+    height: 100%;
+    color: #fff;
+    background-color: #d04437;
+    text-align: center;
+    padding-top:9px;
+}
+
+/** Search result item */
+.searchresult li a.foundResult {
+    font-size: 1.3em;
+}
+.searchresult li{
+    padding: .5em 0;
+}
+
+.searchItemAdditionalData {
+    display:flex;
+    justify-content:center;
+}
+
+/* Search results breadcrumb */
+.search-breadcrumb ol {
+    display: flex;
+    list-style: none;
+    padding: 0;
+    flex-wrap: wrap;
+    align-content: space-between;
+    justify-content: flex-start;
+    font-size: .8em;
+}
+
+.search-breadcrumb li {
+    padding: 0 !important;
+    margin-bottom: .3em;
+    margin-left: -1.2em;
+
+}
+
+.search-breadcrumb li:first-child {
+    margin-left: inherit;
+}
+
+.search-breadcrumb li .title {
+    display:flex;
+    justify-content:flex-start;
+    flex-wrap: nowrap;
+}
+
+.search-breadcrumb li a {
+    color: #fff;
+    display: block;
+    background: #ddd;
+    text-decoration: none;
+    line-height: 1.6em;
+    padding: 0 .5em;
+    text-align: center;
+}
+
+.search-breadcrumb li:first-child a {
+    border-radius: .1em 0 0 .1em;
+}
+.search-breadcrumb li:first-child .title:before,
+.search-breadcrumb li:last-child .title:after {
+    border: none;
+}
+.search-breadcrumb li:last-child a {
+    border-radius: 0 .1em .1em 0;
+}
+
+.search-breadcrumb li:only-child a {
+    border-radius: .1em;
+}
+
+.search-breadcrumb li .title:before,
+.search-breadcrumb li .title:after {
+    display: inline-block;
+    content: "";
+    border-style: solid;
+    border-color: #ddd;
+    border-width: .8em;
+}
+.search-breadcrumb li .title:before {
+    border-left-color: transparent;
+}
+.search-breadcrumb li .title:after {
+    border-color: transparent;
+    border-left-color: #ddd;
+}
+
+/* Container displaying missing words and similar results */
+.missingAndSimilar {
+    flex-grow: 2;
+}
+
+#rightDiv {
+    align-self:flex-start;
+}
+/*
+ * Missing words.
+ */
+.searchresult .wh_missing_word {
+    color:#888888;
+    text-decoration:line-through;
+}
+
+.searchresult .wh_missing_words {
+    font-size: .8em;
+}
+
+
+/* Search relative path */
+.searchresult .relativePath {
+    display: none;
+}
+
+/* Similar results */
+.showSimilarPages {
+    font-size: .8em;
+    display: inline-block;
+    margin: 0;
+    cursor: pointer
+}
+.showSimilarPages:before{
+    font-family: "oXygen WebHelp", serif;
+    content: "s";
+    display: inline-block;
+    font-size: .7em;
+    padding-right: .2em
+}
+.showSimilarPages.expanded:before{
+    content: "z";
+}
+.similarResult {
+    display:none;
+    margin: 0 0 0 1.5em;
+}
+.showSimilarPages:hover {
+    color: red;
+}
+
+/*
+ * Rating of searched terms
+ */
+#star .star {
+    list-style: none;
+    margin: 0;
+    padding: 0;
+    width: 85px;
+    height: 20px;
+    left: 1px;
+    top: -5px;
+    position: relative;
+    float: right;
+    background: url('../img/starsSmall.png') repeat-x 0 -25px;
+}
+#star div {
+    padding: 0;
+    margin: 0;
+    float: right;
+    display: block;
+    width: 85px;
+    height: 20px;
+    text-decoration: none;
+    text-indent: -9000px;
+    z-index: 20;
+}
+#star .curr {
+    background: url('../img/starsSmall.png') 0 25px;
+    float: left;
+    width: 85px;
+    font-size: 1px;
+}
+
+#star div.user {
+    left: 5px;
+    position: relative;
+    float: right;
+    font-size: 13px;
+    font-family: Arial, "Lucida Grande", Verdana, "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic Pro", Meiryo, sans-serif;
+    color: #888;
+}
+
+/* Short description highlight. */
+.search-shortdescription-highlight {
+    font-weight: bold;
+}
+
+/* Center pagination widget */
+.wh-search-pagination {
+    display: flex;
+    justify-content: center;
+}
+
+/** 
+ * The list displaying search suggestions.
+ */
+.ui-autocomplete {
+    max-height: 300px;
+    overflow-y: auto;
+    /* prevent horizontal scrollbar */
+    overflow-x: hidden;
+}
+
+/* Don't add border or margin to active item in autocomplate widget */
+.ui-menu .ui-state-active,
+ui-menu-item > .ui-state-active{
+    margin: 0;
+    border: none;
+}
+
+.search-autocomplete-proposal-type-history a,
+.search-autocomplete-proposal-type-history a:hover,
+.search-autocomplete-proposal-type-history a:visited,
+.search-autocomplete-proposal-type-history a:active{
+    text-decoration: none;
+    color:#333;
+}
+
+.removed-from-history{
+    text-decoration: line-through;
+}
+
+.search-autocomplete-proposal-type-history {
+    float: right;
+}
+
+.search-autocomplete-proposal-hg {
+    font-weight: bold;
+}
+
+/* 
+ * Codeblock copy to clipboard action
+ */
+.codeblock .copyTooltip{
+    background: #fafafa url("../img/Copy.png") no-repeat 85% 50%;
+    background-size: 15px;
+    width: 68px;
+    height: 32px;
+    margin-top: -7px;
+    color: #888;
+    border:1px solid #CCCCCC;
+    right: 15px;
+    position: absolute;
+    cursor: pointer;
+    opacity: 0.5;
+    font-size: 15px;
+    border-radius:0 7px 0 0px;
+}
+
+.copyTooltip::before{
+    content: " Copy ";
+    line-height: 2em;
+    text-indent: 0.5em;
+}
+
+.codeblock .copyTooltip:hover{
+    opacity: 1;
+}
+
+.codeblock .tooltip.top .tooltip-arrow{
+    border-top-color: #4f4f4f;
+}
+
+.codeblock .tooltip-inner {
+    width: 200px;
+    padding: 0.7em 8px;
+    background-color: #4f4f4f;
+    font-size: 1.4em
+}
+
+pre{
+    margin-top: 0.5em;
+    border-radius: 7px;
+}
+.apiname{
+    font-family: Menlo,Monaco,Consolas,"Courier New",monospace;
+}
+/*
+ * Go to top button
+ */
+#go2top {
+    display: none;
+    position: fixed;
+    z-index: 999;
+    height: 44px;
+    width: 44px;
+    bottom: 37px;
+    right: 25px;
+    border-radius: 0.25em;
+    border: 1px solid #999999;
+    cursor: pointer;
+    text-align: center;
+    padding: 4px 12px;
+    font-weight: bold;
+    color: #fff;
+    background-color: #444444;
+    white-space: nowrap;
+    overflow: hidden;
+    font-size: 1.5em;
+}
+/*
+ * Edit link
+ */
+div.edit-link-container {
+    display: inline;
+}
+.edit-link {
+    float: right;
+    font-style: normal;
+}
+
+/*
+ * Hide the figure numbers, not useful in the context of a small topic.
+ */ 
+ 
+ @media screen {
+ 	.fig--title-label-number,
+ 	.fig--title-label-punctuation {
+ 		display:none;
+ 	}
+ 	
+ 	.fig--title-label:after {
+ 		content:": ";
+ 	}
+ }
+ 
+/* 
+ * WH-2114 Fix font size issues 
+ */
+html {
+    font-size: 10px;     
+}
+
+body {
+    font-size: 14px;     
+}
+
+/*
+ * Custom toggler
+ */
+.custom-toggler .navbar-toggler-icon {
+    background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(52,123,183, 1)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E");
+}
+.custom-toggler {
+    border-color: #347bb7;
+}
+#wh_toc_button {
+    margin-left: 1em;
+}
+
+@media screen {
+    .wh_topic_toc li,
+    .wh_publication_toc li,
+    .wh_main_page_toc_entry,
+    .wh_top_menu ul,
+    .wh_breadcrumb ol {
+        word-break: break-word;
+        overflow-wrap: break-word;
+        word-wrap: break-word;
+    }
+}

+ 463 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/core/webhelp.js

@@ -0,0 +1,463 @@
+define(["options", 'util', 'jquery', 'jquery.highlight'], function(options, util, $) {
+    // Add some Bootstrap classes when document is ready
+    var highlighted = false;
+
+    $(document).ready(function () {
+        var scrollPosition = $(window).scrollTop();
+        handleSideTocPosition(scrollPosition);
+        handlePageTocPosition(scrollPosition);
+
+        $(window).scroll(function() {
+            scrollPosition = handleSideTocPosition(scrollPosition);
+            scrollPosition = handlePageTocPosition(scrollPosition);
+        });
+        $(window).resize(function(){
+            $("#wh_publication_toc").removeAttr('style');
+            scrollPosition = handleSideTocPosition(scrollPosition);
+            scrollPosition = handlePageTocPosition(scrollPosition);
+        });
+
+        // Show/hide the button which expands/collapse the subtopics
+        // if there are at least two subtopics in a topic
+        var countSubtopics = $('.topic.nested1').length;
+        var countSections = $('section.section .title').length;
+        if(countSubtopics > 1 || countSections >1){
+            $('.webhelp_expand_collapse_sections').show();
+        }
+
+        // WH-231
+        // Expanding the side-toc
+        $('.dots-before').click(function(){
+            $(this).siblings('.hide-before').show();
+            $(this).hide();
+        });
+
+        $('.dots-after').click(function(){
+            $(this).siblings('.hide-after').show();
+            $(this).hide();
+        });
+
+		// WH-2209
+        var showZoomedImage = options.getBoolean("webhelp.show.full.size.image");
+        if (showZoomedImage) {
+            // Get the image and insert it inside the modal - use its "alt" text as a caption
+            $.each( $('img.image:not([usemap])'), function (e) {
+                 var parentElement = $(this).parent().get(0).tagName;
+                 if(this.naturalWidth > this.width && parentElement.toLowerCase() != 'a'){
+                     $(this).addClass('zoom');
+                 }
+             });
+            $('.zoom').click(function(){
+                $('#modal_img_large').css("display","block");
+                $("#modal-img").attr('src',$(this).attr('src') );
+                $("#caption").html( $(this).attr('alt') );
+            });
+        }
+
+        // When the user clicks on (x), close the modal
+        $(".modal .close").click(function(){
+            $(".modal").css("display","none");
+        });
+        $(document).keyup(function(e) {
+            if (e.keyCode == 27 && $('#modal_img_large').is(":visible")) { // escape key maps to keycode `27`
+               $(".modal").css("display","none");
+           }
+       });
+
+        // Navigational links and print
+        $('#topic_navigation_links .navprev>a').addClass("oxy-icon oxy-icon-arrow-left");
+        $('#topic_navigation_links .navnext>a').addClass("oxy-icon oxy-icon-arrow-right");
+        $('.wh_print_link button').addClass('oxy-icon oxy-icon-print');
+
+        // Hide sideTOC when it is empty
+        var sideToc = $('#wh_publication_toc');
+        var pageToc = $('#wh_topic_toc');
+        if (sideToc !== undefined) {
+            var sideTocChildren = sideToc.find('*');
+            if (sideTocChildren.length == 0) {
+                sideToc.css('display', 'none');
+
+                // The topic content should span on all 12 columns
+                sideToc.removeClass('col-lg-4 col-md-4 col-sm-4 col-xs-12');
+                var topicContentParent = $('.wh_topic_content').parent();
+                if (topicContentParent !== undefined && pageToc == undefined) {
+                    topicContentParent.removeClass(' col-lg-8 col-md-8 col-sm-8 col-xs-12 ');
+                    topicContentParent.addClass(' col-lg-12 col-md-12 col-sm-12 col-xs-12 ');
+                }
+            } else {
+                /* WH-1518: Check if the tooltip has content. */
+                var emptyShortDesc = sideToc.find('.topicref .wh-tooltip .shortdesc:empty');
+                if (emptyShortDesc.length > 0) {
+                    var tooltip = emptyShortDesc.closest('.wh-tooltip');
+                    tooltip.remove();
+                }
+            }
+        }
+
+        // WH-1518: Hide the Breadcrumb tooltip if it is empty.
+        var breadcrumb = $('.wh_breadcrumb');
+        var breadcrumbShortDesc = breadcrumb.find('.topicref .wh-tooltip .shortdesc:empty');
+        if (breadcrumbShortDesc.length > 0) {
+            var tooltip = breadcrumbShortDesc.closest('.wh-tooltip');
+            tooltip.remove();
+        }
+
+        var $allAccordionHeaders = $(".wh_main_page_toc .wh_main_page_toc_accordion_header");
+        var $allAccordionButtons = $(".wh_main_page_toc .wh_main_page_toc_accordion_header .header-button");
+
+        $allAccordionHeaders.click(function(event) {
+            $headerButton = $(this).find('.header-button');
+            if ($(this).hasClass('expanded')) {
+                $(this).removeClass("expanded");
+                $headerButton.attr('aria-expanded', 'false');
+            } else {
+                $allAccordionHeaders.removeClass("expanded");
+                $(this).addClass("expanded");
+                $allAccordionButtons.attr('aria-expanded', 'false');
+                $headerButton.attr('aria-expanded', 'true');
+            }
+            event.stopImmediatePropagation();
+            return false;
+
+        });
+        /* Toggle expand/collapse on enter and space */
+        $allAccordionButtons.keypress(function( event ) {
+            // Enter & Spacebar events
+            if ( event.which === 13 || event.which === 32) {
+                event.preventDefault();
+                var $parentHeader = $(this).closest('.wh_main_page_toc_accordion_header');
+                if ($parentHeader.hasClass('expanded')) {
+                    $parentHeader.removeClass("expanded");
+                    $(this).attr('aria-expanded', 'false');
+                } else {
+                    $allAccordionHeaders.removeClass("expanded");
+                    $parentHeader.addClass("expanded");
+                    $allAccordionButtons.attr('aria-expanded', 'false');
+                    $(this).attr('aria-expanded', 'true');
+                }
+            }
+            return false;
+        });
+
+        $(".wh_main_page_toc a").click(function(event) {
+            event.stopImmediatePropagation();
+        });
+
+        highlightSearchTerm();
+
+        /*
+         * Codeblock copy to clipboard action
+         */
+        $('.codeblock').mouseover(function(){
+            // WH-1806
+            var item = $('<span class="copyTooltip wh-tooltip-container" data-tooltip-position="left"/>');
+            if ( $(this).find('.copyTooltip').length == 0 ){
+                $(this).prepend(item);
+
+                $('.codeblock .copyTooltip').click(function(){
+                    var txt = $(this).closest(".codeblock").text();
+                    if(!txt || txt == ''){
+                        return;
+                    }
+                    copyTextToClipboard(txt, $(this));
+                });
+            }
+        });
+
+        $('.codeblock').mouseleave(function(){
+            $(this).find('.copyTooltip').remove();
+        });
+
+        /**
+         * @description Copy the text to the clipboard
+         */
+        function copyTextToClipboard(text, copyTooltipSpan) {
+            var textArea = document.createElement("textarea");
+            textArea.style.position = 'fixed';
+            textArea.value = text;
+            document.body.appendChild(textArea);
+            textArea.select();
+            try {
+                var successful = document.execCommand('copy');
+
+                // WH-1806
+                if (copyTooltipSpan.find('.wh-tooltip').length == 0) {
+                    var tooltipContainer = $(
+                    '<span>' +
+                        '  <span class="wh-tooltip"><p class="wh-tooltip-content">Copied to clipboard</p></span>' +
+                        '</span>'
+                    );
+                    copyTooltipSpan.prepend(tooltipContainer);
+                    copyTooltipSpan.mouseleave(function() {
+                        tooltipContainer.remove();
+                    });
+                    setTimeout(function(){ tooltipContainer.remove();}, 3000);
+                }
+            } catch (err) {
+                // Unable to copy
+                if (copyTooltipSpan.find('.wh-tooltip').length == 0) {
+                    var tooltipContainer = $(
+                        '<span>' +
+                        '  <span class="wh-tooltip"><p class="wh-tooltip-content">Oops, unable to copy</p></span>' +
+                        '</span>'
+                    );
+                    copyTooltipSpan.mouseleave(function() {
+                        tooltipContainer.remove();
+                    });
+                    copyTooltipSpan.prepend(tooltipContainer);
+                    setTimeout(function(){ tooltipContainer.remove(); }, 3000);
+                }
+                // WH-1806
+                //$('.copyTooltip').tooltip({title: 'Oops, unable to copy', trigger: "click"});
+                util.debug('Oops, unable to copy codeblock content!', err)
+            }
+            document.body.removeChild(textArea);
+        }
+
+        /**
+         * Check to see if the window is top if not then display button
+         */
+        $(window).scroll(function(){
+            if ($(this).scrollTop() > 5) {
+                $('#go2top').fadeIn('fast');
+            } else {
+                $('#go2top').fadeOut('fast');
+            }
+        });
+
+        /**
+         * Click event to scroll to top
+         */
+        $('#go2top').click(function(){
+            $('html, body').animate({scrollTop : 0},800);
+
+            return false;
+        });
+    });
+
+/**
+ * @description Handle the vertical position of the side toc
+ */
+function handleSideTocPosition(scrollPosition) {
+    var scrollPosition = scrollPosition !== undefined ? scrollPosition : 0;
+    var $sideToc = $(".wh_publication_toc");
+    var $sideTocID = $("#wh_publication_toc");
+    var $navSection = $(".wh_tools");
+    var bottomNavOffset = 0;
+    var $slideSection = $('#wh_topic_body');
+    var topOffset = 20;
+    var visibleAreaHeight = parseInt($(window).height()) - parseInt($(".wh_footer").outerHeight());
+
+    if ($sideToc.length > 0 && $slideSection.length > 0) {
+        var minVisibleOffset = $(window).scrollTop();
+        var tocHeight = parseInt($sideToc.height()) + parseInt($sideToc.css("padding-top")) + parseInt($sideToc.css("padding-bottom")) + parseInt($sideToc.css("margin-top")) + parseInt($sideToc.css("margin-bottom"));
+        var tocWidth = parseInt($sideTocID.outerWidth()) - parseInt($sideTocID.css("padding-left")) - parseInt($sideTocID.css("padding-right"));
+        var tocXNav = parseInt($slideSection.offset().left) - tocWidth;
+    
+        if (scrollPosition > $(window).scrollTop()) {
+            if ($sideToc.offset().top < $sideToc.parent().offset().top) {
+                $sideToc.css('position', 'inherit');
+            }
+        } else {
+            if (tocHeight > $(window).height()) {
+                $sideToc.css('position', 'inherit');
+            }
+        }
+
+        if ($navSection.length > 0) {
+            bottomNavOffset = parseInt($navSection.offset().top) + parseInt($navSection.height()) + parseInt($navSection.css("padding-top")) + parseInt($navSection.css("padding-bottom")) + parseInt($navSection.css("margin-top")) + parseInt($navSection.css("margin-bottom"));
+        }
+        if (bottomNavOffset > minVisibleOffset) {
+            minVisibleOffset = bottomNavOffset;
+        }
+        if (tocHeight  <=   visibleAreaHeight) {
+            var cHeight = parseInt($('.wh_content_area').height());
+            if (parseInt(minVisibleOffset - topOffset) <=  $(window).scrollTop() && parseInt($(window).width()) > 767) {
+                $('.wh_content_area').css('min-height', cHeight+'px');
+                $sideToc.css("top", topOffset + "px").css("width", tocWidth + "px").css("position", "fixed").css("z-index", "999");
+            } else {
+                $sideToc.removeAttr('style');
+            }
+        } else {
+            $sideToc.removeAttr('style');
+        }
+        scrollPosition = $(window).scrollTop();
+    }
+
+	return $(window).scrollTop();
+}
+
+/**
+ * @description Highlight the current node in the page toc section on page scroll or clicking on Topic TOC items 
+ */
+function pageTocHighlightNode(scrollPosition) {
+    var scrollPosition = scrollPosition !== undefined ? Math.round(scrollPosition) : 0;
+    var topOffset = 150;
+    var hash = location.hash != undefined ? location.hash : "";
+    var hashOffTop = $(hash).offset() != undefined ? $(hash).offset().top : 0;
+    var elemHashTop =  hash != "" ? Math.round(hashOffTop) : 0;
+    
+    if( hash.substr(1) != '' && elemHashTop >= scrollPosition && (elemHashTop <= (scrollPosition + topOffset)) ){
+        $('#wh_topic_toc a').removeClass('current_node');
+        $('#wh_topic_toc a[data-tocid = "'+ hash.substr(1) + '"]').addClass('current_node');
+    } else {
+        $.each( $('.wh_topic_content .title'), function (e) {
+            var currentId = $(this).parent().attr('id');
+            var elemTop = Math.round($(this).offset().top);
+    
+            if( elemTop >= scrollPosition && (elemTop <= (scrollPosition + topOffset)) ){
+                $('#wh_topic_toc a').removeClass('current_node');
+                $('#wh_topic_toc a[data-tocid = "'+ currentId + '"]').addClass('current_node');
+            }  
+        });
+    }
+    return $(window).scrollTop();
+}
+
+
+
+/**
+ * @description Handle the vertical position of the page toc
+ */
+function handlePageTocPosition(scrollPosition) {
+    scrollPosition = scrollPosition !== undefined ? scrollPosition : 0;
+    var $pageTOCID = $("#wh_topic_toc");
+    var $pageTOC = $(".wh_topic_toc");
+    var $navSection = $(".wh_tools");
+    var bottomNavOffset = 0;
+    var topOffset = 33;
+    var $contentBody = $(".wh_topic_content");
+
+    if ($pageTOC.length > 0) {
+        pageTocHighlightNode(scrollPosition);
+        
+        var visibleAreaHeight = parseInt($(window).height()) - parseInt($(".wh_footer").outerHeight());
+
+        var tocHeight = parseInt($pageTOC.height()) + parseInt($pageTOC.css("padding-top")) + parseInt($pageTOC.css("padding-bottom")) + parseInt($pageTOC.css("margin-top")) + parseInt($pageTOC.css("margin-bottom"));
+        var tocWidth =  parseInt($pageTOCID.outerWidth()) - parseInt($pageTOCID.css("padding-left")) - parseInt($pageTOCID.css("padding-right"));
+
+        var minVisibleOffset = $(window).scrollTop();
+        if ($navSection.length > 0) {
+            bottomNavOffset = parseInt($navSection.offset().top) + parseInt($navSection.height()) + parseInt($navSection.css("padding-top")) + parseInt($navSection.css("padding-bottom")) + parseInt($navSection.css("margin-top")) + parseInt($navSection.css("margin-bottom"));
+        }
+        if (bottomNavOffset > minVisibleOffset) {
+            minVisibleOffset = bottomNavOffset;
+        }
+
+        if ((tocHeight+topOffset) < visibleAreaHeight && (bottomNavOffset-topOffset) < $(window).scrollTop() && (tocHeight+topOffset) < $contentBody.height()) {
+            if (parseInt(minVisibleOffset - topOffset) <=  $(window).scrollTop() && parseInt($(window).width()) > 767) {
+                $pageTOC.css("top", "20px").css("position", "fixed").css("width", tocWidth + "px").css("height", tocHeight + "px");
+            } else {
+                $pageTOC.removeAttr('style');
+            }
+        } else {
+            $pageTOC.removeAttr('style');
+        }
+    }
+}
+
+    /**
+     * @description Highlight searched words
+     */
+    function highlightSearchTerm() {
+        util.debug("highlightSearchTerm()");
+        if (highlighted) {
+            return;
+        }
+        try {
+            var $body = $('.wh_topic_content');
+            var $relatedLinks = $('.wh_related_links');
+            var $childLinks = $('.wh_child_links');
+
+            // Test if highlighter library is available
+            if (typeof $body.removeHighlight != 'undefined') {
+                $body.removeHighlight();
+                $relatedLinks.removeHighlight();
+
+                var hlParameter = util.getParameter('hl');
+                if (hlParameter != undefined) {
+                    var jsonString = decodeURIComponent(String(hlParameter));
+                    util.debug("jsonString: ", jsonString);
+                    if (jsonString !== undefined && jsonString != "") {
+                        var words = jsonString.split(',');
+                        util.debug("words: ", words);
+                        for (var i = 0; i < words.length; i++) {
+                            util.debug('highlight(' + words[i] + ');');
+                            $body.highlight(words[i]);
+                            $relatedLinks.highlight(words[i]);
+                            $childLinks.highlight(words[i]);
+                        }
+                    }
+                }
+            } else {
+                // JQuery highlights library is not loaded
+            }
+        }
+        catch (e) {
+            util.debug (e);
+        }
+        highlighted = true;
+    }
+
+    /*
+     * Hide the highlight of the search results
+     */
+    $('.wh_hide_highlight').click(function(){
+        $('.highlight').addClass('wh-h');
+        $('.wh-h').toggleClass('highlight');
+        $(this).toggleClass('hl-close');
+    });
+
+    /*
+     * Show the highlight button only if 'hl' parameter is found
+     */
+    if( util.getParameter('hl')!= undefined ){
+        $('.wh_hide_highlight').show();
+    }
+
+    var isTouchEnabled = false;
+    try {
+        if (document.createEvent("TouchEvent")) {
+            isTouchEnabled = true;
+        }
+    } catch (e) {
+        util.debug(e);
+    }
+
+    /**
+     * Open the link from top_menu when the current group is expanded.
+     *
+     * Apply the events also on the dynamically generated elements.
+     */
+
+    $(document).on('click', ".wh_top_menu li", function (event) {
+        $(".wh_top_menu li").removeClass('active');
+        $(this).addClass('active');
+        $(this).parents('li').addClass('active');
+
+        event.stopImmediatePropagation();
+    });
+
+    $(document).on('click', '.wh_top_menu a', function (event) {
+        var pointerType;
+        if (typeof event.pointerType !== "undefined") {
+            pointerType = event.pointerType;
+        }
+
+        if ($(window).width() < 767 || isTouchEnabled || pointerType == "touch") {
+            var areaExpanded = $(this).closest('li');
+            var isActive = areaExpanded.hasClass('active');
+            var hasChildren = areaExpanded.hasClass('has-children');
+            if (isActive || !hasChildren) {
+                window.location = $(this).attr("href");
+                event.preventDefault();
+                event.stopImmediatePropagation();
+                return false;
+            } else {
+                event.preventDefault();
+            }
+        } else {
+            return true;
+        }
+    });
+});

+ 16 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/image-map/image-map.js

@@ -0,0 +1,16 @@
+define(["require", "jquery"], function (require, $) {
+    $(document).ready(function () {
+        // If we have image maps in our HTML document then we should load the highlight and resize libraries.
+        var imageMaps = $('img[usemap]');
+
+        if (imageMaps.length > 0) {
+            require(["jquery.maphilight", "jquery.rwdImageMaps"], function () {
+                /**
+                 * Responsive highlighted image maps
+                 */
+                $('img[usemap]').rwdImageMaps();
+                $('img[usemap]').maphilight();
+            });
+        }
+    });
+});

二进制
templates/out/webhelp-responsive/oxygen-webhelp/app/img/Copy.png


+ 22 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/img/attention.svg

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" width="18" height="18" viewBox="0 0 360 363.46154" id="svg3069" sodipodi:docname="attention.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1137" id="namedview3731" showgrid="false" inkscape:pagecheckerboard="true" inkscape:zoom="32" inkscape:cx="15.51158" inkscape:cy="7.1906137" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="svg3069" />
+  <metadata id="metadata3085">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs id="defs3073">
+    <path d="M 2.8117,-1.046 A 3,3 0 0 1 0.5,2.958 V 4.5119 A 10.5,10.5 0 0 1 2,25.3078 v 0.5583 A 15,15 0 0 0 14.7975,8.5433 15,15 0 0 0 23.4007,-11.201 l -0.4835,0.2792 A 10.5,10.5 0 0 1 4.1574,-1.8229 Z m 3.4148,8.871 a 10,10 0 0 1 -12.453,0 9.5,9.5 0 0 0 -2.1756,2.7417 13.5,13.5 0 0 0 16.8042,0 A 10,10 0 0 0 6.2265,7.825 Z" transform="matrix(10,0,0,-10,260,260)" id="p" inkscape:connector-curvature="0" />
+  </defs>
+  <path d="M 362.16844,347.51702 190.17947,49.596728 c -1.75746,-3.03011 -4.96938,-4.84817 -8.4237,-4.84817 -3.45432,0 -6.66624,1.87866 -8.4237,4.84817 L 1.3430973,347.51702 c -1.75746306,3.03011 -1.75746306,6.72684 0,9.69635 1.757463,3.0301 4.9693783,4.84817 8.4237022,4.84817 H 353.74474 c 3.45432,0 6.66624,-1.87867 8.4237,-4.84817 1.75746,-3.03011 1.75746,-6.72685 0,-9.69635 z" id="sign_border" inkscape:connector-curvature="0" style="stroke-width:0.60602176;fill:#e42828" />
+  <polygon points="555.875,491.5 43.875,491.5 299.875,48.2 " transform="matrix(0.60602174,0,0,0.60354589,0.08560217,45.980748)" id="polygon7" style="overflow:visible;fill:#ffffff;fill-opacity:1;stroke:none" />
+  <path d="m 204.77982,308.1445 a 22.963441,22.963444 0 1 1 -45.92688,0 22.963441,22.963444 0 1 1 45.92688,0 z" id="path1995" style="fill:#e42828;fill-opacity:1;stroke:none;stroke-width:0.38651761;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.4" inkscape:connector-curvature="0" />
+  <path d="m 181.81637,146.92427 c -12.5128,0 -22.58471,10.28596 -22.58471,23.06312 l 6.67774,80.79068 c 1.27536,10.45059 2.3646,16.37162 6.67774,19.15614 2.81625,1.28307 5.93579,2.01329 9.22923,2.01329 3.27756,0 6.38373,-0.72195 9.18937,-1.99336 4.33728,-2.77665 5.43938,-8.70211 6.71761,-19.17607 l 6.67774,-80.79068 c 0,-12.77716 -10.07192,-23.06312 -22.58472,-23.06312 z" id="rect1997" style="fill:#e42828;fill-opacity:1;stroke:none;stroke-width:0.53683031;stroke-linecap:square;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" inkscape:connector-curvature="0" />
+</svg>

+ 80 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/img/caution.svg

@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="Caution_v1" data-name="Caution v1" width="18" height="18" viewBox="0 0 18 18" version="1.1" sodipodi:docname="caution.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata id="metadata3969">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1137" id="namedview3967" showgrid="false" showguides="true" inkscape:guide-bbox="true" inkscape:zoom="72.3" inkscape:cx="8.6538584" inkscape:cy="8.9776194" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="layer1">
+    <sodipodi:guide position="8.9886455,20.793733" orientation="1,0" id="guide5337" inkscape:locked="false" />
+  </sodipodi:namedview>
+  <defs id="defs3961">
+    <linearGradient id="linearGradient2301" osb:paint="solid">
+      <stop style="stop-color:#dc3b0d;stop-opacity:1" offset="0" id="stop2299" />
+    </linearGradient>
+    <style id="style3952">
+      .cls-1 {
+        fill: red;
+        filter: url(#filter);
+      }
+
+      .cls-1, .cls-2 {
+        fill-rule: evenodd;
+      }
+
+      .cls-2 {
+        fill: #fff;
+      }
+    </style>
+    <filter id="filter" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958" mode="normal" />
+    </filter>
+    <filter id="filter-0" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954-3" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956-7" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958-8" mode="normal" />
+    </filter>
+    <filter id="filter-0-3" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954-3-3" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956-7-6" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958-8-2" mode="normal" />
+    </filter>
+    <filter id="filter-9" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954-1" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956-9" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958-84" mode="normal" />
+    </filter>
+  </defs>
+  <g inkscape:groupmode="layer" id="layer3" inkscape:label="BGR">
+    <path style="opacity:1;fill:#ad3b0c;fill-opacity:0;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="m 14.097827,18.698565 -3.955668,-3.95574 3.637427,-3.637506 3.637427,-3.6375057 -0.525267,-0.5258132 -0.525267,-0.5258132 0.85048,-0.8504805 0.850481,-0.8504805 4.481316,4.4813157 4.481315,4.4813154 -4.488288,4.488225 -4.488288,4.488224 z" id="path5457" inkscape:connector-curvature="0" />
+    <path style="opacity:1;fill:#ad3b0c;fill-opacity:0;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="m 14.097827,18.698565 -3.955668,-3.95574 3.637427,-3.637506 3.637427,-3.6375057 -0.525267,-0.5258132 -0.525267,-0.5258131 0.85048,-0.8504805 0.850481,-0.8504805 4.481316,4.4813157 4.481315,4.4813153 -4.488288,4.488225 -4.488288,4.488224 z" id="path2305" inkscape:connector-curvature="0" />
+    <path style="opacity:1;fill:#ad3b0c;fill-opacity:0;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="m 14.097827,18.698565 -3.955668,-3.95574 3.637427,-3.637506 3.637427,-3.6375057 -0.525267,-0.5258132 -0.525267,-0.5258131 0.85048,-0.8504805 0.850481,-0.8504805 4.481316,4.4813157 4.481315,4.4813153 -4.488288,4.488225 -4.488288,4.488224 z" id="path2307" inkscape:connector-curvature="0" />
+    <path style="opacity:1;fill:#ad3b0c;fill-opacity:0;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="m 14.097827,18.698565 -3.955668,-3.95574 3.637427,-3.637506 3.637427,-3.6375057 -0.525267,-0.5258132 -0.525267,-0.5258131 0.85048,-0.8504805 0.850481,-0.8504805 4.481316,4.4813157 4.481315,4.4813153 -4.488288,4.488225 -4.488288,4.488224 z" id="path2309" inkscape:connector-curvature="0" />
+    <path style="opacity:1;fill:#ad3b0c;fill-opacity:0;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="m 14.097827,18.698565 -3.955668,-3.95574 3.637427,-3.637506 3.637427,-3.6375057 -0.525267,-0.5258132 -0.525267,-0.5258131 0.85048,-0.8504805 0.850481,-0.8504805 4.481316,4.4813157 4.481315,4.4813153 -4.488288,4.488225 -4.488288,4.488224 z" id="path2311" inkscape:connector-curvature="0" />
+    <path style="opacity:1;fill:#ad3b0c;fill-opacity:0;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="m 14.097827,18.698565 -3.955668,-3.95574 3.637427,-3.637506 3.637427,-3.6375057 -0.525267,-0.5258132 -0.525267,-0.5258131 0.85048,-0.8504805 0.850481,-0.8504805 4.481316,4.4813157 4.481315,4.4813153 -4.488288,4.488225 -4.488288,4.488224 z" id="path2313" inkscape:connector-curvature="0" />
+    <path style="opacity:1;fill:#ad3b0c;fill-opacity:0;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="m 14.097827,18.698565 -3.955668,-3.95574 3.637427,-3.637506 3.637427,-3.6375057 -0.525267,-0.5258132 -0.525267,-0.5258131 0.85048,-0.8504805 0.850481,-0.8504805 4.481316,4.4813157 4.481315,4.4813153 -4.488288,4.488225 -4.488288,4.488224 z" id="path2315" inkscape:connector-curvature="0" />
+    <path style="opacity:1;fill:#ad3b0c;fill-opacity:0;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="m 14.097827,18.698565 -3.955668,-3.95574 3.637427,-3.637506 3.637427,-3.6375057 -0.525267,-0.5258132 -0.525267,-0.5258131 0.85048,-0.8504805 0.850481,-0.8504805 4.481316,4.4813157 4.481315,4.4813153 -4.488288,4.488225 -4.488288,4.488224 z" id="path2317" inkscape:connector-curvature="0" />
+    <path style="opacity:1;fill:#ad3b0c;fill-opacity:0;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="m 14.097827,18.698565 -3.955668,-3.95574 3.637427,-3.637506 3.637427,-3.6375057 -0.525267,-0.5258132 -0.525267,-0.5258131 0.85048,-0.8504805 0.850481,-0.8504805 4.481316,4.4813157 4.481315,4.4813153 -4.488288,4.488225 -4.488288,4.488224 z" id="path2319" inkscape:connector-curvature="0" />
+    <path style="opacity:1;fill:#ad3b0c;fill-opacity:0;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="m 14.097827,18.698565 -3.955668,-3.95574 3.637427,-3.637506 3.637427,-3.6375057 -0.525267,-0.5258132 -0.525267,-0.5258131 0.85048,-0.8504805 0.850481,-0.8504805 4.481316,4.4813157 4.481315,4.4813153 -4.488288,4.488225 -4.488288,4.488224 z" id="path2321" inkscape:connector-curvature="0" />
+    <path style="opacity:1;fill:#ad3b0c;fill-opacity:0;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="m 14.097827,18.698565 -3.955668,-3.95574 3.637427,-3.637506 3.637427,-3.6375057 -0.525267,-0.5258132 -0.525267,-0.5258131 0.85048,-0.8504805 0.850481,-0.8504805 4.481316,4.4813157 4.481315,4.4813153 -4.488288,4.488225 -4.488288,4.488224 z" id="path2323" inkscape:connector-curvature="0" />
+    <path style="opacity:1;fill:#ad3b0c;fill-opacity:0;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="m 14.097827,18.698565 -3.955668,-3.95574 3.637427,-3.637506 3.637427,-3.6375057 -0.525267,-0.5258132 -0.525267,-0.5258131 0.85048,-0.8504805 0.850481,-0.8504805 4.481316,4.4813157 4.481315,4.4813153 -4.488288,4.488225 -4.488288,4.488224 z" id="path2325" inkscape:connector-curvature="0" />
+    <path style="opacity:1;fill:#ad3b0c;fill-opacity:0;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="m 14.097827,18.698565 -3.955668,-3.95574 3.637427,-3.637506 3.637427,-3.6375057 -0.525267,-0.5258132 -0.525267,-0.5258131 0.85048,-0.8504805 0.850481,-0.8504805 4.481316,4.4813157 4.481315,4.4813153 -4.488288,4.488225 -4.488288,4.488224 z" id="path2327" inkscape:connector-curvature="0" />
+    <path style="opacity:1;fill:#ad3b0c;fill-opacity:0;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="m 14.097827,18.698565 -3.955668,-3.95574 3.637427,-3.637506 3.637427,-3.6375057 -0.525267,-0.5258132 -0.525267,-0.5258131 0.85048,-0.8504805 0.850481,-0.8504805 4.481316,4.4813157 4.481315,4.4813153 -4.488288,4.488225 -4.488288,4.488224 z" id="path2329" inkscape:connector-curvature="0" />
+    <path style="opacity:1;fill:#ad3b0d;fill-opacity:1;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="M 4.4812747,13.518662 0,9.037323 4.4882227,4.5491 8.9764449,0.060879 13.457783,4.542217 17.939122,9.023556 13.450836,13.511778 8.9625499,18 Z" id="path2353" inkscape:connector-curvature="0" />
+  </g>
+  <g inkscape:groupmode="layer" id="layer1" inkscape:label="Inner" style="display:inline">
+    <path style="display:inline;opacity:1;fill:#f5bc15;fill-opacity:1;stroke:none;stroke-width:0.02766252;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="M 4.9833433,13.016586 1,9.0331698 l 3.9902943,-3.990294 3.9902942,-3.990294 3.9902945,3.990294 3.990294,3.990294 -3.983343,3.9834162 C 10.786996,15.207463 8.9882353,17 8.9805885,17 8.9729385,17 7.1741813,15.207463 4.9833433,13.016586 Z" id="path2367" inkscape:connector-curvature="0" />
+  </g>
+  <g inkscape:groupmode="layer" id="layer2" inkscape:label="!" style="display:inline">
+    <g id="g5415" style="display:inline;fill:#ad3b0d;fill-opacity:1;stroke:none" transform="translate(-0.0113546,-0.54190563)">
+      <path sodipodi:nodetypes="sss" inkscape:connector-curvature="0" style="fill:#ad3b0d;fill-opacity:1;stroke:none;stroke-width:0.01914182;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.4" id="path1995" d="m 10.148592,13.323916 c 10e-4,1.51732 -2.2734683,1.51732 -2.2744743,0 -0.00101,-1.51732 2.2734683,-1.51732 2.2744743,0 z" />
+      <path sodipodi:nodetypes="ccccsccccc" inkscape:connector-curvature="0" style="fill:#ad3b0d;fill-opacity:1;stroke:none;stroke-width:0.02658588;stroke-linecap:square;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" id="rect1997" d="m 9.0113548,5.3500905 c -0.6196823,0 -1.1184814,0.5093999 -1.1184814,1.1421736 l 0.3307071,4.0010619 c 0.06316,0.517553 0.117104,0.810785 0.330707,0.948685 0.139472,0.06354 0.293963,0.09971 0.4570673,0.09971 0.162317,0 0.316146,-0.03575 0.455092,-0.09872 0.214799,-0.13751 0.269379,-0.430961 0.332682,-0.949672 L 10.129836,6.4922671 c 0,-0.6327737 -0.4988002,-1.1421736 -1.1184812,-1.1421736 z" />
+    </g>
+  </g>
+</svg>

+ 22 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/img/danger.svg

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" width="18" height="18" viewBox="0 0 360 363.46154" id="svg3069" sodipodi:docname="danger.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1137" id="namedview3731" showgrid="false" inkscape:pagecheckerboard="true" inkscape:zoom="256" inkscape:cx="8.7003721" inkscape:cy="3.2687646" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="svg3069" />
+  <metadata id="metadata3085">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs id="defs3073">
+    <path d="M 2.8117,-1.046 A 3,3 0 0 1 0.5,2.958 V 4.5119 A 10.5,10.5 0 0 1 2,25.3078 v 0.5583 A 15,15 0 0 0 14.7975,8.5433 15,15 0 0 0 23.4007,-11.201 l -0.4835,0.2792 A 10.5,10.5 0 0 1 4.1574,-1.8229 Z m 3.4148,8.871 a 10,10 0 0 1 -12.453,0 9.5,9.5 0 0 0 -2.1756,2.7417 13.5,13.5 0 0 0 16.8042,0 A 10,10 0 0 0 6.2265,7.825 Z" transform="matrix(10,0,0,-10,260,260)" id="p" inkscape:connector-curvature="0" />
+  </defs>
+  <path d="M 362.16844,347.51702 190.17947,49.596728 c -1.75746,-3.03011 -4.96938,-4.84817 -8.4237,-4.84817 -3.45432,0 -6.66624,1.87866 -8.4237,4.84817 L 1.3430973,347.51702 c -1.75746306,3.03011 -1.75746306,6.72684 0,9.69635 1.757463,3.0301 4.9693783,4.84817 8.4237022,4.84817 H 353.74474 c 3.45432,0 6.66624,-1.87867 8.4237,-4.84817 1.75746,-3.03011 1.75746,-6.72685 0,-9.69635 z" id="sign_border" inkscape:connector-curvature="0" style="stroke-width:0.60602176" />
+  <polygon points="555.875,491.5 43.875,491.5 299.875,48.2 " transform="matrix(0.60602174,0,0,0.60354589,0.08560217,45.980748)" id="polygon7" style="overflow:visible;fill:#f6bd16;fill-opacity:1;stroke:none" />
+  <path d="m 204.77982,308.1445 a 22.963441,22.963444 0 1 1 -45.92688,0 22.963441,22.963444 0 1 1 45.92688,0 z" id="path1995" style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.38651761;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.4" inkscape:connector-curvature="0" />
+  <path d="m 181.81637,146.92427 c -12.5128,0 -22.58471,10.28596 -22.58471,23.06312 l 6.67774,80.79068 c 1.27536,10.45059 2.3646,16.37162 6.67774,19.15614 2.81625,1.28307 5.93579,2.01329 9.22923,2.01329 3.27756,0 6.38373,-0.72195 9.18937,-1.99336 4.33728,-2.77665 5.43938,-8.70211 6.71761,-19.17607 l 6.67774,-80.79068 c 0,-12.77716 -10.07192,-23.06312 -22.58472,-23.06312 z" id="rect1997" style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.53683031;stroke-linecap:square;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" inkscape:connector-curvature="0" />
+</svg>

二进制
templates/out/webhelp-responsive/oxygen-webhelp/app/img/dot.png


+ 51 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/img/fastpath.svg

@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="18" height="18" viewBox="0 0 4.7624999 4.7625001" version="1.1" id="svg8802" sodipodi:docname="fastpath.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <defs id="defs8796">
+    <style id="style9359">
+      .cls-1 {
+        fill: #0078a0;
+        fill-rule: evenodd;
+      }
+    </style>
+    <style id="style1984">
+      .cls-1 {
+        fill: #0078a0;
+        fill-rule: evenodd;
+      }
+    </style>
+    <style id="style2010">
+      .cls-1 {
+        fill: #ff0f0f;
+      }
+    </style>
+    <style id="style2038">
+      .cls-1 {
+        fill: #0078a0;
+        fill-rule: evenodd;
+      }
+    </style>
+    <style id="style2064">
+      .cls-1 {
+        fill: #0078a0;
+        fill-rule: evenodd;
+      }
+    </style>
+  </defs>
+  <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="22.4" inkscape:cx="0.15587116" inkscape:cy="11.30322" inkscape:document-units="px" inkscape:current-layer="layer2" showgrid="false" units="px" inkscape:window-width="1920" inkscape:window-height="1137" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" />
+  <metadata id="metadata8799">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g inkscape:groupmode="layer" id="layer2" inkscape:label="Circle">
+    <circle transform="translate(0,-292.23748)" id="circle2014" r="2.1166666" cy="294.61874" cx="2.3812499" class="cls-1" style="fill:#ffffff;stroke-width:0.26458332" />
+    <path id="path2068" d="M 4.0648041,4.0652606 A 2.3812646,2.3812646 0 0 1 0.69718747,0.69764387 2.3812646,2.3812646 0 0 1 4.0648041,4.0652606 Z M 0.88424787,0.88470427 a 2.1166667,2.1166667 0 1 0 2.99349583,0 2.1230167,2.1230167 0 0 0 -2.99349583,0 z M 3.7229625,1.2403044 C 3.7094687,1.5374315 3.59755,2.1277169 2.8614791,2.880721 A 2.7379083,2.7379083 0 0 1 2.4852416,3.2037773 L 2.3545375,3.7509356 v 0.021167 L 1.888077,4.1763856 C 1.865852,4.1964936 1.845744,4.1745356 1.846538,4.1531026 L 1.6584187,3.6130877 A 0.61965417,0.61965417 0 0 1 1.319752,3.5763106 L 1.1191979,3.7797752 a 0.03995208,0.03995208 0 0 1 -0.063765,-0.00291 l -0.015081,-0.016404 -0.016404,-0.015081 a 0.03995208,0.03995208 0 0 1 -0.00291,-0.063765 L 1.224502,3.4810606 A 0.61965417,0.61965417 0 0 1 1.187725,3.142394 L 0.64797497,2.9548044 c -0.021167,0 -0.043392,-0.019315 -0.023283,-0.04154 L 1.028975,2.4481273 H 1.050142 L 1.5970354,2.3158356 A 2.73685,2.73685 0 0 1 1.9200916,1.9398627 C 2.6733604,1.2037919 3.2636458,1.0918731 3.5605083,1.0783794 l 0.1484312,-0.00688 a 0.01322917,0.01322917 0 0 1 0.011377,0.00582 v 0 c 0,0 0,0.00185 0,0.00212 0,2.646e-4 0.00185,0 0.00212,0 v 0 a 0.01322917,0.01322917 0 0 1 0.00582,0.011377 z M 2.6932041,2.0957023 a 0.27701875,0.27701875 0 1 0 0,0.3918479 0.27701875,0.27701875 0 0 0 0,-0.3918479 z" class="cls-1" inkscape:connector-curvature="0" style="fill:#0078a0;fill-rule:evenodd;stroke-width:0.26458332" />
+  </g>
+  <g inkscape:label="Rocket" inkscape:groupmode="layer" id="layer1" transform="translate(0,-292.23748)" />
+</svg>

+ 66 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/img/important.svg

@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="Caution_v1" data-name="Caution v1" width="18" height="18" viewBox="0 0 18 18" version="1.1" sodipodi:docname="important.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata id="metadata3969">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1137" id="namedview3967" showgrid="false" showguides="true" inkscape:guide-bbox="true" inkscape:zoom="18.075" inkscape:cx="-1.5836638" inkscape:cy="13.35498" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="layer3">
+    <sodipodi:guide position="8.9886455,20.793733" orientation="1,0" id="guide5337" inkscape:locked="false" />
+  </sodipodi:namedview>
+  <defs id="defs3961">
+    <linearGradient id="linearGradient2301" osb:paint="solid">
+      <stop style="stop-color:#dc3b0d;stop-opacity:1" offset="0" id="stop2299" />
+    </linearGradient>
+    <style id="style3952">
+      .cls-1 {
+        fill: red;
+        filter: url(#filter);
+      }
+
+      .cls-1, .cls-2 {
+        fill-rule: evenodd;
+      }
+
+      .cls-2 {
+        fill: #fff;
+      }
+    </style>
+    <filter id="filter" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958" mode="normal" />
+    </filter>
+    <filter id="filter-0" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954-3" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956-7" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958-8" mode="normal" />
+    </filter>
+    <filter id="filter-0-3" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954-3-3" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956-7-6" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958-8-2" mode="normal" />
+    </filter>
+    <filter id="filter-9" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954-1" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956-9" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958-84" mode="normal" />
+    </filter>
+  </defs>
+  <g inkscape:groupmode="layer" id="layer3" inkscape:label="BGR">
+    <circle style="opacity:1;fill:#ad3b0d;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" id="path2945" cx="9" cy="9" r="9" />
+  </g>
+  <g inkscape:groupmode="layer" id="layer1" inkscape:label="Inner" style="display:inline">
+    <circle style="opacity:1;fill:#f6bd16;fill-opacity:1;stroke:none;stroke-width:0.8888889;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" id="path2945-9" cx="9" cy="9" r="8" />
+  </g>
+  <g inkscape:groupmode="layer" id="layer2" inkscape:label="!" style="display:inline">
+    <g id="g5415" style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none" transform="translate(-0.0113546,-0.54190563)">
+      <path sodipodi:nodetypes="sss" inkscape:connector-curvature="0" style="fill:#ad3b0d;fill-opacity:1;stroke:none;stroke-width:0.01914182;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.4" id="path1995" d="m 10.148592,13.923818 c 10e-4,1.51732 -2.2734683,1.51732 -2.2744743,0 -0.00101,-1.51732 2.2734683,-1.51732 2.2744743,0 z" />
+      <path sodipodi:nodetypes="ccccsccccc" inkscape:connector-curvature="0" style="fill:#ad3b0d;fill-opacity:1;stroke:none;stroke-width:0.02658588;stroke-linecap:square;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" id="rect1997" d="m 9.0113548,3.9499929 c -0.6196823,0 -1.1184814,0.5093999 -1.1184814,1.1421736 l 0.3307071,6.0010615 c 0.06316,0.517553 0.117104,0.810785 0.330707,0.948685 0.139472,0.06354 0.293963,0.09971 0.4570673,0.09971 0.162317,0 0.316146,-0.03575 0.455092,-0.09872 0.214799,-0.13751 0.269379,-0.430961 0.332682,-0.949672 L 10.129836,5.0921695 c 0,-0.6327737 -0.4988002,-1.1421736 -1.1184812,-1.1421736 z" />
+    </g>
+  </g>
+</svg>

二进制
templates/out/webhelp-responsive/oxygen-webhelp/app/img/link-icon.png


+ 81 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/img/note.svg

@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="Note4" width="18" height="18" viewBox="0 0 18 18" version="1.1" sodipodi:docname="note.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata id="metadata891">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1137" id="namedview889" showgrid="false" inkscape:zoom="22.627417" inkscape:cx="-0.65283349" inkscape:cy="7.0464131" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="layer1" />
+  <defs id="defs877">
+    <inkscape:perspective sodipodi:type="inkscape:persp3d" inkscape:vp_x="0 : 9 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="18 : 9 : 1" inkscape:persp3d-origin="9 : 6 : 1" id="perspective5188" />
+    <style id="style854">
+      .cls-1 {
+        fill: #e99915;
+        filter: url(#filter);
+      }
+
+      .cls-1, .cls-2, .cls-3, .cls-4, .cls-5, .cls-6 {
+        fill-rule: evenodd;
+      }
+
+      .cls-2 {
+        fill: #fff;
+      }
+
+      .cls-3 {
+        fill: #cbcbcb;
+        opacity: 0.67;
+        filter: url(#filter-2);
+      }
+
+      .cls-4 {
+        fill: red;
+        filter: url(#filter-3);
+      }
+
+      .cls-5 {
+        fill: #c07737;
+      }
+
+      .cls-6 {
+        fill: #b04a1a;
+      }
+    </style>
+    <filter id="filter" x="2" y="2" width="16" height="16" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="2" y="2" width="16" height="16" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiI+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIC5jbHMtMSB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQiIHgxPSI4IiB5MT0iMTYiIHgyPSI4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2JkNzUzNSIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNkNjg2M2YiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IGNsYXNzPSJjbHMtMSIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+Cjwvc3ZnPgo=" id="feImage856" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite858" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend860" mode="normal" />
+    </filter>
+    <filter id="filter-2" x="3" y="3" width="14" height="14" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="3" y="3" width="14" height="14" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCI+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIC5jbHMtMSB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQiIHgxPSI3IiB5MT0iMTQiIHgyPSI3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2ZmOTUwMCIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmZmU2MDAiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IGNsYXNzPSJjbHMtMSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjE0Ii8+Cjwvc3ZnPgo=" id="feImage863" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite865" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend867" mode="normal" />
+    </filter>
+    <filter id="filter-3" x="13" y="13" width="5" height="5" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="13" y="13" width="5" height="5" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNSIgaGVpZ2h0PSI1IiB2aWV3Qm94PSIwIDAgNSA1Ij4KICA8ZGVmcz4KICAgIDxzdHlsZT4KICAgICAgLmNscy0xIHsKICAgICAgICBmaWxsOiB1cmwoI2xpbmVhci1ncmFkaWVudCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhci1ncmFkaWVudCIgeTE9IjAuMzI3IiB4Mj0iNSIgeTI9IjQuNjczIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2I2NzMwNCIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmOGJlNGMiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IGNsYXNzPSJjbHMtMSIgd2lkdGg9IjUiIGhlaWdodD0iNSIvPgo8L3N2Zz4K" id="feImage870" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite872" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend874" mode="normal" />
+    </filter>
+    <filter id="filter-0" x="2" y="2" width="16" height="16" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="2" y="2" width="16" height="16" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiI+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIC5jbHMtMSB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQiIHgxPSI4IiB5MT0iMTYiIHgyPSI4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2JkNzUzNSIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNkNjg2M2YiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IGNsYXNzPSJjbHMtMSIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+Cjwvc3ZnPgo=" id="feImage856-7" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite858-2" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend860-2" mode="normal" />
+    </filter>
+  </defs>
+  <g inkscape:groupmode="layer" id="layer5" inkscape:label="BGR 1" style="display:inline">
+    <path style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.03272379;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="M 1,9.4999998 V 1 H 9.5000002 18 V 6.6349468 12.269893 L 15.117375,15.134947 12.23475,18 H 6.6173753 1 Z" id="path5818" inkscape:connector-curvature="0" />
+  </g>
+  <g inkscape:groupmode="layer" id="layer1" inkscape:label="BGR" style="display:inline">
+    <path style="opacity:1;fill:#f6bd16;fill-opacity:1;stroke:none;stroke-width:0.03304477;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="M 2,9.5000001 V 2 H 9.4999995 17 v 5.2038559 5.2038561 l -2.379484,2.296006 -2.379486,2.296003 -5.1205146,1.3e-4 L 2,17 Z" id="path5820" inkscape:connector-curvature="0" />
+  </g>
+  <g inkscape:groupmode="layer" id="layer3" inkscape:label="Lines">
+    <path id="Rectangle_2_copy" data-name="Rectangle 2 copy" class="cls-6" d="m 5,8 h 8 V 9 H 5 Z m 0,3 h 4 v 1 H 5 Z M 5,5 h 8 V 6 H 5 Z" inkscape:connector-curvature="0" style="display:inline;fill:#000000;fill-rule:evenodd" />
+  </g>
+  <g inkscape:groupmode="layer" id="layer4" inkscape:label="PagePeel">
+    <path style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" d="m 11.264,11.621094 v 6 h 1 v -4.998047 l 5.328126,0.0098 0.002,-1 -5.330079,-0.0098 v -0.002 h -0.669921 z" id="rect858" inkscape:connector-curvature="0" />
+  </g>
+</svg>

+ 62 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/img/notice.svg

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="Caution_v1" data-name="Caution v1" width="18" height="18" viewBox="0 0 18 18" version="1.1" sodipodi:docname="notice.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata id="metadata3969">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1137" id="namedview3967" showgrid="false" showguides="true" inkscape:guide-bbox="true" inkscape:zoom="25.56191" inkscape:cx="3.6753212" inkscape:cy="6.6786931" inkscape:window-x="1912" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="layer3">
+    <sodipodi:guide position="8.9886455,20.793733" orientation="1,0" id="guide5337" inkscape:locked="false" />
+  </sodipodi:namedview>
+  <defs id="defs3961">
+    <linearGradient id="linearGradient2301" osb:paint="solid">
+      <stop style="stop-color:#dc3b0d;stop-opacity:1" offset="0" id="stop2299" />
+    </linearGradient>
+    <style id="style3952">
+      .cls-1 {
+        fill: red;
+        filter: url(#filter);
+      }
+
+      .cls-1, .cls-2 {
+        fill-rule: evenodd;
+      }
+
+      .cls-2 {
+        fill: #fff;
+      }
+    </style>
+    <filter id="filter" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958" mode="normal" />
+    </filter>
+    <filter id="filter-0" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954-3" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956-7" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958-8" mode="normal" />
+    </filter>
+    <filter id="filter-0-3" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954-3-3" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956-7-6" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958-8-2" mode="normal" />
+    </filter>
+    <filter id="filter-9" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954-1" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956-9" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958-84" mode="normal" />
+    </filter>
+  </defs>
+  <g inkscape:groupmode="layer" id="layer3" inkscape:label="BGR">
+    <path d="M 17.934723,15.865366 9.4171741,1.1112183 C 9.3301375,0.96115568 9.171071,0.87111842 8.9999999,0.87111842 c -0.1710711,0 -0.3301376,0.0930384 -0.4171737,0.24009988 L 0.065277,15.865366 c -0.087036,0.150062 -0.087036,0.333139 0,0.4802 0.087036,0.150062 0.2461026,0.2401 0.4171739,0.2401 H 17.517549 c 0.171071,0 0.330138,-0.09304 0.417174,-0.2401 0.08704,-0.150063 0.08704,-0.333139 0,-0.4802 z" id="sign_border" inkscape:connector-curvature="0" style="stroke-width:0.03001251;fill:#005f8e;fill-opacity:1" />
+    <polygon points="43.875,491.5 299.875,48.2 555.875,491.5 " transform="matrix(0.03001251,0,0,0.02988989,0.0030011,0.93214114)" id="polygon7" style="overflow:visible;fill:#9dd7ed;fill-opacity:1;stroke:none" />
+    <path d="m 10.140239,13.915489 a 1.1372373,1.1372377 0 1 1 -2.2744745,0 1.1372373,1.1372374 0 1 1 2.2744745,0 z" id="path1995-6" style="fill:#005f8e;fill-opacity:1;stroke:none;stroke-width:0.01914182;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.4" inkscape:connector-curvature="0" />
+    <path d="m 9.0030011,5.9312489 c -0.6196816,0 -1.1184809,0.5094 -1.1184809,1.1421736 l 0.3307071,4.0010615 c 0.063161,0.517553 0.117104,0.810785 0.3307071,0.948685 0.1394715,0.06354 0.293963,0.09971 0.4570667,0.09971 0.1623172,0 0.3161466,-0.03575 0.455093,-0.09872 0.2147979,-0.13751 0.2693779,-0.430961 0.3326809,-0.949672 l 0.330708,-4.0010645 c 0,-0.6327736 -0.4988,-1.1421736 -1.1184819,-1.1421736 z" id="rect1997-6" style="fill:#005f8e;fill-opacity:1;stroke:#000000;stroke-width:0.02658588;stroke-linecap:square;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" inkscape:connector-curvature="0" />
+  </g>
+  <g inkscape:groupmode="layer" id="layer1" inkscape:label="Inner" style="display:inline" />
+  <g inkscape:groupmode="layer" id="layer2" inkscape:label="!" style="display:inline" />
+</svg>

+ 24 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/img/remember.svg

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="18" height="18" viewBox="0 0 18 18" version="1.1" id="svg896" sodipodi:docname="remember.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata id="metadata900">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1137" id="namedview898" showgrid="false" inkscape:zoom="37.083822" inkscape:cx="7.4132939" inkscape:cy="6.6743397" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="svg896" />
+  <defs id="defs892">
+    <style id="style890">
+      .cls-1 {
+        fill: #b8b29e;
+        fill-rule: evenodd;
+      }
+    </style>
+  </defs>
+  <path class="cls-1" d="m 15.378268,16.813 h -5.149 c 0,0.031 0,0.062 0,0.093 a 1.0940001,1.0940001 0 1 1 -2.1880001,0 c 0,-0.031 0,-0.062 0,-0.092 h -5.09 a 2.008,2.008 0 0 1 -1.951,-2.04 2.041,2.041 0 0 1 1.731,-2.011 l 0.465,-5.5830001 a 5.913,5.913 0 0 1 5.387,-5.889 0.769,0.769 0 1 1 1.167,0 5.914,5.914 0 0 1 5.3320001,5.885 l 0.465,5.5840001 a 2.039,2.039 0 0 1 -0.169,4.053 z M 9.6682679,0.79299993 a 0.5,0.5 0 1 0 -0.653,0.47499997 h 0.094 0.06 c 0.05,0 0.1,0 0.15,0 a 0.5,0.5 0 0 0 0.349,-0.47499997 z" id="path894" style="fill:#f6bd16;fill-rule:evenodd" inkscape:connector-curvature="0" />
+  <path d="m 10.274474,12.777088 a 1.1372371,1.1372372 0 1 1 -2.2744738,0 1.1372371,1.1372372 0 1 1 2.2744738,0 z" id="path1995" style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.01914182;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.4" inkscape:connector-curvature="0" />
+  <path d="m 9.1372361,4.7928486 c -0.6196809,0 -1.1184799,0.5093999 -1.1184799,1.1421736 l 0.330707,4.0010623 c 0.06316,0.5175525 0.117104,0.8107845 0.330707,0.9486845 0.139471,0.06354 0.293963,0.09971 0.4570659,0.09971 0.162318,0 0.316147,-0.03575 0.455093,-0.09872 0.2147989,-0.137511 0.269379,-0.430962 0.332682,-0.9496715 L 10.255718,5.9350222 c 0,-0.6327737 -0.4987999,-1.1421736 -1.1184819,-1.1421736 z" id="rect1997" style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.02658588;stroke-linecap:square;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" inkscape:connector-curvature="0" />
+</svg>

+ 22 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/img/restriction.svg

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="Restriction" width="18" height="18" viewBox="0 0 18 18" version="1.1" sodipodi:docname="restriction.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata id="metadata9698">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1137" id="namedview9696" showgrid="false" inkscape:zoom="37.083822" inkscape:cx="12.074993" inkscape:cy="7.4237165" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="Restriction" />
+  <defs id="defs9692">
+    <style id="style9690">
+      .cls-1 {
+        fill: #6f4a02;
+        fill-rule: evenodd;
+      }
+    </style>
+  </defs>
+  <path id="Shape" class="cls-1" d="M9,18a9,9,0,1,1,9-9A9,9,0,0,1,9,18Zm0-2A6.973,6.973,0,0,0,14.591,4.823L4.823,14.591A6.942,6.942,0,0,0,9,16ZM2,9a6.941,6.941,0,0,0,1.412,4.177l9.768-9.768A6.973,6.973,0,0,0,2,9Z" style="fill:#e42828" />
+</svg>

二进制
templates/out/webhelp-responsive/oxygen-webhelp/app/img/star.png


二进制
templates/out/webhelp-responsive/oxygen-webhelp/app/img/starsSmall.png


+ 66 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/img/tip.svg

@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="Caution_v1" data-name="Caution v1" width="18" height="18" viewBox="0 0 18 18" version="1.1" sodipodi:docname="tip.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata id="metadata3969">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1137" id="namedview3967" showgrid="false" showguides="true" inkscape:guide-bbox="true" inkscape:zoom="51.12382" inkscape:cx="7.2844208" inkscape:cy="8.4106427" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="layer3">
+    <sodipodi:guide position="8.9886455,20.793733" orientation="1,0" id="guide5337" inkscape:locked="false" />
+  </sodipodi:namedview>
+  <defs id="defs3961">
+    <linearGradient id="linearGradient2301" osb:paint="solid">
+      <stop style="stop-color:#dc3b0d;stop-opacity:1" offset="0" id="stop2299" />
+    </linearGradient>
+    <style id="style3952">
+      .cls-1 {
+        fill: red;
+        filter: url(#filter);
+      }
+
+      .cls-1, .cls-2 {
+        fill-rule: evenodd;
+      }
+
+      .cls-2 {
+        fill: #fff;
+      }
+    </style>
+    <filter id="filter" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958" mode="normal" />
+    </filter>
+    <filter id="filter-0" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954-3" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956-7" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958-8" mode="normal" />
+    </filter>
+    <filter id="filter-0-3" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954-3-3" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956-7-6" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958-8-2" mode="normal" />
+    </filter>
+    <filter id="filter-9" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954-1" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956-9" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958-84" mode="normal" />
+    </filter>
+  </defs>
+  <g inkscape:groupmode="layer" id="layer3" inkscape:label="BGR">
+    <circle style="opacity:1;fill:#005f8e;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" id="path2945" cx="9" cy="9" r="9" />
+  </g>
+  <g inkscape:groupmode="layer" id="layer1" inkscape:label="Inner" style="display:inline">
+    <circle style="opacity:1;fill:#0078a0;fill-opacity:1;stroke:none;stroke-width:0.8888889;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" id="path2945-9" cx="9" cy="9" r="8" />
+  </g>
+  <g inkscape:groupmode="layer" id="layer2" inkscape:label="!" style="display:inline">
+    <g id="g5415" style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none" transform="translate(-0.0113546,-0.54190563)">
+      <path sodipodi:nodetypes="sss" inkscape:connector-curvature="0" style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.01914182;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.4" id="path1995" d="m 10.948829,5.1239156 c 10e-4,1.51732 -2.2734681,1.51732 -2.2744741,0 -0.00101,-1.51732 2.2734681,-1.51732 2.2744741,0 z" />
+      <path inkscape:connector-curvature="0" class="cls-4" d="M 6.0053546,9.392719 A 24.583,24.583 0 0 1 9.690355,7.6977191 c 0.868,-0.159 0.709,0.9919999 0.709,0.9919999 l -0.957001,2.599995 c 0,0 -0.6379994,1.828 -0.337,2.073 0.284001,0.23 1.488,-0.762 1.488,-0.762 l 0.213,0.443 c 0,0 -2.2999994,1.8 -3.0479994,1.746 -1.409,-0.1 -0.075,-3.581 0.071,-5.460995 0.031,-0.394 -0.656,0.071 -0.656,0.071 l -1.068,0.634 z" id="path7961" />
+    </g>
+  </g>
+</svg>

+ 63 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/img/troubleshooting.svg

@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="Caution_v1" data-name="Caution v1" width="18" height="18" viewBox="0 0 18 18" version="1.1" sodipodi:docname="troubleshooting.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata id="metadata3969">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1137" id="namedview3967" showgrid="false" showguides="true" inkscape:guide-bbox="true" inkscape:zoom="36.15" inkscape:cx="0.4622281" inkscape:cy="8.2727778" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="layer2">
+    <sodipodi:guide position="8.9886455,20.793733" orientation="1,0" id="guide5337" inkscape:locked="false" />
+  </sodipodi:namedview>
+  <defs id="defs3961">
+    <linearGradient id="linearGradient2301" osb:paint="solid">
+      <stop style="stop-color:#dc3b0d;stop-opacity:1" offset="0" id="stop2299" />
+    </linearGradient>
+    <style id="style3952">
+      .cls-1 {
+        fill: red;
+        filter: url(#filter);
+      }
+
+      .cls-1, .cls-2 {
+        fill-rule: evenodd;
+      }
+
+      .cls-2 {
+        fill: #fff;
+      }
+    </style>
+    <filter id="filter" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958" mode="normal" />
+    </filter>
+    <filter id="filter-0" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954-3" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956-7" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958-8" mode="normal" />
+    </filter>
+    <filter id="filter-0-3" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954-3-3" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956-7-6" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958-8-2" mode="normal" />
+    </filter>
+    <filter id="filter-9" x="0.46900001" y="0.46900001" width="19.063" height="19.063" filterUnits="userSpaceOnUse">
+      <feImage preserveAspectRatio="none" x="0.46875" y="0.46875" width="19.063" height="19.063" result="image" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkuMDYzIiBoZWlnaHQ9IjE5LjA2MyIgdmlld0JveD0iMCAwIDE5LjA2MyAxOS4wNjMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IHVybCgjbGluZWFyLWdyYWRpZW50KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS41MzEiIHkxPSIxOS4wNjMiIHgyPSI5LjUzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZDc1MzUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZDY4NjNmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIxOS4wNjMiIGhlaWdodD0iMTkuMDYzIi8+Cjwvc3ZnPgo=" id="feImage3954-1" />
+      <feComposite result="composite" operator="in" in2="SourceGraphic" id="feComposite3956-9" />
+      <feBlend result="blend" in2="SourceGraphic" id="feBlend3958-84" mode="normal" />
+    </filter>
+  </defs>
+  <g inkscape:groupmode="layer" id="layer3" inkscape:label="BGR">
+    <circle style="opacity:1;fill:#005f8e;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" id="path2945" cx="9" cy="9" r="9" />
+  </g>
+  <g inkscape:groupmode="layer" id="layer1" inkscape:label="Inner" style="display:inline">
+    <circle style="opacity:1;fill:#0078a0;fill-opacity:1;stroke:none;stroke-width:0.8888889;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" id="path2945-9" cx="9" cy="9" r="8" />
+  </g>
+  <g inkscape:groupmode="layer" id="layer2" inkscape:label="!" style="display:inline">
+    <path inkscape:connector-curvature="0" class="cls-3" d="m 10.267356,4.4048517 0.6,2.239 2.239,0.6 2.029,-2.03 a 3.968,3.968 0 0 1 -4.878,4.8510003 l -3.9269998,3.922 a 2,2 0 1 1 -2.8279995,-2.828 L 7.4293563,7.2348517 a 3.967,3.967 0 0 1 4.8769997,-4.871 z" id="path10316" style="fill:#ffffff" />
+  </g>
+</svg>

+ 22 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/img/warning.svg

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" width="18" height="18" viewBox="0 0 360 363.46154" id="svg3069" sodipodi:docname="danger.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1137" id="namedview3731" showgrid="false" inkscape:pagecheckerboard="true" inkscape:zoom="256" inkscape:cx="8.7003721" inkscape:cy="3.2687646" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="svg3069" />
+  <metadata id="metadata3085">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs id="defs3073">
+    <path d="M 2.8117,-1.046 A 3,3 0 0 1 0.5,2.958 V 4.5119 A 10.5,10.5 0 0 1 2,25.3078 v 0.5583 A 15,15 0 0 0 14.7975,8.5433 15,15 0 0 0 23.4007,-11.201 l -0.4835,0.2792 A 10.5,10.5 0 0 1 4.1574,-1.8229 Z m 3.4148,8.871 a 10,10 0 0 1 -12.453,0 9.5,9.5 0 0 0 -2.1756,2.7417 13.5,13.5 0 0 0 16.8042,0 A 10,10 0 0 0 6.2265,7.825 Z" transform="matrix(10,0,0,-10,260,260)" id="p" inkscape:connector-curvature="0" />
+  </defs>
+  <path d="M 362.16844,347.51702 190.17947,49.596728 c -1.75746,-3.03011 -4.96938,-4.84817 -8.4237,-4.84817 -3.45432,0 -6.66624,1.87866 -8.4237,4.84817 L 1.3430973,347.51702 c -1.75746306,3.03011 -1.75746306,6.72684 0,9.69635 1.757463,3.0301 4.9693783,4.84817 8.4237022,4.84817 H 353.74474 c 3.45432,0 6.66624,-1.87867 8.4237,-4.84817 1.75746,-3.03011 1.75746,-6.72685 0,-9.69635 z" id="sign_border" inkscape:connector-curvature="0" style="stroke-width:0.60602176" />
+  <polygon points="555.875,491.5 43.875,491.5 299.875,48.2 " transform="matrix(0.60602174,0,0,0.60354589,0.08560217,45.980748)" id="polygon7" style="overflow:visible;fill:#f6bd16;fill-opacity:1;stroke:none" />
+  <path d="m 204.77982,308.1445 a 22.963441,22.963444 0 1 1 -45.92688,0 22.963441,22.963444 0 1 1 45.92688,0 z" id="path1995" style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.38651761;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.4" inkscape:connector-curvature="0" />
+  <path d="m 181.81637,146.92427 c -12.5128,0 -22.58471,10.28596 -22.58471,23.06312 l 6.67774,80.79068 c 1.27536,10.45059 2.3646,16.37162 6.67774,19.15614 2.81625,1.28307 5.93579,2.01329 9.22923,2.01329 3.27756,0 6.38373,-0.72195 9.18937,-1.99336 4.33728,-2.77665 5.43938,-8.70211 6.71761,-19.17607 l 6.67774,-80.79068 c 0,-12.77716 -10.07192,-23.06312 -22.58472,-23.06312 z" id="rect1997" style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.53683031;stroke-linecap:square;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" inkscape:connector-curvature="0" />
+</svg>

+ 11 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/indexterms-page.css

@@ -0,0 +1,11 @@
+/* Topic content styles. */
+@import "topic/topic.css?buildId=2020100301";
+
+/* Default styles. */
+@import "core/webhelp.css?buildId=2020100301";
+
+/* Top Menu and Side TOC components styles. */
+@import "nav-links/nav-links.css?buildId=2020100301";
+
+/* Expand/collapse topic sections. */
+@import "core/expand.css?buildId=2020100301";

+ 11 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/indexterms-page.js

@@ -0,0 +1,11 @@
+/**
+ * Load the libraries for the Index Terms page.
+ */
+define(["require", "config"], function() {
+    require([
+        'polyfill',
+        'menu',
+        'expand',
+        'template-module-loader'
+    ]);
+});

+ 90 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/indexterms/indexterms.css

@@ -0,0 +1,90 @@
+/** 
+ * Styles for Index page.
+ */
+
+/* Indexterms page */
+.wh-letters {
+    display: flex;
+    flex-direction: row;
+    justify-content: center;
+    align-items: stretch;
+    align-content: stretch;
+    flex-wrap: wrap;
+    background-color: #f2f2f2;
+}
+
+ul.wh-letters li{
+    line-height: 2.5em;
+    font-size:1.5em;
+    vertical-align:middle;
+    max-width: 3em;
+    padding-left:0;
+
+}
+
+.wh-letters li a{
+padding: 0 .3em;
+}
+
+.wh-letters li::after{
+    content: " | ";
+    color: #a9a9a9
+}
+
+.wh-letters li:last-child::after{
+    content: "";
+}
+
+
+.wh_index_terms li, .wh_index_terms ul{
+    padding-left: 10px;
+    list-style: none;
+}
+.wh_index_terms li.wh_term{
+    line-height: 1.5em;
+}
+a.wh_term_target{
+    padding-left:5px;
+    vertical-align: super;
+    font-size: .8em;
+}
+.wh_index_terms .wh_first_letter{
+    text-indent: 0;
+    list-style: none;
+    font-size: 2em;
+    font-weight: bold;
+    display: inline-block;
+    border-bottom: 1px solid;
+    width: 100%;
+    margin: .4em 0 .2em;
+}
+
+/**
+ * Index page. Set multi-column layout.
+ */
+.wh_term_group > ul {
+    column-count: auto;
+    column-width: 20em;
+    column-gap: 1em;
+    column-rule: none;
+    
+}
+
+/**
+ * Try to avoid column break between an index group and its first child.
+ */
+.wh_term .wh_term{
+    break-inside:avoid;
+}
+@media screen{
+	@-moz-document url-prefix() {
+	  .wh_term .wh_term{
+	        display: table
+	    }
+	}
+}
+
+.wh_term > ul > .wh_term:first-child {
+    break-before: avoid-column;
+    -webkit-column-break-before: avoid;
+}

+ 8 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/jquery-private/jquery-private.js

@@ -0,0 +1,8 @@
+/**
+ * MAPPING MODULES TO USE NOCONFLICT
+ *
+ * @see http://requirejs.org/docs/jquery.html#noconflictmap
+ */
+define(['jquery'], function (jq) {
+    return jq.noConflict( true );
+});

+ 4 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/jquery-private/jquery.bootpag.amd.js

@@ -0,0 +1,4 @@
+define(["jquery", "jquery.bootpag"], function($, bootpag) {
+    $.fn.bootpag = bootpag;
+    return bootpag;
+});

+ 12 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/jquery-private/jquery.highlight.amd.js

@@ -0,0 +1,12 @@
+define(["jquery", "jquery.highlight"], function($, highlight) {
+    /**
+     * In this context: ($ === jQuery) = false;
+     *
+     * '$' is a local jQuery used in noConflict mode.
+     * The non-AMD modules are not compatible with te 'noconflict' support of requireJS.
+     * @see: http://requirejs.org/docs/jquery.html#noconflictmap
+     */
+    $.fn.highlight = jQuery.fn.highlight;
+    $.fn.removeHighlight = jQuery.fn.removeHighlight;
+    return highlight;
+});

+ 4 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/jquery-private/jquery.rwdImageMaps.amd.js

@@ -0,0 +1,4 @@
+define(["jquery", "jquery.rwdImageMaps"], function($, rwdImageMaps) {
+    $.fn.rwdImageMaps = rwdImageMaps;
+    return rwdImageMaps;
+});

+ 21 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/localization/localization.js

@@ -0,0 +1,21 @@
+/*
+
+    Oxygen WebHelp Plugin
+    Copyright (c) 1998-2020 Syncro Soft SRL, Romania.  All rights reserved.
+
+    */
+define(["strings"], function (strings) {
+
+    return {
+        /**
+         * get translated messages
+         */
+        getLocalization: function (localizationKey) {
+            var toReturn = localizationKey;
+            if ((localizationKey in strings)) {
+                toReturn = strings[localizationKey];
+            }
+            return toReturn;
+        }
+    };
+});

+ 224 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/localization/strings.js

@@ -0,0 +1,224 @@
+define(function() {var localization = new Array();
+localization["index.terms.page.title"]="Index Terms";
+localization["toggle.menu"]="Toggle menu";
+localization["label.cleditorControls"]="Insert your comment. Press Alt+S to submit your comment or Alt+` to discard it.";
+localization["label.closeDialog"]="Close dialog";
+localization["index.term"]="index term";
+localization["index.terms.alphabet"]="Index terms alphabet";
+localization["index.terms.for.letter"]="Index terms group for letter";
+localization["expand"]="Expand";
+localization["collapse"]="Collapse";
+localization["search.query"]="Search query";
+localization["jump.to.results"]="Jump to search results";
+localization["jump.to.index"]="Jump to index list";
+localization["jump.to.content"]="Jump to main content";
+localization["next.page"]="Next";
+localization["prev.page"]="Previous";
+localization["on_this_page"]="On this page";
+localization["more"]="more";
+localization["expandSections"]="Expand sections";
+localization["collapseSections"]="Collapse sections";
+localization["toggleHighlights"]="Toggle search highlights";
+localization["Similar results"]="Similar results";
+localization["Output generated by"]="Generated by";
+localization["Page"]="Page";
+localization["Results for:"]="document(s) found for";
+localization["no_results_only_stop_words1"]="No results were found because the search query only contains <span>stop words</span> that are excluded by the search engine.";
+localization["no_results_only_stop_words2"]="Stop words are very common words or adjectives that hinder search efforts. Words such as: 'of ' , 'the', 'by', etc.";
+localization["missing"]="Missing";
+localization["label.home"]="Home";
+localization["webhelp.search"]="Search";
+localization["webhelp.index"]="Index";
+localization["webhelp.index.aria.label"]="Go to index terms page";
+localization["label.shareFrom"]="If you already have an user account for any of the following products, you can use that account to login.";
+localization["label.unconfirmedUsers"]="Unconfirmed Users";
+localization["label.cleanUsers"]="Delete Pending Users";
+localization["label.tc.userName"]="User";
+localization["label.tc.name"]="Name";
+localization["label.tc.email"]="E-mail";
+localization["label.invertSel"]="Invert Selection";
+localization["label.invalidPosts"]="Invalid pages for posts";
+localization["label.cleanComments"]="Delete Orphaned Comments";
+localization["label.cleanCommentsTooltip"]="Delete comments associated with topics that are no longer available";
+localization["label.cleanUsersTooltip"]="Delete unconfirmed users older than 7 days";
+localization["label.viewAllPostsTooltip"]="Select the appropriate product / version for which you need comments to be displayed";
+localization["label.exportTooltip"]="Select the appropriate product / version for which you need comments to be exported to XML format";
+localization["label.setVersionTooltip"]="Comments will be available only for the product versions starting from the selected one.";
+localization["label.fbUnavailable"]="The feedback system is disabled! Please contact the WebHelp system administrator.";
+localization["label.removeInst"]="The folder containing the installation scripts must be removed after the installation is complete!";
+localization["label.plsRemoveInstall"]="Please contact system administrator to finalize the webhelp installation by removing the installation folder!";
+localization["configInvalid"]="Invalid config File - run install first!";
+localization["webhelp.content"]="Content";
+localization["oldFrames"]="With Frames";
+localization["IndexFilterPlaceholder"]="Filter Index Entries";
+localization["SearchResults"]="Search Results";
+localization["Loading, please wait ..."]="Loading, please wait ...";
+localization["Search no results"]="Your search returned no results for";
+localization["There is no page containing all the search terms."]="There is no page containing all the search terms.";
+localization["Partial results:"]="Partial results:";
+localization["Search string can't be void"]="Search string can't be void";
+localization["Search string must have at least two characters"]="Search string must have at least two characters";
+localization["Only first 10 words will be processed."]="Only first 10 words will be processed.";
+localization["Your browser is not supported. Use of Mozilla Firefox is recommended."]="Your browser is not supported. Use of Mozilla Firefox is recommended.";
+localization["linkToThis"]="Link to this page";
+localization["ExpandAll"]="Expand All Topics";
+localization["printThisPage"]="Print this page";
+localization["CollapseAll"]="Collapse All Topics";
+localization["label.confirmOk"]="Completed successful!";
+localization["label.currentPwd"]="Current Password";
+localization["label.Unsaved"]="Any unsaved data will be lost if you leave this page.";
+localization["label.captcha"]="Enter the captcha code seen below:";
+localization["label.welcome"]="Welcome";
+localization["label.close"]="Close";
+localization["label.cancel"]="Cancel";
+localization["label.logAdmin"]="Log in as 'Moderator' user";
+localization["label.guest"]="Guest";
+localization["label.admin"]="Admin";
+localization["label.administrator"]="Administrator";
+localization["label.admin.title"]="Administrative Page";
+localization["label.moderator"]="Moderator";
+localization["label.user"]="User";
+localization["label.userProfile"]="User Profile";
+localization["noDataAvailable"]="No data available";
+localization["label.yourName"]="Your Name";
+localization["label.yourEmail"]="Your email address";
+localization["label.IwantEmail"]="I want to receive an email when";
+localization["label.commentPage"]="a comment is left on a page that I commented on";
+localization["label.commentTopic"]="a comment is left on any topic in the Help system";
+localization["label.commentMy"]="a reply is left to one of my comments";
+localization["label.apply"]="Apply Changes";
+localization["label.newPwd"]="New Password";
+localization["label.reNewPwd"]="Retype New Password";
+localization["label.chPwd"]="Change Password";
+localization["label.comments"]="Comments";
+localization["label.login"]="Log in";
+localization["label.signUp"]="Sign Up";
+localization["label.edit"]="Edit";
+localization["label.editAccount"]="Edit Account";
+localization["label.logOff"]="Log Off";
+localization["label.approveAll"]="Approve All";
+localization["label.yes"]="Yes";
+localization["label.no"]="No";
+localization["label.addNewCmt"]="Add New Comment";
+localization["label.plsWait"]="Please Wait ...";
+localization["label.plsWaitChProfile"]="Loading User Profile ...";
+localization["label.plsWaitRecover"]="Recovering Password ...";
+localization["label.plsWaitSignUp"]="Signing you up ...";
+localization["label.plsWaitUpProfile"]="Updating Your Profile ...";
+localization["label.plsWaitUpPaswd"]="Updating your Password ...";
+localization["label.plsWaitCmts"]="Loading Comments ...";
+localization["label.plsWaitAuth"]="Verifying User ...";
+localization["label.insertCmt"]="Insert Comment";
+localization["label.submit"]="Submit";
+localization["label.userName"]="User name";
+localization["label.pswd"]="Password";
+localization["label.lostPswd"]="Lost Password";
+localization["label.signUp_userName"]="Choose a user name";
+localization["label.signUp_email"]="Your Email Address";
+localization["label.signUp_name"]="Your Name";
+localization["label.signUp_password"]="Password";
+localization["label.signUp_rPassword"]="Retype Password";
+localization["label.recoverPwd"]="Reset Password";
+localization["label.recoverEmail"]="Your Email Address";
+localization["label.recoverUser"]="Your User Name";
+localization["label.bt_recover"]="Reset Password";
+localization["label.question"]="Are you sure you want to delete this message?";
+localization["label.adminPanel"]="Admin Panel";
+localization["label.changesNotApplied"]="Changes were not applied!";
+localization["label.search.user"]="Search User Information";
+localization["label.editUser"]="Edit User";
+localization["label.updateUser"]="Update User";
+localization["label.created"]="Created";
+localization["label.validated"]="Validated";
+localization["label.suspendend"]="Suspended";
+localization["label.back"]="Back";
+localization["label.setVersion"]="Set Version";
+localization["label.export"]="Export Comments";
+localization["label.confirm.bt"]="Confirm";
+localization["label.selection"]="Selected Product / Version";
+localization["label.version"]="Comments Version";
+localization["label.versionInfo"]="The comments are visible starting from version:";
+localization["label.rememberme"]="Remember me on this computer";
+localization["label.viewAllPosts"]="View All Posts";
+localization["label.allPosts"]="All Posts";
+localization["label.forView"]="Select Product and Version to View Comments";
+localization["label.forExport"]="Select Product and Version to Export Comments";
+localization["label.product"]="Product";
+localization["label.confirmGo"]="OK";
+localization["delete"]="Delete";
+localization["checkUser.1"]="Anonymous user does not validate please contact system administrator!";
+localization["checkUser.2"]="";
+localization["checkUser.3"]="";
+localization["checkUser.4"]="";
+localization["checkUser.loginError"]="Log in failed!";
+localization["info.noComments"]="There are no comments!";
+localization["invalidCode"]="Please insert the specified captcha code";
+localization["pwd.invalid"]="Invalid password";
+localization["pwd.repeat"]="Please insert the same password!";
+localization["pwd.empty"]="Please insert a minimum 5 characters password!";
+localization["checkEmail-signUp"]="Please check your e-mail and validate your registration!";
+localization["checkEmail-recover"]="Please check your e-mail for recovered password!";
+localization["recoveryConfirmation"]="Your new password has been generated, please check your e-mail";
+localization["editPost"]="Edit Comment";
+localization["newPost"]="Insert Comment";
+localization["admin"]="Administrator";
+localization["moderator"]="Moderator";
+localization["user"]="User";
+localization["created"]="Created";
+localization["validated"]="Validated";
+localization["suspended"]="Suspended";
+localization["label.adminComments"]="Comments";
+localization["label.adminUsers"]="Users";
+localization["logAdmin"]="Please authenticate with moderator credentials!";
+localization["approveAllConfirmation"]="Approve all comments?";
+localization["signUp.confirmOk"]="Confirmation successful!";
+localization["signUp.invalidPswd"]="Invalid password supplied !";
+localization["signUp.confirmUsr"]="User creation was successful confirmed!";
+localization["signUp.invalidUsr"]="Invalid user specified to be confirmed!";
+localization["signUp.userConfirmed"]="Your user has been already confirmed!";
+localization["signUp.err.0"]="User creation has succeeded!";
+localization["signUp.err.1"]="Password is too short!";
+localization["signUp.err.2"]="Password contain invalid characters!";
+localization["signUp.err.3"]="Invalid e-mail address!";
+localization["signUp.err.4"]="User name is already taken!";
+localization["signUp.err.5"]="Email is already in the database!";
+localization["signUp.err.6"]="Please insert a valid user name!";
+localization["signUp.err.6.info"]="User name must contain only alphanumeric characters without spaces and it must be at least 2 character long";
+localization["signUp.err.9"]="Invalid Sign Up data!";
+localization["signUp.err.10"]="User can not be created!";
+localization["pwd.tooShort"]="Password must be at least 5 characters long!";
+localization["admin.name.label"]="Name";
+localization["admin.status.label"]="Status";
+localization["admin.email.label"]="E-Mail";
+localization["admin.userName.label"]="User Name";
+localization["admin.level.label"]="Level";
+localization["admin.company.label"]="Company";
+localization["admin.date.label"]="Date";
+localization["admin.notifyPage.label"]="Page Notification";
+localization["admin.notifyAll.label"]="WebHelp Notification";
+localization["admin.notifyReply.label"]="Reply Notification";
+localization["comment.moderate.info"]="Post waiting for approval.";
+localization["inst.deploymentSett"]="Deployment Settings";
+localization["inst.overConfig"]="Overwrite Configuration File ?";
+localization["inst.title"]="WebHelp Installer";
+localization["inst.url"]="Deployment URL";
+localization["inst.email"]="WebHelp E-mail from";
+localization["inst.errors"]="Send Errors to System Administrator";
+localization["inst.adminEmail"]="System Administrator E-mail";
+localization["inst.isModerated"]="Comment system is moderated?";
+localization["inst.sesLife"]="Client Session lifetime (sec)";
+localization["inst.isAnonymous"]="Is Anonymous post enable?";
+localization["inst.dbSettings"]="Database Settings";
+localization["inst.dbtype"]="Database Server Type";
+localization["inst.dbCreate"]="Create new database ?";
+localization["inst.dbHost"]="Database Host Name";
+localization["inst.dbName"]="Database Name";
+localization["inst.dbUser"]="Database User Name";
+localization["inst.dbPass"]="Database User Password";
+localization["inst.initSett"]="Initial Settings";
+localization["inst.adminPass"]="Administrator Password";
+localization["inst.adminPass2"]="Confirm Administrator Password";
+localization["inst.start"]="Start Installation";
+localization["inst.nextStep"]="Next Step";
+localization["excluded.terms"]="Excluded terms:";
+return localization;});

+ 11 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/main-page.css

@@ -0,0 +1,11 @@
+/* Changes and comments, as side-notes. */
+@import "side-notes/p-side-notes.css?buildId=2020100301";
+
+/* Topic content styles. */
+@import "topic/topic.css?buildId=2020100301";
+
+/* Default styles. */
+@import "core/webhelp.css?buildId=2020100301";
+
+/* Top Menu and Publication(Side) TOC components styles. */
+@import "nav-links/nav-links.css?buildId=2020100301";

+ 15 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/main-page.js

@@ -0,0 +1,15 @@
+/**
+ * Load the Main Page (index.html) libraries.
+ */
+define(["require", "config"], function() {
+    require([
+        'polyfill',
+        'menu',
+        'searchAutocomplete',
+        'webhelp',
+        'search-init',
+        'context-help',
+        'template-module-loader',
+        'bootstrap'
+    ]);
+});

+ 1 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/nav-links/json/nav-links.js

@@ -0,0 +1 @@
+define({"title":"<span class=\"title\">wibo</span>","topics" : [{"title":"kzp","shortdesc":"<p class=\"shortdesc\">dokument zawierający graficzne elementy oraz podpisy dedykowanych stanowisk         odpowiedzialnych za dany element. </p>","href":"kzp.html","attributes": {"data-id":"kzp",},"menu": {"hasChildren":false,},"tocID":"kzp-d61e11","topics":[]},{"title":"kwp","shortdesc":"<p class=\"shortdesc\">zawiera parametry tabelaryczne, akceptowane w formie podpisu przez zdefiniowane         stanowiska dla danego elementu.</p>","href":"kwp.html","attributes": {"data-id":"kwp",},"menu": {"hasChildren":false,},"tocID":"kwp-d61e23","topics":[]}]});

+ 361 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/nav-links/menu-loader.js

@@ -0,0 +1,361 @@
+define(["options", "jquery", "nav"], function (options, $, navConfig) {
+
+    /**
+     * The path of the output directory, relative to the current HTML file.
+     * @type {String}
+     */
+    var path2root = null;
+
+    // Register the hover handler for the Menu
+    $(document).ready ( function() {
+        // Add mouse listener and set the wai-aria attributes to the new value, depending on the expanded/collapsed state
+        $(document).on("mouseenter", ".wh_top_menu li", menuItemHovered);
+
+        // Mouse exit
+        $(document).on("mouseleave", ".wh_top_menu li", function () {
+            var stateNode = $(this).children(".topicref");
+            var currentState = stateNode.attr(navConfig.attrs.state);
+            if (currentState !== navConfig.states.leaf) {
+                $(this).attr("aria-expanded", "false");
+                stateNode.attr(navConfig.attrs.state, navConfig.states.collapsed);
+            }
+        });
+    });
+
+    /**
+     * Retrieves the path of the output directory, relative to the current HTML file.
+     *
+     * @returns {*} the path of the output directory, relative to the current HTML file.
+     */
+    function getPathToRoot() {
+        if (path2root == null) {
+            path2root = $('meta[name="wh-path2root"]').attr("content");
+            if (path2root == null || path2root == undefined) {
+                path2root = "";
+            }
+        }
+        return path2root;
+    };
+
+    /**
+     * Loads the JS file containing the list of child nodes for the current topic node.
+     * Builds the list of child topics element nodes based on the retrieved data.
+     *
+     * @param topicRefSpan The topicref 'span' element of the current node from TOC / Menu.
+     */
+    function retrieveChildNodes(topicRefSpan) {
+        var tocId = $(topicRefSpan).attr(navConfig.attrs.tocID);
+        if (tocId != null) {
+            var jsonHref = navConfig.jsonBaseDir + "/" + tocId;
+            require(
+                [jsonHref],
+                function(data) {
+                    if (data != null) {
+                        var topics = data.topics;
+                        var topicLi = topicRefSpan.closest('li');
+                        var topicsLiList = createTopicsList(topics);
+
+                        var loadingDotsUl = topicLi.children("ul.loading");
+                        // Remove the loading dots from the menu.
+                        loadingDotsUl.find('li').remove();
+                        loadingDotsUl.removeClass('loading');
+
+                        topicsLiList.forEach(function(topicLi){
+                            loadingDotsUl.append(topicLi);
+                        });
+
+                        topicRefSpan.attr(navConfig.attrs.state, navConfig.states.expanded);
+                    } else {
+                        topicRefSpan.attr(navConfig.attrs.state, navConfig.states.leaf);
+                    }
+                }
+            );
+        }
+    }
+
+    /**
+     * Creates the <code>ul</code> element containing the child topic nodes of the current topic.
+     *
+     * @param topics The array of containing info about the child topics.
+     *
+     * @returns {*|jQuery|HTMLElement} the <code>li</code> elements representing the child topic nodes of the current topic.
+     */
+    function createTopicsList(topics) {
+        var topicsArray = [];
+        topics.forEach(function(topic) {
+            if (!topic.menu.isHidden) {
+                var topicLi = createTopicLi(topic);
+                topicsArray.push(topicLi);
+            }
+        });
+        return topicsArray;
+    };
+
+    /**
+     * Creates the <code>li</code> element containing a topic node.
+     *
+     * @param topic The info about the topic node.
+     *
+     * @returns {*|jQuery|HTMLElement} the <code>li</code> element containing a topic node.
+     */
+    function createTopicLi(topic) {
+        var li = $("<li role=\"menuitem\">");
+
+        if (topic.menu.hasChildren) {
+            li.addClass("has-children");
+            li.attr("aria-haspopup", "true");
+            li.attr("aria-expanded", "false");
+        }
+        var topicImage = topic.menu.image;
+        if (topicImage != null && topicImage.href != null) {
+            var menuImageSpan = createMenuImageSpan(topic);
+            li.append(menuImageSpan);
+        }
+
+        // .topicref span
+        var topicRefSpan = createTopicRefSpan(topic);
+        // append the topicref node in parent
+        li.append(topicRefSpan);
+
+        return li;
+    };
+
+    /**
+     * Creates the <span> element containing the image icon for the current node in the menu.
+     * @param topic The JSON object containing the info about the associated node.
+     *
+     * @returns {*|jQuery|HTMLElement} the image 'span' element.
+     */
+    function createMenuImageSpan(topic) {
+        var topicImage = topic.menu.image;
+        // Image span
+        var imgSpan = $("<span>", {class : "topicImg"});
+
+        var isExternalReference = topicImage.scope == 'external';
+        var imageHref = '';
+        if (!isExternalReference) {
+            imageHref += getPathToRoot();
+        }
+        imageHref += topicImage.href;
+
+        var img = $("<img>", {
+            src : imageHref,
+            alt : topic.title
+        });
+
+        if (topicImage.height != null) {
+            img.attr("height", topicImage.height);
+        }
+        if (topicImage.width != null) {
+            img.attr("width", topicImage.width);
+        }
+        imgSpan.append(img);
+
+        return imgSpan;
+    }
+
+    /**
+     * Creates the <span> element containing the title and the link to the topic associated to a node in the menu or the TOC.
+     *
+     * @param topic The JSON object containing the info about the associated node.
+     *
+     * @returns {*|jQuery|HTMLElement} the topic title 'span' element.
+     */
+    function createTopicRefSpan(topic) {
+        var isExternalReference = topic.scope == 'external';
+
+        // .topicref span
+        var topicRefSpan = $("<span>");
+        topicRefSpan.addClass("topicref");
+        if (topic.outputclass != null) {
+            topicRefSpan.addClass(topic.outputclass);
+        }
+
+        // WH-1820 Copy the Ditaval "pass through" attributes.
+        var dataAttributes = topic.attributes;
+        if (typeof dataAttributes !== 'undefined') {
+            var attrsNames = Object.keys(dataAttributes);
+            attrsNames.forEach(function(attr) {
+                topicRefSpan.attr(attr, dataAttributes[attr]);
+            });
+        }
+
+        topicRefSpan.attr(navConfig.attrs.tocID, topic.tocID);
+        topicRefSpan.attr("id", topic.tocID + "-mi");
+
+        // Current node state
+        var containsChildren = hasChildren(topic);
+        if (containsChildren) {
+            // This state means that the child topics should be retrieved later.
+            topicRefSpan.attr(navConfig.attrs.state, navConfig.states.notReady);
+        } else {
+            topicRefSpan.attr(navConfig.attrs.state, navConfig.states.leaf);
+        }
+
+        // Topic ref link
+        var linkHref = '';
+        if (topic.href != null && topic.href != 'javascript:void(0)') {
+            if (!isExternalReference) {
+                linkHref += getPathToRoot();
+            }
+            linkHref += topic.href;
+        }
+        var link = $("<a>", {
+            href: linkHref,
+            html: topic.title
+        });
+
+        // WH-2368 Update the relative links
+        var pathToRoot = getPathToRoot();
+        var linksInLink = link.find("a[href]");
+        linksInLink.each(function () {
+            var href = $(this).attr("href");
+            if (!(href.startsWith("http:") || href.startsWith("https:"))) {
+                $(this).attr("href", pathToRoot + href);
+            }
+        });
+        var imgsInLink = link.find("img[src]");
+        imgsInLink.each(function () {
+            var src = $(this).attr("src");
+            if (!(src.startsWith("http:") || src.startsWith("https:"))) {
+                $(this).attr("src", pathToRoot + src);
+            }
+        });
+
+        if (isExternalReference) {
+            link.attr("target", "_blank");
+        }
+        var titleSpan = $("<span>", {
+           class: "title"
+        });
+
+        titleSpan.append(link);
+        topicRefSpan.append(titleSpan);
+
+        return topicRefSpan;
+    }
+
+    function hasChildren(topic) {
+        // If the "topics" property is not specified then it means that children should be loaded from the
+        // module referenced in the "next" property
+        var children = topic.topics;
+        var hasChildren;
+        if (children != null && children.length == 0) {
+            hasChildren = false;
+        } else if (topic.menu != null) {
+            hasChildren = topic.menu.hasChildren;
+        } else {
+            hasChildren = true;
+        }
+        return hasChildren;
+    }
+
+    function menuItemHovered() {
+        var topicRefSpan = $(this).children('.topicref');
+        var state = topicRefSpan.attr(navConfig.attrs.state);
+        if (state === navConfig.states.pending) {
+            // Do nothing
+        } else if (state === navConfig.states.notReady) {
+            topicRefSpan.attr(navConfig.attrs.state, navConfig.states.pending);
+
+            var menuItemID = topicRefSpan.attr("id");
+            var dot = $("<span>", {
+                class: "dot"
+            });
+            var loadingMarker =
+                $("<ul>", {
+                    class: "loading",
+                    "aria-labelledby" : menuItemID,
+                    role : "menu",
+                    html: $("<li>", {
+                        role : "menuitem",
+                        html: [dot, dot.clone(), dot.clone()]
+                    })
+                });
+
+            $(this).append(loadingMarker);
+
+            handleMenuPosition($(this));
+            retrieveChildNodes(topicRefSpan);
+
+        } else if (state === navConfig.states.expanded) {
+            handleMenuPosition($(this));
+        } else if (state === navConfig.states.collapsed) {
+            topicRefSpan.attr(navConfig.attrs.state, navConfig.states.expanded);
+        }
+
+        if ($(this).attr("aria-expanded") != null) {
+            $(this).attr("aria-expanded", "true");
+        }
+    };
+
+    var dirAttr = $('html').attr('dir');
+    var rtlEnabled = false;
+    if (dirAttr=='rtl') {
+        rtlEnabled = true;
+    }
+
+    /**
+     * Display top menu so that it will not exit the viewport.
+     *
+     * @param $menuItem The top menu menu 'li' element of the current node from TOC / Menu.
+     */
+    function handleMenuPosition($menuItem) {
+        // Handle menu position
+        var parentDir = rtlEnabled ? 'left' : 'right';
+        var index = $('.wh_top_menu ul').index($menuItem.parent('ul'));
+
+        var currentElementOffsetLeft = parseInt($menuItem.offset().left);
+        var currentElementWidth = parseInt($menuItem.width());
+        var currentElementOffsetRight = currentElementOffsetLeft + currentElementWidth;
+        var nextElementWidth = parseInt($menuItem.children('ul').width());
+        var offsetLeft,
+            offsetRight = currentElementOffsetRight + nextElementWidth;
+
+        if (index == 0) {
+            if (parentDir=='left') {
+                $menuItem.attr('data-menuDirection', 'left');
+                offsetLeft = currentElementOffsetRight - nextElementWidth;
+                if (offsetLeft <= 0) {
+                	$menuItem.css('position', 'relative');
+	                $menuItem.children('ul').css('position','absolute');
+                    $menuItem.children('ul').css('right', 'auto');
+                    $menuItem.children('ul').css('left', '0');
+                }
+            } else {
+                $menuItem.attr('data-menuDirection', 'right');
+                offsetRight = currentElementOffsetLeft + nextElementWidth;
+                if (offsetRight >= $(window).width()) {
+                    $menuItem.css('position', 'relative');
+                    $menuItem.children('ul').css('position','absolute');
+                    $menuItem.children('ul').css('right', '0');
+                    $menuItem.children('ul').css('left', 'auto');
+            	}
+            }
+        } else {
+            offsetLeft = currentElementOffsetLeft - nextElementWidth;
+
+            if (parentDir == 'left') {
+                if (offsetLeft >= 0) {
+                    $menuItem.attr('data-menuDirection', 'left');
+                    $menuItem.children('ul').css('right', '100%');
+                    $menuItem.children('ul').css('left', 'auto');
+                } else {
+                    $menuItem.attr('data-menuDirection', 'right');
+                    $menuItem.children('ul').css('right', 'auto');
+                    $menuItem.children('ul').css('left', '100%');
+                }
+            } else {
+                if (offsetRight <= $(window).width()) {
+                    $menuItem.attr('data-menuDirection', 'right');
+                    $menuItem.children('ul').css('right', 'auto');
+                    $menuItem.children('ul').css('left', '100%');
+                } else {
+                    $menuItem.attr('data-menuDirection', 'left');
+                    $menuItem.children('ul').css('right', '100%');
+                    $menuItem.children('ul').css('left', 'auto');
+                }
+            }
+        }
+    }
+});

+ 111 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/nav-links/nav-links.css

@@ -0,0 +1,111 @@
+/* Styles for the node state*/
+
+.wh_publication_toc .topicref {
+    display: flex;
+    align-items: baseline;
+}
+
+.wh_publication_toc .wh-expand-btn:before{
+    display: inline-block;
+    font-family: "oXygen WebHelp", serif;
+    font-size: .7em;
+    font-weight: lighter;
+    font-style: normal;
+    width: 12px;
+    height: 12px;
+    margin-right: 4px;
+    border: 2px solid transparent;
+    opacity: 0.5;
+}
+
+.wh_publication_toc:hover .wh-expand-btn:before {
+    opacity: 0.8;
+}
+
+@media only screen and (max-width: 767px) {
+    .wh_publication_toc .wh-expand-btn:before {
+        opacity: 0.8;
+    }
+}
+
+.wh_publication_toc span[data-state=expanded] > .wh-expand-btn:before {
+    content: "p";
+}
+
+.wh_publication_toc span[data-state=not-ready]  > .wh-expand-btn:before,
+.wh_publication_toc span[data-state=collapsed] > .wh-expand-btn:before {
+    content: "q";
+}
+
+.wh_publication_toc span[data-state=collapsed] ~ ul {
+    display: none;
+}
+
+.wh_publication_toc span[data-state=leaf] > .wh-expand-btn:before {
+    content : " ";
+}
+
+.wh_publication_toc span[data-state=pending] > .wh-expand-btn:before {
+    display: inline-block;
+    content: " ";
+    border: 2px solid #f3f3f3; /* Light grey */
+    border-top: 2px solid #3498db; /* Blue */
+    border-radius: 50%;
+    animation: spin 2s linear infinite;
+    transition: border 1s;
+}
+
+@media screen {
+	@keyframes spin {
+	    0% { transform: rotate(0deg); }
+	    100% { transform: rotate(360deg); }
+	}
+}
+
+/* WH-1565 Inherit the styles of the parent node */
+.wh_publication_toc .topicref a * {
+    color: inherit !important;
+    background-color: transparent !important;
+}
+
+/* ------------------ Menu --------------------------- */
+
+@media screen {
+	@keyframes blink {
+	    0% { opacity: .2; }
+	    20% { opacity: 1; }
+	    100% { opacity: .2; }
+	}
+}
+
+.wh_top_menu .loading {
+    padding: 0 10px 10px 10px;
+}
+
+.wh_top_menu .loading .dot:before {
+    content: ".";
+    display: inline-block;
+    font-size: 3em;
+    font-weight: bold;
+    line-height: 1em;
+    color: #ffffff;
+}
+
+.wh_top_menu .loading .dot {
+    animation-name: blink;
+    animation-duration: 1.4s;
+    animation-iteration-count: infinite;
+    animation-fill-mode: both;
+}
+
+.wh_top_menu .loading .dot:nth-child(2) {
+    animation-delay: .2s;
+}
+
+.wh_top_menu .loading .dot:nth-child(3) {
+    animation-delay: .4s;
+}
+
+.wh_top_menu .state[data-state="expanded"] + .loading {
+    display: none;
+}

+ 30 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/nav-links/nav.js

@@ -0,0 +1,30 @@
+define([], function(){
+
+    return {
+
+        attrs : {
+            /* The state attribute name */
+            state : "data-state",
+            id : "data-id",
+            tocID : "data-tocid"
+        },
+
+        states : {
+            /* The possible states */
+            pending : "pending",
+            notReady : "not-ready",
+            collapsed : "collapsed",
+            expanded : "expanded",
+            leaf : "leaf"
+        },
+
+        btnIds : {
+            expand : "button-expand-action",
+            collapse : "button-collapse-action",
+            pending : "button-pending-action"
+        },
+
+        jsonBaseDir : "nav-links/json"
+    };
+
+});

+ 290 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/nav-links/toc-loader.js

@@ -0,0 +1,290 @@
+define(["options", "jquery", "nav"], function (options, $, navConfig) {
+
+    /**
+     * The path of the output directory, relative to the current HTML file.
+     * @type {String}
+     */
+    var path2root = null;
+
+    $(document).ready ( function() {
+        // Register the click handler for the TOC
+        var topicRefExpandBtn = $(".wh_publication_toc .wh-expand-btn");
+        topicRefExpandBtn.click(toggleTocExpand);
+
+        /* Toggle expand/collapse on enter and space */
+        topicRefExpandBtn.keypress(handleKeyEvent);
+    });
+
+    /**
+     * Retrieves the path of the output directory, relative to the current HTML file.
+     *
+     * @returns {*} the path of the output directory, relative to the current HTML file.
+     */
+    function getPathToRoot() {
+        if (path2root == null) {
+            path2root = $('meta[name="wh-path2root"]').attr("content");
+            if (path2root == null || path2root == undefined) {
+                path2root = "";
+            }
+        }
+        return path2root;
+    };
+
+    /* 
+     * Toggles expand/collapse on enter and space 
+     */
+    function handleKeyEvent(event) {
+        // Enter & Spacebar events
+        if ( event.which === 13 || event.which === 32) {
+            event.preventDefault();
+            toggleTocExpand.call(this);
+        }
+    }
+
+    function toggleTocExpand() {
+
+        var topicRef = $(this).closest(".topicref");
+        var state = topicRef.attr(navConfig.attrs.state);
+        var parentLi = $(this).closest('li');
+        var titleLink = $(this).siblings(".title").children("a");
+        var titleLinkID = titleLink.attr("id");
+
+        if (state == null) {
+            // Do nothing
+        } else if (state == navConfig.states.pending) {
+            // Do nothing
+        } else if (state == navConfig.states.notReady) {
+            topicRef.attr(navConfig.attrs.state, navConfig.states.pending);
+            parentLi.attr('aria-expanded', 'true');
+            $(this).attr("aria-labelledby", navConfig.btnIds.pending + " " + titleLinkID);
+            retrieveChildNodes(topicRef);
+        } else if (state == navConfig.states.expanded) {
+            topicRef.attr(navConfig.attrs.state, navConfig.states.collapsed);
+            $(this).attr("aria-labelledby", navConfig.btnIds.expand + " " + titleLinkID);
+            parentLi.attr('aria-expanded', 'false');
+        } else if (state == navConfig.states.collapsed) {
+            topicRef.attr(navConfig.attrs.state, navConfig.states.expanded);
+            $(this).attr("aria-labelledby", navConfig.btnIds.collapse + " " + titleLinkID);
+            parentLi.attr('aria-expanded', 'true');
+        }
+    };
+
+    /**
+     * Loads the JS file containing the list of child nodes for the current topic node.
+     * Builds the list of child topics element nodes based on the retrieved data.
+     *
+     * @param topicRefSpan The topicref 'span' element of the current node from TOC / Menu.
+     */
+    function retrieveChildNodes(topicRefSpan) {
+        var tocId = $(topicRefSpan).attr(navConfig.attrs.tocID);
+        if (tocId != null) {
+            var jsonHref = navConfig.jsonBaseDir + "/" + tocId;
+            require(
+                [jsonHref],
+                function(data) {
+                    if (data != null) {
+                        var topics = data.topics;
+                        var topicLi = topicRefSpan.closest('li');
+                        var topicsUl = createTopicsList(topics);
+
+                        var topicsUlParent = $('<ul role="group"/>');
+                        topicsUl.forEach(function(topic){
+                            topicsUlParent.append(topic);
+                        });
+                        topicLi.append(topicsUlParent);
+
+                        var titleLink = topicRefSpan.find(".title > a");
+                        var titleLinkID = titleLink.attr("id");
+
+                        var expandBtn = topicRefSpan.children('.wh-expand-btn');
+                        expandBtn.attr("aria-labelledby", navConfig.btnIds.collapse + " " + titleLinkID);
+
+                        topicRefSpan.attr(navConfig.attrs.state, navConfig.states.expanded);
+                    } else {
+                        topicRefSpan.attr(navConfig.attrs.state, navConfig.states.leaf);
+                    }
+                }
+            );
+        }
+    }
+
+    /**
+     * Creates the <code>ul</code> element containing the child topic nodes of the current topic.
+     *
+     * @param topics The array of containing info about the child topics.
+     *
+     * @returns {*|jQuery|HTMLElement} the <code>li</code> elements representing the child topic nodes of the current topic.
+     */
+    function createTopicsList(topics) {
+        var topicsArray = [];
+        topics.forEach(function(topic) {
+            var topicLi = createTopicLi(topic);
+            topicsArray.push(topicLi);
+        });
+        return topicsArray;
+    };
+
+    /**
+     * Creates the <code>li</code> element containing a topic node.
+     *
+     * @param topic The info about the topic node.
+     *
+     * @returns {*|jQuery|HTMLElement} the <code>li</code> element containing a topic node.
+     */
+    function createTopicLi(topic) {
+        var li = $("<li>");
+        li.attr('role', 'treeitem');
+        if (hasChildren(topic)) {
+            li.attr('aria-expanded', 'false');
+        }
+
+        // .topicref span
+        var topicRefSpan = createTopicRefSpan(topic);
+        // append the topicref node in parent
+        li.append(topicRefSpan);
+
+        return li;
+    };
+
+    /**
+     * Creates the <span> element containing the title and the link to the topic associated to a node in the menu or the TOC.
+     *
+     * @param topic The JSON object containing the info about the associated node.
+     *
+     * @returns {*|jQuery|HTMLElement} the topic title 'span' element.
+     */
+    function createTopicRefSpan(topic) {
+        var isExternalReference = topic.scope == 'external';
+
+        // .topicref span
+        var topicRefSpan = $("<span>");
+        topicRefSpan.addClass("topicref");
+        if (topic.outputclass != null) {
+            topicRefSpan.addClass(topic.outputclass);
+        }
+
+        // WH-1820 Copy the Ditaval "pass through" attributes.
+        var dataAttributes = topic.attributes;
+        if (typeof dataAttributes !== 'undefined') {
+            var attrsNames = Object.keys(dataAttributes);
+            attrsNames.forEach(function(attr) {
+                topicRefSpan.attr(attr, dataAttributes[attr]);
+            });
+        }
+
+        topicRefSpan.attr(navConfig.attrs.tocID, topic.tocID);
+
+        // Current node state
+        var containsChildren = hasChildren(topic);
+        if (containsChildren) {
+            // This state means that the child topics should be retrieved later.
+            topicRefSpan.attr(navConfig.attrs.state, navConfig.states.notReady);
+        } else {
+            topicRefSpan.attr(navConfig.attrs.state, navConfig.states.leaf);
+        }
+
+        var expandBtn = $("<span>", {
+            class: "wh-expand-btn",
+            role: "button"
+        });
+
+        if(containsChildren) {
+            expandBtn.attr("aria-labelledby", navConfig.btnIds.expand + " " + getTopicLinkID(topic));
+            expandBtn.attr("tabindex", "0");
+        }
+
+        expandBtn.click(toggleTocExpand);
+        expandBtn.keypress(handleKeyEvent);
+        topicRefSpan.append(expandBtn);
+
+        // Topic ref link
+        var linkHref = '';
+        if (topic.href != null && topic.href != 'javascript:void(0)') {
+            if (!isExternalReference) {
+                linkHref += getPathToRoot();
+            }
+            linkHref += topic.href;
+        }
+        var link = $("<a>", {
+            href: linkHref,
+            html: topic.title
+        });
+        // WH-2368 Update the relative links
+        var pathToRoot = getPathToRoot();
+        var linksInLink = link.find("a[href]");
+        linksInLink.each(function () {
+            var href = $(this).attr("href");
+            if (!(href.startsWith("http:") || href.startsWith("https:"))) {
+                $(this).attr("href", pathToRoot + href);
+            }
+        });
+        var imgsInLink = link.find("img[src]");
+        imgsInLink.each(function () {
+            var src = $(this).attr("src");
+            if (!(src.startsWith("http:") || src.startsWith("https:"))) {
+                $(this).attr("src", pathToRoot + src);
+            }
+        });
+
+        link.attr("id", getTopicLinkID(topic));
+
+        if (isExternalReference) {
+            link.attr("target", "_blank");
+        }
+        var titleSpan = $("<span>", {
+           class: "title"
+        });
+
+        titleSpan.append(link);
+
+        // Topic ref short description
+        if (topic.shortdesc != null) {
+            var tooltipSpan = $("<span>", {
+                class: "wh-tooltip",
+                html: topic.shortdesc
+            });
+
+			/* WH-1518: Check if the tooltip has content. */
+            if (tooltipSpan.find('.shortdesc:empty').length == 0) {
+                // Update the relative links
+                var links = tooltipSpan.find("a[href]");
+                links.each(function () {
+                    var href = $(this).attr("href");
+                    if (!(href.startsWith("http:") || href.startsWith("https:"))) {
+                        $(this).attr("href", pathToRoot + href);
+                    }
+                });
+                var imgs = tooltipSpan.find("img[src]");
+                imgs.each(function () {
+                    var src = $(this).attr("src");
+                    if (!(src.startsWith("http:") || src.startsWith("https:"))) {
+                        $(this).attr("src", pathToRoot + src);
+                    }
+                });
+
+                titleSpan.append(tooltipSpan);
+            }
+        }
+
+        topicRefSpan.append(titleSpan);
+
+        return topicRefSpan;
+    }
+
+    function getTopicLinkID(topic) {
+        return topic.tocID + "-link";
+    }
+
+    function hasChildren(topic) {
+        // If the "topics" property is not specified then it means that children should be loaded from the
+        // module referenced in the "next" property
+        var children = topic.topics;
+        var hasChildren;
+        if (children != null && children.length == 0) {
+            hasChildren = false;
+        } else {
+            hasChildren = true;
+        }
+        return hasChildren;
+    }
+});

+ 108 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/nav-links/tooltip.css

@@ -0,0 +1,108 @@
+.wh-tooltip-container,
+.wh_breadcrumb title,
+.wh_publication_toc .title {
+    position: relative;
+   /* display: inline-block;*/
+}
+
+.wh-tooltip-container .wh-tooltip,
+.wh_breadcrumb .topicref .wh-tooltip,
+.wh_publication_toc .topicref .wh-tooltip {
+    display: block;
+    align-items: baseline;
+    visibility: hidden;
+    background-color: #444;
+    color: #fff;
+    font-weight: normal;
+    text-align: left;
+    line-height: 1.5em;
+    padding: 10px;
+    margin: 4px;
+    border-radius: .4em;
+    min-width: 15em;
+    min-height: 2em;
+    position: absolute;
+    z-index: 1;
+    opacity: 0;
+    transition: .5s opacity 1s;
+}
+
+.wh-tooltip-container .wh-tooltip-content,
+.wh_breadcrumb .topicref .wh-tooltip .shortdesc,
+.wh_publication_toc .topicref .wh-tooltip .shortdesc {
+    /* Remove the paragraph margin. */
+    margin: 0;
+}
+
+.wh-tooltip-container:hover .wh-tooltip,
+.wh_breadcrumb .topicref .title:hover .wh-tooltip,
+.wh_publication_toc .topicref .title:hover .wh-tooltip {
+    visibility: visible;
+    opacity: 1;
+}
+
+/* WH-1545: Do not mix the tooltip styles with those from the Publication TOC or Breadcrumb. */
+.wh_breadcrumb span.wh-tooltip *,
+.wh_publication_toc span.wh-tooltip *
+{
+    color: inherit !important;
+    background-color: transparent !important;
+}
+
+/* Tooltip positioning. */
+@media screen {
+	[data-tooltip-position="left"] .wh-tooltip {
+	    top: -0.5em;
+	    right: 105%;
+	}
+	
+	[data-tooltip-position="right"] .wh-tooltip {
+	    top: -0.5em;
+	    left: 105%;
+	}
+	
+	[data-tooltip-position="top"] .wh-tooltip {
+	    bottom: 100%;
+	}
+	
+	[data-tooltip-position="bottom"] .wh-tooltip {
+	    top: 100%;
+	}
+	
+	[data-tooltip-position="hidden"] .wh-tooltip {
+	    display:none !important;
+	}
+}
+
+/* Tooltip arrow. */
+/*.wh-tooltip-container .wh-tooltip::before,*/
+.wh_breadcrumb .topicref .wh-tooltip::before,
+.wh_publication_toc .topicref .wh-tooltip::before {
+    content: " ";
+    position: absolute;
+    border: .4em solid transparent;
+}
+
+[data-tooltip-position="left"] .wh-tooltip::before {
+    top: .8em;
+    left: 100%;
+    border-left-color: #444;
+}
+
+[data-tooltip-position="right"] .wh-tooltip::before {
+    top: .8em;
+    right: 100%;
+    border-right-color: #444;
+}
+
+[data-tooltip-position="bottom"] .wh-tooltip::before {
+    left: .8em;
+    bottom: 100%;
+    border-bottom-color: #444;
+}
+
+[data-tooltip-position="top"] .wh-tooltip::before {
+    left: .8em;
+    top: 100%;
+    border-top-color: #444;
+}

+ 31 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/options/options.js

@@ -0,0 +1,31 @@
+/* 
+ * The 'properties.js' file is generated in the output directory next to this file
+ *  and contains the parameters configured in the current transformation.
+ */
+define(['properties'], function (properties) {
+    return {
+        get : function (property) {
+            return properties[property];
+        },
+
+        getBoolean : function (property) {
+            var prop = properties[property];
+            return prop == 'true' || prop == 'yes';
+        },
+        getInteger : function (property) {
+            var prop = properties[property];
+            return parseInt(prop, 10);
+        },
+        getIndexerLanguage : function() {
+            // Implementation copied from IndexerTask.setIndexerLanguage()
+            var language = this.get('webhelp.language');
+            if (language) {
+                var pos = language.indexOf('_');
+                if (pos != -1) {
+                    language = language.substring(0, pos);
+                }
+            }
+            return language;
+        }
+    };
+});

+ 1 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/options/properties.js

@@ -0,0 +1 @@
+define({"default.language":"en","use.stemming":"false","webhelp.enable.search.autocomplete":"true","webhelp.enable.search.kuromoji.js":"true","webhelp.enable.template.js.module.loading":"no","webhelp.language":"en","webhelp.publication.toc.links":"chapter","webhelp.publication.toc.tooltip.position":"right","webhelp.search.enable.pagination":"true","webhelp.search.page.numberOfItems":"10","webhelp.search.ranking":"true","webhelp.show.full.size.image":"true","webhelp.show.main.page.tiles":"no","webhelp.show.main.page.toc":"yes","webhelp.top.menu.depth":"3","webhelp.topic.collapsible.elements.initial.state":"expanded",});

+ 13 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search-page.css

@@ -0,0 +1,13 @@
+/* Topic content styles. */
+@import "topic/topic.css?buildId=2020100301";
+
+/* Default styles. */
+@import "core/webhelp.css?buildId=2020100301";
+
+/* Top Menu and Side TOC components styles. */
+@import "nav-links/nav-links.css?buildId=2020100301";
+
+/*
+ * Search results styles 
+ */
+ @import "search/search.css?buildId=2020100301";

+ 14 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search-page.js

@@ -0,0 +1,14 @@
+/**
+ * Load the libraries for the Search page.
+ */
+define(["require", "config"], function() {
+    require(['search'], function() {
+        require([
+            'polyfill',
+            'menu',
+            'searchAutocomplete',
+            'webhelp',
+            'template-module-loader'
+        ]);
+    });
+});

+ 3 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/htmlFileInfoList.js

@@ -0,0 +1,3 @@
+define(function () {
+return ["kwp.html@@@kwp@@@zawiera parametry tabelaryczne, akceptowane w formie podpisu przez zdefiniowane stanowiska dla danego elementu...","kzp.html@@@kzp@@@dokument zawieraj\u0105cy graficzne elementy oraz podpisy dedykowanych stanowisk odpowiedzialnych za dany element..."];
+});

+ 4 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/index-1.js

@@ -0,0 +1,4 @@
+define(function () {
+// Auto generated index for searching.
+return {"12":"0*0*q","akceptowane":"0*10*-1$9","aktualizacji":"0*0*s","badań":"0*0*11","badań.xlsx":"0*0*10","baza":"1*0*k","content":"0*0*3,1*0*3","danego":"0*10*-1$h","dany":"1*10*-1$g","dedykowanych":"1*10*-1$c","dla":"0*10*-1$g","dokument":"1*10*-1$6","doll":"1*0*l","element":"1*10*-1$i","element.":"1*10*-1$h","elementu":"0*10*-1$j","elementu.":"0*10*-1$i","elementy":"1*11*-1$9$s"};
+});

+ 4 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/index-2.js

@@ -0,0 +1,4 @@
+define(function () {
+// Auto generated index for searching.
+return {"formie":"0*10*-1$b","graficzne":"1*10*-1$8","highlighter":"1*0*m","jump":"0*0*1,1*0*1","klienta":"0*0*m","kwp":"0*31*0$5$n","kzp":"1*31*0$5$j","main":"0*0*2,1*0*2","odpowiedzialnych":"1*10*-1$e","oraz":"1*10*-1$a","parametry":"0*10*-1$7","pdf":"1*0*p","po":"0*0*r","podpisu":"0*10*-1$c","podpisy":"1*10*-1$b","przekazane":"1*0*t","przekazany":"0*0*k","przez":"0*11*-1$d$l"};
+});

+ 4 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/index-3.js

@@ -0,0 +1,4 @@
+define(function () {
+// Auto generated index for searching.
+return {"przykładowe":"1*0*r","search":"0*0*4,1*0*4","stanowisk":"1*10*-1$d","stanowiska":"0*11*-1$f$t","tabelaryczne":"0*10*-1$8","tabeli":"0*0*v","w":"0*11*-1$a$u","wer":"0*0*p","wer.":"0*0*o","wibo":"1*0*o","wibo.pdf":"1*0*n","xlsx":"0*0*12","za":"1*10*-1$f","zawiera":"0*10*-1$6,1*0*q","zawierający":"1*10*-1$7","zdefiniowane":"0*10*-1$e"};
+});

+ 25 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/index.js

@@ -0,0 +1,25 @@
+define(["stopwords", "index-1", "index-2", "index-3", "htmlFileInfoList", "link2parent", "jquery"], function(stopwords, index1, index2, index3, fileInfoList, link2parent, $) {
+
+    var words = $.extend({}, index1, index2, index3);
+
+    return {
+        /**
+         * The object with indexed words.
+         *
+         * {"word" : "topicID*score, topicID*score"}
+         */
+        w : words,
+        /**
+         * Auto generated list of analyzer stop words that must be ignored by search.
+         */
+        stopWords : stopwords,
+
+        /**
+         * File info list.
+         */
+        fil : fileInfoList,
+
+        link2parent : link2parent
+
+    };
+});

+ 9 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/keywords.js

@@ -0,0 +1,9 @@
+define(function() {var keywords=[{w:"kwp",p:["p0"]},{w:"kzp",p:["p1"]}];
+var ph={};
+ph["p0"]=[0];
+ph["p1"]=[1];
+     return {
+         keywords: keywords,
+         ph: ph
+     }
+});

+ 4 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/link-to-parent.js

@@ -0,0 +1,4 @@
+/*Maps current topic to its parent: "topicIndex:parentIndex". -1 represents the map.*/
+define(function () {
+return {0:-1,1:-1};
+});

+ 4 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/index/stopwords.js

@@ -0,0 +1,4 @@
+define(function() {
+// Auto generated list of analyzer stop words that must be ignored by search.
+return ["but","be","with","such","then","for","no","will","not","are","and","their","if","this","on","into","a","or","there","in","that","they","was","is","it","an","the","as","at","these","by","to","of"];
+});

+ 17 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/nwSearchFnt.LICENSE.txt

@@ -0,0 +1,17 @@
+David Cramer
+<david AT thingbag DOT net>
+
+Kasun Gajasinghe
+<kasunbg AT gmail DOT com>
+
+Copyright © 2008-2012 Kasun Gajasinghe, David Cramer
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+1. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+2. Except as contained in this notice, the names of individuals credited with contribution to this software shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the individuals in question.
+
+3. Any stylesheet derived from this Software that is publicly distributed will be identified with a different name and the version strings in any derived Software will be changed so that no possibility of confusion between the derived package and this Software will exist.
+
+Warranty: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL DAVID CRAMER, KASUN GAJASINGHE, OR ANY OTHER CONTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 1763 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/nwSearchFnt.js

@@ -0,0 +1,1763 @@
+define(["index", "options", "stemmer", "util"], function(index, options, stemmer, util) {
+    /*
+
+     David Cramer
+     <david AT thingbag DOT net>
+
+     Kasun Gajasinghe
+     <kasunbg AT gmail DOT com>
+
+     Copyright © 2008-2012 Kasun Gajasinghe, David Cramer
+
+     Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+     1. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+     2. Except as contained in this notice, the names of individuals credited with contribution to this software shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the individuals in question.
+
+     3. Any stylesheet derived from this Software that is publicly distributed will be identified with a different name and the version strings in any derived Software will be changed so that no possibility of confusion between the derived package and this Software will exist.
+
+     Warranty: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL DAVID CRAMER, KASUN GAJASINGHE, OR ANY OTHER CONTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+     */
+
+
+    /*
+     List of modifications added by the Oxygen Webhelp plugin:
+
+     1. Make sure the space-separated words from the search query are
+     passed to the search function searchSingleWord() in all cases (the
+     total number of words can be less than or greater than 10 words).
+
+     2. Accept as valid search words a sequence of two words separated
+     by ':', '.' or '-'.
+
+     3. Convert the search query to lowercase before executing the search.
+
+     4. Do not omit words between angle brackets from the title of the
+     search results.
+
+     5. Normalize search results HREFs and add '#' for no-frames webhelp
+
+     6. Keep custom footer in TOC after searching some text
+
+     7. Accept as valid search words that contains only 2 characters
+
+     */
+
+    /**
+     * Is set to true when the CJK tokenizer is used.
+     * @type {boolean}
+     */
+    var useCJKTokenizing = false;
+
+    /**
+     * The map with indexed words.
+     *
+     * w[word] = topicID*score, topicID*score;
+     */
+    var w = {};
+
+    /**
+     * Array with excluded words from search.
+     *
+     * @type {[string]}
+     */
+    var excluded = [];
+
+    /**
+     * The search query used in search process, after it was filtered.
+     */
+    var realSearchQuery;
+
+    /**
+     * It is true when the user searches for a single word between quotes, like "flower".
+     * In this case only this word will be displayed as search result.
+     *
+     * Note that it is not taken into consideration when stemming is activated.
+     *
+     * @type {boolean}
+     */
+    var singleWordExactMatch = false;
+
+    /**
+     * It is true when the search query seems to be a part of am URL or file path.
+     * For this situation we will search using 'contains' method.
+     *
+     * @type {boolean}
+     */
+    var searchInsideFilePath = false;
+
+    /**
+     * It is true when original search expression contains boolean operators.
+     *
+     * @type {boolean}
+     */
+    var booleanSearch = false;
+
+    /**
+     * The default boolean search operator.
+     * @type {string}
+     */
+    var defaultOperator = "or";
+
+
+    /**
+     * List of all known operators.
+     * @type {string[]}
+     */
+    var knownOperators = ["and", "or", "not"];
+
+    /**
+     * A hashtable which maps stems to query words
+     */
+    var stemQueryMap = [];
+
+    /**
+     * A map that contains search results organized by categories.
+     *
+     * @type {}
+     */
+    var resultCategoriesMap = {};
+
+    /**
+     * The number of result categories already counted.
+     *
+     * @type {number}
+     */
+    var resultCategoriesCount = 0;
+
+    /**
+     * Arrays with file IDs that were already in search result.
+     *
+     * @type {Array}
+     */
+    var resultCategoriesMapFiles = [];
+
+    var localNote =
+        '<div class="alert alert-warning alert-dismissible fade show" role="alert">'
+        + '<strong>WARNING!</strong> Due to security reasons, the Japanese Morphological Analyzer (Kuromoji) '
+        + 'is disabled while browsing WebHelp output locally. <a href="#" style="font-size: 0.9em"> [ Read more ]</a>'
+        + '</div>';
+
+    /**
+     * An object describing the topic information. It contains the title of the topic, the relative path to the output directory,
+     * the topic's short description.
+     *
+     * @param {string} title The topic's title.
+     * @param {string} relativePath The relative path to the output directory
+     * @param {string} shortDescription The short description of the topic.
+     *
+     * @constructor
+     */
+    function TopicInfo(title, relativePath, shortDescription) {
+        this.title = title;
+        this.relativePath = relativePath;
+        this.shortDescription = shortDescription;
+    }
+
+    /**
+     * An object describing the search result. It contains a string with the search expression and a list with documents
+     * where search terms were found.
+     *
+     * @param {string} searchExpression The search expression that belongs/represents this result.
+     * It might be different from the initial search expression after stop words and invalid boolean operators were removed.
+     * @param {[string]} The array with excluded words from initial search expression.
+     * @param {string} originalSearchExpression The initial search expression.
+     * @param {DocumentInfo[]} documents The array containing the search result grouped by topic/document.
+     * @param {string} errorMsg The message returned by search when an error occurred. This message will be displayed to user.
+     *
+     * @constructor
+     */
+    function SearchResult(searchExpression, excluded, originalSearchExpression, documents, errorMsg) {
+        this.searchExpression = searchExpression;
+        this.excluded = excluded;
+        this.documents = documents;
+        this.originalSearchExpression = originalSearchExpression;
+        this.error = errorMsg;
+    }
+
+    /**
+     * An object containing the search result for a single topic/HTML page.
+     * Contains pointer to the topicID, title, short description and the list of words that were found.
+     *
+     * @param {string} topicID The ID of the topic. Can be used to identify unique a document in the search result.
+     * @param {string} relativePath The relative path to the topic.
+     * @param {string} title The topic title.
+     * @param {string} shortDescription The topic short description.
+     * @param {[string]} words The array with words contained by this topic.
+     * @param {int} scoring The search scoring computed for this document.
+     * @param {[TopicInfo]} breadcrumb The breadcrumb of current document (optional).
+     *
+     * @constructor
+     */
+    function DocumentInfo(topicID, relativePath, title, shortDescription, words, scoring, breadcrumb) {
+        this.topicID = topicID;
+        this.relativePath = relativePath;
+        this.title = title;
+        this.shortDescription = shortDescription;
+        this.words = words;
+        this.scoring = scoring;
+        this.breadcrumb = breadcrumb;
+    }
+
+    function performSearchDriver(searchQuery, _callback) {
+        var indexerLanguage = options.getIndexerLanguage();
+        var useKuromoji = indexerLanguage.indexOf("ja") != -1 && options.getBoolean('webhelp.enable.search.kuromoji.js')
+                && !util.isLocal();
+
+        if (indexerLanguage.indexOf("ja") != -1 && util.isLocal() && options.getBoolean('webhelp.enable.search.kuromoji.js')) {
+            var note = $('<div/>').addClass('col-xs-12 col-sm-12 col-md-12 col-lg-12')
+                .html(localNote);
+            $('#searchResults').before(note);
+        }
+
+        if (useKuromoji) {
+            require(["kuromoji"], function (kuromoji) {
+                kuromoji.builder({ dicPath: "oxygen-webhelp/lib/kuromoji/dict" }).build(function (err, tokenizer) {
+                    // tokenizer is ready
+                    var tokens = tokenizer.tokenize(searchQuery);
+
+                    var finalWordsList = [];
+                    for (var w in tokens) {
+                        var word = tokens[w].surface_form;
+                        if (word!=" ") {
+                            finalWordsList.push(word);
+                        }
+                    }
+
+                    if (finalWordsList.length) {
+                        var finalWordsString = finalWordsList.join(" ");
+
+                        _callback(performSearchInternal(finalWordsString));
+                    } else {
+                        util.debug("Empty set");
+                    }
+                });
+            })
+
+        } else {
+            _callback(performSearchInternal(searchQuery));
+        }
+    }
+
+    /**
+     * This is the main function of the WH search library used to execute a search query.
+     * The stop words are filtered.
+     *
+     * @param {String} searchQuery The search query
+     * @return {SearchResult}The search result containing the search expression together with an arrays
+     * of DocumentInfo objects.
+     */
+    function performSearchInternal(searchQuery) {
+        util.debug("searchQuery", searchQuery);
+        init();
+
+        var initialSearchExpression = searchQuery;
+        var phraseSearch = false;
+        searchQuery = searchQuery.trim();
+        if (searchQuery.length > 2 && !useCJKTokenizing) {
+            var firstChar = searchQuery.charAt(0);
+            var lastChar = searchQuery.charAt(searchQuery.length - 1);
+            phraseSearch =
+                (firstChar == "'" || firstChar == '"') &&
+                (lastChar == "'" || lastChar == '"');
+        }
+
+        // Remove ' and " characters
+        searchQuery = searchQuery.replace(/"/g, " ").replace(/'/g, " ");
+
+        var errorMsg;
+        try {
+            realSearchQuery = preprocessSearchQuery(searchQuery, phraseSearch);
+        } catch (e) {
+            errorMsg = e.message;
+            util.debug(e);
+        }
+        util.debug("Search query after pre-process: ", realSearchQuery);
+        if (realSearchQuery.trim().length != 0) {
+            // Add the default boolean operator between words if it is missing
+            searchQuery = normalizeQuery(realSearchQuery);
+
+            var searchWordCount = 1;
+            if (!useCJKTokenizing) {
+                var sw = searchQuery.split(" ");
+                searchWordCount = sw.length;
+                singleWordExactMatch = phraseSearch && searchWordCount == 1;
+
+                if (!singleWordExactMatch && !phraseSearch) {
+                    searchInsideFilePath = isURLorFilePath(realSearchQuery);
+                }
+            }
+
+            // Convert to RPN notation
+            var rpnExpression = convertToRPNExpression(searchQuery);
+
+            // Perform search with RPN expression
+            var res = calculateRPN(rpnExpression);
+            var sRes = res.value;
+
+            if (searchWordCount == 1) {
+                // single word search
+                var doStem = options.getBoolean('use.stemming');
+                if (!singleWordExactMatch && !doStem && !useCJKTokenizing) {
+                    // Perform exact match first
+                    singleWordExactMatch = true;
+                    var exactMatchRes = calculateRPN(rpnExpression);
+                    addSearchResultCategory(exactMatchRes.value);
+
+                    // Add other results with lower priority
+                    addSearchResultCategory(sRes);
+                } else {
+                    addSearchResultCategory(sRes);
+                }
+
+            } else {
+                if (phraseSearch) {
+                    sRes = filterResultsForPhraseSearch(res.value, realSearchQuery);
+                    addSearchResultCategory(sRes);
+                } else if (booleanSearch) {
+                    groupResultsByWordCount(sRes);
+                } else {
+                    // Search criterion was not specified
+                    var phraseSearchResult =
+                        filterResultsForPhraseSearch(res.value, realSearchQuery);
+                    addSearchResultCategory(phraseSearchResult);
+
+                    groupResultsByWordCount(sRes);
+                }
+            }
+
+            sRes = sortSearchResults();
+
+            var docInfos = [];
+            for (var i = 0; i < sRes.length; i++) {
+                var cDoc = sRes[i];
+
+                // Compute the topic information
+                var topicInfoString = index.fil[cDoc.filenb];
+                var topicInfo = computeTopicInfo(topicInfoString);
+                if (topicInfo == null) {
+                    warn("There is no definition for topic with ID ", cDoc.filenb);
+                    continue;
+                }
+
+                var wordsStrArray = [];
+                for (var k in cDoc.wordsList) {
+                    wordsStrArray.push(cDoc.wordsList[k].word);
+                }
+                var breadcrumb = computeBreadcrumbTopicInfos(cDoc.filenb);
+                var docInfo =
+                    new DocumentInfo(
+                        cDoc.filenb,
+                        topicInfo.relativePath,
+                        topicInfo.title,
+                        topicInfo.shortDescription,
+                        wordsStrArray,
+                        cDoc.scoring,
+                        breadcrumb);
+
+                docInfos.push(docInfo);
+            }
+        }
+        // Filter expression to cross site scripting possibility
+        initialSearchExpression = filterOriginalSearchExpression(initialSearchExpression);
+        var searchResult = new SearchResult(realSearchQuery, excluded, initialSearchExpression, docInfos, errorMsg);
+        return searchResult;
+    }
+
+    /**
+     * Computes the topic associated information.
+     *
+     * @param topicInfoString The topic information as string.
+     *
+     * @returns An object which contains the topic title, topic relative path and the topic short description.
+     */
+    function computeTopicInfo(topicInfoString) {
+        if (topicInfoString === undefined) {
+            return null;
+        }
+        var pos1 = topicInfoString.indexOf("@@@");
+        var pos2 = topicInfoString.lastIndexOf("@@@");
+        var relPath = topicInfoString.substring(0, pos1);
+        // EXM-27709 START
+        // Display words between '<' and '>' in title of search results.
+        var topicTitle = topicInfoString.substring(pos1 + 3, pos2)
+            .replace(/</g, "&lt;").replace(/>/g, "&gt;");
+        var topicShortDesc = topicInfoString.substring(pos2 + 3, topicInfoString.length);
+        // EXM-27709 END
+
+        return new TopicInfo(topicTitle, relPath, topicShortDesc);
+    }
+
+    /**
+     * Compute the list of topic indexes representing the path to the root for the given topic.
+     *
+     * @param topicID The index of the topic in the index.fil list.
+     *
+     * @returns {Array} The array of indexes from the root to the topic.
+     */
+    function computePath2Root(topicID) {
+        var path2Root = [];
+        var parentTopicID = index.link2parent[topicID];
+        while (parentTopicID !== undefined && parentTopicID !== -1) {
+            path2Root.unshift(parentTopicID);
+            parentTopicID = index.link2parent[parentTopicID];
+        }
+        return path2Root;
+    }
+
+    /**
+     * Computes an array of TopicInfo objects representing the breadcrumb components for the given topic.
+     *
+     * @param topicIndex The index of the topic in the index.fil list.
+     *
+     * @returns {Array} The breadcrumb components.
+     */
+    function computeBreadcrumbTopicInfos(topicIndex) {
+        var path2Root = computePath2Root(topicIndex);
+        var breadcrumbPaths = [];
+        for (var i = 0; i < path2Root.length; i++) {
+            var topicInfoString = index.fil[path2Root[i]];
+            var topicInfo = computeTopicInfo(topicInfoString);
+            if (topicInfo !== null) {
+                breadcrumbPaths.push(topicInfo);
+            }
+        }
+
+        return breadcrumbPaths;
+    }
+
+    /**
+     * Initialize the library for search.
+     */
+    function init() {
+        searchInsideFilePath = false;
+        excluded = [];
+        realSearchQuery = "";
+        singleWordExactMatch = false;
+        booleanSearch = false;
+        resultCategoriesMap = {};
+        resultCategoriesCount = 0;
+        resultCategoriesMapFiles = [];
+    }
+
+    /**
+     * Add a search result category. This new added category has a lower priority.
+     *
+     * @param searchCategory The search results category.
+     */
+    function addSearchResultCategory(searchCategory) {
+        // Filter results that was already registered
+        /*info("************ addSearchResultCategory ", searchCategory);*/
+        var filteredResults = [];
+        for (var si = 0; si < searchCategory.length; si++) {
+            // Make sure that score is greater than 0
+            searchCategory[si].scoring = Math.max(1, searchCategory[si].scoring);
+
+            if (resultCategoriesMapFiles.indexOf(searchCategory[si].filenb) == -1) {
+                filteredResults.push(searchCategory[si]);
+
+                resultCategoriesMapFiles.push(searchCategory[si].filenb);
+            }
+        }
+
+        if (filteredResults.length > 0) {
+            resultCategoriesMap[resultCategoriesCount++] = filteredResults;
+        }
+    }
+
+    /**
+     * Scale scoring to be between 0 and 100.
+     *
+     * @param {[ResultPerFile]} sortResult The sort result to scale.
+     */
+    function scaleSortResultScoring(sortResult) {
+        var maxScore = 0;
+        for (var i = 0; i < sortResult.length; i++) {
+            maxScore = Math.max(maxScore, sortResult[i].scoring);
+        }
+
+        if (maxScore != 0) {
+            var ratio = 99 / maxScore;
+
+            for (var i = 0; i < sortResult.length; i++) {
+                var s = Math.ceil(sortResult[i].scoring * ratio);
+
+                var s = Math.min(99, s);
+                sortResult[i].scoring = s;
+            }
+        }
+    }
+
+    function sortSearchResults() {
+        var result = [];
+
+        var keys = [];
+        for (var prop in resultCategoriesMap) {
+            keys.push(prop);
+        }
+        keys.sort();
+
+        var catNumber = keys.length;
+        for (var k = 0; k < keys.length; k++) {
+            var r = resultCategoriesMap[k];
+
+
+            scaleSortResultScoring(r);
+
+
+            r.sort(function (first, second) {
+                return -(first.scoring - second.scoring);
+            });
+
+            for (var ri = 0; ri < r.length; ri++) {
+                r[ri].scoring = r[ri].scoring + ((catNumber - 1 - k) * 100);
+            }
+
+            result = result.concat(r);
+        }
+
+        /*info("final result:", result);*/
+        return result;
+    }
+
+    /**
+     * Filter results for phrase search.
+     *
+     * @param {[ResultPerFile]} resPerFileArray The array with search results to be filtered.
+     * @param realSearchQuery The search query.
+     * @returns {Array} The filtered array.
+     */
+    function filterResultsForPhraseSearch(resPerFileArray, realSearchQuery) {
+        var searchWords = realSearchQuery.split(" ");
+
+        var doStem = options.getBoolean('use.stemming');
+        var fResult = [];
+        // Iterate over all results
+        for (var i = 0; i < resPerFileArray.length; i++) {
+            // Test if number of words are the same
+            if (searchWords.length == resPerFileArray[i].wordsList.length) {
+
+                // Test if words are the same
+                var sameWords = true;
+                for (var j = 0; j < resPerFileArray[i].wordsList.length; j++) {
+                    var sj = searchWords[j];
+                    if (typeof stemmer != "undefined" && doStem) {
+                        sj = stemmer(sj);
+                    }
+                    sj = sj.toLowerCase();
+
+                    if (sj != resPerFileArray[i].wordsList[j].word) {
+                        sameWords = false;
+                        break;
+                    }
+
+                }
+
+                if (sameWords) {
+                    // Test if indices are consecutive
+
+                    var firstWordIndices = resPerFileArray[i].wordsList[0].indices;
+
+                    for (var fi in firstWordIndices) {
+                        var cidx = parseInt(firstWordIndices[fi], 32);
+                        if (cidx == -1) {
+                            continue;
+                        }
+
+                        var consecutiveIndices = true;
+                        // Test if next words indices are consecutive
+                        for (var ii = 1; ii < resPerFileArray[i].wordsList.length; ii++) {
+
+                            var nextIndices = resPerFileArray[i].wordsList[ii].indices;
+
+                            var nextIdxFound = false;
+                            for (var nIdx in nextIndices) {
+                                var cRes = parseInt(nextIndices[nIdx], 32);
+
+                                if (cRes != -1 && cidx == cRes - 1) {
+                                    cidx = cRes;
+                                    nextIdxFound = true;
+                                    break;
+                                }
+                            }
+
+                            if (!nextIdxFound) {
+                                consecutiveIndices = false;
+                                break;
+                            }
+                        }
+
+                        if (consecutiveIndices) {
+                            fResult.push(resPerFileArray[i]);
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        return fResult;
+    }
+
+    /**
+     * Filter the original search query to avoid cross site scripting possibility.
+     *
+     * @param {string} searchTextField The search query to process.
+     * @returns {string} The filtered search query.
+     */
+    function filterOriginalSearchExpression(searchTextField) {
+        // Eliminate the cross site scripting possibility.
+        searchTextField = searchTextField.replace(/</g, " ")
+            .replace(/>/g, " ")
+            .replace(/"/g, " ")
+            .replace(/'/g, " ")
+            .replace(/=/g, " ")
+            .replace(/0\\/g, " ")
+            .replace(/\\/g, " ")
+            .replace(/\//g, " ")
+            .replace(/  +/g, " ");
+
+        /*  START - EXM-20414 */
+        searchTextField =
+            searchTextField.replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, "</").replace(/_di_/g, "%24_");
+        /*  END - EXM-20414 */
+
+        searchTextField = searchTextField.replace(/  +/g, " ");
+        searchTextField = searchTextField.replace(/ $/, "").replace(/^ /, " ");
+
+        return searchTextField;
+    }
+
+
+    /**
+     * Pre-process the search query before it is used as search expression. It removes the stop words.
+     *
+     * @param {string} query The search query to process.
+     * @param {boolean} phraseSearch True if phrase search was detected.
+     * @returns {string} The processing result.
+     */
+    function preprocessSearchQuery(query, phraseSearch) {
+        var searchTextField = trim(query);
+
+        /**
+         * Validate brackets
+         */
+        var openBracket = [],
+            closedBracket = [];
+
+        var idx = 0, oIndex;
+        while (query.indexOf("(", idx) !== -1) {
+            idx = query.indexOf("(", idx);
+            openBracket.push(idx);
+            idx++;
+        }
+
+        idx = 0;
+        while (query.indexOf(")", idx) !== -1) {
+            idx = query.indexOf(")", idx);
+            closedBracket.push(idx);
+            idx++;
+        }
+
+        if (openBracket.length != closedBracket.length) {
+            throw new Error("Invalid expression!");
+        } else {
+            while (oIndex = openBracket.shift()) {
+                var cIndex = closedBracket.shift();
+                if (oIndex > cIndex) {
+                    throw new Error("Invalid expression!");
+                }
+            }
+        }
+
+        // Add a space between '(' or ')' and the real word
+        searchTextField = searchTextField.replace(/\((\S*)/g, '( $1');
+        searchTextField = searchTextField.replace(/\)(\S*)/g, ') $1');
+        searchTextField = searchTextField.replace(/(\S*)\)/g, '$1 )');
+
+        // EXM-39245 - Remove punctuation marks
+        // w1,w2 -> w1 w2
+        searchTextField = searchTextField.replace(/[,]/g, ' ');
+
+        // w1. w2 -> w1 w2
+        searchTextField = searchTextField.replace(/\s\./g, ' ');
+        searchTextField = searchTextField.replace(/\.\s/g, ' ');
+
+        // w1! w2 -> w1 w2
+        searchTextField = searchTextField.replace(/\s!/g, ' ');
+        searchTextField = searchTextField.replace(/!\s/g, ' ');
+
+        // w1? w2 -> w1 w2
+        searchTextField = searchTextField.replace(/\s\?/g, ' ');
+        searchTextField = searchTextField.replace(/\?\s/g, ' ');
+
+        var expressionInput = searchTextField;
+
+        var wordsArray = [];
+        var splitExpression = expressionInput.split(" ");
+
+        // Exclude/filter stop words
+        for (var t in splitExpression) {
+            var cw = splitExpression[t].toLowerCase();
+            if (cw.trim().length == 0) {
+                // Empty string
+                continue;
+            }
+
+            var isParenthesis =
+                "(" == cw || ")" == cw;
+
+            if (contains(knownOperators, cw)) {
+                // Boolean operators are excluded from phrase search
+                if (phraseSearch) {
+                    excluded.push(cw);
+                } else {
+                    wordsArray.push(cw);
+                }
+            } else if (isParenthesis) {
+                // Paranthesis are excluded from phrase search
+                if (phraseSearch) {
+                    excluded.push(cw);
+                } else {
+                    wordsArray.push(cw);
+                }
+            } else if (contains(index.stopWords, cw)) {
+                // Exclude stop words
+                excluded.push(cw);
+            } else {
+                wordsArray.push(cw);
+            }
+        }
+
+        expressionInput = wordsArray.join(" ");
+
+        realSearchQuery = expressionInput;
+        return expressionInput.trim();
+    }
+
+    /**
+     * Group the search results by word count.
+     *
+     * @param {[ResultPerFile]} searchResults The search results to be grouped.
+     */
+    function groupResultsByWordCount(searchResults) {
+        var resultsByWordCount = {};
+
+        for (var sri = 0; sri < searchResults.length; sri++) {
+            var csr = searchResults[sri];
+
+            var wc = csr.wordsList.length;
+            if (resultsByWordCount[wc] == undefined) {
+                resultsByWordCount[wc] = [];
+            }
+            resultsByWordCount[wc].push(csr);
+        }
+        /*info("Results by words count:", resultsByWordCount);*/
+
+        var keys = [];
+        for (var prop in resultsByWordCount) {
+            keys.push(prop);
+        }
+        keys.sort();
+        /*info("Sorted keys", keys);*/
+
+        for (var k = keys.length - 1; k >= 0; k--) {
+            var ck = keys[k];
+
+            addSearchResultCategory(resultsByWordCount[ck]);
+        }
+    }
+
+    /**
+     * @description Combine two selectors into one
+     * e.g: "and or" => "or"
+     * @param {String} op1 Operator one
+     * @param {String} op2 Operator two
+     * @returns {String} Resulted operator
+     */
+    function combineOperators(op1, op2) {
+        if (op1 == op2) {
+            return op1;
+        }
+
+        if (op1 == "not" || op2 == "not") {
+            return "not";
+        }
+
+        if (op1 == "or" || op2 == "or") {
+            return "or";
+        }
+    }
+
+    /**
+     * @param word Word to check if is an known operator or not
+     * @returns {boolean} TRUE if searched word is a known operator
+     *                    FALSE otherwise
+     */
+    function isKnownOperator(word) {
+        return inArray(word, knownOperators);
+    }
+
+    /**
+     * @description Normalize query so that we have an operator between each two adjacent search terms. We'll add the defaultOperator if the
+     * operator is missing.
+     * e.g: If the defaultOperator is "and" the "iris flower" query will be "iris and flower"
+     *
+     * @param {String} query Search query
+     * @return {String} Normalized query
+     */
+    function normalizeQuery(query) {
+        util.debug("normalizeQuery(" + query + ")");
+        var toReturn = [];
+
+        // Remove whitespaces from the beginning and from the end of the expression
+        query = query.toLowerCase().trim();
+        // Consider "-" (dash) character to be "and" operator
+        //query = query.replace(/-/g, ' and ');
+        // Replace multiple spaces with a single space
+        query = query.replace(/  +/g, ' ');
+        // Remove space after left bracket
+        query = query.replace(/\( /g, '(');
+        // Remove space before right bracket
+        query = query.replace(/ \)/g, ')');
+
+        var queryParts = query.split(" ");
+        for (var i = 0; i < queryParts.length; i++) {
+            // Skip empty parts
+            var currentWord = queryParts[i];
+            if (currentWord == "") {
+                continue;
+            }
+
+            var knownOperator = isKnownOperator(currentWord);
+            booleanSearch = booleanSearch || knownOperator;
+            if (toReturn.length == 0) {
+                // First item in result should be a term, not an operator
+                if (!knownOperator) {
+                    toReturn.push(currentWord);
+                }
+            } else {
+                // Combine multiple operators into one
+                if (isKnownOperator(toReturn[toReturn.length - 1]) && knownOperator) {
+                    toReturn[toReturn.length - 1] = combineOperators(toReturn[toReturn.length - 1], currentWord);
+                }
+                // Add default operator when no operator is specified
+                if (!isKnownOperator(toReturn[toReturn.length - 1]) && !knownOperator) {
+                    toReturn.push(defaultOperator);
+                    toReturn.push(currentWord);
+                }
+                // Add operator after term
+                if (!isKnownOperator(toReturn[toReturn.length - 1]) && knownOperator) {
+                    toReturn.push(currentWord);
+                }
+                // Add term after operator
+                if (isKnownOperator(toReturn[toReturn.length - 1]) && !knownOperator) {
+                    toReturn.push(currentWord);
+                }
+            }
+        }
+
+        // Remove the last operators from the list
+        for (i = toReturn.length - 1; i >= 0; i--) {
+            if (isKnownOperator(toReturn[i])) {
+                toReturn.pop();
+            } else {
+                break;
+            }
+        }
+
+        return toReturn.join(" ");
+    }
+
+    /**
+     * @description Convert search expression from infix notation to reverse polish notation (RPN): iris and flower => iris flower and
+     * @param {string} search Search expression to be converted. e.g.: iris and flower or (gerbera not salvia)
+     * @return {String} Search expression in RPN notation
+     */
+    function convertToRPNExpression(search) {
+        util.debug("convertToRPNExpression(" + search + ")");
+        var stringToStore = "";
+        var stack = [];
+        var item = "";
+        var items = [];
+        for (var i = 0; i < search.length; i++) {
+            if (search[i] != " " && search[i] != "(" && search[i] != ")") {
+                item += search[i];
+            }
+            if (search[i] == " ") {
+                if (item != "") {
+                    items.push(item);
+                    item = "";
+                }
+            }
+            if (search[i] == "(") {
+                if (item != "") {
+                    items.push(item);
+                    items.push("(");
+                    item = "";
+                } else {
+                    items.push("(");
+                }
+            }
+            if (search[i] == ")") {
+                if (item != "") {
+                    items.push(item);
+                    items.push(")");
+                    item = "";
+                } else {
+                    items.push(")");
+                }
+            }
+        }
+
+        if (item != "") {
+            items.push(item);
+        }
+
+        for (i = 0; i < items.length; i++) {
+            if (isTerm(items[i])) {
+                stringToStore += items[i] + " ";
+            }
+            if (inArray(items[i], knownOperators)) {
+                while (stack.length > 0 && inArray(stack[stack.length - 1], knownOperators)) {
+                    stringToStore += stack.pop() + " ";
+                }
+                stack.push(items[i]);
+            } else if (items[i] == "(") {
+                stack.push(items[i]);
+            } else if (items[i] == ")") {
+                var popped = stack.pop();
+                while (popped != "(") {
+                    stringToStore += popped + " ";
+                    popped = stack.pop();
+                }
+            }
+        }
+
+        while (stack.length > 0) {
+            stringToStore += stack.pop() + " ";
+        }
+
+        return stringToStore.trim();
+    }
+
+    /**
+     * @description Compute results from a RPN expression
+     * @param {string} rpn Expression in Reverse Polish notation
+     * @return {Page} An object that contains the search result.
+     */
+    function calculateRPN(rpn) {
+        util.debug("calculate(" + rpn + ")");
+        var lastResult1, lastResult2;
+        var rpnTokens = trim(rpn);
+        rpnTokens = rpnTokens.split(' ');
+        var result;
+
+        var stackResults = [];
+
+        var realSearchWords = [];
+        for (var i = 0; i < rpnTokens.length; i++) {
+            var token = rpnTokens[i];
+
+            if (isTerm(token)) {
+                result = searchSingleWord(token);
+
+                util.debug(token, " -- single word search result -- ", result);
+                realSearchWords.push(token);
+
+                if (result.length > 0) {
+                    stackResults.push(new BooleanSearchOperand(result));
+                } else {
+                    stackResults.push(new BooleanSearchOperand([]));
+                }
+            } else {
+                switch (token) {
+                    case "and":
+                        // debug("Implement AND operator");
+                        lastResult2 = stackResults.pop();
+                        lastResult1 = stackResults.pop();
+
+                        if (lastResult1.value == undefined || !inArray(token, knownOperators)) {
+                            util.debug("Error in calculateRPN(string) Method!");
+                        } else {
+                            stackResults.push(lastResult1.and(lastResult2));
+                        }
+                        break;
+                    case "or":
+                        lastResult2 = stackResults.pop();
+                        lastResult1 = stackResults.pop();
+                        if (lastResult1.value == undefined || !inArray(token, knownOperators)) {
+                            util.debug("Error in calculateRPN(string) Method!");
+                        } else {
+                            stackResults.push(lastResult1.or(lastResult2));
+                        }
+                        break;
+                    case "not":
+                        lastResult2 = stackResults.pop();
+                        lastResult1 = stackResults.pop();
+                        if (lastResult1.value == undefined || !inArray(token, knownOperators)) {
+                            util.debug("Error in calculateRPN(string) Method!");
+                        } else {
+                            stackResults.push(lastResult1.not(lastResult2));
+                        }
+                        break;
+                    default:
+                        util.debug("Error in calculateRPN(string) Method!");
+                        break;
+                }
+            }
+        }
+
+        realSearchQuery = realSearchWords.join(" ");
+        return stackResults[0];
+    }
+
+    /**
+     * Tests if a given string is a valid search term or not.
+     *
+     * @param {string} string String to look for in the known operators list
+     * @return {boolean} TRUE if the search string is a search term
+     *                   FALSE if the search string is not a search term
+     */
+    function isTerm(string) {
+        return !inArray(string, knownOperators) && string.indexOf("(") == -1 && string.indexOf(")") == -1;
+    }
+
+    /**
+     * @description Search for an element into an array
+     * @param needle Searched element
+     * @param haystack Array of elements
+     * @return {boolean} TRUE if the searched element is part of the array
+     *                   FALSE otherwise
+     */
+    function inArray(needle, haystack) {
+        var length = haystack.length;
+        for (var i = 0; i < length; i++) {
+            if (haystack[i] == needle) return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Search for a single word/term.
+     *
+     * @param {String} wordToFind A single search term to search for.
+     * @return {[ResultPerFile]} Array with the resulted pages and indices.
+     */
+    function searchSingleWord(wordToFind) {
+        util.debug('searchSingleWord("' + wordToFind + '")');
+
+        wordToFind = trim(wordToFind);
+        wordToFind = wordToFind.toLowerCase();
+
+        var txt_wordsnotfound = "";
+        var wordsList = [wordToFind];
+        util.debug('words from search:', wordsList);
+
+        var indexerLanguage = options.getIndexerLanguage();
+        // set the tokenizing method
+        useCJKTokenizing = !!(typeof indexerLanguage != "undefined" && (indexerLanguage == "zh" || indexerLanguage == "ko"));
+        //If Lucene CJKTokenizer was used as the indexer, then useCJKTokenizing will be true. Else, do normal tokenizing.
+        // 2-gram tokenizing happens in CJKTokenizing,
+        // If doStem then make tokenize with Stemmer
+        //var finalArray;
+
+        /**
+         * data initialisation
+         */
+        var finalWordsList = []; // Array with the words to look for after removing spaces
+        var doStem = options.getBoolean('use.stemming');
+        if (doStem) {
+            if (useCJKTokenizing) {
+                // Array of words
+                finalWordsList = cjkTokenize(wordsList);
+            } else {
+                // Array of words
+                finalWordsList = tokenize(wordsList);
+            }
+        } else if (useCJKTokenizing) {
+            // Array of words
+            finalWordsList = cjkTokenize(wordsList);
+            util.debug('CJKTokenizing, finalWordsList: ' + finalWordsList);
+        } else {
+            finalWordsList = [wordToFind];
+        }
+
+        // Add the words that start with the searched words.
+        if (!useCJKTokenizing) {
+            /**
+             * Compare with the indexed words (in the w[] array), and push words that are in it to tempTab.
+             */
+            var tempTab = [];
+
+            var wordsArray = '';
+            for (var t in finalWordsList) {
+                if (!contains(index.stopWords, finalWordsList[t])) {
+                    if (doStem || finalWordsList[t].toString().length == 2) {
+                        if (index.w[finalWordsList[t].toString()] == undefined) {
+                            txt_wordsnotfound += finalWordsList[t] + " ";
+                        } else {
+                            tempTab.push(finalWordsList[t]);
+                        }
+                    } else {
+                        var searchedValue = finalWordsList[t].toString();
+                        var listOfWordsStartWith = searchedValue + ",";
+                        if (!singleWordExactMatch) {
+                            if (searchInsideFilePath) {
+                                listOfWordsStartWith = wordsContains(searchedValue);
+                            } else {
+                                listOfWordsStartWith = wordsStartsWith(searchedValue);
+                            }
+
+                        }
+
+                        if (listOfWordsStartWith != undefined) {
+                            listOfWordsStartWith = listOfWordsStartWith.substr(0, listOfWordsStartWith.length - 1);
+                            wordsArray = listOfWordsStartWith.split(",");
+                            for (var i in wordsArray) {
+                                tempTab.push(wordsArray[i]);
+                            }
+                        }
+                    }
+                }
+            }
+            finalWordsList = tempTab;
+            finalWordsList = removeDuplicate(finalWordsList);
+        }
+
+        var fileAndWordList = [];
+        if (finalWordsList.length) {
+            fileAndWordList = searchStartWith(finalWordsList, wordToFind);
+        }
+
+        return fileAndWordList;
+    }
+
+// Return true if "word" value is an element of "arrayOfWords"
+    function contains(arrayOfWords, word) {
+        var found = false;
+
+        for (var w in arrayOfWords) {
+            if (arrayOfWords[w] === word) {
+                found = true;
+                break;
+            }
+        }
+
+        return found;
+    }
+
+// Look for elements that start with searchedValue.
+    function wordsStartsWith(searchedValue) {
+        var toReturn = '';
+        for (var sv in index.w) {
+            if (sv.toLowerCase().indexOf(searchedValue.toLowerCase()) == 0) {
+                toReturn += sv + ",";
+            }
+        }
+        return toReturn.length > 0 ? toReturn : undefined;
+    }
+
+// Look for indexed words that contains the searchedValue.
+    function wordsContains(searchedValue) {
+        var toReturn = '';
+        for (var sv in index.w) {
+            if (sv.toLowerCase().indexOf(searchedValue.toLowerCase()) != -1) {
+                toReturn += sv + ",";
+            }
+        }
+        return toReturn.length > 0 ? toReturn : undefined;
+    }
+
+    function tokenize(wordsList) {
+        util.debug('tokenize(' + wordsList + ')');
+        var stemmedWordsList = []; // Array with the words to look for after removing spaces
+        var cleanwordsList = []; // Array with the words to look for
+        var doStem = options.getBoolean('use.stemming');
+        for (var j in wordsList) {
+            var word = wordsList[j];
+            if (typeof stemmer != "undefined" && doStem) {
+                var s = stemmer(word);
+                util.debug(word, " -stem- ", s);
+                stemQueryMap[s] = word;
+            } else {
+                stemQueryMap[word] = word;
+            }
+        }
+
+        //stemmedWordsList is the stemmed list of words separated by spaces.
+        for (var t in wordsList) {
+            if (wordsList.hasOwnProperty(t)) {
+                wordsList[t] = wordsList[t].replace(/(%22)|^-/g, "");
+                if (wordsList[t] != "%20") {
+                    cleanwordsList.push(wordsList[t]);
+                }
+            }
+        }
+
+        if (typeof stemmer != "undefined" && doStem) {
+            //Do the stemming using Porter's stemming algorithm
+            for (var i = 0; i < cleanwordsList.length; i++) {
+                var stemWord = stemmer(cleanwordsList[i]);
+                stemmedWordsList.push(stemWord);
+            }
+        } else {
+            stemmedWordsList = cleanwordsList;
+        }
+        return stemmedWordsList;
+    }
+
+//Invoker of CJKTokenizer class methods.
+    function cjkTokenize(wordsList) {
+        var allTokens = [];
+        var notCJKTokens = [];
+        util.debug('in cjkTokenize(), wordsList: ', wordsList);
+        for (var j = 0; j < wordsList.length; j++) {
+            var word = wordsList[j];
+            util.debug('in cjkTokenize(), next word: ', word);
+            if (getAvgAsciiValue(word) < 127) {
+                notCJKTokens.push(word);
+            } else {
+                util.debug('in cjkTokenize(), use CJKTokenizer');
+                var tokenizer = new CJKTokenizer(word);
+                var tokensTmp = tokenizer.getAllTokens();
+                allTokens = allTokens.concat(tokensTmp);
+                util.debug('in cjkTokenize(), found new tokens: ', allTokens);
+            }
+        }
+        allTokens = allTokens.concat(tokenize(notCJKTokens));
+        return allTokens;
+    }
+
+//A simple way to determine whether the query is in english or not.
+    function getAvgAsciiValue(word) {
+        var tmp = 0;
+        var num = word.length < 5 ? word.length : 5;
+        for (var i = 0; i < num; i++) {
+            if (i == 5) break;
+            tmp += word.charCodeAt(i);
+        }
+        return tmp / num;
+    }
+
+//CJKTokenizer
+    function CJKTokenizer(input) {
+        this.input = input;
+        this.offset = -1;
+        this.tokens = [];
+        this.incrementToken = incrementToken;
+        this.tokenize = tokenize;
+        this.getAllTokens = getAllTokens;
+        this.unique = unique;
+
+        function incrementToken() {
+            if (this.input.length - 2 <= this.offset) {
+                return false;
+            } else {
+                this.offset += 1;
+                return true;
+            }
+        }
+
+        function tokenize() {
+            return this.input.substring(this.offset, this.offset + 2);
+        }
+
+        function getAllTokens() {
+            while (this.incrementToken()) {
+                var tmp = this.tokenize();
+                this.tokens.push(tmp);
+            }
+            return this.unique(this.tokens);
+        }
+
+        function unique(a) {
+            var r = [];
+            o:for (var i = 0, n = a.length; i < n; i++) {
+                for (var x = 0, y = r.length; x < y; x++) {
+                    if (r[x] == a[i]) continue o;
+                }
+                r[r.length] = a[i];
+            }
+            return r;
+        }
+    }
+
+
+    /**
+     * Array.unique( strict ) - Remove duplicate values
+     *
+     * @param array The array to search.
+     * @returns {*} The array without duplicates.
+     */
+    function unique(array) {
+        util.debug("unique(", array, ")");
+        var a = [];
+        var i;
+        var l = array.length;
+
+        if (array[0] != undefined) {
+            a[0] = array[0];
+        }
+        else {
+            return -1;
+        }
+
+        for (i = 1; i < l; i++) {
+            if (indexof(a, array[i], 0) < 0) {
+                a.push(array[i]);
+            }
+        }
+
+        return a;
+    }
+
+    /**
+     * Finds the index of an element in an array.
+     *
+     * @param array The array.
+     * @param element The element to find.
+     * @param begin The begin index.
+     * @returns The index of the element or -1.
+     */
+    function indexof(array, element, begin) {
+        for (var i = begin; i < array.length; i++) {
+            if (array[i] == element) {
+                return i;
+            }
+        }
+        return -1;
+
+    }
+
+    /* end of Array functions */
+
+
+    /**
+     * Searches in the indexed words for the terms in words and sort the mathes by scoring.
+     *
+     * @param {Array} words - list of words to look for.
+     * @param {String} searchedWord - search term typed by user
+     * @return {Array} - the hashtable fileAndWordList
+     */
+    function searchStartWith(words, searchedWord) {
+        if (words.length == 0 || words[0].length == 0) {
+            return null;
+        }
+
+        // In generated js file we add scoring at the end of the word
+        // Example word1*scoringForWord1,word2*scoringForWord2 and so on
+        // Split after * to obtain the right values
+
+        // Group the words by topicID -> {word, indices}
+        var fileAndWordList = {};
+        for (var t in words) {
+            // get the list of the indices of the files.
+            var topicIDAndScore = index.w[words[t]];
+
+            if (topicIDAndScore != undefined) {
+                var topicInfoArray = topicIDAndScore.split(",");
+
+                //for each file (file's index):
+                for (var t2 in topicInfoArray) {
+                    var tmp = '';
+
+                    var temp = topicInfoArray[t2].toString();
+                    var idx = temp.indexOf('*');
+                    if (idx != -1) {
+                        var tid = temp.substring(0, idx);
+
+                        // Extract word indices
+                        var starLastIdx = temp.indexOf("*", idx + 1);
+                        var wordIndices = [];
+                        if (starLastIdx != -1) {
+                            var indicesStr = temp.substr(starLastIdx + 1);
+                            wordIndices = indicesStr.split('$');
+                        }
+
+                        if (fileAndWordList[tid] == undefined) {
+                            fileAndWordList[tid] = [];
+                        }
+
+                        var wAndIdx = {
+                            word: words[t],
+                            indices: wordIndices
+                        };
+
+                        fileAndWordList[tid].push(wAndIdx);
+                    } else {
+                        warn("Unexpected writing format, '*' delimiter is missing.");
+                    }
+                }
+            }
+        }
+
+
+        // An array with TopicIDAndWordList objects
+        var tidWordsArray = [];
+        for (t in fileAndWordList) {
+            tidWordsArray.push(new TopicIDAndWordList(t, fileAndWordList[t]));
+        }
+        tidWordsArray = removeDerivates(tidWordsArray, searchedWord);
+
+        // Compute the array with results per file
+        var resultsPerFileArrays = [];
+        for (t in tidWordsArray) {
+            var cTopicIDAndWordList = tidWordsArray[t];
+
+            var scoring =
+                computeScoring(fileAndWordList[cTopicIDAndWordList.filesNo], cTopicIDAndWordList.filesNo);
+            resultsPerFileArrays.push(
+                new ResultPerFile(
+                    cTopicIDAndWordList.filesNo,
+                    cTopicIDAndWordList.wordList,
+                    scoring));
+        }
+
+        // Sort by score
+        resultsPerFileArrays.sort(function (a, b) {
+            return b.scoring - a.scoring;
+        });
+
+        return resultsPerFileArrays;
+    }
+
+    /**
+     * Remove derivatives words from the list of words with the original word.
+     *
+     * @param {[TopicIDAndWordList]} obj Array that contains results for searched words
+     * @param {String} searchedWord search term typed by user
+     * @return {Array} Clean array results without duplicated and derivatives words
+     */
+    function removeDerivates(obj, searchedWord) {
+
+        var toResultObject = [];
+        for (var i in obj) {
+            var filesNo = obj[i].filesNo;
+            var wordList = obj[i].wordList;
+
+            // concat word results if word starts with the original word
+            var wordIndicesMap = {};
+            for (var j = 0; j < wordList.length; j++) {
+                var w = wordList[j].word;
+                if (searchInsideFilePath) {
+                    if (w.indexOf(searchedWord) != -1) {
+                        w = searchedWord;
+                    }
+                } else {
+                    if (startsWith(w, searchedWord)) {
+                        w = searchedWord;
+                    }
+                }
+
+                if (wordIndicesMap[w] == undefined) {
+                    wordIndicesMap[w] = wordList[j].indices;
+                } else {
+                    wordIndicesMap[w] = wordIndicesMap[w].concat(wordList[j].indices);
+                }
+            }
+
+            var newWordsAray = [];
+            for (var w in wordIndicesMap) {
+                newWordsAray.push(
+                    {
+                        word: w,
+                        indices: wordIndicesMap[w]
+                    }
+                );
+            }
+
+            toResultObject.push(new TopicIDAndWordList(filesNo, newWordsAray));
+        }
+
+        return toResultObject;
+    }
+
+    /**
+     * Object to keep the topicID and a list of words that was found in that topic.
+     *
+     * @param filesNo The topic ID or file number.
+     * @param {[obj]} wordList An array of {word, [idx]} objects.
+     * @constructor
+     */
+    function TopicIDAndWordList(filesNo, wordList) {
+        this.filesNo = filesNo;
+        this.wordList = wordList;
+    }
+
+
+// Object.
+// Add a new parameter - scoring.
+
+    /**
+     * An object containing the search result for a single topic.
+     * Contains pointer to the topicID and the list of words found.
+     *
+     * @param filenb The topic ID or number.
+     * @param {obj[]} wordsList The array with words separated.
+     * The object has form: {word: "flower"; indices: {1, 5, 7}}
+     * @param scoring The scoring associated with this topic.
+     *
+     * @constructor
+     */
+    function ResultPerFile(filenb, wordsList, scoring) {
+        this.filenb = filenb;
+        this.wordsList = wordsList;
+        this.scoring = scoring;
+    }
+
+    /**
+     * Compute score for one or more words for a given topic ID.
+     *
+     * @param words {[word: string, indices: [integer]]} The list with words separated by ','.
+     * @param topicID {number} The topic ID.
+     * @returns {number} The score for the given words.
+     */
+    function computeScoring(words, topicID) {
+        var sum = 0;
+
+        for (var jj = 0; jj < words.length; jj++) {
+            var cWord = words[jj].word;
+            // Check if the word was indexed
+            if (index.w[cWord] !== undefined) {
+                // w["flowering"]="1*5,3*7";
+                var topicIDScoreArray = index.w[cWord].split(',');
+                for (var ii = 0; ii < topicIDScoreArray.length; ii++) {
+                    var tidAndScore = topicIDScoreArray[ii].split('*');
+                    if (tidAndScore[0] == topicID) {
+                        sum += parseInt(tidAndScore[1]);
+                    }
+                }
+            }
+        }
+        return sum;
+    }
+
+    function compareWords(s1, s2) {
+        var t1 = s1.split(',');
+        var t2 = s2.split(',');
+        if (t1.length == t2.length) {
+            return 0;
+        } else if (t1.length > t2.length) {
+            return 1;
+        } else {
+            return -1;
+        }
+    }
+
+// Remove duplicate values from an array
+    function removeDuplicate(arr) {
+        var r = [];
+        o:for (var i = 0, n = arr.length; i < n; i++) {
+            for (var x = 0, y = r.length; x < y; x++) {
+                if (r[x] == arr[i]) continue o;
+            }
+            r[r.length] = arr[i];
+        }
+        return r;
+    }
+
+    function trim(str, chars) {
+        util.debug("Trim a string... " + str);
+        return ltrim(rtrim(str, chars), chars);
+    }
+
+    function ltrim(str, chars) {
+        chars = chars || "\\s";
+        return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
+    }
+
+    function rtrim(str, chars) {
+        chars = chars || "\\s";
+        return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
+    }
+
+    /**
+     * PATCH FOR BOOLEAN SEARCH
+     */
+
+    /**
+     * @description Object with resulted pages as array
+     * @param {[ResultPerFile]}resPerFileArray Array that contains partial results
+     * @constructor
+     */
+    function BooleanSearchOperand(resPerFileArray) {
+        this.value = resPerFileArray;
+
+        this.toString = function () {
+            var stringResult = "";
+
+            stringResult += "INDEX\t|\tfilenb\t|\tscoring\n";
+            for (var i = 0; i < this.value.length; i++) {
+                stringResult += i + ".\t\t|\t" + this.value[i].filenb + "\t\t|\t" + this.value[i].scoring + "\n";
+            }
+
+            return stringResult;
+        };
+
+        this.writeIDs = function () {
+            var stringResult = "";
+
+            for (var i = 0; i < this.value.length; i++) {
+                stringResult += this.value[i].filenb + " | ";
+            }
+
+            return stringResult;
+        };
+
+        /**
+         * Combine two search results using AND function.
+         *
+         * @param {BooleanSearchOperand} secondOperand The second boolean operand to combine with.
+         * @returns {BooleanSearchOperand} The AND operation result.
+         */
+        this.and = function and(secondOperand) {
+            if (typeof secondOperand == "undefined" || secondOperand == null) {
+                return this;
+            }
+            var result = [];
+
+            for (var x = 0; x < this.value.length; x++) {
+                var found = false;
+                for (var y = 0; y < secondOperand.value.length; y++) {
+                    if (this.value[x].filenb == secondOperand.value[y].filenb) {
+                        this.value[x].wordsList = this.value[x].wordsList.concat(secondOperand.value[y].wordsList);
+                        this.value[x].scoring += secondOperand.value[y].scoring;
+                        found = true;
+                        break;
+                    }
+                }
+                if (found) {
+                    result.push(this.value[x]);
+                }
+            }
+
+            this.value = result;
+
+            return this;
+        };
+
+        /**
+         * Conbine two search results using OR operator.
+         *
+         * @param {Pages} operand The second operand.
+         * @returns {BooleanSearchOperand} The new operand after applying the OR operator.
+         */
+        this.or = function or(operand) {
+            if (typeof operand == "undefined" || operand == null) {
+                return this;
+            }
+            this.value = this.value.concat(operand.value);
+            var result = [];
+
+            for (var i = 0; i < this.value.length; i++) {
+                var unique = true;
+                for (var j = 0; j < result.length; j++) {
+                    if (this.value[i].filenb == result[j].filenb) {
+                        result[j].wordsList = result[j].wordsList.concat(this.value[i].wordsList);
+                        var numberOfWords = result[j].wordsList.length;
+                        result[j].scoring = this.value[i].scoring + result[j].scoring;
+                        unique = false;
+                        break;
+                    }
+                }
+                if (unique) {
+                    result.push(this.value[i]);
+                }
+            }
+
+            this.value = result;
+
+            return this;
+        };
+
+        this.not = function not(newArray) {
+            if (typeof newArray == "undefined" || newArray == null) {
+                return this;
+            }
+            var result = [];
+
+            for (var x = 0; x < this.value.length; x++) {
+                var found = false;
+                for (var y = 0; y < newArray.value.length; y++) {
+                    if (this.value[x].filenb == newArray.value[y].filenb) {
+                        found = true;
+                    }
+                }
+                if (!found) {
+                    result.push(this.value[x]);
+                }
+            }
+
+            this.value = result;
+
+            return this;
+        };
+    }
+
+    /**
+     * Utility method to debug a message. By default delegated to the console.log, but it can be overwritten
+     * by other scripts.
+     *
+     * @param args The list with arguments.
+     */
+    function warn() {
+        var res = typeof console.log;
+        if (res === "function") {
+            console.warn(console, arguments);
+        }
+    }
+
+    /**
+     * Utility method to debug a message. By default delegated to the console.log, but it can be overwritten
+     * by other scripts.
+     *
+     * @param args The list with arguments.
+     */
+    function info() {
+        var res = typeof console.info;
+        if (res === "function") {
+            console.info.apply(console, arguments);
+        }
+    }
+
+
+    // Return true if "word1" starts with "word2"
+    function startsWith(word1, word2) {
+        var prefix = false;
+        if (word1 !== null && word2 !== null) {
+            if (word2.length <= word1.length) {
+                prefix = true;
+                for (var i = 0; i < word2.length; i++) {
+                    if (word1.charAt(i) !== word2.charAt(i)) {
+                        prefix = false;
+                        break;
+                    }
+                }
+            }
+        } else {
+            if (word1 !== null) {
+                prefix = true;
+            }
+        }
+        return prefix;
+    }
+
+    /**
+     * Detect if a search token seems to be an URL or file path.
+     *
+     * @param toTest The search expression.
+     * @returns {boolean} True if the search query seems to be an URL or file path.
+     */
+    function isURLorFilePath(toTest) {
+        var re = new RegExp('[\./\\\-:_]');
+        return re.test(toTest);
+    }
+
+    return {
+        performSearch: performSearchDriver
+    }
+
+});

+ 22 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/search-init.js

@@ -0,0 +1,22 @@
+define(['util', 'jquery'], function(util, $) {
+    $(document).ready(function () {
+        var searchQuery = '';
+        searchQuery = util.getParameter('searchQuery');
+        searchQuery = decodeURIComponent(searchQuery);
+        searchQuery = searchQuery.replace(/\+/g, " ");
+        if (searchQuery.trim() != '' && searchQuery !== undefined && searchQuery != 'undefined') {
+            $('#textToSearch').val(searchQuery);
+            $('#searchForm').submit();
+        }
+        
+        $('#searchForm').on('submit', function(event){
+            util.debug('submit form....');
+            if ($('#textToSearch').val().trim()=='') {
+                event.preventDefault();
+                event.stopPropagation();
+
+                return false;
+            }
+        });
+    });
+});

+ 48 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/search.css

@@ -0,0 +1,48 @@
+/* Search pre-loader */
+.searchPreload {
+    padding: 0 .5em;
+}
+
+.searchPreload ul {
+    padding: 0;
+}
+
+.searchPreload li {
+    list-style: none;
+}
+
+.fakeResult{
+    margin: 35px 0;
+    overflow: hidden;
+}
+
+.fakeTitle {
+    width: 20%;
+    height: 1.1em;
+    margin: 5px 0 10px 0;
+    background-color: #cccccc;
+    overflow: hidden;
+}
+
+.fakeText {
+    height: 1em;
+    margin: 5px 0;
+    background-color: #eaecec;
+    position: relative;
+    overflow: hidden;
+}
+
+.fakeText:before{
+    display: block;
+    position: absolute;
+    content: "";
+    width: 40px;
+    height: 1em;
+    background-color: #f3f3f3;
+    animation: loading 3s linear infinite;
+}
+
+@keyframes loading {
+    from {left: 0}
+    to {left: 100%;}
+}

+ 782 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/search.js

@@ -0,0 +1,782 @@
+define(['util', 'options', 'nwSearchFnt', 'searchHistoryItems', 'localization', 'jquery', 'jquery.highlight', 'jquery.bootpag'], function(util, options, nwSearchFnt, searchHistory, i18n, $) {
+
+    /*
+    	Oxygen WebHelp Plugin
+    	Copyright (c) 1998-2020 Syncro Soft SRL, Romania.  All rights reserved.
+    */
+
+    var txt_browser_not_supported = "Your browser is not supported. Use of Mozilla Firefox is recommended.";
+
+    /**
+     * Constant with maximum search items presented for a single page.
+     * @type {number}
+     */
+    var maxItemsPerPage = 10;
+
+    /**
+     * Variable with total page number.
+     *
+     * @type {number}
+     */
+    var totalPageNumber = -1;
+
+    /**
+     * Last displayed search results items.
+     * @type {Array}
+     */
+    var lastSearchResultItems = [];
+
+    /**
+     * Last displayed search result.
+     * @type {Array}
+     */
+    var lastSearchResult;
+
+    /**
+     * When it is true, then the score is displayed as tooltip.
+     *
+     * @type {boolean}
+     */
+    var displayScore = false;
+
+    if(typeof String.prototype.trim !== 'function') {
+        String.prototype.trim = function() {
+            return $.trim(this);
+        }
+    }
+
+    $(document).ready(function () {
+        var searchQuery = '';
+        try {
+            searchQuery = util.getParameter('searchQuery');
+            searchQuery = decodeURIComponent(searchQuery);
+            searchQuery = searchQuery.replace(/\+/g, " ");
+            if (searchQuery.trim()!='' && searchQuery!==undefined && searchQuery!='undefined') {
+                $('#textToSearch').val(searchQuery);
+                util.debug("Execute search");
+                executeQuery();
+                util.debug("Executed search");
+            }
+        } catch (e) {
+            util.debug("#########", e);
+        }
+
+        $('.gcse-searchresults-only').attr('data-queryParameterName', 'searchQuery');
+
+        // Select page from parameter in the pages widget
+        window.onpopstate = function(event) {
+            if (lastSearchResultItems != null && lastSearchResult != null) {
+                // Get the value for the 'page' parameter
+                var pageToShow = util.getParameter("page");
+
+                // Set to 1 if it is undefined
+                if (pageToShow == undefined || pageToShow == "undefined" || pageToShow == "") {
+                    pageToShow = 1;
+                } else {
+                    pageToShow = parseInt(pageToShow);
+                    if (isNaN(pageToShow)) {
+                        pageToShow = 1;
+                    }
+                }
+
+                displayPageResults(pageToShow);
+
+                // Update the active page
+                $('.pagination li[class~="active"]').removeClass("active");
+                $('.pagination li[data-lp="' + pageToShow + '"]:not([class~="prev"]):not([class~="next"])').addClass("active");
+
+            }
+        };
+        
+        $('#searchForm').on('submit', function(event){
+            util.debug('submit form....');
+            if ($('#textToSearch').val().trim()=='') {
+                event.preventDefault();
+                event.stopPropagation();
+
+                return false;
+            }
+        });
+    });
+
+
+    /**
+     * @description Search using Google Search if it is available, otherwise use our search engine to execute the query
+     * @return {boolean} Always return false
+     */
+    function executeQuery() {
+        util.debug("executeQuery");
+        var input = document.getElementById('textToSearch');
+        try {
+            var element = google.search.cse.element.getElement('searchresults-only0');
+        } catch (e) {
+            util.debug(e);
+        }
+        if (element != undefined) {
+            if (input.value == '') {
+                element.clearAllResults();
+            } else {
+                element.execute(input.value);
+            }
+        } else {
+            executeSearchQuery($("#textToSearch").val());
+        }
+
+        return false;
+    }
+
+    function clearHighlights() {
+
+    }
+
+    /**
+     * Execute search query with internal search engine.
+     *
+     * @description This function find all matches using the search term
+     * @param {HTMLObjectElement} ditaSearch_Form The search form from WebHelp page as HTML Object
+     */
+    function executeSearchQuery(query) {
+        util.debug('SearchToc(..)');
+
+        // Check browser compatibility
+        if (navigator.userAgent.indexOf("Konquerer") > -1) {
+            alert(i18n.getLocalization(txt_browser_not_supported));
+            return;
+        }
+
+        searchAndDisplayResults(query);
+    }
+
+    function searchAndDisplayResults(query) {
+        nwSearchFnt.performSearch(query, function(searchResult) {
+            if (searchResult.searchExpression.trim().length > 0 || searchResult.excluded.length > 0) {
+                displayResults(searchResult);
+            } else {
+                var error = searchResult.error;
+                if (typeof error != "undefined" && error.length > 0) {
+                    displayErrors(searchResult.error);
+                }
+            }
+        });
+
+    }
+
+    /**
+     * @description Display errors in HTML format
+     * @param {string} errorMsg
+     */
+    function displayErrors(errorMsg) {
+        var searchResultHTML = $('<p/>');
+        searchResultHTML.addClass('errorMessage')
+            .html(errorMsg);
+
+        $('#searchResults').html(searchResultHTML);
+    }
+
+    /**
+     * @description Display results in HTML format
+     * @param {SearchResult} searchResult The search result.
+     */
+    function displayResults(searchResult) {
+
+        preprocessSearchResult(searchResult, 'wh-responsive');
+
+        // Add search query to history
+        searchHistory.addSearchQueryToHistory(searchResult.originalSearchExpression);
+
+        var webhelpEnableSearchPagination = options.getBoolean("webhelp.search.enable.pagination");
+        var webhelpSearchNumberOfItems = options.getInteger("webhelp.search.page.numberOfItems");
+
+        if (webhelpEnableSearchPagination !== 'undefined' && webhelpEnableSearchPagination == false) {
+            // WH-1470 - Search pagination is disabled
+            maxItemsPerPage = Number.MAX_VALUE;
+        } else if (typeof webhelpSearchNumberOfItems !== 'undefined') {
+            // WH-1471 - Option to control the maximum numbers of items displayed for each page
+            maxItemsPerPage = webhelpSearchNumberOfItems;
+        }
+
+        // Compute the total page number
+        totalPageNumber =
+            Math.ceil(lastSearchResultItems.length / maxItemsPerPage);
+
+        // Get the value for the 'page' parameter
+        var pageToShow = util.getParameter("page");
+
+        // Set to 1 if it is undefined
+        if (pageToShow == undefined || pageToShow == "undefined" || pageToShow == "") {
+            pageToShow = 1;
+        } else {
+            pageToShow = parseInt(pageToShow);
+            if (isNaN(pageToShow)) {
+                pageToShow = 1;
+            }
+        }
+
+        // Display a page
+        displayPageResults(pageToShow);
+
+        if (totalPageNumber > 1) {
+            // Add pagination widget
+            $('#wh-search-pagination').bootpag({
+                total: totalPageNumber,          // total pages
+                page: pageToShow,            // default page
+                maxVisible: 10,     // visible pagination
+                leaps: false,         // next/prev leaps through maxVisible
+                next: i18n.getLocalization("next.page"),
+                prev: i18n.getLocalization("prev.page")
+            }).on("page", function(event, num){
+                util.debug("Display page with number: ", num);
+
+                // Replace or add the page query
+                var oldPage = util.getParameter("page");
+                var oldQuery = window.location.search;
+                var oldHref = window.location.href;
+                var oldLocation = oldHref.substr(0, oldHref.indexOf(oldQuery));
+
+                var newQuery = "";
+                if (oldPage == undefined || oldPage == "undefined" || oldPage == "") {
+                    newQuery = oldQuery + "&page=" + num;
+                } else {
+                    var re = new RegExp("(\\?|&)page\=" + oldPage);
+                    newQuery = oldQuery.replace(re, "$1page="+num);
+                }
+
+                window.history.pushState("searchPage" + num, document.title, oldLocation + newQuery);
+
+                displayPageResults(num);
+                /*$("#content").html("Page " + num); // or some ajax content loading...
+                 // ... after content load -> change total to 10
+                 $(this).bootpag({total: 10, maxVisible: 10});*/
+            });
+        }
+        // make bootpag compatible with Bootstrap 4.0
+        $('#wh-search-pagination').find('li').addClass('page-item');
+        $('#wh-search-pagination').find('a').addClass('page-link');
+
+        $("#search").trigger('click');
+    }
+
+    /**
+     * Display search results for a specific page.
+     *
+     * @param pageIdx The page index.
+     */
+    function displayPageResults(pageIdx) {
+        var searchResultHTML =
+            computeHTMLResult('wh-responsive', pageIdx, totalPageNumber, maxItemsPerPage);
+
+        $('#searchResults').html(searchResultHTML);
+        window.scrollTo(0, 0);
+    }
+
+
+    /***************************************************************************************
+     ******************************* searchCommon.js****************************************
+     **************************************************************************************/
+    /**
+     * An object containing the search result for a single topic/HTML page.
+     * Contains pointer to the topicID, title, short description and the list of words that were found.
+     *
+     * @param {string} topicID The ID of the topic. Can be used to identify unique a document in the search result.
+     * @param {string} relativePath The relative path to the topic.
+     * @param {string} title The topic title.
+     * @param {string} shortDescription The topic short description.
+     * @param {[string]} words The array with words contained by this topic.
+     * @param {int} scoring The search scoring computed for this document.
+     * @param {int} startsWith The number used to display 5 stars ranking.
+     * @param {int} resultID The search result ID.
+     * @param {int} linkID The search link ID.
+     * @param {[TopicInfo]} breadcrumb The breadcrumb of current document. Can be [].
+     * @constructor
+     */
+    function SearchResultInfo(topicID, relativePath, title, shortDescription, words, scoring, starWidth, resultID, linkID, breadcrumb) {
+        this.topicID = topicID;
+        this.relativePath = relativePath;
+        this.title = title;
+        this.shortDescription = shortDescription;
+        this.words = words;
+        this.scoring = scoring;
+        this.starWidth = starWidth;
+        this.resultID = resultID;
+        this.linkID = linkID;
+        this.similarResults = [];
+        this.breadcrumb = breadcrumb;
+    }
+
+    /**
+     * Pre process search result to compute similar results and scoring.
+     * The lastSearchResultItems variable will be updated.
+     *
+     * @param searchResult The seach result to process.
+     * @param whDistribution The WebHelp distribution.
+     */
+    function preprocessSearchResult(searchResult, whDistribution) {
+        lastSearchResult = searchResult;
+        lastSearchResultItems = [];
+
+        var wh_mobile =
+            (typeof whDistribution != 'undefined') && whDistribution == 'wh-mobile';
+        var wh_Classic =
+            (typeof whDistribution != 'undefined') && whDistribution == 'wh-classic';
+
+
+        if (searchResult.documents !== undefined && searchResult.documents.length > 0) {
+            var allPages = searchResult.documents;
+            
+            // WH-1943 - sort by scoring, title and short description
+            allPages.sort(function (first, second) {
+                var cRes = second.scoring -first.scoring;
+                if (cRes == 0) {
+                    cRes = second.title.localeCompare(first.title);
+                    if (cRes == 0) {
+                        cRes = second.shortDescription.localeCompare(first.shortDescription);
+                    }
+                }
+                return cRes;
+            });
+            // The score for fist item
+            var ttScore_first = 1;
+            if (allPages.length > 0) {
+                ttScore_first = allPages[0].scoring;
+            }
+
+            var currentSimilarPage={};
+            for (var page = 0; page < allPages.length; page++) {
+                /*debug("Page number: " + page);*/
+
+                if (allPages[page].relativePath == 'toc.html') {
+                    continue;
+                }
+
+                var starWidth = 0;
+                var webhelpSearchRanking = options.getBoolean("webhelp.search.ranking");
+                if (typeof webhelpSearchRanking != "undefined" && webhelpSearchRanking) {
+                    var hundredPercent = allPages[page].scoring + 100 * allPages[page].words.length;
+                    var numberOfWords = allPages[page].words.length;
+                    /*debug("hundredPercent: " + hundredPercent + "; ttScore_first: " + ttScore_first + "; numberOfWords: " + numberOfWords);*/
+                    var ttScore = allPages[page].scoring;
+
+                    // Fake value
+                    var maxNumberOfWords = allPages[page].words.length;
+                    starWidth = (ttScore * 100 / hundredPercent) / (ttScore_first / hundredPercent) * (numberOfWords / maxNumberOfWords);
+                    starWidth = starWidth < 10 ? (starWidth + 5) : starWidth;
+                    // Keep the 5 stars format
+                    if (starWidth > 85) {
+                        starWidth = 85;
+                    }
+                }
+
+                var idLink = 'foundLink' + page;
+                var idResult = 'foundResult' + page;
+
+                // topicID, relativePath, title, shortDescription, words, scoring, starWidth, resultID, linkID, similarResults
+                util.debug("page", page);
+                var csri = new SearchResultInfo(
+                    allPages[page].topicID,
+                    allPages[page].relativePath,
+                    allPages[page].title,
+                    allPages[page].shortDescription,
+                    allPages[page].words,
+                    allPages[page].scoring,
+                    starWidth,
+                    idResult,
+                    idLink,
+                    allPages[page].breadcrumb
+                );
+
+                // Similar pages
+                var similarPages = !wh_mobile && similarPage(allPages[page], allPages[page - 1]);
+                if (!similarPages) {
+                    currentSimilarPage = csri;
+                    lastSearchResultItems.push(csri);
+                } else {
+                    currentSimilarPage.similarResults.push(csri);
+                }
+
+            }
+        }
+    }
+
+    /**
+     * Compute the HTML to be displayed in the search results page.
+     *
+     * @param whDistribution The string with WebHelp distribution. One of wh-classic, wh-mobile or wh-responsive.
+     * @param pageNumber The page number to display.
+     * @param totalPageNumber The total page number.
+     * @param itemsPerPage The number of items to display on a page.
+     * @returns {string} The HTML to be displayed as search result.
+     */
+    function computeHTMLResult(whDistribution, pageNumber, totalPageNumber, itemsPerPage) {
+        // Empty jQuery element
+        var results = $();
+
+        var $wh_search_results_items = $();
+
+        if (lastSearchResult.searchExpression.length > 0) {
+            if (lastSearchResultItems.length > 0) {
+                $wh_search_results_items = $('<div/>', {
+                    class: 'wh_search_results_items'
+                });
+
+                // Start and end index depending on the current presented page
+                var s = 0;
+                var e = lastSearchResultItems.length;
+
+                if (typeof pageNumber != "undefined" && typeof itemsPerPage != "undefined") {
+                    s = (pageNumber - 1) * itemsPerPage;
+                    var next = s + itemsPerPage;
+                    e = Math.min(next, lastSearchResultItems.length);
+                }
+
+                // Result for: word1 word2
+                var txt_results_for = "Results for:";
+                var $headerHTML = $('<div/>', {
+                    class: 'wh_search_results_header'
+                });
+
+                var $whSearchResultsHeaderDocs = $('<div/>', {
+                    class: 'wh_search_results_header_docs'
+                }).html(
+                    lastSearchResultItems.length +
+                    ' ' +
+                    i18n.getLocalization(txt_results_for) + ' '
+                );
+
+                var $span = $('<span/>', {
+                    class: 'wh_search_expression'
+                }).html(lastSearchResult.originalSearchExpression);
+
+                $whSearchResultsHeaderDocs.append($span);
+                $headerHTML.append($whSearchResultsHeaderDocs);
+
+                if (typeof pageNumber != "undefined" && typeof totalPageNumber != "undefined" && totalPageNumber > 1) {
+                    var $wh_search_results_header_pages = $('<div/>', {
+                        class: 'wh_search_results_header_pages'
+                    }).html(i18n.getLocalization('Page') + ' ' + pageNumber + '/' + totalPageNumber);
+                    $headerHTML.append($wh_search_results_header_pages);
+                }
+
+                $wh_search_results_items.append($headerHTML);
+
+                // EXM-38967 Start numbering
+                var start = (pageNumber - 1) * 10 + 1;
+                var $ol = $('<ol/>', {
+                    class: 'searchresult',
+                    start: start
+                });
+
+                for (var page = s; page < e; page++) {
+                    var csri = lastSearchResultItems[page];
+
+                    var hasSimilarPages =
+                        csri.similarResults != null &&
+                        csri.similarResults.length > 0;
+
+                    var siHTML = computeSearchItemHTML(
+                        csri,
+                        whDistribution,
+                        hasSimilarPages,
+                        null);
+                    $ol.append(siHTML);
+
+                    if (hasSimilarPages) {
+                        // Add HTML for similar pages
+                        for (var smPage = 0; smPage < csri.similarResults.length; smPage++) {
+                            var simHTML = computeSearchItemHTML(
+                                csri.similarResults[smPage],
+                                whDistribution,
+                                false,
+                                csri.resultID);
+
+                            $ol.append(simHTML);
+                        }
+                    }
+                }
+
+                $wh_search_results_items.append($ol);
+
+                if ($wh_search_results_items.find('li').length == 0) {
+                    $wh_search_results_items = $('<div/>', {
+                        class: 'wh_search_results_for'
+                    });
+                    var $span = $('<span/>', {
+                        class: 'wh_search_expression'
+                    }).text(lastSearchResult.originalSearchExpression);
+
+                    $wh_search_results_items.append($span);
+                }
+            } else {
+                $wh_search_results_items = $('<div/>', {
+                    class: 'wh_search_results_for'
+                }).html(i18n.getLocalization('Search no results') + ' ');
+                var $span = $('<span/>', {
+                    class: 'wh_search_expression'
+                }).text(lastSearchResult.originalSearchExpression);
+                $wh_search_results_items.append($span);
+            }
+        } else {
+            // Search expression is empty. If there are stop words, display a message accordingly
+            if (lastSearchResult.excluded.length > 0) {
+                $wh_search_results_items = $();
+                var $p = $('<p/>', {
+                    class: 'wh_search_results_for'
+                }).html(i18n.getLocalization("no_results_only_stop_words1"));
+                $wh_search_results_items.append($p);
+
+                $p.html(i18n.getLocalization('no_results_only_stop_words2'));
+                $wh_search_results_items.append($p);
+            }
+        }
+
+        return $wh_search_results_items;
+    }
+
+    function computeSearchItemHTML(searchItem, whDistribution, hasSimilarPages, similarPageID) {
+        // New empty jQuery element
+        var htmlResult = $();
+
+        var wh_mobile =
+            (typeof whDistribution != 'undefined') && whDistribution == 'wh-mobile';
+        var wh_Classic =
+            (typeof whDistribution != 'undefined') && whDistribution == 'wh-classic';
+
+        var allSearchWords = lastSearchResult.searchExpression.split(" ");
+
+        var tempPath = searchItem.relativePath;
+
+        // EXM-27709 START
+        // Display words between '<' and '>' in title of search results.
+        var tempTitle = searchItem.title;
+        // EXM-27709 END
+        var tempShortDesc = searchItem.shortDescription;
+        var starWidth = searchItem.starWidth;
+        var rankingHTML = $();
+
+        var webhelpSearchRanking = options.getBoolean("webhelp.search.ranking");
+        if (!wh_mobile && (typeof webhelpSearchRanking != 'undefined') && webhelpSearchRanking) {
+            // Add rating values for scoring at the list of matches
+            rankingHTML = $("<div/>", {
+                id: 'rightDiv'
+            });
+            if (displayScore) {
+                rankingHTML.attr('title', 'Score: ' + searchItem.scoring);
+            }
+
+            var rankingStar =
+                $('<div/>', {
+                    id: 'star'
+                }).append(
+                    $('<div/>', {
+                        id: 'star0',
+                        class: 'star'
+                    }).append(
+                        $('<div/>', {
+                            id: 'starCur0',
+                            class: 'curr',
+                            style: 'width: ' + starWidth + 'px'
+                        }).append(
+                            $('<br/>', {
+                                style: 'clear: both;'
+                            })
+                        )
+                    )
+                );
+            rankingHTML.append(rankingStar);
+        }
+
+        var finalArray = searchItem.words;
+        var arrayStringAux = [];
+        var arrayString = '';
+        var indexerLanguage = options.getIndexerLanguage();
+        var useCJKTokenizing = !!(typeof indexerLanguage != "undefined" && (indexerLanguage == "zh" || indexerLanguage == "ko"));
+
+        for (var x in finalArray) {
+            if (finalArray[x].length >= 2 || useCJKTokenizing || (indexerLanguage == "ja" && finalArray[x].length >= 1)) {
+                arrayStringAux.push(finalArray[x]);
+            }
+        }
+        arrayString = arrayStringAux.toString();
+
+        // Add highlight param
+        if (!wh_Classic && !wh_mobile) {
+            tempPath += '?hl=' + encodeURIComponent(arrayString);
+        }
+
+        var idLink = searchItem.linkID;
+        var idResult = searchItem.resultID;
+
+        var link = 'return openAndHighlight(\'' + tempPath + '\', ' + arrayString + '\)';
+
+        // Create the search result item li
+        // Similar pages
+        if (similarPageID == null) {
+            htmlResult = $('<li/>', {
+                id: idResult
+            });
+        } else {
+            htmlResult = $('<li/>', {
+                id: idResult,
+                class: 'similarResult',
+                'data-similarTo': similarPageID
+            });
+        }
+
+        // The topic title of the search result item
+        var $a = $('<a/>', {
+            id: idLink,
+            href: tempPath,
+            class: 'foundResult'
+        }).html(tempTitle);
+        htmlResult.append($a);
+
+        // The breadcrumb
+        var breadcrumb = searchItem.breadcrumb;
+        util.debug('searchItem', searchItem);
+        util.debug('breadcrumb', breadcrumb);
+        if (breadcrumb !== undefined && breadcrumb.length > 0) {
+            // Show the breadcrumb
+            var breadcrumbHtml = $('<div>', {
+                class: 'search-breadcrumb',
+            });
+
+            var breadcrumbItems = $('<ol>');
+            breadcrumb.forEach(function (item) {
+                var li = $('<li>');
+                var span = $('<span>',
+                    {
+                        class: 'title'
+                    });
+                span.append($('<a>',
+                    {
+                        href: item.relativePath,
+                        html: item.title
+                    }));
+                li.append(span);
+                breadcrumbItems.append(li);
+            });
+
+            breadcrumbHtml.append(breadcrumbItems);
+            htmlResult.append(breadcrumbHtml);
+        }
+
+        // Short description
+        // Also check if we have a valid description
+        if ((tempShortDesc != "null" && tempShortDesc != '...')) {
+            var $shortDescriptionDIV = $('<div/>', {
+                class: 'shortdesclink'
+            }).html(tempShortDesc);
+
+            // Highlight the search words in short description
+            for (var si = 0; si < allSearchWords.length; si++) {
+                var sw = allSearchWords[si];
+                $shortDescriptionDIV.highlight(sw, 'search-shortdescription-highlight');
+            }
+
+            htmlResult.append($shortDescriptionDIV);
+        }
+
+        // Empty jQuery element
+        var searchItemInfo = $('<div/>', {
+            class: 'missingAndSimilar'
+        });
+
+        // Relative Path
+        $a = $('<a/>', {
+            href: tempPath
+        }).html(searchItem.relativePath);
+        if (wh_Classic) {
+            $a.attr('onclick', link);
+        }
+
+        var relPathStr = $('<div/>', {
+            class: 'relativePath'
+        }).append($a);
+
+        searchItemInfo.append(relPathStr);
+
+        // Missing words
+        if (!wh_mobile && allSearchWords.length != searchItem.words.length) {
+            var missingWords = [];
+            allSearchWords.forEach(function (word) {
+                if (searchItem.words.indexOf(word) == -1) {
+                    missingWords.push(word);
+                }
+            });
+
+            var missingHTML = $('<div/>', {
+                class: 'wh_missing_words'
+            });
+            missingHTML.html(i18n.getLocalization('missing') + ' : ');
+
+
+            for (var widx = 0; widx < missingWords.length; widx++) {
+                var $span = $('<span/>', {
+                    class: 'wh_missing_word'
+                }).html(missingWords[widx]);
+                missingHTML.append($span).append(' ');
+            }
+
+            searchItemInfo.append(missingHTML);
+        }
+
+        if (!wh_mobile && hasSimilarPages) {
+            var $similarHTML = $('<a/>', {
+                class: 'showSimilarPages'
+            }).html(i18n.getLocalization('Similar results') + '...');
+            $similarHTML.click(showSimilarResults);
+            searchItemInfo.append($similarHTML);
+        }
+
+        if (rankingHTML.html() != '' && searchItemInfo.html() != '') {
+            var $searchItemAdditionalData = $('<div/>', {
+                class: 'searchItemAdditionalData'
+            }).append(searchItemInfo).append(rankingHTML);
+
+            htmlResult.append($searchItemAdditionalData);
+        } else if (searchItemInfo.html() != '') {
+            htmlResult.append(searchItemInfo);
+        } else if (rankingHTML.html() != '') {
+            htmlResult.append(rankingHTML);
+        }
+
+        return htmlResult;
+    }
+
+    /**
+     * @description Compare two result pages to see if there are similar
+     * @param result1 Result page
+     * @param result2 Result page
+     * @returns {boolean} true - result pages are similar
+     *                    false - result pages are not similar
+     */
+    function similarPage(result1, result2) {
+        var toReturn = false;
+
+        if (result1 === undefined || result2 === undefined) {
+            return toReturn;
+        }
+
+        var pageTitle1 = result1.title;
+        var pageShortDesc1 = result1.shortDescription;
+
+        var pageTitle2 = result2.title;
+        var pageShortDesc2 = result2.shortDescription;
+
+        if (pageTitle1.trim() == pageTitle2.trim() && pageShortDesc1.trim() == pageShortDesc2.trim()) {
+            toReturn = true;
+        }
+
+        return toReturn;
+    }
+
+    /**
+     * @description Show similar results that are hidden by default
+     */
+    function showSimilarResults() {
+        var parentLiElement = $(this).parents('li[id]');
+        var currentResultId = parentLiElement.attr('id');
+
+        $('[data-similarTo="' + currentResultId + '"]').toggle();
+        $(this).toggleClass('expanded');
+    }
+});

+ 363 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/searchAutocomplete.js

@@ -0,0 +1,363 @@
+define(["keywords", "searchHistoryItems", "options", "jquery", "jquery.ui"], function(keywordsInfo, searchHistory, options, $) {
+
+// Install search autocomplete
+
+    $(document).ready(function () {
+        if (options.getBoolean("webhelp.enable.search.autocomplete")) {
+            var searchFunction = function (request, response) {
+                var searchTerm = request.term.toLowerCase();
+
+                // Get history proposals.
+                var historyItems = getHistoryProposals(searchTerm);
+
+                var titlePhrases = [];
+                var phraseIds = [];
+
+                var keywords = keywordsInfo.keywords;
+                var ph = keywordsInfo.ph;
+                var words = searchTerm.split(" ");
+                var sameHi;
+                // Iterate over words
+                for (var wi = 0; wi < words.length; wi++) {
+                    var cw = words[wi].trim();
+                    if (cw.length > 0) {
+                        // Iterate over keywords to find the ones that contains the word
+                        var newPhraseIds = [];
+                        for (var i = 0; i < keywords.length; i++) {
+                            if (keywords[i].w.toLowerCase().indexOf(cw) == 0) {
+                                // Word was found
+                                var phIds = keywords[i].p;
+                                for (var pj = 0; pj < phIds.length; pj++) {
+                                    var pid = phIds[pj];
+
+                                    if (wi == 0) {
+                                        newPhraseIds.push(pid);
+                                    } else {
+                                        // Keep only phrase indices that contains all words
+                                        if (phraseIds.indexOf(pid) != -1) {
+                                            newPhraseIds.push(pid);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        phraseIds = newPhraseIds;
+                    }
+                }
+
+                if (phraseIds.length > 0) {
+                    // Compute proposals from titles/keywords
+                    for (var pi = 0; pi < phraseIds.length; pi++) {
+                        var wIdx = ph[phraseIds[pi]];
+
+                        var pStr = "";
+                        for (var wi = 0; wi < wIdx.length; wi++) {
+                            var word = keywords[wIdx[wi]].w;
+                            if (wi == 0) {
+                                word = word.charAt(0).toUpperCase() + word.substr(1);
+                            }
+                            pStr += word;
+
+                            if (wi < wIdx.length - 1) {
+                                pStr += " ";
+                            }
+                        }
+
+                        // Test if items is already in history proposals
+                        for (var i = 0; i < historyItems.length; i++) {
+                            if (pStr.toLocaleLowerCase() == historyItems[i]) {
+                                sameHi = true;
+                                break;
+                            }
+                        }
+
+                        if (sameHi == null) {
+                            var hp = {
+                                label: pStr.toLowerCase(),
+                                value: pStr.toLowerCase(),
+                                type: "title"
+                            };
+                            titlePhrases.push(hp);
+                        }
+                    }
+                } else {
+                    var lastWord = words[words.length - 1];
+                    var beforeLastWord = request.term.substring(0, searchTerm.lastIndexOf(lastWord));
+
+                    for (var i = 0; i < keywords.length; i++) {
+                        if (keywords[i].w.toLowerCase().indexOf(cw) == 0) {
+                            var proposal = beforeLastWord + keywords[i].w;
+
+                            // Test if items is already in history proposals
+                            for (var j = 0; j < historyItems.length; j++) {
+                                if (proposal.toLocaleLowerCase() == historyItems[j]) {
+                                    sameHi = true;
+                                    break;
+                                }
+                            }
+
+                            if (sameHi == null) {
+                                var hp = {
+                                    label: proposal.toLowerCase(),
+                                    value: proposal.toLowerCase(),
+                                    type: "keyword"
+                                };
+
+                                titlePhrases.push(hp);
+                            }
+                        }
+                    }
+                }
+
+                var res = [];
+                res = res.concat(historyItems);
+                res = res.concat(titlePhrases);
+
+                response(res);
+            };
+
+            // Uncomment the following code if you want to take into account the border radius of the search input
+            /*
+            var leftMargin = parseInt($("#textToSearch").css("border-bottom-left-radius"));
+            var rightMargin = parseInt($("#textToSearch").css("border-bottom-right-radius"));
+            */
+
+            var autocompleteObj = $("#textToSearch").autocomplete({
+                source: searchFunction,
+                minLength: 3
+                // Uncomment the following code if you want to take into account the border radius of the search input
+                /*
+                ,
+                position: {my : "left+" + leftMargin + " top"}
+                */
+            });
+
+            // Close autocomplete on ENTER
+            $("#textToSearch").keydown(function (event) {
+                if (event.which == 13 && $("#textToSearch").length > 1) {
+                    $("#textToSearch").autocomplete("close");
+                    $("#searchForm").submit();
+                }
+            });
+
+            var auObj = autocompleteObj.data("ui-autocomplete");
+
+            // Set width of the autocomplete area
+            // Uncomment the following code if you want to take into account the border radius of the search input
+            /*
+            auObj._resizeMenu = function(){
+                this.menu.element.outerWidth( parseInt($("#textToSearch").outerWidth()) - leftMargin - rightMargin );
+            };
+            */
+
+            // Install a renderer
+            auObj._renderItem = function (ul, item) {
+                // Text to search
+                var tts = $("#textToSearch").val();
+
+                tts = tts.toLowerCase();
+                var words = tts.split(" ");
+
+                /*console.log("Render item:", item);*/
+
+                var proposal = item.label;
+
+                // Highlight words from search query
+                var pw = proposal.split(" ");
+                var newProposal = "";
+                for (var pwi = 0; pwi < pw.length; pwi++) {
+                    var cpw = pw[pwi];
+                    if (cpw.trim().length > 0) {
+
+                        // Iterate over words
+                        var added = false;
+                        for (var wi = 0; wi < words.length; wi++) {
+                            var w = words[wi].trim();
+                            if (w.length > 0) {
+                                // Iterate over keywords to find the ones
+                                // Highlight the text to search
+
+                                try {
+                                    w = w.replace("\\", "\\\\")
+                                        .replace(")", "\\)")
+                                        .replace("(", "\\(");
+                                    var cpwh = cpw.replace(
+                                        new RegExp("(" + w + ")", 'i'),
+                                        "<span class='search-autocomplete-proposal-hg'>$1</span>");
+                                } catch (e) {
+                                    debug(e);
+                                }
+
+                                if (cpwh != cpw) {
+                                    newProposal += cpwh;
+                                    added = true;
+                                    break;
+                                }
+                            }
+                        }
+
+                        if (!added) {
+                            newProposal += cpw;
+                        }
+
+                        if (pwi < pw.length - 1) {
+                            newProposal += " ";
+                        }
+                    }
+                }
+
+                var icon = "&nbsp;";
+                if (item.type == 'history') {
+                    icon = "h";
+                }
+                var proposalIcon =
+                    $("<span>", {
+                        class: "search-autocomplete-proposal-icon " + item.type,
+                        html: icon
+                    });
+
+                // span with proposal label
+                var proposalLabel =
+                    $("<span>", {
+                        class: "search-autocomplete-proposal-label",
+                        "data-value": item.value,
+                        html: newProposal
+                    });
+
+                // span with remove from history
+                var removeButton;
+                if (item.type == 'history') {
+                    removeButton =
+                        $("<span>", {
+                            class: "search-autocomplete-proposal-type-history",
+                            html: "<a data-value='" + item.value + "' class='oxy-icon oxy-icon-remove' />"
+                        });
+                    $(removeButton).find("a").on("click", function (event) {
+                        removeHistoryItem(this);
+
+                        // Do not close the menu
+                        event.preventDefault();
+                        event.stopPropagation();
+
+                        return false;
+                    });
+                }
+
+                var li = $("<li>", {
+                    class: "ui-menu-item",
+                    "data-value": item.value
+                });
+                var divWrapper = $("<div>", {
+                    class: "ui-menu-item-wrapper"
+                });
+                li.append(divWrapper);
+                divWrapper.append(proposalIcon).append(proposalLabel);
+
+                if (removeButton != null) {
+                    divWrapper.append(removeButton);
+                }
+
+                // If a search suggestion is chosen the form is submitted
+                li.find(".ui-menu-item-wrapper").on("click", function (event) {
+                    $("#textToSearch").val($(this).find(".search-autocomplete-proposal-label").attr('data-value'));
+                    $("#searchForm").submit();
+                });
+
+                return li.appendTo(ul);
+            };
+
+            $(window).resize(function () {
+                var autocompleteObj = $("#textToSearch").autocomplete("instance");
+                autocompleteObj.search();
+            });
+        }
+    });
+
+    /**
+     * Remove from local storage a history item.
+     *
+     * @param hi The renderer element.
+     * @returns {boolean}
+     */
+    function removeHistoryItem(hi) {
+
+        var historyItem = hi.getAttribute("data-value");
+        var removed = searchHistory.removeSearchHistoryItem(historyItem);
+
+        // Change label
+        if (removed) {
+            $(hi).attr("class", "oxy-icon oxy-icon-ok");
+            $(hi).parents("div").find(".search-autocomplete-proposal-label").addClass("removed-from-history");
+        }
+
+        // Do not close the menu
+        event.preventDefault();
+        event.stopPropagation();
+        return false;
+    }
+
+    /**
+     * Compute search proposals from history items.
+     *
+     * @param searchQuery  The search query.
+     * @returns {Array} The array with search proposals.
+     */
+    function getHistoryProposals(searchQuery) {
+        var toRet = [];
+        var historyItems = searchHistory.getHistorySearchItems();
+
+        if (historyItems != null) {
+            var words = searchQuery.split(" ");
+
+            for (var i = 0; i < historyItems.length; i++) {
+                /*console.log("History item", historyItems[i]);*/
+                // Test if history item match the serch query
+                if (matchSearchHistoryItem(historyItems[i], words)) {
+                    var hp = {
+                        label: historyItems[i],
+                        value: historyItems[i],
+                        type: "history"
+                    };
+                    toRet.push(hp);
+                } else {
+                    /*console.log("History item does not match...");*/
+                }
+            }
+        }
+
+        return toRet;
+    }
+
+    /**
+     * Test if a history item match all words from search query.
+     *
+     * @param historyPhrase The history phrase.
+     * @param words The list with words from search query.
+     * @returns {boolean} True if history item matches the search words.
+     */
+    function matchSearchHistoryItem(historyPhrase, words) {
+        // Iterate over words
+
+        var historyWords = historyPhrase.split(" ");
+        var allWordsMatch = true;
+
+        for (var wi = 0; wi < words.length && allWordsMatch; wi++) {
+            var cw = words[wi].trim();
+
+            if (cw.length > 0) {
+                // Iterate over keywords to find the ones that contains the word
+                var wordFound = false;
+                for (var i = 0; i < historyWords.length; i++) {
+                    if (historyWords[i].toLowerCase().indexOf(cw.toLowerCase()) == 0) {
+                        wordFound = true;
+                        break;
+                    }
+                }
+
+                allWordsMatch = allWordsMatch && wordFound;
+            }
+        }
+
+        return allWordsMatch;
+    }
+});

+ 176 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/searchHistoryItems.js

@@ -0,0 +1,176 @@
+define(['util', 'jquery'], function(util, $) {
+    /**
+     * The maximum number of items kept in local history for a specific WH output.
+     *
+     * @type {number}
+     */
+    var HISTORY_ITEMS_MAX_COUNT = 30;
+
+    /**
+     * Test if a browser local storage is available.
+     *
+     * @returns {boolean} Returns true if local storage is available.
+     */
+    function localStorageAvailable() {
+        try {
+            var storage = window["localStorage"],
+                x = '__storage_test__';
+            storage.setItem(x, x);
+            storage.removeItem(x);
+            return true;
+        }
+        catch (e) {
+            util.debug(e);
+            return false;
+        }
+    }
+
+    /**
+     * @returns {string} Get the key to use for reading from local storage. It is unique for a WH output.
+     */
+    function getSearchHistoryKey() {
+        var wh_root = $('meta[name=wh-path2root]').attr('content');
+        if (wh_root == null || wh_root == undefined || wh_root.length == 0) {
+            wh_root = "index.html";
+        } else {
+            wh_root += "index.html";
+        }
+
+        var wh_root_path = resolveRelativePath(wh_root);
+        return wh_root_path + "_search_history_items";
+    }
+
+    /**
+     * Resolve a relative path to the current browser location.
+     *
+     * @param relPath The relative path to resolve.
+     * @returns {string} The resolved URL.
+     */
+    function resolveRelativePath(relPath) {
+        var link = document.createElement("a");
+        link.href = relPath;
+        return (link.protocol + "//" + link.host + link.pathname + link.search + link.hash);
+    }
+
+    return {
+        /**
+         * Add a search query to the history.
+         *
+         * @param searchQuery The search query to add.
+         */
+        addSearchQueryToHistory: function (searchQuery) {
+            util.debug("Add search query to history: ", searchQuery);
+            if (localStorageAvailable()) {
+                searchQuery = searchQuery.toLowerCase();
+                var localStorageKey = getSearchHistoryKey();
+                try {
+                    var localStorageItems = window.localStorage.getItem(localStorageKey);
+                    if (!localStorageItems) {
+                        // Local storage is empty for the current WH output.
+                        var hItemsArray = [];
+                        hItemsArray.push(searchQuery);
+                        var valToSave = JSON.stringify(hItemsArray);
+                        util.debug("Save to local storage: ", valToSave)
+                        window.localStorage.setItem(localStorageKey, valToSave);
+                    } else {
+                        // There are local storage items for current WH output
+                        var lastSearchItemsArray = JSON.parse(localStorageItems);
+                        var idx = lastSearchItemsArray.indexOf(searchQuery);
+                        if (idx != -1) {
+                            // Promote history item
+                            util.debug("Promote history item:", lastSearchItemsArray);
+                            lastSearchItemsArray.splice(idx, 1);
+                        }
+
+                        // Add first
+                        lastSearchItemsArray.unshift(searchQuery);
+
+                        // Ensure local history items  do not exceed the MAX limit
+                        if (lastSearchItemsArray.length > HISTORY_ITEMS_MAX_COUNT) {
+                            lastSearchItemsArray.splice(HISTORY_ITEMS_MAX_COUNT);
+                        }
+
+                        // Save to local storage.
+                        var newVal = JSON.stringify(lastSearchItemsArray);
+                        window.localStorage.setItem(localStorageKey, newVal);
+
+                    }
+                } catch (e) {
+                    util.debug("Exception when trying to save to local storage: ", e);
+                    window.localStorage.removeItem(localStorageKey);
+                }
+
+            } else {
+                util.debug("Local storage is not available");
+            }
+        },
+
+        /**
+         * Get the search history items from local storage.
+         *
+         * @returns {Array} The array with search history items.
+         */
+        getHistorySearchItems: function () {
+            var toRet = [];
+            if (localStorageAvailable()) {
+                var localStorageKey = getSearchHistoryKey();
+
+                try {
+                    var lastLocalStorage = window.localStorage.getItem(localStorageKey);
+                    if (lastLocalStorage) {
+                        // Convert to array
+                        var lastSearchItemsArray = JSON.parse(lastLocalStorage);
+
+                        if (Array.isArray(lastSearchItemsArray)) {
+                            toRet = lastSearchItemsArray;
+                        }
+                    }
+                } catch (e) {
+                    util.debug("Exception when reading from local storage: ", e);
+                    window.localStorage.removeItem(localStorageKey);
+                }
+            }
+
+            return toRet;
+        },
+
+        /**
+         * Remove from local storage a history item.
+         *
+         * @param historyItem The history item to remove.
+         * @returns {boolean} True if item was removed.
+         */
+        removeSearchHistoryItem: function (historyItem) {
+            var removed = false;
+            if (localStorageAvailable()) {
+                var localStorageKey = getSearchHistoryKey();
+
+                try {
+                    var lastLocalStorage = window.localStorage.getItem(localStorageKey);
+                    if (lastLocalStorage) {
+                        // Convert to array
+                        var lastSearchItemsArray = JSON.parse(lastLocalStorage);
+
+                        if (Array.isArray(lastSearchItemsArray)) {
+                            historyItem = historyItem.toLowerCase();
+                            var idx = lastSearchItemsArray.indexOf(historyItem);
+                            if (idx != -1) {
+                                // Remove from local storage
+                                lastSearchItemsArray.splice(idx, 1);
+                                var newVal = JSON.stringify(lastSearchItemsArray);
+                                window.localStorage.setItem(localStorageKey, newVal);
+
+                                removed = true;
+                            }
+                        }
+                    }
+                } catch (e) {
+                    util.debug("Exception when removing from local storage: ", e);
+                    window.localStorage.removeItem(localStorageKey);
+                }
+            }
+
+            return removed;
+        }
+    }
+});

+ 247 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/stemmers/de_stemmer.js

@@ -0,0 +1,247 @@
+/*
+ * Author: Joder Illi
+ *
+ * Copyright (c) 2010, FormBlitz AG
+ * All rights reserved.
+ * Implementation of the stemming algorithm from http://snowball.tartarus.org/algorithms/german/stemmer.html
+ * Copyright of the algorithm is: Copyright (c) 2001, Dr Martin Porter and can be found at http://snowball.tartarus.org/license.php
+ *
+ * Redistribution and use in source and binary forms, with or without modification, is covered by the standard BSD license.
+ *
+ */
+
+//var stemmer = function Stemmer() {
+/*
+German includes the following accented forms,
+ä   ö   ü
+and a special letter, ß, equivalent to double s.
+The following letters are vowels:
+a   e   i   o   u   y   ä   ö   ü
+*/
+define(function () {
+    return function (word) {
+        /*
+        Put u and y between vowels into upper case
+        */
+        word = word.replace(/([aeiouyäöü])u([aeiouyäöü])/g, '$1U$2');
+        word = word.replace(/([aeiouyäöü])y([aeiouyäöü])/g, '$1Y$2');
+
+        /*
+        and then do the following mappings,
+        (a) replace ß with ss,
+        (a) replace ae with ä,                          Not doing these, have trouble with diphtongs
+        (a) replace oe with ö,                          Not doing these, have trouble with diphtongs
+        (a) replace ue with ü unless preceded by q.     Not doing these, have trouble with diphtongs
+        So in quelle, ue is not mapped to ü because it follows q, and in feuer it is not mapped because the first part of the rule changes it to feUer, so the u is not found.
+        */
+        word = word.replace(/ß/g, 'ss');
+        //word = word.replace(/ae/g, 'ä');
+        //word = word.replace(/oe/g, 'ö');
+        //word = word.replace(/([^q])ue/g, '$1ü');
+
+        /*
+        R1 and R2 are first set up in the standard way (see the note on R1 and R2), but then R1 is adjusted so that the region before it contains at least 3 letters.
+        R1 is the region after the first non-vowel following a vowel, or is the null region at the end of the word if there is no such non-vowel.
+        R2 is the region after the first non-vowel following a vowel in R1, or is the null region at the end of the word if there is no such non-vowel.
+        */
+
+        var r1Index = word.search(/[aeiouyäöü][^aeiouyäöü]/);
+        var r1 = '';
+        if (r1Index != -1) {
+            r1Index += 2;
+            r1 = word.substring(r1Index);
+        }
+
+        var r2Index = -1;
+        var r2 = '';
+
+        if (r1Index != -1) {
+            var r2Index = r1.search(/[aeiouyäöü][^aeiouyäöü]/);
+            if (r2Index != -1) {
+                r2Index += 2;
+                r2 = r1.substring(r2Index);
+                r2Index += r1Index;
+            } else {
+                r2 = '';
+            }
+        }
+
+        if (r1Index != -1 && r1Index < 3) {
+            r1Index = 3;
+            r1 = word.substring(r1Index);
+        }
+
+        /*
+        Define a valid s-ending as one of b, d, f, g, h, k, l, m, n, r or t.
+        Define a valid st-ending as the same list, excluding letter r.
+        */
+
+        /*
+        Do each of steps 1, 2 and 3.
+        */
+
+        /*
+        Step 1:
+        Search for the longest among the following suffixes,
+        (a) em   ern   er
+        (b) e   en   es
+        (c) s (preceded by a valid s-ending)
+        */
+        var a1Index = word.search(/(em|ern|er)$/g);
+        var b1Index = word.search(/(e|en|es)$/g);
+        var c1Index = word.search(/([bdfghklmnrt]s)$/g);
+        if (c1Index != -1) {
+            c1Index++;
+        }
+        var index1 = 10000;
+        var optionUsed1 = '';
+        if (a1Index != -1 && a1Index < index1) {
+            optionUsed1 = 'a';
+            index1 = a1Index;
+        }
+        if (b1Index != -1 && b1Index < index1) {
+            optionUsed1 = 'b';
+            index1 = b1Index;
+        }
+        if (c1Index != -1 && c1Index < index1) {
+            optionUsed1 = 'c';
+            index1 = c1Index;
+        }
+
+        /*
+        and delete if in R1. (Of course the letter of the valid s-ending is not necessarily in R1.) If an ending of group (b) is deleted, and the ending is preceded by niss, delete the final s.
+        (For example, äckern -> äck, ackers -> acker, armes -> arm, bedürfnissen -> bedürfnis)
+        */
+
+        if (index1 != 10000 && r1Index != -1) {
+            if (index1 >= r1Index) {
+                word = word.substring(0, index1);
+                if (optionUsed1 == 'b') {
+                    if (word.search(/niss$/) != -1) {
+                        word = word.substring(0, word.length - 1);
+                    }
+                }
+            }
+        }
+        /*
+        Step 2:
+        Search for the longest among the following suffixes,
+        (a) en   er   est
+        (b) st (preceded by a valid st-ending, itself preceded by at least 3 letters)
+        */
+
+        var a2Index = word.search(/(en|er|est)$/g);
+        var b2Index = word.search(/(.{3}[bdfghklmnt]st)$/g);
+        if (b2Index != -1) {
+            b2Index += 4;
+        }
+
+        var index2 = 10000;
+        var optionUsed2 = '';
+        if (a2Index != -1 && a2Index < index2) {
+            optionUsed2 = 'a';
+            index2 = a2Index;
+        }
+        if (b2Index != -1 && b2Index < index2) {
+            optionUsed2 = 'b';
+            index2 = b2Index;
+        }
+
+        /*
+        and delete if in R1.
+        (For example, derbsten -> derbst by step 1, and derbst -> derb by step 2, since b is a valid st-ending, and is preceded by just 3 letters)
+        */
+
+        if (index2 != 10000 && r1Index != -1) {
+            if (index2 >= r1Index) {
+                word = word.substring(0, index2);
+            }
+        }
+
+        /*
+        Step 3: d-suffixes (*)
+        Search for the longest among the following suffixes, and perform the action indicated.
+        end   ung
+            delete if in R2
+            if preceded by ig, delete if in R2 and not preceded by e
+        ig   ik   isch
+            delete if in R2 and not preceded by e
+        lich   heit
+            delete if in R2
+            if preceded by er or en, delete if in R1
+        keit
+            delete if in R2
+            if preceded by lich or ig, delete if in R2
+        */
+
+        var a3Index = word.search(/(end|ung)$/g);
+        var b3Index = word.search(/[^e](ig|ik|isch)$/g);
+        var c3Index = word.search(/(lich|heit)$/g);
+        var d3Index = word.search(/(keit)$/g);
+        if (b3Index != -1) {
+            b3Index++;
+        }
+
+        var index3 = 10000;
+        var optionUsed3 = '';
+        if (a3Index != -1 && a3Index < index3) {
+            optionUsed3 = 'a';
+            index3 = a3Index;
+        }
+        if (b3Index != -1 && b3Index < index3) {
+            optionUsed3 = 'b';
+            index3 = b3Index;
+        }
+        if (c3Index != -1 && c3Index < index3) {
+            optionUsed3 = 'c';
+            index3 = c3Index;
+        }
+        if (d3Index != -1 && d3Index < index3) {
+            optionUsed3 = 'd';
+            index3 = d3Index;
+        }
+
+        if (index3 != 10000 && r2Index != -1) {
+            if (index3 >= r2Index) {
+                word = word.substring(0, index3);
+                var optionIndex = -1;
+                var optionSubsrt = '';
+                if (optionUsed3 == 'a') {
+                    optionIndex = word.search(/[^e](ig)$/);
+                    if (optionIndex != -1) {
+                        optionIndex++;
+                        if (optionIndex >= r2Index) {
+                            word = word.substring(0, optionIndex);
+                        }
+                    }
+                } else if (optionUsed3 == 'c') {
+                    optionIndex = word.search(/(er|en)$/);
+                    if (optionIndex != -1) {
+                        if (optionIndex >= r1Index) {
+                            word = word.substring(0, optionIndex);
+                        }
+                    }
+                } else if (optionUsed3 == 'd') {
+                    optionIndex = word.search(/(lich|ig)$/);
+                    if (optionIndex != -1) {
+                        if (optionIndex >= r2Index) {
+                            word = word.substring(0, optionIndex);
+                        }
+                    }
+                }
+            }
+        }
+
+        /*
+        Finally,
+        turn U and Y back into lower case, and remove the umlaut accent from a, o and u.
+        */
+        word = word.replace(/U/g, 'u');
+        word = word.replace(/Y/g, 'y');
+        word = word.replace(/ä/g, 'a');
+        word = word.replace(/ö/g, 'o');
+        word = word.replace(/ü/g, 'u');
+
+        return word;
+    };
+});

+ 204 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/stemmers/en_stemmer.js

@@ -0,0 +1,204 @@
+// Porter stemmer in Javascript. Few comments, but it's easy to follow against the rules in the original
+// paper, in
+//
+//  Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14,
+//  no. 3, pp 130-137,
+//
+// see also http://www.tartarus.org/~martin/PorterStemmer
+
+// Release 1 be 'andargor', Jul 2004
+// Release 2 (substantially revised) by Christopher McKenzie, Aug 2009
+
+
+define(function () {
+    return (function () {
+        var step2list = {
+                "ational": "ate",
+                "tional": "tion",
+                "enci": "ence",
+                "anci": "ance",
+                "izer": "ize",
+                "bli": "ble",
+                "alli": "al",
+                "entli": "ent",
+                "eli": "e",
+                "ousli": "ous",
+                "ization": "ize",
+                "ation": "ate",
+                "ator": "ate",
+                "alism": "al",
+                "iveness": "ive",
+                "fulness": "ful",
+                "ousness": "ous",
+                "aliti": "al",
+                "iviti": "ive",
+                "biliti": "ble",
+                "logi": "log"
+            },
+
+            step3list = {
+                "icate": "ic",
+                "ative": "",
+                "alize": "al",
+                "iciti": "ic",
+                "ical": "ic",
+                "ful": "",
+                "ness": ""
+            },
+
+            c = "[^aeiou]",          // consonant
+            v = "[aeiouy]",          // vowel
+            C = c + "[^aeiouy]*",    // consonant sequence
+            V = v + "[aeiou]*",      // vowel sequence
+
+            mgr0 = "^(" + C + ")?" + V + C,               // [C]VC... is m>0
+            meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$",  // [C]VC[V] is m=1
+            mgr1 = "^(" + C + ")?" + V + C + V + C,       // [C]VCVC... is m>1
+            s_v = "^(" + C + ")?" + v;                   // vowel in stem
+
+        return function (w) {
+            var stem,
+                suffix,
+                firstch,
+                re,
+                re2,
+                re3,
+                re4,
+                origword = w;
+
+            if (w.length < 3) {
+                return w;
+            }
+
+            firstch = w.substr(0, 1);
+            if (firstch == "y") {
+                w = firstch.toUpperCase() + w.substr(1);
+            }
+
+            // Step 1a
+            re = /^(.+?)(ss|i)es$/;
+            re2 = /^(.+?)([^s])s$/;
+
+            if (re.test(w)) {
+                w = w.replace(re, "$1$2");
+            }
+            else if (re2.test(w)) {
+                w = w.replace(re2, "$1$2");
+            }
+
+            // Step 1b
+            re = /^(.+?)eed$/;
+            re2 = /^(.+?)(ed|ing)$/;
+            if (re.test(w)) {
+                var fp = re.exec(w);
+                re = new RegExp(mgr0);
+                if (re.test(fp[1])) {
+                    re = /.$/;
+                    w = w.replace(re, "");
+                }
+            } else if (re2.test(w)) {
+                var fp = re2.exec(w);
+                stem = fp[1];
+                re2 = new RegExp(s_v);
+                if (re2.test(stem)) {
+                    w = stem;
+                    re2 = /(at|bl|iz)$/;
+                    re3 = new RegExp("([^aeiouylsz])\\1$");
+                    re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+                    if (re2.test(w)) {
+                        w = w + "e";
+                    }
+                    else if (re3.test(w)) {
+                        re = /.$/;
+                        w = w.replace(re, "");
+                    }
+                    else if (re4.test(w)) {
+                        w = w + "e";
+                    }
+                }
+            }
+
+            // Step 1c
+            re = /^(.+?)y$/;
+            if (re.test(w)) {
+                var fp = re.exec(w);
+                stem = fp[1];
+                re = new RegExp(s_v);
+                if (re.test(stem)) {
+                    w = stem + "i";
+                }
+            }
+
+            // Step 2
+            re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+            if (re.test(w)) {
+                var fp = re.exec(w);
+                stem = fp[1];
+                suffix = fp[2];
+                re = new RegExp(mgr0);
+                if (re.test(stem)) {
+                    w = stem + step2list[suffix];
+                }
+            }
+
+            // Step 3
+            re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+            if (re.test(w)) {
+                var fp = re.exec(w);
+                stem = fp[1];
+                suffix = fp[2];
+                re = new RegExp(mgr0);
+                if (re.test(stem)) {
+                    w = stem + step3list[suffix];
+                }
+            }
+
+            // Step 4
+            re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+            re2 = /^(.+?)(s|t)(ion)$/;
+            if (re.test(w)) {
+                var fp = re.exec(w);
+                stem = fp[1];
+                re = new RegExp(mgr1);
+                if (re.test(stem)) {
+                    w = stem;
+                }
+            } else if (re2.test(w)) {
+                var fp = re2.exec(w);
+                stem = fp[1] + fp[2];
+                re2 = new RegExp(mgr1);
+                if (re2.test(stem)) {
+                    w = stem;
+                }
+            }
+
+            // Step 5
+            re = /^(.+?)e$/;
+            if (re.test(w)) {
+                var fp = re.exec(w);
+                stem = fp[1];
+                re = new RegExp(mgr1);
+                re2 = new RegExp(meq1);
+                re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+                if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {
+                    w = stem;
+                }
+            }
+
+            re = /ll$/;
+            re2 = new RegExp(mgr1);
+            if (re.test(w) && re2.test(w)) {
+                re = /.$/;
+                w = w.replace(re, "");
+            }
+
+            // and turn initial Y back to y
+
+            if (firstch == "y") {
+                w = firstch.toLowerCase() + w.substr(1);
+            }
+
+            return w;
+        }
+    })();
+});

+ 276 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/stemmers/fr_stemmer.js

@@ -0,0 +1,276 @@
+/*
+ * Author: Kasun Gajasinghe
+ * E-Mail: kasunbg AT gmail DOT com
+ * Date: 09.08.2010
+ *
+ * usage: stemmer(word);
+ * ex: var stem = stemmer(foobar);
+ * Implementation of the stemming algorithm from http://snowball.tartarus.org/algorithms/french/stemmer.html
+ *
+ * LICENSE:
+ *
+ * Copyright (c) 2010, Kasun Gajasinghe. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *    1. Redistributions of source code must retain the above copyright notice,
+ *       this list of conditions and the following disclaimer.
+ *
+ *    2. Redistributions in binary form must reproduce the above copyright notice,
+ *       this list of conditions and the following disclaimer in the documentation
+ *       and/or other materials provided with the distribution.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY KASUN GAJASINGHE ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KASUN GAJASINGHE BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+define(function () {
+    return function (word) {
+//    Letters in French include the following accented forms,
+//        â   à   ç   ë   é   ê   è   ï   î   ô   û   ù
+//    The following letters are vowels:
+//        a   e   i   o   u   y   â   à   ë   é   ê   è   ï   î   ô   û   ù
+
+        word = word.toLowerCase();
+        var oriWord = word;
+        word = word.replace(/qu/g, 'qU');   //have to perform first, as after the operation, capital U is not treated as a vowel
+        word = word.replace(/([aeiouyâàëéêèïîôûù])u([aeiouyâàëéêèïîôûù])/g, '$1U$2');
+        word = word.replace(/([aeiouyâàëéêèïîôûù])i([aeiouyâàëéêèïîôûù])/g, '$1I$2');
+        word = word.replace(/([aeiouyâàëéêèïîôûù])y/g, '$1Y');
+        word = word.replace(/y([aeiouyâàëéêèïîôûù])/g, 'Y$1');
+
+        var rv = '';
+        var rvIndex = -1;
+        if (word.search(/^(par|col|tap)/) != -1 || word.search(/^[aeiouyâàëéêèïîôûù]{2}/) != -1) {
+            rv = word.substring(3);
+            rvIndex = 3;
+        } else {
+            rvIndex = word.substring(1).search(/[aeiouyâàëéêèïîôûù]/);
+            if (rvIndex != -1) {
+                rvIndex += 2;   //+2 is to supplement the substring(1) used to find rvIndex
+                rv = word.substring(rvIndex);
+            } else {
+                rvIndex = word.length;
+            }
+        }
+
+//    R1 is the region after the first non-vowel following a vowel, or the end of the word if there is no such non-vowel.
+//    R2 is the region after the first non-vowel following a vowel in R1, or the end of the word if there is no such non-vowel
+        var r1Index = word.search(/[aeiouyâàëéêèïîôûù][^aeiouyâàëéêèïîôûù]/);
+        var r1 = '';
+        if (r1Index != -1) {
+            r1Index += 2;
+            r1 = word.substring(r1Index);
+        } else {
+            r1Index = word.length;
+        }
+
+        var r2Index = -1;
+        var r2 = '';
+        if (r1Index != -1) {
+            r2Index = r1.search(/[aeiouyâàëéêèïîôûù][^aeiouyâàëéêèïîôûù]/);
+            if (r2Index != -1) {
+                r2Index += 2;
+                r2 = r1.substring(r2Index);
+                r2Index += r1Index;
+            } else {
+                r2 = '';
+                r2Index = word.length;
+            }
+        }
+        if (r1Index != -1 && r1Index < 3) {
+            r1Index = 3;
+            r1 = word.substring(r1Index);
+        }
+
+        /*
+        Step 1: Standard suffix removal
+        */
+        var a1Index = word.search(/(ance|iqUe|isme|able|iste|eux|ances|iqUes|ismes|ables|istes)$/);
+        var a2Index = word.search(/(atrice|ateur|ation|atrices|ateurs|ations)$/);
+        var a3Index = word.search(/(logie|logies)$/);
+        var a4Index = word.search(/(usion|ution|usions|utions)$/);
+        var a5Index = word.search(/(ence|ences)$/);
+        var a6Index = word.search(/(ement|ements)$/);
+        var a7Index = word.search(/(ité|ités)$/);
+        var a8Index = word.search(/(if|ive|ifs|ives)$/);
+        var a9Index = word.search(/(eaux)$/);
+        var a10Index = word.search(/(aux)$/);
+        var a11Index = word.search(/(euse|euses)$/);
+        var a12Index = word.search(/[^aeiouyâàëéêèïîôûù](issement|issements)$/);
+        var a13Index = word.search(/(amment)$/);
+        var a14Index = word.search(/(emment)$/);
+        var a15Index = word.search(/[aeiouyâàëéêèïîôûù](ment|ments)$/);
+
+        if (a1Index != -1 && a1Index >= r2Index) {
+            word = word.substring(0, a1Index);
+        } else if (a2Index != -1 && a2Index >= r2Index) {
+            word = word.substring(0, a2Index);
+            var a2Index2 = word.search(/(ic)$/);
+            if (a2Index2 != -1 && a2Index2 >= r2Index) {
+                word = word.substring(0, a2Index2);        //if preceded by ic, delete if in R2,
+            } else {                                //else replace by iqU
+                word = word.replace(/(ic)$/, 'iqU');
+            }
+        } else if (a3Index != -1 && a3Index >= r2Index) {
+            word = word.replace(/(logie|logies)$/, 'log');  //replace with log if in R2
+        } else if (a4Index != -1 && a4Index >= r2Index) {
+            word = word.replace(/(usion|ution|usions|utions)$/, 'u');  //replace with u if in R2
+        } else if (a5Index != -1 && a5Index >= r2Index) {
+            word = word.replace(/(ence|ences)$/, 'ent');  //replace with ent if in R2
+        } else if (a6Index != -1 && a6Index >= rvIndex) {
+            word = word.substring(0, a6Index);
+            if (word.search(/(iv)$/) >= r2Index) {
+                word = word.replace(/(iv)$/, '');
+                if (word.search(/(at)$/) >= r2Index) {
+                    word = word.replace(/(at)$/, '');
+                }
+            } else if (word.search(/(eus)$/) != -1) {
+                var a6Index2 = word.search(/(eus)$/);
+                if (a6Index2 >= r2Index) {
+                    word = word.substring(0, a6Index2);
+                } else if (a6Index2 >= r1Index) {
+                    word = word.substring(0, a6Index2) + "eux";
+                }
+            } else if (word.search(/(abl|iqU)$/) >= r2Index) {
+                word = word.replace(/(abl|iqU)$/, '');   //if preceded by abl or iqU, delete if in R2,
+            } else if (word.search(/(ièr|Ièr)$/) >= rvIndex) {
+                word = word.replace(/(ièr|Ièr)$/, 'i');   //if preceded by abl or iqU, delete if in R2,
+            }
+        } else if (a7Index != -1 && a7Index >= r2Index) {
+            word = word.substring(0, a7Index);   //delete if in R2
+            if (word.search(/(abil)$/) != -1) {   //if preceded by abil, delete if in R2, else replace by abl, otherwise,
+                var a7Index2 = word.search(/(abil)$/);
+                if (a7Index2 >= r2Index) {
+                    word = word.substring(0, a7Index2);
+                } else {
+                    word = word.substring(0, a7Index2) + "abl";
+                }
+            } else if (word.search(/(ic)$/) != -1) {
+                var a7Index3 = word.search(/(ic)$/);
+                if (a7Index3 != -1 && a7Index3 >= r2Index) {
+                    word = word.substring(0, a7Index3);        //if preceded by ic, delete if in R2,
+                } else {                                //else replace by iqU
+                    word = word.replace(/(ic)$/, 'iqU');
+                }
+            } else if (word.search(/(iv)$/) != r2Index) {
+                word = word.replace(/(iv)$/, '');
+            }
+        } else if (a8Index != -1 && a8Index >= r2Index) {
+            word = word.substring(0, a8Index);
+            if (word.search(/(at)$/) >= r2Index) {
+                word = word.replace(/(at)$/, '');
+                if (word.search(/(ic)$/) >= r2Index) {
+                    word = word.replace(/(ic)$/, '');
+                } else {
+                    word = word.replace(/(ic)$/, 'iqU');
+                }
+            }
+        } else if (a9Index != -1) {
+            word = word.replace(/(eaux)/, 'eau')
+        } else if (a10Index >= r1Index) {
+            word = word.replace(/(aux)/, 'al')
+        } else if (a11Index != -1) {
+            var a11Index2 = word.search(/(euse|euses)$/);
+            if (a11Index2 >= r2Index) {
+                word = word.substring(0, a11Index2);
+            } else if (a11Index2 >= r1Index) {
+                word = word.substring(0, a11Index2) + "eux";
+            }
+        } else if (a12Index != -1 && a12Index >= r1Index) {
+            word = word.substring(0, a12Index + 1);    //+1- amendment to non-vowel
+        } else if (a13Index != -1 && a13Index >= rvIndex) {
+            word = word.replace(/(amment)$/, 'ant');
+        } else if (a14Index != -1 && a14Index >= rvIndex) {
+            word = word.replace(/(emment)$/, 'ent');
+        } else if (a15Index != -1 && a15Index >= rvIndex) {
+            word = word.substring(0, a15Index + 1);
+        }
+
+        /* Step 2a: Verb suffixes beginning i*/
+        var wordStep1 = word;
+        var step2aDone = false;
+        if (oriWord == word.toLowerCase() || oriWord.search(/(amment|emment|ment|ments)$/) != -1) {
+            step2aDone = true;
+            var b1Regex = /([^aeiouyâàëéêèïîôûù])(îmes|ît|îtes|i|ie|ies|ir|ira|irai|iraIent|irais|irait|iras|irent|irez|iriez|irions|irons|iront|is|issaIent|issais|issait|issant|issante|issantes|issants|isse|issent|isses|issez|issiez|issions|issons|it)$/i;
+            if (word.search(b1Regex) >= rvIndex) {
+                word = word.replace(b1Regex, '$1');
+            }
+        }
+
+        /* Step 2b:  Other verb suffixes*/
+        if (step2aDone && wordStep1 == word) {
+            if (word.search(/(ions)$/) >= r2Index) {
+                word = word.replace(/(ions)$/, '');
+            } else {
+                var b2Regex = /(é|ée|ées|és|èrent|er|era|erai|eraIent|erais|erait|eras|erez|eriez|erions|erons|eront|ez|iez)$/i;
+                if (word.search(b2Regex) >= rvIndex) {
+                    word = word.replace(b2Regex, '');
+                } else {
+                    var b3Regex = /e(âmes|ât|âtes|a|ai|aIent|ais|ait|ant|ante|antes|ants|as|asse|assent|asses|assiez|assions)$/i;
+                    if (word.search(b3Regex) >= rvIndex) {
+                        word = word.replace(b3Regex, '');
+                    } else {
+                        var b3Regex2 = /(âmes|ât|âtes|a|ai|aIent|ais|ait|ant|ante|antes|ants|as|asse|assent|asses|assiez|assions)$/i;
+                        if (word.search(b3Regex2) >= rvIndex) {
+                            word = word.replace(b3Regex2, '');
+                        }
+                    }
+                }
+            }
+        }
+
+        if (oriWord != word.toLowerCase()) {
+            /* Step 3 */
+            var rep = '';
+            if (word.search(/Y$/) != -1) {
+                word = word.replace(/Y$/, 'i');
+            } else if (word.search(/ç$/) != -1) {
+                word = word.replace(/ç$/, 'c');
+            }
+        } else {
+            /* Step 4 */
+            //If the word ends s, not preceded by a, i, o, u, è or s, delete it.
+            if (word.search(/([^aiouès])s$/) >= rvIndex) {
+                word = word.replace(/([^aiouès])s$/, '$1');
+            }
+            var e1Index = word.search(/ion$/);
+            if (e1Index >= r2Index && word.search(/[st]ion$/) >= rvIndex) {
+                word = word.substring(0, e1Index);
+            } else {
+                var e2Index = word.search(/(ier|ière|Ier|Ière)$/);
+                if (e2Index != -1 && e2Index >= rvIndex) {
+                    word = word.substring(0, e2Index) + "i";
+                } else {
+                    if (word.search(/e$/) >= rvIndex) {
+                        word = word.replace(/e$/, '');   //delete last e
+                    } else if (word.search(/guë$/) >= rvIndex) {
+                        word = word.replace(/guë$/, 'gu');
+                    }
+                }
+            }
+        }
+
+        /* Step 5: Undouble */
+        //word = word.replace(/(en|on|et|el|eil)(n|t|l)$/,'$1');
+        word = word.replace(/(en|on)(n)$/, '$1');
+        word = word.replace(/(ett)$/, 'et');
+        word = word.replace(/(el|eil)(l)$/, '$1');
+
+        /* Step 6: Un-accent */
+        word = word.replace(/[éè]([^aeiouyâàëéêèïîôûù]+)$/, 'e$1');
+        word = word.toLowerCase();
+        return word;
+    };
+});
+
+

+ 40 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/stemmers/index.html

@@ -0,0 +1,40 @@
+<!DOCTYPE html SYSTEM "about:legacy-compat">
+<!--
+    
+Oxygen WebHelp Plugin
+Copyright (c) 1998-2016 Syncro Soft SRL, Romania.  All rights reserved.
+
+-->
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+        <title>WebHelp</title>
+			<meta http-equiv="REFRESH" content="0; url=../../"/>        
+    </head>
+    <body>            
+            Current generated project :
+            <!-- to be generated  -->
+<div id="productInfo" style="display:none;">
+	<span id="oxy_productid">@PRODUCT_ID@</span>
+	<span id="oxy_productVersion">@PRODUCT_VERSION@</span>
+</div>
+<!-- /to be generated  -->
+                 
+	<script type="text/javascript">
+        var pageSearch = window.location.href;
+        var pageWSearch = pageSearch.replace(window.location.search,"");
+        pageWSearch = pageWSearch.replace(window.location.hash,"");
+        var url=pageWSearch.split("/");
+        var newUrl="";
+        for ( var i = 0; i < url.length; i++) {
+        	if (url[i]=='oxygen-webhelp'){
+        		break;
+        	}else{    	    		
+    				newUrl=newUrl+url[i]+"/";
+        	}
+    		}    
+        document.location=newUrl;
+    </script>
+                                              
+    </body>
+</html>

+ 12 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/search/stemmers/stemmer.js

@@ -0,0 +1,12 @@
+define(["options", "en_stemmer", "de_stemmer", "fr_stemmer"], function(options, en_stemmer, de_stemmer, fr_stemmer) {
+    var indexerLang = options.getIndexerLanguage();
+    if (indexerLang == 'en') {
+        return en_stemmer;
+    } else if (indexerLang == 'de') {
+        return de_stemmer;
+    } else if (indexerLang == 'fr') {
+        return fr_stemmer;
+    } else {
+        // Do nothing
+    }
+});

+ 523 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/side-notes/p-side-notes.css

@@ -0,0 +1,523 @@
+/*
+
+Oxygen WebHelp Plugin
+Copyright (c) 1998-2020 Syncro Soft SRL, Romania.  All rights reserved.
+
+*/
+/*
+ * ==========================================
+ * 
+ * Side notes. These are the oXygen review processing instructions
+ * converted to elements. They are floating to one
+ * side of the page.
+ *
+ * For the WebHelp HTML output, the review elements are converted 
+ * to 'div' and 'span's having with a class name matching the name 
+ * of the element. 
+ * 
+ * ==========================================
+ */
+@namespace oxy "http://www.oxygenxml.com/extensions/author";
+
+ 
+@media screen {
+
+	oxy-attributes,
+    oxy-comment,
+    oxy-delete,
+    oxy-insert,
+    .oxy-attributes,
+    .oxy-comment,
+    .oxy-delete,
+    .oxy-insert {
+            margin: 0.5em;
+            width: 20%;
+            min-width:7em;                                          
+    }
+    
+    table oxy-attributes,
+    table oxy-comment,
+    table oxy-delete,
+    table oxy-insert,
+    table .oxy-attributes,
+    table .oxy-comment,
+    table .oxy-delete,
+    table .oxy-insert {
+            margin: 0.5em;
+            width: 50%;
+    }
+        
+}
+
+ 
+@media print, screen {
+
+	
+	/*
+	 * Main callouts properties.
+	 */
+    oxy-attributes,
+    oxy-comment,
+    oxy-delete,
+    oxy-insert,
+    .oxy-attributes,
+    .oxy-comment,
+    .oxy-delete,
+    .oxy-insert  {
+        font-size:small;
+        
+        font-weight:normal !important; /* Do not take text styles from the context. */
+        text-decoration:none !important;
+        
+        font-family:arial, helvetica, sans-serif;
+        
+        position:relative;
+        float: right;
+        clear:right;
+                
+        padding: 0.5em 1em 0.5em 1em;
+        
+        min-height:1em;
+        page-break-inside: avoid;
+       
+        border-radius: 10px;
+
+        link:attr(href);
+        -ah-link: attr(href);
+        -oxy-link: attr(href);
+        
+    }
+    
+
+    /*
+     * Style the comment replies.
+     */	
+	oxy-attributes   oxy-comment,
+    oxy-comment  	 oxy-comment,
+    oxy-delete  	 oxy-comment,
+    oxy-insert   	 oxy-comment,
+	.oxy-attributes .oxy-comment,
+    .oxy-comment  	.oxy-comment,
+    .oxy-delete  	.oxy-comment,
+    .oxy-insert  	.oxy-comment {
+		border-left: 2pt solid;
+	    padding-left: 0.5em;
+	    padding-right: 0;
+	    
+        margin: 2pt 0 2pt 10%;
+        width:90%;
+        border-radius: 0;
+    } 
+	
+	
+	/* 
+	 * Hide the links from the replies.
+	 */
+	oxy-attributes   oxy-comment:before,
+    oxy-comment      oxy-comment:before,
+    oxy-delete       oxy-comment:before,
+    oxy-insert       oxy-comment:before,
+	.oxy-attributes  .oxy-comment:before,
+    .oxy-comment     .oxy-comment:before,
+    .oxy-delete      .oxy-comment:before,
+    .oxy-insert      .oxy-comment:before {
+		display:none;
+    }
+    	
+    	
+	/*
+	 * Hide some meta information.
+	 */
+	oxy-comment-id,
+	oxy-comment-parent-id,
+	oxy-mid,
+	oxy-hour,
+	oxy-tz,
+	.oxy-comment-id,
+	.oxy-comment-parent-id,
+	.oxy-mid,
+	.oxy-hour,
+	.oxy-tz  {
+		display:none;
+	}
+	
+    
+    /* The ID of the change, like the number of a footnote. */
+    oxy-attributes[hr_id]:before,
+    oxy-comment[hr_id]:before,
+    oxy-delete[hr_id]:before,
+    oxy-insert[hr_id]:before{
+        content:'[' attr(hr_id) '] ';
+    }
+    
+    .oxy-attributes[hr_id]:before,
+    .oxy-comment[hr_id]:before,
+    .oxy-delete[hr_id]:before,
+    .oxy-insert[hr_id]:before{
+    	/* For HTML, the hr_id is missing, the link is created as an "A" element. */
+		content:none;
+    }
+
+
+
+    /* Author */
+    oxy-author,
+    .oxy-author {
+        font-weight:bold;
+    }
+    
+    /* Comment */
+    oxy-comment-text,
+    .oxy-comment-text{
+        display:block;
+        margin-top:0.5em;
+        margin-bottom:0.5em;
+    }
+        
+    /* Content of the change */    
+    oxy-content,
+    .oxy-content{
+        display:block;
+        margin-top:0.5em;
+        margin-bottom:0.5em;
+    }
+
+    oxy-delete > oxy-content,
+    .oxy-delete > .oxy-content  {
+        text-decoration:line-through;
+    }
+    oxy-insert > oxy-content,
+    .oxy-insert > .oxy-content  {
+        font-style:italic;
+    }
+    oxy-insert > oxy-content:before,
+    .oxy-insert > .oxy-content:before {
+        content:"<<";
+    }
+    oxy-insert > oxy-content:after,
+    .oxy-insert > .oxy-content:after  {
+        content:">>";
+    }
+     
+    /* Date */    
+    oxy-date,
+    .oxy-date {
+        display:block;
+        margin-top:0.5em;
+        margin-bottom:0.5em;
+        text-align:right;
+        font-size:0.8em;
+    }
+
+
+    /* Old and cuattribute value */    
+    oxy-old-value,
+    .oxy-old-value {
+        display:block;
+        text-decoration: line-through;    
+    }
+    
+    oxy-old-value:before,
+    .oxy-old-value:before,
+    oxy-current-value:before,
+    .oxy-current-value:before {
+        display:block;
+        font-weight:bold;
+        text-decoration:none;
+    }
+    
+    
+    
+    
+    oxy-current-value[unknown='true']:before,
+    .oxy-current-value[unknown='true']:before{
+    	content:"<< Cannot determine the current value >>";
+    	color:red;
+    }    
+    oxy-current-value,
+    .oxy-current-value
+     {
+        display:block;
+    }
+
+
+    oxy-attribute-change:before,
+    .oxy-attribute-change:before{
+        display:block;
+        content: " @" attr(name) "\A" attr(type)" by \A";
+        font-weight:bold;
+    }
+    
+
+    oxy-range-start,
+    .oxy-range-start,
+    oxy-range-end,
+    .oxy-range-end {
+    	display:inline;
+    	text-decoration: none;
+        font-weight: normal;
+        font-style: normal;
+    }
+
+    /*
+     * This is the link to the floated comment.
+     * This remains in the main content flow.
+     */
+    oxy-range-start:before,
+    .oxy-range-start:before {
+    	display:inline;
+        content:'[' attr(hr_id) ']';
+    }
+    
+    
+    /*
+     * This marks the end of the range. 
+     */
+    oxy-range-end:before,
+    .oxy-range-end:before {
+       	display:inline ;
+        content:'[/' attr(hr_id) ']';
+    }
+    
+}
+
+
+@media print {
+	
+	oxy-attributes,
+    oxy-comment,
+    oxy-delete,
+    oxy-insert,
+    .oxy-attributes,
+    .oxy-comment,
+    .oxy-delete,
+    .oxy-insert {
+            font-size:0.8rem;
+            margin: 0.5em -0.7in 0.5em 0.5em;
+            /* This should be correlated with the page margin from the p-page-size.css */
+            width: 1.5in;
+             
+    }        
+}
+
+
+/*
+ * 
+ * Colors
+ * 
+ */
+oxy-attributes,
+oxy-comment,
+oxy-delete,
+oxy-insert,
+.oxy-attributes,
+.oxy-comment,
+.oxy-delete,
+.oxy-insert  {
+        background-color: #FFFFAA;
+        color:black;
+}
+
+
+/*
+ * The highlight part.
+ * This is also built-in Chemistry processor, but if one uses other processors is good to have it here also.
+ */
+oxy-insert-hl,
+.oxy-insert-hl{
+    display:inline;
+    color:blue;
+	text-decoration:underline;    
+}
+oxy-delete-hl,
+.oxy-delete-hl {
+  	display:inline;
+	color:red;
+	text-decoration:line-through;
+}
+oxy-comment-hl,
+.oxy-comment-hl{
+	display:inline;
+    background-color:yellow;
+}
+oxy-color-hl[color],
+.oxy-color-hl[color]{
+	display:inline;
+    background-color:attr(color, color);
+}
+
+
+
+    
+/*
+ * The marked as done changes should be grayed out.
+ */
+oxy-attributes[flag~="done"],
+oxy-comment[flag~="done"],
+oxy-delete[flag~="done"],
+oxy-insert[flag~="done"],
+.oxy-attributes[flag~="done"],
+.oxy-comment[flag~="done"],
+.oxy-delete[flag~="done"],
+.oxy-insert[flag~="done"] {
+    color:gray;
+}       
+oxy-attributes,
+.oxy-attributes{
+    border-color:black;
+}
+oxy-comment,
+.oxy-comment{
+    border-color:transparent;
+}
+oxy-delete,
+.oxy-delete{
+    border-color:red;
+}
+oxy-insert,
+.oxy-insert{
+    border-color:blue;
+}
+oxy-range-start,
+.oxy-range-start,
+oxy-range-end,
+.oxy-range-end {
+    background-color: yellow;        
+}
+
+oxy-attributes   oxy-comment,
+oxy-comment  	 oxy-comment,
+oxy-delete  	 oxy-comment,
+oxy-insert   	 oxy-comment,
+.oxy-attributes .oxy-comment,
+.oxy-comment  	.oxy-comment,
+.oxy-delete  	.oxy-comment,
+.oxy-insert  	.oxy-comment {
+	border-left-color: orange;
+}
+
+
+
+/* 
+	Because Chemistry does not support the float:right, we use footnotes instead.
+	Starting with Chemistry 21 the oxy-attributes, oxy-comment, oxy-delete and oxy-insert are 
+	moved from footnotes to PDF annotations. To keep them as footnotes, use 
+	the -no-pdf-annotaotions-for-change-tracking-and-comments Chemistry command line parameter. 	
+*/
+
+@media oxygen-chemistry{
+	oxy-attributes,
+    oxy-comment,
+    oxy-delete,
+    oxy-insert,
+    .oxy-attributes,
+    .oxy-comment,
+    .oxy-delete,
+    .oxy-insert {
+    	margin: 0.5em;
+        position:static;
+        float: footnote;
+	}
+
+	/* Footnotes in footnotes are not allowed in the FO and they are not OK to represent the replies. 
+	   So leave the replies as normal blocks, inside the parent change.*/	
+	oxy-attributes oxy-comment,
+    oxy-comment oxy-comment,
+    oxy-delete oxy-comment,
+    oxy-insert oxy-comment,
+    .oxy-attributes .oxy-comment,
+    .oxy-comment .oxy-comment,
+    .oxy-delete .oxy-comment,
+    .oxy-insert .oxy-comment{
+        float:none;
+	}
+	
+	
+    oxy-attributes[hr_id]:before,
+    oxy-comment[hr_id]:before,
+    oxy-delete[hr_id]:before,
+    oxy-insert[hr_id]:before{
+        content:none;
+    }
+    
+    .oxy-attributes[hr_id]:before,
+    .oxy-comment[hr_id]:before,
+    .oxy-delete[hr_id]:before,
+    .oxy-insert[hr_id]:before{
+		content:none;
+    }
+
+    /* Do not leave the range id in the content, it creates confusion with the footnotes numbers. */
+    oxy-range-start,
+    .oxy-range-start,
+    oxy-range-end,
+    .oxy-range-end {
+    	background-color:inherit;
+        color:maroon;
+    }
+    oxy-range-start:before,
+    .oxy-range-start:before {
+        content:'{';
+        font-weight:bold;
+    }
+    oxy-range-end:before,
+    .oxy-range-end:before {
+        content:'}';
+        font-weight:bold;
+    }
+    
+    oxy-range-start[is-changebar]:before(100),
+    .oxy-range-start[is-changebar]:before(100) {
+        content: "";
+        display:-oxy-changebar-start;
+        -oxy-changebar-color: gray;
+        -oxy-changebar-width: 1.5pt;
+    }
+    oxy-range-end[is-changebar]:before(100),
+    .oxy-range-end[is-changebar]:before(100) {
+        content: "";
+    	display:-oxy-changebar-end;
+    }
+
+    /* Remove the link from the HTML output, we already have a link from the footnote marker to the call. */
+    .oxy-attributes > a,
+    .oxy-comment > a,
+    .oxy-delete > a,
+    .oxy-insert > a{
+        display:none;
+    }
+
+    oxy-attributes,
+    oxy-attributes:footnote-call,
+    oxy-attributes:footnote-marker,
+    .oxy-attributes,
+    .oxy-attributes:footnote-call,
+    .oxy-attributes:footnote-marker	{
+    	background-color:cyan;    
+	}	
+	oxy-comment,
+    oxy-comment:footnote-call,
+    oxy-comment:footnote-marker,
+    .oxy-comment,
+    .oxy-comment:footnote-call,
+    .oxy-comment:footnote-marker{
+    	background-color:#FFFFAA;    
+	}
+	oxy-delete,
+    oxy-delete:footnote-call,
+    oxy-delete:footnote-marker,
+    .oxy-delete,
+    .oxy-delete:footnote-call,
+    .oxy-delete:footnote-marker{
+    	background-color:#FFAAAA;    
+	}
+	oxy-insert,
+    oxy-insert:footnote-call,
+    oxy-insert:footnote-marker,
+    .oxy-insert,
+    .oxy-insert:footnote-call,
+    .oxy-insert:footnote-marker	{
+    	background-color:#DDDDFF;    
+	}
+    
+}

+ 62 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/template/template-module-loader.js

@@ -0,0 +1,62 @@
+/* Module that loads a user's custom module that was specified within the Publishing Template. */
+define(["options", "util", "require"], function (options, util, require) {
+    /**
+     * @type {string}
+     *
+     * The ID of the Publishing Template base directory as it is specified in the configuration
+     * object passed to the RequireJS library used to load the JS modules.
+     */
+    var TEMPLATE_BASE_DIR_ID = "template-base-dir";
+
+    /**
+     * @type {string}
+     *
+     * Specifies if the custom JavaScript module specified in the Publishing Template
+     * should be loaded or not.
+     */
+    var isTemplateJsModuleLoadingEnabled = options.getBoolean('webhelp.enable.template.js.module.loading');
+
+    /**
+     * @type {string}
+     *
+     * The path of the template's main JS module relative to the base directory of the Publishing Template.
+     */
+    var templateMainJsModuleRelPath = options.get('webhelp.js.module.rel.path');
+
+    if (isTemplateJsModuleLoadingEnabled && templateMainJsModuleRelPath) {
+        var templateMainJsID = getTemplateMainJsID(templateMainJsModuleRelPath);
+        try {
+            require(
+                [templateMainJsID],
+                function() {
+                   util.debug("Finished loading custom script:", templateMainJsModuleRelPath);
+                },
+                // Error callback
+                function(err) {
+                    console.error("Cannot load script:", templateMainJsModuleRelPath, err);
+                }
+            );
+        } catch(err) {
+            console.error("Cannot load script:", templateMainJsModuleRelPath, err);
+        }
+    }
+
+    /**
+     * Computes the ID of the template's main JS module.
+     *
+     * @param templateMainJsModuleRelPath The path of the template's main JS module
+     *                              relative to the base directory of the Publishing Template.
+     */
+    function getTemplateMainJsID(templateMainJsModuleRelPath) {
+        // Remove .js extension
+        var ext = ".js";
+        var templateMainJsRelPathNoExt;
+        if (templateMainJsModuleRelPath.endsWith(ext)) {
+            templateMainJsRelPathNoExt = templateMainJsModuleRelPath.substring(0, templateMainJsModuleRelPath.length - ext.length);
+        } else {
+            templateMainJsRelPathNoExt = templateMainJsModuleRelPath;
+        }
+
+        return TEMPLATE_BASE_DIR_ID + "/" + templateMainJsRelPathNoExt;
+    }
+});

+ 10 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/topic-page-basic.css

@@ -0,0 +1,10 @@
+@import "topic/commonltr.css?buildId=2020100301";
+
+/* Changes and comments, as side-notes. */
+@import "side-notes/p-side-notes.css?buildId=2020100301";
+
+/* Topic content styles. */
+@import "topic/topic.css?buildId=2020100301";
+
+
+

+ 4 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/topic-page-print.css

@@ -0,0 +1,4 @@
+@import "topic-page-basic.css";
+
+
+

+ 14 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/topic-page.css

@@ -0,0 +1,14 @@
+@import "topic-page-print.css?buildId=2020100301";
+
+/* Default styles. */
+@import "core/webhelp.css?buildId=2020100301";
+
+/* Top Menu and Publication TOC components styles. */
+@import "nav-links/nav-links.css?buildId=2020100301";
+
+
+/* Expand/collapse topic sections. */
+@import "core/expand.css?buildId=2020100301";
+
+/* Tooltip styles. */
+@import "nav-links/tooltip.css?buildId=2020100301";

+ 17 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/topic-page.js

@@ -0,0 +1,17 @@
+/**
+ * Load the libraries for the DITA topics pages.
+ */
+define(["require", "config"], function() {
+    require([
+        'polyfill',
+        'menu',
+        'toc',
+        'searchAutocomplete',
+        'webhelp',
+        'search-init',
+        'expand',
+        'image-map',
+        'template-module-loader',
+        'bootstrap'
+    ]);
+});

+ 704 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/topic/commonltr.css

@@ -0,0 +1,704 @@
+/*!
+ * This file is part of the DITA Open Toolkit project.
+ *
+ * Copyright 2015 Jarno Elovirta
+ *
+ * See the accompanying LICENSE file for applicable license.
+ */
+/*!
+ * This file is part of the DITA Open Toolkit project.
+ *
+ * Copyright 2004, 2005 IBM Corporation
+ *
+ * See the accompanying LICENSE file for applicable license.
+ */
+.hazardstatement td,
+.hazardstatement th {
+  padding: 0.5rem;
+}
+
+.hazardstatement th {
+  text-align: center;
+  text-transform: uppercase;
+}
+
+.hazardstatement--caution {
+  background-color: #ffd100;
+}
+
+.hazardstatement--danger {
+  background-color: #c8102e;
+  color: #fff;
+}
+
+.hazardstatement--warning {
+  background-color: #ff8200;
+}
+
+.hazardstatement--attention, .hazardstatement--fastpath, .hazardstatement--important, .hazardstatement--note, .hazardstatement--notice, .hazardstatement--other, .hazardstatement--remember, .hazardstatement--restriction, .hazardstatement--tip {
+  background-color: #0072ce;
+  color: #fff;
+  font-style: italic;
+}
+
+.codeblock {
+	font-family: monospace;
+}
+
+.codeph {
+	font-family: monospace;
+}
+
+.kwd {
+	font-weight: bold;
+}
+
+.parmname {
+	font-weight: bold;
+}
+
+.var {
+	font-style: italic;
+}
+
+.filepath {
+	font-family: monospace;
+}
+
+div.tasklabel {
+	margin-top: 1em;
+	margin-bottom: 1em;
+}
+
+h2.tasklabel,
+h3.tasklabel,
+h4.tasklabel,
+h5.tasklabel,
+h6.tasklabel {
+	font-size: 100%;
+}
+
+.screen {
+	padding: 5px 5px 5px 5px;
+	border: outset;
+	background-color: #CCCCCC;
+	margin-top: 2px;
+	margin-bottom: 2px;
+	white-space: pre;
+}
+
+.wintitle {
+	font-weight: bold;
+}
+
+.numcharref {
+	color: #663399;
+	font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.parameterentity {
+	color: #663399;
+	font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.textentity {
+	color: #663399;
+	font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.xmlatt {
+	color: #663399;
+	font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.xmlelement {
+	color: #663399;
+	font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.xmlnsname {
+	color: #663399;
+	font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.xmlpi {
+	color: #663399;
+	font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+.frame-top {
+	border-top: solid 1px;
+	border-right: 0;
+	border-bottom: 0;
+	border-left: 0;
+}
+
+.frame-bottom {
+	border-top: 0;
+	border-right: 0;
+	border-bottom: solid 1px;
+	border-left: 0;
+}
+
+.frame-topbot {
+	border-top: solid 1px;
+	border-right: 0;
+	border-bottom: solid 1px;
+	border-left: 0;
+}
+
+.frame-all {
+	border: solid 1px;
+}
+
+.frame-sides {
+	border-top: 0;
+	border-left: solid 1px;
+	border-right: solid 1px;
+	border-bottom: 0;
+}
+
+.frame-none {
+	border: 0;
+}
+
+.scale-50 {
+	font-size: 50%;
+}
+
+.scale-60 {
+	font-size: 60%;
+}
+
+.scale-70 {
+	font-size: 70%;
+}
+
+.scale-80 {
+	font-size: 80%;
+}
+
+.scale-90 {
+	font-size: 90%;
+}
+
+.scale-100 {
+	font-size: 100%;
+}
+
+.scale-110 {
+	font-size: 110%;
+}
+
+.scale-120 {
+	font-size: 120%;
+}
+
+.scale-140 {
+	font-size: 140%;
+}
+
+.scale-160 {
+	font-size: 160%;
+}
+
+.scale-180 {
+	font-size: 180%;
+}
+
+.scale-200 {
+	font-size: 200%;
+}
+
+.expanse-page, .expanse-spread {
+	width: 100%;
+}
+
+.fig {
+	/* Default of italics to set apart figure captions */
+	/* Use @frame to create frames on figures */
+}
+
+.figcap {
+	font-style: italic;
+}
+
+.figdesc {
+	font-style: normal;
+}
+
+.figborder {
+	border-color: Silver;
+	border-style: solid;
+	border-width: 2px;
+	margin-top: 1em;
+	padding-left: 3px;
+	padding-right: 3px;
+}
+
+.figsides {
+	border-color: Silver;
+	border-left: 2px solid;
+	border-right: 2px solid;
+	margin-top: 1em;
+	padding-left: 3px;
+	padding-right: 3px;
+}
+
+.figtop {
+	border-color: Silver;
+	border-top: 2px solid;
+	margin-top: 1em;
+}
+
+.figbottom {
+	border-bottom: 2px solid;
+	border-color: Silver;
+}
+
+.figtopbot {
+	border-bottom: 2px solid;
+	border-color: Silver;
+	border-top: 2px solid;
+	margin-top: 1em;
+}
+
+/* Align images based on @align on topic/image */
+div.imageleft {
+	text-align: left;
+}
+
+div.imagecenter {
+	text-align: center;
+}
+
+div.imageright {
+	text-align: right;
+}
+
+div.imagejustify {
+	text-align: justify;
+}
+
+/* Set heading sizes, getting smaller for deeper nesting */
+.topictitle1 {
+	font-size: 1.34em;
+	margin-bottom: 0.1em;
+	margin-top: 0;
+}
+
+.topictitle2 {
+	font-size: 1.17em;
+	margin-bottom: 0.45em;
+	margin-top: 1pc;
+}
+
+.topictitle3,
+.topictitle4,
+.topictitle5,
+.topictitle6 {
+	font-size: 1.17em;
+	font-weight: bold;
+	margin-bottom: 0.17em;
+	margin-top: 1pc;
+}
+
+.sectiontitle {
+	color: #000;
+	font-size: 1.17em;
+	font-weight: bold;
+	margin-bottom: 0;
+	margin-top: 1em;
+}
+
+.section {
+	margin-bottom: 1em;
+	margin-top: 1em;
+}
+
+.example {
+	margin-bottom: 1em;
+	margin-top: 1em;
+}
+
+/* Most link groups are created with <div>. Ensure they have space before and after. */
+.ullinks {
+	list-style-type: none;
+}
+
+.ulchildlink {
+	margin-bottom: 1em;
+	margin-top: 1em;
+}
+
+.olchildlink {
+	margin-bottom: 1em;
+	margin-top: 1em;
+}
+
+.linklist {
+	margin-top: 0em;
+	margin-bottom: 0em;
+}
+
+ul.linklist {
+  margin-top: 0;
+  list-style-type: none;
+  padding-left: 0;
+}
+
+.linklistwithchild {
+	margin-bottom: 1em;
+	margin-left: 1.5em;
+}
+
+.sublinklist {
+	margin-bottom: 1em;
+	margin-left: 1.5em;
+}
+
+.relconcepts {
+	margin-bottom: 1em;
+	margin-top: 1em;
+}
+
+.reltasks {
+	margin-bottom: 1em;
+	margin-top: 1em;
+}
+
+.relref {
+	margin-bottom: 1em;
+	margin-top: 1em;
+}
+
+.relinfo {
+	margin-bottom: 1em;
+	margin-top: 1em;
+}
+
+.breadcrumb {
+	font-size: smaller;
+	margin-bottom: 1em;
+}
+
+/* Simple lists do not get a bullet */
+ul.simple {
+	list-style-type: none;
+}
+
+/* Default of bold for definition list terms */
+.dlterm {
+	font-weight: bold;
+}
+
+/* Use CSS to expand lists with @compact="no" */
+.dltermexpand {
+	font-weight: bold;
+	margin-top: 1em;
+}
+
+*[compact="yes"] > li {
+	margin-top: 0;
+}
+
+*[compact="no"] > li {
+	margin-top: 0.53em;
+}
+
+.liexpand {
+	margin-bottom: 1em;
+	margin-top: 1em;
+}
+
+.sliexpand {
+	margin-bottom: 1em;
+	margin-top: 1em;
+}
+
+.dlexpand {
+	margin-bottom: 1em;
+	margin-top: 1em;
+}
+
+.ddexpand {
+	margin-bottom: 1em;
+	margin-top: 1em;
+}
+
+.stepexpand {
+	margin-bottom: 1em;
+	margin-top: 1em;
+}
+
+.substepexpand {
+	margin-bottom: 1em;
+	margin-top: 1em;
+}
+
+dt.prereq {
+	margin-left: 20px;
+}
+
+/* All note formats have the same default presentation */
+.note {
+	margin-bottom: 1em;
+	margin-top: 1em;
+}
+
+.note .notetitle,
+.note .notelisttitle, .note .note__title {
+	font-weight: bold;
+}
+
+/* Various basic phrase styles */
+.bold {
+	font-weight: bold;
+}
+
+.bolditalic {
+	font-style: italic;
+	font-weight: bold;
+}
+
+.italic {
+	font-style: italic;
+}
+
+.underlined {
+	text-decoration: underline;
+}
+
+.uicontrol {
+	font-weight: bold;
+}
+
+.defkwd {
+	font-weight: bold;
+	text-decoration: underline;
+}
+
+.shortcut {
+	text-decoration: underline;
+}
+
+.menucascade > abbr {
+	text-decoration: none;
+}
+
+table {
+	margin: 1em;
+	border-collapse: collapse;
+}
+
+table .desc {
+	display: block;
+	font-style: italic;
+}
+
+.cellrowborder {
+	border-bottom: solid 1px;
+	border-left: 0;
+	border-right: solid 1px;
+	border-top: 0;
+}
+
+.row-nocellborder {
+	border-bottom: solid 1px;
+	border-left: 0;
+	border-top: 0;
+}
+
+.cell-norowborder {
+	border-left: 0;
+	border-right: solid 1px;
+	border-top: 0;
+}
+
+.nocellnorowborder {
+	border: 0;
+}
+
+.firstcol {
+	font-weight: bold;
+}
+
+.table--pgwide-1 {
+	width: 100%;
+}
+
+.align-left {
+	text-align: left;
+}
+
+.align-right {
+	text-align: right;
+}
+
+.align-center {
+	text-align: center;
+}
+
+.align-justify {
+	text-align: justify;
+}
+
+.align-char {
+	text-align: char;
+}
+
+.valign-top {
+	vertical-align: top;
+}
+
+.valign-bottom {
+	vertical-align: bottom;
+}
+
+.valign-middle {
+	vertical-align: middle;
+}
+
+.colsep-0 {
+	border-right: 0;
+}
+
+.colsep-1 {
+	border-right: 1px solid;
+}
+
+.rowsep-0 {
+	border-bottom: 0;
+}
+
+.rowsep-1 {
+	border-bottom: 1px solid;
+}
+
+.stentry {
+	border-right: 1px solid;
+	border-bottom: 1px solid;
+}
+
+.stentry:last-child {
+	border-right: 0;
+}
+
+.strow:last-child .stentry {
+	border-bottom: 0;
+}
+
+/* Add space for top level topics */
+.nested0 {
+	margin-top: 1em;
+}
+
+.linklist {
+	margin-top: 0em;
+	margin-bottom: 0em;
+}
+
+.linklistwithchild {
+	margin-right: 1.5em;
+	margin-top: 1em;
+}
+
+.sublinklist {
+	margin-right: 1.5em;
+	margin-top: 1em;
+}
+
+dt.prereq {
+	margin-right: 20px;
+}
+
+.cellrowborder {
+	border-left: solid 1px;
+	border-right: none;
+}
+
+.row-nocellborder {
+	border-left: hidden;
+	border-right: none;
+}
+
+.cell-norowborder {
+	border-left: solid 1px;
+	border-right: none;
+}
+
+.nocellnorowborder {
+	border-left: hidden;
+}
+
+ /*Overrides for right-to-left languages*/
+
+*[dir='rtl'] .linklist,
+*[dir] *[dir='rtl'] .linklist,
+*[dir] *[dir] *[dir='rtl'] .linklist,
+*[dir] *[dir] *[dir] *[dir='rtl'] .linklist,
+*[dir] *[dir] *[dir] *[dir] *[dir='rtl'] .linklist {
+   margin-top: 0em;
+   margin-bottom: 0em;
+}
+
+*[dir='rtl'] .linklistwithchild,
+*[dir] *[dir='rtl'] .linklistwithchild,
+*[dir] *[dir] *[dir='rtl'] .linklistwithchild,
+*[dir] *[dir] *[dir] *[dir='rtl'] .linklistwithchild,
+*[dir] *[dir] *[dir] *[dir] *[dir='rtl'] .linklistwithchild {
+	margin-right: 1.5em;
+	margin-top: 1em;
+}
+
+*[dir='rtl'] .sublinklist,
+*[dir] *[dir='rtl'] .sublinklist,
+*[dir] *[dir] *[dir='rtl'] .sublinklist,
+*[dir] *[dir] *[dir] *[dir='rtl'] .sublinklist,
+*[dir] *[dir] *[dir] *[dir] *[dir='rtl'] .sublinklist {
+	margin-right: 1.5em;
+	margin-top: 1em;
+}
+
+*[dir='rtl'] dt.prereq,
+*[dir] *[dir='rtl'] dt.prereq,
+*[dir] *[dir] *[dir='rtl'] dt.prereq,
+*[dir] *[dir] *[dir] *[dir='rtl'] dt.prereq,
+*[dir] *[dir] *[dir] *[dir] *[dir='rtl'] dt.prereq {
+	margin-right: 20px;
+}
+
+*[dir='rtl'] .cellrowborder,
+*[dir] *[dir='rtl'] .cellrowborder,
+*[dir] *[dir] *[dir='rtl'] .cellrowborder,
+*[dir] *[dir] *[dir] *[dir='rtl'] .cellrowborder,
+*[dir] *[dir] *[dir] *[dir] *[dir='rtl'] .cellrowborder {
+	border-left: solid 1px;
+	border-right: none;
+}
+
+*[dir='rtl'] .row-nocellborder,
+*[dir] *[dir='rtl'] .row-nocellborder,
+*[dir] *[dir] *[dir='rtl'] .row-nocellborder,
+*[dir] *[dir] *[dir] *[dir='rtl'] .row-nocellborder,
+*[dir] *[dir] *[dir] *[dir] *[dir='rtl'] .row-nocellborder {
+	border-left: hidden;
+	border-right: none;
+}
+
+*[dir='rtl'] .cell-norowborder,
+*[dir] *[dir='rtl'] .cell-norowborder,
+*[dir] *[dir] *[dir='rtl'] .cell-norowborder,
+*[dir] *[dir] *[dir] *[dir='rtl'] .cell-norowborder,
+*[dir] *[dir] *[dir] *[dir] *[dir='rtl'] .cell-norowborder {
+	border-left: solid 1px;
+	border-right: none;
+}
+
+*[dir='rtl'] .nocellnorowborder,
+*[dir] *[dir='rtl'] .nocellnorowborder,
+*[dir] *[dir] *[dir='rtl'] .nocellnorowborder,
+*[dir] *[dir] *[dir] *[dir='rtl'] .nocellnorowborder,
+*[dir] *[dir] *[dir] *[dir] *[dir='rtl'] .nocellnorowborder {
+	border-left: hidden;
+}

+ 284 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/topic/elements.css

@@ -0,0 +1,284 @@
+/*
+
+Oxygen WebHelp Plugin
+Copyright (c) 1998-2020 Syncro Soft SRL, Romania.  All rights reserved.
+
+*/
+/* Use the admonitions from the oXygen WebHelp resources. */
+
+div.note>span.note__title{
+    background-repeat:no-repeat;
+    background-image:url("../img/note.svg") !important;
+    font-weight: bold;
+}
+
+span.note__title,
+*[dir] *[dir='ltr'] span.note__title,
+*[dir] *[dir] *[dir='ltr'] span.note__title,
+*[dir] *[dir] *[dir] *[dir='ltr'] span.note__title,
+*[dir] *[dir] *[dir] *[dir] *[dir='ltr'] span.note__title{
+    padding:4px 4px 4px 23px;
+    background-position:left;
+}
+
+span.note__title[dir='rtl'],
+*[dir] *[dir='rtl'] span.note__title,
+*[dir] *[dir] *[dir='rtl'] span.note__title,
+*[dir] *[dir] *[dir] *[dir='rtl'] span.note__title,
+*[dir] *[dir] *[dir] *[dir] *[dir='rtl'] span.note__title{
+    padding:4px 23px 4px 4px;
+    background-position:right;
+}
+
+
+div.warning>span.note__title{
+    background-image:url("../img/warning.svg") !important;
+}
+
+div.caution>span.note__title{
+    background-image:url("../img/caution.svg") !important;
+}
+
+div.trouble>span.note__title{
+    background-image:url("../img/troubleshooting.svg") !important;
+}
+
+div.important>span.note__title {
+    background-image:url("../img/important.svg") !important;
+}
+
+div.attention>span.note__title{
+    background-image:url("../img/attention.svg") !important;
+}
+
+div.notice>span.note__title{
+    background-image:url("../img/notice.svg") !important;
+}
+
+div.remember>span.note__title{
+    background-image:url("../img/remember.svg") !important;
+}
+
+div.fastpath>span.note__title{
+    background-image:url("../img/fastpath.svg") !important;
+}
+
+div.restriction>span.note__title{
+    background-image:url("../img/restriction.svg") !important;
+}
+
+div.danger>span.note__title{
+    background-image:url("../img/danger.svg") !important;
+}
+
+div.tip>span.note__title{
+    background-image:url("../img/tip.svg") !important;
+}
+
+/*
+ * Make the programlisting/codeblock stand-up.
+ */
+pre {
+  padding: 0.5em;
+  background-color: #EEE;
+  overflow: auto;
+  max-height: 600px;
+  margin: .5em 0 .5em .5em;
+} 
+
+code {
+    background-color: #EEE;
+}
+
+/*  OXYGEN PATCH  EXM-31508  - window titles and UI controls should be bold. */
+.uicontrol, .wintitle { font-weight: bold; }
+
+
+/* OXYGEN PATCH START - EXM-18138 - Insert space between button image and button name. */
+span.uicontrol > img {
+  padding-right: 5px;
+}
+/* OXYGEN PATCH END - EXM-18138 */
+
+/* OXYGEN PATCH START EXM-17248 - Center figure captions. */
+div.fignone p.figcap {
+  display:block;
+  text-align:left;
+  font-weight:bold;
+  padding:2px 10px 5px 10px;
+}
+
+div.fignone p.figcapcenter {
+  display:block;
+  text-align:center;
+  font-weight:bold;
+  padding:2px 10px 5px 10px;
+}
+
+div.fignone p.figcapright {
+  display:block;
+  text-align:right;
+  font-weight:bold;
+  padding:2px 10px 5px 10px;
+}
+
+div.fignone p.figcapjustify {
+  display:block;
+  text-align:justify;
+  font-weight:bold;
+  padding:2px 10px 5px 10px;
+}
+
+div.fignone img {
+  padding-top: 5px;
+  padding-left: 10px;
+  padding-right: 10px;
+}
+/* OXYGEN PATCH END EXM-17248 */
+
+.italic {
+    font-style:italic; 	 
+}
+.small {font-size:0.9em;}
+.hide {display:none;}
+.show {display:block;}
+.highlight { 
+    background-color: #FFFF88;
+    color: #000000;
+}
+
+@media screen{
+    .booklibrary, .booktitlealt {
+        display:none;
+    }
+}
+
+@media print {
+    .booklibrary, .booktitlealt {
+        font-size: smaller;
+    }
+}
+
+
+div.rate_page{float:left; width:400px; margin:40px 0 0 0;}
+div.rate_response {color:#555; font-size:0.9em;}
+.stars {
+  position:absolute;
+  width:105px;
+  height:16px;
+  left:140px;
+  margin:-15px 0 0 0;
+  background:url("../img/dot.png") no-repeat 0 1px;
+  overflow:hidden;
+  padding:0;
+}
+
+ul.stars li{  margin:0; height:20px; width:21px;position:absolute;float:left;list-style-type:none;}
+ul.stars li a{ text-decoration:none; position:absolute; overflow:hidden; padding:0; margin:0;}
+ul.stars li a:hover, ul.stars li a.show_star {
+    text-decoration:none;
+    background:url("../img/star.png") no-repeat 0 0;
+    height:25px;
+}
+input {margin:14px 0 0 0;}
+textarea.text-input{margin:4px 0 0 0; width:225px; height:100px; border:1px solid #ccc;}
+
+a#star1 { width:18px; z-index:6;  }
+a#star2 { width:40px; z-index:5; }
+a#star3 { width:60px; z-index:4; }
+a#star4 { width:80px; z-index:3; }
+a#star5 { width:100px; z-index:2; }
+
+div#rate_comment {clear:both; margin:14px 0 0 0;}
+div.rate_response {margin:-14px 0 0 0; }
+
+/* Conforms to the DITA spec. The HTML uses middle instead of top. */
+.simpletable td:not([valign]),
+.table td:not([valign]) {
+	vertical-align: top;
+}
+
+
+
+/*
+ * ------------------------------------------------------------------
+ *  
+ * Topic content
+ * 
+ */
+.wh_topic_content .related-links:empty{
+    display:none;
+}
+
+.sectiontitle {
+    /* EXM-37168: The section title should have the same color as the rest of the content. */
+    color:inherit;
+}
+
+/*
+ * Topic titles & subtitles
+ */
+.topictitle1 {
+    font-size: 2em;
+    margin-bottom: 1em;
+    font-weight: 400;
+}
+
+.topictitle2 {
+    margin: 1.5em 0 .5em 0;
+    font-size: 1.7em;
+    font-weight: 400;
+}
+
+.topictitle3,
+.topictitle4,
+.topictitle5,
+.topictitle6 {
+    margin: 1.3em 0 .4em 0;
+    font-size: 1.4em;
+    font-weight: 300;
+}
+
+@media screen {
+    .topictitle1,
+    .topictitle2,
+    .topictitle3,
+    .topictitle4,
+    .topictitle5,
+    .topictitle6 {
+        word-break: break-word;
+        overflow-wrap: break-word;
+        word-wrap: break-word;
+    }
+}
+
+.wh_child_links .olchildlinks,
+.wh_child_links .ullinks,
+.wh_child_links li {
+    list-style: none;
+    padding: 0;
+    margin: 0;
+}
+
+.wh_child_links strong {
+    font-weight: normal;
+}
+
+/* Remove/clean the extra markup generated by DITA-OT for the related links.*/
+.wh_related_links .desc{
+	display:none;
+}
+
+/* The CJK fonts do not support italic. */
+.figcap {
+	font-style: normal;
+}
+
+div.tasklabel {
+	margin-top: 0.8em;
+	margin-bottom: 0em;
+}
+
+div.tasklabel + * {
+	margin-top: 0em;
+}

+ 39 - 0
templates/out/webhelp-responsive/oxygen-webhelp/app/topic/print.css

@@ -0,0 +1,39 @@
+/*
+
+Oxygen WebHelp Plugin
+Copyright (c) 1998-2020 Syncro Soft SRL, Romania.  All rights reserved.
+
+*/
+
+@media print{
+  /**
+   * Hide header and footer
+   */
+  .nav,
+  .navheader,
+  .footer,
+  .navfooter,
+  #searchForm,
+  .wh_search_input,
+  .wh_header{
+    display:none !important;
+  }
+  
+  /**
+   * Remove shadows when printing.
+   */
+  *{
+    text-shadow:none !important;
+   }
+
+    body {
+        font-size: 11.5pt;
+        margin: auto;
+    }
+    .container {
+        width:100%;
+    }
+    *[class^="col-"], *[class^=" col-"] {
+        width: 100%;
+    }
+}

部分文件因为文件数量过多而无法显示