@healthcatalyst/catalyst-docfx-template 1.0.153 → 1.0.154
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/healthcatalyst-catalyst-docfx-template-1.0.154.tgz +0 -0
- package/layout/_master.tmpl +6 -4
- package/package.json +1 -1
- package/partials/breadcrumb.tmpl.partial +8 -0
- package/styles/main.css +2 -78
- package/healthcatalyst-catalyst-docfx-template-1.0.153.tgz +0 -0
- package/partials/searchResults.tmpl.partial +0 -9
- package/styles/docfx.js +0 -1198
- package/toc.html.primary.tmpl +0 -48
|
Binary file
|
package/layout/_master.tmpl
CHANGED
|
@@ -19,7 +19,12 @@
|
|
|
19
19
|
{{>partials/breadcrumb}}
|
|
20
20
|
{{/_enableBreadcrumb}}
|
|
21
21
|
</header>
|
|
22
|
-
|
|
22
|
+
{{#_enableSearch}}
|
|
23
|
+
<div class="container-fluid body-content">
|
|
24
|
+
{{>partials/searchResults}}
|
|
25
|
+
</div>
|
|
26
|
+
{{/_enableSearch}}
|
|
27
|
+
<div role="main" class="docs-container body-content hide-when-search">
|
|
23
28
|
{{^_enableToc}}
|
|
24
29
|
<div class="article row grid">
|
|
25
30
|
{{/_enableToc}}
|
|
@@ -44,9 +49,6 @@
|
|
|
44
49
|
<article class="content wrap" id="_content" data-uid="{{uid}}">
|
|
45
50
|
{{!body}}
|
|
46
51
|
</article>
|
|
47
|
-
{{#_enableSearch}}
|
|
48
|
-
{{>partials/searchResults}}
|
|
49
|
-
{{/_enableSearch}}
|
|
50
52
|
{{#_enableFeedback}}
|
|
51
53
|
{{>partials/feedback}}
|
|
52
54
|
{{/_enableFeedback}}
|
package/package.json
CHANGED
|
@@ -17,5 +17,13 @@
|
|
|
17
17
|
</ul>
|
|
18
18
|
</div>
|
|
19
19
|
</div>
|
|
20
|
+
<div class="docs-subnav-right" id="subnav-right">
|
|
21
|
+
<div class="docs-search">
|
|
22
|
+
<span class="docs-subnav-search-icon"><i class="fa fa-search" aria-hidden="true"></i></span>
|
|
23
|
+
<form role="search" id="search" style="display: block;">
|
|
24
|
+
<input type="text" id="search-query" placeholder="Search">
|
|
25
|
+
</form>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
20
28
|
</div>
|
|
21
29
|
</div>
|
package/styles/main.css
CHANGED
|
@@ -739,7 +739,6 @@ output {
|
|
|
739
739
|
|
|
740
740
|
#search {
|
|
741
741
|
border: none;
|
|
742
|
-
display:block;
|
|
743
742
|
}
|
|
744
743
|
|
|
745
744
|
|
|
@@ -1159,8 +1158,8 @@ output {
|
|
|
1159
1158
|
border: 1px lightgray solid;
|
|
1160
1159
|
display: flex;
|
|
1161
1160
|
align-items: center;
|
|
1162
|
-
width:
|
|
1163
|
-
|
|
1161
|
+
width: 180px;
|
|
1162
|
+
padding: 2px 2px 2px 10px;
|
|
1164
1163
|
margin: 6px 5px 6px auto;
|
|
1165
1164
|
}
|
|
1166
1165
|
|
|
@@ -2100,78 +2099,3 @@ article .tabGroup > ul > li {
|
|
|
2100
2099
|
#faqTable tr.header, #faqTable tr:hover {
|
|
2101
2100
|
background-color: #f1f1f1;
|
|
2102
2101
|
}
|
|
2103
|
-
|
|
2104
|
-
/* Side search styling */
|
|
2105
|
-
.sidefilter .docs-search {
|
|
2106
|
-
padding: 0px;
|
|
2107
|
-
background: transparent;
|
|
2108
|
-
border: 0px;
|
|
2109
|
-
}
|
|
2110
|
-
|
|
2111
|
-
.sidefilter .side-search {
|
|
2112
|
-
position: relative;
|
|
2113
|
-
display: flex;
|
|
2114
|
-
align-items: center;
|
|
2115
|
-
margin: 0;
|
|
2116
|
-
width:100%;
|
|
2117
|
-
}
|
|
2118
|
-
|
|
2119
|
-
.sidefilter #search-query {
|
|
2120
|
-
width: 100%;
|
|
2121
|
-
height:35px;
|
|
2122
|
-
padding: 8px 12px 8px 35px;
|
|
2123
|
-
border: 1px solid #ced4da;
|
|
2124
|
-
border-radius: 4px;
|
|
2125
|
-
font-size: 14px;
|
|
2126
|
-
box-sizing: border-box;
|
|
2127
|
-
background-color: #fff;
|
|
2128
|
-
outline: none;
|
|
2129
|
-
}
|
|
2130
|
-
|
|
2131
|
-
.sidefilter #search-query:focus {
|
|
2132
|
-
border-color: #00aeff;
|
|
2133
|
-
box-shadow: 0 0 0 0.2rem rgba(0, 174, 255, 0.25);
|
|
2134
|
-
}
|
|
2135
|
-
|
|
2136
|
-
.sidefilter #search-query::placeholder {
|
|
2137
|
-
color: #a1a1a1;
|
|
2138
|
-
opacity: 1;
|
|
2139
|
-
}
|
|
2140
|
-
|
|
2141
|
-
/* Search icon */
|
|
2142
|
-
.sidefilter .side-search::before {
|
|
2143
|
-
content: "\f002"; /* FontAwesome search icon */
|
|
2144
|
-
font-family: "FontAwesome", "Font Awesome 5 Free";
|
|
2145
|
-
font-weight: 900;
|
|
2146
|
-
position: absolute;
|
|
2147
|
-
left: 12px;
|
|
2148
|
-
top:50%;
|
|
2149
|
-
transform: translateY(-50%);
|
|
2150
|
-
color: #6c757d;
|
|
2151
|
-
pointer-events: none;
|
|
2152
|
-
z-index: 1;
|
|
2153
|
-
}
|
|
2154
|
-
|
|
2155
|
-
#search-results {
|
|
2156
|
-
max-width: 935px;
|
|
2157
|
-
margin: 0;
|
|
2158
|
-
padding: 0 0 32px;
|
|
2159
|
-
position: relative;
|
|
2160
|
-
z-index: 1;
|
|
2161
|
-
}
|
|
2162
|
-
|
|
2163
|
-
#search { position:relative; }
|
|
2164
|
-
#search-clear {
|
|
2165
|
-
position:absolute;
|
|
2166
|
-
top:50%;
|
|
2167
|
-
right:8px;
|
|
2168
|
-
transform:translateY(-50%);
|
|
2169
|
-
background:none;
|
|
2170
|
-
border:0;
|
|
2171
|
-
padding:0;
|
|
2172
|
-
font-size:18px;
|
|
2173
|
-
line-height:1;
|
|
2174
|
-
cursor:pointer;
|
|
2175
|
-
color:#666;
|
|
2176
|
-
}
|
|
2177
|
-
#search-clear:hover { color:#000; }
|
|
Binary file
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}}
|
|
2
|
-
|
|
3
|
-
<div id="search-results" style="display:none;">
|
|
4
|
-
<div class="search-list">{{__global.searchResults}} <span></span></div>
|
|
5
|
-
<div class="sr-items">
|
|
6
|
-
<p><i class="glyphicon glyphicon-refresh index-loading"></i></p>
|
|
7
|
-
</div>
|
|
8
|
-
<ul id="pagination" data-first={{__global.pageFirst}} data-prev={{__global.pagePrev}} data-next={{__global.pageNext}} data-last={{__global.pageLast}}></ul>
|
|
9
|
-
</div>
|
package/styles/docfx.js
DELETED
|
@@ -1,1198 +0,0 @@
|
|
|
1
|
-
// Licensed to the .NET Foundation under one or more agreements.
|
|
2
|
-
// The .NET Foundation licenses this file to you under the MIT license.
|
|
3
|
-
$(function () {
|
|
4
|
-
var active = 'active';
|
|
5
|
-
var expanded = 'in';
|
|
6
|
-
var collapsed = 'collapsed';
|
|
7
|
-
var filtered = 'filtered';
|
|
8
|
-
var show = 'show';
|
|
9
|
-
var hide = 'hide';
|
|
10
|
-
var util = new utility();
|
|
11
|
-
|
|
12
|
-
workAroundFixedHeaderForAnchors();
|
|
13
|
-
highlight();
|
|
14
|
-
enableSearch();
|
|
15
|
-
|
|
16
|
-
renderTables();
|
|
17
|
-
renderAlerts();
|
|
18
|
-
renderLinks();
|
|
19
|
-
renderNavbar();
|
|
20
|
-
renderSidebar();
|
|
21
|
-
renderAffix();
|
|
22
|
-
renderFooter();
|
|
23
|
-
renderLogo();
|
|
24
|
-
|
|
25
|
-
breakText();
|
|
26
|
-
renderTabs();
|
|
27
|
-
|
|
28
|
-
window.refresh = function (article) {
|
|
29
|
-
// Update markup result
|
|
30
|
-
if (typeof article == 'undefined' || typeof article.content == 'undefined')
|
|
31
|
-
console.error("Null Argument");
|
|
32
|
-
$("article.content").html(article.content);
|
|
33
|
-
|
|
34
|
-
highlight();
|
|
35
|
-
renderTables();
|
|
36
|
-
renderAlerts();
|
|
37
|
-
renderAffix();
|
|
38
|
-
renderTabs();
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// Add this event listener when needed
|
|
42
|
-
// window.addEventListener('content-update', contentUpdate);
|
|
43
|
-
|
|
44
|
-
function breakText() {
|
|
45
|
-
$(".xref").addClass("text-break");
|
|
46
|
-
var texts = $(".text-break");
|
|
47
|
-
texts.each(function () {
|
|
48
|
-
$(this).breakWord();
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// Styling for tables in conceptual documents using Bootstrap.
|
|
53
|
-
// See http://getbootstrap.com/css/#tables
|
|
54
|
-
function renderTables() {
|
|
55
|
-
$('table').addClass('table table-bordered table-condensed').wrap('<div class=\"table-responsive\"></div>');
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Styling for alerts.
|
|
59
|
-
function renderAlerts() {
|
|
60
|
-
$('.NOTE, .TIP').addClass('alert alert-info');
|
|
61
|
-
$('.WARNING').addClass('alert alert-warning');
|
|
62
|
-
$('.IMPORTANT, .CAUTION').addClass('alert alert-danger');
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Enable anchors for headings.
|
|
66
|
-
(function () {
|
|
67
|
-
anchors.options = {
|
|
68
|
-
placement: 'left',
|
|
69
|
-
visible: 'hover'
|
|
70
|
-
};
|
|
71
|
-
anchors.add('article h2:not(.no-anchor), article h3:not(.no-anchor), article h4:not(.no-anchor)');
|
|
72
|
-
})();
|
|
73
|
-
|
|
74
|
-
// Open links to different host in a new window.
|
|
75
|
-
function renderLinks() {
|
|
76
|
-
if ($("meta[property='docfx:newtab']").attr("content") === "true") {
|
|
77
|
-
$(document.links).filter(function () {
|
|
78
|
-
return this.hostname !== window.location.hostname;
|
|
79
|
-
}).attr('target', '_blank');
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// Enable highlight.js
|
|
84
|
-
function highlight() {
|
|
85
|
-
$('pre code').each(function (i, block) {
|
|
86
|
-
hljs.highlightElement(block);
|
|
87
|
-
});
|
|
88
|
-
$('pre code[highlight-lines]').each(function (i, block) {
|
|
89
|
-
if (block.innerHTML === "") return;
|
|
90
|
-
var lines = block.innerHTML.split('\n');
|
|
91
|
-
|
|
92
|
-
queryString = block.getAttribute('highlight-lines');
|
|
93
|
-
if (!queryString) return;
|
|
94
|
-
|
|
95
|
-
var ranges = queryString.split(',');
|
|
96
|
-
for (var j = 0, range; range = ranges[j++];) {
|
|
97
|
-
var found = range.match(/^(\d+)\-(\d+)?$/);
|
|
98
|
-
if (found) {
|
|
99
|
-
// consider region as `{startlinenumber}-{endlinenumber}`, in which {endlinenumber} is optional
|
|
100
|
-
var start = +found[1];
|
|
101
|
-
var end = +found[2];
|
|
102
|
-
if (isNaN(end) || end > lines.length) {
|
|
103
|
-
end = lines.length;
|
|
104
|
-
}
|
|
105
|
-
} else {
|
|
106
|
-
// consider region as a sigine line number
|
|
107
|
-
if (isNaN(range)) continue;
|
|
108
|
-
var start = +range;
|
|
109
|
-
var end = start;
|
|
110
|
-
}
|
|
111
|
-
if (start <= 0 || end <= 0 || start > end || start > lines.length) {
|
|
112
|
-
// skip current region if invalid
|
|
113
|
-
continue;
|
|
114
|
-
}
|
|
115
|
-
lines[start - 1] = '<span class="line-highlight">' + lines[start - 1];
|
|
116
|
-
lines[end - 1] = lines[end - 1] + '</span>';
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
block.innerHTML = lines.join('\n');
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Support full-text-search
|
|
124
|
-
function enableSearch() {
|
|
125
|
-
var query;
|
|
126
|
-
var relHref = $("meta[property='docfx\\:rel']").attr("content");
|
|
127
|
-
if (typeof relHref === 'undefined') {
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
try {
|
|
131
|
-
if(!window.Worker){
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
webWorkerSearch();
|
|
135
|
-
renderSearchBox();
|
|
136
|
-
highlightKeywords();
|
|
137
|
-
addSearchEvent();
|
|
138
|
-
} catch (e) {
|
|
139
|
-
console.error(e);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
//Adjust the position of search box in navbar
|
|
143
|
-
function renderSearchBox() {
|
|
144
|
-
autoCollapse();
|
|
145
|
-
$(window).on('resize', autoCollapse);
|
|
146
|
-
$(document).on('click', '.navbar-collapse.in', function (e) {
|
|
147
|
-
if ($(e.target).is('a')) {
|
|
148
|
-
$(this).collapse('hide');
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
function autoCollapse() {
|
|
153
|
-
var navbar = $('#autocollapse');
|
|
154
|
-
if (navbar.height() === null) {
|
|
155
|
-
setTimeout(autoCollapse, 300);
|
|
156
|
-
}
|
|
157
|
-
navbar.removeClass(collapsed);
|
|
158
|
-
if (navbar.height() > 60) {
|
|
159
|
-
navbar.addClass(collapsed);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
function webWorkerSearch() {
|
|
165
|
-
var indexReady = $.Deferred();
|
|
166
|
-
|
|
167
|
-
var worker = new Worker(relHref + 'styles/search-worker.min.js');
|
|
168
|
-
worker.onerror = function (oEvent) {
|
|
169
|
-
console.error('Error occurred at search-worker. message: ' + oEvent.message);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
worker.onmessage = function (oEvent) {
|
|
173
|
-
switch (oEvent.data.e) {
|
|
174
|
-
case 'index-ready':
|
|
175
|
-
indexReady.resolve();
|
|
176
|
-
break;
|
|
177
|
-
case 'query-ready':
|
|
178
|
-
var hits = oEvent.data.d;
|
|
179
|
-
handleSearchResults(hits);
|
|
180
|
-
break;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
indexReady.promise().done(function () {
|
|
185
|
-
$("body").bind("queryReady", function () {
|
|
186
|
-
worker.postMessage({ q: query });
|
|
187
|
-
});
|
|
188
|
-
if (query && (query.length >= 3)) {
|
|
189
|
-
worker.postMessage({ q: query });
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
// Highlight the searching keywords
|
|
195
|
-
function highlightKeywords() {
|
|
196
|
-
var q = url('?q');
|
|
197
|
-
if (q) {
|
|
198
|
-
var keywords = q.split("%20");
|
|
199
|
-
keywords.forEach(function (keyword) {
|
|
200
|
-
if (keyword !== "") {
|
|
201
|
-
$('.data-searchable *').mark(keyword);
|
|
202
|
-
$('article *').mark(keyword);
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
function addSearchEvent() {
|
|
209
|
-
$('body').on("searchEvent", function () {
|
|
210
|
-
var $input = $('#search-query');
|
|
211
|
-
var $clear = $('#search-clear');
|
|
212
|
-
if (!$input.length) return;
|
|
213
|
-
|
|
214
|
-
$input.off('keydown keypress input');
|
|
215
|
-
$clear.off('click');
|
|
216
|
-
|
|
217
|
-
// Prevent default submit
|
|
218
|
-
$input.on('keypress', function(e){ if (e.which === 13) e.preventDefault(); });
|
|
219
|
-
|
|
220
|
-
// Enter triggers search
|
|
221
|
-
$input.on('keydown', function(e){
|
|
222
|
-
if (e.key === 'Enter') {
|
|
223
|
-
e.preventDefault();
|
|
224
|
-
query = $(this).val().trim();
|
|
225
|
-
if (!query || query.length < 3) {
|
|
226
|
-
flipContents("show");
|
|
227
|
-
$('#search-results .sr-items').empty();
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
|
-
flipContents("hide");
|
|
231
|
-
$('#search-results .search-list span').text('"' + query + '"');
|
|
232
|
-
$('body').trigger('queryReady');
|
|
233
|
-
}
|
|
234
|
-
// Escape cancels
|
|
235
|
-
if (e.key === 'Escape') {
|
|
236
|
-
$input.val('');
|
|
237
|
-
query = '';
|
|
238
|
-
flipContents("show");
|
|
239
|
-
$('#search-results .sr-items').empty();
|
|
240
|
-
}
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
// If user manually deletes all text
|
|
244
|
-
$input.on('input', function(){
|
|
245
|
-
if (this.value.trim() === '') {
|
|
246
|
-
query = '';
|
|
247
|
-
flipContents("show");
|
|
248
|
-
$('#search-results .sr-items').empty();
|
|
249
|
-
}
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
// Clear button
|
|
253
|
-
$clear.on('click', function(){
|
|
254
|
-
$input.val('').focus();
|
|
255
|
-
query = '';
|
|
256
|
-
flipContents("show");
|
|
257
|
-
$('#search-results .sr-items').empty();
|
|
258
|
-
});
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
function flipContents(action) {
|
|
262
|
-
if (action === "show") {
|
|
263
|
-
$('#search-results').hide();
|
|
264
|
-
// Show real article bodies
|
|
265
|
-
$('article.content').not('#search-results').show();
|
|
266
|
-
} else {
|
|
267
|
-
$('#search-results').show();
|
|
268
|
-
// Hide only main article bodies, keep search results visible
|
|
269
|
-
$('article.content').not('#search-results').hide();
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
function relativeUrlToAbsoluteUrl(currentUrl, relativeUrl) {
|
|
274
|
-
var currentItems = currentUrl.split(/\/+/);
|
|
275
|
-
var relativeItems = relativeUrl.split(/\/+/);
|
|
276
|
-
var depth = currentItems.length - 1;
|
|
277
|
-
var items = [];
|
|
278
|
-
for (var i = 0; i < relativeItems.length; i++) {
|
|
279
|
-
if (relativeItems[i] === '..') {
|
|
280
|
-
depth--;
|
|
281
|
-
} else if (relativeItems[i] !== '.') {
|
|
282
|
-
items.push(relativeItems[i]);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
return currentItems.slice(0, depth).concat(items).join('/');
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
function extractContentBrief(content) {
|
|
289
|
-
if (!content) {
|
|
290
|
-
return
|
|
291
|
-
}
|
|
292
|
-
var briefOffset = 512;
|
|
293
|
-
var words = query.split(/\s+/g);
|
|
294
|
-
var queryIndex = content.indexOf(words[0]);
|
|
295
|
-
var briefContent;
|
|
296
|
-
if (queryIndex > briefOffset) {
|
|
297
|
-
return "..." + content.slice(queryIndex - briefOffset, queryIndex + briefOffset) + "...";
|
|
298
|
-
} else if (queryIndex <= briefOffset) {
|
|
299
|
-
return content.slice(0, queryIndex + briefOffset) + "...";
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
function handleSearchResults(hits) {
|
|
304
|
-
var numPerPage = 10;
|
|
305
|
-
var pagination = $('#pagination');
|
|
306
|
-
pagination.empty();
|
|
307
|
-
pagination.removeData("twbs-pagination");
|
|
308
|
-
if (hits.length === 0) {
|
|
309
|
-
$('#search-results>.sr-items').html('<p>No results found</p>');
|
|
310
|
-
} else {
|
|
311
|
-
pagination.twbsPagination({
|
|
312
|
-
first: pagination.data('first'),
|
|
313
|
-
prev: pagination.data('prev'),
|
|
314
|
-
next: pagination.data('next'),
|
|
315
|
-
last: pagination.data('last'),
|
|
316
|
-
totalPages: Math.ceil(hits.length / numPerPage),
|
|
317
|
-
visiblePages: 5,
|
|
318
|
-
onPageClick: function (event, page) {
|
|
319
|
-
var start = (page - 1) * numPerPage;
|
|
320
|
-
var curHits = hits.slice(start, start + numPerPage);
|
|
321
|
-
$('#search-results>.sr-items').empty().append(
|
|
322
|
-
curHits.map(function (hit) {
|
|
323
|
-
var currentUrl = window.location.href;
|
|
324
|
-
var itemRawHref = relativeUrlToAbsoluteUrl(currentUrl, relHref + hit.href);
|
|
325
|
-
var itemHref = relHref + hit.href + "?q=" + query;
|
|
326
|
-
var itemTitle = hit.title;
|
|
327
|
-
var itemBrief = extractContentBrief(hit.summary || '');
|
|
328
|
-
|
|
329
|
-
var itemNode = $('<div>').attr('class', 'sr-item');
|
|
330
|
-
var itemTitleNode = $('<div>').attr('class', 'item-title').append($('<a>').attr('href', itemHref).attr("target", "_blank").attr("rel", "noopener noreferrer").text(itemTitle));
|
|
331
|
-
var itemHrefNode = $('<div>').attr('class', 'item-href').text(itemRawHref);
|
|
332
|
-
var itemBriefNode = $('<div>').attr('class', 'item-brief').text(itemBrief);
|
|
333
|
-
itemNode.append(itemTitleNode).append(itemHrefNode).append(itemBriefNode);
|
|
334
|
-
return itemNode;
|
|
335
|
-
})
|
|
336
|
-
);
|
|
337
|
-
query.split(/\s+/).forEach(function (word) {
|
|
338
|
-
if (word !== '') {
|
|
339
|
-
$('#search-results>.sr-items *').mark(word);
|
|
340
|
-
}
|
|
341
|
-
});
|
|
342
|
-
}
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
};
|
|
347
|
-
|
|
348
|
-
// Update href in navbar
|
|
349
|
-
function renderNavbar() {
|
|
350
|
-
var navbar = $('#navbar ul')[0];
|
|
351
|
-
if (typeof (navbar) === 'undefined') {
|
|
352
|
-
loadNavbar();
|
|
353
|
-
} else {
|
|
354
|
-
$('#navbar ul a.active').parents('li').addClass(active);
|
|
355
|
-
renderBreadcrumb();
|
|
356
|
-
showSearch();
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
function showSearch() {
|
|
360
|
-
if ($('#search-results').length !== 0) {
|
|
361
|
-
$('#search').show();
|
|
362
|
-
$('body').trigger("searchEvent");
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
function loadNavbar() {
|
|
367
|
-
var navbarPath = $("meta[property='docfx\\:navrel']").attr("content");
|
|
368
|
-
if (!navbarPath) {
|
|
369
|
-
return;
|
|
370
|
-
}
|
|
371
|
-
navbarPath = navbarPath.replace(/\\/g, '/');
|
|
372
|
-
var tocPath = $("meta[property='docfx\\:tocrel']").attr("content") || '';
|
|
373
|
-
if (tocPath) tocPath = tocPath.replace(/\\/g, '/');
|
|
374
|
-
$.get(navbarPath, function (data) {
|
|
375
|
-
$(data).find("#toc>ul").appendTo("#navbar");
|
|
376
|
-
showSearch();
|
|
377
|
-
var index = navbarPath.lastIndexOf('/');
|
|
378
|
-
var navrel = '';
|
|
379
|
-
if (index > -1) {
|
|
380
|
-
navrel = navbarPath.substr(0, index + 1);
|
|
381
|
-
}
|
|
382
|
-
$('#navbar>ul').addClass('navbar-nav');
|
|
383
|
-
var currentAbsPath = util.getCurrentWindowAbsolutePath();
|
|
384
|
-
// set active item
|
|
385
|
-
$('#navbar').find('a[href]').each(function (i, e) {
|
|
386
|
-
var href = $(e).attr("href");
|
|
387
|
-
if (util.isRelativePath(href)) {
|
|
388
|
-
href = navrel + href;
|
|
389
|
-
$(e).attr("href", href);
|
|
390
|
-
|
|
391
|
-
var isActive = false;
|
|
392
|
-
var originalHref = e.name;
|
|
393
|
-
if (originalHref) {
|
|
394
|
-
originalHref = navrel + originalHref;
|
|
395
|
-
if (util.getDirectory(util.getAbsolutePath(originalHref)) === util.getDirectory(util.getAbsolutePath(tocPath))) {
|
|
396
|
-
isActive = true;
|
|
397
|
-
}
|
|
398
|
-
} else {
|
|
399
|
-
if (util.getAbsolutePath(href) === currentAbsPath) {
|
|
400
|
-
var dropdown = $(e).attr('data-toggle') == "dropdown"
|
|
401
|
-
if (!dropdown) {
|
|
402
|
-
isActive = true;
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
if (isActive) {
|
|
407
|
-
$(e).addClass(active);
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
});
|
|
411
|
-
renderNavbar();
|
|
412
|
-
});
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
function renderSidebar() {
|
|
417
|
-
var sidetoc = $('#sidetoggle .sidetoc')[0];
|
|
418
|
-
if (typeof sidetoc === 'undefined') {
|
|
419
|
-
loadToc();
|
|
420
|
-
} else {
|
|
421
|
-
registerTocEvents();
|
|
422
|
-
if ($('footer').is(':visible')) $('.sidetoc').addClass('shiftup');
|
|
423
|
-
|
|
424
|
-
var top = 0;
|
|
425
|
-
$('#toc a.active').parents('li').each(function (i, e) {
|
|
426
|
-
$(e).addClass(active).addClass(expanded);
|
|
427
|
-
$(e).children('a').addClass(active);
|
|
428
|
-
});
|
|
429
|
-
$('#toc a.active').parents('li').each(function (i, e) {
|
|
430
|
-
top += $(e).position().top;
|
|
431
|
-
});
|
|
432
|
-
$('.sidetoc').scrollTop(top - 50);
|
|
433
|
-
|
|
434
|
-
if ($('footer').is(':visible')) $('.sidetoc').addClass('shiftup');
|
|
435
|
-
renderBreadcrumb();
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
function registerTocEvents() {
|
|
439
|
-
var tocFilterInput = $('#toc_filter_input');
|
|
440
|
-
var tocFilterClearButton = $('#toc_filter_clear');
|
|
441
|
-
|
|
442
|
-
// Guard: TOC filter removed
|
|
443
|
-
if (tocFilterInput.length === 0 || tocFilterClearButton.length === 0) return;
|
|
444
|
-
|
|
445
|
-
$('.toc .nav > li > .expand-stub').click(function (e) {
|
|
446
|
-
$(e.target).parent().toggleClass(expanded);
|
|
447
|
-
});
|
|
448
|
-
$('.toc .nav > li > .expand-stub + a:not([href])').click(function (e) {
|
|
449
|
-
$(e.target).parent().toggleClass(expanded);
|
|
450
|
-
});
|
|
451
|
-
|
|
452
|
-
tocFilterInput.on('input', function () {
|
|
453
|
-
var val = this.value;
|
|
454
|
-
if (typeof Storage !== 'undefined') {
|
|
455
|
-
try { sessionStorage.filterString = val; } catch (e) {}
|
|
456
|
-
}
|
|
457
|
-
if (val === '') {
|
|
458
|
-
$('#toc li').removeClass(filtered).removeClass(hide);
|
|
459
|
-
tocFilterClearButton.fadeOut();
|
|
460
|
-
return;
|
|
461
|
-
}
|
|
462
|
-
tocFilterClearButton.fadeIn();
|
|
463
|
-
|
|
464
|
-
// Hide parent nodes initially
|
|
465
|
-
$('#toc li>a').filter(function (i, e) {
|
|
466
|
-
return $(e).siblings().length > 0;
|
|
467
|
-
}).each(function (i, anchor) {
|
|
468
|
-
var parent = $(anchor).parent();
|
|
469
|
-
parent.addClass(hide).removeClass(show).removeClass(filtered);
|
|
470
|
-
});
|
|
471
|
-
|
|
472
|
-
// Leaf nodes
|
|
473
|
-
$('#toc li>a').filter(function (i, e) {
|
|
474
|
-
return $(e).siblings().length === 0;
|
|
475
|
-
}).each(function (i, anchor) {
|
|
476
|
-
var text = $(anchor).attr('title');
|
|
477
|
-
var parent = $(anchor).parent();
|
|
478
|
-
var parentNodes = parent.parents('ul>li');
|
|
479
|
-
for (var j = 0; j < parentNodes.length; j++) {
|
|
480
|
-
var parentText = $(parentNodes[j]).children('a').attr('title');
|
|
481
|
-
if (parentText) text = parentText + '.' + text;
|
|
482
|
-
}
|
|
483
|
-
if (filterNavItem(text, val)) {
|
|
484
|
-
parent.addClass(show).removeClass(hide);
|
|
485
|
-
} else {
|
|
486
|
-
parent.addClass(hide).removeClass(show);
|
|
487
|
-
}
|
|
488
|
-
});
|
|
489
|
-
|
|
490
|
-
// Parents with visible children
|
|
491
|
-
$('#toc li>a').filter(function (i, e) {
|
|
492
|
-
return $(e).siblings().length > 0;
|
|
493
|
-
}).each(function (i, anchor) {
|
|
494
|
-
var parent = $(anchor).parent();
|
|
495
|
-
if (parent.find('li.show').length > 0) {
|
|
496
|
-
parent.addClass(show).addClass(filtered).removeClass(hide);
|
|
497
|
-
} else {
|
|
498
|
-
parent.addClass(hide).removeClass(show).removeClass(filtered);
|
|
499
|
-
}
|
|
500
|
-
});
|
|
501
|
-
|
|
502
|
-
function filterNavItem(name, text) {
|
|
503
|
-
if (!text) return true;
|
|
504
|
-
return name && name.toLowerCase().indexOf(text.toLowerCase()) > -1;
|
|
505
|
-
}
|
|
506
|
-
});
|
|
507
|
-
|
|
508
|
-
tocFilterClearButton.hide().on('click', function () {
|
|
509
|
-
tocFilterInput.val('').trigger('input');
|
|
510
|
-
if (typeof Storage !== 'undefined') {
|
|
511
|
-
try { sessionStorage.filterString = ''; } catch (e) {}
|
|
512
|
-
}
|
|
513
|
-
});
|
|
514
|
-
|
|
515
|
-
// Restore previous filter
|
|
516
|
-
if (typeof Storage !== 'undefined') {
|
|
517
|
-
try {
|
|
518
|
-
tocFilterInput.val(sessionStorage.filterString || '');
|
|
519
|
-
tocFilterInput.trigger('input');
|
|
520
|
-
} catch (e) {}
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
function loadToc() {
|
|
525
|
-
var tocPath = $("meta[property='docfx\\:tocrel']").attr("content");
|
|
526
|
-
if (!tocPath) return;
|
|
527
|
-
tocPath = tocPath.replace(/\\/g, '/');
|
|
528
|
-
$('#sidetoc').load(tocPath + " #sidetoggle > div", function () {
|
|
529
|
-
var index = tocPath.lastIndexOf('/');
|
|
530
|
-
var tocrel = index > -1 ? tocPath.substr(0, index + 1) : '';
|
|
531
|
-
var currentHref = util.getCurrentWindowAbsolutePath();
|
|
532
|
-
if (!currentHref.endsWith('.html')) currentHref += '.html';
|
|
533
|
-
|
|
534
|
-
$('#sidetoc').find('a[href]').each(function (i, e) {
|
|
535
|
-
var href = $(e).attr('href');
|
|
536
|
-
if (util.isRelativePath(href)) {
|
|
537
|
-
href = tocrel + href;
|
|
538
|
-
$(e).attr('href', href);
|
|
539
|
-
}
|
|
540
|
-
if (util.getAbsolutePath(e.href) === currentHref) {
|
|
541
|
-
$(e).addClass(active);
|
|
542
|
-
}
|
|
543
|
-
$(e).breakWord();
|
|
544
|
-
});
|
|
545
|
-
|
|
546
|
-
// Added: initialize sidebar search after TOC loads
|
|
547
|
-
if ($('#search-results').length && $('#search-query').length) {
|
|
548
|
-
$('#search').show();
|
|
549
|
-
$('body').trigger('searchEvent');
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
renderSidebar();
|
|
553
|
-
});
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
function renderBreadcrumb() {
|
|
558
|
-
var breadcrumb = [];
|
|
559
|
-
$('#navbar a.active').each(function (i, e) {
|
|
560
|
-
breadcrumb.push({
|
|
561
|
-
href: e.href,
|
|
562
|
-
name: e.innerHTML
|
|
563
|
-
});
|
|
564
|
-
})
|
|
565
|
-
$('#toc a.active').each(function (i, e) {
|
|
566
|
-
breadcrumb.push({
|
|
567
|
-
href: e.href,
|
|
568
|
-
name: e.innerHTML
|
|
569
|
-
});
|
|
570
|
-
})
|
|
571
|
-
|
|
572
|
-
var html = util.formList(breadcrumb, 'breadcrumb');
|
|
573
|
-
$('#breadcrumb').html(html);
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
//Setup Affix
|
|
577
|
-
function renderAffix() {
|
|
578
|
-
var hierarchy = getHierarchy();
|
|
579
|
-
if (!hierarchy || hierarchy.length <= 0) {
|
|
580
|
-
$("#affix").hide();
|
|
581
|
-
}
|
|
582
|
-
else {
|
|
583
|
-
var html = util.formList(hierarchy, ['nav', 'bs-docs-sidenav']);
|
|
584
|
-
$("#affix>div").empty().append(html);
|
|
585
|
-
if ($('footer').is(':visible')) {
|
|
586
|
-
$(".sideaffix").css("bottom", "70px");
|
|
587
|
-
}
|
|
588
|
-
$('#affix a').click(function(e) {
|
|
589
|
-
var scrollspy = $('[data-spy="scroll"]').data()['bs.scrollspy'];
|
|
590
|
-
var target = e.target.hash;
|
|
591
|
-
if (scrollspy && target) {
|
|
592
|
-
scrollspy.activate(target);
|
|
593
|
-
}
|
|
594
|
-
});
|
|
595
|
-
}
|
|
596
|
-
|
|
597
|
-
function getHierarchy() {
|
|
598
|
-
// supported headers are h1, h2, h3, and h4
|
|
599
|
-
var $headers = $($.map(['h1', 'h2', 'h3', 'h4'], function (h) { return ".article article " + h; }).join(", "));
|
|
600
|
-
|
|
601
|
-
// a stack of hierarchy items that are currently being built
|
|
602
|
-
var stack = [];
|
|
603
|
-
$headers.each(function (i, e) {
|
|
604
|
-
if (!e.id) {
|
|
605
|
-
return;
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
var item = {
|
|
609
|
-
name: htmlEncode($(e).text()),
|
|
610
|
-
href: "#" + e.id,
|
|
611
|
-
items: []
|
|
612
|
-
};
|
|
613
|
-
|
|
614
|
-
if (!stack.length) {
|
|
615
|
-
stack.push({ type: e.tagName, siblings: [item] });
|
|
616
|
-
return;
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
var frame = stack[stack.length - 1];
|
|
620
|
-
if (e.tagName === frame.type) {
|
|
621
|
-
frame.siblings.push(item);
|
|
622
|
-
} else if (e.tagName[1] > frame.type[1]) {
|
|
623
|
-
// we are looking at a child of the last element of frame.siblings.
|
|
624
|
-
// push a frame onto the stack. After we've finished building this item's children,
|
|
625
|
-
// we'll attach it as a child of the last element
|
|
626
|
-
stack.push({ type: e.tagName, siblings: [item] });
|
|
627
|
-
} else { // e.tagName[1] < frame.type[1]
|
|
628
|
-
// we are looking at a sibling of an ancestor of the current item.
|
|
629
|
-
// pop frames from the stack, building items as we go, until we reach the correct level at which to attach this item.
|
|
630
|
-
while (e.tagName[1] < stack[stack.length - 1].type[1]) {
|
|
631
|
-
buildParent();
|
|
632
|
-
}
|
|
633
|
-
if (e.tagName === stack[stack.length - 1].type) {
|
|
634
|
-
stack[stack.length - 1].siblings.push(item);
|
|
635
|
-
} else {
|
|
636
|
-
stack.push({ type: e.tagName, siblings: [item] });
|
|
637
|
-
}
|
|
638
|
-
}
|
|
639
|
-
});
|
|
640
|
-
while (stack.length > 1) {
|
|
641
|
-
buildParent();
|
|
642
|
-
}
|
|
643
|
-
|
|
644
|
-
function buildParent() {
|
|
645
|
-
var childrenToAttach = stack.pop();
|
|
646
|
-
var parentFrame = stack[stack.length - 1];
|
|
647
|
-
var parent = parentFrame.siblings[parentFrame.siblings.length - 1];
|
|
648
|
-
$.each(childrenToAttach.siblings, function (i, child) {
|
|
649
|
-
parent.items.push(child);
|
|
650
|
-
});
|
|
651
|
-
}
|
|
652
|
-
if (stack.length > 0) {
|
|
653
|
-
|
|
654
|
-
var topLevel = stack.pop().siblings;
|
|
655
|
-
if (topLevel.length === 1) { // if there's only one topmost header, dump it
|
|
656
|
-
return topLevel[0].items;
|
|
657
|
-
}
|
|
658
|
-
return topLevel;
|
|
659
|
-
}
|
|
660
|
-
return undefined;
|
|
661
|
-
}
|
|
662
|
-
|
|
663
|
-
function htmlEncode(str) {
|
|
664
|
-
if (!str) return str;
|
|
665
|
-
return str
|
|
666
|
-
.replace(/&/g, '&')
|
|
667
|
-
.replace(/"/g, '"')
|
|
668
|
-
.replace(/'/g, ''')
|
|
669
|
-
.replace(/</g, '<')
|
|
670
|
-
.replace(/>/g, '>');
|
|
671
|
-
}
|
|
672
|
-
|
|
673
|
-
function htmlDecode(value) {
|
|
674
|
-
if (!str) return str;
|
|
675
|
-
return value
|
|
676
|
-
.replace(/"/g, '"')
|
|
677
|
-
.replace(/'/g, "'")
|
|
678
|
-
.replace(/</g, '<')
|
|
679
|
-
.replace(/>/g, '>')
|
|
680
|
-
.replace(/&/g, '&');
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
function cssEscape(str) {
|
|
684
|
-
// see: http://stackoverflow.com/questions/2786538/need-to-escape-a-special-character-in-a-jquery-selector-string#answer-2837646
|
|
685
|
-
if (!str) return str;
|
|
686
|
-
return str
|
|
687
|
-
.replace(/[!"#$%&'()*+,.\/:;<=>?@[\\\]^`{|}~]/g, "\\$&");
|
|
688
|
-
}
|
|
689
|
-
}
|
|
690
|
-
|
|
691
|
-
// Show footer
|
|
692
|
-
function renderFooter() {
|
|
693
|
-
initFooter();
|
|
694
|
-
$(window).on("scroll", showFooterCore);
|
|
695
|
-
|
|
696
|
-
function initFooter() {
|
|
697
|
-
if (needFooter()) {
|
|
698
|
-
shiftUpBottomCss();
|
|
699
|
-
$("footer").show();
|
|
700
|
-
} else {
|
|
701
|
-
resetBottomCss();
|
|
702
|
-
$("footer").hide();
|
|
703
|
-
}
|
|
704
|
-
}
|
|
705
|
-
|
|
706
|
-
function showFooterCore() {
|
|
707
|
-
if (needFooter()) {
|
|
708
|
-
shiftUpBottomCss();
|
|
709
|
-
$("footer").fadeIn();
|
|
710
|
-
} else {
|
|
711
|
-
resetBottomCss();
|
|
712
|
-
$("footer").fadeOut();
|
|
713
|
-
}
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
function needFooter() {
|
|
717
|
-
var scrollHeight = $(document).height();
|
|
718
|
-
var scrollPosition = $(window).height() + $(window).scrollTop();
|
|
719
|
-
return (scrollHeight - scrollPosition) < 1;
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
function resetBottomCss() {
|
|
723
|
-
$(".sidetoc").removeClass("shiftup");
|
|
724
|
-
$(".sideaffix").removeClass("shiftup");
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
function shiftUpBottomCss() {
|
|
728
|
-
$(".sidetoc").addClass("shiftup");
|
|
729
|
-
$(".sideaffix").addClass("shiftup");
|
|
730
|
-
}
|
|
731
|
-
}
|
|
732
|
-
|
|
733
|
-
function renderLogo() {
|
|
734
|
-
// For LOGO SVG
|
|
735
|
-
// Replace SVG with inline SVG
|
|
736
|
-
// http://stackoverflow.com/questions/11978995/how-to-change-color-of-svg-image-using-css-jquery-svg-image-replacement
|
|
737
|
-
jQuery('img.svg').each(function () {
|
|
738
|
-
var $img = jQuery(this);
|
|
739
|
-
var imgID = $img.attr('id');
|
|
740
|
-
var imgClass = $img.attr('class');
|
|
741
|
-
var imgURL = $img.attr('src');
|
|
742
|
-
|
|
743
|
-
jQuery.get(imgURL, function (data) {
|
|
744
|
-
// Get the SVG tag, ignore the rest
|
|
745
|
-
var $svg = jQuery(data).find('svg');
|
|
746
|
-
|
|
747
|
-
// Add replaced image's ID to the new SVG
|
|
748
|
-
if (typeof imgID !== 'undefined') {
|
|
749
|
-
$svg = $svg.attr('id', imgID);
|
|
750
|
-
}
|
|
751
|
-
// Add replaced image's classes to the new SVG
|
|
752
|
-
if (typeof imgClass !== 'undefined') {
|
|
753
|
-
$svg = $svg.attr('class', imgClass + ' replaced-svg');
|
|
754
|
-
}
|
|
755
|
-
|
|
756
|
-
// Remove any invalid XML tags as per http://validator.w3.org
|
|
757
|
-
$svg = $svg.removeAttr('xmlns:a');
|
|
758
|
-
|
|
759
|
-
// Replace image with new SVG
|
|
760
|
-
$img.replaceWith($svg);
|
|
761
|
-
|
|
762
|
-
}, 'xml');
|
|
763
|
-
});
|
|
764
|
-
}
|
|
765
|
-
|
|
766
|
-
function renderTabs() {
|
|
767
|
-
var contentAttrs = {
|
|
768
|
-
id: 'data-bi-id',
|
|
769
|
-
name: 'data-bi-name',
|
|
770
|
-
type: 'data-bi-type'
|
|
771
|
-
};
|
|
772
|
-
|
|
773
|
-
var Tab = (function () {
|
|
774
|
-
function Tab(li, a, section) {
|
|
775
|
-
this.li = li;
|
|
776
|
-
this.a = a;
|
|
777
|
-
this.section = section;
|
|
778
|
-
}
|
|
779
|
-
Object.defineProperty(Tab.prototype, "tabIds", {
|
|
780
|
-
get: function () { return this.a.getAttribute('data-tab').split(' '); },
|
|
781
|
-
enumerable: true,
|
|
782
|
-
configurable: true
|
|
783
|
-
});
|
|
784
|
-
Object.defineProperty(Tab.prototype, "condition", {
|
|
785
|
-
get: function () { return this.a.getAttribute('data-condition'); },
|
|
786
|
-
enumerable: true,
|
|
787
|
-
configurable: true
|
|
788
|
-
});
|
|
789
|
-
Object.defineProperty(Tab.prototype, "visible", {
|
|
790
|
-
get: function () { return !this.li.hasAttribute('hidden'); },
|
|
791
|
-
set: function (value) {
|
|
792
|
-
if (value) {
|
|
793
|
-
this.li.removeAttribute('hidden');
|
|
794
|
-
this.li.removeAttribute('aria-hidden');
|
|
795
|
-
}
|
|
796
|
-
else {
|
|
797
|
-
this.li.setAttribute('hidden', 'hidden');
|
|
798
|
-
this.li.setAttribute('aria-hidden', 'true');
|
|
799
|
-
}
|
|
800
|
-
},
|
|
801
|
-
enumerable: true,
|
|
802
|
-
configurable: true
|
|
803
|
-
});
|
|
804
|
-
Object.defineProperty(Tab.prototype, "selected", {
|
|
805
|
-
get: function () { return !this.section.hasAttribute('hidden'); },
|
|
806
|
-
set: function (value) {
|
|
807
|
-
if (value) {
|
|
808
|
-
this.a.setAttribute('aria-selected', 'true');
|
|
809
|
-
this.a.tabIndex = 0;
|
|
810
|
-
this.section.removeAttribute('hidden');
|
|
811
|
-
this.section.removeAttribute('aria-hidden');
|
|
812
|
-
}
|
|
813
|
-
else {
|
|
814
|
-
this.a.setAttribute('aria-selected', 'false');
|
|
815
|
-
this.a.tabIndex = -1;
|
|
816
|
-
this.section.setAttribute('hidden', 'hidden');
|
|
817
|
-
this.section.setAttribute('aria-hidden', 'true');
|
|
818
|
-
}
|
|
819
|
-
},
|
|
820
|
-
enumerable: true,
|
|
821
|
-
configurable: true
|
|
822
|
-
});
|
|
823
|
-
Tab.prototype.focus = function () {
|
|
824
|
-
this.a.focus();
|
|
825
|
-
};
|
|
826
|
-
return Tab;
|
|
827
|
-
}());
|
|
828
|
-
|
|
829
|
-
initTabs(document.body);
|
|
830
|
-
|
|
831
|
-
function initTabs(container) {
|
|
832
|
-
var queryStringTabs = readTabsQueryStringParam();
|
|
833
|
-
var elements = container.querySelectorAll('.tabGroup');
|
|
834
|
-
var state = { groups: [], selectedTabs: [] };
|
|
835
|
-
for (var i = 0; i < elements.length; i++) {
|
|
836
|
-
var group = initTabGroup(elements.item(i));
|
|
837
|
-
if (!group.independent) {
|
|
838
|
-
updateVisibilityAndSelection(group, state);
|
|
839
|
-
state.groups.push(group);
|
|
840
|
-
}
|
|
841
|
-
}
|
|
842
|
-
container.addEventListener('click', function (event) { return handleClick(event, state); });
|
|
843
|
-
if (state.groups.length === 0) {
|
|
844
|
-
return state;
|
|
845
|
-
}
|
|
846
|
-
selectTabs(queryStringTabs, container);
|
|
847
|
-
updateTabsQueryStringParam(state);
|
|
848
|
-
notifyContentUpdated();
|
|
849
|
-
return state;
|
|
850
|
-
}
|
|
851
|
-
|
|
852
|
-
function initTabGroup(element) {
|
|
853
|
-
var group = {
|
|
854
|
-
independent: element.hasAttribute('data-tab-group-independent'),
|
|
855
|
-
tabs: []
|
|
856
|
-
};
|
|
857
|
-
var li = element.firstElementChild.firstElementChild;
|
|
858
|
-
while (li) {
|
|
859
|
-
var a = li.firstElementChild;
|
|
860
|
-
a.setAttribute(contentAttrs.name, 'tab');
|
|
861
|
-
var dataTab = a.getAttribute('data-tab').replace(/\+/g, ' ');
|
|
862
|
-
a.setAttribute('data-tab', dataTab);
|
|
863
|
-
var section = element.querySelector("[id=\"" + a.getAttribute('aria-controls') + "\"]");
|
|
864
|
-
var tab = new Tab(li, a, section);
|
|
865
|
-
group.tabs.push(tab);
|
|
866
|
-
li = li.nextElementSibling;
|
|
867
|
-
}
|
|
868
|
-
element.setAttribute(contentAttrs.name, 'tab-group');
|
|
869
|
-
element.tabGroup = group;
|
|
870
|
-
return group;
|
|
871
|
-
}
|
|
872
|
-
|
|
873
|
-
function updateVisibilityAndSelection(group, state) {
|
|
874
|
-
var anySelected = false;
|
|
875
|
-
var firstVisibleTab;
|
|
876
|
-
for (var _i = 0, _a = group.tabs; _i < _a.length; _i++) {
|
|
877
|
-
var tab = _a[_i];
|
|
878
|
-
tab.visible = tab.condition === null || state.selectedTabs.indexOf(tab.condition) !== -1;
|
|
879
|
-
if (tab.visible) {
|
|
880
|
-
if (!firstVisibleTab) {
|
|
881
|
-
firstVisibleTab = tab;
|
|
882
|
-
}
|
|
883
|
-
}
|
|
884
|
-
tab.selected = tab.visible && arraysIntersect(state.selectedTabs, tab.tabIds);
|
|
885
|
-
anySelected = anySelected || tab.selected;
|
|
886
|
-
}
|
|
887
|
-
if (!anySelected) {
|
|
888
|
-
for (var _b = 0, _c = group.tabs; _b < _c.length; _b++) {
|
|
889
|
-
var tabIds = _c[_b].tabIds;
|
|
890
|
-
for (var _d = 0, tabIds_1 = tabIds; _d < tabIds_1.length; _d++) {
|
|
891
|
-
var tabId = tabIds_1[_d];
|
|
892
|
-
var index = state.selectedTabs.indexOf(tabId);
|
|
893
|
-
if (index === -1) {
|
|
894
|
-
continue;
|
|
895
|
-
}
|
|
896
|
-
state.selectedTabs.splice(index, 1);
|
|
897
|
-
}
|
|
898
|
-
}
|
|
899
|
-
var tab = firstVisibleTab;
|
|
900
|
-
tab.selected = true;
|
|
901
|
-
state.selectedTabs.push(tab.tabIds[0]);
|
|
902
|
-
}
|
|
903
|
-
}
|
|
904
|
-
|
|
905
|
-
function getTabInfoFromEvent(event) {
|
|
906
|
-
if (!(event.target instanceof HTMLElement)) {
|
|
907
|
-
return null;
|
|
908
|
-
}
|
|
909
|
-
var anchor = event.target.closest('a[data-tab]');
|
|
910
|
-
if (anchor === null) {
|
|
911
|
-
return null;
|
|
912
|
-
}
|
|
913
|
-
var tabIds = anchor.getAttribute('data-tab').split(' ');
|
|
914
|
-
var group = anchor.parentElement.parentElement.parentElement.tabGroup;
|
|
915
|
-
if (group === undefined) {
|
|
916
|
-
return null;
|
|
917
|
-
}
|
|
918
|
-
return { tabIds: tabIds, group: group, anchor: anchor };
|
|
919
|
-
}
|
|
920
|
-
|
|
921
|
-
function handleClick(event, state) {
|
|
922
|
-
var info = getTabInfoFromEvent(event);
|
|
923
|
-
if (info === null) {
|
|
924
|
-
return;
|
|
925
|
-
}
|
|
926
|
-
event.preventDefault();
|
|
927
|
-
info.anchor.href = 'javascript:';
|
|
928
|
-
setTimeout(function () { return info.anchor.href = '#' + info.anchor.getAttribute('aria-controls'); });
|
|
929
|
-
var tabIds = info.tabIds, group = info.group;
|
|
930
|
-
var originalTop = info.anchor.getBoundingClientRect().top;
|
|
931
|
-
if (group.independent) {
|
|
932
|
-
for (var _i = 0, _a = group.tabs; _i < _a.length; _i++) {
|
|
933
|
-
var tab = _a[_i];
|
|
934
|
-
tab.selected = arraysIntersect(tab.tabIds, tabIds);
|
|
935
|
-
}
|
|
936
|
-
}
|
|
937
|
-
else {
|
|
938
|
-
if (arraysIntersect(state.selectedTabs, tabIds)) {
|
|
939
|
-
return;
|
|
940
|
-
}
|
|
941
|
-
var previousTabId = group.tabs.filter(function (t) { return t.selected; })[0].tabIds[0];
|
|
942
|
-
state.selectedTabs.splice(state.selectedTabs.indexOf(previousTabId), 1, tabIds[0]);
|
|
943
|
-
for (var _b = 0, _c = state.groups; _b < _c.length; _b++) {
|
|
944
|
-
var group_1 = _c[_b];
|
|
945
|
-
updateVisibilityAndSelection(group_1, state);
|
|
946
|
-
}
|
|
947
|
-
updateTabsQueryStringParam(state);
|
|
948
|
-
}
|
|
949
|
-
notifyContentUpdated();
|
|
950
|
-
var top = info.anchor.getBoundingClientRect().top;
|
|
951
|
-
if (top !== originalTop && event instanceof MouseEvent) {
|
|
952
|
-
window.scrollTo(0, window.pageYOffset + top - originalTop);
|
|
953
|
-
}
|
|
954
|
-
}
|
|
955
|
-
|
|
956
|
-
function selectTabs(tabIds) {
|
|
957
|
-
for (var _i = 0, tabIds_1 = tabIds; _i < tabIds_1.length; _i++) {
|
|
958
|
-
var tabId = tabIds_1[_i];
|
|
959
|
-
var a = document.querySelector(".tabGroup > ul > li > a[data-tab=\"" + tabId + "\"]:not([hidden])");
|
|
960
|
-
if (a === null) {
|
|
961
|
-
return;
|
|
962
|
-
}
|
|
963
|
-
a.dispatchEvent(new CustomEvent('click', { bubbles: true }));
|
|
964
|
-
}
|
|
965
|
-
}
|
|
966
|
-
|
|
967
|
-
function readTabsQueryStringParam() {
|
|
968
|
-
var qs = parseQueryString(window.location.search);
|
|
969
|
-
var t = qs.tabs;
|
|
970
|
-
if (t === undefined || t === '') {
|
|
971
|
-
return [];
|
|
972
|
-
}
|
|
973
|
-
return t.split(',');
|
|
974
|
-
}
|
|
975
|
-
|
|
976
|
-
function updateTabsQueryStringParam(state) {
|
|
977
|
-
var qs = parseQueryString(window.location.search);
|
|
978
|
-
qs.tabs = state.selectedTabs.join();
|
|
979
|
-
var url = location.protocol + "//" + location.host + location.pathname + "?" + toQueryString(qs) + location.hash;
|
|
980
|
-
if (location.href === url) {
|
|
981
|
-
return;
|
|
982
|
-
}
|
|
983
|
-
history.replaceState({}, document.title, url);
|
|
984
|
-
}
|
|
985
|
-
|
|
986
|
-
function toQueryString(args) {
|
|
987
|
-
var parts = [];
|
|
988
|
-
for (var name_1 in args) {
|
|
989
|
-
if (args.hasOwnProperty(name_1) && args[name_1] !== '' && args[name_1] !== null && args[name_1] !== undefined) {
|
|
990
|
-
parts.push(encodeURIComponent(name_1) + '=' + encodeURIComponent(args[name_1]));
|
|
991
|
-
}
|
|
992
|
-
}
|
|
993
|
-
return parts.join('&');
|
|
994
|
-
}
|
|
995
|
-
|
|
996
|
-
function parseQueryString(queryString) {
|
|
997
|
-
var match;
|
|
998
|
-
var pl = /\+/g;
|
|
999
|
-
var search = /([^&=]+)=?([^&]*)/g;
|
|
1000
|
-
var decode = function (s) { return decodeURIComponent(s.replace(pl, ' ')); };
|
|
1001
|
-
if (queryString === undefined) {
|
|
1002
|
-
queryString = '';
|
|
1003
|
-
}
|
|
1004
|
-
queryString = queryString.substring(1);
|
|
1005
|
-
var urlParams = {};
|
|
1006
|
-
while (match = search.exec(queryString)) {
|
|
1007
|
-
urlParams[decode(match[1])] = decode(match[2]);
|
|
1008
|
-
}
|
|
1009
|
-
return urlParams;
|
|
1010
|
-
}
|
|
1011
|
-
|
|
1012
|
-
function arraysIntersect(a, b) {
|
|
1013
|
-
for (var _i = 0, a_1 = a; _i < a_1.length; _i++) {
|
|
1014
|
-
var itemA = a_1[_i];
|
|
1015
|
-
for (var _a = 0, b_1 = b; _a < b_1.length; _a++) {
|
|
1016
|
-
var itemB = b_1[_a];
|
|
1017
|
-
if (itemA === itemB) {
|
|
1018
|
-
return true;
|
|
1019
|
-
}
|
|
1020
|
-
}
|
|
1021
|
-
}
|
|
1022
|
-
return false;
|
|
1023
|
-
}
|
|
1024
|
-
|
|
1025
|
-
function notifyContentUpdated() {
|
|
1026
|
-
// Dispatch this event when needed
|
|
1027
|
-
// window.dispatchEvent(new CustomEvent('content-update'));
|
|
1028
|
-
}
|
|
1029
|
-
}
|
|
1030
|
-
|
|
1031
|
-
function utility() {
|
|
1032
|
-
this.getAbsolutePath = getAbsolutePath;
|
|
1033
|
-
this.isRelativePath = isRelativePath;
|
|
1034
|
-
this.isAbsolutePath = isAbsolutePath;
|
|
1035
|
-
this.getCurrentWindowAbsolutePath = getCurrentWindowAbsolutePath;
|
|
1036
|
-
this.getDirectory = getDirectory;
|
|
1037
|
-
this.formList = formList;
|
|
1038
|
-
|
|
1039
|
-
function getAbsolutePath(href) {
|
|
1040
|
-
if (isAbsolutePath(href)) return href;
|
|
1041
|
-
var currentAbsPath = getCurrentWindowAbsolutePath();
|
|
1042
|
-
var stack = currentAbsPath.split("/");
|
|
1043
|
-
stack.pop();
|
|
1044
|
-
var parts = href.split("/");
|
|
1045
|
-
for (var i=0; i< parts.length; i++) {
|
|
1046
|
-
if (parts[i] == ".") continue;
|
|
1047
|
-
if (parts[i] == ".." && stack.length > 0)
|
|
1048
|
-
stack.pop();
|
|
1049
|
-
else
|
|
1050
|
-
stack.push(parts[i]);
|
|
1051
|
-
}
|
|
1052
|
-
var p = stack.join("/");
|
|
1053
|
-
return p;
|
|
1054
|
-
}
|
|
1055
|
-
|
|
1056
|
-
function isRelativePath(href) {
|
|
1057
|
-
if (href === undefined || href === '' || href[0] === '/') {
|
|
1058
|
-
return false;
|
|
1059
|
-
}
|
|
1060
|
-
return !isAbsolutePath(href);
|
|
1061
|
-
}
|
|
1062
|
-
|
|
1063
|
-
function isAbsolutePath(href) {
|
|
1064
|
-
return (/^(?:[a-z]+:)?\/\//i).test(href);
|
|
1065
|
-
}
|
|
1066
|
-
|
|
1067
|
-
function getCurrentWindowAbsolutePath() {
|
|
1068
|
-
return window.location.origin + window.location.pathname;
|
|
1069
|
-
}
|
|
1070
|
-
function getDirectory(href) {
|
|
1071
|
-
if (!href) return '';
|
|
1072
|
-
var index = href.lastIndexOf('/');
|
|
1073
|
-
if (index == -1) return '';
|
|
1074
|
-
if (index > -1) {
|
|
1075
|
-
return href.substr(0, index);
|
|
1076
|
-
}
|
|
1077
|
-
}
|
|
1078
|
-
|
|
1079
|
-
function formList(item, classes) {
|
|
1080
|
-
var level = 1;
|
|
1081
|
-
var model = {
|
|
1082
|
-
items: item
|
|
1083
|
-
};
|
|
1084
|
-
var cls = [].concat(classes).join(" ");
|
|
1085
|
-
return getList(model, cls);
|
|
1086
|
-
|
|
1087
|
-
function getList(model, cls) {
|
|
1088
|
-
if (!model || !model.items) return null;
|
|
1089
|
-
var l = model.items.length;
|
|
1090
|
-
if (l === 0) return null;
|
|
1091
|
-
var html = '<ul class="level' + level + ' ' + (cls || '') + '">';
|
|
1092
|
-
level++;
|
|
1093
|
-
for (var i = 0; i < l; i++) {
|
|
1094
|
-
var item = model.items[i];
|
|
1095
|
-
var href = item.href;
|
|
1096
|
-
var name = item.name;
|
|
1097
|
-
if (!name) continue;
|
|
1098
|
-
html += href ? '<li><a href="' + href + '">' + name + '</a>' : '<li>' + name;
|
|
1099
|
-
html += getList(item, cls) || '';
|
|
1100
|
-
html += '</li>';
|
|
1101
|
-
}
|
|
1102
|
-
html += '</ul>';
|
|
1103
|
-
return html;
|
|
1104
|
-
}
|
|
1105
|
-
}
|
|
1106
|
-
|
|
1107
|
-
/**
|
|
1108
|
-
* Add <wbr> into long word.
|
|
1109
|
-
* @param {String} text - The word to break. It should be in plain text without HTML tags.
|
|
1110
|
-
*/
|
|
1111
|
-
function breakPlainText(text) {
|
|
1112
|
-
if (!text) return text;
|
|
1113
|
-
return text.replace(/([a-z])([A-Z])|(\.)(\w)/g, '$1$3<wbr>$2$4')
|
|
1114
|
-
}
|
|
1115
|
-
|
|
1116
|
-
/**
|
|
1117
|
-
* Add <wbr> into long word. The jQuery element should contain no html tags.
|
|
1118
|
-
* If the jQuery element contains tags, this function will not change the element.
|
|
1119
|
-
*/
|
|
1120
|
-
$.fn.breakWord = function () {
|
|
1121
|
-
if (!this.html().match(/(<\w*)((\s\/>)|(.*<\/\w*>))/g)) {
|
|
1122
|
-
this.html(function (index, text) {
|
|
1123
|
-
return breakPlainText(text);
|
|
1124
|
-
})
|
|
1125
|
-
}
|
|
1126
|
-
return this;
|
|
1127
|
-
}
|
|
1128
|
-
}
|
|
1129
|
-
|
|
1130
|
-
// adjusted from https://stackoverflow.com/a/13067009/1523776
|
|
1131
|
-
function workAroundFixedHeaderForAnchors() {
|
|
1132
|
-
var HISTORY_SUPPORT = !!(history && history.pushState);
|
|
1133
|
-
var ANCHOR_REGEX = /^#[^ ]+$/;
|
|
1134
|
-
|
|
1135
|
-
function getFixedOffset() {
|
|
1136
|
-
return $('header').first().height();
|
|
1137
|
-
}
|
|
1138
|
-
|
|
1139
|
-
/**
|
|
1140
|
-
* If the provided href is an anchor which resolves to an element on the
|
|
1141
|
-
* page, scroll to it.
|
|
1142
|
-
* @param {String} href
|
|
1143
|
-
* @return {Boolean} - Was the href an anchor.
|
|
1144
|
-
*/
|
|
1145
|
-
function scrollIfAnchor(href, pushToHistory) {
|
|
1146
|
-
var match, rect, anchorOffset;
|
|
1147
|
-
|
|
1148
|
-
if (!ANCHOR_REGEX.test(href)) {
|
|
1149
|
-
return false;
|
|
1150
|
-
}
|
|
1151
|
-
|
|
1152
|
-
match = document.getElementById(href.slice(1));
|
|
1153
|
-
|
|
1154
|
-
if (match) {
|
|
1155
|
-
rect = match.getBoundingClientRect();
|
|
1156
|
-
anchorOffset = window.pageYOffset + rect.top - getFixedOffset();
|
|
1157
|
-
window.scrollTo(window.pageXOffset, anchorOffset);
|
|
1158
|
-
|
|
1159
|
-
// Add the state to history as-per normal anchor links
|
|
1160
|
-
if (HISTORY_SUPPORT && pushToHistory) {
|
|
1161
|
-
history.pushState({}, document.title, location.pathname + href);
|
|
1162
|
-
}
|
|
1163
|
-
}
|
|
1164
|
-
|
|
1165
|
-
return !!match;
|
|
1166
|
-
}
|
|
1167
|
-
|
|
1168
|
-
/**
|
|
1169
|
-
* Attempt to scroll to the current location's hash.
|
|
1170
|
-
*/
|
|
1171
|
-
function scrollToCurrent() {
|
|
1172
|
-
scrollIfAnchor(window.location.hash);
|
|
1173
|
-
}
|
|
1174
|
-
|
|
1175
|
-
/**
|
|
1176
|
-
* If the click event's target was an anchor, fix the scroll position.
|
|
1177
|
-
*/
|
|
1178
|
-
function delegateAnchors(e) {
|
|
1179
|
-
var elem = e.target;
|
|
1180
|
-
|
|
1181
|
-
if (scrollIfAnchor(elem.getAttribute('href'), true)) {
|
|
1182
|
-
e.preventDefault();
|
|
1183
|
-
}
|
|
1184
|
-
}
|
|
1185
|
-
|
|
1186
|
-
$(window).on('hashchange', scrollToCurrent);
|
|
1187
|
-
|
|
1188
|
-
$(window).on('load', function () {
|
|
1189
|
-
// scroll to the anchor if present, offset by the header
|
|
1190
|
-
scrollToCurrent();
|
|
1191
|
-
});
|
|
1192
|
-
|
|
1193
|
-
$(document).ready(function () {
|
|
1194
|
-
// Exclude tabbed content case
|
|
1195
|
-
$('a:not([data-tab])').click(function (e) { delegateAnchors(e); });
|
|
1196
|
-
});
|
|
1197
|
-
}
|
|
1198
|
-
});
|
package/toc.html.primary.tmpl
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}}
|
|
2
|
-
|
|
3
|
-
<div id="sidetoggle">
|
|
4
|
-
<div>
|
|
5
|
-
{{^_disableSideFilter}}
|
|
6
|
-
<div class="sidefilter">
|
|
7
|
-
<div class="docs-search">
|
|
8
|
-
<form role="search" id="search" class="side-search">
|
|
9
|
-
<input type="text" id="search-query" placeholder="Search this site" autocomplete="off" aria-label="Search the site">
|
|
10
|
-
<button type="button" id="search-clear" aria-label="Clear search" style="position:absolute;right:8px;background:none;border:0;cursor:pointer;font-size:16px;line-height:1;color:#666;">×</button>
|
|
11
|
-
</form>
|
|
12
|
-
</div>
|
|
13
|
-
</div>
|
|
14
|
-
{{/_disableSideFilter}}
|
|
15
|
-
<div class="sidetoc">
|
|
16
|
-
<div class="toc" id="toc">
|
|
17
|
-
{{^leaf}}
|
|
18
|
-
{{>partials/li}}
|
|
19
|
-
{{/leaf}}
|
|
20
|
-
</div>
|
|
21
|
-
</div>
|
|
22
|
-
</div>
|
|
23
|
-
</div>
|
|
24
|
-
|
|
25
|
-
<script>
|
|
26
|
-
(function() {
|
|
27
|
-
// Wait for DOM and search to be ready
|
|
28
|
-
$(document).ready(function() {
|
|
29
|
-
var searchInput = $('#search-query');
|
|
30
|
-
if (!searchInput.length) return;
|
|
31
|
-
|
|
32
|
-
// Trigger the existing searchEvent
|
|
33
|
-
$('body').trigger('searchEvent');
|
|
34
|
-
|
|
35
|
-
// Ensure search input triggers query
|
|
36
|
-
searchInput.on('input', function() {
|
|
37
|
-
var query = $(this).val();
|
|
38
|
-
if (query && query.length >= 3) {
|
|
39
|
-
$('body').trigger('queryReady');
|
|
40
|
-
$('#search-results>.search-list>span').text('"' + query + '"');
|
|
41
|
-
} else if (query === '') {
|
|
42
|
-
$('.hide-when-search').show();
|
|
43
|
-
$('#search-results').hide();
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
})();
|
|
48
|
-
</script>
|