@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.
@@ -19,7 +19,12 @@
19
19
  {{>partials/breadcrumb}}
20
20
  {{/_enableBreadcrumb}}
21
21
  </header>
22
- <div role="main" class="docs-container body-content">
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@healthcatalyst/catalyst-docfx-template",
3
- "version": "1.0.153",
3
+ "version": "1.0.154",
4
4
  "license": "MIT",
5
5
  "description": "A DocFX Template patching the Default template.",
6
6
  "publishConfig": {
@@ -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: 100%;
1163
- /*padding: 2px 2px 2px 10px;*/
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; }
@@ -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, '&amp;')
667
- .replace(/"/g, '&quot;')
668
- .replace(/'/g, '&#39;')
669
- .replace(/</g, '&lt;')
670
- .replace(/>/g, '&gt;');
671
- }
672
-
673
- function htmlDecode(value) {
674
- if (!str) return str;
675
- return value
676
- .replace(/&quot;/g, '"')
677
- .replace(/&#39;/g, "'")
678
- .replace(/&lt;/g, '<')
679
- .replace(/&gt;/g, '>')
680
- .replace(/&amp;/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
- });
@@ -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>